dertyp: auf die Schnelle

immer quick. manchmal auch dirty.

The History of Python: Why Python's Integer Division Floors [the more you know]

Why Python's Integer Division Floors

I was asked (again) today to explain why integer division in Python returns the floor of the result instead of truncating towards zero like C.

For positive numbers, there's no surprise:

>>> 5//2
2

But if one of the operands is negative, the result is floored, i.e., rounded away from zero (towards negative infinity):

>>> -5//2
-3
>>> 5//-2
-3

This disturbs some people, but there is a good mathematical reason. The integer division operation (//) and its sibling, the modulo operation (%), go together and satisfy a nice mathematical relationship (all variables are integers):

a/b = q with remainder r

such that

b*q + r = a and 0 <= r < b

(assuming a and b are >= 0).

If you want the relationship to extend for negative a (keeping b positive), you have two choices: if you truncate q towards zero, r will become negative, so that the invariant changes to 0 <= abs(r) < otherwise, you can floor q towards negative infinity, and the invariant remains 0 <= r < b. [update: fixed this para]

In mathematical number theory, mathematicians always prefer the latter choice (see e.g. Wikipedia). For Python, I made the same choice because there are some interesting applications of the modulo operation where the sign of a is uninteresting. Consider taking a POSIX timestamp (seconds since the start of 1970) and turning it into the time of day. Since there are 24*3600 = 86400 seconds in a day, this calculation is simply t % 86400. But if we were to express times before 1970 using negative numbers, the "truncate towards zero" rule would give a meaningless result! Using the floor rule it all works out fine.

Other applications I've though of are computations of pixel positions in computer graphics. I'm sure there are more.

For negative b, by the way, everything just flips, and the invariant becomes:

0 >= r > b.

So why doesn't C do it this way? Probably the hardware didn't do this at the time C was designed. And the hardware probably didn't do it this way because in the oldest hardware, negative numbers were represented as "sign + magnitude" rather than the two's complement representation used these days (at least for integers). My first computer was a Control Data mainframe and it used one's complement for integers as well as floats. A pattern of 60 ones meant negative zero!

Tim Peters, who knows where all Python's floating point skeletons are buried, has expressed some worry about my desire to extend these rules to floating point modulo. He's probably right; the truncate-towards-negative-infinity rule can cause precision loss for x%1.0 when x is a very small negative number. But that's not enough for me to break integer modulo, and // is tightly coupled to that.

PS. Note that I am using // instead of / -- this is Python 3 syntax, and also allowed in Python 2 to emphasize that you know you are invoking integer division. The / operator in Python 2 is ambiguous, since it returns a different result for two integer operands than for an int and a float or two floats. But that's a totally separate story; see PEP 238.

Posted

7 Reasons to Switch to the Dvorak Keyboard Layout

7 Reasons to Switch to the Dvorak Keyboard Layout

“Something’s wrong with your keyboard,” a friend borrowing my laptop would say. “When I type, all that comes out is gibberish!”

“Nothing’s wrong with my keyboard,” I would reply with a grin. “It’s the layout on your keyboard that’s wrong!”

Click image to enlarge.

What usually follows is a long lecture on how the Dvorak keyboard layout is better than QWERTY in every way. My friends usually humor me — this has happened several times — but I’ll spare you the sermon and make it short. Out of the hundreds of reasons you should switch to Dr. Dvorak’s layout, here are seven:

1. QWERTY was designed for the typewriter, not the typist.

Christopher Sholes, who invented the typewriter, found that early prototypes of his invention had a mechanical flaw: When he struck neighboring keys in rapid succession, the typewriter jammed. He needed to replace the initial alphabetical layout with one that separated keys often struck successively. Thus the QWERTY layout was born. This did not solve the problem entirely, but it made the machine jam a lot less.

Good for the typewriter. But what about the typist? While QWERTY was designed so that the typewriter could work, Dvorak was designed so that the typist could work well.

2. Dvorak increases your speed.

Typists base their fingers on the home row of the keyboard. If you want to increase typing speed, the home row is where you place the most commonly typed keys . Which is exactly what Dr. Dvorak did in his layout — 70% of keystrokes are on the home row; 22%, on the top row; 8%, on the bottom.

In QWERTY, only 32% of keystrokes are on the home row. Which means most of the time, typists’ fingers are either reaching up for the top row (52%) or down for the bottom row (16%). So not only does QWERTY do nothing for typists, it actually hinders them.

Dvorak further increases typing speed by placing all vowels on the left side of the home row, and the most commonly used consonants on the right side. This guarantees that most of your strokes alternate between a finger on your right hand (consonant) and a finger on your left (vowel). Alternating between fingers from either hand is faster — just imagine texting with one hand or drumming with one stick.

3. Dvorak lessens your mistakes.

Not only is Dvorak faster than QWERTY, it’s also more accurate. Errors occur more when you type away from the home row, or consecutively with the same finger. When you combine the two problems (using the same finger to type consecutive letters not on the home row) you make even more mistakes.

Reaching away from the home row, typing consecutively with the same finger — these happen more often in QWERTY. And so do mistakes.

4. Dvorak is more comfortable and better for your health.

Although its only your fingers that do the extra reaching in QWERTY, the distance adds up. A study compared the distance traveled by the fingers of two typists in performing the same task. In Dvorak, the typists fingers traveled 1.5 km per day; In QWERTY, 30 km per day. This extra distance increases not only the likelihood of errors but the stress on your fingers.

The discomfort is often temporary. But with the amount of typing we do today — plus the prevalence of QWERTY keyboards — it is not uncommon for the pain to progress to repetitive strain injury. Some RSI sufferers have reported some relief from taking breaks, doing stretches, improving posture, and of course, switching to Dvorak.

5. Switching to Dvorak is easier than ever.

Studies have shown that Dvorak is easier to learn than QWERTY. If you already touchtype with QWERTY, it’s even easier, because you already have the finger coordination needed for touchtyping. There are online resources on learning Dvorak and a ton of typing games for practice.

But where do you get the keyboards? Today, keyboards with the Dvorak layout (or that can switch to Dvorak) are available if you wish to buy one. But you won’t even have to. Most operating systems allow users to make Dvorak their default keyboard layout. You can also make it easy to switch between layouts, but trust me — you won’t want to.

6. Dvorak is cool.

Aside from getting friends and coworkers to type gibberish on your computer (a useful security measure, by the way) Dvorak has other cool benefits. Using Dvorak puts you in an exclusive club — like having a Mac instead of a PC. But aside from mere prestige, you can flaunt your productivity and the ease with which you attain it.

You’ll also be in the company of some cool people, including Bram Cohen, inventor of BitTorrent; Matt Mullenweg, lead developer of WordPress; and Barbara Blackburn, world’s fastest typist.

7. Using Dvorak is a noble cause.

Dr. Dvorak created something great, but he died in vain.

“I’m tired of trying to do something worthwhile for the human race,” he said, realizing his failure to convince people to adopt his layout. “They simply don’t want to change!”

QWERTY has remained the default keyboard layout for over a century. It has outlived the purpose for which it was designed, yet its weaknesses still remain. By switching to Dvorak, you are joining a movement that empowers typists and honors the legacy of a great man.

PG

Red Tani

Red Tani writes, designs, and consults for Redvisory, a communications consultancy he started in 2009. A former systems analyst, video game hacker, and Counter Strike sniping champion, he does all his computing a la Dvorak.



Ich schreibe jetzt seit ~5 Jahren mit Dvorak Type II (DE) und hatte seitdem keine Probleme mehr mit Sehnenscheidenentzündungen oder sonstigen RSI. Das Layout passt auch gut zum Programmieren. Insgesamt bin ich dadurch auch fast doppelt so schnell wie mit qwertz.

Posted

German Culture, Customs and Business Etiquette [the more you know]

Germans will be direct to the point of bluntness.

Wer mal wissen möchte, wie wir Deutschen so drauf sind, kann sich den verlinkten Text mal durchlesen. Auch andere Länder sind dort mindestens genau so detailliert beschrieben.

Posted

TGIF

Posted

Danke, lieber Zoll.

Meine minicards von moo sind beim Zoll gelandet, und ich durfte sie heute abholen.

Warum so etwas passiert, wenn der Absender in London, also in der EG, sitzt und der Warenwert unter 22€ liegt, konnte mir der nette und gemütliche Beamte leider nicht erklären.

"Der Zoll macht den Handel einfach und sicher" my ass.
Posted

Posted

Google Testing Blog: Code coverage goal: 80% and no less!

“I am ready to write some unit tests. What code coverage should I aim for?”

The great master replied:

“Don’t worry about coverage, just write some good tests.”

The young programmer smiled, bowed, and left.

Later that day, a second programmer asked the same question.

The great master pointed at a pot of boiling water and said:

“How many grains of rice should I put in that pot?”

The programmer, looking puzzled, replied:

“How can I possibly tell you? It depends on how many people you need to feed, how hungry they are, what other food you are serving, how much rice you have available, and so on.”

Exactly,” said the great master.

The second programmer smiled, bowed, and left.

Toward the end of the day, a third programmer came and asked the same question about code coverage.

“Eighty percent and no less!” Replied the master in a stern voice, pounding his fist on the table.

The third programmer smiled, bowed, and left.

After this last reply, a young apprentice approached the great master:

“Great master, today I overheard you answer the same question about code coverage with three different answers. Why?”

The great master stood up from his chair:

“Come get some fresh tea with me and let’s talk about it.”

After they filled their cups with smoking hot green tea, the great master began:

“The first programmer is new and just getting started with testing. Right now he has a lot of code and no tests. He has a long way to go; focusing on code coverage at this time would be depressing and quite useless. He’s better off just getting used to writing and running some tests. He can worry about coverage later.

The second programmer, on the other hand, is quite experience both at programming and testing. When I replied by asking her how many grains of rice I should put in a pot, I helped her realize that the amount of testing necessary depends on a number of factors, and she knows those factors better than I do – it’s her code after all. There is no single, simple, answer, and she’s smart enough to handle the truth and work with that.”

“I see,” said the young apprentice, “but if there is no single simple answer, then why did you tell the third programmer ‘Eighty percent and no less’?”

The great master laughed so hard and loud that his belly, evidence that he drank more than just green tea, flopped up and down.

“The third programmer wants only simple answers – even when there are no simple answers … and then does not follow them anyway.”

The young apprentice and the grizzled great master finished drinking their tea in contemplative silence.

Posted

CCC | Forderungen für ein lebenswertes Netz

Wir haben daher in klare Worte gefaßt, welche Errungenschaften erhalten und welche aktuellen Mißstände unserer Meinung nach angepackt werden müssen, welche Risiken für die Zukunft einer wettbewerbs- und lebensfähigen Gesellschaft im Netz wir sehen und wohin die Reise gehen soll. Diese Reise kann natürlich nur unter Mitnahme aller Bürger, die ausreichend schnell, unzensiert und unbevormundet an ein interaktives Netz angeschlossen sind, Fahrt aufnehmen.

Wir sehen es als Problem, wenn das Netz nur als Quell ewigen Übels wahrgenommen wird, welches streng reguliert und möglichst mehrwert-gerecht präsentiert werden muß. Als Abbild des Lebens hat der Markt im Netz seinen Platz – genau wie die Politik, aber keiner der Spieler darf zum übermächtigen Kontrolleur werden. Dazu muß der Staat mit gutem Beispiel vorangehen, darf sich nicht weiter in IT-Großprojekten über den Tisch ziehen lassen, muß die digitale Intimsphäre seine Bürger achten und selbst mit angemessener Transparenz für alle nachvollziehbar, am besten gar maschinenlesbar werden. Und wer Mißstände, Korruption und Datenskandale aufdeckt, muß belohnt, nicht geächtet und bestraft werden.

Dabei sollen die Netzbürger nicht bloß als statistische (Stör-)Größe in ausufernd wachsenden Datenbanken verbucht und verarbeitet werden. Im Gegenteil: Sie sind der Souverän und müssen im selbstbestimmten Umgang mit ihrem Netz ausgebildet werden. Dazu gehört, den Wert von Privatsphäre zu erkennen und mit den intimsten Geheimnissen achtsam umzugehen. Das Netz ist unsere gemeinsame Infrastruktur; unser Staat sollte sie aufbauen, hegen und pflegen, anstatt sich auf das Kleinhalten und Reglementieren zu konzentrieren.

Wir müssen Sorge tragen, daß Bedarfsträger und Verwertungsindustrie nicht mehr Provider und Webseitenbetreiber als Hilfssheriffs und Sündenböcke vor den Karren spannen können. Gleichzeitig müssen die seit langem konkret bekannten Fehlentwicklungen bei Fragen der Softwarepatente und des Urheberrechts korrigiert werden. Ohne neue Grundregeln für das Immaterialgüterrecht und eine Orientierung am Gemeinwohl statt an den wirtschaftlichen Interessen einiger weniger wird sich die Kluft zwischen Politikern und Internetgemeinde nur noch vertiefen.

Wir haben unseren Standpunkt in die folgenden elf Thesen zusammengefaßt, die wir hiermit zur Diskussion stellen.

 

Thesen zur Netzpolitik

1. Netzzugang ist ein Grundrecht und Bedingung für die Teilnahme am kulturellen und politischen Leben

Es ist Aufgabe des Staates, dafür Sorge zu tragen, daß alle Bürger Zugang zu breitbandigem Internet haben. Als Medium der Informationsbeschaffung löst das Internet den Fernseher ab, daher muß auch die Grundversorgung großzügig dimensioniert sein, damit sich jeder Bürger breitbandigen Netzzugang leisten kann. Auch darf der Entzug des Netzzugangs nicht als Strafe in Erwägung gezogen werden, weil das verhindern würde, daß Bürger am kulturellen und politischen Leben teilnehmen können.

2. Nutzen des Netzes kann sich nur entfalten, wenn die Netzneutralität garantiert ist

Kein Zugangsanbieter darf nach inhaltlichen Kriterien Einfluß auf die Verfügbarkeit, Priorisierung oder Bandbreite der weitergeleiteten Daten nehmen. Einflußnahme ist generell nur akzeptabel, wenn das dem Kunden gegenüber transparent und Teil der Vertragsbedingungen ist und tatsächlich ein Kapazitätsengpaß besteht, also der Einfluß dazu dient, allen Kunden einen fairen Teil der bestehenden Kapazität zuteil werden zu lassen.

Ein Zugangsanbieter dürfte etwa – wenn das im Vertrag steht – allen Kunden die Bandbreite beschränken, um eine Mindestbandbreite für Telefonie zu reservieren, weil Telefonate sonst gar nicht gingen. Beim Beschränken der Bandbreite dürfte er aber nicht die weiterzuleitenden Daten durchleuchten und etwa nur manche Dienste beschränken.

3. IT-Großprojekte der öffentlichen Hand nach sinnvollen Kriterien vergeben

Es sollen in Zukunft die sachpolitischen Fragen im Vordergrund stehen. Das Konzept und die Vergabe von staatlichen IT-Projekten sollen nicht weiterhin als bloße Förderprojekte für die IT-Industrie betrachtet werden. Es ist stets auch eine vorsichtige Abwägung zwischen Bürokratieabbau und zentralisierter Datenerfassung zu bedenken.

In Deutschland werden nicht selten IT-Projekte vergeben, denen es an sinnvoller Begründung und sachkundiger Konzeption mangelt. Regelmäßig scheitern sie auf ganzer Linie. Vom digitalen Behördenfunk über die Finanzamts-Software, über den "Exportschlager" Mautinfrastruktur bis hin zum "Exportschlager" Gesundheitskarte bietet das staatlich geförderte Portfolio reihenweise Rohrkrepierer.

4. Öffentliche Daten transparent handhaben

Mit Steuermitteln finanzierte Ergebnisse und Inhalte müssen allgemeinfrei werden. Der Staat hat dafür zu sorgen, daß sie im Internet für jeden verfügbar sind. Patente auf Ergebnisse, die aus Steuermitteln finanziert wurden, sind unzulässig.

Die Allgemeinheit betreffende Daten wie statistische Erhebungen, Wetterdaten, geographische Daten und Karten, Satellitenaufnahmen etc. fallen auch unter diese Regelung, selbst wenn sie nicht mit Steuermitteln finanziert wurden.

5. Klare Absage an Softwarepatente

Softwarepatente bedrohen nicht nur die europäische Softwareindustrie, sondern auch das Internet selbst. Obwohl es laut Gesetz keine Softwarepatente gibt, hat das Europäische Patentamt hunderte von ihnen erteilt. Diese Patente sollen allesamt gestrichen werden. Es muß gesetzlich sichergestellt werden, daß es auch in Zukunft keine Softwarepatente gibt.

6. Urheberrechtgesetzgebung modernisieren

Der Urheberrechtsschutz darf nicht weiter ausufern. Die Durchsetzung der Rechte der Verwertungsindustrie hat zu einem massenhaften betriebenen Abmahn-Geschäftsmodell und damit zu einem Rechtsmißbrauch geführt. Wir fordern daher eine Bagatellgrenze für die Verfolgung von Verletzungen von Immaterialgüterrechten und die Einschränkung der Kosten bei der Durchsetzung gegen Privatleute ohne kommerzielle Vorteile aus der Verletzung. Die Schutzfristen für urheberrechtlich geschützte Werke sollen verkürzt werden, um die Allmende zu stärken.

Der Chaos Computer Club setzt sich für eine Neuregelung des Kompensationsmodells für Urheber ein. Ihre Rechte und ihre Unabhängigkeit von der Verwertungsindustrie sollen gestärkt werden. Der CCC wird hierzu eine eigene Idee für die Bezahlung vorstellen, welche die Idee der Kulturflatrate abwandelt.

7. Zugangsprovider haften nicht für die Daten ihrer Kunden

Neben den Zugangsprovidern soll auch die Haftung der Webseitenbetreiber für Daten ihrer Benutzer ausgeschlossen werden. Zugangsprovider und Betreiber von Webseiten sollen zudem nur in schwerwiegenden Kriminalfällen die persönlichen Daten ihrer Kunden und Benutzer offenbaren dürfen.

Diensteanbietern sollen ermuntert werden, keine Logdaten über ihre Benutzer zu erheben und nicht nach persönlichen Daten zu fragen.

8. Private Daten besser schützen

Für den Staat muß eine rigide Datensparsamkeitsregelung gelten. Daten, die nicht objektiv gebraucht werden, dürfen nicht erhoben werden. Anfallende Daten sind unverzüglich zu löschen, wenn kein Speicherzweck belegt werden kann. Hier sind keine könnte-würde-hätte-Argumentationen der Polizeilobby gültig, sondern ein konkreter und die Nachteile aufwiegender Nutzen muß nachgewiesen sein. Das Weitergeben von zu Unrecht erhobenen Daten sowie Datenmißbrauch sollen endlich mit empfindlichen Strafen bewährt werden.

Auch bestehende Regelungen müssen geprüft werden. Andere Länder kommen ganz ohne Personalausweis aus, etwa die USA und Großbritannien. Wieso brauchen wir einen Personalausweis, zumal einen mit biometrischen Daten und Online-Zugriff der Behörden auf die Ausweisdaten? Wieso darf unser Paß biometrische Daten enthalten? Biometrische Ausweisdokumente mit funkendem Mikrochip sind nicht sinnvoll begründet, daher soll ihre Verbreitung nicht fortgeführt werden.

9. Recht auf Anonymität etablieren

Anonymität ist ein wichtiges Gut, sowohl in der realen Welt als auch im Internet. Für die politische Willensbildung ist es wichtig, daß Bürger sich informieren und diskutieren können, ohne sich beobachtet oder verfolgt zu fühlen. Authentizität im Internet darf nicht zu Lasten der Anonymität gehen und nicht durch erkennungsdienstliche Behandlung erkauft werden.

Wir fordern daher, daß Betreiber bestehender anonymer Kommunikationsmöglichkeiten wie etwa Tor nicht weiter Verfolgung und Repressalien ausgesetzt werden, sondern eindeutig gesetzlich geklärt wird, daß sie nicht für über ihre Dienste getätigte Äußerungen belangt werden dürfen. Die vermehrten Beschlagnahmen von Computern, die Anonymisierungsdienste betreiben, sind zu beenden. Dies gilt umso mehr, da Menschen aus nicht-demokratischen Staaten auf die Bereitstellung solcher Dienste angewiesen sind.

10. Profilbildung über Menschen verhindern

Im Internet verbreitete Daten betreffen die Privatsphäre der Bürger und lassen das Erstellen umfangreicher Persönlichkeitsprofile zu. Sie müssen daher stark geschützt werden. Dies betrifft sowohl die Nutz- als auch die Bewegungsdaten. Die Zusammenführung von Daten ermöglicht zusätzliche Einblicke in die Privatsphäre der Bürger. Daher soll datenschutzrechtlich dafür gesorgt werden, daß auch jemand, der legal Zugriff auf mehrere Datenbanken hat, daraus für ihn nicht das Recht auf Zusammenführung der Daten folgt.

Datenverschlüsselung als Mittel zum informationellen Selbstschutz ist ein Grundrecht und darf nicht beschnitten werden. Dazu gehört auch, daß niemand gezwungen werden kann, seine Paßwörter oder Schlüssel offenzulegen.

11. Whistleblower-Schutz verbessern

Whistleblower müssen geschützt und dürfen nicht verfolgt werden. Keiner, der den Mut zeigt, verborgene Mißstände öffentlich zu machen, darf benachteiligt werden. Wer unbequeme Wahrheiten auch unter persönlicher Gefahr ausspricht und weitergibt, soll daher gesetzlich geschützt werden.

 

Links:

[1] Chaosradio-Sendung "Hier stehen wir und können nicht anders: CCC-Thesen zur Netzpolitik": http://chaosradio.ccc.de/cr158.html

[2] Thomas de Maizière: "14 Thesen zu den Grundlagen einer gemeinsamen Netzpolitik der Zukunft" http://www.bmi.bund.de/cae/servlet/contentblob/1099988/publicationFile/88667/thesen_netzpolitik.pdf

[3] Spickzettel des CCC für digitale Bürgerrechte http://ccc.de/de/updates/2009/pm-spickzettel

 

via ccc.de

Posted

Toyota Sudden Acceleration Is Driver Error [/.]

"The NHTSA has investigated data recorders from Toyota cars whose owners claimed to have crashed due to an accelerator error. They found that the throttles were wide open and the brakes weren't being pressed. The investigation looked at a sample of the cars, selected by the NHTSA."

Ist ja auch nicht leicht, bei zwei Pedalen das richtige zu treffen.

Posted

♬ 'Smells Like Teamspirit' - Blumentopf ♪

♬ 'Smells Like Teamspirit' - Blumentopf ♪
Posted