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
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

Categories
Uncategorized Web Dev

New website and logo showcase: A brand new brand

Yesterday, the newest CodeBuffet website has been put online! The entire website, this blog and logo has been changed. There are a number of nice little technological achievements in the new website, and I’d like to share those with the world!

5 years of CodeBuffet

The new website

The main differences between the new and the old version, is that the new version is completely home-made. The previous version was just a custom WordPress theme.

1 big slide show

The first thing you’ll notice when you go to codebuffet.co, is that you can slide back and forth into different slides while being on the homepage. On some slides, you can scroll down to read more about the specific slide (i.e scrolling down the homepage slide will give you an intro to the company)

I have had this kind of design in my mind since 4 years, but it was only now that I had the feeling that I had implemented in the most practical way. I see this kind of design as quite risky. I wanted to try it nonetheless.

The colors of the page adjusts to that of the content

One of the reasons I wanted a ‘big slideshow’ was to make the portfolio come to life in the best way possible. One of the things that occurred to me when you have such a big space reserved for your portfolio, you basically have 99% content and a 1% frame.

So instead of adjusting the content to fit the page, I decided to adjust the page to fit the content.

2 different slides makes the side adjust it’s color.

There is something very interesting in the way this works: The logo on the bottom-center is not an image, it’s a font. The reason for this is because you can’t instantly change the color of an image in html/css/js without using a canvas or pre-processed (colored) versions of an image (source). Using a canvas with color transitions would be a disaster regarding performance. With a font, I can change and transition the ‘text color’ back and forth to whatever I want, without having performance penalties, even on mobile.

Logo changing colors

Conclusion

Overall, there are some very neat developments being done on this website, it’s by no doubt become a creative outlet for my company’s web development efforts. It’s been up just one day (at this time of writing). I hope you like it, any feedback is welcome 🙂

Categories
All Hail the Pioneers Life & Low-Tech Uncategorized

All hail the Pioneers: Day 3

This is the last part of a 3-day series. Click here to view all posts in the series.
About 2 days late, sorry about that 🙂

The last day! Picture made by Hans Stockmans, used with permission.
The last day! Picture made by Hans Stockmans, used with permission.

I woke up and rushed out of the tent quickly, as this was my last day. I really wanted to take it all in this day. Every day there are new workshops that you can do.
These workshops vary from technology, entrepreneurship to philosophy and spirituality.  Today was the first day I actually could do them all day.

I decided to only focus on the low-tech workshops (that didn’t have anything to do with technology or entrepreneurship).

As I walked still half-asleep to the panel with the workshops for today, I couldn’t really pick one. A nice lady behind me shouted “Who’s in for yoga?!”.

“Great!” I thought, now we got something going on!

About an hour later we were back at the main campsite, the yoga in the morning really helped to wake up, I even decided to keep doing it at home as replacement to morning gymnastics because it’s less intense but gives the same result. I think it’s around 10 in the morning now.

I don’t remember if the second workshop was first or the breakfast. Needless to say, the breakfast was very good, as was the lunch. This was the first day I actually could eat breakfast or lunch without being in a hurry. I think there were more than 4 different kinds of bread and around 10 different things you can put on it. So for everyone’s taste there was something.

The second and my last official workshop was a spiritual one, called “Travel to your past life”. Now I would like to mention first that you don’t have to believe in reincarnation. For me, if something brings you the feeling you intended to get out of it, from that point, it doesn’t matter if it’s real or not anymore. I can understand that most of my readers would lose me from this point on 🙂 All I can say, I would lose it too if I would read this without being there myself. So try to focus on the result and the feelings rather than on the believes, if that’s not your thing.

We were with a big group, I think around 20 people isn’t exaggerated.
We gathered around a tent in the main campsite, the instructor, called Anita, introduced us to the workshop. We were explicitly warned that not everyone could travel to their past live because of the large amount of people that joined today, and moved to the same location as where the yoga took place in the morning.

I’m not going trough everything we have done there, as that would make the post too long, so we focus only on the first and a bit on the second person who got a reading before we move to my experience.

After everyone sat in circles around Anita, the first lady who got a reading was chosen. She lied down next to Anita (who was sitting besides her) and trough different routines she was able to read what the unconscious mind was telling you. Every time she tells a century like ‘1500’ and by lifting your arm she could tell if that was the year your past life was in.

After a while, the girl was able to describe where she was and what she was feeling. I noticed that she was more capable to describe her feelings than her surroundings (which sort of kept being the same throughout the process). She told us that she was being betrayed by her husband at that time and killed by the villagers.

I was a bit shocked by how much it got her. You could see the fear on her face. At that point, I didn’t really wanted to go myself anymore.
After that was done, there was another process where you would accept what happened. So basically ‘forgive’ your past self. At that point everything seemed OK again.

After that another girl got a reading, she had a much more relaxing past life (in a cave eating a raw rabbit) which was also described much by feeling (she said “I can taste blood” before actively describing her surroundings) which made me more eager to try it myself again, since nothing really happened.

The third person was chosen in a different matter. Anita used the energy of everyone in the group with 1 chosen ‘medium’ (which was me) to ‘vote’ who would go next.
Eventually Anita was asking if I would want to go (which my unconscious mind would answer) and it said yes.  So here we go!

I was lying there, where 2 people before me had good and more fearful experiences. I was asked to focus on a giant gate where I would go trough, to find my past life behind that gate. The thing didn’t open for me, but I looked up. I saw something that resembles a hot air balloon. A moment later I was in some sort of shed, in a small village, it looked like the middle-east. It was very hot, there was a lot of sun as well. I saw a man in the shed that looked like me, but darker skin and longer hair. I knew it was me, not because I recognized him, but he had that look. That look what I have too when I’m working on a brand new startup idea. He had that too, even more than I had actually. In front of him was the balloon. It looked like a bad quality version of the ones today. The balloon was hard, made of leather, the basket was very badly made, you could see the floor trough it.

My shed was open, people walked outside, they didn’t really care about me, but did leave me alone. This was a comforting feeling to me, and I was happy.
So overall a great past life! Everything I describe, I said out loud while I was in my past life, so the other people could hear it.

I felt a handshake (like physical in my right hand) but I knew it wasn’t real. I focused on my right hand in my past life and a man was there. He didn’t speak but I could feel what he was doing there, we was a friend that helped me and came looking how it was going.

Anita brought me a bit forward in time. We were at some sort of smaller version of the Grand Canyon. There I was, with the man and some sort of wooden cart that I think carried the balloon. The balloon was in the center between us. I could feel the thrills.

Then the whole thing turned.

My past self was doing something, where I myself was thinking “am I really that stupid?”. I couldn’t believe what was going on. I didn’t want to describe it in front of everyone, without knowing if it actually was happening. I was dragging the balloon on top of a hill and jumped off of it with the balloon.

Then the images stopped coming. I couldn’t see what happened but I knew it very well. I died in the crash. I broke down because of this. My eyes were filling with tears, not because that I saw some sort of death, but that I was so ambitious there, real or not, it was a manifestation of me, that I wanted to give my own life for the balloon to make it work.

Moral of the story

After the past life workshop, I kept thinking about it. I saw it as a symbol. The balloon could have been anything else.
I am very ambitious, I don’t know how to give up, I failed a lot of projects and yet I keep going and keep learning and it never wears me down.
When is that too much? How long does it take for me to ‘crash’?

That was what kept me thinking.

The ending

The rest of the day was going really well, I talked to a few people, we still got a part of the ball pit set up!
When it was time to go, I arranged a lift to the station, and left with a whole bunch of new experiences, and thinking how I would write about them.

Conclusion

I started this 3-day series to encourage open-minded, smart people to organize meetups like this. Be yourself, get years worth of self-reflection in just a few days, and have fun while doing it.

I’ve been to a lot of meetings myself and the bottom-line is usually the same. Go do some networking, make sure you up to date with what’s happening in your industry etc. And while that is important, this will never let you be truly yourself around the people around you, even if they are like-minded.

You’ve read the last part of my story, let this be the start of yours!

Categories
All Hail the Pioneers Life & Low-Tech Uncategorized

All hail the Pioneers: Day 2

This is the second part of a 3-day series. Click here to view all posts in the series.

It was early in the morning. I just woke up expecting to be annoyed by the fact that I was sleeping in a tent in the middle of the woods (I don’t like camping in general) but that didn’t happen. I found the sounds of the early birds and even the moist air quite pleasant. I got up quickly and joined the rest of the people for breakfast. This didn’t last long, as I had planned to join René (A friend of mine who I knew before the festival) in making a hardware/software project that will allow easier networking between 2 people. It was my way of contributing to the festival, aside from smaller tasks.

It was some sort of ball pit where next to it a pillar with a big button was placed. Another pillar would be placed in the center of the festival. The idea was that you push the big button at the ball pit and a voice will tell you that you can enter the ball pit. The pillar at the festival would light up then, where, when pushed, another voice at the ball pit will tell you that someone is coming to join you. When 15 minutes have passed, the routine starts over.

I quickly grabbed 1 slice of bread, then we drove away to a working place not far from the festival.

At the working place

When I first entered the work place, an open space where different kinds of people go, it was heavenly. The whole thing was so peaceful, that even right now it still cracks my head why I liked this place so much. I think it must be the combination of the simple things that where there. The sound of the pool, the chickens that walked the lands, and the view of the big house that sat in the middle. Each one filling a gap that would otherwise be empty. Nothing overfilled, just enough to create a smooth surface ready to slide away on.

[easy_panorama id=”167″]

Although it wasn’t all that fun. I planned to go back to the festival around 16:00 as this ‘would be’ my last day. I would do some workshops when I got back (every day there are new workshops you can join)

We got delayed heavily on our project and ended up working for 8 hours straight if it wasn’t more. We couldn’t finish on time and we stopped around 22:00. While I did enjoy the view and the people at the working place I wasn’t that happy that I missed so much today at the festival. I decided to talk to my family and see if I can get an extra day so I can enjoy some of the workshops. After all my chores were delegated I could stay an extra day and as disappointing I was, as happy I am now.

We missed dinner, but we got some surprisingly good food (it was like chilli con carne with bacon) from the people who ran the working place. To my surprise, this was also my first technology-related conversation I had during the festival.

Back at the festival

We got back late. After a few talks I joined the campfire and got into a new conversation with ease. After I started talking to a good friend who just arrived, I felt like when I close my eyes, I would fall head-first into the campfire. So I decided to be honest and tell him how tired I was, instead of pretending to listen. We could finish it tomorrow.

I took a shower at the camping’s public bathroom which woke me up again. At this moment it was like 00:00 and I joined the campfire again. New people sat around the fire, and this is where the second and third conversation was about something in my comfort zone (entrepreneurship, technology). All other conversations were non-tech related. As I talked about my upcoming project/startup, my enthusiasm rose and thus did my energy level. At the time I really went to bed it was like 4:30.

But I was happy. I didn’t regret that I stayed so long at the workplace, as I would never had found such peace while working. I still got another day to really get into the festival. But that is for tomorrow!

Categories
Uncategorized

How very bad internet and enthusiasm made my game idea come to life in 3 days

You might think this is just a rant about a first-world problem, but most certainly not (well, maybe a bit, but the subject of this post is more about mental exercise through having limited resources)
I was on a holiday for 2 weeks in Stadtkyll, Germany with my family.

Before that, I played a card game called ‘Set’ where pattern recognition is a great skill to have to win. I’ll explain it quickly:

One person takes a card and puts it on the table (it’s the same person every time, no turns taken, and he can too play the game along with everyone else)
Each card has a color, shape and number (the amount of shapes). When you find 3 cards that have either one of the same properties, you yell ‘Set!’ and the 3 cards are yours. In the end, the person with the most cards win. I wanted to wrap this game logic in a simple, commercial package but didn’t know yet how.

Back to the holiday. Halfway-trough the holiday I had to update an Android app of mine. I needed to go into Google’s developer console. I did and my eye caught this:

Screenshot from 2016-08-15 12-33-59

And there we are: Peter in a enthusiastic state! You can wake me anytime for anything even remotely related to a Hackathon (not those awfully commercial ones, but the smaller ones are cool!)
It was august the 8th I think. I don’t know what happened that day,  but suddenly every creative moment of the last 3 weeks fell together. Boom. Finally a cool version of the Set-game arrived in my mind (for those interested in the game itself: I’ll leave a link at the bottom of the article).

I didn’t even read the form, that showed up after you hit ‘Submit your game’ – I just started coding asap. (Apparently it’s only for people living in Canada and US, which I found out afterwards :()
The idea I had was to make random bubbles with random colors and patters on the screen. On the bottom of the screen there would be a timer, and the example bubble(s) you have to find.
The timer would rapidly decrease from 100 to 0 in about 4 seconds. When you tap the right bubble, the points left on the counter will be added to your total score, waiting for a new game round.

But there was one problem.
The internet is very, very bad. Even the developer console took half an hour to load.
It was clear to me that I couldn’t use an engine like Unity or LibGDX (to which I’m used to make games with, especially when prototyping)

All I got was a text editor, a OS and some npm tools like gulp, harp (a static server that transparently compiles CoffeeScript and languages alike) and luckily Cordova, upon which I proceeded to write (or better say deploy) my game in. It was set (ba-dum-tss): It was going to be HTML5 and CoffeeScript (that compiles to JS) – No engine like Unity, no LibGDX, not even a JS engine!

But I didn’t want to re-invent the wheel entirely, so I decided to add a rendering engine library, called PIXI.js.
I started downloading PIXI.js (the minified version because the full version took too long to download). It was done in about 1 hour on around 200 bytes per second.

While this was downloading and failing a few times, I started to write the whole game’s logic in a CoffeeScript class with subclasses that represent parts of the game. It looked like this:

totalColors = 5
colors = [0xff4a4a, 0x3aef35, 0x4acaff, 0xefce35, 0xdb35ef, 0xd07925]

class Bubble
  # Bubble pattern and color here

class FindTheBubble
  gameOver: ->
    # Start gameover animation
    @status = 'gameover'

  startPlay: ->
    @status = 'playing'
    @points = 100

  constructor:
    # init empty variables, like array of bubbles and the total score
    @points = 0
    @status = 'idle'
    @bubbles = []
    for i in [0...10]
      # Add bubbles here
      @bubbles.push new Bubble(...)

    @bubbleToLookFor = random bubble of the list

  clickBubble: (bubble) ->
    if bubble is @bubbleToLookFor
      @total += @points
      # Start new game
    else
      #Instant gameover


  # This is what the future rendering engine will call each frame
  tick: (dt) ->
    if @status is 'playing'
      # Here I decrease the 100-points timer like this
      if @points > 0
        @points -= dt * 0.025
      else
        @points = 0
        @gameOver('time_up')

The result is that I can now play the game I had in mind using nothing but my browser’s console. This was not only quite funny to do, it also allowed me to tweak the logic, implement a different kind of score counter, and add more or less bubbles.

The finished game
The finished game

In the meantime PIXI.js finished downloading. I then couldn’t work much further because I never used PIXI.js. So I walked out of the bungalow and went to the park’s reception’s office where they have better internet (but still slow compared to what we’re used to at home). I cloned PIXI.js from GitHub so I had their docs.
I walked out and went back to our bungalow. It is quite a big walk, our house was on top of a hill, all the way on the other side of the park. It was a hill not made for nerd-legs. I don’t know how steep it was, but it felt like I almost had to climb back home.

With the docs under my belt, I started to write my class to a simple GUI. This is I think day 2. The GUI was just a bunch of colored squares and a score panel I made in Gimp.
It was really cool to see the GUI come to life without a single bug, since I already had tested my game with the class I made.

When I got home, I took off the rough edges: made sure the game scaled correctly on multiple resolutions (see this issue on GitHub), made the final bubbles, the screenshots and the entry on Google Play. And that was it! The game was born.

Wrapping up

It’s good to set yourself aside from the conveniences of today’s world from time to time. I’m sure i’ll do it again!

What happened here is that I learned to deal quickly with (intentionally) limited resources, and along the way, even made me think outside the box in no way I ever did!
I mean, I could have sat all day at the Reception’s office, and have a more decent connection, maybe develop the whole game like I usually do, and I’m glad I didn’t.

This experience was great for me, I hope you enjoyed reading this story, maybe learned something from it!

The finished game

It’s called Find The Bubble. It’s available on Google Play here.

If you have any feedback or questions don’t hesitate to leave a comment!

Categories
Uncategorized

I just made a fan-app for Pokemon GO!

Update: I removed the app from the play store because of the lack of users 🙁 I will bring it back soon, making it look more appealing 🙂

Hi there,

I’m a big fan of the Pokemon Go app and the community around it. I’m a big nerd, I admit, and I usually only go outside for my work, until this game got released :). My first Pokemon game was Pokemon Yellow on the Gameboy Color. A feeling like starting to play a game like that, never came back, until Pokemon GO came around.

What I would like to see was a more social aspect, something where you can make your own teams (in my app called Clans, to avoid confusion with Team Mystic, Valor, and Instinct), and catch together, even when you are apart.

You can see the pokemon you caught together, chat within the clan, and view user’s Pokemon GO activity.
All this stuff is not using any private API’s from Niantic but uses it’s own servers and database (you just upload screenshots to the app, and it can automatically detect what pokemon you caught), so it’s not illegal, or against Niantic ToS, and therefore doesnt have to be removed.

 

A version for Android is available here: https://play.google.com/store/apps/details?id=co.codebuffet.gogroup2
iOS is coming soon if there are enough users 🙂

Categories
OpenFire Uncategorized

Announcing OpenFire Beta: Revolutionary database & backend-server

I’m a big fan of Firebase and services alike. I used it at the first hackathon I participated in. They make front-end development so easy and blurs the borders between development and production in such way that you don’t have to worry about it. Focus on the contents of your software!

For people unfamiliar with Firebase or noBackend in general, noBackend is the name for a trend where developers move a lot of their code normally residing on the server side to client-side tasks. It makes servers doing less heavy jobs, “borrows” their users PC to handle most of the tasks, and only do the absolutely necessary on the server (like security and storage)

Past week I have been trying to find open source alternatives on backend-engines just for fun and came across some good solutions like PouchDB, Deployd and Hoodie.
I really liked them, but they all were not 100% production ready, Hoodie doesnt have support for custom security rules, PouchDB (works on top of CouchDB) only allows user-private data with a custom database per user. And Deployd is slowly updated right now.

I was a little irritated at this, because I believe there is a lot more in the market for static web apps than we might think. A LOT more.

 

Draft5
Yellow, the OpenFire Mascot

Announcing OpenFire

Today I finally finished the OpenFire beta release. It’s done in 3 weekends. It’s far from perfect, still in beta but it’s awesome and I’m very proud of it, so proud I decided to open-source all the code and share the idea around with you guys. The purpose of this post is to gain initial feedback for me to decide how to go on with this project.

To begin, OpenFire doesnt want to be your database:
– It wants to be your backend, so you don’t have to worry about creating and maintaining one.
– It wants to interact with your database of choice, so you don’t have to.
– It wants to synchronize your data real-time across your users

All it takes is 2 commands to install and get started, if you like to check it out already, here is the link to our website: openfi.re

It is database agnostic

What did you say? Yeah! Soon, creating data static web apps will be just like creating data on a typical Django or Ruby on Rails app. You can just pick a database you like to work with and OpenFire will share it’s data with it.
This works by having a built-in abstraction layer, where you can make it work with other databases using plugins.

If you need speed to read/write, hook OpenFire up to Redis.
If you need to store large objects, just plug in MongoDB.

How awesome is that? Currently OpenFire only has a in-memory database that is gone when you close your server, but I will definitely make support for more databases. I first wanted a minimum viable product 😉

Real-time data pushes

The OpenFire SDK has built-in support to connect to the server using WebSockets or Long polling if WebSockets is not supported. Quickly listen to object additions, deletions or changes and receive data in a serial-matter for extreme speed that outperforms HTTP big-time.

Fast to read, fast to write

OpenFire has a number of home-made technologies that makes storage efficient and reading fast. For instance, if you store a big object, and only want to read back a child of that object, it will only load a part of the object in memory.

Contributions

CodeBuffet is a 1-man company, so all contributions, big or small are openly respected and encouraged! I currently haven’t got the time to write good documentation, but I will definitely do that somewhere in the weekend!

Roadmap

The reason for me releasing this project already is to gain initial feedback and to see if more people like the idea.
OpenFire is definitely not production ready yet. It lacks certain features for running a stable server, like wrappers for a proper database like MongoDB or Redis, also there are no security settings yet for you to configure.
I’m planning to use OpenFire long-term for my next projects and can’t wait to see it production ready.
The following features are planned short-term:

– Database support (I start first with MongoDB I think, as it’s the most general-purpose database suitable for this kind of work)
– Offline compatibility in the SDK
– Security (validate data before storing in the database)

Get started

Our website is at: openfi.re
You can play with the example or download it for yourself 😉

How does it work?

Click here for an in-depth overview.