programming

Super Alpha

I have finally got my project “Filmophile” up to what I am willing to call Alpha One stage. What is an alpha I hear anyone who hasn’t been disappointed by a video game release within the last five years or so. Alpha is the software development term for NOT READY YET or ABSOLUTE MINIMUM SO YOU CAN SEE WHAT I’M TRYING TO DO. Traditionally alpha’s never saw the light of day, it was synonymous with tech demo or proof of concept programming, never designed for the public to see.

These days alpha just means not done yet, after the alpha stage historically is the beta stage when you allow people to see what you have done and gather feedback on what has been made so far. Finally is the Release Candidate stage where you are giving people the chance to see not fully bug fixed products that are pretty much the same as what you will release as the vaunted version 1.0.

What happens now due to the open source community where those who program the code don’t really own it so you may as well get it up for all to see as soon as possible. The idea being that anyone who wants to can pull the code and get started working on it early as lets face it in my case anyone who would want to pick up the code after me will be better than I am a programming. The flip side to this is often games are released in an alpha state to encourage people to buy the game early, this helps gauge interest and help pay some bills early. The downside to this approach for games is it is often very tempting to never finish a project.

So what is Filmophile?

The project is a program all about old fashioned film photography development. Back in the days before digital and even before colour film you processed black and white film in all sorts of probably dangerous chemicals. For each probably dangerous chemical your film would require a different processing time and had the possibility of changing the image like how contrasty or how grainy It looks.

So the idea is that between myself and anyone who wants to help me I will collect a large amount of these times and their effects. Once that is done add them to the program and then anyone who does film processing won’t have to look up times online they can just use their stand alone program to do so. Filmophile integrates a timer so if you happen to have a computer in the same room that you process your film you can use it instead of a stand alone timer. Not the most useful feature but I might use it so why not.

As anyone who has programmed anything ever I have many feature ideas that I would like to make but I have no idea about how to do it and may never get around to doing so. Here are some of my ideas

  1. Add calculations like hyperfocal distance or push pull times.
  2. Make the program save what you were last up to.
  3. Add the ability for you to use a custom database or just use manufacturers/your own times.
  4. Make the whole thing look less like a program from 1998.

There are many other even more ambitious ideas but ill get to them in time. In all probably I will get Filmophile to a point that it is useful and then move onto making the project a little more in line with my degree which is based in databases. So the idea would be to recreate this idea but using a NoSQL database solution like MongoDB. Perhaps have a “cloud” version of the program or maybe even make the current one multi-platform. All of this Is just conjecture at this point however I will take this opportunity to ask people who know about film development to fill out my Google Form telling me of all the fantastic ways that you like to develop film.

You can check out this alpha Source Code  here. Be forewarned that you need to have Python 3.3 installed and have some kind of understanding of how to use it also it currently

only works on windows. I suggest anyone who would like to look at the source code download something like PyCharm from Jetbrains or Sublime text to look at the code effectively.

Advertisements

Unit Tests

I don’t understand unit tests. I’m getting strong de ja vieu from my earlier posts on object oriented programming which I am just starting to get a handle on. Unit tests are a highly contested from what I read on the internet … but what would the internet know.

So what is a unit test? The short answer say you have a function, here is a super simple one a function that takes in a number and returns the number multiplied by three. Ok so your unit test would be something like double(3) = 9. So if you put 3 in and you don’t get the answer 9 the system throws a warning telling you that you need to fix what some idiot had done (you may or may not be the idiot, unit tests do not discriminate).

So that works right. That make sense! Ok so how do you test and object. Lets think about this lets make a variable which holds the double class; number.variable = 9. ok so stuff is still working but how do I test if a visual element has been made? How do I mock objects. Where do I start and why should I bother? Or even worse what happens when I start querying the database?

Unit tests are very important for continual integration, as that is not something I know how to set up or maintain I suppose this hinders my desire to do unit tests.

Should I even be worried about doing tests? This one I am not so sure about. Like I have said many times I don’t see myself as a programmer so I don’t really see an advantage in learning how to write these. In my own software build I am manually testing a lot of the functionality and this is partly because I don’t know how to make tests but partially because I am still very much learning how to program so I need to see the cause and effect between what I write and what it does.

The next thing ill have to learn is how to do de-bugging. Still have no idea what this is or what it does. By now you will be thinking I must be the worst programmer of all time and you would be right. I know there is something about break points and tracing stuff back but that is about it as far as I know.

Lastly I have been thinking more and more about using the application to learn more ways of achieving the same result. So in the future I think ill change my super simple SQLite database that works perfectly well for what I want to something like MongoDB. Why? Because its hard and then I would learn how to use a NoSQL solution to get the same result. Currently I don’t know how I will implement this but I suppose that is half the fun.

Well back to trying to get this thing working for the first time 🙂

Back to the binary mines

So anyone who follows this blog will notice it’s very patchy as to when I write. The short answer is I’m very busy, currently I am in full time work, doing uni over a summer semester and attempting to learn more about databases in my spare time. All this tells me is that I need to sit down and focus on the weekends.

My current coding project has been put by the way side but I still want to complete it even if it never meets my original goals. Something I have found amusing is that I opened up my code after a three month break (way too long I know) and I can still read it. I attribute this fact to how many comments I write. I use PyCharm as my IDE for my current project and it enforces PEP8 which I strangely find a nice feature. Who knew that having a program constantly nag you to write comments and leave spaces would be helpful. So my code is littered with descriptions of what things do, that in conjunction of learning how to do object oriented programming a little better (I’m still terrible) means I am spending a lot less time tracking down variables and what classes and sub classes do.

My future plans for this program are to open source it and use it as a base to rebuild it again but with an online form. Part of my degree has been web design and cloud computing, because of this I want to get a better handle on NoSQL databases as I feel I will have to work with these systems at some point. While the type of data I’m using isn’t really suited to a NoSQL database I still think it will be worthwhile to learn these systems above and beyond reading about them.

While working on this program it amazes me how many programs you were once able to download and install are now online apps. While this is not inherently a bad thing and it certainly allows me to not install cruft onto my machine, I have to admit I get annoyed now with having to create an account or deal with slow loading times and advertisements. I understand there is a huge gap between the type of stuff I’m doing and commercial products and the complexity of their work must be commended. But I do feel a little sad for the days where I could use a program locally and natively on my system. I think a large part of this is to do with the fact. But I do feel a little sad for the days where I could use a program locally and natively on my system. I think a large part of this is to do with the fact that running apps online is platform independent and now we are running so many platforms this can be a huge advantage. But for my quaint little project that is essentially a learning experience I have to say I’m having fun with making a windows only program.

Microsoft Heavy

So this week one of the new things I have been playing with include Microsoft visual studio and Windows 10. So it has been a very Microsoft heavy week this week, and I must say I’m not regretting it. Microsoft has copped a lot of flack over the years and a lot of it has been deserved, I can’t say I liked the Ballmer years very much but they are now over. Windows 10 I would say to many people is a modernisation of Windows 7, and there is nothing wrong with that.

Windows has become very familiar and safe to a lot of people. While OSX offers an environment where people feel they can do no wrong, Windows offers an experience that is the same as always until you start playing. Everything is just a little more integrated now, while this can be a little scary and I highly recommend that you turn off some of the internet connected options, like websearch for the start bar. Overall these features make the whole system seem faster and more productive, like my Skype account knowing who I am because I logged in with my Outlook account.

While I still hate apps, true to Windows form you can mostly ignore them. I have Windows 10 installed on both my laptop and desktop computers now and I can tell you there are few things more annoying to me than an app locking you to one screen when you have a dual screen setup. I just find the apps generally to be inefficient when considering multitasking and I absolutely loathe when I accidently open the app version of one note compared to the full version. The app only loads pages on demand so I am waiting for them to download and the menus are drastically simplified which makes it annoying if I want to do anything like math (yes I use one note for math).

Overall my transition from Windows 7 & 8.1has been very smooth and generally uneventful. There have been only two issues that have really bothered me, firstly on my laptop as Windows keeps wanting to update to the latest drivers. This is great except for the fact that the latest synaptics touchpad drivers have a glitch where on some models (mine included) you can’t change the defaults so my touchpad is stuck with reverse scrolling enabled. Secondly on my desktop for the last week the numlock has been disabled by default. THIS IS UNACCEPTABLE why would anyone ever want to turn numlock off? I can think of no reasons at all. So I had to as the internet for help, open up regedit and change a default and everything seems to be fine now.

As mentioned earlier the other thing I have been playing with this week has been Visual Studio. This is another thing I have been avoiding for the longest time. I remember playing with visual basic more than a decade ago and it wasn’t what I would call an easy or refined process, to be fair programming is rarely easy or refined. Visual Studio is like Visual Basic except it has more. One of my courses this term asks its students to use Visual Studio to build projects that are dynamic websites. I am not exactly proficient with PHP so it was off putting, however when the project half built itself and I saw that JQuery was already installed for the project along with Bootstrap I suddenly felt like I was in more familiar ground. As mentioned I am not a huge fan of object oriented programming I have become a little better as I have been doing more with python in my private projects but I would still say I am not very accomplished with it. C# is heavily OO just like Java and this is very daunting for me however how ASP passes information through form its aspx files its cs files makes things very easy for me to follow. There is a whole system where each element of a website has its own code file attached to it and you can push the variable values to it and back again though the use of div ids. This may sound a lot like JavaScript to you and in many ways it is however in reality it allows for server side processing but lets the pass though happen easily.

The true brilliance of this is that once you know how to do the C# processing you can use the same code with a desktop application. I could be wrong about this but I am of the impression that this also is able to be used in phone app creation as well though the use of Xamarin. Version control is a breeze as you can link to your github account natively though Visual Studio. You can also link to a Visual Studio or Microsoft Azure account to back up or even deploy your project to. This is the sort of integration I was talking about before I can literally work on a project and once I’m happy upload to Azure servers with no mucking about with making sure the database is installed or that your framework is set up properly. Generally speaking if it worked for you locally once you push it to Azure it all works as you have seen before.

While I will continue to learn this for my course it has made me tempted to use .net systems for my personal website but we will see how I feel once I have enough time to delve into all of that again.

Holidays

I am now officially on holidays, What does this mean? Well now I get to focus on some of my own personal projects, already I have in mind some things I would like to get done. Chances are that I won’t get any of these finished but it is fun to try.

USB Fight stick

Some time ago one of my courses got all of the students to buy a MAKEY MAKEY. It is an Arduino based project that allows you to make interesting human interface devices. Now that course is finished and I still have the device I am thinking that I should use it for a new project instead of collecting dust. As it is used for new and interesting ways to control a computer I thought I would take a step back and build the kind of input that you would find on an old fashioned arcade cabinet. The only justification I have for this project is that I have most of the parts already and I may use it on some of the fighting games that I got in the last steam sale.

Website update

Like any website updates are necessary especially since mine was never finished properly. To be fair it is not entirely my fault that my website is not up to date. There seems to be a change with the password that I was never told about and hence I cant get into the server to show the updates I have already done or anything new I wish to add. So step one is get that changed or reset then update to what has already been done and finally start on some new content which is in the works already.

Arduino timer

One of my hobbies is analogue photography and for a long while I have wanted a hand held timer which has programmed into it my favourite development cycles. This is not a very complicated project but does give me an excuse to work with the Arduino I bought myself several years ago and it is a slightly more complicated problem than how to make leds blink. The idea is that a film has an optimal development time which I can program in then I must stop the development using a mild acid followed by fixing the image which always has the same time. This way I could turn the timer on hit a start button and then it will buzz telling me how when to finish each stage.

Filmophile

So for some time I have been working on a python program that again is related to analogue photography. This is an extension on some of the things that I have learned from various uni courses, it will be a program that looks up the development time of film from a database then gives you different options that modify that time then it can be used similar to the before mentioned Arduino timer. If I am able to I would like to get the system working so that maybe you could upload your times from Filmophile to the Arduino but we will see about adding that later.

Object Oriented

There is a special moment when you are learning. It creeps up on you, it is special and exiting particularly if it comes from many hours of tribulation. It is what I call the “I got it moment” suddenly you understand, concepts once foreign now eclipsed with the greatest of ease. It is a brilliant and special moment when this happens because it usually means you can put that hurdle behind you and move to the next one.

The problem with these moments is that there is nothing you can do to force or even encourage this to happen. Which is a real pain when you really need one to come along so that you can get some work done. For me I currently need to understand object oriented programming. I can hear the collective groans of the internet and the overused phrases associated with this statement. “how could you not understand, its simple.”, “It’s so important you have to know it” and it goes on.

The simple fact is at the moment I feel like I think very procedurally. Start here, modify this way, add these bits then give result. It’s simple, it relies on how we often do things in everyday life, so the abstraction is lower.

Don’t get me wrong I understand the premise of object oriented programming, I have even done some of it but when it comes to me setting up something this way myself I have no idea where to begin. Yes I have tried reading some of the books on the subject. They all use a similar approach as far as I can tell, “imagine a car it has certain properties like speed and how many chairs…”, “think of an apple it has a colour…” yes yes ok got this how do I make one, define apple; ok there is now an apple we give it some variables; yes ok now its got some vars, hmm now I want to use it now apple = x and for x self x set, oh crap I forgot to write a setter and getter now what do they do and then I need to pass what I know I’m supposed to use self there somewhere, is self the object or referencing the method of set and get, ohh set is just self = self of the input…. then I wake up with a keyboard impression in my face a deep sense of failure and a disgust for how popular this method is.

I understand I have to learn at least the principle and get them working as object oriented programming lends itself to massively scalable projects. If I ever wish to oversee a project I really need to understand what is going on. Currently I can look at the code and see what its doing and even what are the steps involved in most cases but I have no idea how to adapt it to a new situation or how to create such an environment. And thus I need to get my “I get it moment”, back to the keyboard indentations … sigh.