The return from kernel space

The title of this post is a reference to an assignment I had in university, which is the reason my last post is spaced at a month from this one, rather than a fortnight, as is supposed to be, the assignment is detailed over here.

After I said I wouldn’t have time to put on the project (the same one as mentioned here) I expected someone else would take it, but actually returned to find out a couple of people left, and someone would actually be hired to work on the project, as well as an entirely unexpected person getting assigned to the project, but that was reassuring, as he has a lot more experience than I do, so that was well received on my part.

After returning, I’ve worked on mainly two things, a “stand-alone” PDF to image web API converter, and a usage statistics view on the front-end (or web application), as well as the data provider URI on the existing web API for it.

For the PDF converter, I simply used parts of the project that were already there, so I only needed to add the API URI for it, but it wasn’t as simple as it sounds, as there were some problems with the structure of the project, which could only be resolved through some command line trickery (mass copy and rename of a working part of the project, as well as deleting everything unnecessary), take notes, the command line RULES.

For the usage statistics, I used the Angular Google Charts module/project, though I used `npm`, rather than `bower`, it was still challenging, as I’m using ES6 classes with AngularJS, rather than using the “wannabe-functional-programming” javascript (a.k.a. ES5), or `IIFEs` or whatever that nonsense is called, and all documentation on anything that has anything to do with angular is for the “wannabe-functional-programming” javascript code, so “translating” it was a somewhat difficult.
After getting used to it, it’s not too difficult, but because of the way it “consumes” data to display it, it has been difficult to get the back-end to format the data correctly (I just really don’t understand why anyone would actually like javascript as a language… I mean, if you look at Angular 2+ (currently 4… I think?) TypeScript, is closer to a “statically/strongly” typed language than to a dynamically typed, people should just accept that non-strongly-typed languages AREN’T the way to go.

The charts there aren’t as “powerful” as the “vanilla” version of the Google Charts library/module (or maybe it’s just not complete as a wrapper of the library), but it gets the job done, and that has been mostly the attitude of everyone here, so I guess it’s fine

tl;dr version:
unexpectedly still on the same project, I think I’m doing good progress, getting things working gives you a confidence boost

unrelated to the rest of the post

I got a couple of really good books from the library, which I intend on reading over the next couple of weeks (good in the way eating vegetables is good, not like “feel good” good) they’re “Clean Code” and “Refactoring: Improving the Design of Existing Code” though for some reason, the latter is in what I think is Chinese (it’s Chinese characters, but as I understand it, there are several languages in China and it’s surrounding countries)


The Project that stayed with me

After some quick, and somewhat confusing period of project hopping (see the previous entry Project Hopping) I have been in the same project for some time, and I get the feeling it’s going to stick for quite a while, it’s the project that uses Computer Vision and stuff, it’s pretty cool, but kind of intimidating, like I mentioned before

anyway, we’ve managed to make some well-received changes (the client even said it was working, and I quote ‘spectacularly’), basically speaking, I added a *serialization/de-serialization routine for an entity field to show some information to users (roughly speaking, that’s a way to process a JSON message through software, so the front-end sends the back-end a message, the back-end gets the JSON message, ‘translates’ it into a local data structure, and works from that, and when it needs to send a reply it does the opposite process, i.e. it creates a JSON message from local data structures)

a couple of HTTP verbs that weren’t there before were also added, I wasn’t the one who actually added those (specifically, the DELETE and PUT verbs for a couple of entities, they weren’t needed before, so they weren’t implemented until recently), we will probably need to add a couple more for some other entities, but we’ll get to that when we get to that

All in all, web development can be quite satisfying, even though I’d personally say it’s kind of ‘unstable’ (what I mean by this is, there are things that can be changed in one or two lines of code, but there are others that even after a few dozens of lines of code aren’t even close to being finished)

things I think I’ve gotten out of working on this project:

  1. There are several aspects of web development that are challenging, rewarding, and fun
  2. There are a couple of things, which have somehow become standard practice, that are really, REALLY annoying and frustrating, task runners for example, why can’t there be one that does it all? no no no, everyone uses between 2 and a million of them (I’m exaggerating here to make my point, in case you didn’t get it), you gotta use karma, and jasmin, and mocha, and gulp, and grunt, and webpack, and eslint, and bower, and what feels like a million other tools just to get the thing working
  3. I’m paraphrasing here; “when you do your job properly no one notices, but when you make a mistake everyone knows”, that’s how that feels sometimes with these tools, if it works for someone, it’s all good, but if it doesn’t it can be very frustrating to not be able to get it to work, or simply not knowing how it works (or why it doesn’t)
  4. Different environments can be a nightmare (even when something works for someone, that doesn’t mean it will work for everyone, not being able to do what you see the guy next to you do (though he’s only next to you ‘cuz you asked him for help :-P) is really frustrating (this is again, related to task runners, and just because you’re using a different OS… just make the damn tools work for all platforms!)
  5. Many people can be messy when communicating, so sometimes, the hardest part is actually trying to understand what they mean, rather than writing the code
  6. Many people can have misconceptions about what some words mean, like ‘code smell’, the definition of which is along the lines of “a symptom of a deeper problem in design”, which is not even remotely close to “that’s not how I want it”
  7. Murphy’s laws are the ever-present bane to the programmer’s existence
  8. oh you missed that semi-colon? yeah I’m not gonna let you know about that until after the Pull Request is merged – the task runner
  9. Pair programming can actually draw out a lot of productivity, even when only done partially right (asking the guy next to you about existing code, rather than actually there being two people on the same computer with only one keyboard)

anyway, I don’t really like putting a lot of images on these, so I will only add one of some non-essential code and such, maybe on later blog posts I’ll put some more images, if I get inspired


tl;dr version:
unlike last time, I’m still on the same project, it’s been frustrating, challenging, rewarding, and fun (though not at the same time… that’d be interesting though), there’s a lot to be done yet, and I feel like most of the work is going to be on getting everything clarified

unrelated to the rest of the post

I’ve had a couple of very happy occasions recently, so even with the heavy, heavy load right now, right now I feel like I’ll be able to manage… hopefully, and I guess I need to get more proficient when it comes to using task runners

Project Hopping

is what could be said I’ve been doing (what the title says).

Allow me to elaborate, I was working on a Car Rental software Project, aimed at being used by the people that rent the cars, so it’s an internally used project (as opposed to a phone application to make a reservation to rent a car), but then I was switched to a Legal Procedures Project (another internally used project, this one aimed at being used by Lawyers to keep track of their current legal procedures, as I understand it), that, was because some small changes were requested for it, so it was seen by my mentor as a good opportunity for me to get some experience on a .NET project.

Anyway, I barely had time to set up the development environment and start adding some tests to get familiar with the code-base and so I could then add the new features, when I got switched to a new project… this new project, as I understand it, is a web application made in AngularJS, with EcmaScript 6 (ES6), that communicates with a WEB API (that’s the Interface between a Computer Vision/Machine Learning Application, and the Web Application)

This new project sounds so cool, that it gets to the point of being scary (what do I mean by scary? well, as I’m not too familiar with both it and the technologies it uses/depends on, I fear it may take me a long time to be able to contribute something to it, but hopefully I’m wrong about that)

I’m still getting familiar with it, so I don’t know more of the specifics (such as: the DBMS being used, if any, many of the project dependencies, Making of the tests [because they’re written in NUnit, which I haven’t used much], configuration for the services that are used, OCR, etc.)

I do like the fact that it looks like I’m going to learn a lot from it, and not just about the project itself, and Computer Vision or Machine Learning, but about using GitHub and working with other people in a programming project, as many other times, I’ve only needed to use the basics of GitHub (specifically Pull Requests), but did not get into using Issues, wikis, etc.

tl;dr version:
Working on yet again, a new project, so cool it’s scary, made with .NET and AngularJS

unrelated to the rest of the post

had to start drinking coffee recently… it’s surprising how effective it is at making you feel awake, but it really tastes awful, I don’t know how people can say that it’s got a soft flavor or whatever, guess it’s an acquired taste

First Deployment

Like I mentioned on my last entry, I was sort of switched to another project… so I was doing some work with AngularJS, Ionic (which is basically AngularJS, but with some differences in the HTML tags used in the projects templates), and a rather interesting Database/Hosting Service: Firebase

I didn’t “mingle” too much with the database itself, but it uses JSON, and it isn’t relational, so it can be very fast, but at least in the way we used it it’s really not (though that’s because the client is using the free tier service, so one of the lead guys on the project said that the virtual host goes to sleep after a certain amount of time without being used, you know, your general free VPS tier service stuff (Virtual Private Server, for those of you who, like me absolutely hate abbreviations without context, specially if, in another context, they can mean something completely unrelated, like MVP = Most Valuable Player VS MVP = Minimally Viable Product)

As I understand it, you can also host web-services/web-applications (basically back-end stuff) on Firebase, and I say it like that, because I didn’t do any deployment there myself, I did deploy to Heroku (the front-end though) because the QA (Quality Assurance) guy said the things I fixed weren’t working, even though they totally were (just not on the deployment he was testing :·P)

the things in question, search/filter the results of the loaded data in the application (front-end side), and in the mobile application (the Ionic bit) adding a field (which doesn’t sound like much, but it involved a lot of small changes throughout lots of pieces of the application)

I did all of this using vim, which I’m still getting used to, but I like that it’s even in the most minimal installations of most GNU/Linux distributions (or vi, but the differences aren’t so great unless one has lots of plug-ins or the like)

tl;dr version:
used Ionic, which is basically AngularJS, but with some differences in the HTML tags, it was cool

and the “unrelated to the rest of the post” bit:
mastering discipline is hard, but the progress obtained is so much sweeter than any other kind of progress (learning vim, and another language as an example here)

… Yeah, it’s been a while

a lot longer than I intended, college sure does get busy

anyway, I ended up not needing React at all… which was a little annoying, ‘cuz it sort of felt like wasted time… it was interesting though, so it wasn’t entirely a waste


React is a little bit weird, it really is only UI, and even if it’s really good at it, you can’t really do everything with it, specially if you need data from a data-source (like a database or a web API)

Angular on the other hand… Angular 2 is not used as much as one would expect, and frankly I get why, I mean, Angular 4 is already close to being released, and if it delivers on its promises, I see no point to really use v2, specially if you’re already “a wizard” in v1 (or JS) and you see no particular need to migrate to the newer versions (not saying I’m one of the wizards though)

anyway, the first project I was actually assigned to, has been… exciting, to say the least, but it’s sort of suspended for the moment, so they assigned me to something else, and honestly, I think I might like it more, because it’s not a refactoring from one technology I don’t know, to another I don’t know well, as the first thing was, but more of a bugfix in a project that’s in a technology I’m familiar with (Java v7 syntax), and the one I don’t know as well (AngularJS), but since I’ve had more time to get familiar with it, I think I’m going to enjoy working on it

I actually did some refactoring to the code of the back-end, applying “Uncle Bob’s” ‘extract till you drop’ method to both make the code easier to read, and familiarize myself with the code, I don’t really expect them to use the changes I made (other than changes to fix the issue) but I get the satisfaction of getting working code doing something I learned during one of the trainings, which is nice

tl;dr version:
I’m doing some stuff with a back-end programmed in Java, that’s used by a front-end programmed in AngularJS, and it’s been a lot more enjoyable than the pure javascript nightmare with was the refactoring/migration that the first project was (or is)

to keep up the “unrelated to the rest of the post” thing I did last time:

The bank stuff is kind of neat, though I’m not really making so much to really get any benefit from getting dollars, but anyway, might come in handy later on

The First Week

This is the post excerpt.

This first week at Pernix hasn’t been like I expected it would be…

it has been so much better!

I expected a sort of tutorial or introduction to a particular technology, but instead I got introduced to Pernix’s Culture (constant training on general good programming practices (for all programming languages), as well as other topics, and the liberty to ask anyone around for help, going from where the bathroom is, to what a closure is in JavaScript (as opposed to what it is in a functional programming language). And was instructed to start with the training for a couple of popular JavaScript based web development technologies (AngularJS/Angular 2 VS React.JS), which are fairly interesting

I already had some experience with AngularJS, but the training was really helpful to understand the more advanced topics I didn’t have experience with (which were handled by a friend in the couple of projects I worked on that were done using AngularJS)

Angular 2, is an entirely different thing, it’s not even in JavaScript (though it gets ‘translated’ into it), it’s TypeScript, and although it provides a modular, and more easily organizable model, which is nice, you need to almost learn it from scratch, because even with the things it ‘borrows’ from JavaScript, it really is a separate thing.

React.JS is, like they say even in the tutorials/training videos, really good at what it does, which is UI (or as it was called in a particular video from Pluralsight, the ‘V’ in MVC), it’s relatively easy (it’s JavaScript though, so its syntax is not the prettiest thing around), and it’s quite fun to make good looking and snappy (as in fast) web applications

All three of them introduce custom HTML tags to work with, and if I had to rank them from most simple to most complex, right now, I think it would go like this:

  1. AngularJS
  2. React
  3. Angular 2

However, in terms of Power (things the framework allows to do, but again, in terms of what I’ve seen, not necessarily what an expert in all of them would say), I think Angular 2 is king, with React only being “better” in the rapid UI development perspective, both in empiric performance run tests, and how fast can someone program it (see what I did there? I used a garden path sentence and actually used both possible meanings, pretty neat, huh?)

(at least for small applications, for larger applications Angular 2 may allow for a more constant speed of development, as well as having the possibility of using smaller and simpler tags, but its power really comes from the fact that it’s made to work for bigger applications, not so much the really small ones)

tl;dr version:
Pernix is a cool place, JavaScript syntax still sucks, React is great for the UI of small, fun web applications/games, and Angular 2 is TypeScript, instead of JavaScript

unrelated to the rest of the post

we had lunch from KFC this Monday, it had been a while since I last ate from KFC :·P