📅 Original date posted:2012-03-22
📝 Original message:>
> 1- How close is Libcoin with original Bitcoin? I mean, the output is a little different, the bitcoind help output was disabled and, I'm afraid that Libcoin can possibly being distant from Bitcoin in the future... That can happen?!
Well, I hope at some point to push libcoin to bitcoin, but that is not for me to decide ;)
Anyway, I will strive at keeping the two synced - currently, they are almost in sync - even bip 16 is part of libcoin, but I have postponed generation of P2SH till after we were certain of 16 vs 17. So that is high on the list.
I did a presentation of libcoin at BitCon12 in San Antonio - I will trow the slides at the web-side asap.
>
> 2- Do you have plans to update Libcoin on every new upstream Bitcoin release? How fast will be this updates? Do you need more resources/people working on it?
More people is always nice! I am using libcoin for my own bitcoin project, so that should guarantee that it will be kept up to date.
> Another questions not involved directly with Libcoin/Bitcoin but, I'll need it for my future Bitcoin projects, and Libcoin is on my radar:
>
> 1- Do you know about Diaspora* Project?
Yes, I even have an account :)
> 2- Do you have skills in Ruby on Rails development?
Nope...
/M
>
>
> Thank you!
> Thiago
>
> 2012/3/3 Michael Grønager <gronager at ceptacle.com>
> Hi Martin,
>
> There are a couple of options of doing similarly...
>
> In the libcoin repository you will find some code for btc and btcd, it is some code I wrote a while ago and it needs to be updated. It functions as a bitcoind master and slave. The btcd keeps the blockchain, but no wallet. btc keeps the wallet and contact the btcd to get transaction info (like send an address and get its transactions or send a transaction id and get its details). It works (or worked when I wrote them) with the wallet.dat, but needs a little update.
>
> You could e.g. run one btcd on the machine and several btc instances to get the functionality you asked for.
>
> Further, btcd also enables a web wallet, where the private keys are stored in your browsers local-store.
>
> I will get the application updated, but most likely in a bit other setup as it is something I intend to marketize in the near future.
>
> Hope this answers your question.
>
> Cheers,
>
> Michael
>
> On 03/03/2012, at 02:04, Martinx - ジェームズ wrote:
>
> > Michael,
> >
> > libcoin is AWESOME! Thanks!!!
> >
> > Can I do the following scenario with libcoin ? :
> >
> > 1- Create a regular Linux user called "blockchain", with home dir pointed to /var/lib/libcoin/ (more or like Ubuntu/Debian mysql does);
> >
> > 2- Start "bitcoind" under user "blockchain" (the Bitcoin blockchain) will be downloaded to /var/lib/libcoin/bitcoin/ directory);
> >
> > 3- As another regular user, called "michael", I would like to run "bitcoind" too but, I do not want to re-download the blockchain to its own subdir, I want instead, to consult it (blockchain) through libcoin itself (not by socket of JSON)...
> >
> > So, the /home/michael/.bitcoin/ directory will have only wallet.dat and related files, not the blockchain.
> >
> > This is more or less what we can do with Bitcoin Electrum alternate client but, with Electrum, it copy the whole blockchain to mysql... This is terrible from my point of view, I think that there is no need to duplicate the blockchain within MySQL in anyway.
> >
> > I just imagine a bitcoin splited in two, blockchain in one side and wallet in the other side.
> >
> > This is possible with libcoin?!
> >
> > Thank you again!
> >
> > Best,
> > Thiago
> >
> > 2012/2/28 Michael Grønager <gronager at ceptacle.com>
> > Hi again - and thanks for testing and finding this!
> >
> > I have fixed the bug you reported:
> >
> > The culprit was an implicit string constructor for the ChainAddress that caused creation of a not fully initialized ChainAddress. The right way to do it is using chain::getAddress(string) as the ChainAddress is chain specific.
> >
> > A git pull will fix it ;)
> >
> > Cheers,
> >
> > Michael
> >
> >
> > On 27/02/2012, at 20:03, Martinx - ジェームズ wrote:
> >
> >> AWESOME!! Thank you!!
> >>
> >> Anyway, I found a new problem... lol
> >>
> >> /usr/local/bin/bitcoind getinfo #okay
> >> {
> >> "version" : 40001,
> >> "blocks" : 168753,
> >> "connections" : 8,
> >> "difficulty" : 1376302.26788638,
> >> "testnet" : false
> >> }
> >>
> >> /usr/local/bin/bitcoind getaccountaddress "" # okay...
> >> 1J4vNcvEdeCuLH4yvyoC2gxFEF4zquoJ87
> >>
> >> /usr/local/bin/bitcoind listaccounts # NOT okay...
> >> {
> >> }
> >>
> >> /usr/local/bin/bitcoind getaccountaddress "teste" # okay
> >> 1E6pGh6AAtuJdFXheZMp1zdYmvdqAQn9QT
> >>
> >> /usr/local/bin/bitcoind listaccounts # NOT okay...
> >> {
> >> "teste" : 0.00000000
> >> }
> >>
> >> Where is my default account listed at "listaccounts" output?!
> >>
> >> Best,
> >> Thiago
> >>
> >> 2012/2/26 Michael Grønager <gronager at ceptacle.com>
> >> And if you do an update now "help" is there too ;)
> >>
> >> /M
> >>
> >> On 25/02/2012, at 03:11, Martinx - ジェームズ wrote:
> >>
> >>> Thank you!!!
> >>>
> >>> It is all working now! Except "help"...
> >>>
> >>> Nice work Michael!!
> >>>
> >>> Best,
> >>> Thiago
> >>>
> >>> 2012/2/24 Michael Grønager <gronager at ceptacle.com>
> >>> OK - didn't took the weekend:
> >>>
> >>> support for "port" is on github now :)
> >>>
> >>> Only took two lines:
> >>>
> >>> ("port", value<unsigned short>(&port)->default_value(8333), "Listen on specified port for the p2p protocol")
> >>>
> >>> and using the port option in the Node constructor (was there already):
> >>>
> >>> Node node(chain, data_dir, args.count("nolisten") ? "" : "0.0.0.0", lexical_cast<string>(port)); // it is also here we specify the use of a proxy!
> >>>
> >>> /M
> >>>
> >>>
> >>>
> >>> On 24/02/2012, at 19:49, Martinx - ジェームズ wrote:
> >>>
> >>>> Hi Michael,
> >>>>
> >>>> Thank you for your attention!
> >>>>
> >>>> Now, I'm trying to start libcoin's bitcoind using high ports but, it always try to listen at 8332, no matter what I "say"...
> >>>>
> >>>> Look:
> >>>>
> >>>> $ cat .bitcoin/bitcoin.conf
> >>>> server=1
> >>>> daemon=1
> >>>> rpcuser=libcoin
> >>>> rpcpassword=LibCoin13
> >>>> rpcport=10332
> >>>> port=10333
> >>>>
> >>>> But:
> >>>>
> >>>> /usr/local/bin/bitcoind
> >>>> Error: Address already in use
> >>>>
> >>>> terminate called after throwing an instance of 'DbException'
> >>>> what(): DbEnv::close: Invalid argument
> >>>> Aborted
> >>>>
> >>>> When I "strace it", I can see:
> >>>>
> >>>> ...
> >>>> bind(12, {sa_family=AF_INET, sin_port=htons(8333), sin_addr=inet_addr("0.0.0.0")}, 16) = -1 EADDRINUSE (Address already in use)
> >>>> ...
> >>>>
> >>>> I already tried:
> >>>>
> >>>> /usr/local/bin/bitcoind --rpcport 10332
> >>>> /usr/local/bin/bitcoind --rpcport=10332
> >>>>
> >>>> Without success...
> >>>>
> >>>> Thanks again!
> >>>> Thiago
> >>>>
> >>>> 2012/2/24 Michael Grønager <gronager at ceptacle.com>
> >>>> Hi Thiago,
> >>>>
> >>>> Forgot to comment on the two latter:
> >>>>
> >>>>> $ bitcoind getaccountaddress ""
> >>>>> HTTP error code: 401
> >>>>> Error: couldn't parse reply from server
> >>>>>
> >>>>> $ bitcoind listaccounts
> >>>>> HTTP error code: 401
> >>>>> Error: couldn't parse reply from server
> >>>>>
> >>>>
> >>>> 401 = permission denied - you need to setup username / password either on the commandline or in the bicoin.conf file to access those commands...
> >>>>
> >>>> See in the bitcoind.cpp file for commands that you can use with and without auth...
> >>>>
> >>>> Those that contains an "auth" requires auth:
> >>>>
> >>>> server.registerMethod(method_ptr(new GetBalance(wallet)), auth);
> >>>>
> >>>> As opposed to:
> >>>>
> >>>> server.registerMethod(method_ptr(new GetInfo(node)));
> >>>>
> >>>> auth is defined by:
> >>>>
> >>>> Auth auth(rpc_user, rpc_pass); // if rpc_user and rpc_pass are not set, all authenticated methods becomes disallowed.
> >>>>
> >>>> so you just experience the case explained in the comment ;) I admit that the output could be more readable, though!
> >>>>
> >>>> /M
> >>>>
> >>>>
> >>>>>
> >>>>> Any tips?! lol
> >>>>>
> >>>>> Thanks!
> >>>>> Thiago
> >>>>>
> >>>>> 2012/2/23 Martinx - ジェームズ <thiagocmartinsc at gmail.com>
> >>>>> AWESOME!!!
> >>>>>
> >>>>> I can compile libcoin at my Ubuntu 11.10... I just need to install:
> >>>>>
> >>>>> sudo aptitude install libboost1.46-all-dev
> >>>>>
> >>>>> ...alongside with another already installed dependencies, and now it works!!
> >>>>>
> >>>>> Thank you!
> >>>>> Thiago
> >>>>>
> >>>>> 2012/2/23 Michael Grønager <gronager at ceptacle.com>
> >>>>> Hi Martinx,
> >>>>>
> >>>>> Another note:
> >>>>>
> >>>>> boost 1.42 and openssl 1.0 has a conflict (you will see it when you try to compile coinHTTP with that specific combination: sslv2 has been removed from openssl, but boost still references it.)
> >>>>>
> >>>>> You should do a :
> >>>>>
> >>>>> sudo apt-get upgrade libboost-dev-all
> >>>>>
> >>>>> to get the 1.46.1 library
> >>>>>
> >>>>> /M
> >>>>>
> >>>>>
> >>>>> On 23/02/2012, at 18:31, Martinx - ジェームズ wrote:
> >>>>>
> >>>>>> Hi Michael!
> >>>>>>
> >>>>>> Thank you for libcoin! It is a awesome evolution for Bitcoin and for the CryptoCurrencies as a hole... Thanks!!!
> >>>>>>
> >>>>>> Anyway, I am unable to compile libcoin under my Ubuntu 11.04. At this machine, I have compiled and running Bitcoin (from sources), Namecoin, Devcoin, Litecoin, IXcoin and I0coin, all from sources but, when I try to compile libcoin, I got:
> >>>>>>
> >>>>>> ----
> >>>>>> user at desk:~/libcoin$ ./configure
> >>>>>> -- The C compiler identification is GNU
> >>>>>> -- The CXX compiler identification is GNU
> >>>>>> -- Check for working C compiler: /usr/bin/gcc
> >>>>>> -- Check for working C compiler: /usr/bin/gcc -- works
> >>>>>> -- Detecting C compiler ABI info
> >>>>>> -- Detecting C compiler ABI info - done
> >>>>>> -- Check for working CXX compiler: /usr/bin/c++
> >>>>>> -- Check for working CXX compiler: /usr/bin/c++ -- works
> >>>>>> -- Detecting CXX compiler ABI info
> >>>>>> -- Detecting CXX compiler ABI info - done
> >>>>>> -- Looking for include files CMAKE_HAVE_PTHREAD_H
> >>>>>> -- Looking for include files CMAKE_HAVE_PTHREAD_H - found
> >>>>>> -- Looking for pthread_create in pthreads
> >>>>>> -- Looking for pthread_create in pthreads - not found
> >>>>>> -- Looking for pthread_create in pthread
> >>>>>> -- Looking for pthread_create in pthread - found
> >>>>>> -- Found Threads: TRUE
> >>>>>> -- Looking for XOpenDisplay in /usr/lib/i386-linux-gnu/libX11.so;/usr/lib/i386-linux-gnu/libXext.so
> >>>>>> -- Looking for XOpenDisplay in /usr/lib/i386-linux-gnu/libX11.so;/usr/lib/i386-linux-gnu/libXext.so - found
> >>>>>> -- Looking for gethostbyname
> >>>>>> -- Looking for gethostbyname - found
> >>>>>> -- Looking for connect
> >>>>>> -- Looking for connect - found
> >>>>>> -- Looking for remove
> >>>>>> -- Looking for remove - found
> >>>>>> -- Looking for shmat
> >>>>>> -- Looking for shmat - found
> >>>>>> -- Looking for IceConnectionNumber in ICE
> >>>>>> -- Looking for IceConnectionNumber in ICE - found
> >>>>>> -- Found X11: /usr/lib/i386-linux-gnu/libX11.so
> >>>>>> -- Boost version: 1.42.0
> >>>>>> -- Found the following Boost libraries:
> >>>>>> -- date_time
> >>>>>> -- regex
> >>>>>> -- filesystem
> >>>>>> -- system
> >>>>>> -- program_options
> >>>>>> -- thread
> >>>>>> -- Found OpenSSL: /usr/lib/libssl.so;/usr/lib/libcrypto.so
> >>>>>> -- Looking for Q_WS_X11
> >>>>>> -- Looking for Q_WS_X11 - found
> >>>>>> -- Looking for Q_WS_WIN
> >>>>>> -- Looking for Q_WS_WIN - not found.
> >>>>>> -- Looking for Q_WS_QWS
> >>>>>> -- Looking for Q_WS_QWS - not found.
> >>>>>> -- Looking for Q_WS_MAC
> >>>>>> -- Looking for Q_WS_MAC - not found.
> >>>>>> -- Found Qt-Version 4.7.2 (using /usr/bin/qmake)
> >>>>>> -- Found wxWidgets: TRUE
> >>>>>>
> >>>>>> The build system is configured to install libraries to /usr/local/lib
> >>>>>> Your applications may not be able to find your installed libraries unless you:
> >>>>>> set your LD_LIBRARY_PATH (user specific) or
> >>>>>> update your ld.so configuration (system wide)
> >>>>>> You have an ld.so.conf.d directory on your system, so if you wish to ensure that
> >>>>>> applications find the installed libcoin libraries, system wide, you could install an
> >>>>>> libcoin specific ld.so configuration with:
> >>>>>> sudo make install_ld_conf
> >>>>>>
> >>>>>> -- Configuring done
> >>>>>> -- Generating done
> >>>>>> -- Build files have been written to: /home/user/libcoin
> >>>>>> ----
> >>>>>>
> >>>>>> Now I tried make, without success:
> >>>>>>
> >>>>>> ----
> >>>>>> .....
> >>>>>> Script.cpp:(.text._ZngRK7CBigNum[operator-(CBigNum const&)]+0xf): undefined reference to `BN_init'
> >>>>>> Script.cpp:(.text._ZngRK7CBigNum[operator-(CBigNum const&)]+0x1e): undefined reference to `BN_copy'
> >>>>>> Script.cpp:(.text._ZngRK7CBigNum[operator-(CBigNum const&)]+0x38): undefined reference to `BN_set_negative'
> >>>>>> Script.cpp:(.text._ZngRK7CBigNum[operator-(CBigNum const&)]+0x4f): undefined reference to `BN_clear_free'
> >>>>>> Script.cpp:(.text._ZngRK7CBigNum[operator-(CBigNum const&)]+0xd3): undefined reference to `BN_clear_free'
> >>>>>> ../../lib/libcoin.a(Script.o): In function `operator<<(CBigNum const&, unsigned int)':
> >>>>>> Script.cpp:(.text._ZlsRK7CBigNumj[operator<<(CBigNum const&, unsigned int)]+0x16): undefined reference to `BN_init'
> >>>>>> Script.cpp:(.text._ZlsRK7CBigNumj[operator<<(CBigNum const&, unsigned int)]+0x2c): undefined reference to `BN_lshift'
> >>>>>> Script.cpp:(.text._ZlsRK7CBigNumj[operator<<(CBigNum const&, unsigned int)]+0xad): undefined reference to `BN_clear_free'
> >>>>>> ../../lib/libcoin.a(Script.o): In function `operator>>(CBigNum const&, unsigned int)':
> >>>>>> Script.cpp:(.text._ZrsRK7CBigNumj[operator>>(CBigNum const&, unsigned int)]+0xf): undefined reference to `BN_init'
> >>>>>> Script.cpp:(.text._ZrsRK7CBigNumj[operator>>(CBigNum const&, unsigned int)]+0x1e): undefined reference to `BN_copy'
> >>>>>> Script.cpp:(.text._ZrsRK7CBigNumj[operator>>(CBigNum const&, unsigned int)]+0x47): undefined reference to `BN_clear_free'
> >>>>>> Script.cpp:(.text._ZrsRK7CBigNumj[operator>>(CBigNum const&, unsigned int)]+0xcb): undefined reference to `BN_clear_free'
> >>>>>> ../../lib/libcoin.a(Script.o): In function `operator!=(CBigNum const&, CBigNum const&)':
> >>>>>> Script.cpp:(.text._ZneRK7CBigNumS1_[operator!=(CBigNum const&, CBigNum const&)]+0x14): undefined reference to `BN_cmp'
> >>>>>> ../../lib/libcoin.a(Script.o): In function `operator>(CBigNum const&, CBigNum const&)':
> >>>>>> Script.cpp:(.text._ZgtRK7CBigNumS1_[operator>(CBigNum const&, CBigNum const&)]+0x14): undefined reference to `BN_cmp'
> >>>>>> ../../lib/libcoin.a(Script.o): In function `uint256 Hash<__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > > >(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >, __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >)':
> >>>>>> Script.cpp:(.text._Z4HashIN9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEEE7uint256T_S8_[uint256 Hash<__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > > >(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >, __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >)]+0x6d): undefined reference to `SHA256'
> >>>>>> Script.cpp:(.text._Z4HashIN9__gnu_cxx17__normal_iteratorIPhSt6vectorIhSaIhEEEEE7uint256T_S8_[uint256 Hash<__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > > >(__gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >, __gnu_cxx::__normal_iterator<unsigned char*, std::vector<unsigned char, std::allocator<unsigned char> > >)]+0xb8): undefined reference to `SHA256'
> >>>>>> collect2: ld returned 1 exit status
> >>>>>> make[2]: *** [bin/bitcoind] Error 1
> >>>>>> make[1]: *** [applications/bitcoind/CMakeFiles/app_bitcoind.dir/all] Error 2
> >>>>>> make: *** [all] Error 2
> >>>>>> -----
> >>>>>>
> >>>>>> What can I do?!
> >>>>>>
> >>>>>> Best,
> >>>>>> Thiago
> >>>>>>
> >>>>>>
> >>>>>> On 1 February 2012 12:18, Michael Grønager <gronager at ceptacle.com> wrote:
> >>>>>> Dear Bitcoiners,
> >>>>>>
> >>>>>> libcoin is now in a state ready for its first release, which I would like to share with you!
> >>>>>>
> >>>>>> === libcoin is a crypto currency library based on the bitcoin/bitcoin "Satoshi" client. ===
> >>>>>>
> >>>>>> Copenhagen, Denmark - 1st February 2012 Ceptacle announces the release of the first version of the crypto currency library "libcoin" based on the bitcoin/bitcoin "Satoshi" client.
> >>>>>>
> >>>>>> libcoin also maintains a version of bitcoind that is a 100% compatible drop-in replacement of the bitcoin/bitcoind client: You can use it on the same computer on the same files and you can call it with the same scripts. And you can easily extend it without touching the basic bitcoin source files.
> >>>>>>
> >>>>>> The libcoin/bitcoind client downloads the entire block chain 3.5 times faster than the bitcoin/bitcoind client. This is less than 90 minutes on a modern laptop!
> >>>>>>
> >>>>>> In libcoin, the Satoshi client code has been completely refactored, properly encapsulating classes, removing all globals, moving from threads and mutexes to a pure asynchronous approach. Functionalities have been divided into logical units and libraries, minimizing dependencies for e.g. thin clients.
> >>>>>>
> >>>>>> libcoin is chain agnostic, all chain (bitcoin, testnet, namecoin, litecoin, ...) specific settings are maintained from a single class (Chain) and hence experiments with chain settings, mining, security and digital currencies for research and educational purposes are easily accessible. See the ponzicoin example for how you define your own chain.
> >>>>>>
> >>>>>> The build system of libcoin is based on CMake and supports builds of static and dynamic libraries on Linux, Mac OS X, and Windows.
> >>>>>>
> >>>>>> The libcoin license is LGPL v. 3. This mean that you can use it in open source as well as in commercial projects, but improvements should go back into the libcoin library.
> >>>>>>
> >>>>>> ======
> >>>>>>
> >>>>>> Read more on libcoin on: http://github.com/ceptacle/libcoin/wiki
> >>>>>>
> >>>>>> Join libcoin on twitter: http://twitter.com/libcoin
> >>>>>>
> >>>>>> Download "libcoin Satoshi release": http://github.com/ceptacle/libcoin/zipball/v0.4.0.1
> >>>>>>
> >>>>>> Best regards,
> >>>>>>
> >>>>>> Michael Gronager, PhD
> >>>>>> Director, Ceptacle
> >>>>>> Jens Juels Gade 33
> >>>>>> 2100 Copenhagen E
> >>>>>> Mobile: +45 31 45 14 01
> >>>>>> E-mail: gronager at ceptacle.com
> >>>>>> Web: http://www.ceptacle.com/
> >>>>>>
> >>>>>>
> >>>>>> ------------------------------------------------------------------------------
> >>>>>> Keep Your Developer Skills Current with LearnDevNow!
> >>>>>> The most comprehensive online learning library for Microsoft developers
> >>>>>> is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
> >>>>>> Metro Style Apps, more. Free future releases when you subscribe now!
> >>>>>> http://p.sf.net/sfu/learndevnow-d2d
> >>>>>> _______________________________________________
> >>>>>> Bitcoin-development mailing list
> >>>>>> Bitcoin-development at lists.sourceforge.net
> >>>>>> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
> >>>>>>
> >>>>>
> >>>>> Michael Gronager, PhD
> >>>>> Director, Ceptacle
> >>>>> Jens Juels Gade 33
> >>>>> 2100 Copenhagen E
> >>>>> Mobile: +45 31 45 14 01
> >>>>> E-mail: gronager at ceptacle.com
> >>>>> Web: http://www.ceptacle.com/
> >>>>>
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>>
> >>> Michael Gronager, PhD
> >>> Director, Ceptacle
> >>> Jens Juels Gade 33
> >>> 2100 Copenhagen E
> >>> Mobile: +45 31 45 14 01
> >>> E-mail: gronager at ceptacle.com
> >>> Web: http://www.ceptacle.com/
> >>>
> >>>
> >>
> >> Michael Gronager, PhD
> >> Director, Ceptacle
> >> Jens Juels Gade 33
> >> 2100 Copenhagen E
> >> Mobile: +45 31 45 14 01
> >> E-mail: gronager at ceptacle.com
> >> Web: http://www.ceptacle.com/
> >>
> >>
> >
> > Michael Gronager, PhD
> > Director, Ceptacle
> > Jens Juels Gade 33
> > 2100 Copenhagen E
> > Mobile: +45 31 45 14 01
> > E-mail: gronager at ceptacle.com
> > Web: http://www.ceptacle.com/
> >
> >
>
> Michael Gronager, PhD
> Director, Ceptacle
> Jens Juels Gade 33
> 2100 Copenhagen E
> Mobile: +45 31 45 14 01
> E-mail: gronager at ceptacle.com
> Web: http://www.ceptacle.com/
>
>
Michael Gronager, PhD
Director, Ceptacle
Jens Juels Gade 33
2100 Copenhagen E
Mobile: +45 31 45 14 01
E-mail: gronager at ceptacle.com
Web: http://www.ceptacle.com/