A few years ago, I was very active in the Casio Prizm development community, having developed three notable add-ins, contributed to the Prizm wiki, libfxcg (my fork), and even done a bit of reverse-engineering (the calculator OS is closed-source and there is no official SDK), that resulted in the discovery of a couple of syscalls and more detailed documentation on some other ones. Because of this, once in a while I still get messages about my add-ins, which I’m happy to support when possible. Most annoyingly, I also get messages about Prizm development, usually about how to start making add-ins.
Why are these messages annoying? Because I don’t really know how to answer. When I started developing add-ins for the Prizm, I had little to no knowledge of the C programming language, and yet, despite the fact that add-ins can’t make use of all the stuff “normal” C programs can (the libc provided by libfxcg is incomplete; the filesystem uses a different API, there’s no threading, the stack is giant compared to the heap, etc.), I managed to learn it. It certainly helped that I had some previous experience with programming in other languages, even if it was just sloppy code, but I don’t have much of an idea of what to say to someone who intends to learn programming using the Prizm.
I usually end up saying that learning programming using the Prizm it’s a bad idea, probably coming across as extremely discouraging. However, I do hope it’s for the best, and that these people will still learn programming – just not by developing add-ins! Had my first contact with programming been through Prizm add-in development, most certainly I would have chosen other career path than computer engineering. I mean this seriously. I’m glad my first contact with programming was through sloppy Visual Basic code. Anyway, I already wrote a post on my programming experience – it needs updating, but it should do.
Learning how to program, even in a “easy” language and common platform, can be overwhelming; for a programmer that is used to higher-level programming, learning the Prizm, a poorly documented platform with a small developer community, can be overwhelming; combine learning how to program with learning a poorly documented embedded system, and it will most likely be very overwhelming. Of course, nothing will stop someone extremely motivated – hopefully, not even my less encouraging replies, or this blog post.
What follows is the partial reproduction of an email I recently sent, in reply to yet another of these inquiries on how to start developing for the Prizm. I have edited it to make it less specific to the situation of the person I was replying to. I’ll also use the terms “Prizm” and “fx-CG 50” interchangeably, as add-ins built for the former run, with a few exceptions due to sloppy coding (one of mine’s one of these exceptions…), on all Casio Prizm models: fx-CG 10, fx-CG 20 and fx-CG 50.
Do you have any previous programming experience? If not, I honestly do not recommend starting with the Prizm or any other Casio graphical calculator. If yes, then be aware that this is not an “easy” platform to develop for. Either way, here are a few reasons why:
- Prizm add-ins are written in C or very limited C++ (that might as well be considered C). By today’s standards, these are very low-level languages that require manual memory management and a very good awareness of the machine. They also provide very little protection from programmer mistakes. While some people had C as their first programming language, it is by no means a beginner-friendly language.
- Even if you already know C well, or if you learn it from any common book, tutorial or course, you’ll be disappointed to find out that much of the standard library is not present, or is insufficiently implemented, in the Prizm calculators.
- Add-in development for the Prizm was made possible through reverse-engineering and educated guesses based on what was known about previous models like the fx-9860G. While we now understand the essential things about the OS on these calculators, many things are yet to be known.
- Documentation is lacking and the community is not very large. This essentially means that you won’t be able to just google your way through many problems.
- Reverse-engineering/documentation and development efforts for the Prizm have basically stalled. You’ll also find many materials that mention the fx-CG 10/20, but since the fx-CG 50 is basically just a faster version of these with a mostly compatible OS (although some things like memory addresses have changed), almost everything you’ll ever need will still apply.
Now, I’m sorry if I came across as dismissive or as discouraging, I’m just trying to make sure you know what’s in front of you.
For Casio Prizm development specifically, this is where I can point you:
Prizm forums at Cemetech
Use these to ask any questions you might have and try to find solutions to any problems you encounter. There are also some guides there, mainly on how to set up the development environment (compiler and such), but I’m afraid they might be a bit out of date. However, as I said, development efforts have mostly stalled, so consider anything from 2014 or early 2015 as up-to-date. Specifically, do not follow the “[HOWTO] Prizm C Development” in there, as it is out of date.
This wiki contains much information on the calculator, the reverse-engineered OS functions (“syscalls”) that can be used from add-ins, etc. It also contains more up-to-date instructions on how to set up a development environment.
Personally, I have mostly moved on from Prizm development about three years ago, as I began pursuing a degree in Information Systems and Computer Engineering. Every year or so, I make a short comeback to fix urgent issues with my add-ins and eventually make them compatible with new OS versions and calculator models, as is the case of the fx-CG 50, as long as that does not require too much time/effort. As time passes and I work with other technologies, the more I realize more how “hard” of a platform the Prizm is, and the less motivated I am to build stuff for it again; the fact that I no longer use my fx-CG 20 nearly as much since high school, also doesn’t help.
I’m afraid I can’t help you much more, as I’ve forgotten much of what I knew about the Prizm, both the “theoretical” and “practical” knowledge, and I no longer have practical access to a development environment for it. I tried to put as much of my knowledge as I could into the Prizm wiki before I left, and I believe that the people that now frequent the Cemetech forums will be able to help you much better than I can.
I think that one day I might find some interesting in working on the Prizm again, but perhaps more from a reverse-engineering angle. As for the fun in developing for a constrained, embedded system, there are much more appealing constrained systems out there, like the ESP8266.
I neglect this blog very much. I write a non-negligible amount of stuff on the internet, but it’s usually on forums, Reddit, Hacker News and similar, and this blog ends up forgotten. I just wrote a 2000 words post on at CodeWalrus, about the current state of Clouttery, but since it also contains a personal-life-log part, I thought it would be the perfect thing to cross-post here. It’s not the first time I paste forum posts here, and it’s something I should probably do more often, as it helps keep this blog alive while at the same time preserving posts that, while usually made as replies to a forum topic, are general enough to stand on their own.
Hello everyone again. I figured it was time for an update, even though this is not exactly a “happy” update, at least as far as Clouttery is concerned. This is a long post, bring it to bed so you can fall asleep to it if you wish, but trust me, it’s worth reading. I hope you can learn a thing or two about managing your side projects, from reading about my mistakes.
Last school year was the last year of my undergrad course (and I’m starting a second cycle course in a couple weeks) and this required some more effort, so I had less time for side projects. As often happens when one works on something for an extended period of time, I too gradually lost interest in this project.
To make things more… interesting, in mid-March I launched a small website that was meant to be kind of a practical joke about the unreliability of the Lisbon subway (for those who haven’t yet figured it out, I’m Portuguese). You’ll be able to understand what it is about by checking out its repo on GitHub.
I started that project mostly to have something different to work on that was not Clouttery, and the original plan was for it to be something I’d build in a few weeks, publish and then forget, for it to be yet-another-small-thing in my portfolio. But to my surprise, after minimal “marketing” on the SkyscraperCity Portuguese community, that has a section dedicated to railways and subways, my website received a lot more attention than I was expecting, especially for something so simple and tongue-in-cheek.
I then understood there was a real interest in a service that would let people work-around the problems in the Lisbon subway, while at the same time denouncing the problems with the service (for example, by collecting independent statistics). Long story short, a small community assembled around this project, which ended up evolving into an Android app called UnderLX that’s even published on Google Play. And there’s still a lot of work to do for it to become the product I envisioned.
This obviously took most of my summer.
Yes, it’s true that, unlike Clouttery (for which I had even written a complete billing system from scratch!), I’ll never be able to monetize UnderLX effectively. However, it is way more satisfying to work on, at least until I get saturated of it too. With Clouttery, it often took a while to realize what it was about, and let’s be honest: the final reaction of many people was just “meh”. However, with UnderLX, people tend to pay a bit more attention, and those who understand the whole potential of the project usually become much more involved in it. “Unfortunately” for me, the technical side of it is more complex than Clouttery.
It also has an “advantage” to my eyes: both the client (Android app) and the server are open-source from the first day. I regret not going this route with Clouttery; now I have lots of closed-source code which I can’t easily show to anyone because, well, it’s in private repos. I’ll go back to this point, later.
Finally, to add to the school work, the gradual loss of interest, this happy accident that was UnderLX, there’s a fourth factor in all this. Because of multiple reasons including the astronomical rise of the price of Bitcoin, it made economical sense to fulfill a long-time desire of mine: to build a desktop, so I could have a powerful machine, more powerful than my six-years-old laptop. Picking parts and putting it together was very enjoyable, and now I have a proper workstation like I had been dreaming of for the past couple years. If you are interested I might even post a thread about it here. I wasn’t much into PC gaming before (in part, because the hardware didn’t really allow for it), but… you see… to sum things up, many hours were spent chilling to some great triple-A titles (thanks Steam summer sales!…).
That’s all really nice, but I thought this topic was about Clouttery?
Work on Clouttery gradually slowed down through the last months of 2016, subject to how busy I was with school, and pretty much completely halted in March this year, as I got more and more tired of working on it, so I decided to do that “small” subway thing. It also didn’t help that I was going through a complex phase with Clouttery, more specifically regarding the Windows and Linux clients.
- I couldn’t get the Linux client to work right, despite trying to develop it from scratch multiple times using different languages and technologies. No matter what I tried, there were always major roadblocks to getting it to the point I wanted. I did not want to write it in C or C++; I hate Python but decided to try using it anyway – didn’t end well; UI framework bindings for Golang are apparently all terrible, or don’t have a suitable license. Mono would have been a viable choice, but the gtksharp bindings were tricky to get to work, they apparently had to be recompiled for each GTK version (meaning I couldn’t simply distribute a single binary), and the bindings for GTK3 aren’t/weren’t exactly ready for prime-time. Ugh, I don’t even know what all the problems were anymore. I do remember that I just wanted to write code, but problems with libraries and bindings and whatever were always getting in the way.
- The UI of the Windows client suffers from major lag and other problems, so I decided to switch from WinForms, which is no longer supported, to the supported and way more modern and flexible alternative: WPF. But this was taking a lot of time, certain things were much harder to get to work than I expected, it didn’t help that I only had time to work on it like one hour at a time (school work, etc.), and I lost more and more interest.
For you to get an idea of how inactive this project has been, these are the dates of the latest commits to Clouttery repos:
- Server: 2017-07-10 (and this was only to fix a bug with notification filtering; previous “real” work on it had been on the 23rd of March)
- Windows client: 2017-03-26
- Android client: 2016-12-29
- Chrome client: 2016-09-08
- Linux client: 2017-03-09
Earlier, I mentioned I regret not open-sourcing Clouttery from the beginning. I decided to work on it privately, because it was supposed to become a commercial service, and I feared that if I made it possible for people to host their own Clouttery servers and recompile the clients to talk to it, then nobody would pay for the service. This is obviously a stupid way of thinking, especially when the project in question is a personal project of a student that doesn’t have much time to work on it, and likely would never be able to get it to a commercially-viable state. If the service was worth it, I guess most people would happily pay for it, just to not have the hassle to figure out how to make the server and clients work for themselves; this is especially true since the target audience wasn’t exactly software developers nor sysadmins, i.e. it was people who wouldn’t have a clue how to do that nor would bother even if they were given clear and easy instructions.
Right now I have 30K lines of code, possibly more, that’s closed-source, but for no good reason. To aggravate things, Clouttery shows more of my abilities in software development and engineering than any of my open source projects, because it contains code in more languages, for more platforms, than any other of my projects; it includes web design, API design, use of cryptography, etc. It is not the most beautiful code (for example, the UnderLX Android app has much cleaner and organized code than the Clouttery client, and even then it’s not exactly stellar), but it works, and definitely shows what I’m capable of.
This whole situation is even more ridiculous, because right now there’s very little to no code in Clouttery that’s “novel” to the point of requiring intellectual property protection. At this point, Clouttery is extremely dumb, as I never got to work on the “intelligence” that would involve machine learning, pattern matching and the like. And in the end, if I wanted to make my super-awesome-and-courageous battery level prediction and damage identifying algorithms secret, I could always have added them as a closed source module while keeping the “infrastructure” open source.
Finally, I always told people that if I were to stop working on Clouttery, I would release its source code. I don’t know what you think, but if I half-close my eyes and look from far away… yeah… like that… yep, I definitely stopped working on it.
Then why don’t you open source Clouttery?
I definitely want to open source Clouttery, so I can show its code to more people, and so that others may eventually try to pick up on the project. I intend to keep running the official Clouttery server – if for no one else, for me, as my family finds Clouttery useful. I think I would be a little sad if someone took the project and simply changed its name and started running their own “official” service, available to the masses and possibly profiting from it, so I’ll see what kind of licensing restrictions I can add to prevent that. Without the help of a lawyer, it’s a bit hard to add clauses to existing software licenses or write new ones from scratch; even with legal help, it’s easy to get to a controversial result – for example, Facebook has that famous problem with the “patents” file on their open source projects, like React.
…so why didn’t you do it already?
I also need to write a bit of documentation explaining essential things about each repo, and ideally also explaining how to run the server, what needs to be in the database, etc. Or I could not care about any of that, and just have people figure it out by themselves – at that point, I make it hard for people to contribute, but at least people can already look at the code, which is much better than the current situation.
As you can imagine, all this takes time and effort, and I’ve been busy with all those things I mentioned in the first section. But with classes starting very soon, I’d like to get this going ASAP, or it’s not going to be done for some more months.
Did I “give up” on Clouttery too soon?
Is it a good idea to open source it, even if in the distant future I decide to turn it into a proper commercial service?
Do you agree it would have been better if it were open source from the beginning?
What license do you think would be most adequate? – don’t forget the server and each client can have different licenses.
Would you be interested in submitting pull requests for this project, perhaps even taking over one of the sub-projects or the whole thing?
Share your thoughts.
Go to the bottom, “Summing it up”, for the TL;DR.
The day I turn this website into a portfolio/CV-like thing will come sooner or later, and arguably that’s a better use for the domain gbl08ma.com than this blog with posts nobody cares about – except when I rant about new operating systems from Microsoft. But if you really care about such posts, do not worry: the blog will still exist, it just won’t be as prominent.
Meanwhile, and off-topic intro aside, the content usually seen on such presentation websites everyone-and-their-cat seems to have these days, will have to wait. In anticipation for that kind of stuff, let’s go in a kind of depressing journey through my eight years programming experience.
The beginning was what many people would consider a horror movie: programming in Visual Basic for Applications in Excel spreadsheets, or VBA for short. This is (or was, at the time; I have no idea how it is now) more or less a stripped down version of VB 6 that runs inside Microsoft Office and does not produce stand-alone executables. Everything lives inside Office documents.
It still exists – just press Alt+F11 in any Office window. Also, the designer has Windows 7 Basic window styles… on Windows 10, which supposedly ditched all that?
I was introduced to it by my father, who knows his way around Excel pretty well (much better than I will probably ever will, especially as I have little interest). My temporal memory is quite fuzzy and I don’t have file timestamps with me for checking, so I was either 9, 10 or 11 years old at the time, but I’m more inclined to think 9-10. I actually went quite far with it, developing a Excel-backed POS system with support for costumer- and operator-facing character LCD screens and, if I remember correctly, support for discounts and loyalty cards (or at least the beginnings of it).
Some of my favorite things I did with VBA, consisted in making it do things it was not really designed for, such as messing with random ActiveX controls and making it draw strange-looking windows (forms) and controls through convoluted Win32 API calls I’d have copied from some website. I did not have administrator rights to my computer at the time, so I couldn’t just install something better. And I doubt my Pentium III-powered computer, already ancient at the time (but which still works today), would keep up with a better IDE.
I shall try to read these backup CDs and DVDs one day, for a big trip down the memory lane.
Programming newb v2
When I was 11 or 12 I was given a new computer. Dual core Intel woo! This and 2GB RAM meant I could finally run virtual machines and so I was put on probation: I administered the virtual computers, and soon the real hardware followed (the fact that people were tired of answering Vista’s UAC prompts also helped, I think). My first encounter with Linux (and a bunch other more obscure OS I tried for fun) was around this time. (But it would take some years for me to stop using Windows primarily.)
Around this time, Microsoft released the Express (free) editions of VS 2008. I finally “upgraded” to VB.NET, woo! So many new things to learn! Much of my VBA code needed changes. VB.Net really is a better VB, and thank Microsoft for that, otherwise the VB trauma would be much worse and I would not be the programmer I am today. I learned much about the .NET framework and Visual Studio with VB.NET, knowledge that would be useful years later, as my more skilled self did more serious stuff in C#.
In VB.NET, I wrote many lines of mostly shoddy code. Much of that never saw the light of day, but there are some exceptions: multiple versions of Goona Browser made their way to the public. This was a dual-engine web browser with advanced UI, and futuristic concepts some major players copied, years later.
How things looked like, in good days (i.e. when it didn’t crash). Note the giant walls of broken English. I felt like “explain ALL the things”! And in case you noticed the watermark: yes, it was actually published to Softpedia.
If you search for it now, you can still find it, along with its website which I made mostly from scratch. All of this accompanied by my hilariously broken English, making the trip to the past worth its weight in laughs. Obviously I do not recommend installing the extremely buggy software, which, I found out recently, crashes on every launch but the first one.
Towards the later part of my VB.NET era, I also played a bit with C#. I had convinced myself I wanted to write an operating system, and at the time there was a project called COSMOS that allowed for writing (pretty limited) OS with C#… of course my “operating” systems were not much beyond a fancy command line prompt and help command. All of that is, too, stored in optical media, somewhere… and perhaps in the disk of said dual-core computer. I also studied and modified open source programs made in C# (such as the file downloader described in the Goona Browser screenshot) for my own amusement.
All this happened while I developed some static websites using Visual Web Developer Express as editor. You definitely don’t want to see those (mostly never published) websites, but they were detrimental to learning a fair bit of HTML and CSS. Before Web Developer I had also experimented with Dreamweaver 8 (yes, it was already old back then) and tried my hand at animation with Flash 8 (actually I had much more fun using it to disassemble existing SWFs).
At this point I was 13 or so, had my first contact with Linux more than done, through VMs and Live CDs, aaand it happened: Ubuntu became my main OS. Microsoft “jail” no more (if only I knew what a real jailed platform was at the time…). No more clunky .NET! I was fed up with the high RAM usage of Goona Browser, and bugs I was having a hard time debugging, due to the general code clumsiness.
How Ubuntu looked like when I first tried it. Good times. Canonical, what did you do?
For a couple of years, in terms of desktop development, I only made some Python scripts for my own amusement and played a very small bit with MonoDevelop every time I missed .NET. I also made a couple Lua scripts for Rockbox. I learned much about Linux usage and system maintenance as I used it more and more on my own computers and on my first Virtual Private Servers, which I got after much drama in the free web hosting communities. Ugh, how I hate CPanel.
It was around this time that g.ro.lt and n.irc.su appeared. g.ro.lt was a URL shortener that would later evolve into 4.l.to and later tny.im. n.irc.su was a social network built on Elgg, which obviously failed. I also made some smaller websites, like one that would take you to random image hosting websites, URL shorteners and pastebins, so you would not use the same service every time you urgently needed one. These represented my first experiences with PHP programming.
I have no pictures to show. The websites are long gone, not on the Internet Archive, and if I took screenshots, I have no idea where I put them. Ditto for the logos. I believe I still have the source code for the random-web-service website somewhere, at least the front page layout.
All this working on top of free stuff: free (and crappy) subdomains, free (and crappy) web hosting, free (and less crappy) virtual servers. It would take me some time until I finally convinced myself I needed to spend some money for better reliability, a gist of support and less community drama. And even then I would spend Bitcoin, which I earned back when it was really cheap, making the rounds of silly faucets and pulling money out of CPAlead-like offers through the use of multiple proxies (oh, the joy of having multiple VPS…). To this day I still don’t have a PayPal account.
This time, and when I actively developed tny.im (as opposed to just helping maintain it), was the peak of my gbl08ma-as-web-developer phase. As I entered and went through high school, I would get more and more away from HTML and friends (but not server maintenance), to embrace something completely different…
Low level, little resources: embedded systems
For high school math everyone had to use a graphing calculator. My math teacher recommended (out of any interest) Casio calculators because of their ease of use (and even excitedly mentioned, Casio leaflet in hand, the existence of a new and awesome color screen model that “did everything and some more”). And some days later I had said model in my hands, a Casio fx-CG 20, or Prizm, which had been released about a year before. The price difference from the earlier dot-matrix screen Casio calcs was too small to let the color screen go.
I was turning 15, or had just turned 15. I remember setting up the calculator and thinking, not much after, “I want to code for this thing”. Casio’s built-in Basic dialect is way too limited (and after having coded in “real” languages, Basic was silly). This was in September 2011; in March next year I would be releasing my first Prizm add-in, CGlock, a calculator PIN-locking software.
Minimalist look, yay! So much you don’t even notice it’s a color screen.
This was my first experience with C; I remember struggling with pointers, and getting lots of compilation warnings and errors, and run-time errors. Then at some point everything just “clicked in” and C soon became my main language. Alas, for developing native software for the Prizm, this is the only option (besides using C++ without most of its features, not even the “new” keyword).
The Prizm is a horrible platform, especially for newbie C programmers. You can’t use a debugger, nor look at memory contents, the OS malloc/free implementation has bugs (and the heap is incredibly small, compared to the stack) and there’s always that small chance some program damages your calculator, or at least corrupts your estimated files and notes. To this day, using valgrind and gdb on the desktop feels to me as science fiction made true. The use of alloca (stack allocation) ends up being preferred in relation to dynamic allocation, leading to awkward design decisions.
Example of all the information you can get about an error in a Prizm add-in. It’s up to you to go through your binary (and in some cases, disassemble the OS) to find out what these mean. Oh, the bug only manifests itself when compiling with optimizations and without symbols? Good luck…
There is a proprietary emulator, but it wasn’t designed for software development and can’t emulate certain things. At least it’s better than risking damage to expensive hardware. The SuperH-4 CPU runs at 58 MHz and add-ins have access to about 600 KiB of memory, which is definitely better than with classic z80-powered Texas Instruments calculators, but one still can’t afford memory- or CPU-intensive stuff. But what you gain in performance and screen resolution, you lose in control over the hardware and the OS, which still have lots of unknowns.
Programming for the Prizm taught me how it’s like to work without the help of the C standard libraries (or better, with the help of incomplete and buggy standard libraries), what a stack overflow looks like (when there’s no stack protection), how flash memories work, what DMA is, what MMUs do and how systems can be bricked when their only bootloader is not read-only. It taught me how compilers work from an end-user perspective, what kind of problems and advantages optimizations introduce, and what it’s like to develop parts of the C standard library.
It also taught me Casio support in Portugal (Ename) is pretty incompetent at fixing calculators, turning my CG 20 into a CG 10 and leaving two big capacitors out of a replacement main board. In this hardware topic, I learned quite a bit about digital logic from Prizm hardware discussions at Cemetech. And I had some contact with SH4 assembly and a glimpse into how to use IDA Pro. Thank you Casio for developing a system that works so well and yet is so broken in so many under-the-hood ways, and thank you Cemetech for briefly holding the Prizm higher than TI calcs.
I developed other add-ins, some from scratch and others as ports of existing PC software (such as Eigenmath). I still develop for the Prizm from time to time, but I have less and less motivation as the homebrew community has stagnated and I use my Prizm much less, as I went to university. Experience in obscure calculator platforms does not make for a nice CV.
Yes, in three years or so I went from the likes of Visual Studio to a platform where the only way to debug is to write text to the screen. I still like embedded and real-time programming a lot and have moved to programming more generic and well-known things such as the ESP8266.
Getting in the elevator
During the later part of high school (which I started in the fall of 2011 and ended in the summer of 2014), I did more serious Python stuff, namely Mersit, later deprecated in favor of Picored, which is not written in Python but in Go. Yes, I began trying higher-level stuff again (higher level, getting in the elevator… sorry, I’m bad at jokes).
My first contact with Go was when I was 17, because I wanted to develop something that ran without external dependencies (i.e., unlike Java or .NET) and compiled to native code. I wanted to avoid C/C++, but I wasn’t looking for “a better C” either, so Rust was not it. Seeing so much stuff about Go at Hacker News, one day I decided to try my hand at it and I like it quite a lot – I’m still unsure if I like it because of the language itself or because of the great libraries one can use with it, but I think both play an important role.
This summer I decided to give C# another chance and I’m quite impressed – turns out I like it much more than I thought. It may have something to do with trying it after learning proper languages vs. trying it when one only knows VB. I guess my VB.NET scars are healed. I also tried a bit of Java, in my first contact with it ever, and it seems my .NET hate converted into Android API hate.
Programming with grades
University gave the opportunity (or better, the obligation) of having other people criticize my code. The general public could already see the open-source C code of my Casio Prizm add-ins, and even the ugly code of Goona Browser, but this time my code was getting graded. It went better than I initially thought – I guess the years of experience programming in different languages helped, especially as many of the people I’m being compared with have only started programming this year.
In the first semester we took an introductory programming course, which used Python, and while it was quite easy for me, I took the opportunity to learn Python to a greater depth than “language in which to write quick and dirty glue code”. You see, until then I had not used classes in my Python code, for example. (This only goes to show Python is a versatile language, even if slow.)
We also took an introductory computer architecture course where we learned how basic CPUs work (it was good for gluing all the separate knowledge I already had about it) and programmed in assembly for a course-specifc CISC-like architecture. My previous experience with reading SH4 assembly proved quite useful (and it seems that nowadays the line between RISC and CISC is more blurred than ever).
In the second semester, I had the opportunity to exercise my C knowledge, this time not limited to the Prizm platform. More interestingly, logic programming, a paradigm I had no intention of ever programming in, was presented to us. So Prolog it was. It went much better than I anticipated, but as most other people who (are forced to) learn it, I have no real use for it. So the knowledge is there, waiting for The Right Problems(tm). I am afraid I’ll forget much of it before it becomes useful, but if there’s something picking C# up again taught me, is that I can pick up pretty fast skills learned and abandoned long ago.
The second year is about to begin and there’s some object-oriented programming coming, I hope I do well.
Summing it up
I do not like “years of experience” as a way to measure language proficiency, especially when such languages are learned for use in short-lived side projects, so here’s a list with an approximate number of lines of code I have written in each language.
- C: anywhere between 40K lines and 50K lines. Call it three years experience if you will. Most of these were for Prizm add-ins, and have since been rewritten or heavily optimized. This is changing as I develop less and less for the Prizm.
- PHP: over 15K lines, two years if you want to think that way. The biggest chunk of these were for developing the additions to YOURLS used in tny.im, but every other small project takes its own 200-500 lines of code. Unfortunately, most of this is “bad” code, far from idiomatic. The usual PHP mess, you know.
- Python: at least 5K lines over what amounts to about six months. Of these, most of the “clean” lines (25-35%) were for university projects.
- Go: around 7K lines, six months. Not exactly idiomatic code, but it’s clean and works well.
- VBA: uh, perhaps 3 or 4K lines, all bad code 🙂
- VB.NET: 10K lines or so, most of it shoddy code with lots of Try…Catch to “fix” the problems. Call it two years experience.
- C#: 10K lines of mostly clean and documented code. One month or so 🙂
- Lua: mostly small glue scripts for my own amusement, plus some more lines for use in games such as Minetest, I estimate 3-4 K lines of varying quality.
- Java: I just started, and mostly ported C# code… uh, one week and 1.5K lines?
- HTML, CSS and JS: my experience with JS doesn’t go much beyond what’s needed to modify DOM elements and make simple AJAX requests. I’ve made the frontend for over 5 websites, using the Bootstrap and INK frameworks.
- Prolog: a single university assignment, ~250 lines or one month. A++ impression, would repeat – I just don’t see what for.
In addition to all this, I have some experience launching the programs and services I make – designing logos/branding, versioning, keeping changelogs, update instructions, publishing, advertising, user support. Note that I didn’t say I’m good at any of these things, only that I have experience doing them, for better or worse…
Things I’d like to have more experience with:
- Continuous integration / testing in general;
- Debugging code outside of .NET/Visual Studio and printing debug lines in C;
- Using Git and other VCS in big repos/repos with more people (I want to see those merge conflicts and commits to the wrong branch coming);
- Server-side web development on something other than PHP and Go. And learning to use MVC frameworks, independently of the language;
- C++ (and Java, out of necessity. Damned Android);
- Game development. Actually, this is how many people start, but I’m so cool that I started by developing POS software 🙂
Some years ago, I followed a blog […]. I liked much of the music that was shared there, and somehow it worked best for me than any recommendation engine. […] In the hope that there may be someone out there with a taste for music mostly similar to mine and lucky enough to get to this website, starting May 2015 I’ll share in this page the monthly additions to my music collection. Hopefully this will also answer the “what do you even listen to” question that pops up among friends from time to time.
A few years later, all the music recommendation/discovery engines I know are like this: 60% of the suggestions don’t fit my taste and the other 40% are already in my collection. What about starting to do some sound analysis instead of blindly following things like LastFM’s “related” list of artists and (often incorrect) genre tags? The suggestions SoundCloud puts to play, automatically, after finishing a track, are the closest I have heard to actually finding music similar to what I was listening, but I may have just been lucky so far.
Let’s see how this goes.
Some years ago, I followed a blog that listed songs used in advertisements, and where the author also included a small list of songs he liked, updated monthly. I liked much of the music that was shared there, and somehow it worked best for me than any recommendation engine. I found many of my favorite songs that way, and I was sad when the whole blog ceased to be maintained (due to things like Soundhound defeating its purpose, I guess).
In the hope that there may be someone out there with a taste for music mostly similar to mine and lucky enough to get to this website, starting May 2015 I’ll share in this page tracks that I’m adding to my library. Hopefully this will also answer the “what do you even listen to” question that pops up among friends from time to time. Some remarks:
- Genres: you’ll mostly find EDM and House music here, mixed with Synthpop, Alternative and Indie Rock, and other genres entirely.
- Some tracks are mainstream but others are relatively obscure. (And some are pure junk and others timeless pieces, I won’t say which are which)
- Due to the way I discover music, most will be at most one year old; older tracks may pop up every now and then.
Expect about 15 tracks per month – that’s how many the streaming service I use allows me to download per month. There are thousands of artists making their music available for free download, so it’s more like 10 per month plus whatever I happen to find in SoundCloud.
- I’m Portuguese and a small percentage of the music may be from Portuguese artists; however, I’ll only post music in English.
- This is not a music blog and thus I mostly won’t comment.
- No links to [your favorite streaming service]/YouTube/Artist site: it’s your responsibility to look and listen to them the way you want. Google is your friend (for this, at least).
- Songs are listed in alphabetical order, in the format [artist – including featured] – [title] – [album]. When I can not find an album where the track belongs at the time it is added to the collection, [album] is the title followed by [Single]. For remixes (indicated with [Remix]), any additional artists are included in the artist field (Google is your friend to help find out who is who). Sometimes a track is followed by a comment in italic.
- I tend to only pay attention to the melody and not the lyrics. I have no idea what many of these say. For some reason, though, I find music with vocals much easier to listen to.
- As time goes by, sometimes I begin to like certain tracks less (a sign they probably weren’t that good in the first place). USE AT YOUR OWN RISK. NO WARRANTY PROVIDED. Music I like is not limited to what is listed here; what is listed here includes, but is not limited to, music I currently like (it’s basically a list of tracks I just added to my library).
Oh, and one last thing: if you don’t have money/don’t want to pay for music, make sure to look around before pirating: many artists, especially the less known ones, offer free downloads for at least some of their tracks. Streaming services are also a thing.
July, August and September 2016
Note: I have no idea how I managed to legally get hold of so many tracks* in three months… I shouldn’t have procrastinated so much and instead tagged as I went. This took some hours to organize… * No, I did not spend 70+ euros to get 71 tracks. But if every user of a certain streaming service used up their monthly download allowance as much as I do, that service would have gone bankrupt already – on second thought, since it’s backed by a major ISP… can these things even go bankrupt? I don’t even know anymore…
Afrojack feat. Ty Dolla $ign – Gone – Gone [Single]
Ariana Grande and Renko – Into You [Remix] – Into You [Remix]
Armin van Buuren feat. BullySongs – Freefall – Embrace
A-Trak feat. Phantogram – Parallel Lines – Parallel Lines [Single]
Audien feat. Deb’s Daughter – Crazy Love – Crazy Love [Single]
Audien feat. Lady Antebellum – Something Better – Daydreams
Audien feat. Voyageur – Pharaohs – Daydreams
Bastille – Good Grief – Wild World
Bastille – The Currents – Wild World
Benny Benassi & Chris Brown – Paradise – Danceaholic
Benny Benassi feat. BullySongs – Universe – Danceaholic
Benny Benassi & Vassy – Even If – Danceaholic
Bob Sinclar – Someone Who Needs Me – Someone Who Needs Me [Single]
Cavaro and Nurko feat. Faheem – Lost In You [Remix] – Lost In You [Remix]
Chris Viviano feat. AWR – Holding You Back – Holding You Back [Single]
Coldplay – Hymn For The Weekend [Remix] – A Head Full of Dreams
Digital Farm Animals & Cash Cash feat. Nelly – Millionaire – Blood, Sweat & 3 Years
Disciples and David Guetta – No Worries – No Worries [Single]
DJ Cassidy feat. Chromeo – Future Is Mine – Future Is Mine [Single]
DJ Snake feat. George Maple – Talk – Encore
Empire Of The Sun – High And Low – Two Vines
Gareth Emery and Nicolas Haelg feat. Lawson – Make It Happen [Remix] – Make It Happen [Remix]
Giraff – Drinks – Drinks [Single]
Girl Friend and Louis La Roche – Tragic on the Dancefloor [Remix] – Tragic on the Dancefloor [Remix]
Imani Williams feat. Sigala & Blonde – Don’t Need No Money – Don’t Need No Money [Single]
Jacob Tillberg – Last Kiss – Last Kiss [Single]
Jess Glynne – Don’t Be So Hard on Yourself – I Cry When I Laugh
John Dahlbäck feat. Urban Cone & Lucas Nord – We Were Gods – We Were Gods [Single]
Johnny Graves and Tuero – Say Yes [Remix] – Say Yes [Remix]
Jonas Blue feat. JP Cooper – Perfect Strangers – Perfect Strangers [Single]
Justin Timberlake – Can’t Stop the Feeling! – Trolls- Original Motion Picture Soundtrack
Kav Verhouzer & Ben Alessi – Gonna Be Alright – Gonna Be Alright [Single]
Kav Verhouzer feat. BullySongs – Get What You Came For – The Bearded Man – Beards On The Beach (Rio de Janeiro)
Keaton Vegades – Hideaway – Hideaway [Single]
Kid Runner and Koastal – Different Kind Of Love [Remix] – Different Kind Of Love [Remix]
Koni & Tiger Mountain – Try Again – Try Again [Single]
Kyfra – Bandit – Bandit [Single]
Laidback Luke feat. Trevor Guthrie – Let It Go – Focus
Ludomir feat. Oferle – Last For The Summer [Single] – Last For The Summer [Single]
Madeon – The City – Adventure
Manse and Hibell feat. Alice Berg – Freeze Time [Remix] – Freeze Time [Remix]
Mastiksoul – Good for You – Good for You [Single]
MAX and Sokko feat. Tyler Carter – Basement Party [Remix] – Basement Party [Remix]
MAX and Two Friends – Lights Down Low [Remix] – Lights Down Low [Remix]
Max Elto and Mako – Shadow of The Sun [Remix] – Taped Rai
Oliver Heldens – Melody – Melody [Single]
OneRepublic – Future Looks Good – Oh My My
Otto Knows feat. Avicii – Back Where I Belong – Back Where I Belong [Single]
Papa Ya feat. Con Bro Chill – Outta Here – Outta Here [Single]
Papa Ya – Fine Livin’ – Fine Livin’ [Single]
Philipp Klade – Seasons – Seasons [Single]
Pierce Fulton feat. JHart – Landmines – Landmines [Single]
Poolside – And The Sea – And The Sea
Portugal. The Man – Modern Jesus – Evil Friends
Pretty Pink feat. Mick Fousé – Your Love – Your Love [Single]
R3hab and Sam Feldt feat. Quintino – Freak [Remix] – Freak [Remix]
R3hab – Freak – Freak [Single]
Roosevelt – Fever – Fever [Single]
Röyksopp and Robyn – Do It Again – Do It Again
Sick Individuals feat. jACQ – Take It On – Take It On [Single]
Sigala – Easy Love – Easy Love [Single]
Sigala feat. John Newman & Nile Rodgers – Give Me Your Love – Give Me Your Love [Single]
Smallpools and The Chainsmokers – Dreaming [Remix] – Dreaming Remix EP
Snakehips feat. Zayn – Cruel – Cruel [Single]
Syn Cole feat. Madame Buttons – The Daze – The Daze [Single]
The Chainsmokers and SJUR x Saxity feat. Strøm – Closer [Remix] – Closer [Remix]
Tiësto feat. John Legend – Summer Nights – Summer Nights [Single]
Timeflies – Once In A While – Once In A While [Single]
Tobtok – Aber – Aber [Single]
Young Foes – Broken Heart – Broken Heart [Single]
Zayn and Saxity feat. Anna Grillmeier – Pillowtalk [Remix] – Pillowtalk [Remix]
April, May and June 2016
Alesso feat. Nico & Vinz – I Wanna Know – I Wanna Know [Single]
American Authors – I’m Born To Run – What We Live For
Armin van Buuren feat. Eric Vloeimans – Strong Ones – Embrace
Armin van Buuren feat. Kensington – Heading Up High – Embrace
Axwell -\ Ingrosso – Dream Bigger – Dream Bigger [Single]
Axwell -\ Ingrosso – Thinking About You – Thinking About You [Single]
Daft Punk and k_d – Doin It Right [Remix] – Doin It Right [Remix]
Disco Fries feat. Hope Murphy – Born Ready – Born Ready [Single]
Fedde Le Grand – Keep On Believing – Something Real
Gorgon City – Doubts – Kingdom
Illenium feat. Liam O’Donnell – It’s All On U – Ashes // the whole album is pretty good, and a free download
k_d feat. Lolaby – Somewhere Far Away From Here – Somewhere Far Away From Here [Single]
Klingande feat. Daylight – Losing U – Losing U [Single]
Kygo feat. Kodaline – Raging – Cloud Nine
Kygo feat. Tom Odell – Fiction – Cloud Nine
Lauren Aquilina and Arty – Ocean [Remix] – Ocean
Like Kids – Wylen x BR!K
Lush & Simon feat. KiFi & BullySongs – Warriors – Warriors [Single]
Mako – Into The Sunset – Into The Sunset [Single]
Martin Garrix feat. John & Michel – Now That I’ve Found You – Now That I’ve Found You [Single]
Mike Posner and Seeb – I Took A Pill In Ibiza [Remix] – At Night, Alone.
OneRepublic – Wherever I Go – Wherever I Go [Single]
Panic Is Perfect – I Can Make It Good – Cellspace
R3hab & Trevor Guthrie – Soundwave – Soundwave [Single]
Sandovall and Sokko – Unwind [Remix] – Unwind [Remix]
Seeb feat. Neev – Breathe – Breathe [Single]
Sick Individuals feat. Kaelyn Behr – Never Fade – Never Fade [Single]
Sigma feat. Take That – Cry – Cry [Single]
Sigma – Nightingale – Nightingale [Single]
Steve Aoki and Felix Jaehn feat. Adam Lambert – Can’t Go Home – Can’t Go Home [Single]
Syn Cole – Feel Good – Feel Good [Single]
The 1975 – The Sound – I like it when you sleep, for you are so beautiful yet so unaware of it
The Aston Shuffle feat. Lila Gold – Restart – Photographs
Tiësto and Oliver Heldens feat. Natalie La Rose – The Right Song – The Right Song [Single]
Tobu & William Ekh feat. Brenton Mattheus – Let It Be Now – Sugar
Wilkinson feat. Shannon Saunders – Breathe – Breathe [Single]
Wintergatan – Marble Machine – Marble Machine [Single]
Wylen and BR!K – Like Kids – Like Kids [Single]
February and March 2016
Alan Walker – Faded – Faded [Single]
A-Trak feat. Jamie Lidell – We All Fall Down – We All Fall Down [Single]
Axlance & Luka Krajina and MI77ER – Dreams [Remix] – Dreams [Remix]
Big Black Delta feat. Debbie Gibson – RCVR – RCVR [Single]
Bryce Fox and Louis Vivet – Burn Fast [Remix] – Burn Fast [Remix]
Cheat Codes – Say Goodbye – Say Goodbye [Single]
Dennis Kruissen & Mazeville – Ain’t No Mountain – Ain’t No Mountain [Single]
Didrik Thulin feat. Sonny Alven – Fading – Fading [Single]
Different Heaven – Far Away – Far Away [Single]
Dillon Francis & Kygo feat. James Hersey – Coming Over – This Mixtape Is Fire
Fingertips – Out of Control – Out of Control [Single]
Hardwell and Flexical feat. Jake Reese – Mad World [Remix] – Mad World [Remix]
Hellberg – Better – Better [Single]
Hellberg feat. Aaron Richards – Synchronize – Synchronize [Single]
Jacob Tillberg – Ghosts – Ghosts [Single]
Kiiara and Felix Cartal – Feels [Remix] – Feels [Remix]
Lauv and Milk N Cooks – Reforget [Remix] – Reforget [Remix]
Louis Vivet feat. Gavrielle – Best Thing – Best Thing [Single]
Lush & Simon – The Universe – The Universe [Single]
Matt Simons and Sir Felix – Catch & Release [Remix] – Catch & Release [Remix]
Monarchy – The Beautiful Ones – Almost Human
Oliver Heldens & Shaun Frank feat. Delaney Jane – Shades Of Grey – Shades Of Grey [Single]
Panama Wedding and Bee’s Knees – Infinite High [Remix] – Infinite High [Remix]
Pat Nathan – Different – Different [Single]
Shaun Frank & KSHMR and Two Friends feat. Delaney Jane – Heaven [Remix] – Heaven [Remix]
Snakehips and Hibell – All My Friends [Remix] – All My Friends [Remix]
SNBRN and Cavego feat. Andrew Watt – Beat the Sunrise [Remix] – Beat the Sunrise [Remix]
SNBRN and Halogen feat. Andrew Watt – Beat The Sunrise [Remix] – Beat The Sunrise [Remix]
Summer Was Fun feat. Colordrive – Watching – Watching [Single]
Summer Was Fun feat. Meron Ryan – Run To You – Run To You [Single]
Summer Was Fun – Pick Up The Phone – Pick Up The Phone [Single]
The Mowgli’s – I’m Good – Kids In Love
Two Friends feat. Ktpearl – Forever – Forever [Single]
Volt & State and Jason Poulin – Sandcastles [Remix] – Sandcastles [Remix]
Willfree – Addicted To Love – Addicted To Love [Single]
Years and Years and Oliver Dürr – Shine [Remix] – Shine [Remix]
Zara Larsson – Lush Life – Lush Life [Single]
Zedd feat. Aloe Blacc – Candyman – Candyman [Single]
November and December 2015, January 2016
Alex Adair – Heaven – Heaven [Single]
Arty feat. Conrad Sewell – Braver Love – Glorious
Couzare and Wolfskind feat. Cozy – Just [Remix] – Just [Remix]
DNCE – Cake By The Ocean – SWAAY
Eurythmics and Deepdink – Sweet Dreams [Remix] – Sweet Dreams [Remix]
Felix Cartal feat. Nikki Yanofsky – Something To Live For – Something To Live For [Single]
Hurts – Some Kind of Heaven – Surrender
Klauss and Turino, Jakko and Silent Curse feat. Paul Aiden – Sail Your Heart [Remix] – Sail Your Heart [Remix]
Kygo and Aventry feat. Maty Noyes – Stay [Remix] – Stay [Remix]
MI77ER – Stardust – Stardust [Single]
Naughty Boy feat. Beyoncé and Arrow Benjamin – Runnin’ (Lose It All) – Runnin’ (Lose It All) [Single]
Nicolas Haelg – Mind Games – Mind Games [Single]
Project 46 feat. Shantee – Signs – Signs [Single]
Said The Sky feat. Diamond Eyes – Mountains – Mountains [Single]
Saxity feat. Teff and Komi – Who We Are – Who We Are [Single]
Sigma and Rita Ora – Coming Home – Life
Silent Curse – Night Sky – Night Sky [Single]
SNBRN feat. Andrew Watt – Beat the Sunrise – Beat the Sunrise [Single]
Take That – Hey Boy – III
The Kooks – Creatures Of Habit – Creatures Of Habit [Single]
Timeflies and Dave Edwards – Worse Things Than Love – Worse Things Than Love [Remix]
Tough Love feat. Nastaly – What You Need Is Me – What You Need Is Me [Single]
September and October 2015
Avicii – For A Better Day – Stories
Calvin Harris & Disciples – How Deep Is Your Love – How Deep Is Your Love [Single]
Cheat Codes and Boehm – Visions – Visions [Remix]
Chvrches – Never Ending Circles – Every Open Eye
Deniz Koyu – To The Sun – To The Sun [Single]
Deorro feat. Erin McCarley – I Can Be Somebody – I Can Be Somebody [Single]
Duke Dumont – Ocean Drive – Blasé Boys Club Part 1
Elephante feat. Trouze & Damon Sharpe – Age of Innocence – Age of Innocence [Single]
Ella Eyre – Good Times – Feline
Fedde Le Grand feat. Denny White – Cinematic – Cinematic [Single]
Foxes – Better Love – All I Need
Foxes – Feet Don’t Fail Me Now – All I Need
Galavant – Tonight – Tonight [Single]
Gibbz and Halogen – I Found You [Remix] – I Found You [Remix]
Gorgon City (feat. Romans) – Saving My Life – Saving My Life [Single]
Hailee Steinfeld – Love Myself – Love Myself [Single]
Hurts – Lights – Surrender
Hurts – Nothing Will Be Bigger Than Us – Surrender
John Newman feat. Charlie Wilson – Tiring Game – Revolve
Karetus feat. Agir – Castles In The Sand – Piñata
Kove feat. Moko – Hurts – Hurts [Single]
Kygo feat. Ella Henderson – Here for You – Here for You [Single]
Love Thy Brother feat. Jason Gaffner – Higher Love [Steve Winwood Cover] – Higher Love [Cover]
Martin Garrix vs Matisse & Sadko – Break Through The Silence – Break Through The Silence EP
Matthew Koma – So F++kin’ Romantic – So F++kin’ Romantic [Single]
MOKS feat. James Arthur – Otherwise – Otherwise [Single]
Owl City and Halogen feat. Aloe Blacc – The Verge [Remix] – The Verge [Remix]
Sam Feldt feat. Kimberly Anne – Show Me Love – Show Me Love [Single]
Tiko’s Groove feat. Gosha – I Don’t Know What to Do – I Don’t Know What to Do [Single]
Together feat. David Spekter – Together – Together [Single]
Vicetone feat. Kat Nestel – Nothing Stopping Me – Nothing Stopping Me [Single]
Zedd feat. Jon Bellion – Beautiful Now – True Colors
July and August 2015
Alex Adair – Make Me Feel Better – Make Me Feel Better [Single]
Armin Van Buuren feat. Mr Probz – Another You – Another You [Single]
Atlas Genius – Molecules – Inanimate Objects
Cartoon feat. Daniel Levi – On & On – On & On [Single]
Cash Cash – Surrender – Surrender [Single]
Cazzette feat. Newtimers – Together – Desserts
Cedric Gervais feat. Ali Tamposi – Love Again – Love Again [Single]
Crystal Fighters – Love Alight – Love Alight [Single]
Culture Code feat. Michael Zhonga – Electricity – Electricity [Single]
Deluka and Elephante – Home [Remix] – Home [Remix]
Dragonette – Let the Night Fall – Let the Night Fall [Single]
Dropout – Slowly – Slowly [Single]
Galantis – Forever Tonight – Pharmacy
Giorgio Moroder – 4 U with Love – Déjà vu
Giorgio Moroder feat. Foxes – Wildstar – Déjà vu
Goldroom feat. George Maple – Embrace – It’s Like You Never Went Away
Itro & Kontinuum – Alive – Alive [Single]
Jason Derulo – Want to Want Me – Everything Is 4
John Newman – Come And Get It – Revolve
John Newman – Lights Down – Revolve
Kaskade feat. Ilsey – Disarm You – Automatic
Kid Noize – Jackass – Jackass [Single]
Klingande feat. Broken Back – Riva (Restart the Game) – Riva [Single]
Louis Vivet feat. Jordan Humphrey – Silvia – Silvia [Single]
Lucas Nord – Voices – After You
Madcon feat. Ray Dalton – Don’t Worry – Don’t Worry [Single]
Mako – Smoke Filled Room – Smoke Filled Room [Single]
Misterwives and Halogen – Hurricane [Remix] – Hurricane [Remix]
Morgan Page feat. Lissie – Open Heart – Open Heart [Single]
Moullinex – Take A Chance – Elsewhere
Robin Schulz feat. Francesco Yates – Sugar – Sugar
Sigma feat. Ella Henderson – Glitterball – Life
The Knocks feat. Powers – Classic – So Classic
The Weeknd – Can’t Feel My Face – Beauty Behind the Madness
Tom Enzy feat. Kyle Stibbs – Time Doesn’t Wait – Time Doesn’t Wait [Single]
Urban Cone – Rocketman – Polaroid Memories
William Ekh feat. Alexa Lusader – Adventures – NCS Infinity
Years & Years – Shine – Communion
Young Empires – Sunshine – The Gates
Young Empires – The Gates – The Gates
Alesso feat. Sirena – Sweet Escape – Forever
Alesso – If It Wasn’t For You – Forever
Avicii feat. Audra Mae – Feeling Good – Stories
Cheat Codes – Adrenaline – Adrenaline [Single] // apparently unreleased song (is this even theirs?) Shazam and friends are of no help. My version is 3m 50s long. My methods are legal on most jurisdictions and will not be revealed.
Cheat Codes & Evan Gartner – Adventure – Adventure [Single]
Cheat Codes feat. Lostboycrow – Senses – Senses [Single]
Cheat Codes – Visions – Visions [Single]
Clean Bandit – Stronger – New Eyes
Disco Fries & Breathe Carolina – All I Wanna – Autonomous
Ella Eyre – Together – Feline
Felicity & Aventry feat. Johnning – Hello Goodbye – Hello Goodbye [Single]
Frenship – Kids – Frenship [Single]
Galantis – Peanut Butter Jelly – Pharmacy
Giorgio Moroder feat. Mikky Ekko – Don’t Let Go – Déjà Vu
Hilary Duff – Sparks – Breathe In. Breathe Out.
Jess Glynne – Hold My Hand – I Cry When I Laugh
Little Giants – Lately (Love, Love, Love) – Lately (Love, Love, Love) [Single]
Otto Knows – Next to Me – Next to Me [Single]
Owl City feat. Aloe Blacc – Verge – Mobile Orchestra
Parade of Lights – Feeling Electric – Feeling Electric // the rest of the album may be of interest
Said The Sky feat. Missio – Darling – Darling [Single]
Sick Individuals – Made for This – Made for This [Single]
The Chainsmokers feat. BullySongs – Good Intentions – Good Intentions [Single]
Tiësto & The Disco Fries – Chant – Club Life, Vol. 4 – New York City
Vicetone feat. D. Brown – What I’ve Waited For – What I’ve Waited For [Single]
Vicetone – United We Dance – United We Dance [Single]
Wild Cub and Lost Kings – Colour [Remix] – Colour [Remix]
April and May 2015
Bipolar Sunshine – Daydreamer (Gryffin Remix) – Daydreamer
Calvin Harris feat. Haim – Pray to God – Motion
Chvrches – Get Away – Get Away [Single]
Disco Fries feat. Nick Hexum – Head in the Clouds – Autonomous // the rest of the EP appears to have some nice tracks as well
Flo Rida feat. Robin Thicke and Verdine White – I Don’t Like It, I Love It – My House
Giorgio Moroder feat. Sia – Déjà Vu – Déjà Vu
Gorgon City feat. Jennifer Hudson – Go All Night – Sirens
Hellberg feat. Cozi Zuehlsdorff – The Girl – This Is Me
Henri Josh & Katorz Pres Krash – Jump into Your Life – Jump into Your Life [Single]
Kaskade feat. Tess Comrie – Never Sleep Alone – Never Sleep Alone [Single]
Kelly Clarkson – Heartbeat Song – Piece by Piece
Kygo feat. Parson James – Stole the Show – Stole the Show [Single]
Laidback Luke & Project 46 – Memories – Memories [Single]
Mako feat. Madison Beer – I Won’t Let You Walk Away – I Won’t Let You Walk Away [Single]
Mako – Ghosts – Ghosts [Single]
Mako – Our Story – Our Story [Single]
Martin Garrix feat. Usher – Don’t Look Down – Don’t Look Down [Single]
Owl City and Carly Rae Jepsen – Good Time – The Midsummer Station
Panic Is Perfect – Go Go Go – Behind Your Eyelids // Make sure to also check the rest of the EP
Passion Pit – Lifted Up (1985) – Kindred
Rudimental – Never Let You Go – Never Let You Go [Single]
Sigma feat. Labrinth – Higher – Life
Syn Cole – It’s You – It’s You [Single]
The Chainsmokers feat. Great Good Fine Ok – Let You Go – Let You Go [Single]
Tiësto feat. DBX – Light Years Away – A Town Called Paradise
Tom Enzy feat. Chris Cronauer – So High – So High [Single]
Vicetone feat. JHart – Follow Me – Follow Me [Single]
Years & Years – King – Communion
Zedd feat. Selena Gomez – I Want You To Know – True Colors
March 2015 (retroactively added)
Alesso feat. Roy English – Cool – Cool [Single]
Chvrches – Dead Air – The Hunger Games – Mockingjay Pt. 1
David Guetta feat. Emeli Sandé – What I Did for Love – Listen
Diego Miranda feat. Miss Palmer – Believer (Original Mix) – Believer [Single]
Eric Prydz vs. CHVRCHES – Tether – Tether [Single]
Kid Astray – Still Chasing Nothing – Home Before the Dark
Madeon feat. Passion Pit – Pay No Mind – Adventure
Robin Schulz feat. Jasmine Thompson – Sun Goes Down – Prayer
Robyn with Kleerup – With Every Heartbeat – Robyn
We Trust – The Future – Everyday Heroes
Wilkinson feat. Talay Riley – Dirty Love – Lazers Not Included (Extended Version)
February 2015 (retroactively added)
Avicii – The Nights – The Days – Nights
Caotico with Tove Styrke – Brains Out – Sunrise Confessions
Capital Cities – One Minute More – In A Tidal Wave Of Mystery
Citizens! – Lighten Up – Lighten Up [Single]
Clean Bandit with Jess Glynne – Real Love – New Eyes
Faul – Something New – Something New [Single]
Giorgio Moroder feat. Kylie Minogue – Right Here, Right Now – 74 is the New 24
Kygo feat. Conrad – Firestone – Firestone [Single]
Lucas Nord – Run on Love – Islands
Madeon feat. Kyan – You’re On – Adventure
Madeon – Imperium – Adventure
Madonna – Living For Love – Rebel Heart
MINX – Don’t Fuck with Me – Don’t Fuck with Me [Single]
Moby with Wayne Coyne – The Perfect Life – Innocents
San Fermin – Jackrabbit – Jackrabbit
Steve Angello feat. Dougy – Wasted Love – Wild Youth
Take That – Lovelife – III
The Magician feat. Years & Years – Sunlight – Sunlight [Single]
Thunder & Co. – Apples – Nociceptor
Thunder & Co. – O.N.O. – Nociceptor
tyDi feat. Cameron Forbes – Somebody For Me – Redefined
Walk the Moon – Shut Up and Dance – Talking is Hard
Years & Years – Desire – Y & Y EP
January 2015 (retroactively added)
Avicii – The Days – Stories
Axwell && Ingrosso – Something New – Something New [Single]
Calvin Harris – Faith – Motion
Calvin Harris feat. Ellie Goulding – Outside – Motion
Caotico – Smile – Bad Heart – Smile
Cazzette feat. Terri B! – Blind Heart – Blind Heart [Single]
Cazzette feat. The High – Sleepless – Sleepless [Single]
Don Diablo – Starlight (Could You Be Mine) [Otto Knows Remix] – Starlight (Could You Be Mine) [Otto Knows Remix][Single]
Echosmith – Cool Kids – Talking Dreams
First State feat. Sarah Howells – Skies on Fire – Full Circle
Galantis – Runaway (U and I) – Runaway (U and I) [Single]
Giorgio Moroder – 74 Is the New 24 – 74 Is the New 24
Hardwell feat. Chris Jones – Young Again – United We Are
Jungle – The Heat – Jungle
Sigma feat. Paloma Faith – Changing – Changing [Single]
Sigma – Nobody To Love – Nobody To Love [Single]
Take That – These Days – III
Is it just my impression, or nowadays many people with smartphones, who also have a data-capped connection at home, conserve their list of apps to update until they go to a friend’s house, find free (or school/work) WiFi, or otherwise find means to avoid having automatic updates use data on your Internet connection?
Personally, I put all of my machines to update on the last two days of the month, to avoid that situation where my stupid ISP limits the connection speed to 128 kbit/s, after I use 15 GB of data in a single month (if I can’t avoid the situation, at least the speed will only be ridiculously low for at most two days)… yeah, that’s the state of 3G data plans in Portugal (across all ISPs).
Note to self:
By default, Linux Mint brings OpenDNS (which I hate, if not for anything else, for the NXDOMAIN response it gives) as the resolvconf fallback. Deleting /etc/resolvconf/resolv.conf.d/tail as root and then restarting the resolvconf will (re)solve it. Do not waste time trying to figure out where the DNS is being hijacked on your network: the thing is right on your machine, even if you have overridden the DHCP DNS configuration on the network configuration dialogues – out of the box, it will always use OpenDNS if the DNS servers you or DHCP specified, are not available/don’t answer fast enough.
By the way: http://myresolver.info/ helps with debugging DNS issues.
This post brings to an end months of trouble, and me thinking my ISP, to add to the fact that even though my plan is unlimited, severe speed limiting starts at 15 GB of data usage, was also hijacking DNS queries to their own system. Fortunately, looks like it is not the case. At the same time, I’m disappointed with the choice of DNS fallback by the people behind Linux Mint.
If anyone knows of a instant messaging and VoIP solution that’s free, privacy friendly (end-to-end encryption, preferably) and, most importantly, easy to get the “average Joe” to switch to (i.e. my non-technical friends), please let me know. Bonus points if it has interoperability to work with other systems (at the eventual cost of losing some of the privacy) – that way, I wouldn’t need to get all my friends to switch.
(Of course, Google Talks/Hangouts, Skype and anything Facebook-related is out of the equation.)
Another thing I’m looking forward to is having my computers (Linux and Windows), old Windows Mobile phones and my Android phone and tablet synchronized (contacts, calendar, email) through the Internet without Google’s help, but I realize this is even harder find than the IM solution I specified above.
I moved this blog to a different server (no downtime because the transfer was planned). Please report if something is broken.
On other topic, I have been very busy with school and real life in general, even on weekends; that sums up the reasons for my recent online absence.
I figured out I didn’t post anything here for quite a while – actually more than two months! There have been a series of events that have stopped me from updating this blog and, for a good part of these two months, have stopped me from doing anything besides checking my email and doing some school work.
The first cause for my online absence was that, a few days after I posted about this server having been reloaded, school classes have started. I happen to be taking probably the hardest school year I ever took – at least, that’s what older people said before it started, and which proved to be true now that two months of classes have gone by. Free time isn’t that abundant and I prefer to spend it doing actually something more useful than writing about random things on this blog. That almost explains why I haven’t been active on communities like FreeVPS. But there’s more…
Some time in mid-October I was left without a reliable, 24/7 Internet connection. This, after two or three months without an unlimited-traffic Internet connection, during which I had to hold the downloading of system updates for both Linux and Windows on all of my machines, plus the Android tablet; to keep to a minimum the access to online streaming media; and of course to hold any other big download/upload tasks. I had no Internet connection at home, which means checking the emails at school when possible. Checking anything other than email is horribly slow and unpractical on my old phone, and that’s why I repeat email is the fastest and most reliable way of communicating with me.
At the same time, I was being kept busy with school work. Free time was spent developing an Utilities software for my graphic calculator, a Casio fx-CG 20; this was probably the most useful thing I could do without an Internet connection, because at least gcc still hasn’t moved to the cloud.
Around 1st November, the technical problems that were stopping me from having Internet at home were solved (read: free wifi hotspot magically came back online!), and so the second cause for my lack of participation in the online life was solved. But there was still the first cause: school. So slowly, as I was having free time, I began to put me up to date on what happened while I was offline, and to make slow progress on my projects.
Apart from all this, I also have friends and family, and my real-life social life is way more active than it used to be one or two years ago (my brain must have installed some system updates, finally).
To conclude, on the IT side of things I’m now developing a JPEG image viewer for the Casio Prizm, using the picojpeg library (incredibly useful). The thing already works but is damn slow, plus selecting files is still a pain; this Prizm add-in isn’t yet published anywhere, or even announced on any place except this blog post (and don’t consider this an official announcement).
I finally had time to fix some bugs at tny.im and add some features: the optional short URL toolbar is now powered by Meny, which was developed by a guy which also has lots of other awesome work, namely a promising online presentations service called rvl.io.
I’m also trying to keep participating on online communities such as FreeVPS and Cemetech, and to keep my Twitter feed rolling, but the first cause for my online absence is still valid, and will only stop being on the beginning of July next year. This doesn’t exactly mean I won’t be online, but that you shouldn’t expect me to be as active as I once used to be. Again, if you need something, email me (admin at tny dot im, or my username on Gmail).
Until next post!