Tuesday, October 22, 2019

Flamingo



Quite a while ago me and Johnny started a project called Flamingo, a very simple vocabulary memorizer, our apps usually have 50 to 100 words, we try to pick the most used words and phrases in each language.
The idea is simple: behind the scenes there is a roster of 10 words from which they are picked randomly, the better you know a word it's less likely to show up, that way words that you have trouble with are more likely to show up, once you answered correctly enough times the word is removed from the roster and the next one comes in.



Technical Stuff

Flamingo went through quite a lot of mutations, starting with Java for Android Native, then to VueJS with Cordova to eventually Svelte which is by far my favorite JavaScript framework to date.
We also automated pretty much anything we could, since all the applications are more or less the same we were able to automate 99% of the process of publishing a new language, besides the actual content (words and phrases) everything else was automated, including:

Our setup had a single git repo for the sources and scripts, and a Google Drive folder for app specific assets (word database, graphics, build files, etc...)

Our Google Drive folder

In order to make a new app we used a grunt script that would do the following:
  • Use SoundOfText to scrape audio files.
  • Generate graphics - icons,store graphics and screenshots.
  • Copy relevant files from our Google Drive folder into the workspace.
  • Configure some variables in the code (app name, adsense ids, etc...)
  • Build app and run some tests.
At this point if everything looked fine we would run another script that would upload and publish the app in the store and voila! we have published a new app!

Wednesday, September 6, 2017

Mixtape!


I'm very excited to show you my latest creation - Mixtape!

Mixtape is an idea I've had on my mind for quite a while, it's a web app that allows you to create and share a playlist in real-time. Perfect for house parties or the office, the idea is that anyone who joins your station can add songs to the playlist, so you won't ever need to beg the DJ to play your song, it's a new form of music democracy!

It works like this: you open a station and then share it with your friends. You can do this by either giving them the 4 digit code, a link and even by a QR code :) Once they join they can add songs and take part in the DJing experience.

So no more nervously asking for your fav 80s song, or pestering the DJ until they listen to you - now you just add your song to the playlist, sit back and chill.

Mixtape works everywhere - at home, on your roof terrace, in a bar, in a club/ Just grab the station code and start adding/ Oh, and you can view the earlier songs on the playlist too, so no more need for Shazaam :)

Techincal stuff:
Mixtape was created using Vuejs, Node, Express and a mix of Javascript libraries, it was very important for me to make the user experience rapid, no login (which is annoying for the user) and no user database (which is a lot of work to maintain), all the data is cached on the server in a Javascript object, users are identified using FingerprintJS, the only reason i have any identification at all is to prevent users from spamming the station with songs, each user have to wait 90 seconds before adding another song to the list.

Currently i'm using Heroku's free tier server so the server will reset after some time when unused, clearing all the old stations.

Client / Server communication is implemented using Socket.IO which makes everything work super fast, when adding a song to the playlist all clients will have their list updated immediately which is really cool.

Mixtape also has a very cool fader, i made it using 2 youtube players imposed one over the other, fading in the volume and the opacity of the players.

You can even fork the source code here :) Enjoy!









Monday, January 27, 2014

Global Game Jam 2014!

I have been going to the Global Game Jam every year for the past 5 years, and i can definitely say that its the best event in the gaming industry in Israel (at least for me :)
The place was full, with more than 400 participants (485 Registered), Tel Aviv jam site was second world wide right after Egypt with 500+ participants (Respect to the middle east! :D)
Imagine an entire floor packed with geeks who are crazy about games just as much as you are, all gathered for the sole purpose of making games, crazy right? check out some photos here.
And so, without further ado - here is my game! Coloruzzle, a color based puzzle game, i don't want to explain too much about it, i think its more fun if you try to figure it out without instructions.
since this was for the game jam, as you can see it is a pretty basic game, all done in 2 days with some finishes the day after, so its mostly a conceptual mock-up for a game, also - we didn't have a lot of time to work on level design, some of the levels are just random :P but they are all passable!
so enjoy! leave feedback in comments :)



Coloruzzle


Credits go to:
Me - Programming and game design.
Yael Roskis and Shahar Oz - Level Design.

Sunday, August 11, 2013

Nuclear Rabbit 3!

Another Nuclear rabbit!, i dedicate this post to Nelly :) a cute chick from Finland, she is the reason i started (and finished) this new piece!

For some reason these japanese characters just felt right, hope i didn't make any mistakes :P
Enjoy!


Tuesday, December 18, 2012

Live Wallpaper! Nuclear Rabbits

The craziness continues! My new rabbits wallpaper!
This time it's more of a "designer's" wallpaper :P nothing ultra cleaver, i just put the emphasis on the design this time, and its totally free! Hope you like it!


Wednesday, December 12, 2012

Bubbles Wallpaper available!

just  a quick post, since i already made a post about my bubbly wallpaper, i just want to say that it's now available for sale on Google Play :) it's really cute, you should check it out!

i made a few fixes, and added a new background image, hope you like it!
Peace!

Monday, December 10, 2012

Meditating Kitties live wallpaper!

i'm having crazy fun making live wallpapers for android! by a friend's request, i made this floating kitties wallpaper, the kitties will float endlessly up and will slide and roll on the edges :) its pretty sweet!
this time it's for sale, no freebies! 
check it out on Google Play.

Meditating Kitties live wallpaper - click here!

the bubbly live wallpaper is also coming soon to Google play, stay tuned :)


Sunday, December 2, 2012

Bubbly Wallpaper for Android!

if you remember, one of my older posts was about a bubbles particle system i made for flash that looked really cool (you can look in here!), since i got all into android programming, i figured making a live wallpaper from these bubbles should be sweet! so lo and behold, my awesome live bubbly wallpaper :D
using the orientation sensor i made the bubbles go upwards, no matter how you're holding there phone.
please watch the video in HD, it looks so much better :P


it's not yet finished though..  still some fixes to be made, but it looks cool eh? :D
hopefully in my next post it will already be on Google Play with a few extra themes!

Sunday, November 25, 2012

NRC chrome theme!

just a quick post, when i was younger i was in a graffiti crew called NRC (Nuclear Rabbit Crew) it was really fun, to be honest, every time i think about it i ask myself, why not go out and do some graffiti.. anyway in the spirit of the crew i created a couple of images with a design i really liked. i thought why not let the world enjoy them? :D or better yet, why not make a Chrome theme of them? :D,  and so i did, and you're all welcome to download it!






Wednesday, October 31, 2012

Tasko!

hello again friends! it's been a few months since my last post, and a lot has happened in that time, i quit my job and started working on this new project i'm about to show you, its called Tasko ! a personal tasks manager for Android :)

so, the idea in general is to create personal tasks, set how much time you would like to work on each one, for example: 1 hour of guitar practice a day, or 2 hours of yoga every week. then, when starting to work on your task, you click a play button and the app starts counting time.
the tasks can be either daily, weekly or monthly, and will relapse accordingly.

Ok forget what i just said, just look at the tutorial, you will understand everything :)

Step 1.
when first opening the App, it should look like this,
this is the main screen, here you can see a sum of all your tasks.
to add a new task, click the + button in the top right corner.
Step 2.
fill in all your task's details, here i made a guitar practice tasks, 1 hour every day.
click save.
Step 3.
a new task has been added to your list. click play and start jamming :)
 there's some more features like leveling up, and also creating a "tick" task (a task with no specific time), you can see in these screenshots:
and that's it! it's been mostly a learning experience for me and an addition to the portfolio, this version is going to be free to download. i have plans to add an achievements system and maybe charge some money for it :P but we'll see.. 
before i upload it to Google Play, i still want to make a beta cycle, so if you want to help out, send me a message and i'l send you the app, and just email me if you catch a bug :)
this app has not been tested on anything but galaxyS2, and i know there's problems with the display on some devices, but try it anyway :D 
Cheers!


Sunday, May 27, 2012

SnoozeBlitz!!!

yo yo yo! i'm super excited co'z i just officially finished my latest game! :D

SnoozeBlitz! check it out!

SnoozeBlitz!

yes i know i have said that before but this time it's different, when i first finished it it didn't have any sounds in it and to be honest i didn't put much thought on that subject, luckily enough, world famous musician Omri Lahav saw my game and generously enough offered to compose music for my game, yey! not only did this give me motivation to add sound effects in the actual game but also to try a bit of sound programming, if you will pay close attention in the game you will notice how to music tempo is increased according to the wakeOmeter in the top left, below 20% it sound normal but it gets crazy towards the 100% :D

Omri Lahav

sooooo, i would like to give a big thanks to Omri Lahav, who made all the music in the game, to be honest i never thought music and sound could make such a big different in games (especially in casual games) but lo and behold, i was proven wrong, if you want to see the true difference for yourself just mute the sound before you start play, it's bad!





and now for all you code lovers, when i first wanted to make the sound speed up, what i did of course was googling "as3 speed up sound", eventually i came across this page, in which i'v learned that Flash Player 10.1 had a new Sound API, which enables developers easy way to sound programming, you can basically write the bytes yourself,

here's the class that i wrote for my game, for a Sound Class you can also speed up on the fly:
i can't take any credit for it though :P it's almost identical to the original.

package 
{
import flash.events.Event;
import flash.events.SampleDataEvent;
import flash.media.Sound;
import flash.utils.ByteArray;
public class SpeedUpSound
{
private var sound:Sound;
private var rawSound:Sound;
private var bytes:ByteArray;
private var position:Number = 0;
private var _speed:Number = 1;
private var totalLength:int;
public function SpeedUpSound(s:Sound):void {
sound = s;
rawSound = new Sound();
bytes = new ByteArray();
sound.extract(bytes, int(s.length * 44.1));
totalLength = bytes.length / 8;
}
public function set speed(s):void {
_speed = s;
}
public function play():void {
if(! rawSound.hasEventListener(SampleDataEvent.SAMPLE_DATA)){
rawSound.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleRawSoundData);
}
rawSound.play();
}
public function restart():void {
_speed = 1;
position = 0;
}
public function stop():void {
_speed = 1;
position = 0;
if(rawSound.hasEventListener(SampleDataEvent.SAMPLE_DATA)){
rawSound.removeEventListener(SampleDataEvent.SAMPLE_DATA, sampleRawSoundData);
}
}
public function pause():void {
if(rawSound.hasEventListener(SampleDataEvent.SAMPLE_DATA)){
rawSound.removeEventListener(SampleDataEvent.SAMPLE_DATA, sampleRawSoundData);
}
}
private function sampleRawSoundData(e:SampleDataEvent):void {

var l:Number;
var r:Number;
 
var outputLength:int = 0;
while (outputLength < 2048) { 
// until we have filled up enough output buffer
// move to the correct location in our loaded samples ByteArray
bytes.position = int(position) * 8; // 4 bytes per float and two channels so the actual position in the ByteArray is a factor of 8 bigger than the phase
// read out the left and right channels at this position
l = bytes.readFloat();
r = bytes.readFloat();
// write the samples to our output buffer
e.data.writeFloat(l);
e.data.writeFloat(r);
outputLength++;
// advance the phase by the speed...
position += _speed;
// and deal with looping (including looping back past the beginning when playing in reverse)
if (position < 0) {
  position += totalLength;
} else if (position >= totalLength) {
  position -= totalLength;
}
}
}
}
}


this class is short enough to read through but i'l break it down for you,
basically what happens is this:
when creating a new Sound Class in as3, if no sound is loaded in it, it will try to dynamically read sound bytes using the SAMPLE_DATA event.
when this event is called you can use it to write memory into the sound object, in any way you want, in this class we extract sound data from the the Sound class using Sound.extract() function into a ByteArray object, and then we read from this object and write to the SAMPLE_DATA event, in any rate we want, thus changing the music's tempo.

to be honest i would never have any idea how the sound bytes array structure is built if i hadn't read the article if found, stuff like the rate in which the sound is coded (44.1) and that the Sound byte array have a Float for each channel in the array :P i guess is more obvious to you if you do sound programming.

so! try the game, publish your score, tell your friends, don't do drugs, stay in school, and if you find any bugs let me know! cheers! :D


Sunday, April 29, 2012

Bubbles!

hey! as you probably have guessed, the main purpose of this blog is so that i can post old unfinished stuff that i think look cool :D, which brings me to this - my cool bubbles engine, left click to start generating bubbles :)

basically what i did is this: the bubbles move upwards along the Y axis, and move by Sin(y) along the X axis, each bubble is generated with a random size parameter which also determines the coefficient of the Sin(y), this way small bubbles get a small wave length and large bubbles get a large wavelength trajectory.

heres a more complex example with a few extra features i made, if you click for more than a few seconds you will see how the water current changes, plus!, walls collision :D

Wednesday, April 25, 2012

Megaman with particles!

Megaman with Particles! 


i'l admit it took a bit more time than i thought it would but check out this cool exampls of how you can use the particles in a game, here's simple game mockup featuring Megaman :D


left mouse button to charge and release to shoot :D
notice how the particle change behavior when charging, and how they follow Megaman in a big circle when not charging :P

Sunday, April 22, 2012

Aurora particles



finally decided to open a blog to show some stuff off :P
here's a very cool example for some kind of particles following the mouse, they move by a simple algorithm but still look awesome :P and even more awesome with some filters making it look like Aurora Borealis :D
- Clicking the left mouse button will make the disperse