Given the above blurry video of Ubuntu on the Nexus 7 and knowing that in it’s current state, it will be bug ridden, unoptimised and dangerous to ones sanity, why would someone go shell out £170 for one?
Well I just have so let me explain my logic! I use android, I like it, I have no hatred of Apple or Google but while I have moved more of my computing life into software that is open, I have moved more of my personal life into services which are not.
This has been growing on my mind more and more lately and while I’m not ready to completely pull myself from these services I do know that I must start looking. There have been plenty of news stories recently which should serve as warning to where these services are heading and the kind of problems which will increasingly arise.
My phone is my biggest and most continuous link to proprietary services, namely google mail, search, maps, etc. By following along with the development of Ubuntu on mobile devices I hope I can lay the groundwork for my own move to an open source based mobile life.
Again I don’t believe that Google are using my data for malevolent purposes…But I do believe that as the market place changes companies try and leverage what they have in new ways to make money. I don’t want to be that future administration’s leverage.
Another, very important reason is that it will be really cool! I want to see Ubuntu become a viable alternative to what exists already, and look forward to all advances and experience that will move all around the Linux ecosystem from having a solid Debian based OS being transformed into a solid mobile platform.
Bring it on!
p.s. I also want to port CEPL to OpenGl ES and get lisping on this thing!
I have just started looking for resources on writing domain specific languages in common lisp and stumbled upon this excellent video by Rainer Joswig on the subject. He gives a quick run through and his explanations (as always with Rainer) are clear and illuminating.
I’m also buzzing at the idea of eventually getting my brain into a place where I move as naturally through a problem as Rainer shows in this video. All to often I feel the apprehension caused by not remembering just to let go and just start writing…I guess this affects all disciplines in some form or another but I am beginning to appreciate how differently I can code in Lisp to how I did in Python for example.
How much is down to the language and how much is just me developing as a programmer remains to be seen but it certainly feels different.
Enjoy the video.
BWUHHAHA I’m back! I have spent the last while working on code that really doesnt make for good videos so I have been quiet but I have something new to show.
This video shows a really simple directional light acting on the monkey head model.
What I’m really pleased with is that I didn’t need to be rigorous which checking that the code would work before I ran it. I was able to run it an mess around with things until they worked. A good example was with the ordering of the matrix multiplications. If you have done some of this stuff yourself you’ll know that, unlike multiplying regular numbers the order you multiply matrices is very important to the outcome so while:
2 x 4 = 4 x 2
..It is not the same when using matrices. I frankly was confused with the orders when I first ran the demo and it showed! The monkey head was all over the place and the light wasn’t working. What was wonderful was I was able just to keep swapping things around until I got it right. I caused a lot of bugs in the process but, as you are still able to compile parts of your code while the debugger is waiting, I was able to undo my mess and carry on running the demo as if I wasn’t incompetent!
All in all I’m pretty chuffed with all of this and have plenty more to show too. I will defintely have to write a long post about all the work I have been doing on the opengl wrapper part of CEPL, it makes the code much easier to write, and read for that matter!
Well that’s all for another day,
This weeks major distraction from blogging here has been time. I haven’t lacked it but I have been playing with it.
I really didn’t want to work on time just yet, I wanted to add input control to cepl so that I could let people actually play with what I have been doing. Oddly though my brain wouldn’t let me, it was one of those times in creativity that you get overruled by the voice in your head and no matter how hard you try to start working on something your brain drags you back to what it wants to be working on.
So I gave in and dropped working on input and had a look at time instead.
Time is intrinsically woven into games, and how you handle it has major impacts on how your game code is structured. As I’m working in a very non-standard language I feel very free to go looking for non-standard ways of doing things.
It’s been a beautiful feeling as I have really felt like I’m exploring ideas rather than just implementing them. I go on gut instinct and the mere action of writing the idea out in code reals the pitfalls as well as the advantages to the idea.
While I was noodling around with one particular function a wee voice popped into my head and said “Lexical Time”… which made no sense but sounded cool, but before I got any further it said “temporal lambda” which did sound cool…and also made sense.
The idea that came unbidden with the voice is that you could define functions which only evaluate their body when they meet a certain time condition (or temporal condition so we can sound fancy!). One example of such a condition would be BEFORE.
I must stress that I have no idea how useful these things may be, only that they sounded interesting. So with a little help from a great friend, I created temporal lambdas.
The first thing I am using them for is actually for the input control that my brain wouldn’t let me look at before (It clearly had a plan!). Key combos are very common in games for example you may have to press “A B A B <- ->” within 2 second to perform a special attack. With temporal lambdas, is really easy as it takes care of the ‘within 2 seconds for me”.
The key combo checker could be created like this:
(let ((key_cache nil)) (ct:tlambda (make-time-cache) (make-withinp 0 2000) (key) (setf key_cache (cons key key_cache)) (equal key_cache '(:left :right :b :a :b :a))))
So the programmer only needs to focus on the code to accumulate the keys and check if they are valid, and the temporal lambda makes sure that it will only be valid within 2 seconds (2000 milliseconds)
I’ll hopefully post some videos soon, once I have some control code written, so you can see what I’m yapping about.
I’m also just excited to see where temporal lambdas will be useful, again the idea came out of the ether so I don’t have a real plan for them yet. However if/when I do I will post up whatever I find.
I had an annoying realisation the other day that, while my computers run almost entirely libre software, the majority of the apps on my phone were not open at all.
Given the awesome fact that a huge percentage of mobile devices are now running an open source OS the fact that the apps aren’t is a bloody joke.
Luckily some great people have put together an ‘App Store’ which only contains libre software, its called (FDroid)[http://f-droid.org/]
There are some great wee apps and as the apps are made to be free there are no adverts either.
Missed a day of posting here again but progress is being made.
I seem to be falling into nice rhythm with developing cepl. First I work through some tutorial to add functionality to cepl, then I spend a few days trying to find abstractions for what I’ve just done.
Right now I’m in the later of those two. I’m getting annoyed with having to remember what type of vector I am using when I run vector functions against it so I’m currently working on generic function which take care of calling the correct function for me so I don’t have to think about it. I’ve also got tired of writing:
(make-vector3 1.0 2.0 3.0)
..every time I need a new vector and having to make sure the numbers are floats. To that end I have made a macro v! so that
(v! 1 2 3)
..works exactly the same and the long version except for also handling type conversions.
It works! Turns out it wa a very simple fix as the .obj files start counting from 1 wheras I expected counting from 0. One quick tweak later and we have this:
Sorting algorithms..there’s a whole bundle of them each with advantages and disadvantages over the others. If you want to understand some of these method and have a fairly visual mind this site will probably be right up your alley.
Use that site and play around with different initial conditions and see which method works best. This can really be helpful along some terser text as a way of seeing what the author is on about.
I’m on call this week for work so I best go try grab some shuteye before someone calls.
Well I have tried loading an .obj model in cepl for the first time…and well have a look..
Not so good!..Its meant to look more like the grey version on the lower right. Seems like I’ve still got some issues with indexing or something, but at least its getting vaguely recognisable!
More to come.
I had an interesting little issue the other day where connecting to some servers was taking aroudn 15 seconds before showing a login prompt. Everything after that was speedy so I knew it wasnt going to be a connection time issue.
I ran the following to get verbose connection info: ssh -v servername
and saw this error: debug1: Authentications that can continue: publickey,gssapi-with-mic,password debug1: Next authentication method: gssapi-with-mic debug1: An invalid name was supplied Cannot determine realm for numeric host address
It turns out that ssh is trying to use Kerberos (GSS-API). To turn this off we can simply edit our ssh config file.
# open up ~/.ssh/config # add the following line GSSAPIAuthentication no
And that fixes it!