I use USAA for some of my finances. They specialize in remote banking (i've never been in a physical branch). Sadly, they can still be pretty clueless about how to use the web properly. My latest frustration with them was trying to use their Deposit@Home service, where you scan your checks and upload them. No problem, right? I've got a scanner and a web browser and i know how to use them both. Ha ha. Upon first connecting, i'm rejected, and i find the absurd System Requirements -- only Windows and Mac, and only certain versions of certain browsers. You also need Sun's Java plugin, apparently. Deliberately na ve, i call their helpdesk and ask them if they could just give me a link to let me upload my scanned checks. They tell me that they want 200dpi images, and then give an absurd runaround that includes references to the Gramm-Leach-Bliley Act as the reason they need to limit the system to Windows or Mac, and that security is the reason they need to control the scanner directly (apparently your browser can control your local scanner on Windows? yikes). But they let slip that Mac users don't have the scanner controlled directly, and can just upload images (apparently the federal law doesn't cover them or something). Preposterous silliness. The Workaround Of course, it turns out you can get it working on Debian GNU/Linux, mainly by telling them what they want to hear ("yes sir, i'm running Mac OS"), but you'll also have to run Sun's Java (non-free software) to do it, since their Java uploader fails with nasty errors when using icedtea6-plugin. I set up a dedicated system user for this goofiness, since i'm going to be running apparently untrustworthy applets on top of non-free software. I run a separate instance of iceweasel as that user; all configuration described is for that user's homedir. If you do this yourself, You'll need to decide if you want the same level of isolation for yourself. So i have the choice of installing sun-java6-plugin from non-free and having the plugin installed for all web browsers, or just doing a per-user install of java for my dedicated user (and avoiding the plugin for my normal user). I opted for the latter. As the dedicated user, I fetched the self-extracting variant from java.com, unpacked it, and added it to the iceweasel plugins: chmod a+x ~/Download/jre-6u25-linux-i586.bin mkdir -p ~/lib ~/.mozilla/plugins cd ~/lib ~/Download/jre-6u25-linux-i586.bin ln -s ~/lib/jre*/lib/*/libnpjp2.so ~/.mozilla/plugins/Then i closed iceweasel and restarted it. In the relaunched iceweasel sesson, I told Iceweasel 4 to pretend that it was actually Firefox 3.6 on a Mac. I did this by going to about:config (checking the box that says i know what i'm doing), right-clicking, and choosing "new >> string". The new variable name is general.useragent.override and i found that setting it to the following (insane, false) value worked for me:
Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.9.2.3) Gecko/20060426 Firefox/3.5.18Note that this configuration might make hotmail think that you are a mobile device. :P If you try to use this browser profile for anything other than visiting USAA, you might want to remove this setting, or install xul-ext-useragentswitcher to be able to set it more easily than using about:config. Once these changes were made, I was able to log into USAA, use the Deposit@Home service to upload my 200dpi grayscale scans. I guess they think i'm a Mac user now. The Followup After completing the upload, I wrote them this review (i doubt they'll post it):
The Deposit@Home service has great potential. Unfortunately, it currently appears to be overengineered and unnecessarily restrictive. The service requires two scans (front and back) of the deposited check, at 200dpi, in grayscale or black-and-white, in jpeg format, reasonably-cropped. The simplest way to do this would be to show some examples of good scans and bad scans, and provide two file upload forms. Once the user uploaded their images, the web site could run its own verification, and display them back for the user to confirm, optionally using a simple javascript-based image-cropper if any image seems wrong-sized. This would work fine with any reasonable browser on any OS. Instead, Deposit@Home requires the user to present a User-Agent header claiming to be from specific versions of Mac or Windows, running certain (older) versions of certain browsers, and requires the use of Sun's Java plugin. Entirely unnecessary system requirements to do a simple task. Disappointing. :(Acknowledgements I found good background for this approach on the ubuntu forums. The Takeaway I continue to be frustrated and annoyed by organizations that haven't yet embraced the benefits of the open web. Clearly, USAA has spent a lot of money engineering what they think is a certain experience for their users. However, they didn't design with standard web browsers in mind, so they appear to have boxed themselves into a corner where they think they have to test and approve of the entire software stack running on the end-user's machine. This is not only foolish -- it's impossible. When you're designing a web-based application, just design it for the web. Keep it simple. If you want to offer some snazzy java-hooked-into-your-scanner insanity, i will only have a mild objection: it seems like a waste of time and engineering effort. My objection is much stronger if your snazzy/incompatible absurdity is the only way to use your service. A simple, web-based, browser-agnostic interface should be available to all your clients. Even more aggravating is the claim that they don't think they should engineer for everyone. I was told during the runaround that they would only support Linux if 4% of their users were using Linux (which they don't think is the case at the moment -- if you are a USAA customer, and you use something other than Mac and Windows, please tell them so). I tried to tell them that I wasn't asking for Linux support; i was asking for everyone support. If you just use generic engineering in the first place, there's no extra expense for special-casing other users. But they couldn't understand. And now, since i'll need to lie to them in my User Agent string every time i want to deposit a check online, those visits won't even show up in their logs to be counted. "Our web site deliberately disables itself for $foo users; we haven't written it for them; but that's OK, we don't have any $foo users anyway" is a nasty self-fulfilling prophecy. Why would you do that?
The Linux kernel attempts to protect portions of its memory from unexpected modification (through potential future exploits) by setting areas read-only where the compiler has allowed it (CONFIG_DEBUG_RODATA). This, combined with marking function pointer tables const , reduces the number of easily writable kernel memory targets for attackers.
However, modules (which are almost the bulk of kernel code) were not handled, and remained read-write, regardless of compiler markings. In 2.6.38, thanks to the efforts of many people (especially Siarhei Liakh and Matthieu Castet), CONFIG_DEBUG_SET_MODULE_RONX was created (and CONFIG_DEBUG_RODATA expanded).
To visualize the effects, I patched Arjan van de Ven s arch/x86/mm/dump_pagetables.c to be a loadable module so I could look at /sys/kernel/debug/kernel_page_tables without needing to rebuild my kernel with CONFIG_X86_PTDUMP.
Comparing Lucid (2.6.32), Maverick (2.6.35), and Natty (2.6.38), it s clear to see the effects of the RO/NX improvements, especially in the Modules section which has no NX markings at all before 2.6.38:
lucid-amd64# awk '/Modules/,/End Modules/' /sys/kernel/debug/kernel_page_tables grep NX wc -l 0 maverick-amd64# awk '/Modules/,/End Modules/' /sys/kernel/debug/kernel_page_tables grep NX wc -l 0 natty-amd64# awk '/Modules/,/End Modules/' /sys/kernel/debug/kernel_page_tables grep NX wc -l 762.6.38 s memory region is much more granular, since each module has been chopped up for the various segment permissions:
lucid-amd64# awk '/Modules/,/End Modules/' /sys/kernel/debug/kernel_page_tables wc -l 53 maverick-amd64# awk '/Modules/,/End Modules/' /sys/kernel/debug/kernel_page_tables wc -l 67 natty-amd64# awk '/Modules/,/End Modules/' /sys/kernel/debug/kernel_page_tables wc -l 155For example, here s the large sunrpc module. RW is read-write, ro is read-only, x is executable, and NX is non-executable:
maverick-amd64# awk '/^'$(awk '/^sunrpc/ print $NF ' /proc/modules)'/','!/GLB/' /sys/kernel/debug/kernel_page_tables 0xffffffffa005d000-0xffffffffa0096000 228K RW GLB x pte 0xffffffffa0096000-0xffffffffa0098000 8K pte natty-amd64# awk '/^'$(awk '/^sunrpc/ print $NF ' /proc/modules)'/','!/GLB/' /sys/kernel/debug/kernel_page_tables 0xffffffffa005d000-0xffffffffa007a000 116K ro GLB x pte 0xffffffffa007a000-0xffffffffa0083000 36K ro GLB NX pte 0xffffffffa0083000-0xffffffffa0097000 80K RW GLB NX pte 0xffffffffa0097000-0xffffffffa0099000 8K pteThe latter looks a whole lot more like a proper ELF (text segment is read-only and executable, rodata segment is read-only and non-executable, and data segment is read-write and non-executable). Just another reason to make sure you re using your CPU s NX bit (via 64bit or 32bit-PAE kernels)! (And no, PAE is not slower in any meaningful way.)
Curious about these shiny new things i keep hearing about, i set up a test desktop system using using systemd as the init system (yes, that means using systemd-sysv in place of sysvinit -- so i had to remove an essential package for this to work). A system-crippling bug was naturally the result of living on the bleeding edge, but fortunately it was resolved with a trivial patch. In all, i'm pretty happy with some of the things that systemd seems to get right. For example, native supervision of daemon processes, clean process states, elimination of initscript copy-paste-isms, and socket-based service initiation are all obvious, marked improvements over the existing sysvinit legacy cruft. But i'm a bit concerned about other parts. For example, all the above-mentioned features fit really well within a tightly-tuned, well-managed server. But systemd also appears to rely heavily on complex userland systems like dbus and policykit that would be much more at home on a typical desktop machine. I've never seen a well-managed server installation that warranted either policykit or dbus. Also, given the bug i ran into -- when PID 1 aborts due to a silly assertion, your system is well-and-truly horked. Shouldn't a lot more attention to detail be happening? I'd think that a "recover gracefully from failed assertions" approach would be the first thing to target for a would-be PID 1. I'm also concerned about the Linux-centricism of systemd. I understand that features like cgroups and reliance on the spiffiness of inotify are part of the appeal, but i also really don't want to see us stuck with only One Single Kernel as an option. The kFreeBSD folks (and the HURD folks) have done a lot of work to get us close to having some level of choice at this critical layer of infrastructure. It'd be good to see that possibility realized, to help us avoid the creeping monoculture. I worry that systemd's over-reliance on Linux-specific features is heading in the wrong direction. So my question is: why is this all being presented as a package deal? I'd be pretty happy if i could get just the "server-side" features without incurring the dbus/policykit/etc bloat. I already run servers with runit as pid 1 -- they're lean and quite nice, but runit doesn't have systemd's socket-based initiation (or the level of heavyweight backing that systemd seems to have picked up, for that matter). I understand that Lennart is resistant to UNIX's traditional "do one thing; do it well" philosophy. I can understand some of his reasoning, but i think he might be doing his work and his tools a disservice by taking it this far. Wouldn't systemd be better if it was clearer how to take advantage of parts of it without having to subscribe to the entire thing? Of course, i might be missing some nice ways that systemd can be effectively tuned and pared down. But i've read his blog posts about systemd and i haven't seen how to get some of the nice features without the parts i don't want. I'd love to be pointed to some explanations that show me how i'm wrong :)Tags: systemd
Since my latest announcement of the Lua workshop, I received a couple of emails asking why I discourage the use of Lua. Actually, I already wrote out many of the things I dislike about Lua. I won't come back on this technical issues here, but since Lua 5.2 is not yet released (it's still at alpha stage), they are still relevant nowadays. Stack based API is harder
The ease of integration of Lua into a C program is one of the point of Lua. They claim it's very easy to integrate Lua into your C application, because it does not use pointer, nor reference counting, nor anything that requires a minimum amount of skills to be used. It uses a virtual stack based approach. You push or pop things on a stack, and refers to them using a relative or absolute index. In order to people who never wrote Lua code to understand, here's a quick example on how this work. The L pointer is a Lua environment.
/* Create a table on the stack: index 1 */ lua_newtable(L); /* Push a string on the stack: index 2 */ lua_pushstring(L, "hello"); /* Push a number on the stack: index 3 */ lua_pushnumber(L, 123); /* Set newtable["hello"] = 123 */ lua_settable(L, -3);You first push a table (in Lua, a table is almost equivalent to what you'd call a hash table in other language), then push the key, the value, and do the assignment operation. In the settable, we use -3 as index, meaning the "3rd item on the stack counting from top". We could also have written lua_settable(L, 1), since the table is also the first item on the stack from the bottom. So far, so good. Problems arise when you do more complicated stuff. My previous example is what you would typically find in a tutorial, but of course, real life is different, and usually more complex. If you cut the things in different parts, it can start to be more complicated. Let's take a look at the following:
/* Create a table on the stack: index 1 */ lua_newtable(L); /* Push a string on the stack: index 2 */ lua_pushstring(L, "hello"); /* Push a number on the stack: index 3 */ lua_pushnumbe(L, mycomputingfunction()); /* Set newtable["hello"] = 123 */ lua_settable(L, -3);Here, we do exactly the same thing, but we do not push 123 directly: we compute it. And here's the trick: if your computing function is also using the Lua stack, things can become very messy. As long as your computing function use the stack cleanly by pushing and poping all its item, and returning the stack in the same state it was before, you're safe. The problem is that in a complex program, you also write bugs. You do not chose to, but you do. And sometimes, you forget to pop one of the item you fetched from a table. Imagine that mycomputingfunction is:
int mycomputingfunctiong(void) /* Just push the table we want to fetch the number from on the stack */ pushatableonstack(L); lua_pushstring(L, "mykey"); lua_gettable(L, -2); return lua_tonumber(L, -1);This function works perfectly. It pushes a table, then a key ("mykey"), then fetches mytable["mykey"] and pops the key (lua_gettable does push value/pop key itself), and then returns the numeric value of the last item (the fetched one) of the stack. However, this function has a bug: it does not pop the table! This does not prevent the function to work. It does not raise a segmentation fault. It does not show any problem under gdb. It does not show any leak under Valgrind. It does now show any problem under any standard C debugging tool. But when you'll start using it, your program will start to do weird things, and you'll have to spend a huge amount of time debugging it manually, dumping the stack content at each step of your program to watch out what's wrong. Another bad thing, that can happen, is some code poping accidentally an item from the stack, or worst, from an empty stack. This does not raise any error on the Lua side, but will break your program in very unfunny way. Even if I've been very meticulous writing awesome, but we hit that problem regularly. The easiest workaround is to use lua_settop(L, 0) to reset the stack to 0 element. Doing this regularly (like after each program event or treatment) can remove left-over items and avoid the never ending stack grow you may experience if your left-over items continue to pile up. Did I tell you I dislike work-around? You could also use lua_call(), which would avoid such an error, but this would require a huge amount of indirection, and would make write more (useless) code. This kind of problem does not exists with pointer based API. If you screw things up, the problem will cause a segmentation fault or leak memory, or cause things you can (easily) debug with standard tools like gdb or Valgrind. No reference counting is a pain in the ass
Userdata objects are variable Lua size objects embedding a C struct you define. It's the equivalent of an object in object oriented language. Lua does not provide any reference counting for the userdata objects. That means you can push this objects on the stack, use them, but they cannot directly reference each others. If you have a "car" userdata and a "wheel" one, the car cannot hold directly a reference to the wheel. This is not possible because userdata are allocated and garbage collected by Lua, and there's no way to increase the reference counting yourself. So the common hack is to store the wheel into a table as a value, and store the table index as an integer into the car data structure. This obviously makes memory leaks tracking harder, add huge level of reference indirection in usage (still more code), and does not make the whole process less error prone (at least in my opinion). No paradigm makes you lose time
Lua is proud to come with no paradigm and to provide metatables. I already showed 3 years ago that it has big flaws. To me, this ain't no good. Lua is not functional, nor it is object oriented. Most people, including me, want one of this paradigm, or any else. Plain old imperative is not enough. So you'll start to build more, or to use something like LOOP, which implements an object model. You'll implement your paradigm. I say life is too short to (re)write a paradigm. In awesome we wanted to have an object oriented approach (this is kind of typical in such a graphical application context), so we tried to build one. To me, this started to be a show stopper when I realized that I've ended writing Python object model into Lua while developing awesome (which aims to be a window manager, not a language). This is one of the reason I stopped hacking on Lua things. I liked Python object model and wanted to have it in Lua, and spending time rewriting Python is just not worth it. I probably should have chose Python, not Lua. YMMV. Embedding may not be a good choice
This is not Lua related, but I want to mention it. Googling for "embedding vs extending" will probably tell you more about why you should double check that you really need to embed Lua rather than to extend it. Being small is not an excuse
One common argument to choose Lua is that it has a small footprint. Yeah, that's true, but that's useless. Bummer! When I program, I don't have any resource usage pressure. People who have such pressure are either paranoids or playing in the world of embedded computers. This is also a no more existing conception since quad core processors equiped phones are coming into the market. I'm rather confident that what we used to call embedded devices are just dead and are now plain computers. But as usual, YMMV. So start to forget about it, run in your underpants and yelling "yay we killed that shit!", and then use real computers stuff. :-) Even if benchmarks show how Lua is damn fast, remember what a benchmark proves: that you can do useless things very fast. Too few extension modules
This is not directly Lua's fault, but there's too few extension modules for Lua. The community is quite small compared to other big languages' ones. So think twice
before you choose Lua (or any other language). My recommendations these days
would be not to embed, but to extend. If you really have no choice and need
to embed a language into your application, GNU Guile is probably worth
considering, because it's a Scheme and therefore a functional language :-),
and because it can provides also different languages.
Including Lua.
This year we will have two more projects is GSoC comparing to last year, the chosen ones being:
Filed under: English Phpmyadmin 0 comments Flattr this!
I d like to extend a warm welcome to our new batch of students selected for the 2011 Debian Google Summer of Code!
They should soon be posting on Debian Planet and you re welcome to come talk to them on #debian-soc on irc.debian.org
Further details will be posted in the coming days to our wiki: http://wiki.debian.org/gsoc
Automated Multi-Arch Cross-Building and Bootstrapping
aka autocrossbuild , by Gustavo Prado Alkmim, mentored by Wookey
Since Debian is in GNOME3 transition period, after last dist-upgrade I lived on bare minimum of GNOME DE and its apps. basically all I had working right was Chromium and Terminal, instead of Rhythmbox I used mpg321, instead of Gedit it was Vim and so on, which is all fine except the fact it had me living in 2000 again.
It was all due to python-gtk2 version that was missing in Sid repositories. Furthermore, as I was unable to restart X and had my notebook on suspend after every login I had to retype my wifi passphrase due to a bug in gnome-keyring. I believe I did my part, reported the bugs and waited maintainers responsible for those packages to do something. But this situation went on for 8 days.
I remember the times when you couldn t fire up X for weeks, but after those days Unstable has gained reputation that it s not like that anymore, but after having a situation like this one, it makes me wonder.
Please, don t take this the wrong way, I mean no harm but the ultimate question that is brought up here is is this the price of bleeding edge?
*Update
As many of you came down on me with anger, let me say couple of things. First of all, when I first wrote this post I was kind of using it for venting. Second of all original title was Price of freedom as it sounds too confrontational and for some misleading I had it changed to Price of bleeding edge . What happened above could ve been avoided if I used safe-upgrade instead of dist-upgrade, as at the time I was just too tired and wasn t paying enough attention to the list of all the packages that are going to be removed.
I use Sid for few years now, and am of a opinion if used with attention it is the the best bleeding edge/devel distro out there. I wasn t ranting and am still of opinion that things like this need to be discussed among us, of course we can just stick to the line debian is the best and we re not going anywhere. Maybe I did go over the line with this attempt of positive criticism, but I really don t see nothing wrong with what I did here, as one of items from Debian Social Contract is We Won t Hide Problems thus let s talk about it.
Again, I apologize if I offended anyone, as point of this whole post wasn t of such nature.
Linux 2.6.38 and 2.6.39
As you've probably seen, the testing suite finally got a new
upstream kernel version (Linux 2.6.38) and is currently synchronised
with unstable. I'm just about to upload a new version of linux-2.6
based on upstream stable update 2.6.38.4.
Linux 2.6.39 is well on its way to release, so 2.6.39-rc4 should
soon be in experimental. The Debian source package will add support
for the new armhf (ARM with hardware floating-point) architecture.
Splitting linux-2.6
The linux-base package, introduced to handle transitions and other
support functions for 'image' packages, is now built from a separate
source package. It won't be changed very often, so you will no
longer need to upgrade linux-base every time you upgrade an 'image'
package. (This doesn't apply within 'squeeze', but I may have a
way to work around that.)
The firmware-linux-free package, containing a few firmware and
configuration blobs from Linux that are DFSG-compliant, is also now
built from a separate source package. These blobs have not changed
for a very long time, so again you will no longer be recommended to
upgrade this package every time you upgrade an 'image' package.
Secondly, this allows us to remove the entire 'firmware' directory
from the upstream source rather than carefully removing and patching
to leave just the DFSG-compliant bits.
Wireless regulations
The '2.4 GHz' and '5 GHz' ISM bands used for wifi are not defined
identically around the world. The exact frequency ranges and
maximum permitted power levels vary between countries. Radio
equipment manufacturers have a legal responsibility to ensure their
equipment operates within these regulations. Since it is expensive
to implement such regulations in hardware (including many different
variants for different regions), these restrictions are usually
implemented in the driver using a country code retrieved from the
hardware's EEPROM or flash. So this is now our responsibility.
We need to be able to look up regulations by country codes, and we
also need to support the case where a device sold in one country is
used in another country with tighter regulations. For some time,
the wifi configuration library (cfg80211) included regulatory
information for a small number of countries and regions. However,
the default since Linux 2.6.34 has been to build-in only the 'world'
domain (intersection of all the restrictions) and to request
information from user-space. In Debian, we didn't have anything to
provide this information, so for example channels 12-13 became
unavailable for users in Europe.
The regulatory information should be provided by the Central
Regulatory Domain Agent (CRDA) from a current database. These are
now packaged as crda and wireless-regdb
respectively. Drivers that do not use cfg80211 (mostly those from
the 'staging' area) will not be affected, and may or may not
implement correct regulations.
When you travel to another country or use an imported wifi device
with an incorrect country code (I hear 'CN' is common), you can
use iw reg set to ensure that your wifi devices operate
within the regulations of the country you are in. Set
the REGDOMAIN variable in
/etc/default/crda to make this persistent. These will
be intersected with the regulations specified by the
hardware.
Apologies for yet more politics; normal-ish service will be resumed
shortly, I hope.
I've just put the following into
the "BBC
News website feedback" form, but I doubt it will have any
impact. Quoting it here for the record...
The BBC news website appears to be showing a systemic bias over the AV
referendum. For the last few weeks, there has been regular coverage of
the referendum and it seems that there has been the usual blind
adherence to "balance" - every story about AV has included some of the
(incorrect, unscientific, even hate-filled) propaganda from the "no to
AV" campaign without critique or analysis. It's difficult to see any
justification for this except deliberate editorial bias, but I don't
imagine that there's much that can be done about that.
However, right now on the BBC News front page at
http://www.bbc.co.uk/news/ I
can see that there is a link "Referendum views" that points to yet
another opinion piece from a "No" campaigner
(Frederick
Forsyth). I only see a single view here, not the plural "views"
suggested. I don't see any positive view for AV promoted from the
front page at all, nor any link from this puff piece to the other
articles that have been written in the recent past. Looking further, I
can see that there *has*, in fact, been a positive piece on the News
Front Page today
(from Billy
Bragg) but there are no visible links to it any more. Both
articles were posted/updated at the same time this morning (22nd
April, 08:34 BST) yet now only the negative one remains. Very shoddy,
and not at all what I would expect from the BBC.
Meike Reichle is a Debian developer since 2008 but has been involved for longer than that, in particular in Debian Women. She s a great speaker and shared her experience in a Debconf talk.
She s also part of the Debian publicity team and managed the live coverage of the last release on identi.ca. Enough introduction, learn more about her by reading the interview. My questions are in bold, the rest is by Meike.
Who are you?
My name is Meike Reichle, I am a studied information scientist and work
as a project manager at Pengutronix, an embedded Linux company probably
best known for their ARM kernel work. I live in Germany, more exactly in
Lower Saxony, but I was originally born and raised in Swabia. Although I
moved here ten years ago I still have a rather strong Swabian cultural
identity. (Among other things I pride myself on having introduced a
number of fellow DDs to the true promise that are real hand-made Sp tzle
2 comments Liked this article? Click here. My blog is Flattr-enabled.
The last weeks I spend quite a lot of time hacking on a Python library for the AR.Drone. The AR.Drone is a nice toy for nerds. You connect to it via WIFI and soon you ll realize that it has 4 ports open. Reading the specs you ll find, that on one port it listens for AT-Commands with which you can remote control the drone, on the other two ports it waits for an incoming package which will trigger the drone to send the navdata (speed, angles, battery status, etc) and the video stream. Heck, you can even telnet into the drone
Unfortunately it comes without a proper software to control the drone, only an iPhone app (w/o iPhone of course). But given the documentation, it should be easy to write your own. While getting the beast to fly was relatively easy, decoding the almost -jpg-video-stream was not. Almost-jpg, since the images the drone sends are more or less jpg with a small difference which makes it impossible to decode them using standard multi-media libraries. Anyways, the format is documented and implementing a decoder was not that hard. The tricky part was to get the framerates from unacceptable 0.5 FPS to 12-22 FPS the whole decoder is written in Python. I m cheating a bit by using psyco, but the code in arvideo.py is heavily optimized to minimize calculations and to please psyco.
In the code is also a small demo app which uses Pygame to display the video stream and allows to control the AR.Drone with the keyboard. It should be ready-to-use as soon as you are connected to the drone via WIFI.
The git repository is here, the license is MIT. Suggestions and patches are welcome.
Here is a video of the drone flying through the office.
For marathon freaks, Boston marathon is a mythical one. Probably more
than New York marathon, because this is the world's oldest annual
marathon. Also because is is quite difficult to register for it (this
year, the 20,000 seats reserved for qualifiers were distributed
in....8 hours).
In order to qualify, runners must have a previous mark that depends on
their age and gender. For instance, in my age category (50-54), the
required mark for men is 3h30, something I never achieved yet. This is
what's required for the 2013 race. For 2012, it will be still 3h35,
but a rolling process will be held to give best runners priority.
So, in short, it will probably stay among my dream marathons
forever..:-)
The 2011 race happened yesterday and was a great event. Kenyan runners
Geoffrey Mutai and Moses Mosop even broke Haile Gebresselassie's world
record, set in Berlin, back in 2008. The ran in 2h03'02" while
Gebresselassie's mark is 2h03'59". However, this record will not
become official because Boston's race is one-way (thus with a
possibility of consistent tailwind) and has a too big altitude
difference between start and finish. However, many consider that hills
on the race compensate this quite strongly, so this year's time is a
really great time.
And, really, from all reports I read and all images I saw, the level
of support you get from the crowd is incredible there, with world
famous moments like Wellesley College "scream tunnel", or Kenmore
Square where, traditionnaly, the Red Sox have a game prior to marathon
and the crowd then goes from Fenway Park to Kenmore Square to cheer
the runners for their final mile (I have no idea how they can manage
the unpredictable length of a base-ball game).
And I can't even mention the final mile on Commonwealth Av., then
Bolston St. Everybody who ran this once says this is something you
have to do once in your life.
So, well, I'm still crossing fingers..:-)...Maybe, one day a miracle
happens, I can qualify *and* I get a seat and I fly to Boston...
Current mood: moved
Today is an amazingly great day. I wrote a blog post about an event that I put together, and an attendee then followed-up by writing a long-form comment.
The thing is, the attendee did a far better job of writing about the event than I did.
The amount of emotional positive reinforcement that this comment gave me is hard to overstate.
You can find it toward the end of the blog post but I hope you'll read the copy below.
I am stunned and awed. I guess I have my work set out for me.
8----< CUT HERE >-----8I have never written software for an open source project. I am not subscribed to any development mailing lists. I have not been in a chat room on IRC for months. Yet I was delighted to see this tweet from @torproject on 04/15/2011 https://blog.torproject.org/blog/vidalia-get-involved Join us in #vidalia on irc.oftc.net today at 13:00 UTC. The blog post described the Build It initiative for the Vidalia project, where people would be available to help you setup your build environment and compile the project. I have wanted to participate in open source projects for quite a while, but never really knew where to begin. I have experience (and enjoy) writing software. I am glad to learn the languages they are using. I know how to compile software. I m glad to learn their versioning system and build system. I looked into participating in several projects, but felt like I would be more of a burden than a help considering the relatively small amount that I was intending to contribute. I can generally figure anything out on my own, but it s nice to have somewhere to turn when you are struggling with something simple . I thought that this would be a perfect opportunity for me, since I already preach the use of Tor and Vidalia. I ve even demonstrated the bundle at a local LUG meeting. :) I joined the OFTC #vidalia room and waited nothing happened around 13:00 UTC, so I figured I d missed the event. They began around 13:30 UTC and walked us through the source code download process and compilation process. They directed our attention to the Volunteer page and the HACKING page. chiiph even suggested several simple OSX-specific tickets for me personally, since he knew that I was building on OSX. I ve already managed to contribute a patch for one ticket and am ready to begin a second ticket. I wouldn t have done it without help and feedback from chiiph and others. I am confident that there are many others who would be glad to help out with one or more of their favorite open source projects if they only had some place to begin. I hope that other project members or leaders offer a similar Build It events for their users. Jason Klein
Last week s post generated a lot of interest so I will make a small update to keep you posted on the status of GNOME 3 in Debian experimental.
Experimental is not for everybody
But first let me reiterate this: GNOME 3 is in Debian experimental because it s a work in progress. You should not install it if you can t live with problems and glitches. Beware: once you upgraded to GNOME 3 it will be next to impossible to go back to GNOME 2.32 (you can try it, but it s not officially supported by Debian). Even with the fallback mode, you won t get the same experience than what you had with GNOME 2.32. Many applets are not yet ported to the newest gnome-panel API.
So do not upgrade to it if you re not ready to deal with the consequences. It will come to Debian unstable and to Debian testing over time and it should be in a better shape at this point.
Good progress made
Most of the important modules have been updated to 3.0. You can see the progress here.
The exception is gdm, it still needs to be updated, the login screen looks quite ugly right now when using GNOME 3.
Frequently Asked Questions and Common Problems
Why do links always open in epiphany instead of iceweasel? You need to upgrade to the latest version on libglib2.0-0, gvfs and gnome-control-center in experimental. Then you can customize the default application used in the control center (under System Information > Default applications ).
You might need to switch to iceweasel 4.0 in experimental to have iceweasel appear in the list of browsers. Or you can edit ~/.local/share/applications/mimeapps.list and put x-scheme-handler/http=iceweasel.desktop;epiphany.desktop; in the Added Associations section (replace the corresponding line if it already exists and lists epiphany only).
The theme looks ugly, and various icons are missing. Ensure that you have installed the latest version of gnome-themes-standard, gnome-icon-theme and gnome-icon-theme-symbolic.
The network icon in the Shell does not work. Ensure you have upgraded both network-manager-gnome and network-manager to the experimental version.
Some applications do not start at all. If an application loads GTK2 and GTK3, it exits immediately with a clear message on the standard error output (Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported.). It usually means that one of the library used by that application uses a different version of GTK+ than the application itself. You should report those problems to the Debian bug tracking system if you find any.
Some people also reported failures of all GTK+ applications while using the Oxygen themes. Switching to another theme should help. BTW, the default theme in GNOME 3 is called Adwaita.
Where are my icons on the desktop? They are gone, it s by design. But you can reenable them with gsettings set org.gnome.desktop.background show-desktop-icons true and starting nautilus (if it s not already running). (Thanks to bronte for the information)
Why do I see all applications twice in the shell? The package menu-xdg generates a desktop file from the Debian menu information, those are in a menu entry that is hidden by default in the old GNOME menu. Gnome Shell doesn t respect those settings and displays all .desktop files. Remove menu-xdg and you will get a cleaner list of applications.
APT pinning file for the brave
Since last week, we got APT 0.8.14 in unstable and it supports pattern matching for package name in pinning files. So I can give you a shorter and more complete pinning file thanks to this:
Package: *gnome* libglib2.0* *vte* *pulse* *peas* libgtk* *gjs* *gconf* *gstreamer* alacarte *brasero* cheese ekiga empathy* gdm3 gcalctool baobab *gucharmap* gvfs* hamster-applet *nautilus* seahorse* sound-juicer *totem* remmina vino gksu xdg-user-dirs-gtk dmz-cursor-theme eog epiphany* evince* evolution* file-roller gedit* metacity *mutter* yelp* rhythmbox* banshee* system-config-printer transmission-* tomboy network-manager* libnm-* update-notifier shotwell liferea *software-properties* libunique-3.0-0 libseed-gtk3-0 libnotify* libpanel-applet-4-0 libgdata11 libcamel* libcanberra* libchamplain* libebackend* libebook* libecal* libedata* libegroupwise* libevent* gir1.2-* Pin: release experimental Pin-Priority: 500 Package: * Pin: release experimental Pin-Priority: 150Putting the file above in
/etc/apt/preferences.d/gnome and having experimental enabled in /etc/apt/sources.list should be enough to enable apt-get dist-upgrade to upgrade to GNOME 3 in experimental.
But if you have packages depending on libimobiledevice1, you might have to wait until #620065 is properly fixed so that libimobiledevice2 is co-installable with libimobiledevice1.
Update: integrated the explanation to reenable the desktop icons thanks to bronte s comment.
15 comments Liked this article? Click here. My blog is Flattr-enabled.
So we're just over 2 weeks away from our next set of local
elections in the UK (May 5th), and alongside those elections we're
also being asked about switching to a new voting system for future
elections. For a long time we've used the simple First Past The Post
(FPTP) system here, but now we have the possbility of moving to
Alternative Vote (AV) instead.
First Past The Post
FPTP is simple to understand - the person who receives more votes
than any single other person wins. But that simplicity is the only
good thing, and there are many problems with it. It's unfair: in an
election with 10 candidate, it's possible for a winner to have just
11% of the vote, even in the case where the other 89% of voters would
consider them to be the worst option. It's also very susceptible to
tactical voting, leading to nasty tactics in parties' election
literature like claiming "party foo cannot win here, so don't waste
your vote on them - vote for us instead!". See
this Wikipedia
article for more background.
Alternative Vote
AV is slightly more complicated. Instead of just placing a mark
against their single preferred candidate, voters are able to rank as
many of the candidates as they like. In the case that there is not a
clear winner with more than 50% of the votes from the initial count,
the lowest-ranked candidate is eliminated and second-choice votes from
their supporters are counted and re-distributed for the other
candidates. Iterate this process until one candidate gets more than
50% of the total votes. By re-calculating the votes this way,
supporters of less popular candidates / parties should no longer feel
the pressure to vote tactically and a more accurate picture of voter
intention should emerge. The downsides? AV will tend to lead to
slower, more expensive counting due to the potential for several
rounds. It's still not real proportional voting, but it's better than
FPTP in this
regard. Again, Wikipedia
has a good article about this subject.
Other options?
I'd be much happier to see discussion / trials of other voting
systems. For example,
Debian uses a variation on
Condorcet
called Cloneproof
Schwartz Sequential Dropping which is an excellent system for fair
voting, but it's very difficult to explain and
counting votes is comparatively very expensive. It's bad enough
getting ostensibly-intelligent Debian developers to understand this
system; extending this to a national election would be impossible in
my opinion. It's also not an option on the ballot here... :-)
Politicians spreading lies
I know this won't come as a major shock for a nationwide
referendum, but there's a lot of campaigning going on. And, in the
best traditions of political campaigning, there's a huge amount of
bullshit being spread. The worst is coming from the
"No to AV" campaign, as far as I
can see. Without many positive things to claim, various members of the
Conservative party (current government, with most to fear from a
change of voting system, of course) are spouting outright lies and
sowing FUD in all directions:
Next.