{"id":11243,"date":"2016-03-24T22:15:57","date_gmt":"2016-03-24T21:15:57","guid":{"rendered":"https:\/\/tuxproject.de\/blog\/?p=11243"},"modified":"2016-03-24T22:16:58","modified_gmt":"2016-03-24T21:16:58","slug":"nope-js","status":"publish","type":"post","link":"https:\/\/tuxproject.de\/blog\/2016\/03\/nope-js\/","title":{"rendered":"Nope.js"},"content":{"rendered":"<p><em>(Vorbe\u00admerkung: Meine per\u00ads\u00f6n\u00adlichen Erfahrun\u00adgen mit Node.js beschr\u00e4nken sich au\u00dfer der test\u00adweisen Instal\u00adla\u00adtion von <a href=\"https:\/\/github.com\/ether\/etherpad-lite\">Ether\u00adpad Lite<\/a> auf den zumin\u00add\u00adest erfol\u00adgre\u00adichen Ver\u00adsuch, eine Desk\u00adtopan\u00adwen\u00addung mit <a href=\"http:\/\/electron.atom.io\">Elec\u00adtron<\/a> zu schreiben. Diese Anwen\u00addung wird allerd\u00adings zun\u00e4chst in ein\u00ader anst\u00e4ndi\u00adgen Sprache neu imple\u00admen\u00adtiert, bevor ich sie f\u00fcr hier ver\u00f6f\u00adfentlichungstauglich halte; auch, weil Node.js eine schlicht unbrauch\u00adbare Pro\u00adgram\u00admierumge\u00adbung ist.)<\/em><\/p>\n<p>Dieser Tage geht <a href=\"http:\/\/www.golem.de\/news\/npm-ueber-250-node-module-wegen-markenstreit-offline-1603-119953.html\">das NPM-Debakel<\/a> durch deutsche Tech\u00adnikme\u00addi\u00aden, das sich etwa fol\u00adgen\u00adder\u00adma\u00dfen zusam\u00admen\u00adfassen l\u00e4sst: Der Entwick\u00adler ein\u00ader bekan\u00adnten und viel genutzten JavaScript-Bib\u00adlio\u00adthek, die aus einem Zufall her\u00adaus genau so hei\u00dft wie ein\u00ader der zahlre\u00adichen ICQ-Klone, wird von den Mach\u00adern dieses ICQ-Klons darum gebeten, den Namen zur eige\u00adnen Ver\u00adwen\u00addung freizugeben; er bietet ihnen kulant an, dass sie ihm den Namen <a href=\"https:\/\/medium.com\/@mproberts\/a-discussion-about-the-breaking-of-the-internet-3d4d2a83aa4d\">abkaufen<\/a> k\u00f6n\u00adnen, sie lehnen ab und dro\u00adhen stattdessen den Mach\u00adern von \u201cnpm\u201d, einem gro\u00dfen Verze\u00adich\u00adnis von JavaScript-Bib\u00adlio\u00adtheken, mit rechtlichen Schrit\u00adten, wenn sie den Namen f\u00fcr ihre geplante Bib\u00adlio\u00adthek nicht freigegeben bekom\u00admen. Der Entwick\u00adler der ein\u00adgangs erw\u00e4h\u00adn\u00adten Bib\u00adlio\u00adthek bekommt also \u201cseinen\u201d Namen von Drit\u00adten ent\u00adzo\u00adgen und zieht daraufhin ver\u00adst\u00e4ndlicher\u00adweise erbost all seine Pro\u00adjek\u00adte aus dem Verze\u00adich\u00adnis zur\u00fcck, woraufhin offen\u00adsichtlich ein bedeut\u00adsamer Teil der dort aufge\u00adf\u00fchrten Pro\u00adjek\u00adte, darunter gro\u00dfe Frame\u00adworks wie <a href=\"http:\/\/reactjs.net\/\">React.js<\/a>, pl\u00f6t\u00adzlich nicht mehr funk\u00adtion\u00adierte, weil sie ihrer\u00adseits f\u00fcr triv\u00adiale Auf\u00adgaben (dazu komme ich gle\u00adich) auf seinen Code zur\u00fcck\u00adge\u00adgrif\u00adf\u00aden haben.<\/p>\n<p>Nun k\u00f6n\u00adnte man dar\u00fcber spekulieren, wer hier eigentlich \u201cdie Schuld\u201d tr\u00e4gt und ob der Kap\u00adi\u00adtal\u00adis\u00admus nicht drin\u00adgend abgeschafft wer\u00adden sollte, um solche Stre\u00adit\u00adigkeit\u00aden um Marken\u00adrechte k\u00fcn\u00adftig nicht mehr zu lukra\u00adtiv\u00aden Nebenein\u00adnah\u00admen machen zu k\u00f6n\u00adnen. Dabei liegt das Prob\u00adlem viel n\u00e4her \u2014 das Prob\u00adlem hei\u00dft Node.js.<\/p>\n<p><!--more-->Dass man JavaScript bess\u00ader nicht f\u00fcr ern\u00adsthafte Pro\u00adgram\u00admierung <a href=\"http:\/\/www.tamagothi.de\/2011\/09\/13\/warum-javascript-unbrauchbar-ist\/\">nutzen sollte<\/a>, ist l\u00e4ngst kalter Kaf\u00adfee (macht also, wie der Volksmund behauptet, fast so sch\u00f6n wie ein D\u00f6n\u00ader), und das nicht nur, weil JavaScript im Jahr 2016 das Haupte\u00adin\u00adfall\u00adstor f\u00fcr Schad\u00adsoft\u00adware im Brows\u00ader ist. Nun ist es bedauer\u00adlicher\u00adweise immer noch Kon\u00adsens, dass <em>dynamis\u00adche<\/em> Inhalte im Brows\u00ader in JavaScript geschrieben sein soll\u00adten, sieht man von <a href=\"https:\/\/common-lisp.net\/project\/parenscript\/\">Paren\u00adscript<\/a>, <a href=\"https:\/\/kripken.github.io\/emscripten-site\/\">Emscripten<\/a> und <a href=\"https:\/\/github.com\/jashkenas\/coffeescript\/wiki\/list-of-languages-that-compile-to-js\">vie\u00adlen weit\u00aderen Pro\u00adjek\u00adten<\/a> ab, die das Schreiben von JavaScript in ein\u00ader richti\u00adgen Pro\u00adgram\u00admier\u00adsprache erm\u00f6glichen und dem Entwick\u00adler bis zur Fer\u00adtig\u00adstel\u00adlung wenig\u00adstens die Syn\u00adtax vom Hals hal\u00adten. Daran l\u00e4sst sich nichts so ein\u00adfach \u00e4ndern, das ist eine Entschei\u00addung der\u00ader, die irgendwelche w\u00fcsten \u201cStan\u00addards\u201d fes\u00adtle\u00adgen.<\/p>\n<p>Node.js ver\u00adfol\u00adgt einen anderen Ansatz: Im Kern aus V8, der JavaScript-Kom\u00adpo\u00adnente von <em>aus\u00adgerech\u00adnet<\/em> Googles Chrome-Brows\u00ader, beste\u00adhend zielt es auf die Ver\u00adwen\u00addung in Net\u00adzw\u00aderkan\u00adwen\u00addun\u00adgen, sozusagen als Ersatz f\u00fcr Perl, PHP, Python und der\u00adgle\u00adichen, v\u00f6l\u00adlig los\u00adgel\u00f6st vom Brows\u00ader. Nicht, dass das bess\u00ader w\u00e4re, denn die wesentlichen Schwierigkeit\u00aden der Sprache JavaScript hat Node.js <em>nat\u00fcr\u00adlich<\/em> auch, dort \u00fcblich ist es aber, sie zu kaschieren, indem man die vorhan\u00addene Sprach\u00adstruk\u00adtur bis zur Unken\u00adntlichkeit mit Code fremder Leute auf\u00adbl\u00e4ht: <a href=\"http:\/\/www.commitstrip.com\/en\/2016\/03\/17\/too-full-stack\/\">Hier noch ein Frame\u00adwork, da noch eine Bib\u00adlio\u00adthek<\/a>, zusam\u00admengek\u00adlebt mit aller\u00adlei Hokus\u00adpokus mit Funk\u00adtio\u00adnen, die <em>niemals daf\u00fcr gedacht<\/em> waren. Dabei sind die Auf\u00adgaben oft triv\u00adial: <a href=\"https:\/\/twitter.com\/ThePracticalDev\/status\/707561057242447872\">Welch\u00ades Frame\u00adwork soll ich nutzen, um zwei Zahlen zu addieren?<\/a> \u2014 Nein, das ist nat\u00fcr\u00adlich nur ein Scherz, diese Frage hat nie\u00admand tat\u00ads\u00e4ch\u00adlich gestellt. Anscheinend w\u00e4re aber in der Welt von Node.js keine Frage zu bl\u00f6d, um sie mit einem neuen \u201cPaket\u201d zu beant\u00adworten; nen\u00adnen wir hier zum Beispiel doch nur ein\u00admal diejeni\u00adgen, die sich Pakete wie <a href=\"https:\/\/www.npmjs.com\/package\/noop4\">noop4<\/a> (\u201cno oper\u00ada\u00adtion 4\u201d) aus\u00addenken, das nach der Instal\u00adla\u00adtion daf\u00fcr genutzt wer\u00adden kann, <em>\u00fcber\u00adhaupt nichts<\/em> zu tun. Weil\u2019s der Neugi\u00ader dient: <em>Nat\u00fcr\u00adlich<\/em> gibt es auch \u201cnoop\u201d 1 bis 3.<\/p>\n<p>Fefe hat der\u00adweil <a href=\"https:\/\/blog.fefe.de\/?ts=a80de7d8\">her\u00adaus\u00adge\u00adfun\u00adden<\/a>, dass es sog\u00adar <a href=\"https:\/\/www.npmjs.com\/package\/is-positive\">ein Paket<\/a> (in Ver\u00adsion 3.1.0, ich wieder\u00adhole: 3.1.0) gibt, das pr\u00fcft, ob eine Zahl pos\u00adi\u00adtiv ist, was ja in anderen Sprachen (oder hei\u00dft das heute alles \u201c\u00d6kosys\u00adtem\u201d?) ein <em>ver\u00addammtes Sprach\u00adfea\u00adture<\/em> ist, was einiges erk\u00adl\u00e4rt: Eine <em>typ\u00adis\u00adche<\/em> Node.js-Anwendung beste\u00adht \u00fcber\u00adwiegend aus <em>dem Code fremder Leute<\/em>. Wenn da irgend\u00adwo ein tief\u00adgreifend\u00ader Fehler passiert, stelle ich mir die Fehler\u00adsuche zumin\u00add\u00adest als angemessene Strafe vor. Die in seinem Blog\u00ada\u00adr\u00adtikel erw\u00e4h\u00adn\u00adten PHP-Entwick\u00adler \u2014 zu denen ich vor ein\u00ader Weile auch beru\u00adflich noch z\u00e4hlte \u2014 als \u00e4hn\u00adlich <em>niedrigstu\u00adfig<\/em> anzuse\u00adhen halte ich \u00fcbri\u00adgens f\u00fcr etwas zu kurz gedacht, weil es anders als in Python, Perl <em>und so weit\u00ader<\/em> in PHP schlicht nicht n\u00f6tig ist, die Stan\u00addard\u00adbib\u00adlio\u00adtheken um ein Vielfach\u00ades zu \u201cerweit\u00adern\u201d. W\u00e4hrend ich \u00fcbri\u00adgens diesen Text hier konzip\u00adierte, kam ich mit einem <em>typ\u00adis\u00adchen Node.js-Entwickler<\/em> ins Gespr\u00e4ch, dessen Ergeb\u00adnis zusam\u00admenge\u00adfasst lautete, dass ich zweifels\u00adfrei ein \u201cPEGIDA\u201d unter\u00adst\u00fctzen\u00adder Neon\u00adazi sei, weil ich wahrheits\u00adgem\u00e4\u00df behauptete, in meinen bish\u00ader f\u00fcn\u00adfzehn Jahren mit PHP <em>kein einziges \u201cPHP-Frame\u00adwork\u201d<\/em> wie das \u201cZend Frame\u00adwork\u201d oder \u201cSym\u00adfony\u201d benutzt haben zu m\u00fcssen, weil ich dort zumin\u00add\u00adest ser\u00adver\u00adseit\u00adig <em>mein Zeug<\/em> gern mal selb\u00adst schreibe, damit ich wei\u00df, wo alles ste\u00adht. So weit ist es schon gekom\u00admen, dass man sich von Hip\u00adstern anp\u00f6\u00adbeln lassen muss, weil man sich nicht grund\u00ads\u00e4t\u00adzlich auf frem\u00adden Code ver\u00adlassen m\u00f6chte.<\/p>\n<p>Ich schweife (schon wieder) ab. Was ich eigentlich fest\u00adgestellt haben wollte: Node.js richtet sich wie Java offen\u00adsichtlich an Leute, die nicht pro\u00adgram\u00admieren, son\u00addern nur <em>frem\u00adden Code zusam\u00admen\u00adkleben<\/em> wollen. Egal, wie ein\u00adfach eine Meth\u00adode selb\u00adst zu imple\u00admen\u00adtieren ist, <em>es hat schon wer gemacht<\/em> und deswe\u00adgen h\u00e4ngt man lieber eine zus\u00e4t\u00adzliche Abh\u00e4ngigkeit in sein Pro\u00adgramm. Ein Paket, das mit einem Einzeil\u00ader (!) \u00fcber\u00adpr\u00fcft, ob eine Vari\u00adable ein Array ist, hat <a href=\"http:\/\/www.haneycodes.net\/npm-left-pad-have-we-forgotten-how-to-program\/\">880.000 Down\u00adloads<\/a> pro Tag.<\/p>\n<p>Und dann stellen sich die gle\u00adichen BWL-Schlip\u00adstr\u00e4ger, die schon mit dem sturzfreien Adressieren ein\u00ader E\u2011Mail \u00fcber\u00adfordert sind, aber von Fir\u00admen viel zu hoch daf\u00fcr bezahlt wer\u00adden, dass sie ihnen rat\u00aden, <em>gef\u00e4l\u00adligst<\/em> immer auf das neueste Frame\u00adwork zu set\u00adzen, egal, wie ger\u00ading der Mehrw\u00adert auch sein mag, was unver\u00admei\u00addlich dazu f\u00fchrt, dass solche Tech\u00adniken, die immer\u00adhin <em>wertvolle Minuten<\/em> beim allse\u00admes\u00adtri\u00adgen Umstieg sparen, zus\u00e4t\u00adzlichen Auftrieb erhal\u00adten, vor das erst\u00adbeste Mikro\u00adfon und bekla\u00adgen sich, dass heute <em>kein\u00ader<\/em> mehr anst\u00e4ndig pro\u00adgram\u00admieren kann.<\/p>\n<p>So viele Mit\u00adtelfin\u00adger kann ich mir gar nicht wach\u00adsen lassen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Vorbe\u00admerkung: Meine per\u00ads\u00f6n\u00adlichen Erfahrun\u00adgen mit Node.js beschr\u00e4nken sich au\u00dfer der test\u00adweisen Instal\u00adla\u00adtion von Ether\u00adpad Lite auf den zumin\u00add\u00adest erfol\u00adgre\u00adichen Ver\u00adsuch, eine Desk\u00adtopan\u00adwen\u00addung mit Elec\u00adtron zu schreiben. Diese Anwen\u00addung wird allerd\u00adings zun\u00e4chst in ein\u00ader anst\u00e4ndi\u00adgen Sprache neu imple\u00admen\u00adtiert, bevor ich sie f\u00fcr hier ver\u00f6f\u00adfentlichungstauglich halte; auch, weil Node.js eine schlicht unbrauch\u00adbare Pro\u00adgram\u00admierumge\u00adbung ist.) Dieser Tage geht \u2026<\/p>\n<p><a href=\"https:\/\/tuxproject.de\/blog\/2016\/03\/nope-js\/\" class=\"more-link\">\u2018Nope.js\u2019 weit\u00ader\u00adlesen \u00bb<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wp_typography_post_enhancements_disabled":false,"footnotes":""},"categories":[8,19],"tags":[],"series":[],"class_list":["post-11243","post","type-post","status-publish","format-standard","hentry","category-netzfundstucke","category-nerdkrams"],"share_on_mastodon":{"url":"","error":""},"wp-worthy-pixel":{"ignored":false,"public":null,"server":null,"url":null},"wp-worthy-type":"normal","_links":{"self":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/11243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/comments?post=11243"}],"version-history":[{"count":0,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/11243\/revisions"}],"wp:attachment":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/media?parent=11243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/categories?post=11243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/tags?post=11243"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/series?post=11243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}