That's why I went to the university today. Fascinating... After working as
system administrator for several years I must visit a university course showing
me, how a computer works. They started with the very basics (That's a CPU...
that's a mother board...) I think we spend the first four weeks to
"learn" that if you buy a mother board, you must take care that the
CPU works with it.
So far we covered hard discs and some peripheries, too. Sigh.
If that course wouldn't have compulsory attendance... Well. But at least I
can amuse myself about the lecturer. Often he muddles up technical term --
which is quite a achievement when reading the text on the slides. Maybe he's a
bit dyslexic, would explain some of his... uhm... strangenesses.
But back to topic: Today the topic of the course was Operating System
Installation
. And to my pleasure, he did not only install an operating
system made by a company in Redmond, but he wanted to install a Linux System,
too. Well... First he tried to install the new Vista he just got instead of
the older Windows Version he should knew better. Bad choice... Often new
introduces features seemed to confuse him. After he finished with that, he
installed an opensuse system. And sometimes he tried to explain a bit about
Unix philosophy. Another bad idea. Those of us, who are familiar with that
stuff could see, that didn't know what he was talking about, and those of us
who are not familiar with Unix/Linux philosophy didn't learned it from him.
For example he choose not to use grub or any other Linux Boot loader
but the one shipped with Windows, which means he needs to tell Linux not to
install the mbr, to boot later from DVD, to extract the first bytes of the
partition via dd, to copy it to a floppy, to reboot to windows and to add it
with some commands in the dosbox thingy
. When I asked him, why he
didn't used the boot loader from Linux, he told me, that in former lilo
times, in was quite easy to make the system unbootable
. And when I then
informed him, that that's the reason, grub has been invented, he said, we use
the windows boot loader, because he wants to do so.
Oh, and as part of a test, we must install those two system our self.
Including the brain dead stuff he does. Sigh.
Some times courses, which should be quite easy for you, can turn out to be
really depressing...
I'm really looking forward for part two of the system
administration
course, which will try to teach me windows administration
and networking. The Unix Course has been cancelled. Don't know why.
Ruby's thread more "functional" than OCaml's
I'm relaxing some of mine
initial bad impressions on
Ruby. This is mainly due to the fact that the
Ruby book I
ordered on
Amazon finally
arrived (after a lost shipment, the first of my whole customer
story with Amazon, happily they refunded me completely).
In the book I managed to find a rigorous (though not formal as I
would have liked) description of Ruby's semantics and even some
snippets of the grammar of the language (
Rant: how the
heck is possible that a modern language like Ruby lacks a complete
description of its grammar????). Anyhow, now I'm feeling more
comfortable with the language and I'm starting to put in the right
setting some of what I believed to be its rough edges.
Today, playing with Ruby's threads, I discovered a function in
Ruby's
Thread API that I can't help noticing is "more functional" than
corresponding features in the
Thread
API of my beloved
OCaml.
Using
Thread#value
indeed the value returned by the last statement executed in a given
thread can be retrieved (note that in Ruby every statement returns
a value: yet another functional pearl). It's like a
Thread#join
on steroids.
In OCaml the only way (that comes into my mind) to do the same
is establishing a (typed) channel among the thread creator and the
created thread, sending a return value from the thread, and having
the creator block on the matching receive. Or (please don't) ...
you can use a global variable ...
Neat Ruby threads.
To balance this, according to my first read of Ruby's threading
capability, it's my impression that not only at most one thread can
execute Ruby code at a time (limitation shared by OCaml, due to the
non-distributed nature of mark and sweep garbage collectors), but
also a thread blocked on a syscall will block all other threads to
run.
Dumb Ruby threads (but I still hope I'm wrong ...)
Python scoping
How do you create a list of similar functions in Python?
As a simple example, let's say we want to create an array of 10 elements like
this:
a[0] = lambda x: x
a[1] = lambda x: x+1
a[2] = lambda x: x+2
...
a[9] = lambda x: x+9
Simple:
>>> a = []
>>> for i in range(0,10): a.append(lambda x: x+i)
...
...but wrong:
>>> a[0](1)
10
What happened here? In Python, that
lambda x: x+i uses the value that
i
will have when the function is
invoked.
This is the trick to get it right:
>>> a = []
>>> for i in range(0,10): a.append(lambda x, i=i: x + i)
...
>>> a[0](1)
1
What happens here is explained in the section "A Jedi Mind Trick" of the
Instant Python article:
i=i
assigns as the default value of the parameter
i the current value of
i.
Strangely enough the same article has "A Note About Python 2.1 and Nested
Scopes" which seems to imply that from Python 2.2 the scoping has changed to
"work as it should". I don't understand: the examples above are run on Python
2.4.4.
Googling for keywords related to python closure scoping only yields various
sorts of complicated PEPs and an even uglier
list
trick:
a lot of people might not know about the trick of using a list to box
variables within a closure.
Now I know about the trick, but I wish I didn't need to know :-(
Just a quick reminder: if you were planning on going to the
X.Org
Developers' Conference in the Bay Area, from the 7th-9th of February,
then please make sure you've registered on the page. If you weren't
planning to come and you work on X or related fields of endeavour (toolkits,
desktops, maybe you're an IHV), then you should consider coming along as
well. There'll be a mix of scheduled talks, random freestyle hacking,
corridor schmoozing, dinners, after-dinner fun, and a whole world more.
If you'd like to come but your pockets don't go quite that deep, please
consider
applying
for sponsorship. The Foundation is willing to pay for travel and
accommodation to developers who couldn't otherwise attend.
Hope to see you in sunny(ish) California!
For etch, we will have apt security in place, so we can be sure that the stuff comes from the correct archive. But it is not possible to disable that checks only for one source, just for anything.
Buildds uses at least one mirror: incoming.debian.org aka ftp-master.debian.org. There are two queues, the accepted autobuild queue and the main archive. The accepted autobuild queue is not signed at all, it does not provide a Release file. The archive needs some time to generate the Packages files each dinstall run and have broken sigs during this time.
This means: buildds can't use APT security at all. And no, there is no other mechanism to ensure data integrity.
First to answer why we need
TDebs:
localepurge: Disk space freed in /usr/share/locale: 256828K
localepurge: Disk space freed in /usr/share/man: 4496K
Total disk space freed by localepurge: 261324K
Second, I will write my tdebs implementation proposal after posting this (although Aigars made a really good sythesis of the discutions we had in Extremadura and there is almost no room for improvement :-). I have posponed long enough.
So, like everybody else in the world, I was intrigued by the announcement of the
iPhone. But like most
Open Source folks, I was unhappy with the OS and the general closed format of the dang thing. What options are there for people who believe in Freedom but still want a cool phone?
I currently own a
Treo 650, which is fine, and which runs the venerable Palm OS. However, the once-thriving Palm Open Source community has pretty much dried up, leaving me without much in the way of interesting apps for my phone device.
Thanks to
Mike Linksvayer's notes on the subject, I got a link to the
OpenMoKo project -- an effort to make a standard,
Linux-based phone OS that uses
ipkg for application installation and update. The first phone supporting the platform will be the FIC Neo1973, which looks pretty awesome and fairly similar to the iPhone (see
this review from
Linux Devices for some photos).
OpenMoKo isn't the only game in town.
TrollTech has a Linux-based
Greenphone running their funky
Qtopia platform, although it apparently doesn't work with their
Qtopia Open Source version. And Nokia has this weird
Maemo platform, but it only seems to run on their Internet tablet thingies.
Mike gave a good link to
an article about Open phones on PC Magazine. But I'm going to be looking out for availability of the OpenMoKo-enabled phone. I guess I'll have to switch phone providers --
Telus, my provider, only has CDMA service, and the FIC phone uses GSM. So, I dunno. But it'd be cool to have a mobile device that was fun and interesting and that I could believe in and want to hack on.
tags:
openmoko iphone greenphone maemo
What Chris refuses to blog about
So, talking to Chris last night at the yulblog First Wednesday, I found out he wants to quit blogging. "I don't really have anything I care about enough to blog," he said. "The only thing that's piqued my interest lately was the execution of Saddam Hussein. I just don't want to blog about the iPhone."
I told him I thought it'd be a good idea to make a blog just listing the things he refuses to blog about. He wouldn't commit to the idea, so I guess now I've taken over that job. In other words: Chris won't blog about the iPhone.
tags: iphone blogging chris
Yesterday I went to activate phone service out at the farm. It got me to thinking a bit about how things change, and how they stay the same, too.
Before I go on, I'll have to say that every one of my history books is in storage, so if I get some details wrong, it's because I'm not remembering correctly.
Anyhow, phone service came to our community via an unusual route about 100 years ago. It wasn't Bell/AT&T or some other company that brought it there, as it was most places. I'm sure they figured that a small, scattered rural community would cost too much to support. So the community organized, built, and supported the phone system themselves.
Even today, roads around here can be impassible after a good rain. I'm sure that, in the early 1900s, before heavy road-maintaining machinery, things were worse -- and, of course, transportation was a lot slower then anyway. There were real problems: getting the word out about funerals, being able to summon a doctor when necessary, or letting people know that church was cancelled because of too much snow.
People in the community saw a phone system as a real need. So did the churches, which have left a legacy that is still reflected in phone company territories today.
Once phone service arrived, it was used for all the things that people expected, of course. But it also proved to be an important part of the social fabric of the community. Since party lines were the norm, it was possible to announce things to every listening subscriber pretty quickly. Older people remember announcements of fresh fruit arriving at the grocery store, funerals, or other news of the day.
To place a call, you would pick up your phone and turn your crank. That caused a bell to ring at the telephone office, which everyone called "Central." The operator would connect to your line and ask whom you wanted to talk to. The operator would then send the distinctive ring for your party down their party line, and patch -- manually -- your call through to them. And, if he was busy, the operator wouldn't listen in on your conversation -- but others on the party line very well might.
Central's hours were published. If you were making a call in the middle of the night, you were going to wake up someone at Central to do it -- plus everyone on the entire party line. So calls after hours were rare.
Fortunately, while some of the old Central operators were still around, some people in the community wrote down some of their stories.
There were some people in the community that were notorious for eavesdropping on other people's conversations. Two brothers one time figured that they knew somebody was listening to their conversations, so they devised a code. One called the other, and said, "I'll be going to McPherson in the morning for band practice." That meant something along the lines of going to town to buy groceries.
A few days later, their prime suspect came up to him and said, "What on earth are you going to band practice for? I didn't know you knew how to play an instrument!" Apparently she realized she was had when he burst out laughing uncontrollably.
The Central operators learned to know the habits of telephone users. Sometimes they would connect calls without even bothering to ask who people wanted to talk to -- and seemed to always get it right.
The phone system supported itself for about 50 years. But as the rest of the world moved on provide direct dialing, this proved a controversial subject in the community. People liked having their operators. The people that worked at Central were everybody's friend. They were people that were there, 24 hours a day, to assist with any emergency. They would gather volunteer firefighters to help fight a fire, or be able to spread community news quickly. This wouldn't be available with the newer phone systems. How would the community be informed of events quickly now? Who would just happen to know whose house the doctor was at when he was urgently needed?
The change was resisted for some years, but eventually the finances of the telephone cooperative turned out to be in deep trouble. Operators grew to be much more expensive than automation, and in the late 1960s, the telephone cooperative was no more -- sold to a phone company from a small town more than twice our size, and a for-profit company at that! Central no longer existed. I remember reading about this event -- it seems people were sad about that for quite some time. They felt that they had really lost an important part of the community when Central went away. Some machine locked in a cabinet doesn't care for people the way Central did. Even today, the older people in the community sound a little sad when they remember telephone modernization, and get the wistful look of somebody that has just remembered something that they miss.
The phone company that bought the system wasn't an AT&T, though. It was a small, independent phone company. To this day, that phone company serves only the two communities. And it was this company that I called yesterday to establish service out at our house.
They had already upgraded our lines -- over a mile of new copper, benefiting only us, at no charge to us -- last fall. The box was already on the outside of the house. Just need to get it activated.
So I called the phone company. They said I needed to drop by their office and sign some papers. Uh-oh, I think -- this is a bad sign. Sounds like a bunch of phone company bureaucracy.
But not so much. I went to the office and signed up. They asked the usual questions: name, address. Plus a few that bigger companies wouldn't ask: who used to have service at that address? Of course, most people would know that answer in our community. I couldn't have told you in Wichita, Dallas, or Indianapolis.
Then they asked when I'd like service to be activated. "As soon as possible," I say, figuring that this would be a couple of weeks like it is with AT&T or Sprint. "Well, we probably can't get out there for a couple of hours. Would it be OK if it's on at about 3?" Yes, that would be fine!
Now, how about DSL? "Well, we're a little backed up on that right now." Uh-oh. Sprint took several weeks when they *weren't* more backed up than usual. "So it'll probably be Monday or Tuesday before we can get out there. Should I just have the installer call you and arrange a time when it gets closer?" Yes, that would be fine, too!
Now, how about finding a phone number.
Out comes a large paper book. Yep, paper. They paged through it, and told me that my grandpa's old number would be available if I wanted it. I said yes -- after all, we've got his old address, so might as well keep the same phone number. OK, no problem. She whips out some white-out, whites out grandpa's name, and writes ours in. Done.
Now, do we want any optional services? Caller ID, call waiting, voicemail? How much is caller ID, I ask. $5 a month. We'll try it for now. "OK". A box was checked on the form and that was that. No high-pressure sales pitch on taking "the works" for some poorly-disclosed price, providing a ton of services I'll never use and don't want. No confusing "discounts" for having The Works and DSL at the same time.
Then I ask about an unlisted number, or at least an unlisted address. We figure that anybody that we really want to be able to reach us will figure out how without using a phone book, and these things get in so many databases these days. Sprint charged almost $10/mo for a fully unlisted number, but only a few dollars a month to just keep our address off the directories.
Our new company charged 50 cents a month for a fully unlisted number. Done.
Now it's time to pay for the first month's fees and the setup. Oops, I've forgotten my checkbook in the car. No problem, the secretary says, I'll watch your baby while you go get it! Jacob was with me, but had fallen asleep, so I brought him inside in his car seat. I went to get the checkbook -- just out the door and close by. I was back in a few seconds later, and the secretary was already on the other side of her desk talking and playing with Jacob. "My baby's 12 now," she said, and for a second, looked like a person that was remembering Central.
So, the
Apple iPhone has been launched, it was brought to my attention as actually being announced by the MD at work, who appears to have become a complete apple freak (poor bastard... or is that rich bastard to be able to afford apple's mediocre offerings and be happy about it?). Anyways - from reading the
story from
BBC News and the
official website, here's my conclusions.
First off, when marketing a phone, how about you actually mention it's phone capabilities as the number one priority? I'd like to know about the sound capabilities, the battery life, the overall user feel for it as a phone... maybe I'm odd, but a phone has a purpose, it should make and receive calls, and it should do that job *well*, with good quality voice, a decent (filtering) microphone (it's a mobile, you'll be walking whilst speaking on it, reducing the background noise is a selling point), but apple appear to have mostly avoided talking about this. Instead, the first thing that you're told about from the news story is the unique user interface - great, so we have a touchscreen "whoop, de, do!". Worse still, from the official site, the first thing that springs out is that it's a "Wide Screen iPod" - it's a phone, if I wanted an iPod I'd buy a damned iPod - as it stands, for my music needs I have an
iAudio M3 which suits my portable music experience really rather well. I choose that on the basis that it provided ogg support out of the box, didn't require any magical software (I run linux on my machines, it presenting itself as nothing more than a USB hard disk was fantastic, and means that I can use it for other things when needs arise). For a phone I want something that actually behaves like a phone, looking at the iPhone it's primary purpose appears to actually be a media player - that's not good.
With the iPhone only having a touch screen interface, and from everything that I've read there's no stylus and the "finger is the ultimate pointing device", I'm just expecting that within the first 2 weeks you're going to have a scratched or smudged screen from usage alone, add in the fact that it's a mobile phone, and therefore generally treated with contempt (neccessity rather than luxery), and that most people carry mobiles in their pockets without any form of protection (easy and fast access) and you've got a recipe for disaster! The touch screen is going to be hit (wether you like it or not) whilst the phone is in your pocket, it will wear - there's no question in my mind about it. Touchscreens aren't designed to be smacked around 24/7, they're touchscreens - they respond to touch! So, assuming that you're shiny new iPhone is sitting in your pocket a lot of the time that's a lot of usage of the touchscreen - they're not designed for constant pressure (think about what happens to pockets in trousers when you sit down...), so I don't think that, overall, the sensitivity of the screen is going to last very long. It's only got a fairly narrow screen too, so what about those of us with not entirely slender fingers? When composing SMS messages on it with the on screen qwerty keyboard, do you really think that you're going to get the right keys every time? Small, on screen, buttons and pubs do not mix - and I'd hasten a bet there's a fair number of SMS messages sent from, or on the way back from, the pub, with a predictive text system at least you can almost work out what the heck the person was trying to say - this is a whole new ball game.
The iPhone also makes the phone functionality only available after you've hit the part of the screen that says "Phone", now, I don't know about other people, but if I'm being given a number, I tend to just start hitting the right buttons on the phone, I can store the number later (via the call register or whatever) and hit call, now there's an extra step to getting in touch with people.
From the official site we have the words """ iPhone also introduces an entirely new user interface based on a large multi-touch display and pioneering new software, letting you control everything with just your fingers. """" - now, err, just when did a phone require you to use anything other than your fingers? Please tell me, I'm dying to know - I've never yet needed to use my feet to operate my phone, have you? This is marketing gone insane - and what worries me is that people actually believe this bullshit.
Apple may have "revolutionised" the computer industry with "Mac OS X" (this is actually not something that I believe, and OS X actually makes me more frustrated than being sat infront of a windows desktop - and believe me, that's difficult), but this is a phone, how about they try making it about the phone first, and the next generation tart audio player second?
I'm willing to be convinced that I'm wrong, but I definately won't be going out of my way to aquire an iPhone just because the marketing spiel looks good.
The biggest party in Bavaria and part of the current german government, CSU,
has announced that they want to make the "production and distribution of
killer-games" illegal in germany. They claim it's because of a recent
highschool shooting (no fatalities except the shooter; there was one other
highschool shooting in germany a few years ago with 16 fatalities. Yes, that
is 17 fatalities in over 40 years, the 42 years old amok runner back then
didn't play killer games, I guess, although he used a flame thrower...).
This would make the production and distribution in Germany unlawful, since
we include games such as overkill, tremulous and openarena. Other
distributions such as SuSE probably include some games that classify as
"killer games" as well. Also note that "distribution" is a rather wide term.
Does it apply to web sites? ISPs? If there is an online killer game, is the
ISP "distributing" it?
Polticians (especially those from CSU/CDU/SPD) are such a bunch of idiots.
Please do NOT ever again vote for CSU. Software patents, killer games,
"Problemfrauen & Schadbären", surveillance cameras and other
surveillance, military inside germany (note that in desaster cases such as the
flooding some years ago we could already deploy soldats without extra laws),
shooting down of civilian airplanes, transrapid, reducing math and natural
sciences in highschools, "google earth threatens worldcup security", police
installing trojans on home PCs (because criminals don't install virus
scanners?), kicking "irritating" students out of school, study fees, ...
Often they make George W. Bush look like a genius, don't they?
They don't do any important stuff, but just say whatever a majority people
might want to hear. They waste our money (Transrapid). They destroy our
biggest resource (changes in school system and university system, which will
reduce average knowledge in germany a lot). They do lots of stupid things,
which heavily invade privacy or public safety (military, surveillance) with
no benefits in safety and many of which even where only stopped
because they violated our constitution.
Do not vote for them!
[Updates:
Daniel, sorry for posting a non-english post to planet. I again put it into the wrong category; I intended to do a longer post (this one) in english later on. For clarification: CSU is the sister party of CDU, these parties have an arrangement not to compete by region and are closely affiliated. On the nation-wide level they have a joint list, which often is called CDUCSU. So they're not just an "affiliate", but a strong part of the ruling party.
Holger Levsen pointed
out we are likely going to violate some laws much earlier by distributing
("hacker-") tools such as nmap, ettercap or whireshark.]
[UPDATE 2007-10-01 22:43: It appears that Erich wrote an expanded and better-translated
post while I was at work]
Erich Schubert
writes that
Nach aktuellen Pl nen der CSU w re der Vertrieb von Debian GNU/Linux illegal.
Auch zahlreiche andere Distributionen w hren wohl davon betroffen: Alle, die sogenannte "Killerspiele" vertreiben...
For non-German speakers, I provide the following approximate translation:
CSU wants to make Debian illegal
The current plans of the CSU [Christian Social Union] will make the distribution of Debian GNU/Linux illegal.
In addition, many other distributions will be affected: specifically, those that distribute so-called "killer games"...
For instance, Overkill (Debian also includes, e.g., Tremulous and OpenArena, which are based on the Quake3 engine and have 3d graphics...)
(hopefully I got the gist of Erich's post without mangling it too badly!)
What I don't know is how serious this is. The CDU (Christian Democratic Union) is IIRC the current ruling party in Germany; however, according to Wikipedia, the CSU is some sort of local affiliate in Bavaria. Does it have the clout to get this proposal made into law?
Erich, it's not only
killergames which threatens the legal distribution of linux in germany, but also hackertools like ping, ethereal or nmap. Check out
this article (german only), which explains the new law which will come into effect in germany on the 15th of march this year.
Obviously you need hackertools, to be able to check if you're system is secure or vulnerable, but unfortunatly common sense is a lost art nowadays.
More maybe later, I'm in a hurry, but I at least wanted to make this remark. More discussion and evaluation of this is definitly needed!
Russel Coker wrote in
etbe: some random Linux tips:
Prefixing a bash command with ‘ ‘ will prevent a ! operator from running it. For example if you had just entered the command ” ls -al /” then “!l” would not repeat it but would instead match the preceeding command that started with a ‘l’. On SLES-10 a preceeding space also makes the command not appear in the history while on Debian/etch it does (both run Bash 3.1).
It’s pretty easy to get the Bash shell to ignore lines starting with a space in its history: Just add
export HISTCONTROL=ignorespace
to your
~/.bashrc. Alternatively,
ignoredups ignores duplicates and
ignoreboth ignores both.
It’s also possible to tell Bash to ignore lines which match a specific pattern. For example,
export HISTIGNORE=" *:~/*"
will ignore any command starting with a space (emulation the
ignorespace option to
HISTCONTROL) or starting with
~/ (any program/script in or below your directory).
Personally, I just use “
HISTCONTROL=ignoreboth“.
..or he's not telling us something. If the multi-year exclusive agreement is true, then the goals are probably unachievable. In the keynote yesterday, Jobs put out there that almost a billion phones are sold each year to consumers. Granted, most of these are regular phones without the whiz-bang and special features of the iPhone -- and are usually free to the consumer, subsidized by the contract agreements. Still, he set what most would consider a modest goal, of getting 1% of the cell phone sales - 10 million phones, by the end of 2008.
However, lets do some napkin math. A very small percentage of phones out there today are smart phones.
C Net says that 37.4 million smart phones out there. This is probably a pretty conservative estimate by now -- the Gartner study was released in October. Let's give the smart phone people the benefit of the doubt and say that usage triples by the end of 2008. That makes about 100 million smart phones out there. 10 million is ten percent of that market.
Let's look at the math another way. Cingular has
58 million subscribers. Assuming that they gain 20% per year, they will have 68 million at the end of 2008. If Apple is aiming at 10 million phones, that is one out of every seven Cingular customers. Next time you walk down the street, notice count 7 people that you can notice have a phone. If Apple makes its goal, one of those 7 people will own a iPhone, and will have shelled out at least half a grand on it.
These are amazingly high goals for a company that is new in the market. Granted, the iPhone is pretty revolutionary, but I don't think Steve is that crazy. I'm betting that he has something up his sleeve that will help him meet or beat this 10 million goal.
About a year and a half ago (has it been that long already?), I
blogged about
wanting to write some gobjects. People did give me pointers to some
documentation then, but for various reasons I never looked into it in
detail afterwards.
Since yesterday, though, that's changed. For the last two days, I've
been writing on something which I'll eventually release to the world as
libgjs:
wouter@country:~/code/c/libgjs/src$ ./gjstest
There are 1 joysticks on this system
Joystick 0 is a Logitech Inc. WingMan Gamepad Extreme,
with 10 buttons and 4 axes.
wouter@country:~/code/c/libgjs/src$
Wonderful, isn't it? Obviously the above doesn't require the 306 LOC
that I've written now (which isn't much, but that's mostly because I had
to read a lot of documentation in between); but when finished, the API
of that library will be approximately something like this:
if(gjs_joystick_get_max>=0)
GjsJoystick *joystick = gjs_joystick_new(0);
if(joystick->buttons >= 1)
g_signal_connect(joystick, "button-pressed",
start_firing, NULL);
g_signal_connect(joystick, "button-released",
stop_firing, NULL);
g_signal_connect(joystick, "axis-moved",
move_crosshair, NULL);
gjs_joystick_set_interval(1);
where
start_firing,
stop_firing and
move_crosshair are, obviously, callback functions (they get the
button or axis number as a parameter). The
set_interval
function sets the time between two polls of the kernel device file; this
will use the
glib mainloop, but it'll also be possible to use a
different event loop with
gjs_joystick_poll and/or
gjs_joystick_poll_all.
As of now, it's almost finished; only the signals seem to be
something I'm having issues with still. But that's only a matter of not
having used
gdb enough—I'm sure I'll get there.
What gave me the sudden idea to write this library? Something silly,
really: for a project I'm currently negotiating, it might be nice if I
knew how GObject works; and what better way to find that out than by
writing something fun for it? Exactly.
Update: Bugs squashed, and the library (along with a
small test/demo application)
is available. Please try it
out and let me know what you think.
Justification.
Currently there is a huge mess of files and folders that start with a “.” in any users home folder. There is no structure or policy on how applications should choose file and folder names for data that needs to be stored in users home directory. Additionally there is no established consistency between Gnome, KDE and most other applications. Gnome application have part of their configuration information in gconf folder and other part in a gnome subfolder. KDE applications have a complex structure under .kde/. And most other applications either have one file directly in users home folder or have their own dot-folder there.
Problems.
There are two major problems with current ad-hoc approach:
-
Namespace pollution of users home space. In any desktop system “ls -al” in the home folder would be a very lengthy affair. Moreeven this namespace is folded - KDE and Gnome apps live in their own subfolders.
-
Lack of structure in folders makes it much harder to properly understand their purpose. For example, if a user has misconfigured an application and would like to reset it to default settings, it currently could be hard to figure out how to do that. Especially without losing his data in that application.
Proposal.
I propose to implement a policy on where an application can store data and configuration information in users home folder. Such specification would be proposed as an extension for FHS, first implemented in Debian and then promoted for inclusion upstream and in other distributions.
Structure.
I propose a following structure for a users home folder:
-
data/appname/ - each application, that stores user data in application-specific format, will have to store this data into this folder. Only configuration information that is essential to load this data would be permitted into this folder (in hidden dot files). For example, Evolution could store emails and email access information here.
-
.conf/appname/ - each application that stores any configuration information whould have to store all of it in this folder. GConf will have to also store applications configuration info here. If this folder would be deleted, application must revert to default configuration, but still be able to fully access user data in data/appname/ or other, generic folders (below). For example, if .conf/evolution/ is erased, then on next start-up Evoution should still be able to access all email that is stored in data/evolution/ without any configuration wizards.
-
.tmp/appname/ - each application that would need to create temporary files that survive reboot, would put them here. These folders can be safely deleted at any time with no data or configuration loss. For example, Firefox cache information and Nautilus thumbnail cache would have to be here.
-
Desktop/ - the desktop folder, just like it is now
-
Media folders - (Documents/, Photos/, Videos/, Music/, …) a suggestion of basic document structure for user to use or ignore. Applications dealing with particular media types would default to use files from such folders, but should also cope with working with any other folders on users choice. For example, a screensaver with slideshow function would by default use photos from Photos/, but will have to have a configuration option for user to change that setting.
-
Additionally I would propose having a .mounts/ folder where applications could mount user specific media and other mounts, such as FUSE. For example, FUSE could be used for automatic archive introspection.
Benefits
The main benefit for such system for me is twofold:
-
SBackup can be configured to exclude .tmp/ and .mounts/ by default thus saving significant space in backups.
-
A tool can be made to restore settings and/or data for specific applications in an uniform fashion.
So, any suggestions on the idea and on where this should be best discussed?
Lilypond is a great piece of software, but its documentation is sucky
as hell.
I've been
trying to tweak the output of a particular piece
of music which turned out to have just one system on the final page using
the default settings, so that this final staff would end up on the first
page, too.
The documentation on how to do this, however, is less than
helpful. If there is a mistake that could've been made by the people who
wrote the manual, be sure they made it:
- In the "lilypond-internals" manual, there is mention of the fact
that a particular variable needs to be a "moment", but no mention of how
to do it; in fact, the default setting that is listed there for that
variable is listed as #<Mom 1 4>, but trying to use that
will give you a syntax error. It took me 15 minutes of trying, and
finally more or less accidentally stumbling upon an actual example
somewhere which sets a moment variable, to figure out how to do it; the
right syntax is #(ly:make-moment 1 4)
- In the section on horizontal spacing, there is no single mention of
the fact that settings on horizontal spacing apply to the score as a
whole, and cannot be changed on a per-measure basis, or halfway the
score in other ways. A pretty important detail, in my opinion.
- Yet, even if settings on horizontal spacing can only be made on a
per-score basis, you still have to modify them by using
\override commands somewhere in between your notes. Logic? Not
really.
- In the section on horizontal spacing in the 2.10 version of the
manual, there is also no reference to the new
\newSpacingSection command, which allows one to split the score
up in multiple sections in which the horizontal spacing can be changed
anyway. Way to go.
- Even after reading and understanding most stuff in both manuals
about horizontal spacing, my attempts still resulted in no
visible changes on the page, and I have no clue why. There is no
message, no way to be sure whether I did the wrong thing, or whether I
did do stuff correctly but that it failed because of unrelated
reasons.
Really, I would be
very happy if the lilypond authors were
to just find someone who actually knows how to write decent
documentation.
Nach
aktuellen
Plänen der CSU wäre der Vertrieb von Debian GNU/Linux illegal.
Auch zahlreiche andere Distributionen währen wohl davon betroffen:
Alle, die sogenannte "Killerspiele"
vertreiben...
z.B.
Overkill
(wobei Debian auch noch z.B. Tremulous und OpenArena enthält, die auf
der Quake3 engine basieren und 3D Grafik haben...)