Posts in category projekt

Objective-C Metaprogrammierung: Blöcke zu Methoden

Die Ruby Welt verwendet Blöcke (Closures) liebend gerne für alles mögliche. Zum Beispiel als Builder-Methapher um Baumstrukturen (XML, GUI's, HTML, Tests) in der Sprache hinzuschreiben und dann nur noch in die Target-Sprache zu rendern.

Das sieht in Tests zum Beispiel so aus:

describe "something" do

  it "should do fnord" do
    someObject.should be_fnordy
  end

end

Der Trick dabei ist das alles von do bis end jeweils ein Block ist der von der Methode describe oder it dann in eine UnitTest Klassenstruktur eingehängt wird um dann später als 'ganz normale' unit tests ausgeführt zu werden.

Jetzt wo Objective-C auch Blöcke unterstützt (ok, die können natürlich weniger als das Ruby Equivalent) müsste das eigenltich auch gehen - und siehe da mit  Cedar gibt es auch schon einen ersten Versuch  RSpec in Objective-C nachzubauen.

Well und daher habe ich mir mal angeschaut wie weit man denn kommt wenn man in Objective-C einen Block in eine Instanz-Methode umwandeln will.

Gleich vorneweg - das Typ-System von Objective-C macht mir hier einen kleinen Strich durch die Rechnung - ich habe es nicht geschafft einen Block nicht direkt als Funktions-pointer verwenden.

Aber mit etwas Umweg geht es doch.

Der Trick ist das Blöcke auch id's sein können, d.h. man kann sie bequem in ein NSMutableDictionary packen.

Also brauche ich auf meiner Klasse nur ein Dictionary, speichere die Blöcke darin mit dem Namen der Methode ab und baue mir einen generischen Dispatcher-IMP der den Selector (zweites unsichtbares Argument jeder Objective-C Methode) verwendet um den Block aus aus dem Dictionary zu ziehen und führe ihn dann einfach aus.

So sieht dass dann aus

jQuery editInPlace

Well, I just finished some major reworking of that jQuery plugin, so now it has a real testsuite and conforms to the  jQuery Plugin Guidelines and doesn't pollute the core prototypes (of String) anymore.

There are a few new features, most prominent the ability to define a class to apply for the hover effect (so you can style the hover in css instead of having to hand in the colors directly and more control over the way errors are presented so it is easier to embed into bigger applications.

So enjoy  the demo and  the download while they are hot, and keep a bookmark to  the project homepage. :)

Stuff I'd like to note:

  •  JSpec rocks, writing tests with it is a breeze. The DOM Testrunner they have could use some work though to become even more usefull
  • Writing the tests with no dom insertion is a _great_ technique to get a fast testsuite where you can almost guarantee that it has no test-ordering issues.
  • jQuery allows you to almost completely drive the interaction with the editor as a user would, making it almost like an acceptance test (and with very little dependency on the internal working of the editor.
  • Refactoring JavaScript Code is hard if you don't have a testsuite. My Advice: Break it down into smaller bits. I found it incredibly hard to refactor larger pieces of the code, as not having a testsuite means there's no way you know what still works. :/

OpenWRT

Funkt.

Jetzt endlich sogar kabellos verbunden mit meiner restlichen Infrastruktur.

Schon spannend was das System alles an Paketen mitbringt.

  • Aircrack-ng
  • Aircrack-ptw
  • etc...

Die volle Ausstattung um Unsinn zu treiben. :-)

Dazu noch die Pläne der Freifunker, einen La Fonera Router mit Notebook-Baterien im Rucksack liegen zu haben, der Mesh und gleichzeitig vorhandene Netze Attakieren öffnen kann...

:-)

Leider kann das gegenwärtige OpenWRT noch keinen AdHoc Modus gleichzeitig mit etwas anderem anbieten (sonst könnte der Accesspoint bis zu 4 Netzwerke gleichzeitig anbieten) so dass es nicht möglich ist, das er über ein Normales WLAN Netz sein Internet bezieht und diesen dann über das Mesh weiter gibt.

Andererseits gibt es den  La Fonera Pack, der auf das normale Fonera zusätzlich zu der Fonera Dienstleistung noch das Meshing anbietet.

Also muss es wohl doch irgendwie gehen.

Nur wie?

Diplomarbeit

Nach langer, langer Arbeit habe ich jetzt meine Diplomarbeit abgegeben. Puah. Für mich war es neben einer riesigen Anstrengung auch eine sehr befriedigende Tätigkeit, zu sehen das ich in der Lage bin ein Thema so umfassend zu behandeln. Nebenbei habe ich und mein Mitschreiber in der Arbeit auch eine ganze Menge experimentiert und ausprobiert wie sich Wiki-Technologie und  Kollaborative Editoren zum Schreiben von Wissenschaftlichen Arbeiten eignen. Dazu und wie wir dabei auftretende Probleme gelöst haben später mehr. :)

Angefertigt habe ich die Diplomarbeit im  Fachbereich Informatik und Gesellschaft der TU-Berlin mit  Andreas Janson zusammen.

Abstract

„It‘s the end of the world as we know it - and I feel fine.“ - R.E.M.

Filesharing-Technologien ermöglichen es erstmals, alles aufgezeichnete Wissen weltweit zugänglich zu machen, weil es die Kosten des Kopierens von Informationen drastisch verringert. In der bisherigen Debatte um Filesharing wurde diese Chance größtenteils ignoriert und stattdessen wurden angebliche negative Auswirkungen hervorgehoben, die bisher nicht wissenschaftlich belegt werden konnten. Wir betrachten diese Debatte als Informatiker und stellen fest, dass die Auswirkungen von Filesharing auf die Gesellschaft ohne ein Verständnis der zugrundeliegenden Technologien leicht fehlinterpretiert werden können. Schon der zentrale Begriff ‚Filesharing‘ wird in den unterschiedlichsten Bedeutungen verwendet, obwohl er durch die dahinterliegende Technologie eindeutig definiert ist. Aus der von Eigeninteressen geprägten Sichtweise der Inhalteindustrie wird Filesharing vor allem als ein Werkzeug von ‚Piraten‘ gesehen. Aus dieser Sichtweise heraus hat die Musikindustrie seit der Gründung von Napster 1999 zahlreiche Maßnahmen zur Bekämpfung von Internettauschbörsen ergriffen, über die wir hier erstmals einen umfassenden Überblick geben. In ihrer Argumentation unterschlägt sie die Vorteile, die Filesharing-Netzwerke für Verbraucher bieten: Das Internet ist allen anderen bekannten Netzwerken in der Distribution von Inhalten überlegen. Es gefährdert damit nicht nur das bisherige Vertriebsmonopol der vier großen Plattenfirmen - es ermöglicht auch ein neue Produktionsform: die Produktion unter Gleichen. Daraus erwächst ein Demokratiepotential bisher unerreichter Qualität. Gleichzeitig wird ersichtlich, dass die Gesetze zum Schutz geistigen Eigentums, die auf Drängen der Inhalteindustrie erlassen werden, der ursprünglichen Aufgabe von Schutzrechten nicht gerecht werden: Sie fördern die Erstellung von geistigem Eigentum nicht optimal und machen Inhalte schwerer zugänglich. Letztlich bedingt die Filesharing-Technologie auch, dass sich das Tauschen urheberrechtlich geschützter Inhalte nicht unterbinden lässt. Das wäre gesamtgesellschaftlich auch wenig sinnvoll, denn Filesharing ist die technische Umsetzung der Norm des Teilens, die das zentrale Paradigma der Wissensgesellschaft darstellt und deshalb in Zukunft immer weiter an Bedeutung gewinnen wird. Es bleibt daher nur ein logischer Schluss - die Vorteile des Filesharings schnellstmöglich zu nutzen.

  • Posted: 2007-03-18 16:43 (Updated: 2009-10-24 16:20)
  • Author: dwt
  • Categories: projekt
  • Comments (0)