I tried today to buy a SSD drive from OCZ (the SLC agility EX of 60 GB)... amazon.com sent me to hell. Why? I checked the announced price on a french online shop... well twice the price, and not even available because it was sold out. If you have found cheaper and available in the USA, you are not free to buy it from Europe even if your are willing to pay the taxes (will still be ways cheaper).
Well... I'm going to drop the nvidia reverse engineering plan... indeed I would not stand to have my work used by a BSD driver without a real and GPL Linux driver. Then, as soon as I finished the AMD documentation, I start a new GPL driver for those GPUs... AGPLv3, for Linux only and I'll try to make one module per GPU flavors with a source based framework.
Okay, I got the things right in order to author SVG diagrams cleanly. The idea is to use the user unit everywhere then to scale to a real size thought the top level width/height properties. The size of the canvas is defined with the viewBox attribute on the root svg xml element. The other little trick is about the borders. Indeed most of the time, with diagrams reaching the border of the viewBox, since the border is drawn on both sides of an edge, the outer part of the border gets out of the viewBox. The trick is the resize the viewBox accordingly and translate the lot of half the size of the border thickness. It's neat because using real units does not feel right. For instance, basic paths are defined using the user unit, even if real units seems to be supported by many SVG renderer.
Got some torrents for an online game... they are stuck. Plus, it happened for other torrents as well. My download rate average is significantly dropping. Something is wrong.
Had a bit of discussion on a IPv6 (Internet Protocol version 6) related mailing list. And it seems that we will have to choose between RSVP and diffserv for the QoS (Quality Of Serice) IP protocol for ISPs clients. The trick is that RSVP is a fine grained QoS definition protocol that can only handle internet borders regarding its scalabily. Diffserv is coarsed grained, but it scales well better... and it seems quite more "internet spirit". Namely an ISP client should be regarded as a ISP itself, like two networks connecting. Really it seems just a matter of setting the IP traffic class field to the proper diffserv normalized value... need to recompile my Linux network stack in order to become diffserv aware. Hope my futur FTTH (Fiber To The Home) connection will be diffserv aware and my ISP's IPv6 will be native on its backbone.
C language and most of the libs are LGPL
Once you know how to use them... well...
My SSH sessions are barely usable when my internet connection is loaded... Stop loading my connection? Nope, that's lame and won't help when my neighbors will load the upstream link with their FTTH (Fiber To The Home) connection, or with many people surfing on video web sites on my currently connected wireless bus. One clean answer: need traffic class support. We have the proper fields in the IPv6 header, now we need a good IP based protocol with Link Level collaboration in order to publish to the ISP (Internet Service Provider) equipement traffic classes of IP streams. This is not filtering, it's IP(low) level priority management and bandwidth limitation on client initiative. If you think it's deep packet inspection with limitations based on ISP initiatives, think twice my Big Brother.
In order to write my nvidia programming manual, I decided to use SVG for illustration. Well... those specifications do not deal with graphics :)! It would be more appropriate to use "Full Fledge Graphical Document" instead.
In War Against Bloat, there is the SQL engine threat. Indeed, many coders do not realize the software cost of an SQL engine, it's just massive. Let's take for instance mysql... have a look at the code: C++ brainfuckage!!! EEEERK! An insane amount of brain fucked C++ code lines!!! And believe me or not, but if you want to create a storage plugins in order to plug your disk data format on their SQL engine, you have to write code using C++, there is even the use of a C++ template in the plugin interface! Yes you read well... and that sucks big. Some of you will shout that I should use postgreSQL. Well it's C code, still very complex and it's a BSD license, then if I can avoid it I will. Moreover, there is no storage plugin interface that I would have needed... so that's a dead end. Finally, I'm back to serialize my memory structures on disk since nowadays computers have much more memory (yes, 32GB DIMMS are on their way thanks to 50nm process). Well, it does not work with big indexes and huge amount of data. And I found out about tokyocabinet, a DBM style database which is damn sexy. And that does the trick: once computer memory is not enough-->tokyocabinet, there is even transaction support! Of course, it's lean beautifull C code under a LGPL license... And the final blow, there is a network access library and a text indexer optimized for tokyocabinet. BSD integrists and bloat lovers can just go to hell.
FTTH will be a crash test for many ISPs. Indeed, the available upstream bandwidth will be so much higher compared to xDSL that ISP backbones will suffer a lot. In France, FTTH deployment is taking ages, to such an extreme extend that in some communities suspicion is on the rise. Rumors are even amplified with all the filtering (under the cover of digital freedom killing systems) which becomes really ridiculous. Rumors tend to that: The backbones of many ISPs won't handle the load with FTTH mass deployement, they are forging a set of a good excuses to cut down the bandwidth. And of course, it will target p2p. People reading this blog should start to download legal content (we have plenty) or content that probably won't find their way in your country, and share it in order to maximize the use of their bandwidth (the idea is to delete files on a regular basis in order to maximize bandwidth use). A good ISP would increase properly the size of its backbone in order to handle the load, not forging good excuses to justify the freedom killing means to cut down the bandwidth. Well, an other interpretation of this issue would be: western countries are heading straight towards a digital totalitarian system for the sake of a few. That can only end badly.
Damn! I got some PDF files and wanted to visualize them in real size on my screen. Well... better know than the zoom factor of 100% is hardcoded to 72 DPI. In theory, an xwindow screen can be an assembly of several displays, with different DPI. That would mean that a properly coded xwindow application must be able to draw parts of itself based on the target display. I haven't check but I hope xwindow is able to do so. I think it deals with the xdamage extension, but I may be quite wrong.
To get used to write SVG file, I finally decided myself to start with inkscape. Well... I really do not like the code since it's C++ with garbage collection, but it's GPL without the constraint to surrender your copyrights to a company, then a way lesser evil. From there, I wanted to draw SVG using mm units and be able to see the real size on my screen.... Ouch! Inkscape has an hardcoded DPI of 90 for screen display. Namely it does not care about the screen advertised screen DPI... BAD! After talking to one of the inkscape hackers in the XMPP/jabber conference, the problem is well known and not addressed because they are much more important problems to solve first. Of course I got the now classical "provide patch!"... well, no and no again, and I would have done it, but C++/garbage collection for such a program when you look at gnumeric and abiword code? Well, inkscape is very nice, but the code... adding the requirement of a C++ compiler PLUS weakly surrendering memory management to a garbage collector, sorry that's way above my tolerance threshold... and I don't have the time to recode it using C (here I'm being a smart ass).
Well, tought to maintain properly a blog. I have so many other things to do at higher priority. Well, on the GPU reverse engineering project, since I do consider the BSD license as a threat, the best thing to do is to write a kind of programming manual in order to be able to write very quickly a GPL driver for Linux. Then the focus will be writing code in order to reverse engineer specific hardware functions, and certainly not in order to achieve a functional driver (since GPL only code will be tossed away from the project).
IPv6-->no more NAT (Network Address Translation). Means any terminal can reasonably be public on the net. IPv6 mobility means your mobile phone can become a mere terminal on the net. The main issues with mobility are expensive signaling, home network management, latency on highly loaded WiMAX network during hand over. Thanks to jingle, which seems to be a quite simple protocol compared to SIP (Session Initiation Protocol), XMPP will be able to negotiate a RTP stream for video/voice call. They are client program issues:in order to have a decent latency for voice and to make the emergency calls going through, priority traffic and QoS will have to be set up. IPv6 label? ethernet VLAN (Virtual Local Area Network)? Well, the client will have to deal with those settings. Question, how those settings will be known to the client program... hum probably new IPv6 advertisements messages are needed.
Why QoS since priority traffic should be enough? Well, in order to avoid smart people to make their P2P (Peer to Peer) traffic high priority on the net, let be this priority traffic just big enough to let a compressed voice stream go through... namely... almost nothing... Careful on the QoS algo in order to avoid burst abuse by clever people (heard that QoS over WiMAX had troubles).
LTE (Long Term Evolution) is the next telecom mobile network after the 3G network. Indeed, it will probably be competition for WiMAX. But, like WiMAX, it will be full IP (Internet Protocol). That makes the use of ethernet VLAN quite inappropriate for QoS and priority traffic, except if LTE is ethernet based too. Indeed, client terminals will have to be able to auto-configure themselves for voice (low latency, low bandwidth), and if link layers are to be different, IP will be the lowest common layer, so it would be IPv6 labels. In order to make the difference between voice for emergency traffic and common voice traffic, it would have to be based on the destination IP addresses.
Presuming we have N IP(TCP/UDP) phones on a house lan which is on the net with IPv6. All those IP(TCP/UDP) phones want to make a call: they are doing their signaling to established a RTP flow to carry the voice stream. A flow is usually a Nuplet made of (label,flow id,source address,source port,destination address,destination port). Some documents I read on the net (one from cisco 2005) seems to say that less than the latter Nuplet would be necessary to track (just what is needed to minimize flow id collision). I presume they got from the proper equipment proper IPv6 labels which define high priority - very low bandwidth channels. That equipment would be similar to the announce done for the DNS service, or another anycast reachable equipment. How the IAP terminal equipment will manage flow count and lifetime? The algorithm has to be smart enough to avoid downgrading already high priority flows on high load (meaning sustained max count for those flows). All that means a SLA (Service Level Agreement) between the customer and its IAP and between IAPs themselves for traffic class transitivity.
Ok... all the trafic classes stuff is named intserv. Seems that, the software will have to make a request on the link using RSVP with the RAPI, then the IAP will or won't honnor the QoS requirements of the flow. Well, have to read all the documentation to check out if it solves that big issue.
That means proprietary rich web clients which will destroy the open source philosophy of the web. I expect the mozilla project to send to hell any poisonous gift that would look like a virtual machine.
Well... the mozilla foundation surrendered: the evil abobe (flash) is destroying spidermonkey to put a bytecode based virtual machine coded in C++. Spidermonkey is currently a clean C coded webscript interpreter. And additionnally they are taking over some parts of the mozilla project. Once again, I was right and there is only one cure:minimalistic/simple code with the father of all languages, C, and no more.
I bought a wattmeter and plugged it on my brand new system for nvidia chips reverse engineering:
That makes my system burning 50W when idle. That's insane.
news:
I replaced my CRT monitor with two LCDs (for video mode setting development). Both burn 12W idled. Saved 20W.
Most of the time, when reporting a bug on a mainstream GNU/Linux distro, using the standard search in the web interface for bug reports, you cannot find your bug and then file a new one... wrong... Indeed, 99% of the time that bug was already filed by someone else and dealed with. But the standard search looks for opened bugs, and a dealed bug is rather often closed. So for geeks who update their box often and get many bugs, better use the advanced search feature of the distro web interface for bug reports. That in order to select bugs of any state (closed, opened, etc...) for their search.
Dual licensing is dangerous for open source software. Indeed, more and more critical pieces of software gets dual licensed. Namely, you have the community edition where you have sources and a FFII compliant license, and you have binaries on a proprietary license. And of course, mysterious forces make the binaries faster, more featured and properly supported. Patches may be applied on binaries significantly before it is made available for the GPL community edition, or even worse, kept only for the proprietary version, screwing big time the GPL spirit. Let's get deeper in the nightmare, for instance with lzo. It is clearly stated that the GPL version of the software is significantly downgraded compared to the proprietary version. Moreover those dual licensed pieces of software can be bought since to be compatible with a proprietary license, one company is behind (it may be a collective of companies, usually there is still an head). They can be bought in order to be sabotaged if any big corporation judges it needs it. It happens more and more in the GPL world (lzo and 7-zip compression software, mysql...), but it is the standard in the BSD world... One more reason to avoid as much as possible the latter world and one more to be cautious with time bomb GPL software.
I asked myself what would happen if you contribute to those pieces of software and do not want to surrender your rights in order to allow the mother company to provide a proprietary version. Because, the spirit of the GPL is the code you contribute stays GPL. Actually I prefere not to think about it...
Another way is the bloat. The mother company, a big one, creates a piece of software huge and complex and brut forces it on the market. Only itself will have the inertia to reasonnably maintain it, trapping any developer or user (java and mono). And, of course, the bloat can be GPL and does not need a proprietary version.
The reality is more subtile than those extreme cases, but it's like a recipe: you add a bit of that, more of this but not too much, etc. It's more and more important that the community of freedom software realises that critical and system software should be secured from those dangerous paths. How to do it? Easy: minimal (C/Linux/filesystem/network) and GPL only.
Look at the mozilla fondation (may need an audit in order to locate where is going the money). Binaries are straight from the same source tree, and if you want to give money, you give it to that fondation which dispatches it to development and communication. Well nothing can be perfect: most of their code is C++.
It's very funny. Just a few days after the famous Al Capone company got some shares of the greatly useless facebook, I got a combo invitation from three of my girlfriends. So I'm going to do like as usual, since I'm like THE counselor on anything about computers for my friends: keep away of this site since it was corrupted with dirty money. I don't need to know when facebook will announce the switch on better (LOL!) technologies (that will be based on technologies from that company), since I know that will happen. Whatever, the initiative from Google with its Open Social federation seems way more elegant and better... as usual.
Well, I got some info about facebook from one of my work colleague. Facebook is a kind of web second life (if you know how to code). I will never register to this site since dirty money went through and its future will probably end in hell, then I'll take my colleague word for the following: if you know your way around using webscript you can develop little funny applications. But is the cost of being jailed into one site (which will turn bad) is justified with the ability to code little web apps only? Does the openness of the Google solution, orkut, not worth it because it's not possible to code little web apps since it's a cluster of web sites with different technologies?
There is a new update: orkut web site does contain that horrible page extension which tells us that Google is using its worst enemy technology! I don't know what they are doing at Google but that's very bad news. It's like Google calendar which does not support the calDAV protocol... All that is smelly.
BLOOOOOOOOOOOOOOOOOOOOOOODY HEEEEEEEEEEEEEEEEELL!
I just do not have brain time for this. I want to contribute the Linux GPL code for mode settings. I read all the documentation. I'm able to navigate through the code. I even wrote some lines of code. And yet, nothing working since I do not have fu***** brain time. No brain time between work and social/couple life. Here and french here, you can find articles quite accurate about the graphic stack revolution happening in the free world. Now, if I want to be a little useful, I should write mode setting code for the new DRM model and the NV50 architecture (somewhat different from the NV40). Now, I need a devel computer with some NV50 cards. What to do? Reduce my sleep time to a couple of hours and pray I'm able to code something that works (and not end in an hospital room)?
At work, since many of my colleagues do perl, I coded some perl bindings for some of my C libraries. Then, that was the right time to dive a little bit more in this high level language since coding bindings requires a minimal understanding of its internals. There is extensive documentation, not that accurate, but without it, it would take many more centuries to figure out your way around its code... but hey, a bloat stays a bloat.
To proceed, the idea is to focus on memory structures. Indeed, coding proper C is coding memory. So I focused on its very core memory structures and how it is dealt with. It seems that perl was developed using the monkey patching way. Monkey patching means adding a new functionality with minimized code modification... even if that means crapping the code.
Perl started with the scalar, a structure able to hold several number types and/or a string; then perl wanted to support arrays and hashes... but arghh, we have already all the plumbing for our scalar value management (have a look at sv.h in perl source tree)... be lazy and add a new scalar type to support those new structures... but hey! The scalar value structure now can hold perl scalar/array/hash which have, from a perl point of view, nothing in common. Then careful, in its code perl scalar structures deals with all perl types including arrays and hashes (PVAV and PVHV types for the C scalar value)... messy.
The C scalar value became the head of a perl variable (yeayeeh, monkey acrobatics!), which you must link to a body (usually their structure name starts with an 'x'). This body will be a perl scalar or an array or a hash and so on... the C body for the C scalar value to hold perl arrays is in av.h and for hashes in hv.h.
Okay, you got the feel of it? Well, this structure can hold several encodings for the same data (ex: a number and its string encoding). To deal with this you have many flags namely (private, public flags etc...), well... you are supposed to only rely on the state described by those flags (hold you breath...). But here comes packages support... then let's add a new body-->piece of code. You said object oriented? Let's force some magic (yes, it is really called like that) into our C scalar structure... it should fit with our package monkey acrobatics. Strange, the state chart of this structure is now a giant hairy monster.
Not the least, if you look at a hash key, well we have a 32 bits for the hash itself, signed 32 bits for the length of the key, and a then the key itself... ok, if you have an utf-8 key, you just need to set the proper flag in the flags field... err... where is the flag field? None... I just want 8 bits... I don't want to scramble things up, I don't want to screw the nice memory alignment of the key with a 8 bits value, let's monkey patch my byte of flags at the end of the key value!
Ok that's just a taste of perl internals... you can guess that I simplified a lot. The damage is orders of magnitude higher. To scramble things even more, in order to deal with such a mess there are hundreds of macros! They mix easily the C scalar value as sv with the real perl scalar value sv... So perl code is not anymore C code, it is a whole new language defined with CPP. To try to solve that issue, I tried myself on the output of CPP... My God! You can see all the decades of tricks to make it work on many C compilers.
Okay, let's conclude: from my point of view, perl is raw brain fuckage, but somehow you can understand quite easily how it works, but hacking on it to make something actually work without breaking anything... would lead to insanity. Perl5 code is dead. The idea is to really look at perl6 with the virtual machine parrot. Hopefully we will have a cleaner way to make XS modules.
Today, I got a fight with gnash, the flash GNU project... Oh My God! Total C++ object-orientish master brainfuckage! Hardly working on my systems (no remote movies etc...). I went back to my place disgusted where phoronix brought back to my memories the swfdec free flash project from freedesktop... very few dependencies, clean and small C code with a LGPL license, and working with all the trendy stuff I tested it on!
Bloody Hell! I don't know if I have to hate gnash coders or to thank them: indeed, it is a scholar example of 2 similar projects with the same goal, one master brainfuckage and a lovely one. Perfect for illustration.
Indeed, you can wipe out those input sections from your xorg.conf and write a policy file for the HAL. My /etc/hal/fdi/policy/x11-input.fdi is:
The bad news is that the hotplug code is delayed till xorg server 1.5 or 1.6. But... Hey! At the end, full hotplug configuration through HAL.
... as in Clearsilver and Citadel. These are a web template system and a groupware server entirely written using C and not vendor locked mid-level languages or high-level bloats. From now, they will be my choice each time I have to build a system which requires such functionality... Since they are written with C they cay interoperate with almost any high level languages on earth (perl, python, ruby, lua...). I have never used them, hopefully a first time will arrive soon enough to make my teeth on them. Well, well, well, I'm not that stubborn: I will be pleased to test a new language, if it's able to produce a decent kernel :)... I may be stuck with C for a long time and those who are thinking C++, think first of how much control you have on the memory layout of objects or shared object ABI...
Great, I finally used Clearsilver. Easy code to get into, template syntax is fairly enough for what I had to do. My weaponry for web templating is now complete.
There was shown strong lobbying to disable the adoption of ogg/theora/vorbis as the web video/audio standard for the W3C. Now, the sabotage is crystal clear. How to behave? What to do against such sabotage? How to fight?
I had a little email exchange with one of the guys in charge of html5 draft. Well, he's perfectly aware that it is quite a non-sens to update html nowadays without minimal media codecs and containers specification. Since, html5 is an effort from IT corporations, and since now it's in the hands of the W3C we may have a chance. One thing you can be sure of:the web now needs video/audio, the codecs that will be standardized properly by the W3C will storm the web.
How would they be financed by The Borg collective? Ads in movies?
The only way to keep their current business model would be to sabotage massively Internet Freedom. That's a dangerous idea since digital freedom is more and more important in people life every new day. I cannot believe they are that ignorant and refusing that hard to face reality: it's a revolution on a bigger scale than the printing revolution one. Some businesses are going to die or significantly change etc... But they show a quite stubborn attitude which favors all the time proprietary close and coercive software of some vendors...
The very serious web sites related to main stream hardware are worried to know if the Intel X38 will support NVIDIA SLI. Wrong, and wrong again. Till you have a motherboard with 2 PCIe 16x slots properly positioned (to accommodate the huge graphical adapters) and a chipset able to configure 8x PCIe lanes for each of those slots, you are fine with NVIDIA SLI. But NVIDIA does not want Intel chipsets to support SLI since they do manufacture their own motherboard chipsets (nForce series). Then, knowing we live in a beautiful world, NVIDIA is disabling SLI support in its driver for Intel chipsets... err... for non certified chipsets. Then, a properly patched driver will enabled SLI on Intel chipset... till NVIDIA adds hardware to forbid this in its next revision of SLI OR they get along with Intel.
On recent GNU/Linux system, the apcid (Advanced Power and Configuration Interface Daemon) is obsolete because kernel acpi specific event file nodes are gone. Namely, functionality provided by acpi is now abstracted by standard Linux interfaces. Namely, on my laptop, the power button is handled by the acpi now abstracted by the Linux input interface. The user level piece of software able to deal with Linux input interface is HAL. HAL has also a generic way to power off the computer through a method of one of its exposed objects on the system dbus (Desktop Bus). The HAL service is identified uniquely on the system dbus with org.freedesktop.Hal bus name. The HAL object describing the computer can be reached with /org/freedesktop/Hal/devices/computer path on the service bus name, and to power off the computer you must call the Shutdown method on the org.freedesktop.Hal.Device.SystemPowerManagement interface implemented by the latter object reachable with the latter path. To sum up: you call the Shutdown method on the org.freedesktop.Hal.Device.SystemPowerManagement interface of the /org/freedesktop/Hal/devices/computer object on the org.freedesktop.Hal service.
But how to handle the power button press event? That's the role of ivman with the collaboration of the HAL. Indeed, ivman must be configured to listen to the HAL power button press event on the system dbus and, when detected, call the previous Shutdown method. Some of you will ask about policy. How to tell a user has the right to perform, let's say a reboot, on a shared workstation? Well, in theory, that will be the task of the policy kit. But, configuring a full policy is not somebody will do everyday and can become bloated and brain damaged quickly (see the Al Capone company OS for reference), that's why we should put a warning on this and not redo the mistakes of others. HAL emits a condition when the power button is pressed, this is basically a dbus signal. Ivman will catch it and perform the call: configure /etc/ivman/IvmConfigConditions.xml with:
Then you will be fine, namely you will have a power button that will work again. Of course, you can also make your system hibernate when the sleep button is pressed, or the lid is closed. You can handle thermal conditions and batteries condition the same way etc etc... You will find hal interested scripts in /usr/lib/hal/scripts.
Be careful, ivman is usually pre-configured to perform automounting of hotplug drives. Then, if you use a modern desktop, it may interfere with its automount system. You have to disable automount features from ivman configuration files if you have such desktop or another automount system.
If you don't understand this document... try harder or drop coding please...
Arg: Indeed, the framework that is going to be chosen for opengl shader compilation in mesa will be something on a BSD license used in macapple opengl stack. I suspect not a license issue since the best choice would have been gcc because it is the most advanced compiler framework. What would be required is a C interface to the compiler tool-chain only, not a full blown plug-in architecture like some are scared of (fear of proprietary or third party open source bloated plug-ins). The pseudo C language for opengl shaders would need to be compiled and linked using the opengl libs, putting the results in a buffer that would be DMAed (Direct Memory Access) to the GPU (Graphics Processing Engine). I hope the gcc guys will address that issue before the other framework gets too glued to mesa. I got a quick look, seems mesa is using a clean interface, gcc would be able to get on the boat, if it's able to do better shader optimizations than the other.
This is open source vendor locking. You need the previous closed source SDK (Software Development Kit), plus some additional closed source binaries in order to compile the open source edition of the SDK. The code is C++ and about 80 MB... 80MB of compressed code with a bucket load of redundant code from already existing beautiful light C libraries. The code is, from my point of view, totally brain fucked. How the hell do you want to maintain this? You must have the resources of a huge company or a community of the scale of the Linux one (well, in this case the code is mostly clean C code). This is a scholar example that code written with an object-oriented language can be screwed by orders of magnitude easier than code written with an procedural language. At least there is JNI (Java Native Interface) which allows,in theory, to call C entry points in a shared object from a JVM (Java Virtual Machine) and to call java code from a C program.
Java is everywhere now because it lowers the level of entry for developers. But modern dynamic high level languages, which for most are lesser bloat and more advanced than java itself, lower the level of entry even more. Conclusion, from this perspective, java and its siblings are quite obsolete. I would add that java and its siblings are statically compiled... which makes them even more obsolete compared to modern high level languages. Java has the advantage to be quite more mature than its siblings (guess what I'm mainly referring to...). Good to learn programming, but must be dropped as soon as real stuff kicks in.
I'm french and I have utf-8 encoded man pages (manual pages) since a long time ago and I have never been able to read them properly since that time (understand "never during my entire life"...). So, finally and irritated, I decided to get some information about the issue. Well, well, well, before that you should know that the man processor, groff, is a full blown document processor (think XML (eXtended Markup Language),XSLT (eXtensible Stylesheet Language Transformation) and docbook). Yes, man uses groff to create properly formatted man pages for the output you chose. That can be a terminal, a postscript viewer, x11 and others. As far as I'm concerned, man pages are read on a terminal (an utf-8 terminal of course) and in web browsers. Here goes the sad thing that will be no more very soon (that's theory): groff, in its current stable version, does not support different input encodings for man pages. Yes, you read well and we are year 2007. The good news is that extensions providing support for input variable encoding is in CVS (arg... hope they will migrate to GIT one day...).
... sadly groff is way overkill to generate proper terminal output or web output. We should have a nice simple frozen dialect for man pages, and minimal and light specialized processors for terminal and web outputs. Let's say I will code one when I have time (cough!), irony again! They are 2 man pages dialects:BSD and standard. Most of the man pages on a GNU/Linux system uses the standard dialect. It is documented there $LANG=C man 7 man.
Linus said "I give code, you give code". A lot of coders values the fairness of the GPL license... and I'm one of them. If coders favored the BSD license, that would have helped a lot to make one the *BSD kernels the mainstream community kernel. But Linux is the One, and I'm glad and hope it will last long.
She must master the whole software stack: from the kernel to her code and the compiler tool-chain. She is responsible of all components she used to produce her systems. The proprietary way where many components are out of control because closed and coders caring really only for their code is obsolete and weak. I know it's hard, I'm unable to do it, but that's the goal, the target for any serious professional coder around the glob, and that should be taught at uni and school. Big chunks are:
Then, any additional software component in the software stack must be considered as a huge cost. Highly complex bloats are deadly threats beyond the fact they lead to vendor lock-in most of the time (open source or not). How many lines of C code did you add for that high level language? What is the complexity factor of this code? Because 1000 lines of highly complex C code does not have the same cost that 1000 lines of simple C code. Do not be seduced by the easiness of the dark side of the force, payback always comes one day, if it's not for you it will be for a fellow member of our community. And, careful, I'm far from being alone thinking like that.
Always start with the minimal self-describing data structures (closure?)... then complexify them only if it is required: remember the UNIX philosophy (or near 40 years of programming experience), optimize only if required. Computers love sequential because memory prefetch is then more efficient. When coding using C, you code memory. There is a suite of amazing articles from Ulrich Drepper on Linux Weekly News, you must read them (here): writing efficient programs is going to be harder on near future computer architectures.
The basic structure would be an array with a terminating element. Realloc is your friend and try to (re)allocate big chunks of mem if you can weight the order of their size. To avoid reducing all the time the array when erasing an element, if you can put an "empty" placeholder, do it. Then, you will reduce the array later, namely you will remove all "empty" placeholders in a garbage collecting phase. For binary strings where there is no terminating element, track its size with a variable. If you need to serialize on disk tree like structures, use indexes to build your tree which would be arrays of integers with a terminating value and an empty placeholder value.
Do not forget that the kernel is a wonderful VM (Virtual Machine). It cleans everything at process destruction. Then short lived processes do not need ultra clean memory management: for instance CGI (Common Gateway Interface) programs. Do not free global data at process exit, except if you want a clean valgrind output.
I went to the 2600 meeting and heard that The Borg OS is not able to deal with concurrent writes on one file. Astonishing. But what's even more astonishing is that there are still people talking about it. The only interesting subject about this proprietary toxic OS is how quickly it can be phased out of existence.
One of the most famous people from my Parisian LUG (Linux User Group) got himself a Fonera box during the latest Ubuntu install party at La cité des sciences et de l'industrie, and made some noise (irony inside) on the LUG mailing list about configuration issues. Basically, with this router box, you share your Internet bandwidth with all other fonera owners. There are two physically separated wifi networks. One for your personal use, one for the sharing(God! I'm sooooo nice) network. Beyond the fact that non fonera owners have to pay to access the world-wide Fonera wireless network, you stay perfectly authenticated on those network: War Against Terrorism is Watching YouTM... For those who really want to share properly their bandwidth, and avoid configuration issues: buy a wifi router with quality of service support (namely any good linux router), and leave it open without encryption and avoid web site with flash abuse.