For the weekend I visited Music Hack Day 2014 in Berlin. It was excellent!
I run a small private forum, which was (until now) running on phpBB, one of the most used software for forums.
There were some problems with that.
Let's begin with the plugin system.
What they call plugins is basically just a glorified search-and-replace mechanism which instantly fails if two plugins try to edit the same file. For me, this resulted in loud howls and some downtime as I tried to install a Thanks Mod.
Another fun thing is the UI in general. Once you have found your favourite thread to read (you had to click through about 4 buttons just to get logged in, then tried to use the search, which unfortunately doesn't search post titles or usernames) and now want to read the next page, you spend about 20 seconds just finding the next page option and then some more time clicking on this 4-pixel button, you tell yourself why pages? weren't computers invented so I don't have to turn pages anymore?. You gloss over that and want to insert your thoughts into the discussion. Pressing reply loads a new page with a very small input box, which cannot be extended in size. Why is it on another page if it's that small? Why does it reload the page when I request a preview? Why do I have to click on next after publishing my post?
All in all, phpBB just doesn't feel like the twenty-first century. It more or less feels like a military submarine built for the World War I, but with a fresh layer of paint from 1950.
After I have put about a trillion hours into trying to deal with stuff like likes, youtube/soundcloud embeds and other such trickery, I finally gave up.
No! I found new hope! Discourse is the thing I have been looking for. It's clean, it's actively developed, it can moderate itself, it has notifications, it automatically converts any link you post into some useful representation of that link, and for the love of god, it is not built on a language that behaves like thinking putty (php is soft and easy to shape, but once you let it sit for a few minutes it flows back into a pile of mush; also, it falls apart when you try to make large structures).
To read more on the philosophy of Discourse, here is a blog post from the founder, Jeff Atwood.
Some general thoughts about how to store my music metadata.
Warning: rather long read. If you are into music and are interested in a real-life example of linear algebra, read along.
Music is most fun when it's surprising, but meets your taste. Music listening (marketing) systems like Last.fm are based on that principle. Underlying suitable algorithms thus need a formalization of aesthetical similarity and a concept of what kind of music it is.
Music in a database should therefore, additionally to being ordered in Artist/Album/Genre, have attributes like mood, tempo, syntheticness or aggressiveness. The concept of tags, which I quite like, is an approach to this. Tags are boolean only, so they can't always be precise. A song can have a tag or – well, – not have a tag. By having a ginormous amount of sub-genres, sub-sub-genres and sub³genres, you can still add some granularity, however giving a song such tags can be time-consuming and mostly inaccurate.
Last.fm solved this by having each user tag his/her songs and display the most-used tags on a song first. For this to work, the song has to be listened to by many users. For less well-known music, there is never enough tag data for a song.
How to solve this?
Woo, math. You could describe a song with a set of properties (see above) each having a value specifying to what extent that property applies. Assigning these values (for me) often requires more thinking time than just assigning genres (or subgenres). Genres are basically predefined sets of values for the abovementioned properties, and because they are easier to deal with (in your brain), let's use a set of genres and a value for how much this song represents a genre.
Mathematically, a song is just a point in the n-dimensional space of properties. Viewing it as a space where the genres are the dimensions (so just a different basis, linear algebra whee), we can assign it coordinates in that space. If we have the mappings from our genres to their properties, using a little geometry, we can derive properties from a song by transforming the (genre,value) tuples to the (property,value) basis. This basis change happens through a transformation matrix, let's call it Mg→p.
The number of dimensions is rather infinite, let's limit it to the number of genres a user listens to.
So now that we have every song assigned a vector in our genre-basis, we can calculate the songs properties and also know, which tags (= genres) other users would assign to such a song.
Using the data we gain about the song from the user, we can construct and correct the genres position in the property-room, assigning each genre a vector of properties. From that, we can also construct Mg→p.
Going even further, since genres are often broad definitions, we can instead assign to a genre for each property a mean value and a standard derivation, which, when combined, gives us a definition of the variations (and fixed properties) of a genre.
Additionally, a user might react differently to a given song based on his current mood, situation or the time, giving it different ratings. So, when assigning values to a song, we need to compensate for how the user rated the other songs he listened to in the last few hours, comparing offsets and trends in specific properties.
If we ask the user about his mood, we can even build a profile and, when there is enough data, tell him what genres he might like in his current mood.
Conclusion: iTunes just isn't good enough.
Next time: How do we capture all that data and use it to play the user music to his liking?
If you're wondering: this post is a part of my attempt to design (and make) the best media-manager i could imagine. For updates on it, just follow github.com/cfstras/cfmedias
So, Visual Studio seems like a good IDE. It has most features one would seek in a programming environment and has nice erm... nothing.
There is syntax-highlighting, but only for C/C++ and some other bullsh*t languagues (if you can call C# a programming language).
The main best feature I have found yet is the ability to have two windows of source code open at one point. Whoa, what a unique feature. Oh, and installing "Productivity Power Tools" lets you have a nice overview of the code as scrollbar, but that's an extension. Why would a piece of software like that cost a whopping 500 bucks? I mean, vim can do more than VS if you don't add any addons and is open source.
Now for IntelliSense.
IntelliSense is what Microsoft calls the Ctrl+Spacebar that every IDE has now. It lists every Member a node has once you start typing. It's pretty helpful if you're too lazy reading the APIs for the libraries you are using or if you just forgot what arguments a function takes.
But, for some reason, some numbnut at MS decided to handle the Ctrl+Space event in the main UI thread, hanging the whole of Visual Studio if you accidentally hit it when having a lot of includes in a file. Or if it just decides to rescan your whole workspace. It does that while the UI patiently waits for the scan to complete. Effectively, if you have a big solution open, VS will pause for a few minutes, giving you the ability to get some coffee. Or kick your monitor. Or shoot someone.
Better just not start using VS at all.
*tearing hair out of my head*
Unity 3D sucks. It's a huge game engine and editor which aims to bring noobs like you the opportunity to create a very bad game. It aims to be simple to use, yet it uses C#-Style scripts and uses Capital Style Variable Names So You Can'T Fucking See If Something Is A Variable, A Method Or A Class.
Also it's physics engine is buggy like hell. If you finally get it to work (almost) like you would need it, it stops working randomly once you go out of debug mode. Since you're not in debug mode anymore, you can't find the source of the error. Once you switch to debug mode, the bug is gone.
And when you finally did something that could be a game, and spent hours building levels and scripted objects, you decide to add some fancy graphics and they tell you anything that doesn't look crappy has to be made with a pro license.
Examples: Shadows need a pro license. Being able to work at a project in a team needs a pro license. Render-To-Texture needs a Pro license. Importing Blender meshes doesn't need a Pro license (but it doesn't work). Video playback needs a pro license. Even another skin needs a pro license. The "Pro" Version is just "1500$". (Basic) iOS Support costs 400$. Basic Android: another 400$. "Pro" iOS and Android each cost an additional 1500$.
I suggest everyone who wants to use Unity 3D to do something serious to find a wall and bang your head to it as long as you still think it's a good idea.
So recently, Fluidblue, a friend of mine, officially released PassDeposit. PassDeposit is a high-security online password manager with a beautiful interface. If you’re interested in the inner workings, check out the code!
talkbox is a small and simple webchat built with node.js and jQuery. Currently, there isn’t any spam filtering, also nobody claims it’s secure.
But: It’s super fast to deploy, has a minimal footprint and you might be able to learn something while looking at it.
An instance running: http://talkbox.q1cc.net
Currently we have:
It couldn’t be simpler!
npm install talkbox npm start talkbox
git clone http://github.com/cfstras/talkbox.js.git cd talkbox.js npm install npm start
talkbox.js is licensed under LGPLv3. See the LICENSE file for a copy.
tuSync is a tool to sync an itunes library to any mp3 player like android devices.
A Remix in the "Look at Hank's Face" competition.