this is a W you motherfucker! this is a W you motherfucker!
top about projects my photos rc stuff contact home
Welcome to my personal hideout

My name is Tobias and I've always messed or had something going on with computers. I use the majority of my time with computers; mostly invested in programming and trying out new ideas. This site functions as a personal hideout and as a place where I present some of my projects.

News/my blog

React Native
13/5/2017 Filed in: Programming

I have been looking at React Native by facebook and the project intrigues me alot. React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript.

I have experience with the ionic framework. With ionic everything is rendered in a webview using Apache Cordova. It works but especially on Android the performance is dreadful. I can already tell you that React Native is a better project in my opinion. The framework and the result is so much better. It makes sense. React Native compiles to native code for the respective OS, Android or iOS. That means there is no performance compromise and the apps built with React Native run just as smoothly as apps built using native tooling.

I still have some seconds thoughts about using other external building blocks with React Native. A lot of times maintainence of said external building blocks becomes a serious problem. The project React Native Material has not been updated for 7 months as an example. Not great. Right now React Native is a little short on features on both iOS and Android. Simple things like navigation features are not complete and lacking in documentation.

My idea is to re-build my app TV Lige Nu! using  React Native. I've already invested some hours pooking around and already have a crude working app. So this is a little new fun project.


How it looks now. Using React Native Material.

It is fairly impressive how little code was required to do the above; and it's all running with native UI elements. I will publish an article with details at a later stage. When this project is more complete. I'm not sure if this implementation will replace the current TV Lige Nu! implementation. It's just a fun project ;)

Compact SSD with Arch and GRUB
16/10/2016 Filed in: News

I've been using a compact SSD USB-stick for some years now. My trusty Kingston DataTraveller. A beasty performer considering it's a glorified USB-stick. It contains a SSD controller with the flash chips so it functions just like a normal SSD. It gives me about 40-50MB/s read/write speeds. Decent for my needs.

Recently I formatted the stick and started afresh. This post gives a quick rundown of what I did to restore its glory.

First of I made a copy of my main install from my internal SSD; 

$ mount /dev/sdb1 /mnt/kingston 
$ cp -axr / /mnt/kingston
$ cp -axr /home /mnt/kingston

Remember to use -x to only copy from the locale mount and not other mounted filesystems. -a for archive; preserving attributes, recursive and no de-referencing.

Sometimes you get this gnarly error when trying to install GRUB;

Installing for i386-pc platform.
grub-install: warning: Attempting to install GRUB to a disk with multiple partition labels.  This is not supported yet..
grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.

Therefore next clear what could be left of GPT or similar on the USB-stick. Making room for GRUB and insuring grub-install works its wonders.

$ parted /dev/sdb
$ mkpart primary ext4 0MiB 1MiB
$ quit

Then, zero the newly created partition.

$ dd if=/dev/zero of=/dev/sdb2

Then, delete the partition.

$ parted /dev/sdb
$ rm 2
$ quit

grub-install should now be able to do what it does.

$ grub-install target=i386-pc /dev/sdb
$ grub-mkconfig -o /mnt/kingston/boot/grub/grub.cfg

Verify the generated grub.cfg. And voilá. We're done. You should be able to boot from the USB-stick now. Remember to use the UUID of the sdb1 partiton in your /etc/fstab on the USB-stick to avoid problems.

Kotori your friend!
22/9/2016 Filed in: News

Some years ago I released the "Kotori Live Wallpaper" on Google Play. At the time called Android Market. The idea behind Kotori was to treat your background on your Android phone with a little Tamagotchi experience. Kotori is a little bird that "lives" on your phone. You need to feed and bath Kotori. Kotori in turn gives you small quotes and ideas; in the form of text on screen. Simulating that Kotori is aware of you and your phone. Your phone is low on battery? Sure enough Kotori will let you know. All kinds of reactions to the behaviors of your phone.

It had its success. First launched as a paid app, later a free version came. All-in-all Kotori Live Wallpaper achieved ~100.000 installs. Paid 5% and 95% for the free version.

 Now I have almost finished a new implementation. The old version was implemented using the Canvas-class and bitmap manipulation. It was a very slow rendering method. Not accelerated by a GPU. Rendered at 1 FPS. Similar to the original Tamagochi experience. The new implementation uses libGDX for the drawing and rendering part. With libGDX all rendering is done wrapped through OpenGL ES 2.0. This means GPU-acceleration. Currently this new version as no limit on FPS rendered. This gives a smoother experience. Sprite animations are used for the different animations of Kotori. All the sprites are reused from the old implementation. These were all handdrawn on paper with a graphite pencil and then scanned digitally.

 The core logic of Kotori is represented in something very similar to a finite state machine. Kotori lives its life in states. Even if you have your device turned off Kotori will still live on. When you turn your device screen off a timestamp is persisted. When you turn on your device again the difference in time is calculated and added to the simulation. Thus the life of Kotori continues even when your device is off in some sense. 

The new version is scheduled to launch the 25th of September on Google Play. There is a trial period of 24 hours. Hereafter you can unlock with a payment of .75 dollars. I'm using the In-app Billing service on Android from Google. This is a first for me using this service. We'll see how it goes. To make things even simpler I'm using this wrapper; I discovered some inconsistencies with documentation on how to test In-app Billing. Google provides some SKUs that will return some static responses. These SKUs provided by Google will not have a valid signature though. The opposit is stated in the documentation. This means you can't actually see a purchase the whole way through. 


I really like libGDX. Everything is wrapped intelligently and the documentation is pretty up-front. Some inconsistency but that is always expected in some form. What I really like about libGDX is that it makes it possible to target other platforms without much tailoring. I'm not sure Kotori will see other platforms though. The experience is too centered around the Android device.

I invite you to try out the new version of Kotori. Hopefully it can bring you some smiles. If you like the idea behind the Tamagotchi I think you'll find Kotori to be a fun little exprience. Please try out Kotori your friend! on Google Play! Have fun!

Promo codes for full unlock (use these during in-app purchase);


Previous Page 1 2 3 4 Next Page
Latest playlist
1. Roky Erickson - Bermuda
2. Roky Erickson - Bermuda
3. Roky Erickson - Crazy Crazy Mama
4. Roky Erickson - Haunt
5. Roky Erickson - Don't Slander Me
6. Aydio - Blue Smoke
7. Aydio - Peles tears
8. Aydio - Deltitnu
9. Abakus - Let Go
10. Cinnamon Chasers - Storm

I love taking photographs. Here you can see my latest snaps. More photos...

Central Hong Kong night skyline
Tian Tan Buddha
Tian Tan Buddha

Interwebs and me
You can read my professional qualifications on the about page.

I'm present at these sites;

mysteries dot © 2009-2017 design/code Tobias Westergaard Kjeldsen