- It has been getting cold and wet during the last weeks. And I missed some ultimate frisbee training sessions because of not having the right clothes. I should really go shopping. Our mixed team from ultimate frisbee is the german champion for the second time in a row. Congratulations to all of them. They are going to some tournament in London on one of the next weekends.
- After trying to learn a lot for my probability theory exam I finally started to get productive. Yay!
- I get two computer magazines sent to my house: IX and Linux Magazin. Usually I have enoughe time to read the most interesting articles before the next edition comes out, but I bought a CT some weeks ago and now I am completely out of schedule.
- My computer starts to do funny things. I get a message about some accessibility feature not being present at every boot. If I am at the computer at around half past 10 (or half past 9?) in the morning, it hangs and I have to reboot it. The clock applet in Gnome does not work anymore. The computer hangs from time to time, but only when doing lots of stuff (compiling, email, webbrowser and probably more, all at the same time). Since some time ago another RAM bar died, I definitely have not enough RAM. Less than a GB at the moment. So I'm thinking about getting rid of this complicated Gentoo stuff and installing Fedora. But my machine is some years old and I want a new one. I only need the core parts, motherboard, CPU, fan, RAM, graphics adapter (if it is not onboard). So I'm thinking about buying some 4-core CPU and 4 GB of RAM and some cheap board with integrated graphics adapter (I can upgrade later). But I'll do at least one exam before.
- I read this news item about a guy (or actually more than one) building a $150 balloon with camera and GPS and taking pictures of space (the area around earth). I want to do that, too.
- I' thinking of getting rid of categories in this blog. They only make sense when they are used consistently, and I don't do that.
- I started using F-Spot for organizing my pictures. I also started hating pictures without embedded timestamps. Scans from old photographes, pictures from mobile phone cameras, pictures edited with a tool that removes that stuff. New tools, new restrictions. That's life.
Saturday, September 19. 2009
State of the union
Posted by Philipp Riegger
in Blog, Computer, Current, Dreams, Gentoo, University
at
15:28
| No comments
| No Trackbacks
So, what's going on that does not really fit into one of my diary-like posts?
Thursday, July 16. 2009
Wednesday
The picture was taken at the beer event at last years FOSDEM. Yes, there were lots and lots of people. And the beer was really good.- Did not get up as early as I wanted (as usual), did some stuff here and there.
- Juern invited the theoretical computer science tutors for dinner (since we work for him). Lots and lots of very good food, watched some excerpts of Religulous. I think I'll buy the DVD and show it to all teh people I know "who believe".
- Got home around midnight, was not tired enough so I established a new settlement in Travian. Been building settlers all day.
- As you might notice, I'll try to change the style of this blog. I always wanted to write "important" stuff, but well, either there is not enough of it or I'm too lazy to preprocess it for that blog. So... short sentences and real life stuff from now on. Until I change my mind in probably less than two weeks.
- About the picture: The date for next years FOSDEM was released: "6 and 7 February 2010". Hope to be able to attend and meet lots of strange people there. What about you?
Monday, May 25. 2009
Improved binary package support for Gentoo
I just posted this to the gentoo-dev ML, feel free to read and post comments.Good morning,
I want to talk about improved binary package support for Gentoo. About
1-2 months ago there already was a discussion about this on gentoo-soc@
and on bugzilla [1]. If I remember correctly, there were no devs
involved in the discussion, so I thought I'll post my thoughts here.
I know, that Gentoo is a source-based distribution or meta-distribution,
and I don't want to make Gentoo another Fedora or Ubuntu, but I think
there are some things we can learn from them.
The current situation:
Binary packages are (usually) stored
in /usr/portage/packages/$category/$package-$version.tbz2. The package
consists of the "real binary package" and the metadata (combined using
xpak or whatever).
Problems I see with this:
1) If a binary package is built because it needs to be linked against a
new library, because the USE-flags change or because the ebuild changes
without a revision bump, the "old" binary package is overwritten. This
also means that there is no support to store multiple packages with
different USE-flags without, well, using different directories.
2) To find out which USE-flags a package is built with, one needs to
download the package and look at the metadata. Today I discoveres a file
called "Packages" which looks like a metadata cache, but I did not find
more information about it (only tried "man portage").
So, how can we address this?
First we should do something about 2), I think: I want to propost the
following scheme:
Binary packages are stored in
$arch/$description/$category/$package/$package-$version-$ev-$use-$bv.tbz2.
$arch: This is x86, ppc or whatever you put into ACCEPT_KEYWORDS minus
the '~'. It does not make sense to make a distinction here.
$description: Something like pentium3, core2quad, G4, or whatever.
Pentium3-uclibc, Pentium3-solaris-prefix are also possible.
$category, $package and $version should be clear.
$ev: The "ebuild version". See below.
$bv: The "binary version". See below.
$use: The USE-flags. See below.
About ebuild version, USE-flags and binary version:
I would like to encode the USE-flags into the filename. This enables us
to have binary packages of the same version built with different
USE-flags in the same repository. Some wanted to have this in the
directory, some say it is ok to have it in the xpak only and some prefer
the "Packages"-like file.
I think, USE-flags can be set per package and therefore should be stored
per package, not per $description or whatever. Having it only in the
xpak allows no distinction between multiple binary packages, same
version, differen USE-flags and the same is true for the Packages file.
This would also be created, downloaded all the time and so on. Therefore
I think the cleanest solution is having USE-flags in the filename.
There are different methods to store it there.
a) A checksum (of the USE-flags, the USE-flag string, the ebuild and the
USE-flag string, whatever).
b) List the enabled USE-flags in the filename, use a) if the string gets
too long.
c) Use a packed binary vector.
I don't like a), because it is not easily reversible. You could always
download the Packages file or the binary package and look into the xpak
metadata, but that's too much effort. b) also has the problems i
mentioned for a). Also, you'd need some system to distinguish ebuilds
with the same version but different USE-flags. You also need that for
c), so b) has no advantages ofer c) in my eyes.
For c) I think of the following: Sort the USE-flags in some defined way
(ASCII code, whatever) and make a vector with a 1 for every enabled
USE-flag and a 0 for every disabled USE-flag. Compress that vector: If
you use HEX code, you need 1 character for every 4 bits, but it should
be possible to find 64 different characters, then you need 1 character
for every 6 bits. PHP has 106 USE.flags, that would make a USE-string
with about 18-27 characters. Packages with lots of USE-expand stuff like
languages would need more, but not too much, I think.
Problems: The string might get long, you get big problems with USE-flag
renames, USE-flag additions or removals. That's where the ebuild version
is needed. Or not. We have 3 possibilities:
a) Change policy: USE-flag changes in an ebuild need a version bump.
b) Use a checksum of the ebuild.
c) Use the version given by the version control system.
The problem with a) is, that is a change in policy and probably hard to
do. Increasing the revision for a (trivial) change leads to a lot of
unnecessary rebuilds for users. It also means, that USE-flag changes in
eclasses are difficult, the eclass should probably copied over to a new
name with version and only ebuilds with a new version (revision) are
allowed to use it.
The problem with b) is, that it is not ordered. You don't know, which is
the newest version. If you have an ebuild with a version where there is
no binary package for, it gets difficult/ugly.
c) also has problems: When using cvs, there are versions easily
available. The same is true for svn, but lots of distributed version
control systems like git use checksums as versions. Welcome back to b).
Another thing is, how do we get to the versions? Will they be in the
header forever, since they make signing ebuilds or the manifest much
more complicated (multiple commits necessary)? But, well, since metadata
is generated and provided by "the tree", it should be not too hard to ad
a unique ebuild version there (in the case of checksums, use an integer,
increase whenever the checksum changed or something). It just might make
using overlays a bit more difficult.
The last thing to be discribed is the binary version. Lots of people
talk about dependencies to other binary packages when they talk about
binary packages for Gentoo, but that gets quite difficult (and, in my
opinion, ugly). We mostly need to provide a "consistent set" of
packages, which means, if A depends on B, B changes and therefore breaks
A, we need to provide an updated version of A. And we can do that with
simply increasing the binary version, since the package manager knows
then, that this package needs updating, too.
How to create binary packages?
Create some build server (or build server infrastructure). The most
important thing is a script or something that provides the
functionality. One enters a make.conf, /etc/portage dir, path to the
profile, description and whatever else is needed and the system starty
building. Then you can create a second set of data and start building
and the system puts the binary packages in the same directory and
discovers what needs to be built and what not (because apache needs to
be built only once if its USE-flags are the same for the different
configuration sets).
But there are thousands of packages and millions of USE-flag
combinations!
Seriously, who cares? The goal of this project (as it exists in my head)
is not to provide everything. It is to provide the most used packages.
If you need parrot, compile it yourself. If you need netbeans, compile
it yourself. We have @system, gnome, kde and anothe hand full of
packages, which will change over time. I'm, really lookign forward to
the data collected by the statistics project (GSoC).
The same is true for USE-flags: We might provide gnome, kde, both, a
server profile and whatever we decide to provide, but not everthing.
Again, statistics will help.
Same with CFLAGS. Probably no -O3, no -ffast-math, no -break-my-code or
whatever. Probably x86 with 32 and 64 bit for the beginning, later maybe
more.
So, the really really cool thing is, that if you are some company,
university, institution or freak, with lots of (similar) Gentoo boxes,
you can set up a build server and even share the binary packages, if you
want. Same level of security as non-official overlays, but in the
university of FooBar in Jamaica uses it, there should not be too many
security problems.
Thanks for reading, please discuss, I probably forgot lots of stuff, but
I can tell it later in the discussion.
Philipp
[1] https://bugs.gentoo.org/show_bug.cgi?id=150031
Sunday, November 30. 2008
What's going on? - Routerboard RB433 and OpenWRT
What else did I do?
I worked on my Routerboard 433. Yeah, I got it running. Thanks to Andreas, who I visited for an afternoon, who put OpenWRT Kamikaze on my routerboard and wrote a nice howto about the process.
I changed some things, later. I do not use the ath5k driver but madwifi and I do not use squashfs. I've got 64 MB NAND flash on the device, if I tell the bootloader to format the nand, it creates three partitions of which one is for the system. It's formated with yaffs2, so I simply used that and put an openwrt tarball on it. I did not get DSL running the way I wanted to, and later I got kernel panics because I upgraded the build root and put wrong modules on the board. I guess.
When I tried to reinstall it, I got lots of other strange problems. You can read about them in the "What's going on? - Computers" post.
But: OpenWRT works really well. I'm impressed. And it's also possible to get used to this very strange kind of linux designed to have a read only root filesystem.
I worked on my Routerboard 433. Yeah, I got it running. Thanks to Andreas, who I visited for an afternoon, who put OpenWRT Kamikaze on my routerboard and wrote a nice howto about the process.
I changed some things, later. I do not use the ath5k driver but madwifi and I do not use squashfs. I've got 64 MB NAND flash on the device, if I tell the bootloader to format the nand, it creates three partitions of which one is for the system. It's formated with yaffs2, so I simply used that and put an openwrt tarball on it. I did not get DSL running the way I wanted to, and later I got kernel panics because I upgraded the build root and put wrong modules on the board. I guess.
When I tried to reinstall it, I got lots of other strange problems. You can read about them in the "What's going on? - Computers" post.
But: OpenWRT works really well. I'm impressed. And it's also possible to get used to this very strange kind of linux designed to have a read only root filesystem.
Sunday, November 16. 2008
Better user interfaces
Some days ago I read an article (probably golem.de, I'm too lazy to find the link) about some Mozilla guy trying out new user interfaces. He stated, that a lot of the current interfaces are bad (which is definitely true) and if I understand is correctly, there are basically two directions in which research can go:
Some more things I have to say about the first direction: It's maybe the same as using keyboard shortcuts. You don't know them when you start using the application, but if you get to know them you can boost your productivity. Somwhere in the article they stated, that keyboard shortcuts and context menus and stuff are bad, but I forgot why.
Another example is TrekBuddy, a GPS appliation for mobbile phones. I used it some time ago with a Siemens mobile phone to have GPS. I thought, it was configured wrong or something because I did not get any usefull information from it (just a world map, a dot for the waypoint on it and an arrow for the position where I was to the waypoint). I called the friend from whom I had borrowed the phone and who had put the software on it for me, and he explained to me the most important things: You have to anter the menu using the key above the "1" (ok, i knew that), if you press start there, GPS is switched on (interesting way of switching on and off this whole system of the phone, I had looked for the switch outside of the Java application) and you can press '#' to move from one display to another (who would have guessed that?). With that I could enter the next waypoint, start gps, switch to the display that shows me the current signal quality and the direction in which I had to go.
Another thing this guy mentioned in his article were the "Do you really want to do that?"-popups. Basically, they are not too bad, because if you accidently hit the "close" keyboard shortcut for your webbrowser and lose lots of open tabs and stuff? Recently you can work around this all with plugins, but not for Safari, as far as I know. These popups are bad, because you get used to them and click them away automatically. What would be a much better user interface is if there were no popups but this plugin like thing, just for everything. Either a global "undo", or something like "restart the application so that it looks like before you closed it", restart the application normally and have a "restore last session" button or whatever. Don't prevent things, correct them.
Today I missed this feature a lot. I wanted to search something in an IMAP mail folder in Evolution, wanted to clear the search (I do Ctrl+A Del for that) but the focus was not on the search bar (never trust the focus. It moves from window to window and there is no way of controlling it. How often have you typed a password into the wrong window just because another window was jumping in front of the one you were working with at the monent?) but on the mail folder. I deleted every email. I could restore it from teh trash of course, but there were about 60 unread mails from the last two months, very important emails, and no I have to reread every email and check, it I already read it (or in my case, if I already entered the data from the mail into the database).
I'll go back to work. Lots of mails to read.
- One can design/create a user interface which is easier to use. Examples are theMozillas mobile webbrowser, that shows the page in fullscreen and you can move this fullscreen size page to the, let's say, left side to have address bar and all the other stuff on the right side. This is totally non-intuitive, but easier to use once you learn it.
- The second way is to design intuitive interfaces. This is also quite an interesting field, since it's exactly what makes lots of users decide whether to use your application or another one.
Some more things I have to say about the first direction: It's maybe the same as using keyboard shortcuts. You don't know them when you start using the application, but if you get to know them you can boost your productivity. Somwhere in the article they stated, that keyboard shortcuts and context menus and stuff are bad, but I forgot why.
Another example is TrekBuddy, a GPS appliation for mobbile phones. I used it some time ago with a Siemens mobile phone to have GPS. I thought, it was configured wrong or something because I did not get any usefull information from it (just a world map, a dot for the waypoint on it and an arrow for the position where I was to the waypoint). I called the friend from whom I had borrowed the phone and who had put the software on it for me, and he explained to me the most important things: You have to anter the menu using the key above the "1" (ok, i knew that), if you press start there, GPS is switched on (interesting way of switching on and off this whole system of the phone, I had looked for the switch outside of the Java application) and you can press '#' to move from one display to another (who would have guessed that?). With that I could enter the next waypoint, start gps, switch to the display that shows me the current signal quality and the direction in which I had to go.
Another thing this guy mentioned in his article were the "Do you really want to do that?"-popups. Basically, they are not too bad, because if you accidently hit the "close" keyboard shortcut for your webbrowser and lose lots of open tabs and stuff? Recently you can work around this all with plugins, but not for Safari, as far as I know. These popups are bad, because you get used to them and click them away automatically. What would be a much better user interface is if there were no popups but this plugin like thing, just for everything. Either a global "undo", or something like "restart the application so that it looks like before you closed it", restart the application normally and have a "restore last session" button or whatever. Don't prevent things, correct them.
Today I missed this feature a lot. I wanted to search something in an IMAP mail folder in Evolution, wanted to clear the search (I do Ctrl+A Del for that) but the focus was not on the search bar (never trust the focus. It moves from window to window and there is no way of controlling it. How often have you typed a password into the wrong window just because another window was jumping in front of the one you were working with at the monent?) but on the mail folder. I deleted every email. I could restore it from teh trash of course, but there were about 60 unread mails from the last two months, very important emails, and no I have to reread every email and check, it I already read it (or in my case, if I already entered the data from the mail into the database).
I'll go back to work. Lots of mails to read.
Sunday, October 12. 2008
New project: a led clock
First a clarification: I wanted to call this blog "plans and memories" and then called it "dreams and memories". So... everything in the category "Dreams" is either a dream or something more like a plan.
Some time ago I bought 100 green LEDs and 2 circuit boards, some resistors and some more stuff. I wanted to build something like the LED cube from mrmcd but that's far too much work for the first time. So i decided to build something easy, something 2-dimensional. Today I had the idea to build a digital clock. I looked up some low resolution bitmap fonts and created my own one:

The yellow dots are not needed LED positions, seperators or how you might call them. The black dots are LEDs or switched on LEDs and the white dots are positions of LEDs I need for other digits. I als have a picture of an example time. You can see it below, the dot colors are the same as in the first picture:

Some "hardware":

As you can see, the circuit boards are too small. I need to buy bigger ones. Also, I don't have enough LEDs. For the black and white dots only I would need 21x4+2=86 LEDs, but to fill the yellow dots, too, I need 27x7=189. I think. So I need to order more parts first.
I want to connect this board to an ATmega microcontroller. If I use it as an interface to the serial port or if it has an internal clock which is easily usable is something, I did not look up yet. First some soldering.
I just have one problem: I want to make it elegant. It shoud be possible to send a binary number on some ATmega pins to the LEDs and then do all the complicated stuff in hardware. This would be great, but using that method I only reach 86 of the189 LEDs I want to have on the circuit board (for other fun stuff). So I need 2 ways to control the LEDs. At least for 86 of them.
But does that mean that I need 86 logical ORs? That would be 22 ICs and about 3,30 Euros more. That's almost no money, but i care about the space I need for 22 ICs (these are "QUAD 2-INPUT OR GATE"s).
And for the pixel-wise control, how do I do it? 1 column at a time? Do I want to use buffers, which would be something like another 29 ICs? Or is it ok to be able to power 1 column (or $n columns) at a time? I'll have to look into that and it would be nice to know some more before ordering this stuff.
BTW, Simon wants to join me. That's great.
Some time ago I bought 100 green LEDs and 2 circuit boards, some resistors and some more stuff. I wanted to build something like the LED cube from mrmcd but that's far too much work for the first time. So i decided to build something easy, something 2-dimensional. Today I had the idea to build a digital clock. I looked up some low resolution bitmap fonts and created my own one:
The yellow dots are not needed LED positions, seperators or how you might call them. The black dots are LEDs or switched on LEDs and the white dots are positions of LEDs I need for other digits. I als have a picture of an example time. You can see it below, the dot colors are the same as in the first picture:

Some "hardware":

As you can see, the circuit boards are too small. I need to buy bigger ones. Also, I don't have enough LEDs. For the black and white dots only I would need 21x4+2=86 LEDs, but to fill the yellow dots, too, I need 27x7=189. I think. So I need to order more parts first.
I want to connect this board to an ATmega microcontroller. If I use it as an interface to the serial port or if it has an internal clock which is easily usable is something, I did not look up yet. First some soldering.
I just have one problem: I want to make it elegant. It shoud be possible to send a binary number on some ATmega pins to the LEDs and then do all the complicated stuff in hardware. This would be great, but using that method I only reach 86 of the189 LEDs I want to have on the circuit board (for other fun stuff). So I need 2 ways to control the LEDs. At least for 86 of them.
But does that mean that I need 86 logical ORs? That would be 22 ICs and about 3,30 Euros more. That's almost no money, but i care about the space I need for 22 ICs (these are "QUAD 2-INPUT OR GATE"s).
And for the pixel-wise control, how do I do it? 1 column at a time? Do I want to use buffers, which would be something like another 29 ICs? Or is it ok to be able to power 1 column (or $n columns) at a time? I'll have to look into that and it would be nice to know some more before ordering this stuff.
BTW, Simon wants to join me. That's great.
Thursday, October 9. 2008
USRP and SSRP
Yesterday, some new guy at the CCCS Mailinglist introduced himself to the list and asked, if somebody has an USRP or SSRP at home. Well, I did not know what he was talking about, but it sounded interesting, so I googled:
USRP is short for Universal Software Radio Peripheral. It is a USB (or GE, for the USRP2) connected board with some hardware on it that can receive radio signals (the full band, not just tuned to 1 channel), converts them to digital and sends it to the computer. The other way around works, too, you can send stuff. It is a nice tool, since it enables you to do lots and lots of things, starting from receiving FM radio, to receiving HDTV movies from the air, to GSM, GPS and WLAN. It's testing equipment, therefore you don't need a license to buy it. It's just, well, illegal to do some stuff with it.
The software tool used with that peripheral is GNU Radioand there's a wiki page about the USRP with all the stuff you need to build it on your own (software and hardware are GPL licensed) on that website. And did I mention, that there's an FPGA on that board? Really nice stuff.
If you are interested in this, I would recommend you to read the Wired article about GNU Radio.
The guy who designed this board is called Matt Ettus, and on his website he sells ready-to-use USRPs. But the price is quite high (at least for a hobbyist like me who only sees the new toy): The USRP is $700 and the USRP2 is twice that price.
That's where the SSRP project starts: SSRP stands for Simple Software Radio Peripheral ans seems to be an USRP, just simpler. That sounds good, but the USRP seems to be much more mature, developed or how you call it. It is used in lots of applications (like locating mobile phones in supermarkets, see the Wired article) and I did not find that much about the SSRP. Only that the first version works and he's working on the second one, where the hardware is trady but not the firmware or software.
So, if maybe one day I get my amateur radio license, I will look this projects up again and maybe get some cool stuff done. There's also an amateur radio group at my university. Unfortunately I did not know this before, I did not look into this and 1 year before I make my diploma neither does it make sense to start this new hobby and get to know the group nor do I have the time. So.... someday/later it is.
USRP is short for Universal Software Radio Peripheral. It is a USB (or GE, for the USRP2) connected board with some hardware on it that can receive radio signals (the full band, not just tuned to 1 channel), converts them to digital and sends it to the computer. The other way around works, too, you can send stuff. It is a nice tool, since it enables you to do lots and lots of things, starting from receiving FM radio, to receiving HDTV movies from the air, to GSM, GPS and WLAN. It's testing equipment, therefore you don't need a license to buy it. It's just, well, illegal to do some stuff with it.
The software tool used with that peripheral is GNU Radioand there's a wiki page about the USRP with all the stuff you need to build it on your own (software and hardware are GPL licensed) on that website. And did I mention, that there's an FPGA on that board? Really nice stuff.
If you are interested in this, I would recommend you to read the Wired article about GNU Radio.
The guy who designed this board is called Matt Ettus, and on his website he sells ready-to-use USRPs. But the price is quite high (at least for a hobbyist like me who only sees the new toy): The USRP is $700 and the USRP2 is twice that price.
That's where the SSRP project starts: SSRP stands for Simple Software Radio Peripheral ans seems to be an USRP, just simpler. That sounds good, but the USRP seems to be much more mature, developed or how you call it. It is used in lots of applications (like locating mobile phones in supermarkets, see the Wired article) and I did not find that much about the SSRP. Only that the first version works and he's working on the second one, where the hardware is trady but not the firmware or software.
So, if maybe one day I get my amateur radio license, I will look this projects up again and maybe get some cool stuff done. There's also an amateur radio group at my university. Unfortunately I did not know this before, I did not look into this and 1 year before I make my diploma neither does it make sense to start this new hobby and get to know the group nor do I have the time. So.... someday/later it is.
This blog
I never wanted this blog to be like that post. I mean, the post really sucks. I wrote about features I added, which I either did not use (Geshi) or which simply don't work (the LaTeX stuff) or which don't really interest the reader. I think. I will try not to write stuff like that again.
I also don't really like the way blogs work. Usually it's about writing articles (or posts), then you put them there and everythign is fine. If there is something wrong, you correct the article or you write another one correcting the first one. But things could be so much easier. I imagine the following: there are different kinds of texts you write for the blog. Let's call them news and articles. I use both. But blogs only support what I call news.
A news item is something that you write once ant then it exists. Fire and forget. If you find spelling errors in there, you can correct them. No big deal, nobody needs to know.
An article is something more complex. Maybe it's even a series of articles. Maybe you begin it today, continue writing in a week and finish it in a month. So, what do you do? Do you have it as a draft for a month? Maybe the introduction is already good today. So why not post it? What about changes? If you rewrite somethign or add something? At the moment, I split loger articles up and on the second and third one and so on, I write somethign like "You might also be interested in $article1 and $article2 and with the help of trackbacs readers can find follow ups to the first article in the trackback section. But that's too complicated. I'd like somthing like a merge between a blog, a wiki and a todo list system. I want the following:
The blog is like a simple blog, where you can post fire-and-forget news items and stuff.
The wiki is for articles. With every save you can tell the wiki what to do. It can automatically create a news item for the blog (with he first paragraph of the text or the first changes one or whatever. In my example it would post something like "$title - In this article I want to write about..." or whatever I wrote in the wiki. Two days later, I correct some spelling and I disable the creation of a new news item. A week later, I add another part of the article and the news item is created from the first new paragraph I added: "$title (Update) - [...] To add another point of view to this topic, I want to start with the following example:...". One month later I finish the article. I do some reordering, whatever and I enter some special news item text, which is not part of the article but is posted as news item: "$title - Today i finished my article about foo and bar. You may already have read some parts of it. What I did today is rewrite the section about generall foos, added some pictures about bars and finally wrote a conclusion about pink elephants...". So this would be the connection between the parts I want.
If I write complex articles, I want some control that they are still valid when they are read. Therefore I want expiration dates. With every news item or article I add an expiration date. The default fo news items is something like 5 years, or forever. Articles have a default about 1 year. If i write how I did something with the Gentoo Linux which enables me to do some crazy stuff, who guarantees me that it will still be valid after a year? Therefore I would get a reminder to update the article 2 weeks before the expiration date and after the article expired, there would be ome standard header stating "The author did not update this article in the last $whatever days/weeks/months/years. This article is most likely outdated and should be read with care. If you have some questions or want the author to update it, please ask so in a comment." I could, of course, add some more specific text like this on my own, add an "outdated" flag to the article (which might add some red warning sign or color somewhere) and then the article would be something like this: "I wrote this article $foo years ago. Back then I ustd $this hardware and $that software. I don't own this hardware anymore/don't use this software anymore/don't need this functionality anymore. You can still try to do the same with the information I give here, but please make sure, that you know what you are doing. $original_article".
Since I would use this application to write about projects, it would be nice to have a non-public list of projects I want to do, which can be edited comfortably. This feature could also be used for articles I want to write (if you don't call that projects). Also other fancy stuff like VCS, a ticket system or a bug tracker could be added or integrated. That I can write stuff like "I looked into [bug#123] today and updated [project] to [svn:project_name:$revision]. I hope this fixes it, if not, please comment on [bug#123]".
[Update:]
In a way, this is based on the same philosophy as my article about metadata.
I also don't really like the way blogs work. Usually it's about writing articles (or posts), then you put them there and everythign is fine. If there is something wrong, you correct the article or you write another one correcting the first one. But things could be so much easier. I imagine the following: there are different kinds of texts you write for the blog. Let's call them news and articles. I use both. But blogs only support what I call news.
A news item is something that you write once ant then it exists. Fire and forget. If you find spelling errors in there, you can correct them. No big deal, nobody needs to know.
An article is something more complex. Maybe it's even a series of articles. Maybe you begin it today, continue writing in a week and finish it in a month. So, what do you do? Do you have it as a draft for a month? Maybe the introduction is already good today. So why not post it? What about changes? If you rewrite somethign or add something? At the moment, I split loger articles up and on the second and third one and so on, I write somethign like "You might also be interested in $article1 and $article2 and with the help of trackbacs readers can find follow ups to the first article in the trackback section. But that's too complicated. I'd like somthing like a merge between a blog, a wiki and a todo list system. I want the following:
The blog is like a simple blog, where you can post fire-and-forget news items and stuff.
The wiki is for articles. With every save you can tell the wiki what to do. It can automatically create a news item for the blog (with he first paragraph of the text or the first changes one or whatever. In my example it would post something like "$title - In this article I want to write about..." or whatever I wrote in the wiki. Two days later, I correct some spelling and I disable the creation of a new news item. A week later, I add another part of the article and the news item is created from the first new paragraph I added: "$title (Update) - [...] To add another point of view to this topic, I want to start with the following example:...". One month later I finish the article. I do some reordering, whatever and I enter some special news item text, which is not part of the article but is posted as news item: "$title - Today i finished my article about foo and bar. You may already have read some parts of it. What I did today is rewrite the section about generall foos, added some pictures about bars and finally wrote a conclusion about pink elephants...". So this would be the connection between the parts I want.
If I write complex articles, I want some control that they are still valid when they are read. Therefore I want expiration dates. With every news item or article I add an expiration date. The default fo news items is something like 5 years, or forever. Articles have a default about 1 year. If i write how I did something with the Gentoo Linux which enables me to do some crazy stuff, who guarantees me that it will still be valid after a year? Therefore I would get a reminder to update the article 2 weeks before the expiration date and after the article expired, there would be ome standard header stating "The author did not update this article in the last $whatever days/weeks/months/years. This article is most likely outdated and should be read with care. If you have some questions or want the author to update it, please ask so in a comment." I could, of course, add some more specific text like this on my own, add an "outdated" flag to the article (which might add some red warning sign or color somewhere) and then the article would be something like this: "I wrote this article $foo years ago. Back then I ustd $this hardware and $that software. I don't own this hardware anymore/don't use this software anymore/don't need this functionality anymore. You can still try to do the same with the information I give here, but please make sure, that you know what you are doing. $original_article".
Since I would use this application to write about projects, it would be nice to have a non-public list of projects I want to do, which can be edited comfortably. This feature could also be used for articles I want to write (if you don't call that projects). Also other fancy stuff like VCS, a ticket system or a bug tracker could be added or integrated. That I can write stuff like "I looked into [bug#123] today and updated [project] to [svn:project_name:$revision]. I hope this fixes it, if not, please comment on [bug#123]".
[Update:]
In a way, this is based on the same philosophy as my article about metadata.
Tuesday, September 23. 2008
Metadata
... or: Stop duplication now!
I was just chatting with a friend ang got some new idea or revived one of my long-term ideas. It's about music and movies, metadata and files and databases.
At the moment you have the following: Music files are somewhere in your filesystem, let's call it ~/Music/$artist/$album/$track. $artist - $title.ogg Some don't have the artist in the filename, since it's duplication, but I like it. And then you want to change something, either the id3 tag or you rename a file/directory. Then this all is inconsistent. Which sucks. Some tools save the files in a way you cannot access them on the command line, but that's strange, too. Think of ~/.$musicplayer/my_music/$md5_checksum_of_file.ogg. Very nice, if you want to access some files without starting the application.
So, what would be the solution to this? Create a simple, dumb data storage server (ok, you can use the filesystem if you want) and provide nice, configurable access via FUSE. This should really be doable and in my imagination, it woudl be great. Just think of this: All your files with metadata (mostly music and movies, or other media files) are stored in a database, say Postgres. You can create an extra table type for that, which can be very very dumb because you have very little writes and only lots of reads. You could store bigger files in blocks or something. Ok, it would be only a filesystem, but remote. Then the mediy player accesses the files on the database and uses them. Furthermore, if you want access on teh filesystem, you can configure how you like it. It's exactly the same as defining where your audio files should reside after grabbing them from a CD.
What do you think of this? Stop using the filesystem (in the traditional manner) for some sort of files in favour of removing duplication and write a read-only FUSE module for command line access purposes?
An addition: I started configuring and using Bacula some days ago. Very nice tool and very nice design. Sort of revived my ideas, too. Think of a FUSE module for live acess to backed up data. Something like /mnt/backups/$jobname/$job_date-$job_id/.
[Update:]
I talked with a friend a bit about this article and I think I was not clear enought about what I wanted to say. This is mostly about seperating interface and data. You don't care anymore how your data is stored, but you have a clear interface. The filesystem is not too bad, but it's too complicated to change stuff there and also to be able to use metadata in a nice way. If you would have a nice simple interface, you could write some code to have exactly the filesystem view you want. Or your application could use it more direct (with the help of some libraries or whatever) without using the filesystem and parsing files. Ok, a library could be written to do the parsing and stuff, but with a database you get transactions for free and you might even be able to implement checkpoints or views in an easier way.
I was just chatting with a friend ang got some new idea or revived one of my long-term ideas. It's about music and movies, metadata and files and databases.
At the moment you have the following: Music files are somewhere in your filesystem, let's call it ~/Music/$artist/$album/$track. $artist - $title.ogg Some don't have the artist in the filename, since it's duplication, but I like it. And then you want to change something, either the id3 tag or you rename a file/directory. Then this all is inconsistent. Which sucks. Some tools save the files in a way you cannot access them on the command line, but that's strange, too. Think of ~/.$musicplayer/my_music/$md5_checksum_of_file.ogg. Very nice, if you want to access some files without starting the application.
So, what would be the solution to this? Create a simple, dumb data storage server (ok, you can use the filesystem if you want) and provide nice, configurable access via FUSE. This should really be doable and in my imagination, it woudl be great. Just think of this: All your files with metadata (mostly music and movies, or other media files) are stored in a database, say Postgres. You can create an extra table type for that, which can be very very dumb because you have very little writes and only lots of reads. You could store bigger files in blocks or something. Ok, it would be only a filesystem, but remote. Then the mediy player accesses the files on the database and uses them. Furthermore, if you want access on teh filesystem, you can configure how you like it. It's exactly the same as defining where your audio files should reside after grabbing them from a CD.
What do you think of this? Stop using the filesystem (in the traditional manner) for some sort of files in favour of removing duplication and write a read-only FUSE module for command line access purposes?
An addition: I started configuring and using Bacula some days ago. Very nice tool and very nice design. Sort of revived my ideas, too. Think of a FUSE module for live acess to backed up data. Something like /mnt/backups/$jobname/$job_date-$job_id/.
[Update:]
I talked with a friend a bit about this article and I think I was not clear enought about what I wanted to say. This is mostly about seperating interface and data. You don't care anymore how your data is stored, but you have a clear interface. The filesystem is not too bad, but it's too complicated to change stuff there and also to be able to use metadata in a nice way. If you would have a nice simple interface, you could write some code to have exactly the filesystem view you want. Or your application could use it more direct (with the help of some libraries or whatever) without using the filesystem and parsing files. Ok, a library could be written to do the parsing and stuff, but with a database you get transactions for free and you might even be able to implement checkpoints or views in an easier way.
Saturday, September 6. 2008
mrmcd - day 2 - connecting the dots
You might want to read my first post about mrmcd.
Connecting the dots, this is this years motto of mrmcd. And somehow it got me thinking during the day and followed me in the talks I attended.
First I went to a talk about tinc and BGP. It was about building VPNs using BGP to do all the routing and smart stuff. Since not too many things were working as expected (network problems, here) we talked about this and that. One guy asked, how tinc really worked, if it just connects to the hosts specified in the config file or if it exchanges information about neighbors and then creates new connections on its own, be it on demand or whatever. The homepage tells me something like that, but it's only about routing, I guess. What would be interesting is something new, smart, that creates new connections on demand.
On the other hand, sometimes this is not wanted. If you create a VPN with some friends, everything is fine. Everybody trusts everybody inside the VPN and everybody has full access. If some of your friends creates a connection with a new person, then you have the problem. There's only one weak link in the chain/network and some dubious guy has full access. What could you do, to prevent this? Get rid of routing, on the one hand. So only people you really added in the config file can be be connected to, but if one of the persons connected to you is again some kind of weak and enables routing/packet forwarding, you're back to the old problem. Well, maybe there wouldn't be a connection, since he can send packets to you but they will never return (no route), but that can be enough to have a problem. Another solution for this would be a firewall.
Ok, so what we want is some kind of web of trust. Maybe with end-to-end connectivity and end-to-end authentication. You could then decide, like with PGP, who you trust (who your friends are), if you trust the people your friends trust, with whitelists and blacklists. You trust your friends friends but not one level deeper, and you do not trust the friends of this and that guy, because you don't know them too well. That might be fun.
This thoughts moved with me to the next talk I attended, about social networks not based on one server or one application but on OpenID and technology like that. You don't have to put your information to studivz or facebook (which I really hate, btw.). It's a web application that on the one hand can collect feeds from other networks (flicker, twitter, whatever). On the other hand you can add information about hobbies and all that. All this stuff is then stored and transmitted with the page view in some XML data structure, embedded in the HTMl as comments. You can add friends from the same page or from other pages/providers/whatever, as long as their software speaks the same protocol. Since all this information is available in a machine-readable form, you could view it with the formatting you like and all that. A friend is simply one link, and all the information on the end of that link.
So the system can collect information from friends, create some dashboard-like thing,... but at this stage it's all unencrypted, even without authentication, if I know correctly. So it gets worse, since more and more information is put together in one place and it's machine readable. Caused by the fact, that it's a distributed system and without authentication stuff, you can add all the people you like as friends and they won't have to accept the friendship, so it's a one-way relation and not two-way as we're used to it. Lots of problems and strange things.
But if we take that one level further, we get something really nice. A web of trust (!). Add some authentication and public key infrastructure. Friendships are signing other peoples public keys then. You can say it's a two way friendship, with signing each others keys and all that. The application (your social network client) could then check, if the profiles of your friends are readable and if they posted signed public keys of you (two-way friendship). If a friend of your friend has not so strict privacy policies (like studivz default), you can check whose keys he signed and all that. Your friends friends tool can check how many hops there are needed to reach you (less than three? You get all information) or maybe if some trustworthy organization (University, city, club, whatever) signed your key and therefore decide which information to give you. Lots of things are possible.
And what's the problem with all of this? Why don't we do that or have it already? Well, the problem is you. and you. Ok, maybe not, but your friends. You are interested in technology or at least some computer science if you read this. But your friends are not. Not all of them. they are at studivz or facebook and they are most likely the reason you're there. You still use ICQ or MSN because your friends don't understand why jabber is better. And they won't delete their facebook accounts and switch to some other application, because it's much more work (one more social thing to take care of) and there are not too many people there. And... did I mention, that they won't delete their facebook accounts, because they will loose friends? That's it.
One last point: A guy at the presentation asked if forums could be done in a distributed way. Well, they can. If you look at web forums the same way you look at the usenet (newsgroups, NNTP, you know? the real stuff?) and you give every person a newsserver and every person peers with every person who wants to know about that specific newsgroup... and if you then add a common time (this integer thing, which you change on every connection to max+1), then you have what you want. You can send messages to people, groups of people and channels. All that. Ok, it's a lot of overhead, but have you ever seen youtube, flash, all that web 2.0 stuff? You take some nice information and add overhead. It's all fine. It's all normal. and we have the hardware.
Connecting the dots, this is this years motto of mrmcd. And somehow it got me thinking during the day and followed me in the talks I attended.
First I went to a talk about tinc and BGP. It was about building VPNs using BGP to do all the routing and smart stuff. Since not too many things were working as expected (network problems, here) we talked about this and that. One guy asked, how tinc really worked, if it just connects to the hosts specified in the config file or if it exchanges information about neighbors and then creates new connections on its own, be it on demand or whatever. The homepage tells me something like that, but it's only about routing, I guess. What would be interesting is something new, smart, that creates new connections on demand.
On the other hand, sometimes this is not wanted. If you create a VPN with some friends, everything is fine. Everybody trusts everybody inside the VPN and everybody has full access. If some of your friends creates a connection with a new person, then you have the problem. There's only one weak link in the chain/network and some dubious guy has full access. What could you do, to prevent this? Get rid of routing, on the one hand. So only people you really added in the config file can be be connected to, but if one of the persons connected to you is again some kind of weak and enables routing/packet forwarding, you're back to the old problem. Well, maybe there wouldn't be a connection, since he can send packets to you but they will never return (no route), but that can be enough to have a problem. Another solution for this would be a firewall.
Ok, so what we want is some kind of web of trust. Maybe with end-to-end connectivity and end-to-end authentication. You could then decide, like with PGP, who you trust (who your friends are), if you trust the people your friends trust, with whitelists and blacklists. You trust your friends friends but not one level deeper, and you do not trust the friends of this and that guy, because you don't know them too well. That might be fun.
This thoughts moved with me to the next talk I attended, about social networks not based on one server or one application but on OpenID and technology like that. You don't have to put your information to studivz or facebook (which I really hate, btw.). It's a web application that on the one hand can collect feeds from other networks (flicker, twitter, whatever). On the other hand you can add information about hobbies and all that. All this stuff is then stored and transmitted with the page view in some XML data structure, embedded in the HTMl as comments. You can add friends from the same page or from other pages/providers/whatever, as long as their software speaks the same protocol. Since all this information is available in a machine-readable form, you could view it with the formatting you like and all that. A friend is simply one link, and all the information on the end of that link.
So the system can collect information from friends, create some dashboard-like thing,... but at this stage it's all unencrypted, even without authentication, if I know correctly. So it gets worse, since more and more information is put together in one place and it's machine readable. Caused by the fact, that it's a distributed system and without authentication stuff, you can add all the people you like as friends and they won't have to accept the friendship, so it's a one-way relation and not two-way as we're used to it. Lots of problems and strange things.
But if we take that one level further, we get something really nice. A web of trust (!). Add some authentication and public key infrastructure. Friendships are signing other peoples public keys then. You can say it's a two way friendship, with signing each others keys and all that. The application (your social network client) could then check, if the profiles of your friends are readable and if they posted signed public keys of you (two-way friendship). If a friend of your friend has not so strict privacy policies (like studivz default), you can check whose keys he signed and all that. Your friends friends tool can check how many hops there are needed to reach you (less than three? You get all information) or maybe if some trustworthy organization (University, city, club, whatever) signed your key and therefore decide which information to give you. Lots of things are possible.
And what's the problem with all of this? Why don't we do that or have it already? Well, the problem is you. and you. Ok, maybe not, but your friends. You are interested in technology or at least some computer science if you read this. But your friends are not. Not all of them. they are at studivz or facebook and they are most likely the reason you're there. You still use ICQ or MSN because your friends don't understand why jabber is better. And they won't delete their facebook accounts and switch to some other application, because it's much more work (one more social thing to take care of) and there are not too many people there. And... did I mention, that they won't delete their facebook accounts, because they will loose friends? That's it.
One last point: A guy at the presentation asked if forums could be done in a distributed way. Well, they can. If you look at web forums the same way you look at the usenet (newsgroups, NNTP, you know? the real stuff?) and you give every person a newsserver and every person peers with every person who wants to know about that specific newsgroup... and if you then add a common time (this integer thing, which you change on every connection to max+1), then you have what you want. You can send messages to people, groups of people and channels. All that. Ok, it's a lot of overhead, but have you ever seen youtube, flash, all that web 2.0 stuff? You take some nice information and add overhead. It's all fine. It's all normal. and we have the hardware.
Wednesday, August 20. 2008
My Routerboard 433
Some weeks ago I finally decided to order parts for a router for my home network and some days ago they arrived. Now I own a nice little Routerboard 433 (by Mikrotik, a MiniPCI WLAN adapter called Wistron Weben CM9, some antennas, a case, a power supply and what else I need for it. I already fould the time to play around with it for one day: I got it assembled, it boots the internal RouterOS without a problem, I set it to boot via bootp (and dhcp), set up bootp (and dhcp) (the servers) on my workstation and had a small success: It gets an IP address and loads the kernel image I tell it to load. Then I see the line "jumping to kernel code" and nothing from there. Nothing on the serial console, no beeps, no ping returns, nothing. Really really sad. But I knew it might get hard.
So today I tried looking into it some more. I went away from OpenWRT and tried to build a cross toolchain using Gentoo's crossdev. Well, I failed.
I hope I will get this to work some time soon. And I hope that one day I will not be too lazy to post pictures.
So today I tried looking into it some more. I went away from OpenWRT and tried to build a cross toolchain using Gentoo's crossdev. Well, I failed.
I hope I will get this to work some time soon. And I hope that one day I will not be too lazy to post pictures.
Monday, June 30. 2008
I want a new laptop (Part III) - Netbooks
I bought my iBook because it was small and silent and had a quite long battery life. I also want those features in my new machine. I have my deskop computer and really like the big screen with 1600x1200 pixels. To have that in a laptop is almost impossible, and i don't want it. I want a small mobile maching combined with a stationary powerfull workstation. Thererfore i've been looking into netbooks and the like, the Eee PC, HP 2133 Mini-note and all those other Eee clones. But they don't seem to be there yet. They all are missing some stuff.
The Eee PC with 7" display has a too small display and too small resolution, I think. The keyboard isn't that good, either. I held it in my hand and was just not satisfied. The 900 seems to be a good start, i have not seen it yet "in person", but the tests I read only criticised the keyboard. It's still a little too small. This is better in the Aspire One by Acer and it should also in the HP 2133, according to tests. The Acer also has the new Intel Atom CPU, which really sounds interesting. The Eee PC 901 will have an Atom CPU, too, but it's not sold, yet, I think. But back to the others. The Acer really sounds good and looks good, I will try to get one in my hand for trying asap.. "Get one in my hand" in that case means go to Saturn or Media Markt or wherever they have it. I'm not one of those big testing websites.
The most interesting laptop before I heared about the Aspire One was the HP. Because it was more professional line. Yesterday I read a test about it and they wrote some ood things and some rather bad things: The case and display and Keyboard are told to be great. But the software on it is not. At least not the linux. I don't remember the details. Also the CPU has not that much power and they wrote about "viewing YouTube in full-screen" as not-working-that-good. That's actually one thing I miss about my desktop pc, too. To be able to watch videos in a really good quality. And I thought VIA CPUs were good for that stuff, because of special media whatever acceleration. Another thing I personally dislike is the ability to combine the components. If you want linux, you have to tae one of the slowest models. If you want bluetooth, you can not. If you want flash memory instead of a conventional disk drive, you need the smallest one and you have only 4 GB. Or was it 2 GB? Well, it's both not enough. Also, if I want the Gig of RAM, i have to take Windows Vista, I think. No thanks. Dell does that better (and I don't really call them good).
So, to conclude: Asus might have created this new kind of laptops, but they focus too muc on the "fucking small" part. I'm more interested in something like a subnotebook or something in between that and a netbook, though. Why do I want something more like a netbook? Because I don't need that much power and I don't have that much money. Acer is going into a good direction, I think. I will have look into that, but i cannot say that Acer has earned any trust from me so far. I'm not sure yet if they can really build good laptops. HP is on a good way, making the Eee PC more bussines-y, but they're only on their way, yet. I'll have to wait.
The Eee PC with 7" display has a too small display and too small resolution, I think. The keyboard isn't that good, either. I held it in my hand and was just not satisfied. The 900 seems to be a good start, i have not seen it yet "in person", but the tests I read only criticised the keyboard. It's still a little too small. This is better in the Aspire One by Acer and it should also in the HP 2133, according to tests. The Acer also has the new Intel Atom CPU, which really sounds interesting. The Eee PC 901 will have an Atom CPU, too, but it's not sold, yet, I think. But back to the others. The Acer really sounds good and looks good, I will try to get one in my hand for trying asap.. "Get one in my hand" in that case means go to Saturn or Media Markt or wherever they have it. I'm not one of those big testing websites.
The most interesting laptop before I heared about the Aspire One was the HP. Because it was more professional line. Yesterday I read a test about it and they wrote some ood things and some rather bad things: The case and display and Keyboard are told to be great. But the software on it is not. At least not the linux. I don't remember the details. Also the CPU has not that much power and they wrote about "viewing YouTube in full-screen" as not-working-that-good. That's actually one thing I miss about my desktop pc, too. To be able to watch videos in a really good quality. And I thought VIA CPUs were good for that stuff, because of special media whatever acceleration. Another thing I personally dislike is the ability to combine the components. If you want linux, you have to tae one of the slowest models. If you want bluetooth, you can not. If you want flash memory instead of a conventional disk drive, you need the smallest one and you have only 4 GB. Or was it 2 GB? Well, it's both not enough. Also, if I want the Gig of RAM, i have to take Windows Vista, I think. No thanks. Dell does that better (and I don't really call them good).
So, to conclude: Asus might have created this new kind of laptops, but they focus too muc on the "fucking small" part. I'm more interested in something like a subnotebook or something in between that and a netbook, though. Why do I want something more like a netbook? Because I don't need that much power and I don't have that much money. Acer is going into a good direction, I think. I will have look into that, but i cannot say that Acer has earned any trust from me so far. I'm not sure yet if they can really build good laptops. HP is on a good way, making the Eee PC more bussines-y, but they're only on their way, yet. I'll have to wait.
(Page 1 of 1, totaling 12 entries)
