{"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>(Vor\u00adbe\u00admer\u00adkung: Mei\u00adne per\u00ads\u00f6n\u00adli\u00adchen Erfah\u00adrun\u00adgen mit Node.js beschr\u00e4n\u00adken sich au\u00dfer der test\u00adwei\u00adsen Instal\u00adla\u00adti\u00adon von <a href=\"https:\/\/github.com\/ether\/etherpad-lite\">Ether\u00adpad Lite<\/a> auf den zumin\u00addest erfolg\u00adrei\u00adchen Ver\u00adsuch, eine Desk\u00adtop\u00adan\u00adwen\u00addung mit <a href=\"http:\/\/electron.atom.io\">Elec\u00adtron<\/a> zu schrei\u00adben. Die\u00adse Anwen\u00addung wird aller\u00addings zun\u00e4chst in einer anst\u00e4n\u00addi\u00adgen Spra\u00adche neu imple\u00admen\u00adtiert, bevor ich sie f\u00fcr hier ver\u00ad\u00f6f\u00adfent\u00adli\u00adchungs\u00adtaug\u00adlich hal\u00adte; auch, weil Node.js eine schlicht unbrauch\u00adba\u00adre Pro\u00adgram\u00admier\u00adum\u00adge\u00adbung ist.)<\/em><\/p>\n<p>Die\u00adser Tage geht <a href=\"http:\/\/www.golem.de\/news\/npm-ueber-250-node-module-wegen-markenstreit-offline-1603-119953.html\">das NPM-Deba\u00adkel<\/a> durch deut\u00adsche Tech\u00adnik\u00adme\u00addi\u00aden, das sich etwa fol\u00adgen\u00adder\u00adma\u00ad\u00dfen zusam\u00admen\u00adfas\u00adsen l\u00e4sst: Der Ent\u00adwick\u00adler einer bekann\u00adten und viel genutz\u00adten Java\u00adScript-Biblio\u00adthek, die aus einem Zufall her\u00adaus genau so hei\u00dft wie einer der zahl\u00adrei\u00adchen ICQ-Klo\u00adne, wird von den Machern die\u00adses ICQ-Klons dar\u00adum gebe\u00adten, den Namen zur eige\u00adnen Ver\u00adwen\u00addung frei\u00adzu\u00adge\u00adben; er bie\u00adtet ihnen kulant an, dass sie ihm den Namen <a href=\"https:\/\/medium.com\/@mproberts\/a-discussion-about-the-breaking-of-the-internet-3d4d2a83aa4d\">abkau\u00adfen<\/a> k\u00f6n\u00adnen, sie leh\u00adnen ab und dro\u00adhen statt\u00addes\u00adsen den Machern von \u201enpm\u201c, einem gro\u00ad\u00dfen Ver\u00adzeich\u00adnis von Java\u00adScript-Biblio\u00adthe\u00adken, mit recht\u00adli\u00adchen Schrit\u00adten, wenn sie den Namen f\u00fcr ihre geplan\u00adte Biblio\u00adthek nicht frei\u00adge\u00adge\u00adben bekom\u00admen. Der Ent\u00adwick\u00adler der ein\u00adgangs erw\u00e4hn\u00adten Biblio\u00adthek bekommt also \u201esei\u00adnen\u201c Namen von Drit\u00adten ent\u00adzo\u00adgen und zieht dar\u00adauf\u00adhin ver\u00adst\u00e4nd\u00adli\u00adcher\u00adwei\u00adse erbost all sei\u00adne Pro\u00adjek\u00adte aus dem Ver\u00adzeich\u00adnis zur\u00fcck, wor\u00adauf\u00adhin offen\u00adsicht\u00adlich ein bedeut\u00adsa\u00admer Teil der dort auf\u00adge\u00adf\u00fchr\u00adten Pro\u00adjek\u00adte, dar\u00adun\u00adter gro\u00ad\u00dfe Frame\u00adworks wie <a href=\"http:\/\/reactjs.net\/\">React.js<\/a>, pl\u00f6tz\u00adlich nicht mehr funk\u00adtio\u00adnier\u00adte, weil sie ihrer\u00adseits f\u00fcr tri\u00advia\u00adle Auf\u00adga\u00adben (dazu kom\u00adme ich gleich) auf sei\u00adnen Code zur\u00fcck\u00adge\u00adgrif\u00adfen haben.<\/p>\n<p>Nun k\u00f6nn\u00adte man dar\u00ad\u00fcber spe\u00adku\u00adlie\u00adren, wer hier eigent\u00adlich \u201edie Schuld\u201c tr\u00e4gt und ob der Kapi\u00adta\u00adlis\u00admus nicht drin\u00adgend abge\u00adschafft wer\u00adden soll\u00adte, um sol\u00adche Strei\u00adtig\u00adkei\u00adten um Mar\u00adken\u00adrech\u00adte k\u00fcnf\u00adtig nicht mehr zu lukra\u00adti\u00adven Neben\u00adein\u00adnah\u00admen machen zu k\u00f6n\u00adnen. Dabei liegt das Pro\u00adblem viel n\u00e4her \u2013 das Pro\u00adblem hei\u00dft Node.js.<\/p>\n<p><!--more-->Dass man Java\u00adScript bes\u00adser nicht f\u00fcr ernst\u00adhaf\u00adte Pro\u00adgram\u00admie\u00adrung <a href=\"http:\/\/www.tamagothi.de\/2011\/09\/13\/warum-javascript-unbrauchbar-ist\/\">nut\u00adzen soll\u00adte<\/a>, ist l\u00e4ngst kal\u00adter Kaf\u00adfee (macht also, wie der Volks\u00admund behaup\u00adtet, fast so sch\u00f6n wie ein D\u00f6ner), und das nicht nur, weil Java\u00adScript im Jahr 2016 das Haupt\u00adein\u00adfalls\u00adtor f\u00fcr Schad\u00adsoft\u00adware im Brow\u00adser ist. Nun ist es bedau\u00ader\u00adli\u00adcher\u00adwei\u00adse immer noch Kon\u00adsens, dass <em>dyna\u00admi\u00adsche<\/em> Inhal\u00adte im Brow\u00adser in Java\u00adScript geschrie\u00adben 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\/\">Emscrip\u00adten<\/a> und <a href=\"https:\/\/github.com\/jashkenas\/coffeescript\/wiki\/list-of-languages-that-compile-to-js\">vie\u00adlen wei\u00adte\u00adren Pro\u00adjek\u00adten<\/a> ab, die das Schrei\u00adben von Java\u00adScript in einer rich\u00adti\u00adgen Pro\u00adgram\u00admier\u00adspra\u00adche erm\u00f6g\u00adli\u00adchen und dem Ent\u00adwick\u00adler bis zur Fer\u00adtig\u00adstel\u00adlung wenig\u00adstens die Syn\u00adtax vom Hals hal\u00adten. Dar\u00adan l\u00e4sst sich nichts so ein\u00adfach \u00e4ndern, das ist eine Ent\u00adschei\u00addung derer, die irgend\u00adwel\u00adche w\u00fcsten \u201eStan\u00addards\u201c fest\u00adle\u00adgen.<\/p>\n<p>Node.js ver\u00adfolgt einen ande\u00adren Ansatz: Im Kern aus V8, der Java\u00adScript-Kom\u00adpo\u00adnen\u00adte von <em>aus\u00adge\u00adrech\u00adnet<\/em> Goo\u00adgles Chro\u00adme-Brow\u00adser, bestehend zielt es auf die Ver\u00adwen\u00addung in Netz\u00adwerk\u00adan\u00adwen\u00addun\u00adgen, sozu\u00adsa\u00adgen als Ersatz f\u00fcr Perl, PHP, Python und der\u00adglei\u00adchen, v\u00f6l\u00adlig los\u00adge\u00adl\u00f6st vom Brow\u00adser. Nicht, dass das bes\u00adser w\u00e4re, denn die wesent\u00adli\u00adchen Schwie\u00adrig\u00adkei\u00adten der Spra\u00adche Java\u00adScript hat Node.js <em>nat\u00fcr\u00adlich<\/em> auch, dort \u00fcblich ist es aber, sie zu kaschie\u00adren, indem man die vor\u00adhan\u00adde\u00adne Sprach\u00adstruk\u00adtur bis zur Unkennt\u00adlich\u00adkeit mit Code frem\u00adder Leu\u00adte auf\u00adbl\u00e4ht: <a href=\"http:\/\/www.commitstrip.com\/en\/2016\/03\/17\/too-full-stack\/\">Hier noch ein Frame\u00adwork, da noch eine Biblio\u00adthek<\/a>, zusam\u00admen\u00adge\u00adklebt mit aller\u00adlei Hokus\u00adpo\u00adkus mit Funk\u00adtio\u00adnen, die <em>nie\u00admals daf\u00fcr gedacht<\/em> waren. Dabei sind die Auf\u00adga\u00adben oft tri\u00advi\u00adal: <a href=\"https:\/\/twitter.com\/ThePracticalDev\/status\/707561057242447872\">Wel\u00adches Frame\u00adwork soll ich nut\u00adzen, um zwei Zah\u00adlen zu addie\u00adren?<\/a> \u2013 Nein, das ist nat\u00fcr\u00adlich nur ein Scherz, die\u00adse Fra\u00adge hat nie\u00admand tat\u00ads\u00e4ch\u00adlich gestellt. Anschei\u00adnend w\u00e4re aber in der Welt von Node.js kei\u00adne Fra\u00adge zu bl\u00f6d, um sie mit einem neu\u00aden \u201ePaket\u201c zu beant\u00adwor\u00adten; nen\u00adnen wir hier zum Bei\u00adspiel doch nur ein\u00admal die\u00adje\u00adni\u00adgen, die sich Pake\u00adte wie <a href=\"https:\/\/www.npmjs.com\/package\/noop4\">noop4<\/a> (\u201eno ope\u00adra\u00adti\u00adon 4\u201c) aus\u00adden\u00adken, das nach der Instal\u00adla\u00adti\u00adon daf\u00fcr genutzt wer\u00adden kann, <em>\u00fcber\u00adhaupt nichts<\/em> zu tun. Weil\u2019s der Neu\u00adgier dient: <em>Nat\u00fcr\u00adlich<\/em> gibt es auch \u201enoop\u201c 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 sogar <a href=\"https:\/\/www.npmjs.com\/package\/is-positive\">ein Paket<\/a> (in Ver\u00adsi\u00adon 3.1.0, ich wie\u00adder\u00adho\u00adle: 3.1.0) gibt, das pr\u00fcft, ob eine Zahl posi\u00adtiv ist, was ja in ande\u00adren Spra\u00adchen (oder hei\u00dft das heu\u00adte alles \u201e\u00d6ko\u00adsy\u00adstem\u201c?) ein <em>ver\u00addamm\u00adtes Sprach\u00adfea\u00adture<\/em> ist, was eini\u00adges erkl\u00e4rt: Eine <em>typi\u00adsche<\/em> Node.js-Anwendung besteht \u00fcber\u00adwie\u00adgend aus <em>dem Code frem\u00adder Leu\u00adte<\/em>. Wenn da irgend\u00adwo ein tief\u00adgrei\u00adfen\u00adder Feh\u00adler pas\u00adsiert, stel\u00adle ich mir die Feh\u00adler\u00adsu\u00adche zumin\u00addest als ange\u00admes\u00adse\u00adne Stra\u00adfe vor. Die in sei\u00adnem Blog\u00adar\u00adti\u00adkel erw\u00e4hn\u00adten PHP-Ent\u00adwick\u00adler \u2013 zu denen ich vor einer Wei\u00adle auch beruf\u00adlich noch z\u00e4hl\u00adte \u2013 als \u00e4hn\u00adlich <em>nied\u00adrig\u00adstu\u00adfig<\/em> anzu\u00adse\u00adhen hal\u00adte ich \u00fcbri\u00adgens f\u00fcr etwas zu kurz gedacht, weil es anders als in Python, Perl <em>und so wei\u00adter<\/em> in PHP schlicht nicht n\u00f6tig ist, die Stan\u00addard\u00adbi\u00adblio\u00adthe\u00adken um ein Viel\u00adfa\u00adches zu \u201eerwei\u00adtern\u201c. W\u00e4h\u00adrend ich \u00fcbri\u00adgens die\u00adsen Text hier kon\u00adzi\u00adpier\u00adte, kam ich mit einem <em>typi\u00adschen Node.js-Entwickler<\/em> ins Gespr\u00e4ch, des\u00adsen Ergeb\u00adnis zusam\u00admen\u00adge\u00adfasst lau\u00adte\u00adte, dass ich zwei\u00adfels\u00adfrei ein \u201ePEGIDA\u201c unter\u00adst\u00fct\u00adzen\u00adder Neo\u00adna\u00adzi sei, weil ich wahr\u00adheits\u00adge\u00adm\u00e4\u00df behaup\u00adte\u00adte, in mei\u00adnen bis\u00adher f\u00fcnf\u00adzehn Jah\u00adren mit PHP <em>kein ein\u00adzi\u00adges \u201ePHP-Frame\u00adwork\u201c<\/em> wie das \u201eZend Frame\u00adwork\u201c oder \u201eSym\u00adfo\u00adny\u201c benutzt haben zu m\u00fcs\u00adsen, weil ich dort zumin\u00addest ser\u00adver\u00adsei\u00adtig <em>mein Zeug<\/em> gern mal selbst schrei\u00adbe, damit ich wei\u00df, wo alles steht. So weit ist es schon gekom\u00admen, dass man sich von Hip\u00adstern anp\u00f6\u00adbeln las\u00adsen muss, weil man sich nicht grund\u00ads\u00e4tz\u00adlich auf frem\u00adden Code ver\u00adlas\u00adsen m\u00f6ch\u00adte.<\/p>\n<p>Ich schwei\u00adfe (schon wie\u00adder) ab. Was ich eigent\u00adlich fest\u00adge\u00adstellt haben woll\u00adte: Node.js rich\u00adtet sich wie Java offen\u00adsicht\u00adlich an Leu\u00adte, die nicht pro\u00adgram\u00admie\u00adren, son\u00addern nur <em>frem\u00adden Code zusam\u00admen\u00adkle\u00adben<\/em> wol\u00adlen. Egal, wie ein\u00adfach eine Metho\u00adde selbst zu imple\u00admen\u00adtie\u00adren ist, <em>es hat schon wer gemacht<\/em> und des\u00adwe\u00adgen h\u00e4ngt man lie\u00adber eine zus\u00e4tz\u00adli\u00adche Abh\u00e4n\u00adgig\u00adkeit in sein Pro\u00adgramm. Ein Paket, das mit einem Ein\u00adzei\u00adler (!) \u00fcber\u00adpr\u00fcft, ob eine Varia\u00adble 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 stel\u00adlen sich die glei\u00adchen BWL-Schlips\u00adtr\u00e4\u00adger, die schon mit dem sturz\u00adfrei\u00aden Adres\u00adsie\u00adren einer E\u2011Mail \u00fcber\u00adfor\u00addert sind, aber von Fir\u00admen viel zu hoch daf\u00fcr bezahlt wer\u00adden, dass sie ihnen raten, <em>gef\u00e4l\u00adligst<\/em> immer auf das neue\u00adste Frame\u00adwork zu set\u00adzen, egal, wie gering der Mehr\u00adwert auch sein mag, was unver\u00admeid\u00adlich dazu f\u00fchrt, dass sol\u00adche Tech\u00adni\u00adken, die immer\u00adhin <em>wert\u00advol\u00adle Minu\u00adten<\/em> beim all\u00adse\u00adme\u00adstri\u00adgen Umstieg spa\u00adren, zus\u00e4tz\u00adli\u00adchen Auf\u00adtrieb erhal\u00adten, vor das erst\u00adbe\u00adste Mikro\u00adfon und bekla\u00adgen sich, dass heu\u00adte <em>kei\u00adner<\/em> mehr anst\u00e4n\u00addig pro\u00adgram\u00admie\u00adren kann.<\/p>\n<p>So vie\u00adle Mit\u00adtel\u00adfin\u00adger kann ich mir gar nicht wach\u00adsen las\u00adsen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Vor\u00adbe\u00admer\u00adkung: Mei\u00adne per\u00ads\u00f6n\u00adli\u00adchen Erfah\u00adrun\u00adgen mit Node.js beschr\u00e4n\u00adken sich au\u00dfer der test\u00adwei\u00adsen Instal\u00adla\u00adti\u00adon von Ether\u00adpad Lite auf den zumin\u00addest erfolg\u00adrei\u00adchen Ver\u00adsuch, eine Desk\u00adtop\u00adan\u00adwen\u00addung mit Elec\u00adtron zu schrei\u00adben. Die\u00adse Anwen\u00addung wird aller\u00addings zun\u00e4chst in einer anst\u00e4n\u00addi\u00adgen Spra\u00adche neu imple\u00admen\u00adtiert, bevor ich sie f\u00fcr hier ver\u00ad\u00f6f\u00adfent\u00adli\u00adchungs\u00adtaug\u00adlich hal\u00adte; auch, weil Node.js eine schlicht unbrauch\u00adba\u00adre Pro\u00adgram\u00admier\u00adum\u00adge\u00adbung ist.) Die\u00adser Tage geht \u2026<\/p>\n<p><a href=\"https:\/\/tuxproject.de\/blog\/2016\/03\/nope-js\/\" class=\"more-link\">\u2018Nope.js\u2019 wei\u00adter\u00adle\u00adsen \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,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","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}]}}