Categories
Life & Low-Tech

Oppurtunity Sings: A week at Permanent Beta Festival

For those that don’t know about Permanent Beta Festival, I invite you to read my first post here.

Sitting in an improvised chair made out of two wooden pallets, staring at a big blue sky, surrounded by tall pine trees, enjoying the warmth of a campfire, and the company of my fellows. It’s a typical evening at Permanent Beta Festival. And it’s beautiful.

[su_lightbox type=”image” src=”https://beta.codebuffet.co/wp-content/uploads/2018/09/IMG_20180907_211349.jpg”]

Permanent Beta Festival Main terrain 2018 at night
[/su_lightbox]

But there’s more to it, and it’s hard to explain in just words when your experience is the sum of a whole spectrum of sensory input, ranging from the taste of the wonderful food, the smell of nature that we all live so close to during the week, the exceptionally inspiring people we meet, the things we do, the things that people bring with them, and many other things that have gone unnoticed by my busy mind.

Like the post from 2 years ago, let’s try! Spin up the song “Radical Face – Always Gold” and let it sink in. Now sit back, and let the words flow and speak for themselves.

Imagine driving up the festival terrain, beautiful lights are greeting you, it’s like a giant invitation for those hungry and curious. You haven’t spoken to a single person yet, but you can feel the energy, the inspiration. As you set up your tent or caravan, the very sight of other people doing the same or the sounds that come from the center of the festival terrain already make your day. You’ll then know, something magical is about to happen.

You’re joining the other people at the festival terrain. Long tables and big tents are where it happens, you might be wondering what exactly, but you’ll find out when you read the workshops for the day. First, it’s time to settle, take a drink and talk to people.

As you walk around the festival you’ll see people setting up interesting (social) experiments. One that I really liked was an offline messaging service: it was a series of wooden logs with holes in them, one for each participant. You can write personal messages to anyone you like.

You’ve chosen a workshop, congratulations! Hmm, what is it? Breathing exercise? Sounds awesome! As you walk to the assigned tent for the workshop, you’ll see a group of people walking towards the same tent. You now have a group of like-minded people!

Oh! There’s the host of the workshop, let’s begin: Breathe in and out, should be easy, right? It’s not! At least in my experience, it was a very deep and thorough process that was accompanied by the rhythm from some kind of Celtic music.

Ok, now you’re fresh and rested from your first workshop. Let’s see what’s more: A lab-session! This is a special kind of workshop where an organization pays the festival to host this workshop so that they can get answers to difficult questions and problems, which in turn (partially) funds the festival.

Before you know it, it’s around ‘noon and you’re sitting by the campfire, that by the way, never stops burning! No, it’s not because of magical wood, or fire-replicating crystals, it’s because of a swarm of magical people that always make sure there’s enough wood in the fire. What’s better: Included with those people is you! That’s a lesson for today: 2 people make love, many people make magic.

Dinner time! Let’s go to the line and get our food. Oh my god, that smells good, but, it also smells unique, not your festival type of food. What could it be? Flash-forward to the table with food & drinks. You get your first taste of the food, you close your eyes to really take it all in and as your vision blacks out and the festival falls from view, you get the whole impression of today back in a boom of taste and texture as if the food and the festival were destined for each other. This, my dear reader, is the work of a kitchen that will have my deepest and eternal respect. The food is forged by the hands of gods.

As the evening falls you’ll notice more people gather by the fire. Let’s join them, get a few beers or other beverages, and talk, laugh, or, as I did on my last day, simply lay back and hear and feel. It’s 00:14 and maybe it’s time to go to bed. As you walk to grab your stuff and get a shower you’ll notice your need to sleep drives away and you decide to join the fire again. Ok, got loose by a few beers, let’s go dancing at the silent disco (a disco with music through synchronized headphones, because of a no-noise policy).

02:35, shit! Let’s go to the hot tubs in the wellness area! People you’ve seen before at the festival join in and soon you find yourself talking about anything you may have encountered, or maybe you’re just listening.

Waking up again in your tent, under a pile of stuff that you’ve perceived as a blanket, you’re trying to wake up and start the day again. Everyone at the festival is a crew member, so that includes you! Let’s find a task to do, I got lucky and had bar-service, but it’s quite popular, so be quick! As you signed up for your task and get started, your hangover starts to fade and you’re ready for a new day.

This will repeat itself for 5 days, but every time with new experiences and views. Day in, day out, never bored, always energy, always passion, empathy, always something to do and someone to care for.

Until the day that it’s time to pack and leave. You try to do some final help breaking down the festival and larger tents.

You get in the car, you drive away, only for you to realize that a piece of the people you’ve met left with you! And then, once you finally get the time to pick up your phone, you’ve realized something beautiful: A piece of you left with them too! It isn’t explicitly written by anyone who you’ve spoken to, but you can tell from the messages they’ve sent you.

And then you’re at your house, you get out of the car, grab your stuff, the front door closes. And you scream out of happiness. What a fucking amazing week!


Want to know more about Permanent Beta Festival? Check out their website here.

The contents of this post are my own opinions based on actual experience. I was not paid nor sponsored otherwise to make this post.

Categories
IOTA Uncategorized

IOTA Ledger Nano S: Alpha on testnet!

Hello guys!

We are very pleased to announce that the IOTA Ledger App is now ready for alpha testing and we would like you to help us by testing it and providing feedback!

!!! IMPORTANT NOTICE – READ FIRST !!!

This alpha version is working on the IOTA testnet. DO NOT TRANSFER REAL FUNDS FROM THE MAIN NET to your Ledger Nano S yet! You would never receive these funds, because mainnet is not compatible to testnet!! We will provide you some nice fresh testnet IOTA for that purpose. Claim your testnet funds here.

DISCLAIMER

This project is 100% community driven! We are not related to the IOTA foundation, so please wait until there is an official audit until you trust this with all your funds! We are just hobbyists, we are not responsible if there are any bugs which leads to the loss of your funds. Please be patient with us if you have some questions.

Lets get started!

First you must install the IOTA-Ledger App onto your Ledger Nano S.

We created a one-size-fits-all (including Windows, Mac, Linux) solution to do this easily: It’s a virtual machine that contains all the necessary prerequisites to install the app. The latest precompiled version of the IOTA application is automatically downloaded from our releases page at startup of the VM, checked for correct digital signature and installed onto the Ledger Nano S.

You can find instructions on how to install the app using VirtualBox here. Follow the tutorial, then come back to this page to start the desktop wallet 🙂

After the app was installed successfully, you need a wallet that supports our IOTA Ledger app. We modified Roman Semko’s Romeo Wallet for that purpose.

The modified Romeo web wallet can be found here:
https://iota-ledger.github.io/romeo.html/

Open your IOTA app on the Ledger and click on “Ledger Nano” in the Romeo wallet and then on “Login with Ledger” and let the magic happen!

Please keep in mind

This is an alpha testing version of the app! It is not (yet) endorsed by Ledger, nor by the IOTA foundation. It is only running in the IOTA test net, so do not transfer your real IOTA funds to it. It must be used for testing purposes only. However each app is run in it’s own “sandbox” on the device, so there is no risk in compromising data from other apps.

The app is currently generating test addresses using a different path that will be used in the official release. This way you are not tainting your seed by sending test transactions. These addresses might change in the future!

We are primarily interested in app related feedback (if you encounter any issues with the app on the Ledger itself or if anything doesn’t work as expected). However we are also interested in usability feedback.

If you experience an issue, please open up the developer console (Ctrl + Shift + J on Windows/Linux, Cmd + Shift + J on Mac) and provide us with the error you’ve received.

Your feedback would be greatly appreciated as a GitHub Issue or if you don’t have a GitHub account, just use the form here.

If you have questions, feel free to contact us in our discord channel: https://discord.gg/U3qRjZj

Next steps

In the next weeks we want to collect your feedback to fix bugs or add new functionality.
If we think that all tasks are done, we will contact Ledger to have it code reviewed, and hopefully they will release it on their official store.

Trinity

We are already in contact and working with the Trinity team to bring Ledger support to the Trinity wallet. With their recent rollout of their (phenomenal) mobile wallet, and with the desktop version still being finalized, we don’t currently have a timeline for when it will be available with the Trinity wallet. Rest assured, we will be assisting with integration where possible.

Words from the team

Peter – GitHub

To this day, this has been the biggest, most exciting IOTA-related project I’m involved in since IOTA Flash. It’s perfect from every angle. It brought value to those who wanted to learn new skills – both to those who contributed and the audience during the presentations we’ve given. It brought value to die-hard hodler’s, who were super generous donating to this project (Thanks by the way!). It also brought value to people who just want their crypto’s to be secured in a unified wallet-interface, so that their family are able to inherit all the funds more easily.

The team that got together around this project is hard-working, and humble. They deserve all the good that’s coming to them!

wollac – GitHub

This project has been a awesome opportunity to build something for IOTA from the ground up, which was a great experience! It forces you to look at IOTA from different angles and this has only been possible thanks to the invaluable support of the community and the great collaboration of the passionate team.

Diskings – GitHub

I started out knowing nothing about IOTA or any other crypto (at a coding level) but wanted to help. So I just picked it up, started tweaking code here and there to figure out how it worked, and here we are. If you’re interested in developing for DLT, just start. It doesn’t matter what it is, just start with anything and learn as you go.

muXxer – GitHub

Being the latest member of the team, I really can encourage all the community people out there to participate in such projects. I got in contact with wollac at an IOTA developer meetup in Berlin while he gave a presentation about this project. I just asked him how I could help. Now here I am, and I learned a lot during the last months. It feels really good to push such a great project like IOTA forward and help the community.

Special thanks to

  • Roman SemkoTwitter GitHub – for his perfect web wallet Romeo and all his help! He is awesome!
  • Trinity Team – For all the advice, the testnet funds and the really nice conversations!
  • kwkoGitHub – For his new IOTA pixelart design.
  • The awesome IOTA community – Which made all this stuff possible by supporting us!

Contributing

Donations

Would you like to donate to help the development team? Send some IOTA to the following address:

ADLJXS9SKYQKMVQFXR9JDUUJHJWGDNWHQZMDGJFGZOX9BZEKDSXBSPZTTWEYPTNM9OZMYDQWZXFHRTXRCOITXAGCJZ

Note! This is a new donation address!
Please know that the donations made to this address will be shared with everyone who contributes.

As a developer

Would you like to contribute as a dev? Please check out our Discord channel to contact us!

Categories
IOTA

IOTA on the Ledger Nano S: Development Report 5

Hello everyone,

It’s been a while. Thank you for hanging on! I was very busy the past month, had to arrange presentations, meetings, the blockchaingers hackathon in Groningen coming up. But I haven’t stopped working on the Ledger-support, neither did the rest of the team!

I’ll just dive right into it, we’ve finished 2 major features of the Ledger:

[su_list icon=”https://beta.codebuffet.co/wp-content/uploads/2018/01/iota.png”]

  • API (after weeks of discussions and passing over designs to one-another).
  • Signing of transactions (part of the API as well)

[/su_list]

I guess you could say all of the major features we need are done! Aside from just features, thanks to the amazing team with Wollac and Diskings, we also have a huge amount of tests, pretty much all code is covered by automated tests.

There’s one more thing…

If you’re a frequent reader of the series, you’ll probably miss “Develop a simple web wallet application to interact with the Ledger and provide basic functionality while waiting for more advanced wallets to integrate Ledger support”.

There’s nothing wrong with your memory, or mine: We’ll be getting Ledger-support in Trinity!
We’ll skip the web wallet, and focus on integrating with Trinity instead.

This is a huge step in the right direction, and the people who most benefit from this are the users: Imagine having 1 wallet for all your IOTA needs. You download Trinity and use it the way you like it. You plug in your Ledger and install the IOTA app. Trinity sees your ledger and asks you if you want to use your Ledger as a wallet instead. Note: This is an assumption of me how the interaction is going to look like, it’s entirely up to Trinity to develop the UI, so the final product could differ.

What lies ahead

The only thing that needs to be done now before we have a functional Javascript-SDK and API, is getting the bundles to be signed the right way. I still have some difficulties there, but I hope I can fix it in this week.

Final words

This is probably the last development report before we head into beta, so I’d like to end this report with a bit of a personal story. When we started the Ledger-project, I was under the assumption that no one would really care about it enough to immediately join in and integrate (like the Trinity wallet). Sure, it crossed my mind, and yeah I really wanted to have the integration, but I always thought it might happen after we finished and were out of beta, there was no way they’d even think about integrating before we had anything, right? So I focused on building a web-wallet instead (and contact them later in the project life-cycle).

It turned out I was wrong.

What have I learned from this? If you look back at the end of the day and you’re still seeing opportunities lying ahead of you, then you haven’t dreamed big enough yet, you haven’t leveraged your full potential yet, there’s no excuse, there’s no luck to it, all it takes is doing it, and you only know for sure when you get yes or no for an answer.

Would you like to donate or just say hi? Be sure to comment in this post below, or donate IOTA  at:
ADLJXS9SKYQKMVQFXR9JDUUJHJWGDNWHQZMDGJFGZOX9BZEKDSXBSPZTTWEYPTNM9OZMYDQWZXFHRTXRCOITXAGCJZ

Please know that the donations made to this address will be shared with everyone who contributes (the contributions has to be worth something, of course)

Would you like to contribute as a dev? Please check out our Discord channel to see what’s there to do!

Categories
IOTA

IOTA on the Ledger Nano S: Development Report 4

Intro

“A picture says more than a 1000 words” really applies to this one, doesn’t it?

For those who don’t get what’s happening here: What you’re seeing here is an address generated by the Ledger using our C implementation of IOTA, and by the official IOTA Wallet. Both are generating the first address using the same seed completely separated from each-other. By having identical addresses we can proof that the implementation works correctly. quod erat demonstrandum

Note: The Ledger address doesn’t end with the same characters as on the official IOTA Wallet, because the checksum is missing on the Ledger’s end, this is not a problem, we will add the checksum on the web-wallet, since the data integrity is already guaranteed from the Ledger to the PC by data encryption over USB.

This is our first successful attempt at making the first valid security 2 IOTA address! (Which is being used by default by the IOTA wallet). There is really nothing more left to say.

We had some setbacks, as expected. We got some trouble getting keccak to work, which got finally solved this week, after some rigorous testing on a dusty saturday, we can conclude it’s now working 100%!

Ok cool, what now?

Currently, the consensus between Wollac, Diskings and me is that we start on creating the functionality that will allow the Ledger to sign and create transactions, I will start getting more involved in the Web Wallet (to use your Ledger with) while they will work more on the Ledger itself. We will work in parallel.

[su_list icon=”https://beta.codebuffet.co/wp-content/uploads/2018/01/iota.png”]

  • Creation and signing of transactions
  • Develop a simple web wallet application to interact with the Ledger and provide basic functionality while waiting for more advanced wallets to integrate Ledger support.
  • Appropiate recovery features

[/su_list]

I expect no to little setbacks at this point, as signing transactions can be done in parts (each transaction in a bundle can be signed separated).

Development of the Web Wallet has already begun. The repo is here.

If you’re a web or frontend developer, and like to contribute to the Ledger project but were unable to help because C wasn’t your kind of language? You can contact me (peterwilli) in the Discord (links below) to coordinate further development of the wallet.

Wrapping up

First, I’d like to thank the group I’ve been working with on this project. Diskings (https://github.com/tylerhann) and Wollac (https://github.com/Wollac)

Wollac also made some huge contributions that allowed us to improve the performance of address generation from nearly 2 minutes for just 1 address to just under 4 seconds. He did so by implementing 32-bit arithmetic rather than ‘stacks’ of 8-bits what we used to do. This improvement was known to us, but we backlogged it until we got the address generation working first. Thanks to him, we already have it today! He also pointed out to me that Ledger was indeed capable of using the Ledger’s hardware-keccak as a sponge construction, which I thought was unlikely. This boosted development and I’m very grateful for his contribution, as well as anyone else’s.

I can only say: This is a dream-team to work with on such a complicated, yet small in terms of size project. So a huge shoutout to diskings, wollac and everyone involved!

Would you like to donate or just say hi? Be sure to comment in this post below, or donate IOTA  at:
ADLJXS9SKYQKMVQFXR9JDUUJHJWGDNWHQZMDGJFGZOX9BZEKDSXBSPZTTWEYPTNM9OZMYDQWZXFHRTXRCOITXAGCJZ

Please know that the donations made to this address will be shared with everyone who contributes (the contributions has to be worth something, of course)

There is also a group forming a crowd-funding on Reddit at: https://www.reddit.com/r/Iota/comments/7l5jl2/and_if_will_we_donate_1miota_each

Would you like to contribute as a dev? Please check out our new Discord channel to see what’s there to do!

Categories
IOTA

IOTA on the Ledger Nano S: Development Report 3

Intro

It’s been nearly 2 weeks since the last report! Time flies when you’re having fun, I’d say. Let’s just dive right into it. For those who don’t know what’s going on, please read version 1 and 2 of this report: We’re building IOTA on the Ledger Nano S!

Some household announcements

In the previous report, I asked for a better and smaller implementation for the ternary store to save more memory. I’m just gonna let this sink in for a moment: I didn’t expect a single reply. Maybe 1.

Instead, we got like 10 replies with 10 different implementations. It was overwhelming. I didn’t even had the time to look at it all. It was like Santa Claus getting all those drawings from children all over the world.

So after a week of going through replies, I think that we need to coordinate this project differently. So from today on, all the project’s code move to a central GitHub organisation: https://github.com/iota-ledger
We also have our own Discord channel at: https://discord.gg/U3qRjZj

From here on out, we will use these channels to discuss our implementations and perform changes. In the discord, we will have some read-only channels where the developers who are actually working on the Ledger support can discuss in peace, in case the channel get’s too crowded.

This way everyone can see in real-time what has been done and what’s happening. Maybe Santa can learn from this?

Anyway, you’re welcome to join, developer or not. You’ve got some ideas to contribute? This channel is for you!

How is the Ledger going?

Going great! In one of the 10 replies, an user by the name Diskings (/u/allsix) talked to me and he was heavily working on the road to Ledger support for IOTA. He was working on it while I was busy working on a super secret iota-related project. He made it possible to generate our first actual private key and address. That’s right. We’ve got our actual, first address and private key made! So a huge shout-out to Diskings!

I’ve talked with him and the consensus was that it’s best if we centralize our work, so we can work in parallel on the problems we’re facing. I am confident that we will have full Ledger support much quicker thanks to this.

So where are we?
We tend to keep an up-to-date list of todo’s in our GitHub, but right now we haven’t yet, so I’ll drop it here, but for more recent updates, be sure to check out our GitHub.

[su_list icon=”https://beta.codebuffet.co/wp-content/uploads/2018/01/iota.png”]

  • Creation and signing of transactions
  • Develop a simple web wallet application to interact with the Ledger and provide basic functionality while waiting for more advanced wallets to integrate Ledger support.
  • Appropiate recovery features

[/su_list]

Currently, due to severe memory limitations of the Nano, the private key does not fit on the ledger. When encoded with 4 (or 5) trits per byte, half of the private key can be stored, and then worked with at a time to generate the public key.

However encoding and decoding the key takes time. Right now it looks like when you want to make a transaction, you will need to leave your ledger plugged in for a minute or two while it generates the address and signs the transaction (after which you can disconnect it again). Ultimately we will work towards making it as seamless as possible given the RAM we have to work with.

There are further optimizations to be made, and are currently investigating methods of generating the keys in native trits (one trit per byte) to speed up the process by never storing more than one fragment of the private key at a time.. To learn more about our storage system, check report 1.

We still have lots of tests to run but we feel this is a major milestone for getting IOTA on the Ledger.

Wrapping up

Would you like to donate or just say hi? Be sure to comment in this post below, or donate IOTA  at:
ADLJXS9SKYQKMVQFXR9JDUUJHJWGDNWHQZMDGJFGZOX9BZEKDSXBSPZTTWEYPTNM9OZMYDQWZXFHRTXRCOITXAGCJZ

Please know that the donations made to this address will be shared with everyone who contributes (the contributions has to be worth something, of course)

There is also a group forming a crowd-funding on Reddit at: https://www.reddit.com/r/Iota/comments/7l5jl2/and_if_will_we_donate_1miota_each

Would you like to contribute as a dev? Please check out our new Discord channel to see what’s there to do!

Categories
IOTA

IOTA on the Ledger Nano S: Development Report 2

A good afternoon! I’m sitting here in front of family and friends who are playing Monopoly, waiting for the clock to hit 00:00. A new year will start. I’m also celebrating this yearly event, maybe a little different than I usually would, but in all honesty, I’m pretty damn happy about what I’m going to share with you, probably even more than if I did play along with them 🙂

Before we dive into the action again, I want to shed some light on the past 6 months. These 6 months, have been, in one word: Marvelous. It was the time I entered the IOTA community. During this time, so many things have happened. I cannot sum it all up in this post. Really, before I encountered IOTA, I had this year all planned out, I was working on a digital marketing company (it’s more exciting than it sounds) and will proceed to launch and raise funds during the end of this year.

But my focus totally shifted after finding out about IOTA. The level of excitement was simply too high to let this one slide. It was like when I first encountered Bitcoin in 2011. I just mailed some people from IOTA and joined their slack. I asked what I could do, it didn’t matter what, I just had to join in on this one.

From that point on, it brought me so many things. I was fortunate enough to work with Dom, Paul, Lewis and Chris on IOTA Flash, after my first IOTA talk and the first official meetup, I had so many offers that I couldn’t even react to them all! Of course, I had my ups and downs, but learning and growing doesn’t always have to feel good, what matters is what you let these experiences turn yourself into.

I also learned a freaking lot. I taught myself coding from 13y/o and never stopped since then. The same thing happened with machine learning 3 years ago. This year, the same happened with cryptography and math. I am a total noob when it comes to math, but I started a math course on EDx and learned myself the concepts of how crypto and math works and how you can apply it in real life. Not even Bitcoin got me to learn those things. All of this in just 6 months!

So, thanks a lot to the IOTA team, the community, and all the people I worked with on IOTA related projects, for being patient and give the energy and strength to people who are willing to contribute to something they believe in. And another huge thanks for bringing me the best year ever. I hope to make a great next 10 years out of that!

But what about the Ledger?

Enough with the chit-chat! I have to say: I wanted to post more, but I just really like to make 1 more post just before the end of the year 🙂

2 weeks ago we created a system to store 4 trits in 8 bits, requiring 25% of the memory originally required. If you want to know how, see the previous post of this series: https://codebuffet.co/2017/12/10/iota-on-the-ledger-nano-s-development-report-1/

Today my plan was to do 2 things:

  • Port Kerl (IOTA’s hashing function) and the conversion functions (trit to word etc) to use the ternary store instead of raw integers (to save 75% of RAM)  [done 100%].
  • Implement the private key generator and see if we can create our private keys based on the seed [done 80%, see below]

Unfortunately, even after the 75% ram optimization, we still didn’t have enough memory to create the private key. We could store the first half of the private key at the PC during the key creation, but that info is obviously sensitive. We also could apply an encryption format to make sure that the PC can’t read the contents it is temporarily saving. That’s quite overkill, and should be avoided, yet considered when we have no options or memory left.

Fortunately a reddit user called ‘0x1A9E’ created this comment: https://www.reddit.com/r/Iota/comments/7ixgfm/decided_to_write_a_journal_about_iota_on_ledger/dr31kt5/

It shows us not how to store 4 trits in 8 bits, but 5! The memory required to store the private key is 13.122kb. The Ledger only has 4kb for app use. With my optimization we require 3.2805kb, which leaves rarely any memory for the rest. With 0x1A9E’s solution we would have enough with 2.6244kb, which is already much more doable!

I wanted to leave this optimization in the backlog, as with 4 trits in 8 bit we might already have enough, but I think it’s better to start using the 5 trits in 8 bit solution right away. The very good thing is that if we solve the private key generation, we have successfully implemented the hardest part (as far as I can tell, as it requires the most RAM).

Right now, I extended 0x1A9E’s solution to add an inversion function (to convert trits back to integers, see: (https://github.com/peterwilli/iota-ledger-nano-s/blob/2241ceb2230ecc89b3b486f5210309cabbeabbd0/external_tests/5trit_store/test.py#L1) which is required to change trits on the go.

So next up will be the actual implementation of the function mentioned above in C (will do probably tomorrow).

If you’re a developer or just like to see the insides of these updates, they are not posted (yet) on the master branch, but on a special branch, for as long as we progress with this (this is to avoid unexpected breaks in the software). All the related updates to this post are at: https://github.com/peterwilli/iota-ledger-nano-s/tree/private-key-generation

Wrapping up

Would you like to donate or just say hi? Be sure to comment in this post below, or donate IOTA  at: ADLJXS9SKYQKMVQFXR9JDUUJHJWGDNWHQZMDGJFGZOX9BZEKDSXBSPZTTWEYPTNM9OZMYDQWZXFHRTXRCOITXAGCJZ

There is also a group forming a crowd-funding on Reddit at: https://www.reddit.com/r/Iota/comments/7l5jl2/and_if_will_we_donate_1miota_each

Would you like to contribute as a dev? You can by checkout the 5 trits per 8 bit function mentioned above and re-implement it in C in the ternary store (see: https://github.com/peterwilli/iota-ledger-nano-s/blob/2241ceb2230ecc89b3b486f5210309cabbeabbd0/blue-app-iota/src/ternary_store.c). If you do, please contact me on Github, so I won’t redo all the work when I get at it again 🙂

Now I’m going to celebrate a happy new year, and you should too! Happy new year!

Categories
IOTA

IOTA on the Ledger Nano S: Development Report 1

Hi guys,

I’ve barely slept since the picture I posted with the random IOTA seed on the Ledger (https://www.reddit.com/r/Iota/comments/7iaf3x/as_night_covers_the_netherlands_ive_been_able_to). It was overwhelming and it gave me a lot of energy. Today, I’d like to try something new. Because of all the reactions, I’d like to take you along the journey. That is, if you guys like it, it’ll be a series of posts during the development cycle. Don’t be afraid to give any feedback, and also let me know if you like the series to be more or less technical next time.

Before we get into the action, let me take a moment to explain what exactly happened and why it drove me to do this. Everyone knows the IOTA price has grown a lot over the past week. This also gave me a different feeling.

I don’t hold a lot of money in cryptocurrencies (or, I think it’s not a lot) but I do hold a lot of different ones. A few days ago I got my Ledger Nano S from a good friend and he told me I should stash my crypto’s on it and make sure that if something where to happen to me, my family could regain the funds. A healthy thought. After finding out IOTA wasn’t working at the moment on the Ledger, the first thing that came up to me was: make it work!

So, in all honesty, I’m by no means an expert in C, embedded hardware, or the Ledger in general. I am, however, a very fast learner. During the first days of that week, all I did was digesting information until I understood it all, especially on the specs of the ledger and the SDK. This is basically how I taught all my skills in development.

After that, I made a list of priorities, so that, even if a part of the list is completed, we will be able to store our IOTAs (and I would be able to store mine). It was something in the sense of:

  • Generate valid IOTA seeds based on your Ledger seed.
  • Generate valid addresses based on that seed
    • Note that if this is complete, we can already store IOTA.
  •  Allow transactions to be made

At thursday december 7th, around 12:30 in the night, I was able to fully execute IOTA’s hashing algorithm on the Ledger, resulting in valid seeds. I was so excited by this, especially because it worked at once. I decided to post a picture and go to bed. So I turned on my laptops webcam, made a pic and posted it, and at the moment I closed my laptop, not much than 3 minutes later, reactions streamed in, hundreds of them. I couldn’t believe it. I really didn’t know it was that big of a deal. The main motivation that drove me was to make sure my funds were safe and that my family would know how to recover it in case of a sudden death. What happened after that, was, well, definitively not sleep 🙂

Back to the present

After all the fuss I didn’t stop, I worked harder. So the next big thing we needed was generating private keys and then addresses. So, I got started at the beginning, and did the thing that made most sense, it was just copying the address generator from the Trezor version of the IOTA wallet. And the Ledger stalled. This is not a surprise to me, because the memory in the Trezor is much more than the Ledger (Trezor has 128kb ram, and the Ledger has “only” 4Kb ram available for applications)

Having so little memory poses a significant challenge, but it’s exciting too. It forces you to think very differently. If it weren’t for IOTA or Ledger, I’d probably wouldn’t have been sitting in a cinema with a pen and paper thinking how to squeeze as much data in 4kb of RAM.

These are the workarounds we have (sorted by most preferable):

  • Rewriting functions to use less memory
  • Use the connection with the computer to store part of the data externally
  • Store a part of the data in flash-memory

So, I started opening up the source code of the Trezor-IOTA firmware, checking out every function that has been called from the private key generation, and while reading it, thinking about how to use less RAM to do the same thing.
One thing that caught my eye instantly, is the way trits are stored. For newcomers, trits are IOTA’s entire base. Instead of having bits, which is 0 and 1, IOTA has trits, which are -1, 0 and 1. The whole reasoning behind this is because a ternary processor would be able to handle IOTA much more efficiently, even more efficiently than a binary processor would be able to handle binary applications.

Trits are being stored in the smallest possible number in C. This is int8_t. This number can hold 256 different values, and takes 8 bits of memory. So that means, that for each trit we need to occupy 8 bits of memory. If you think about it, that’s quite a lot, as trits only need 3 different states.

So, knowing that we can’t store numbers smaller than 8 bit, and that a trit only needs 3 different values, the first  thing that came in mind was, can we squeeze more than 1 trit in a 8-bit number? It turns out, we can!

Let’s take a look at the memory space of a 8bit number: 00000000
So 8 zeroes. Each zero can also be 1.

So, after a bit of thinking and writing notes, I came up with the following idea: 1 bit has 2 states, so with 2 bits we have 4 states. 1 trit has 3 states, which means that it fits well within the 2 bits. Now we just need to ‘map’ the 2 bit states to a single trit-state. It looks something like this:

[su_table]

Bits Trit
00 0
10 -1
01 1

[/su_table]

Now we can store 1 trit in each 2 bits. Because we have 8 bits in 1 number, that means we can store 4 trits in 1 number!

Using ‘chains’ of these 8bit numbers, we can store lots (in the thousands) of trits, with only 25% of the memory currently required! This is math porn.

For the techies, the source to the ‘ternary store’ is here: https://github.com/peterwilli/iota-ledger-nano-s/blob/master/blue-app-iota/src/ternary_store.c

All we need to do now, is, finding the right number a trit is stored, given an index of a trit you’d like to retrieve, and then finding the right position within that number. For this I have created a function called ‘ternary_store_get_position’.

Wrapping up

While the ternary store is not yet tested on the Ledger (I did tests with storing 1000’s of random trits and it worked all the time), I’m very confident that it will bring us one step closer to full IOTA on Ledger. More optimizations will have to be done, but we will get there.

After the first announcement of this project, other people joined too. So we get contributions to the project rolling in right now. I also joined the Ledger dev Slack to coordinate and discuss IOTA development on the Ledger as we progress as a community. So there is a lot happening in the scene, and I’m very confident we’ll have a strong community behind this in no-time.

Right now I’m going to take a break and regain some sleep, and make sure I stay focused on my other projects.

If you want to contribute to further development, IOTA donations are accepted at: ADLJXS9SKYQKMVQFXR9JDUUJHJWGDNWHQZMDGJFGZOX9BZEKDSXBSPZTTWEYPTNM9OZMYDQWZXFHRTXRCOITXAGCJZ

I’d like to thank IOTA as a community once more. Thanks to you guys I’m exploring all these new things and have fun doing it. This is literally the most fun thing I did in the weekend (it probably is the only thing, though).

I also like to thank the Ledger team who is very helpful and involved. I’m very glad having them watching and giving their feedback.

And a huge shoutout to Bart Slinger, who made the Trezor version (see: https://www.bartslinger.com/iota/iota-transactions-with-trezor-hardware/). Thanks to his contributions, I had a head-start, and was able to focus on heavy memory optimizations like the Ternary store. Without his help, I would’ve been busy a lot longer.

Categories
Life & Low-Tech

An open letter regarding XMR Miner

Hi guys,

I would like to discuss something that has happened the past week, first i’d like to talk about some history. I love cryptocurrencies. The fact while I’m writing this my spellcheck on my chromebook asks me to replace the word cryptocurrencies by ‘currencies’ annoys me more than you can imagine.

One of the biggest cryptocurrency I love at the moment is IOTA.

I love IOTA so much, that besides building a Tangle explorer, I’m also building teams where I work on real next level shit for IOTA (I’m under NDA so consider it stealth mode). Even though my love for IOTA is immeasurable, I can’t put all my money in 1 basket. So I also mine Ethereum (not on this site), build trading bots and do other kinds of stuff with cryptocurrencies.

But what do all those things have in common? It’s building things. That’s it.

I have to admit, things are going a little fast for me. I’m getting a lot of replies regarding IOTA related projects, investments, stuff. I’m becoming a semi-public figure. Yet, deep down, I’m a geek.

I’ll always be a geek. I started coding from 13yo, started doing projects from 16yo, I hacked my simcard to have free internet through facebook, I build a filecompression algorithm based on bloom filters,

I tried an online coin miner on the tangler explorer.

For those who don’t know what that is, the best explanation would be: it’s a script that makes your browser participating in the act of mining coins. It makes your PC go slower, though.

There is no excuse for that. I’m sorry about that. This is just me trying stuff out. I wasn’t thinking what kind of consequences this has on the community. This will not happen again.

While there is no excuse for this action, I will state my reasoning behind it, leaving it to your judgement.
So I came across an article on Reddit about an browser extension that blocks online coin miners on websites. I didn’t know that it became this big of a deal that blocking extensions were needed. Thinking about this makes me feel even more bad about it.

I wanted to see if this extension works on different mining scripts. When trying this locally I didn’t get much data back. So I configured NGINX to inject the mining script, to see what happens, for a short period of time. Without forseeing the consequences.

It is important to note that none of the projects had any mining scripts injected in them, it was done on the server-side.

Another reason for me to pick the tangle explorer, was because, at this time of writing, it doesn’t work anymore with the latest IOTA version. That’s why I thought it wouldn’t be a big deal, since there wouldn’t be much traffic anyway right? The only tangle explorer being used that I knew about was the testnet explorer (for IOTA Flash) which I didn’t inject.

It also served as a personal reminder for me to hurry up and fix the explorer so I can remove the injection and the explorer would be useful again.

Conclusion

This was just very bad decision making and a very inappropriate gesture towards the IOTA community. I didn’t mean to do any harm. I most certainly didn’t mean this to become a meme for the Monero guys to mock IOTA (or the other way around).

The only reason I did this, is to see how well it worked, I wanted to test the miner(s) and the blocking extension. That was it.

For anyone wondering, I didn’t make any money on this.

For anyone considering using a miner on their website, take it from me, it isn’t worth it. Scroll to the top, read this blog again, my god, hopefully conclude that it isn’t worth it.

What am I going to do about it

First of all, all traces have been removed.

I learned from this that at this point in my career, I can’t play around like this anymore. If a faceplant was needed for me to come to that conclusion, then so be it.

Categories
Life & Low-Tech The outsiders story Uncategorized

The outsider’s story – Building IOTA Flash

We all have our professions and expertises, and we rely on them every day to get things done.  Once in a while, you may encounter something out of the ordinary. About 3 months ago this was the case for me.

This is the idea of the outsider’s story. Independently working on projects that, “showed up on your path” are a little out of your comfort-zone and therefore hugely beneficial for technical and personal development. A hugely different category from what I usually blog about, but certainly very interesting, and I hope to write more posts in the same category in the near-future.

Anyway, hope you enjoy reading about the journey as much as I did experiencing it.

A little history

I was working on my own cryptocurrency when I saw IOTA on coinmarketcap, never heard of it before. I checked the whitepaper and I saw that they had what I tried to achieve (well, part of it, but I wanted too much for an experimental coin):
They put all users in the same roles.

This is the absolute 100% most important thing to me. Because different roles means different interests. Like with Bitcoin where miners are separated from the users. Miners have their needs, users have their needs. And they are not aligned, like it or not. I’m not going in deeply on this matter in this post.

In IOTA, making a transaction means validating 2 others. You as a user help the network without even knowing it. No separate agendas. No need to worry that a group of users will be upset, no high fees or slow transactions because the amount of transactions increases. It’s like 1 big crypto-communism.

That’s when I had to do something. I didn’t know what yet, but I had work on this. All my attention was suddenly directed towards IOTA. Now I only needed to put this energy to good use. I went in their Slack on #projects-channel and asked what needed to be done. A Tangle-explorer came up (the Tangle is IOTA’s equivalent of the blockchain in general)

So I build the most beautiful tangle explorer I had ever made. During that time, someone told me that they had a development fund for these kind of projects. But I didn’t want to get involved in that yet, in hindsight, not sure why, would’ve been great to have spent more time on it with some funding.

To the Flash-project

Then from one thing came another, I don’t quite remember what happened and how at this point, but within a week I was with David and Dominik (the IOTA founders) in a Skype channel, discussing some projects.

During that moment, there were 2 people from the IOTA team (whose names I won’t disclose) that asked me if I would want to work on IOTA full-time. My first response (as with similar offers) are always a no, since I work freelance only. More on this later.

Another week later, we came up with IOTA Flash as the next thing to work on, and I really liked the idea. For people who don’t know what IOTA Flash is, it’s a framework to directly exchange IOTA between 2 or more parties without the need for being online and without any fees.

Next day the IOTA-Flash channel was opened on Slack and I was dropped in the channel together with 8 other people. For the sake being polite, I’m not disclosing the names of the people in the team other than what was noted in the original Flash Channel Announcement. I was in the team with Lewis Freiberg, Paul Handy and Chris Dukakis.

We had a short meeting on how to get started. This was the first time having a conference call with the team. It was great. At this point I wasn’t sure what was to happen yet. I know that I was a bit too intrusive, I was thinking out loud how to tackle this problem. Guess that’s the enthusiasm again 🙂

I heard during the call that the Flash project had to be finished within 3 days. I already was sure that we wouldn’t make that deadline, at least I knew that I wouldn’t. Anyway, work hard & fast, the next day we started. Most of my time was spent with Lewis and Paul Handy. I worked most on the WebRTC part.

At the first day, things went fast. And I mean really fast. I loved the IOTA community (not just the team) for being direct and very productive in what they do. But being in the center of it was way different.

Let’s just say that what I did there was at the border of my experience. A border that is now bigger, thanks to the Flash-team. The things I learned there, from cryptography to using many different structures I have never used before, it was a 1 year computer-science course packed in 3 weeks. And it wasn’t just technology, being in such a different team as usual also serves as a great personal development opportunity.

I remember, that one point I was worried that the level of expertise might be too high for me. Everything that was being discussed I understood, but as soon as I did, the team seemed to have moved on. I quickly ignored that thought, knowing that if this was true, the team would have told me and I would have gone back to the tangle explorer.

Another important moment, was that there seemed to be some issues with the way the first Flash-channel was built. The signatures weren’t valid. Paul Handy called me and wanted to go over it. I told him: “But that’s Lewi’s part”. He said something like: “We don’t blame others here”. And I said: “It’s not to blame anyone, I’m pointing out that I don’t have the experience in all the crypto stuff” (the exact conversation might have been different).

And then he said the most beautiful thing that could’ve been said: “Well, Lewis isn’t here so now you do.”. That was really cool. It’s also a good sign to see how the IOTA Team operates. So we went over it and finally were able to fix it. The first valid Flash transaction was made.

Of course we didn’t reach the deadline (this wasn’t a surprise to me), so the project went on for a little longer. These weren’t my best moments during my time in the Flash-team. And there’s no shame in that. I had my opinions and I wasn’t afraid to tell them. Looking back, I forgot 1 very important thing I wish I kept in mind: I was dropped in an existing team. I’m used to managing and setting up teams myself, if not being in a brand-new one. If I didn’t forgot that I would’ve tried to adapt more. This is my only regret.

But now the project is done, and it’s free to use and test for everyone! There is a demo right here. The library and source code is here.

Aftermath

I’m very happy I took the opportunity to work on something I believe has a place in the future. During my time work on IOTA related projects, the only compensation I got were donations from the community (I had a donation feature on the tangle explorer).

I’ll never ask for more. This experience will stay with me. I’d like to thank IOTA for that again. In fact, the experience was actually so cool, that I made up my mind. I want to do more for IOTA, not less. I reached out to one of the people who asked if I would want to work for IOTA. Whatever happens, this was totally worth it.

If you are a developer, and you have the feeling that your work starts to get a bit repetitive, don’t be afraid to reach out to a developer of an (open source) project. A founder of a company. Even if it’s not in your field.
Ask them if there is stuff to be done, outside of the regular bug fixes or contributions you can make. I encourage you to do that. And when you do, be sure to post your version of the outsiders story!

Categories
AI Uncategorized

Let AI come up with your next domain name!

Intro

Before I started on my own AI-related venture, I didn’t know anything about it. I knew what it was, but I couldn’t begin to explain how things worked. Turns out, I can learn a lot when I can add “motivation” to the list of ingredients (no pun intended). Everything that interests me, will stick in my mind forever.

One of the most beautiful things was that I’m doing exactly the same thing as when I was that naive 13-year old kid that just started programming. I learned bits and pieces about programming languages, if-else clauses, loops etc, until the pieces fell together. Then I started building stuff, I didn’t look up or around: this was the destiny for me.

Now I’m 25 and I’m doing the same thing with AI, and it’s awesome. I gave my first AI-related talk 2 weeks ago.


One of the things I wanted to do was something that hasn’t been done before (at least not publicly).

So I built an AI that comes up with brandable domain names. Which from now on I refer to as NameAI

When I started “NameAI”. I didn’t expect much, but I was really suprised by the results! After half an hour I already got a lot of good names (like kixely.com).

If you want to dive straight in the source-code, see the bottom of this post with the Github link!

The research

I started with a fairly common stack for AI-research: Python, Keras (with Theano backend), and Jupyter. You don’t need a strong GPU, a CPU is enough (everything >= Core i5 would be quick).

My dataset is a text-file consisting of ~25k brandable domain names, with 1 domain per line. Unfortunately, I can’t share the dataset publicly, since I ripped it from various websites (like brandbucket.com) but you can easily make your own.

After a brief moment of fiddling around with the parameters and data pipeline, I found the best way to achieve good name prediction. Our model consists of a single GRU layer with 128 units (which is quite small). My goal was that NameAI would learn the linguistics of what makes a name brandable, in which case such a small model is a perfect fit.

The data pipeline consists of our ~25k domain names corpus being split up at each character (i.e codebuffet.co will be split like this: [ ‘c’, ‘o’, ‘d’, ‘e’, ‘b’, ‘u’, ‘f’, ‘f’, ‘e’, ‘t’, ‘.’, ‘c’, ‘o’ ]).

In the initial run, we count the length of the longest domain name in the corpus, and then left-pad every shorter domain with a ‘_’ until it’s as long as the longest domain. This way each domain name is equally long, and we can also use the _ to determine how long our name will (or has to) be.

The data flows through the network in a time-series window of 3 characters.

Time-series window

A window of 3 characters means that the network will keep in mind the past 3 characters, while predicting the next single character. For domain names, I found this one of the best ways, since many of the vowels remain preserved in steps of 3 characters in the English language.

The training itself is unsupervised, which means that the input data is not labeled, and there is no validation. There is no way to measure the accuracy except by looking at the domains that come out of it, and see if it matches your satisfaction.
I did this, because we don’t want our network to validate against our input, we want it to come up with new names, and this is exactly where unsupervised learning is really good at: For example, while it can’t figure out what a face is from a series of pictures (without some validation-set marking the area of the face), it can cluster all the faces from pictures into different groups and output combinations of those groups.
This is the same with our names: imagine ‘.com’ at the end of each name, but also ‘ly’ which is quite common to append to English words, like timely or bitly.

Start training

After each iteration we ask NameAI to make a domain name starting with each letter of the alphabet (including difficult ones like X, Q, Z etc, we really want to push it’s limits here).

After the first iteration we have a lot of gibberish, which is no surprise. It looks like this:

Gibberish on the first iteration.

After about 5 iterations we really start to see some results:

After about 5 iterations, this is your output

Conclusion

This has been an amazing project to do! With a decent amount of examples in a corpus, you can get as many different names as you like. It probably works too for other type of names, like Pokemon names.

Maybe my (or your!) next startup name will come from Name AI 🙂 We’ll see.

I’m glad to share this with you guys, if you have any questions or suggestions for a follow-up – just let me know!

The full source code is at: My Github