Nerdkrams
Git­Hub (4): Schö­ne Lizenz hat­ten Sie da. Tja, blöd jetzt.

Micro­soft hat in sein Git­Hub die­ser Tage ganz viel Intel­li­genz rein­ge­kün­stelt, die beim Pro­gram­mie­ren in „öffent­li­chem Code” (also unter ande­rem in auf Git­Hub lie­gen­den Pro­jek­ten) nach ver­meint­lich pas­sen­dem Code sucht und aus die­sem wie­der­um neu­en Code generiert.

Wenn ich das rich­tig ver­ste­he, läuft das unge­fähr so ab:

  • Der „Pro­gram­mie­rer” – wer sei­nen Code von Auto­ma­tis­men schrei­ben lässt, ist kein Pro­gram­mie­rer ohne Anfüh­rungs­zei­chen, son­dern ledig­lich ein Knopf­drücker, wenn nicht gar ein grü­ner Kanz­ler­kan­di­dat Pla­gia­tor – schreibt einen Funk­ti­ons­kom­men­tar und/oder ‑pro­to­ty­pen, in dem er per Varia­blen­na­men, Funk­ti­ons­na­men, Bei­spiel­da­ten und so wei­ter unge­fähr beschreibt, was er vor­hat. So weit erst mal kei­ne Ein­wän­de, immer­hin klingt das nach auch für ande­re Leu­te ver­ständ­li­chem Code und das ist gut.
  • Die „künst­li­che” „Intel­li­genz” guckt, ob sie in den ihr bekann­ten Daten ver­gleich­ba­res Ansin­nen fin­det, und kopiert im Erfolgs­fall vor­han­de­ne Code­schnip­sel zu einem neu­en Code­schnip­sel zusam­men, der viel­leicht funk­tio­niert oder auch nicht.
  • Die­se „künst­li­che” „Intel­li­genz” ist dabei der­ma­ßen treff­si­cher, dass bereits nach weni­gen Tagen Berich­te im Netz zu fin­den sind, denen zufol­ge sie auch mal schlicht Aus­schnit­te aus der GPL als Kom­men­tar vorschlägt.

In „0,1 Pro­zent der Fäl­le”, behaup­tet Micro­soft, kön­ne es vor­kom­men, dass gan­ze Code­stücke voll­stän­dig über­nom­men „vor­ge­schla­gen” wer­den. Mei­ne Kennt­nis­se im Lizenz­recht sind als mäßig zu bezeich­nen, aber ich wür­de anneh­men wol­len, dass auch in 0,1 Pro­zent der Fäl­le aus unbe­kann­ter Quel­le über­nom­me­ner Code dem Ent­wick­ler des Ori­gi­nal­codes nicht gefal­len dürf­te. Natür­lich auf Twit­ter wur­de vor­ge­schla­gen, Micro­soft möge doch, wenn sie sich so sicher sei­en, dass die „Copi­lot” genann­te Belei­di­gung für rich­ti­ge Pro­gram­mie­rer schon nie­man­des Urhe­ber­recht ver­let­ze, die­sen „Copi­lo­ten” – sogar gegen Bezah­lung – mal mit dem Code des Win­dows-10-Ker­nels füt­tern. Bis­her blieb die­ser Vor­schlag anschei­nend unbeantwortet.

Das Lizenz­pro­blem, auch für mich (so zwei, drei klei­ne Pro­gram­me von mir lie­gen ja auch offen im Inter­net her­um) nicht ganz unin­ter­es­sant, ist aber gar nicht mal unbe­dingt das Ärger­lich­ste an dem Mit­flie­ger. Viel wesent­li­cher scheint mir zu sein, wel­ches Pro­blem damit gelöst wer­den soll: Nut­zer von Visu­al Stu­dio Code, einem auf einem Web­brow­ser basie­ren­den und dar­um außer­or­dent­lich res­sour­cen­hung­ri­gen „Text­edi­tor” von Micro­soft, sol­len so in die Lage ver­setzt wer­den, Pro­gram­me zu schrei­ben, ohne pro­gram­mie­ren zu kön­nen. Ich bin eigent­lich nicht wäh­le­risch, was die von mir genutz­te Soft­ware angeht (Text­edi­to­ren aus­ge­nom­men), so lan­ge sie ihren Dienst zufrie­den­stel­lend ver­rich­tet, und ich hal­te auch nicht viel von Vor­ver­ur­tei­lun­gen von Men­schen, die ich mei­nes Wis­sens über­haupt nicht ken­ne, aber ich bin mir trotz­dem ziem­lich sicher, dass es eine fürch­ter­li­che Idee ist, eine Genera­ti­on von „Pro­gram­mie­rern” her­an­wach­sen zu las­sen, deren gesam­te Pro­gram­mier­erfah­rung dar­auf fußt, dass sie einen Knopf gedrückt haben und auf magi­sche Wei­se Code erschie­nen ist, der dann auch noch halb­wegs das getan hat, was sie erwar­tet hatten.

Quell­of­fen ist der „Copi­lot” im Übri­gen nicht. Nicht, dass den noch eine „künst­li­che” „Intel­li­genz” irgend­wo reinkopiert!

(Hät­te der Bull­shi­fier nicht gereicht?)

Senfecke:

  1. Dann sind auch die­je­ni­gen die Stack Over­flow nut­zen kei­ne ech­ten Pro­gram­mie­rer? Zum Pro­gram­mie­ren gehört auch die Soft­ware-Archi­tek­tur, allei­ne sich zu über­le­gen in was für Funk­tio­nen man sein Code auf­teilt, wie man die Funk­ti­on nennt, wie die Varia­blen und ihn damit mög­lichst gut les­bar macht gehört bereits zum Pro­gram­mie­ren. Ich bezweif­le, dass die KI da in näch­ster Zeit so intel­li­gent sein wird, als das man nicht aus selbst Pro­gram­mie­ren muss. Wich­tig wäre es m.M.n aber, dass der Aut­hor und die Lizenz des Snip­pets mit in den Kom­men­tar ein­ge­tra­gen wird.

    • Wenn „aus frem­dem Code Din­ge zusam­men­ko­pie­ren und sei­nen Namen dran­schrei­ben“ „Pro­gram­mie­ren“ ist, haben Baer­bock, Gut­ten­berg und Mil­li Vanil­li :-) ja alles rich­tig gemacht.

      • Ich glau­be, da ver­wech­selst Du was: Ein schlam­pig zusam­men­ge­pfusch­tes Buch ist pein­lich und schlecht ( und zahl­reich vor­han­den), eine geklau­te Dok­tor­ar­beit aber eine ande­re Num­mer. Hat­te die CSU such nicht exklu­siv, wie man hört.
        Mil­li Vanil­li, das sagt ja der Name schon, ist in jedem Fall pein­lich, mit Pla­gi­at oder ohne.
        Aber Bear­bock und Gut­ten­berg gehö­ren nicht in einen Atemzug.

      • Naja ich sag ja, der ori­gi­nal Aut­hor + Lizenz soll­te schon auto­ma­tisch als Kom­men­tar dazu gene­riert wer­den. Wenn der­je­ni­ge die­sen dann ent­fernt ist es immer­hin ein bewuss­tes klau­en und das ist auch jetzt schon mög­lich, wenn auch etwas umständlicher.

  2. Mein Gedan­ke war ähn­lich wie der von Pas­cal: macht es einen Unter­schied – außer im Zeit­auf­wand -, ob der Mensch Code aus Stack­Over­flow kopiert oder die Maschi­ne Code aus Git­hub? Im Zwei­fel ist doch bei­des ähn­lich kata­stro­phal- oder kann glei­cher­ma­ßen lehr­reich sein, wenn man das als Aus­gangs­punkt für eige­nes Ver­ständ­nis und eige­nen Code nimmt.

    (Okay, und jetzt muss ich mir selbst wider­spre­chen: es ist ähn­lich kata­stro­phal- sogar mit weni­ger eige­nem Auf­wand -, aber nicht glei­cher­ma­ßen lehr­reich, weil Erläu­te­rung und Dis­kus­si­on fehlen. )

      • Kommt ver­mut­lich dar­auf wie man damit umgeht, wenn die Quel­le des Snip­pets dabei steht (kei­ne Ahnung ob das der Fall ist?), dann könn­te man sich ja zumin­dest den Kon­text der Quel­le anschau­en und davon eben­falls ler­nen. Wer den Code den er da ver­wen­det nicht ver­steht wird irgend­wann sowie­so auf Bugs sto­ßen die er nicht behe­ben kann. Das glei­che kann dir bei Stack­Over­flow pas­siert wenn du das best­näch­ste Ergeb­nis blind kopierst.

    • Der Unter­schied liegt viel­leicht dar­in, dass Code auf Stack­over­flow ja genau des­we­gen dort ver­öf­fent­licht wird, damit ihn jeder­mann ohne wei­te­res Lizenz­ge­ham­pel über­neh­men kann.

      Ein dickes Soft­ware­pro­jekt unter GPL auf Git­Hub hat dage­gen absicht­lich die Lizenz bekommen.

      • Ja das ist sicher­lich ein Unter­schied, aber wenn mein Pro­jekt unter der GPL steht, dann darf ich auch Code aus ande­ren Pro­jek­ten die unter der GPL ste­hen ein­bin­den. Wenn ein Pro­jekt unter der MIT steht darf ich den Code sogar in kom­mer­zi­el­len Pro­jek­ten ver­wen­den und brau­che ihn noch nicht ein­mal zurück geben.

        Wenn ich ein Pro­jekt unter einer frei­en Lizenz ver­öf­fent­li­che, dann u.a. auch damit ande­re ggf. etwas von dem Code ler­nen oder sich davon inspi­rie­ren las­sen können.

        Wenn ich es unter der GPL ver­öf­fent­li­che, dann erlau­be ich das nur unter den glei­chen Bedin­gun­gen und möch­te nicht, dass mei­ne Arbeit unge­fragt in kom­mer­zi­el­len pro­prie­tä­ren Pro­jek­ten ver­wen­det wird.

        Wenn ich den Code unter der MIT ver­öf­fent­li­che, dann ist es mir ziem­lich egal was ande­re damit machen.

        Wer das mit der KI nicht gut fin­det soll­te sei­nen Code also nicht unter der MIT ver­öf­fent­li­chen und lie­ber zur (A)GPL wech­seln, dann wird man dage­gen ach vor­ge­hen kön­nen wenn Snip­pets ver­wen­det wer­den die län­ger als 3 Zei­len (kei­ne Ahnung wo die Gren­ze hier genau ist) Code sind.

        Jetzt muss die KI nur noch die Lizen­zen auf Kom­pa­ti­bi­li­tät prü­fen (zumin­dest bei grö­ße­ren Snip­pets), wenn sie das nicht macht, fin­de ich das auch nicht okay.

        • wenn mein Pro­jekt unter der GPL steht, dann darf ich auch Code aus ande­ren Pro­jek­ten die unter der GPL ste­hen ein­bin­den. Wenn ein Pro­jekt unter der MIT steht darf ich den Code sogar in kom­mer­zi­el­len Pro­jek­ten ver­wen­den und brau­che ihn noch nicht ein­mal zurück geben.

          Mit Aus­nah­me der MIT‑0 (die ich in eini­gen mei­ner Pro­gram­me nut­ze) ver­pflich­ten die mei­sten die­ser Lizen­zen zur kor­rek­ten Anga­be der Ori­gi­nal­li­zenz und des ursprüng­li­chen Autors. Wie möch­test du dem in die­sem Fall nachkommen?

          • Die KI pflegt eine Datei im Work­s­pace in der alle auf­ge­li­stet wer­den. Die­se lässt sich in unter­schied­li­chen For­ma­ten expor­tie­ren (HTML, PDF, Mark­down, …) Es wird aus­drück­lich dar­auf hin­ge­wie­sen, dass die­se Datei in der Anwen­dung ver­füg­bar gemacht wer­den muss.

            In der Exten­si­on gibt es zudem eine allo­w­list mit Lizen­zen die ich in mei­nem Pro­jekt erlau­be (oder eine blocklist).

            Das gan­ze betrifft aber nur Snip­pets von x Komplexität.

            Ich könn­te mir auch etwas ver­gleich­ba­res zur robots.txt vor­stel­len, wo man für sein Pro­jekt fest­le­gen kann, dass man nicht möch­te, dass der Code auto­ma­tisch durch­sucht wird, oder das bestimm­te Ord­ner nicht durch­sucht werden.

            Bestehst du eigent­lich auch dar­auf wenn jemand sich einen Fünf­zei­ler per Hand aus dei­nem Source klaut? Ich mei­ne, dass kann ja auch jetzt schon pas­sie­ren. Oder ab wel­che Kom­ple­xi­tät wür­de dich das stören?

            Es könn­te auch sein, dass mit der Zeit immer mehr opti­mier­te Vari­an­ten belieb­ter Snip­pets auf­tau­chen wer­den (da man ihn über­nimmt, aber dann viel­leicht noch opti­miert). Wür­dest du das dann bei dir zurück­por­tie­ren? Viel­leicht wird dir die opti­mier­te Vari­an­te sogar auto­ma­tisch ange­zeigt wenn du auch die Exten­si­on instal­liert hast. Letzt­end­lich ist das doch eigent­lich auch im Sin­ne von OpenSource.

            • Bestehst du eigent­lich auch dar­auf wenn jemand sich einen Fünf­zei­ler per Hand aus dei­nem Source klaut?

              Ja, natür­lich. Ich erin­ne­re mich an kei­nen Pas­sus in der CDDL oder der MIT‑0, in dem „This licen­se is only rele­vant for more than 5 lines of code.” oder ver­gleich­ba­res stün­de. Was an „Die­ser Code steht voll­stän­dig unter $lizenz!” bedarf dei­ner Mei­nung nach seman­ti­scher Überarbeitung?

              Ich wer­de das Pro­blem auf abseh­ba­re Zeit nicht selbst haben, da ich mich wei­ge­re, „Text­edi­to­ren” zu benut­zen, die erst mal eine voll­stän­di­ge Web­brow­se­ren­gi­ne hoch­fah­ren müs­sen, um mich Zei­chen auf dem Bild­schirm erschei­nen las­sen zu lassen.

  3. Es waren Zei­ten, als man sich als Ent­wick­ler für die ver­öf­fent­lich­te Soft­ware ver­ant­wort­lich gefühlt hat­te. Und zwar so, dass man sogar die Umge­bung (aka Betriebs­sy­stem), die man als Platt­form für die eige­ne Soft­ware ver­wen­det („miss­braucht”) hat, in- und aus­wen­dig ler­nen woll­te, um im Fal­le eines Fal­les auch ein selt­sa­mes Pro­blem ernst­haft ana­ly­sie­ren zu kön­nen. Dann kam die Genera­ti­on von „Ent­wick­lern”, denen die Atti­tü­de „it works on my machi­ne” kei­ne Bla­ma­ge dar­ge­stellt hat.
    Und von da aus scheint der näch­ste logi­sche Schritt der Ver­ant­wor­tungs­de­gra­dati­on, den die kom­men­de Genera­ti­on ver­mut­lich mit­ma­chen wird, nicht weit ent­fernt zu sein.

  4. >Pro­gram­me zu schrei­ben, ohne pro­gram­mie­ren zu können.

    Das ist gene­rell ein Pro­blem in der Soft­ware­ent­wick­lung. Ein Pro­gram­mier­an­fän­ger kann heu­te bereits ein funk­tio­nie­ren­des Pro­gramm in C / C++ / PHP schrei­ben. Das fällt dem­je­ni­gen aber dann auf die Füße, wenn die bösen Buben ankom­men und das Pro­gramm auf Sicher­heits­lücken abklopfen.

      • Für nen Anfän­ger wäre Rust glau­be ich bes­ser geeig­net. Der Rust Com­pi­ler haut dem Anfän­ger sein stin­ken­den Code hart um die Ohren, da der Rust Com­pi­ler es sich zur Auf­ga­be gemacht hat mög­lichst vie­le Pro­ble­me schon beim Kom­pi­lie­ren zu erken­nen. Da heißt es: Ent­we­der man lernt es rich­tig zu machen oder man kämpft stän­dig gegen den Borrowchecker.

        • Ich mag Rust, aber eben die­ser Zwang zum grund­le­gen­den Ver­ständ­nis von Spei­cher­ver­wal­tung scheint vie­len zu feh­len – dar­um ist C gera­de für Anfän­ger mei­nes Erach­tens die klü­ge­re Wahl.

        • Ich wür­de jedem Anfän­ger heu­te emp­feh­len, mög­lichst schnell C zu ler­nen, denn C schafft einen Sinn für die Funk­ti­ons­wei­se eines Com­pu­ters, ohne so hirn­zer­mür­bend wie ein Assem­bler zu sein. Es gibt Spei­cher, Namen für den Spei­cher (Iden­ti­fier für Varia­blen) und Adres­sen von Spei­cher. Und wenn man Spei­cher braucht, muss man ihn anfor­dern und wie­der zurück­ge­ben, wenn man ihn nicht mehr braucht. (Das war jetzt schon ein biss­chen platt aus­ge­drückt, ich weiß.) Wer das ver­steht, bekommt eine Vor­stel­lung davon, wie der Com­pu­ter arbeitet.

          Selbst, wenn man nie­mals ein grö­ße­res Pro­jekt in C macht, hilft das so erwor­be­ne Wis­sen. Erstens, weil die C‑Syntax in vie­le moder­ne Spra­chen hin­ein­wirkt, und zwei­tens, weil man erahnt, wel­che Pro­ble­me zum Bei­spiel so eine auto­ma­ti­sche Spei­cher­ver­wal­tung machen kann. Ich habe mal gesagt: Spei­cher ist eine viel zu wich­ti­ge Res­sour­ce, um die Ver­wal­tung einem Pro­gram­mie­rer zu über­las­sen, aber Spei­cher ist auch eine viel zu wich­ti­ge Res­sour­ce, um die Ver­wal­tung einem Auto­ma­tis­mus zu über­las­sen. Wer erken­nen kann, wann was an die­ser Aus­sa­ge wahr ist, wird vie­le Feh­ler nicht machen. Wer es nicht erken­nen kann, wird die Anwen­der sei­ner Soft­ware mit fet­ten Klöt­zen für ein­fa­che und längst mit guter Soft­ware gelö­sten Auf­ga­ben quä­len (zum Bei­spiel mit einem Edi­tor im Brow­ser) oder sie mit dem Rät­sel­ra­ten dar­über belä­sti­gen, war­um die­ses ver­damm­te Pro­gramm eigent­lich in unre­gel­mä­ßi­gen Abstän­den zäh­flüs­sig wird. Nein, der Anwen­der kennt kei­ne GC, der Pro­gram­mie­rer soll­te wis­sen, was das ist und gege­be­nen­falls, wie man die Spei­cher­frei­ga­ben so steu­ert, dass es kei­ne »Hän­ger« gibt. Wer kei­nen Sinn für Spei­cher­ver­wal­tung hat, kommt nur lei­der nicht darauf.

          Einer der größ­ten Vor­tei­le von Rust über C ist es, dass man kei­ne Zusatz­werk­zeu­ge wie lint benö­tigt, um schwer erkenn­ba­re und häu­fi­ge Stan­dard­feh­ler zu ent­decken, son­dern vom Com­pi­ler das Näs­chen dahin gesteckt bekommt, wo man gar nicht schnup­pern woll­te. Lint haut einem typi­schen Anfän­ger auch den Code um die Ohren, aber aua! Und mir auch manchmal… https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_biggrin2.gif

          Ich wür­de aller­dings auch jedem emp­feh­len, eine prak­ti­sche Skript­spra­che zu erler­nen. Ein­fach nur, weil man damit ins­ge­samt ver­mut­lich Jah­re an Lebens­zeit spart. Wel­che das ist, ist bei­na­he gleichgültig.

  5. Ist doch gut so wie es ist, mei­ne Zukunfts­bü­cher aus den 70-ern und 80-ern haben immer­hin behaup­tet, dass die Tech­no­lo­gie bald über­all ist und die­se so ein­fach zu umge­hen ist wie sonst nichts.
    Da wer­den wir „alten Hau­de­gen” dann super über­le­ben können.

https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_smilenew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_biggrin2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_sadnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_eek.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_shocked.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_confusednew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_coolnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_lol.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_madnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_aufsmaul.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_seb_zunge.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_blushnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_frown.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil1.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/icon_mad.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_rolleyesnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_wink2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_idea2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_arrow2.gif 
mehr...
 

Senf hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht.

https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_smilenew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_biggrin2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_sadnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_eek.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_shocked.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_confusednew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_coolnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_lol.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_madnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_aufsmaul.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_seb_zunge.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_blushnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_frown.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil1.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/icon_mad.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_rolleyesnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_wink2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_idea2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_arrow2.gif 
mehr...
 

Du willst deinen Senf dazugeben, dir ist aber der Senf ausgegangen? Dann nutz den SENFOMATEN! Per einfachem Klick kannst du fertigen Senf in das Kommentarfeld schmieren, nur dazugeben musst du ihn noch selbst.

Erlaubte Tags:
<strong> <em> <pre> <code> <a href="" title=""> <img src="" title="" alt=""> <blockquote> <q> <b> <i> <del> <span style=""> <strike>

Datenschutzhinweis: Deine IP-Adresse wird nicht gespeichert. Details findest du hier.