Dealing with Flack

So this is kind of a rant/political type post. When i started my project GCCPY as soon as it was announced as part of Google Summer of code 2010. A person who i should probably leave nameless nearly immediately jumped on #gcc irc.oftc.net, and started super questioning me on why the hell i would approach python in this way. To the point where he said that i should not bother and just contribute to PyPy. And the moderators in the channel had to kind of step in because it was just way too much.

So ok fair enough, then everything was fairly quiet i get the odd email from interested people then i noticed my project was on reddit http://www.reddit.com/r/Python/comments/1dc0tl/python_frontend_to_gcc_xpost_from_rgcc/

Same guy on there generally a negative slate on my project again. Partly i don’t blame them since my wiki is not that detailed. But i tend to feel people don’t think for themselves and just start believing people from established projects are rock stars, to the point were new projects are pointless to them.

Everyone is entiled to their opinion but what i will say is, think for yourself. And _dont_ compare a project like GCCPY to PyPy. Event just look at PyPy’s main page they have over 25k in donations!! What do i have, my spare time at work and doing everything from scratch in C where as pypy is basically python and jit reusing libpython.so. So before you start slating something as not worth its and cant do x,y,z. I have my own opinion that i believe this is a valid way of implementing python. Yes its _no_ where near python 2 complete! Make it a full time job it would be done in a year. I will say from my benchmarks which i want to post at the end of the year at python con IE; gccpy is looking truly amazing.

Think for yourself reddit!

Attempting to be professional

So I’ve been extremely busy this year, I have something really exciting in the works but i don’t want to announce this until its 100% complete. But in the mean time I’ve been busy professionalizing my projects and moving them to github as the stable repos then i keep my own git repos on this server private. I’ve been getting paranoid that my server might die as i was playing around with it too much the other day.

I will announce some releases soon… Developing on a python front-end to gcc for close to 4 years i think and there have been no releases yet ;) i think its time for one.

Feeling awesome

I tend to forget a lot of what i’ve done and i look back on this article always makes me feel warm and fuzzy inside http://www.phoronix.com/scan.php?page=news_item&px=OTYxNQ about my Gccpy project. I keep meaning to do a release i’ve basically re wrote the whole thing now so i actually feel comfortable people looking at my code now and i am tempted to make noise about it now. I always put off because i am worried about the slatting but you know what i don’t care about that as much anymore gccpy is such a HUGE project but there comes a point i feel i need to hit a milestone just for myself. And an initial release might give me a wee bit of confidence to continue working and see what the reaction would be.

Java for System Level Development

All you academic people trying to implement the new standard in some kind of distributed computing.. please stop.

Stop arguing that C/C++ leads to difficult maintenance of code or long development times. The benifits far far out weigh this argument:

  • Requires you to _know_ how to program properly
  • Faster
  • Lower memory usage
  • Promotes lower power usage because of no need to Virtual Machines or Interpreters
  • Promotes good design of components not just JAVA packages
  • Simpler and easier to integrate into a system no need for JAVA_HOME and simpler and more clear on how to package and support
  • Separates _good_ developers from average just get it done developers to know what they are doing. Promotes huge jump in code quality. As errors in C/C++ are very obvious.

System level development is _always_ going to yern for C/C++; JAVA will never integrate well enough for this role. And no Java is _NEVER_ faster or as good as C/C++. Go ahead and write your webapps in Java though. But get it off my system!

Being together!

So a lot has changed over the last while in my life i have a long Term Girl Friend and we both started working full time. From the year and a half of being together we have spent almost all day every day with each other. But i am finding it hard to adjust a little, i got my job first and worked for a little over 3-4 moths while she was job hunting and took her a while to adjust with me being at work. But at the same time i didn’t really notice because i was getting adjusted to new routines etc. But i understand why she said she was bored not that i didn’t at the time but i don’t think i fully appreciated it at the time.

Its only been a few days of her working full time and feels like there is so much pressure on couples who work full time these days. People must spent like 90% of their lives working these days just to have a good life. But what i really mean to get at is where i work its very relaxed in how/when we work. So i was under alot of pressure to get some things done and when i am under pressure i prefer to work from home in my own space and time so i can concentrate and forget i am under pressure. Where Kirsty work’s is in a Lab with very strict time management. I just wonder why places don’t put a little more trust into their employee’s about time. Especially in office jobs, although Kirsty’s job is in a Lab doing mad chemistry it always strikes me in IT jobs that being flexible time is a MUST within reason.

I don’t know about you but i really need the ability to feel flexible in my time at work. What i don’t understand is how 2 working people can have a family sometimes. Brining a young child into a world where parents are working 9am to 6pm. Never mind travel time to and from work. It really takes companies to trust employee’s, encouraging people to work with trust rather than telling people to work is by far a better policy and allows for people to have life and work instead of Work and then there is Life.

Unix Packing Deb vs RPM vs Unix PKG

I need to rant about this most of my day job is packaging debian and rpm’s as well as solaris .pkg and windows .msi. I want to talk about deb vs rpm.

From my point of view of a Hadoop and Subversion packaging maintainer from WANdisco. RPM and Deb both have their advantanges and both have serious flaws. Most people tend to think of Deb’s to be magical and great. But why?

DEB

- Great tools like apt-get/aptitude

- Packages install and de-install as well as handle dependancy tree’s excessivly well.

What people don’t think about is the debian packaging work involved. And what work all goes into this. Say you have a project like gnu hello world a simple ./configure make make install type setup.

With debian the concentions are to run autoconf/automake/libtool to regenerate build system on the host system run make -C BUILD so all build work is done in another directory then the usual make install destdir=/tmp/bla so packaging and process all files properly.

So yeah this sounds fine and dandy and great. But have you actually tried to maintain a package like subversion. Go ahead…. apt-get source subversion. Take a look at debian/rules and tell me how maintainable this is, and why building commands have to be this extensive for what should be telling a .,/configure make and make install. This leads to so many problems people who are confident on how dpkg-buildpackage works and each of the hooks in the rules file. Not to mention there are 1000′s of devscripts to use and all do slight variations with little to know understanding to know whats going on.

For example whats the difference in using debuild or dpkg-buildpackage although yes i know dpkg-build-package does what it says on the tin debuild tries to sign and create source packages automatically. So there are wrappers over wrappers. But really whats going on why can we do what RPM spec’s are just put in the build commands make and make install because thats all we should care about.

So in overall i find the debian packaging system on building packages completely awful, the more i work with it/paid to work on it i am trying to look into the specificiation of what a Deb is. I would prefer to build my own set of packaing software. One of the nicest things about solaris/unix .pkg is when you take your source you manually ./configure make make install destdir=/tmp/myproject and you peek in their and basically dump it into a folder with the same layout.

Packaging isn’t complicated, but somehow people have become rock stars from maintaining a .deb.

RPM

RPM’s are funny aswell they are in themsevles archives of binaries and post scripts etc. Building them you make a funny directly structure based of a ~/.rpmmacros toplevel instruction. So you have ~/rpmbuild/{BUILD/SOURCES/RPMS….}

And you make a myproject.spec file which contains all build requirements and build instructions but it handles things much nicer so you simple tell it what to ./configure with and build with and tell it what files to care about. The only thing about rpm’s is that dependancy handling and upgrading doesn’t seem to happen aswell not to mention that yum isn’t as powerful or at least doesn’t feel as powerful as apt-get or aptitude.

PS:

I know dh_builddeb seems to simply care about the control and *.install. So wrapping a new build system into using builddeb instead of using all the system.

GCC C++

I’ve been scratching my head well over a few weeks why my python front-end has been basically extremely broken. But when merging bi-weekly from master gcc i tend to get the odd problem but nothing to significant. But the C++ conversion to GCC seems to be well underway which changes how i use a lot of data structures surrounding vec.h. So deciding i am just going to build my front-end off gcc 4.7 for now. And when i get to a much happier state of the code go for a merge and cleanup/conversion into C++ the code as is, changes far too frequently such that i would be much happier stabilizing things to a point when i am happy and then going to c++. Its kind of exciting and scary since all my knowledge of gcc internals is changing rapidly. Change is a good thing and gcc has been needing a cleanup and look at the nuts and bolts for quite some time along with C++ code conversion this will bring much more standardizing interfaces to coding within GCC be it a front-end/middle/back end.

 

I would love to see if i could modularize dot the IL i created for gccpy such that an optional ./configure flag you could opt to have support to use dot within a front-end. Generic/Gimple are fairly complicated to get used to in the beginning mostly due to silly things like Generic uses 2 different forms but you use both at the same time to represent a block within a function of conditionals and things. You create a Block which holds pointers to the DECL_CHAIN of vardecls within the block the statement list as a DECL_CHAIN again which then references a BIND_EXPR which kind of puts braces around it all then you need to setup the references for super contexts and sub contexts. Its really confusing when all you want is a nested block of code.

Gccpy – Speed

So i spend some of my days salivating over the fact my GCC python front-end absolutely is a speed daemon. But this is just not a fair test yet, my python front-end currently doesnt handle exceptions, imports threading… stdlib stuff etc. But the core functionality of alot of it is there and the building blocks for everything is there i am hoping by Christmas to have some preliminary support for lists and dictionaries i have a local git branch which this all kind of sort of working but i need to add some parser code to handle certain still thing like accessors x[x,..] slices with : etc. And i hate working on lexers and parsers to be honest. I absolutely love python but the dependance on white space still annoys me to no end.

One thing i love seeing is that my python front-end generally on my desktop machine runs the same program ~4-6.25 times faster  that python. But yeah i will get so much hate if i start taking about that much so i rarely talk about my python work still so i like to keep it hush hush untill i feel happy with it. And i still don’t feel happy forcing at least 2 days a week to work on gccpy at the moment because i realise i care about it so much and want to get a decent release of it because the more i think about it, it has so much potential. Can you imagine writing kernel code in python really simply, can you imagine having logic code for a large c/c++ application but not having to worry about embedding python. Clean and fast and simple to write mobile phone applications with no need of virtual machine or interpreter.

 

In the end i think it has alot of potential but i know it will end up being a kind of similar how gnu java gij is to real openjdk etc.

Windows Build systems

Windows is fucking awful from a programmers perspective. The biggest thing i see is there is no standard way to build low-level software and distrubute this properly. When you come from apt-get/yum you are incredibly spoiled in how easy to is to get software and have lib’s and includes all maintained in their system wide folders respectively. One windows, have you ever tried to compile apache on windows? I am doing this at the moment and its driving me insane for over a week its been a struggle. There is no standardization on how to build software no configuration system. No decent way to install libs or includes in a standard way. You have to do everythin in an ad-hoc way and point to 10 different include location and lib locations. You have to spend so much time just making sure you get your env setup right that its just a nightmare.

In my opinion if windows doing really make a decent nmake/configure setup like unix their system level tools are going to deteriorate more and more. How can you possibly maintain releases of any system level software for each new MSVC release without ripping your hair out.

Most people say FUCK IT and use vc6 and msdev. Which is ancient these days. They probably employ your generic graduate students and let them loose and realise there is no backward compatibility from any version of VC2003+ and making developers lives a nightmare. Pushing developers off maintain their software on windows and only occasionally testing bits and pieces of it. So in the end people end up re-inventing the well in all of their applications when they develop anything other than java/python or .NET on windows since adding dependencies is such a nightmare to handle and distribute. The ideal solution for windows is to simply copy what mac do via xcode and you have your nice little GUI setup in VC and then you can install the system wide tools and have that standardized and have frameworks you point do automatically from standard install locations from xcode. So distributing libs and includes you could have installers to install there and applications can pick them up automatically removing the need for all the hand configuration for nmake you are required to do as well as not needing to compile dependencies all the time.