Yesterday we(Me, Vasil Kolev and Peter Pentchev) were examining the last students from the NetSec course and while we were waiting for the last student to come we started talking about the need of courses explaining software packaging in general.
We discussed that one can find really good documentation on RPM and DEB packaging systems, even you can find quite decent information for *BSD and Gentoo. However these are system build to address specific distribution problems and does not teach their user the basic ideas of package maintainership.
So, the issue is that at some point in time a developer is tasked with the job of creating a package, deciding what release cycles to have and how to approach the upgrades and maintenance of the packages he creates.
So what happens is that in most cases a really simple problems such as backward/forward compatibility are not addressed because the developer believes that this is the job of the package maintainer and the software that is packaged has nothing to do with that.
This started me thinking about next year.. Maybe it will be a good idea to start working on a course which will cover the general packaging problems and the possible ways that one can take to address them. Such a course should not be focused on a particular packaging system but instead teach the students what they should consider when they are tasked with the maintaining of packages.
So on 26th of February the Bulgarian Perl Workshop will take place.
This year I decided that I’ll cover something I consider very nasty, Embedding Perl into C and using C from Perl. Two really annoying things with a lot of horrible solutions and half written documentation.
While I was reordering the code of our suexec I unintentionally optimized it by removing a pace of redundant code.
In the end the result is that on benchmarks the suexec executes phps 20% faster then FastCGI(4 childs, 1000 requests per child).
I’m still doing benchmarks but the numbers that ab is showing until now are pretty conclusive.
The first time I saw the numbers I was pretty convinced that I have done something horribly wrong to mod_fcgid. So I decided to do some more precise benchmarks. In the end, after more then 18h of testing I’m really convinced that the suexec can be made to work faster then anything else currently available.
I’m really really happy with the results!
Since my last post I managed to upload Hawk on GitHub and also started a new project called ‘Hosting Automations‘. I hope that the work we have done will help others.
I haven’t got the time to add the Licensing and fix the more important files for Digits. But I hope that in the next few weeks I will be ready.
Recently I started a new company called 1H. From the start of the company I talked with my partners that we should go Open Source. Maybe not with all of our products from the beginning but at least with a few of them.
So we started with 2 entirely commercial products(Hive and Guardian) and 2 Open Source (Hawk and Digits).
Here is what I found very interesting:
- We had to develop a licensing system. It took us 2 months of development.
- We had to develop a way of protecting/obfuscating vital parts of our software. This also took us 2 months.
- Then we had to develop online verification of the licenses. This took us 1 month.
- And finally we had to rewrite vital parts of our software just to make it possible to be obfuscated. Also 1 month.
So in the end we have spent 6 months in development of software that is completely useless to our clients. In comparison, with our Open Source projects, we have spent time only to enhance them and add features requested by our clients. If we have spent those 6 months on developing new features of the software we would be far ahead, instead we started developing new features after a pause of almost 6 months. And the whole team has forgotten what were the projects we were working 6 months back.
I hated what was happening, and mostly because during those 6 months we didn’t had the time to begin the ‘opening’ of our Open Source projects. We always pushed that back, because it was considered hard work.
So in the past few days I decided to search for easier way of ‘opening’ our Open Source projects. In the end, instead of publishing our own hosted git repositories, I decided that it will be best to use community driven repositories like SourceForge and GitHub. And today it is a very good day for me, since I published our first open source project in github (mod_limits). By the end of next week I’ll try to upload both Hawk and Digits to github.
My goal is to have at least 5-6 Open Source projects published on github by the end of this year. I want to support the community and contribute all of our work back to the community. All of our Open Source projects are licensed under GPLv2 and at least for now, this will be the license of choice for the new projects.
I’ll try to cover my future plans for our Open Source strategy here. I hope, one day it will become interesting
This time I managed to crack the engine head on 5 from the 6 cylinders with total of 8 cracks… I’m quite good at destroying my car
Last Friday I left it with the mechanic. I hope that by tomorrow it will be fully functional again. Here are some pictures of the disassembled engine.
After that I’m going to fix some body problems with. One from a small offroad trip near Sofia and one from a 3 year old collision.
Next semester we will start teaching Network Security II - Secure codding.
This will be my second time helping for this course, however this will be my first time as the main lecturer for the course Since we will teach this course for a second time it will be a little bit easier as we already have a plan and some pointers for part of the talks.
I’m planning to introduce some more recent information about the attack vectors and the new prevention techniques from the past two years.
I hope it will become a quite nice course.
Since BG Perl Workshop 2010 I have read about Gearman and a few weeks back I decided to incorporate it in few of my projects. While developing with Gearman is interesting and fun job I found some things that I really missed in the server. While testing Gearman I started a client which added a lot of calls to a function which was not still registered. The problem was that some of the arguments to that function would insert wrong information into DB so I wanted to simply remove all calls to the function before connecting the worker for that function.
However, currently in Gearman server there are no commands that allow that functionality. The only way to do this is to restart gearmand.
So I decided to look at the code and see if I can add what I want. At first it seemed very easy to implement what I wanted so I started
It looked very very easy to implement rmfunc and zerofunc in the server, so I decided to contribute back my changes to the gearman project.
However, not everything is as easy as it seamed 1st Eric and Brian requested a test case which was to be in C with their test API. This was quite a challenge and I’m still not done with it
The 2nd thing seemed to be more complicated, but for me it was easier so I started with it. The problem was that, while it is no problem to remove functions which are executed as background jobs, its quite interesting when you try to remove function which has connected clients requesting it. When you remove currently requested function, there is no code that will notify connected clients that the function is no longer available, nor there is connection error sent to those clients. This breaks gearman communication in a lot of different ways.
So what I’m trying to achieve is add the functionality required to interrupt client communication with the server and send the proper error messages to the client. For me this is no easy job, but it seams that it is easier then the test cases.
Today I finally found the will in me to gather all of my books from all places I have left them and reorder my library. I thought that I had much more books but they fitted in only 4 shelves.
I keep most of my books at home but I have usually at least one shelf at the office and rotate them, depending on the projects we are working on. Currently almost all of my Perl books are at the office.
One of the biggest problems I have is when I give some book to someone and I don’t remember… I have to find a good software which will keep track of that…
Here are some pictures of the books:
It was very interesting for me, to find that most(3/4) of the books I have already read. Currently I find it harder to buy new books since I already have most of the books I’m interested in.
However, the sad thing is that for the past 10 years I have only bought 6 books that were not IT related and currently I have only one of those
This was the second book about Git, that I read. In the beginning the book didn’t offered anything interesting but it actually managed to summarize Pragmatic version control using Git into one small but very good structured chapter. After you reach the 4th chapter you actually enter into the universe of Git and start to appreciate written in the book, and the power of this software.
Instead of simply showing how can one use Git, this book describes how one should think in order to use Git. The comprehensive explanation of git’s internal structure in the beginning of the 4th chapter may seam as a little too much for the novice readers but it actually helps you understand all of the complicated logic which is behind this great software. Now when I thing about branching, merging or rebaseing I really know what’s going on. And all of this knowledge helps me solve problems that I have never managed to solve the past. Until now, I have been using best practices to work with Git without actually understanding why these were “the best” practices. In the book I found not only technical information about the software, but also a lot of information about how to manage a project, the right way.
I advice everyone to read this book. You will fill enlitened