Irgendwie hatte ich mit jsdoc-toolkit Probleme, Documentation für existierende Klassen die um ein paar Methoden erweitert wurden zu generieren. Man muss JSDoc nämlich bei der Klassendefinition mit dem @class Tag mitteilen, dass es sich hier jetzt um eine neue Klasse handelt, die Klasse ist allerdings schon definiert.
Ein eigentlich nicht allzu ernst gemeinter Versuch hat dann tatsächlich funktioniert:
Code:
/**
* @class
*/
Float32Array = Float32Array;
:D
02.02.2012, 17:17
DFYX
Ich bin gestern über einen obskuren Bug im Skeletal Tracking Algorithmus der Kinect gestolpert und konnte ihn heute erfolgreich reproduzieren. Irgendwie ist das Teil der Meinung, dass in meinem Aquarium ein Mensch sitzt:
(Und falls das irgendwer findet, der mir unterstellen will, ich hätte in meiner Bachelorarbeit Bilder ohne Quellenangabe verwendet: nein, das Bild habe ich grade eben für diese Arbeit aufgenommen und musste es einfach hochladen :p )
04.02.2012, 21:17
Whiz-zarD
Indizierter Zugriff made in china:
Gefunden in einer Android-App.
Auf sowas muss man erstmal kommen :hehe:
04.02.2012, 21:27
Karl
Zitat:
Zitat von DFYX
Ich bin gestern über einen obskuren Bug im Skeletal Tracking Algorithmus der Kinect gestolpert und konnte ihn heute erfolgreich reproduzieren. Irgendwie ist das Teil der Meinung, dass in meinem Aquarium ein Mensch sitzt
Bedeutet das Bild nicht auch, dass du eigentlich ein Roboter bist? :p
04.02.2012, 21:28
nudelsalat
Schaut aus als hätte jemand den Balmers Peak um ein paar Promille überschritten. :O
04.02.2012, 21:28
DFYX
Zitat:
Zitat von Karl
Bedeutet das Bild nicht auch, dass du eigentlich ein Roboter bist? :p
Dass es mich nicht trackt, ist normal, weil man dazu von den Knien an aufwärts sichtbar sein muss.
05.02.2012, 19:06
YoshiGreen
Zitat:
Zitat von Whiz-zarD
Gefunden in einer Android-App.
Auf sowas muss man erstmal kommen :hehe:
Nice one. Anscheinend setzt bei vielen Android-Entwicklern das Hirn gelegentlich aus. Dieses Schmuckstück ist mir untergekommen:
Besonders toll fand ich: Array(16).join("wat" - 1) + " Batman!" ^^
08.02.2012, 09:51
R.D.
Wundern sich Leute echt, warum ein Spiel bei ihnen nicht geht wenn sie ihre Schreibrechte auf ihren Nutzerordner blocken? Und eine Anwendung von eine CD gestartet werden soll? WTF, wo soll ich dann bitte meine Daten speichern... So was kann ich ja leiden. Alles funzt beim testen, man ist bereit für alles und dann kommt da einer mit einem Computer der total blockiert ist...
Besonders toll fand ich: Array(16).join("wat" - 1) + " Batman!" ^^
Der ist lustig! :D
16.02.2012, 16:44
DFYX
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal wieder ein kleines bisschen mit bash rumgespielt. Anlass war, dass ich einen kleinen Portscanner brauchte, der zwischen "Connection refused" und einem Timeout unterscheidet, weil ich ne Firewall, die verbotene Pakete einfach droppt, testen wollte (daher auch die vielen Timeouts im Screenshot). Wer ihn haben will, sei herzlich eingeladen. Für Verbesserungsvorschläge bin ich immer offen. Getestet wurde auf Mac OS X Snow Leopard, aber alle anderen Unixoiden sollten auch gehen.
Edit: ich seh grad, dass ich ein paar temporäre Dateien noch nicht automatisch lösch (die, in denen die Ergebnisse stehen), weil ich eigentlich konfigurierbar machen wollte, ob man die behält. Werde ich bei Gelegenheit anpassen.
20.02.2012, 10:38
R.D.
Ich sitze grad in der Arbeit und muss warten weil der Android Emulator so UNFASSBAR langsam ist. Selbst C kompiliert da schneller -.-
20.02.2012, 17:20
Whiz-zarD
Das Kompilieren ist nicht das Problem. Der Emulator ist das Problem. Der ist ein einziger Witz. Selbst für eine "Hallo Welt"-App braucht das Teil 5 Minuten zum Laden.
Am Besten ist es, du benutzt gleich ein Smartphone. Als Alternative kann man sich auch eine VM mit einem Android-OS installieren und dann mittels des Tools adb, welches beim SDK dabei ist, eine Netzwerkverbindung zur VM aufbauen. Das ist um weiten schneller, als der Emulator.
Eine x86 Version von Android kann man sich hier runterladen -> http://www.android-x86.org
Allerdings ist damit nicht alles möglich.
20.02.2012, 18:03
R.D.
Wir haben auf Arbeit alles was wir brauchen :D Aber danke! Ich hab dass dann einfach so gemacht das ich den Emulator hab laufen lassen. Mehr als ein Hello World sollte ich eh nicht machen, ich wollt nur gucken wie das dann so geht. Du hast aber Recht auf einem Gerät geht es schneller und zum Glück bekomme ich morgen eins x_X
Btw ist das Laden noch lange nicht so schlimm wie die Performance von dem Ding. Ich meinte übrigens nicht das kompilieren, das ist ja in Java immer sehr fix sondern hab nur die Geschwindigkeit vergleicht :D (Natürlich ist C beim kompilieren schneller als der Emulator).
So eine VM werd ich mir jetzt aber trotzdem mal laden :)
21.02.2012, 22:48
YoshiGreen
Den Emulator benutzt du eigentlich nur, wenn du die Affenherde auf deine App los lässt. Es gibt zwar einen Paramter die nur auf ein Packet zu beschränken aber bei mir sind die schon ein par mal ausgebrochen. Wenn dein echter Androiden von denen angefallen kannste echt Spaß haben. Zack: Nummer in Pakistan gewählt. o.O
Es gibt aber die Möglichkeit den Emu mit nem Speicherabbild zu laden. Das soll angeblich schneller gehen - bei mir scheint es nicht zu funzen.
Fazit: Um gewisse Darstellungsfehler auf anderen Droiden nachvollziehen zu können ist das Ding geeignet. Schön mit ner Tasse Tee lohnt sich das. Aber für komplexe Bugs ist der echt zu lahm.
(PS: Für ne Minivorschau kannste auch direkt die .xml im Ecipse angucken Da ist wie bei der .manifest ein Reiter. Oben kannst du verschiedenen Auflösungen, Bildschirme und Themes einstellen.
Für relatives Layout ist das aber eher ein WYSIAWYG-Tool. Der Code ist ... kreativ.)
22.02.2012, 13:34
R.D.
Die Gui ist mir relativ egal, das mach ich erst zu schluss, ich weiß aber bereits das ich die über die main.xml konfigurieren kann. Der Code ist echt übel, vor allem wenn du dann noch die Support Jar dazu nimmst, da heißt es dann nicht mehr Activity (lol), sondern Fragment(WTF?). Ist echt nicht witzig und ich bin ganz froh das ich das erst mal nach hinten verschieben kann. Allgemein kann ich das erst mal sein lassen, vorrangig ist jetzt: Userdaten (Name, Password usw) irgendiwe auf dem Android sichern, Stichwort Credentials. Da gibs ja irgendwas mit SharedPreferences, hoffe das klappt direkt :D
btw, kennt einer von euch ein gutes Json Framework? Jackson ist zwar gut, aber das zu parsen ist irgendwie merkwürdig... theoretisch müsste ich rekursiv schau ob etwas in meinem Json ist, da das keine simple Struktur ist :/
22.02.2012, 17:17
Whiz-zarD
Ein Fragment ist ein Teil der GUI, der in Activities verwendet werden kann.
Falls es eine App werden soll, wo mehrere Nutzer sich anmelden und ihre eigenen Einstellungen vornehmen können, kommst du mit den SharedPreferences nicht weit. Außerdem finde ich diese ein bisschen umständlich. Nach jeder Änderung muss noch zusätzlich das commit() aufgerufen werden, da er die Daten nur erstmal zwischenspeichert. Erst beim commit() schreibt der die Daten persistent.
Zitat:
Zitat von YoshiGreen
(PS: Für ne Minivorschau kannste auch direkt die .xml im Ecipse angucken Da ist wie bei der .manifest ein Reiter. Oben kannst du verschiedenen Auflösungen, Bildschirme und Themes einstellen.
Für relatives Layout ist das aber eher ein WYSIAWYG-Tool. Der Code ist ... kreativ.)
Wer guckt sich auch schon den generierten Code an?
Die XML Datei reicht völlig aus.
22.02.2012, 23:35
YoshiGreen
Die support lib sind ja für die Abwärtskompatibilität. Kannst du also am Anfang erstmal Beiseite lassen.
SharedPreferences sind sehr gut für allgemeine Einstellungen in der App geeignet. Das reicht eigentlich auch für "Multianmeldungen" - die es so ja nicht wirklich gibt.
@Whiz: Es gibt Lebewesen die machen damit ganze Designs. "Und der Code ist ja so sauber formatiert." Nettere Menschen bekommen davon gesteigerten Blutdruck :C
23.02.2012, 08:14
R.D.
Danke YoschiGreen :) Falls sich Jackson als ungeeignet herausstellen sollte versuch ich mal das. Das Problem ist echt das Format das imho (bin ja Anfänger was das angeht) ziemlich komplex, ich kann das ja mal abgespeckt posten:
Was ich tun muss ist alle Objects des ersten arrays auslesen und den "title" dann in eine Liste donnern, wass dann auf Android als List auftauchen soll. Als 2. muss ich die "// einige key/value pairs" auslesen... Das wird sich wohl noch bis morgen hinziehen.
23.02.2012, 17:14
Whiz-zarD
Zitat:
Zitat von YoshiGreen
Das reicht eigentlich auch für "Multianmeldungen" - die es so ja nicht wirklich gibt.
Ich hab eine gebastelt. ^^
Ist aber eine Firmeninterne App gewesen, wo mehrere Nutzer das selbe Gerät benutzen.
Zitat:
Zitat von YoshiGreen
@Whiz: Es gibt Lebewesen die machen damit ganze Designs. "Und der Code ist ja so sauber formatiert." Nettere Menschen bekommen davon gesteigerten Blutdruck :C
Die Leute, die mit selbstgefrickelten Java-Code komplette Designs basteln, haben das Android-System nicht verstanden und gehören geschlagen.
23.02.2012, 18:28
YoshiGreen
Also JSON bringe ich nun nicht wirklich mit komplex in Verbindung. o.O Einmal durchatmen und Hand anlegen.
Code:
//untested!
//save objects in ArrayList
ArrayList<JSONObject> myObjects = new ArrayList<JSONObject>;
//create json from string
JSONObject myJson = new JSONObject(string);
//access top level array
JSONArray project = myJson.getJSONArray("riskaProject");
//retrieve objects
for( int i = 0; i < project.length(); i++ ){
myObjects.add(project.getJSONObject(i));
}
//print names
for( int i = 0; i < myObjects.length(); i++){
Log.d("jsonTest",myObjects.get(i).getString("title"));
}
http://www.json.org/ erklärt auch recht hübsch wie so'n JSON aufgebaut ist. Ich habs selber nie "ordentlich gelernt" :)
Zitat:
Zitat von Whiz-zarD
Die Leute, die mit selbstgefrickelten Java-Code komplette Designs basteln, haben das Android-System nicht verstanden und gehören geschlagen.
Ich verstehe deine Aussage nicht.
23.02.2012, 18:42
Whiz-zarD
Zitat:
Zitat von YoshiGreen
Ich verstehe deine Aussage nicht.
Anders als bei x-beliebigen Java GUI-Builder setzt Android voll und ganz auf XML-Dateien für die Erstellung einer GUI.
Es ist zwar möglich, mittels Java-Code eine View zu erstellen, aber dies sollte man, aus Übersichtlichkeit, soweit wie möglich vermeiden und stattdessen die Views mittels XML definieren und sie dann mit Daten füllen. Der generierte Code, der das SDK aus den XML-Dateien bastelt hat keinen zu interessieren und sollte auch nicht verändert werden, da der Code eh beim nächsten Build wieder überschrieben wird.
Und wer meint, er müsste da irgendwas mit Java-Code zurechtfrickeln und den generierten Code verunstalten, weil der Code für ihm zu unübersichtlich ist, gehört einfach geschlagen.
23.02.2012, 18:48
YoshiGreen
Ok, die Idee das jemand sowas macht ist so absurd das ich daran nicht gedacht hab. Tja - viel Spaß beim Aufräumen wünsch ichr dir :)
24.02.2012, 08:16
R.D.
@YoschiGreen
Danke, ich glaub jetzt versteh ich das besser :) hab das aber nicht mit Objects und Arrays gemacht weil ich das doof fand. Stattdessen hab ich auf das Full-Data-Binding von Jackson zugegriffen. Das mappt mir die Sachen auf eine POJO, dafür sind vor allem die Exceptions super. Die sagen einem direkt was noch fehlt und die Annotations lassen das ganze sogar schön aussehen (die Json-Keys haben... exotische Bezeichnungen :D). Das ist vllt etwas übel, aber ich brauch ja später eh alle Projekte in der Json mit Inhalt.
@Gui
Naja Whiz, für Anfänger (war ja jeder mal) ist das sicher erst mal etwas schwerer die würde ich nicht gleich schlagen :) Allerdings würde ich es auch vermeiden mit Code die Gui zu machen... Bin ganz froh das es so gelöst ist. Scheint ja sogar recht ressourcenfreundlich zu sein.
Edit:
Wie pusche ich eigentlich Daten zwischen Activities umher oO. z.B. Verbindungen mit einer Datenbank oder mit dem Internet, oder allgemein Objekte?
24.02.2012, 17:12
Whiz-zarD
Zitat:
Zitat von R.D.
Edit:
Wie pusche ich eigentlich Daten zwischen Activities umher oO. z.B. Verbindungen mit einer Datenbank oder mit dem Internet, oder allgemein Objekte?
Das ist so ne Sache, die ein IMO ein bisschen unglücklich gelöst wurde.
Man kann sog. Intents den Activities weitergeben. Das ist dann ein Key-Value-Paar. Allerdings kann man nur bestimmte Datentypen an eine Activity weiterreichen.
Für ne Datenbankanbindung haben wir eine Singleton-Klasse geschrieben, die beim Starten der App Instanziert wird.
25.02.2012, 17:43
R.D.
Mh, das ist ja doof :/ Naja ich wollte das dann eh mit einem Singleton lösen aber hätte ja sein können das da was anderes Best Practices ist.
15.04.2012, 01:14
DFYX
Gründe, warum PHP sterben muss. Ich hätte es kaum besser formulieren können. Diese Sprache ist sowas von fubar, dass die das ohne einen kompletten Neuanfang definitiv nicht mehr fixen können.
15.04.2012, 12:19
Jesus_666
Der Einfachheit halber erspare ich mir eine genauere Analyse des Artikels, auch wenn vor dem "Okay, back to facts." einige fragwürdige Aussagen kamen (wie ein Absatz, der impliziert daß die Existenz von php.ini ein großer Fehler ist. Später kommen Kritiken an der spezifichen Implementierung von php.ini, aber oben liest es sich mehr wie "Konfigurationsdateien sind böse").
PHP ist eine schlimme Sprache; allerdings ist PHP eine schlimme Sprache, in die man leicht reinkommt. Um ehrlich zu sein, habe ich mir bei Python relativ öfter an den Kopf gefaßt als bei PHP, weil die Sprache (oder ihre Dokumentation) komplett bizarr wirkte. Ruby ist in der Hinsicht allerdings durchaus okay. (Benutzt noch jemand Ruby?)
Im Wesentlichen wartet die Welt darauf, daß jemand eine durchschlagend bessere Alternative zu PHP rausbringt. Weder Python noch Ruby scheinen sich momentan zu qualifizieren. Sie sind besser, aber nicht besser genug. Erst recht nicht serverseitiges JavaScript oder JSP.
21.04.2012, 15:56
Jesus_666
[rant]
Und da sehe ich wieder, warum ich PHP benutze.
Ich bin demletzt über Fred Boyle's Code Challenge gestolpert. Nicht revolutionär, aber ich dachte mir, ich könnte mir wirklich mal eine andere Umgebung als PHP ansehen. Django hat ein ansprechendes Tutorial und sieht gut designt aus, also probiere ich das.
Und Django ist wirklich gut designt; es ist eine Freude, damit zu arbeiten. Dummerweise baut Django auf Python auf, welches sich mal wieder seinen Status als "die Sprache, die ich gern mögen würde" zementiert hat.
Ich will einfach nur einen Wert bestehend aus einem Timestamp konkateniert mit einer laufenden Nummer halbwegs kompakt kodiert haben. In PHP wäre das folgender Code:
$foo=base_convert(time().$number, 10, 36);
Damit hätte ich meine Zahl base36-kodiert, was schon mal ganz gut ist.
Problem 1: Python kann zwar Strings beliebiger Basis (zwischen 2 und 36) als Integer parsen, hat aber keine Funktion, um einen Integer in einern String beliebiger Basis zu überführen. Äh ja, sehr konsistent. Ich finde also nach einer Weile eine entsprechende Funktion auf StackOverflow.
Problem 2: Um Zahlen zu konkatenieren und dann wieder als Zahl zu benutzen, muß ich sie casten, was unter Python eine hohe Kunst ist, weil Python noch schlechtere Fehlermeldungen als PHP ausgibt. Ich habe eine halbe Stunde lang an "TypeError: not all arguments converted during string formatting" geknabbert, bis ich zufällig herausgefunden habe, daß es in meinem Fall bedeutet: "Ich erwarte einen int, aber da ist ein string." Ganz ehrlich, das ist nicht hilfreicher als "unexpected T_PAAMAYIM_NEKUDOTAYIM". Immerhin kann einem bei Letzterem Google noch helfen; "not all arguments..." passiert wohl in allen möglichen Kontexten.
Ich denke, ich probier's lieber mit Ruby on Rails weiter. Python ist nicht gut für meinen Blutdruck.
21.04.2012, 18:03
DFYX
Einmal in Ruby:
foo = "#{Time.now.hash}#{number}".to_i.to_s(36)
Geht aber sicher sogar noch einfacher.
08.05.2012, 22:37
drunken monkey
Netter Artikel, einige ganz witzige Sachen drin. ^^" Hat mich wieder an dieses herrliche Video erinnert, das deutlich kürzer und unterhaltsamer ist. :D
Ernstgenommen krankt seine Argumentation allerdings stark dran, dass er nicht objektiv rangeht, sondern offensichtlich alles versucht, als Schwäche von PHP auszulegen. Man kann sich nicht gleichzeitig darüber beschweren, dass es die wirrsten Funktionalitäten hat, und dass es nicht sämtliche Funktionaltitäten hat, die jemals irgendeine andere Sprache hatte.
Grundsätzlich hat er aber natürlich recht. PHP ist absolkut grauenhaft. Jetzt kann ich's allerdings einfach schon viel zu gut, um auf was anderes umsteigen zu wollen. ^^""
16.05.2012, 15:07
Jesus_666
PHP ist nicht besonders gut, aber richtig schlimm ist, was manche Leute mit PHP anstellen.
Wir verwenden in der Firma WordPress.
Jetzt haben wir seit Neuestem das Problem, dass Leute unsere wp-comments-post.php extern aufrufen und Unsinn damit anstellen. Wer hätte es gedacht? Ein WordPress, das zugespammt wird. Das mußte ja so kommen.
Da wir gerade nicht in der Lage sind, ein Plugin wie Antispam Bee zu integrieren, wollen wir eine einfache Lösung verwenden. Datei ins Theme verschieben, Aufrufe im Kommentarformular anpassen, Original per .htaccess sperren, fertig.
Aber WordPress wäre nicht WordPress, wenn es so einfach wäre. Seit der Artikel gepostet wurde, hat sich die Struktur von WordPress geändert. In WordPress 3 ist nicht länger das Theme dafür zuständig, das Postformular zu erzeugen, sondern der WordPress-Kern.
Der Kern ist dafür zuständig, ein Formular zu erzeugen.
MVC, motherfucker. Have you even heard of it? Aber hey, wer kann schon MVC von einer Codebase verlangen, die schon Schwierigkeiten damit hat, auch nur prozedural zu sein? (Protip: Wenn man eine Funktion schreibt, die auf Daten arbeitet, dann sollte man ihr auch alle Daten als Parameter geben und nicht von einem halben Dutzend globalen Variablen abhängig sein. Ich sehe dich an, get_the_content().)
Wenn ihr Schmerzen mögt, dann seht euch mal die zuständige Datei an und scrollt zu der Funktion ab Zeile 1510. Ja, der WordPress-Kern beinhaltet fiesestes PHTML und sie haben die Funktion nicht mal pluggable (= von Themes und Plugins überschreibbar) gemacht. Wenn du nicht vorhast, die komplette Funktion nachzubauen und damit deinem Theme eine Abhängigkeit auf eine interne Funktion von WordPress zu geben, kannst du nicht mal entscheiden, ob du das Formular in HTML oder XHTML kriegst; das hängt von der WordPress-Version ab.
Wer kommt auf so was? Wer denkt sich "Hey, bisher haben wir diese View-Funktion im View, aber ich finde, daß sie im Controller viel mehr Sinn macht"? Okay, WordPress hat einen Haufen Legacy-Code, aber warum haben sie das Design wissentlich schlechter gemacht? Das ist Erstsemester-Niveau und nicht Code, den man in einer der erfolgreichsten Softwareplattformen der Welt erwartet.
Meine Fresse.
19.05.2012, 01:44
niR-kun
Meine längste Zeit die ein Compile-Vorgang gebraucht hat, war 3 Stunden auf'm Lappi.
Was ich da am Wickel hatte: Linux 3.4-rc6 (der Kernel selber war in 20min fertig, der Rest war die ganzen Module compilieren, mit Default-Konfiguration).
Warum ich das compiliert hatte: Bug-Report vervollständigen mit Infos. Ich habe da einen schönen Bug im Kernel auf meinem Lappi, natürlich eine Regression.
Leider habe ich zu spät gelesen, dass ich make auch noch den Parameter -j[Zahl] geben kann (z.B. -j4 für 4 Aufgaben, die parallel ausgeführt werden sollen).
Ach ja, um auf PHP zurück zu kommen:
PHP-Bashing macht immer Spaß, ich kann mich an folgendes erinnern: http://blog.fefe.de/?ts=b17a03df
PHP mag ja einen Sinn haben, aber es ist einfach nur so schlecht geschrieben und völlig verbuggt.
PS: Ich brauch eine neue Tastatur.
Wenn man für 5 Wochen Tag für Tag auf einer Laptop-Tastatur tippt (Graka vom Desktop-PC defekt und reklamiert, natürlich hab ich keine Ersatz-Graka da), fühlt sich eine "normale" Tastatur an als ob man auf einer Schreibmaschine rumtippt.
19.05.2012, 11:05
Whiz-zarD
Das Problem an PHP ist einfach, dass es von einer großen Community entwickelt wird und jeder seine eigenen kleinen Brötchen backt.
Schaut man sich hingegen andere Sprachen an, so fällt schon auf, dass es dort nur eine kleine Gruppe gibt, die die Design-Entscheidungen treffen.
Beim gescheiterten PHP6 musste ich mir auch an den Kopf fassen. PHP6 sollte ja mit einer Unicode-Unterstützung ausgestattet werden, aber nicht nur bei der Ausgabe (da wäre es mal bitter nötig), sondern auch im Quellcode. Das heißt im Klartext, dass auch hebräische, chinesische, ... Funktionsnamen zulässig gewesen wären, was auch der primäre Gedanke dahinter war. Ich frage mich, wer dort so viel Rotwein gesoffen hat, um auf diese Idee zu kommen? Zum allen Überfluß hätten wir nicht nur ein Gemische aus strukturierter- und objektorientierter Programmierung, sondern noch ein Gemische aus Sprachen.
Und was Wordpress angeht:
Wordpress ist so ein Kandidat, um aufzuzeigen, wie man es an vielen Stellen nicht machen sollte.
Man siehe sich mal die Translate() Funktion an.
Der zu übersetzende Satz wird als Index missbraucht. D.h. er sucht diesen Satz in seinen Übersetzungstabellen. Also muss der Satz auch zu 100% stimmen. Ansonsten findet er ihn nicht.
Ist ja auch sehr sinnvoll ... Die haben wohl den Begriff "assoziatives Array" zu wörtlich genommen.
19.05.2012, 11:30
Xardas der Dunkle
Das mit dem translate beruht allerdings auf gettext einem Unix Standard ... ist also keine reine PHP Erfindung.
(Ändert nichts daran das gettext einfach nur Schwachsinn ist^^)
19.05.2012, 14:01
Kyuu
Zitat:
Zitat von Xardas der Dunkle
(Ändert nichts daran das gettext einfach nur Schwachsinn ist^^)
Warum ist gettext Schwachsinn?
19.05.2012, 14:32
Whiz-zarD
Angenommen, man verschreibt sich, oder die Texte (die ja gleichzeitig die Indizes sind) ändern sich.
Dann darfst du alles anpassen, weil er die Übersetzungen nicht findet.
Angenommen der Default-Text würde "There's an error" heißen. Dann rufst du gettext("There's an error"); auf.
Nun kommt einer auf die Idee und ändert den Text in "Sorry, but there is an error" und schwupps könnte deine Anwendung den Text nicht mehr übersetzen, da nun nach dem falschen Text gesucht wird.
Man kann jetzt anfangen, anstatt Texte nun eindeutige und prägnante Indizes (z.B. ERROR) zu nehmen, aber das ist ein Workaround, der dieses bescheuerte Prinzip umgeht. Aber hier hat man das Problem, dass er als Default-Wert nun die Indizes verwendet. Wenn du also nun nicht die entsprechende Sprachdatei hast, würde anstatt "Sorry, but there is an error" nun "ERROR" in deiner Anwendung stehen.
19.05.2012, 14:41
Lukas
Und was schlägst du als Alternative vor?
19.05.2012, 15:16
Whiz-zarD
Eine Mischung aus beidem. Eine Suche über einen eindeutigen Index, der nach einen übersetzten Text sucht und wenn er keinen findet, einen geeigneten Default-Wert zurückliefert.
z.B.
Index: ERROR
Default-Wert: "Sorry, but there is an error"
deutsche Übersetzung: "Tut uns leid. Es ist ein Fehler aufgetreten."
mit gettext("ERROR", "de_DE"); würde er nun die deutsche Übersetzung zurückgeben.
Wenn man aber nun gettext("ERROR", "fr_FR"); ausführt, würde er nun den default-Wert zurückgeben, da es keine französische Übersetzung gibt. Auf diese weise lässt sich der Default-Wert ändern, ohne dass die Anwendung angepasst werden muss. Diese Variante ist zwar auch fehlerträchtig, da sich auch die Indizes ändern können, aber diese ändern sich nun mal seltener als ganze Texte und bis jetzt habe ich in jeder Firma, wo ich bis jetzt als Softwareentwickler tätig war, diese Lösung gesehen.
19.05.2012, 17:26
Xardas der Dunkle
Wir nutzen auf der Arbeit SilverStripe das nutzt genau diese Mischung:
Code:
_t('ClassName.ERROR', 'There has been an error');
über ein Script werden alle Dateien automatisch geparsed und die Zuordnung der Indizes zu ihren englischsprachigen default Werten weggeschrieben.
Somit hat man immer Index und den Standard Text zusammen. (Allerdings sollte man sich auf den default-text im Quellcode nicht verlassen, da er ja über die Sprachdatei überschrieben werden kann.)
19.05.2012, 22:37
DFYX
Zitat:
Zitat von Whiz-zarD
Das heißt im Klartext, dass auch hebräische, chinesische, ... Funktionsnamen zulässig gewesen wären, was auch der primäre Gedanke dahinter war. Ich frage mich, wer dort so viel Rotwein gesoffen hat, um auf diese Idee zu kommen?
Frag mal bei Sun bzw. Oracle an. Java erlaubt das auch.
20.05.2012, 14:52
niR-kun
Es ist auf jeden Fall möglich, dass man in Java Funktionen und Variablen mit allen Schriftzeichen ( aus UTF-16 - außer Klammern, spezielle Steuerzeichen, \ und / ) nennen kann. Man muss dann nur drauf achten, dass man als Encoding der Quellcode-Dateien standardmäßig UTF-16 nutzt.
Ich halte mich aber an die Konvention alle Variablen und Funktionen in englisch zu deklarieren.
Übrigens muss ich mich in Rahmen eines "Praktikums" gerade mit modellgetriebene (nicht modellbasierte!) Softwareentwicklung mit EMF und Entwicklung von Plugins und Editoren mit GEF auf Basis von Eclipse rum ärgern. Die Modelle selber und den Quellcode automatisch daraus erstellen ist kein großes Ding, aber der Code den man für GEF erstellen muss ist echt schwer und umständlich.
Habt ihr schon mal modellgetrieben etwas entwickelt?
PS: Modellgetrieben != Modellbasiert ;)
20.05.2012, 14:59
R.D.
Zitat:
Zitat von niR-kun
Habt ihr schon mal modellgetrieben etwas entwickelt?
Nein, ich entwickle lieber zum Ziel hin als davon weg :D
(Da will einer einen humanoiden Roboter bauen, der über Windows läuft und dessen Software von vielen Personen modulweise entwickelt werden soll, genauso wie die Hardware, was das ganze zu einem billigen "no-brainer" werden lassen soll... Tjo.)
Dieser Absatz ist ja genial:
Zitat:
Zitat von TESLACOIL
Some one might be into robot hands so will focus on this, another persons interest may be object recognition or speech output. By using a single physical body plan and by separating all the code into stand alone exes which share data via simple txt files it is possible to build something pretty amazing for a fraction of the time money and effort.
Zeigt mir bitte mal, wie man über "simple txt files" in einem humanoiden Roboter, in Realtime Daten zwischen für "robot hands" oder "object recognition" zuständige "stand alone exes" austauschen soll. ROFL.
21.05.2012, 22:01
Moyaccercchi
Zitat:
Zitat von Cherry
[...] Zeigt mir bitte mal, wie man über "simple txt files" in einem humanoiden Roboter, in Realtime Daten zwischen für "robot hands" oder "object recognition" zuständige "stand alone exes" austauschen soll. ROFL.
Jede Anwendung liest zehnmal pro Sekunde die für sie zuständigen txt-Dateien. Wenn irgendeine Anwendung ihr eine Nachricht schicken will, wird die in die txt geschrieben, und die andere Anwendung liest es. It's not a bug, it's a feature!
22.05.2012, 12:02
R.D.
Besser wäre eine Main.exe die Daten im Ram verwaltet und alle Module können drauf zugreifen. Erfordert wahrscheinlich etwas rumgefummel :D
22.05.2012, 12:14
Cherry
Zitat:
Zitat von Moyaccercchi
Jede Anwendung liest zehnmal pro Sekunde die für sie zuständigen txt-Dateien. Wenn irgendeine Anwendung ihr eine Nachricht schicken will, wird die in die txt geschrieben, und die andere Anwendung liest es. It's not a bug, it's a feature!
Nur 10x pro Sekunde? Fail, zu langsam für anspruchsvolle Sachen. 1000x pro Sekunde? Fail, zu viele unnötige Festplattenzugriffe, außerdem kann man ja nicht gleichzeitig auf eine derartige Datei zugreifen. :D
Es würde funktionieren, wenn die Datei ein Memory Mapped File wäre, allerdings wäre dann "simple txt" wohl nicht das Format meiner Wahl.
22.05.2012, 12:54
Desmulator
warum überhaupt dateien? Wenns um Kommunikation geht, etwas utopisch, Messages und dann die Daten über eine mit der Message gesendeten Pipe schicken. Oder GlobalMemory.
Vorallem sollte von "simple txt" nicht etwas irgendwas mit sgml oder gemacht werden. dauert viel zu lange zum parsen. direkt vordefinierte binäre strukturen.
22.05.2012, 13:10
Whiz-zarD
Zitat:
Zitat von Cherry
Nur 10x pro Sekunde? Fail, zu langsam für anspruchsvolle Sachen. 1000x pro Sekunde? Fail, zu viele unnötige Festplattenzugriffe, außerdem kann man ja nicht gleichzeitig auf eine derartige Datei zugreifen. :D
Wer sagt, dass Textdateien unbedingt auf der Festplatte liegen müssen?
Eine RAM-Disk würde auch gute Dienste machen ;)
22.05.2012, 13:13
DFYX
Zitat:
Zitat von Whiz-zarD
Wer sagt, dass Textdateien unbedingt auf der Festplatte liegen müssen?
Eine RAM-Disk würde auch gute Dienste machen ;)
Kann Windows sowas überhaupt?
22.05.2012, 13:16
Whiz-zarD
Nicht von Haus aus, aber es gibt diverse Software dafür.
22.05.2012, 15:32
Jesus_666
Zitat:
Zitat von Desmulator
warum überhaupt dateien? Wenns um Kommunikation geht, etwas utopisch, Messages und dann die Daten über eine mit der Message gesendeten Pipe schicken. Oder GlobalMemory.
Vorallem sollte von "simple txt" nicht etwas irgendwas mit sgml oder gemacht werden. dauert viel zu lange zum parsen. direkt vordefinierte binäre strukturen.
Vielleicht, weil der Kerl, der das Projekt anstößt, noch nie von IPC gehört hat?
Gott, bitte nicht ...
(Der Vorschlag ist zwar eher zynisch gemeint, aber der könnte gewisse Personen auf dumme Ideen bringen)
11.08.2012, 15:37
Cherry
Zitat:
Zitat von Cherry
Code:
Print Sgn(Abs(CInt(&h80000000)))
Sleep
What is the output of this program going to look like?
"1", one would probably think.
You are wrong, it's "-1".
But mind you, this is not a bug. It's merely a result of how signed integers work. The absolute value of a number with only the highest bit set (in any kind of integer, so it applies to Byte, Short, Integer and LongInt) will be negative! Actually, Abs(x) will return x in this case.
Think about it! The range of a signed 32-bit integer goes from -2147483648 (-&h80000000, which is +&h80000000 if you cast treat it as unsigned!) to +2147483647 (+&h7FFFFFFF). The absolute value of -2147483648 would be +2147483648, but this value needs 33 bits including the positive sign bit! Thus, an overflow occurs and the 32-bit value returned by Abs() will again be -2147483648.
A variation of this pitfall is:
Code:
Dim x As Integer
Input x
If x = -x Then Print "Neutral number!" Else Print "Non-neutral number!"
Sleep
This code will output "Neutral number!" if you input 0, but also if you input 2147483648 or -2147483648!
Just keep this in mind. It might produce some nasty bug one day if you blindly assume that Abs(x) will never be a negative number!
Coole Sache! Mit libGDX haben wir über das letzte Jahr hinweg auch ein Projekt entwickelt, das ist echt ein schönes Framework. Bin gespannt auf deine Engine. :)
20.08.2012, 20:44
R.D.
Die Engine ist der Beste wo gibt!!!1
Aktuell macht der Entwickler Tests um zu schauen ob er das Ganze nicht auch auf Console zum laufen bringt (Android, iOS und WebGL geht ja schließlich auch so why not). Es gibt aber einige Sachen die mich stören und wo ich mit wünschte man würde mehr plattform spezifische Features einbaut (vor allem was sound angeht)
Ich arbeite eigentlich die ganze Zeit dran und man kann schon damit arbeiten, eine einfache Klasse die z.B. BasicGame oder Game implementiert und vom GameContainer verwaltet wird kann schon für einfache Sachen genutzt werden. Als Test soll auf jeden Fall ein Tetrisklon her (Will auch gleich zeigen wie man Speicher sparen kann, z.B. mit der ObjectIntMap).
21.08.2012, 16:47
niR-kun
Für Sound nutzen wir beim Cuina Project Paulscode Soundsystem.
Java und Sound ist immer so eine Sache. ;)
Ich fände es schön, auch wenn man ein Konkurrenz-Projekt baut, dass man zumindest soweit zusammen arbeitet, das Maps und Spieldaten einfach von Engine X auf Engine Y portiert werden können. Ich schlage da vor zusammen einen minimalen projektunabhängigen offenen Standard zu entwickeln (und gegebenenfalls auch zu erweitern). Wie und ob man nun den Standard implementiert ist nun dem/den Entwickler/n offen gestellt.
21.08.2012, 21:22
R.D.
Liste der Anhänge anzeigen (Anzahl: 1)
Mein MapSystem ist komplett offen ;) Es funktioniert weil ich raw bytes schreibe und lese und das ganze dynamische laden kann. Übrigens baue ich keinen Maker oder so. Nur eine Engine. Und diese Engine werde ich auch nicht weiter groß pushen :) Wer will kann sich da nehmen was er will (Ich meine, ich hab das nicht umsonst mit BSD als Lizenz gemacht). Also sie das nicht als Konkurrenz.
@Sound
Ah ja, ich würde es auch nutzen wenn es nur um Desktop ginge. Aber so einfach ist die Sache leider nicht. Allein Web ist Sound irre kacka. libgdx nutzt ein eigenes system zum abspielen von Sounds und Musik das wie auch alles andere in der Engine auf den Backends beruht. Es funktioniert durch Interfaces aber es gibt eben Sachen die nicht möglich sind. Es gibt z.B. keine setPosition method für Musik (Obwohl es für Desktop und Android nicht schwer ist zu implementieren). Diese Drawbacks muss man halt beachten.
Java und Sound ist imho keine große Sache. Wenn ich schon OpenGL und Java nutze (was auch libgdx tut), kann ich auch OpenAL nutzen (Pauscode System hat ja eine solche Implementation für LWJGL). Ich finde eher das viele Engine extrem lacken was Sound angeht. Es gibt nie Möglichkeiten Sound dynamisch zu behandeln wie in Zelda oder SSX. Das muss man selbst erledigen (auch hier bietet libgdx eine Möglichkeit über ein AudioDevice, allerdings müssen dann alle Daten selbst geladen und erstellt werden, sprich man muss Ahnung in Sachen low-level haben). Viele Engines haben auch Probleme mit mehr als einem Stream (Danke JOrbis).
Edit:
Übrigens kann man mit der Engine bereits was machen. Ich hab mal meinen Partikeltest auf die Schnelle in die neue Engine gebracht, Ergebnis: Anhang 15043
22.08.2012, 14:45
niR-kun
Zitat:
Zitat von R.D.
Mein MapSystem ist komplett offen ;) Es funktioniert weil ich raw bytes schreibe und lese und das ganze dynamische laden kann.
Offen ist zwar gut, aber für mich sind deine Map-Dateien dennoch Bit-Müll, weil ich nichts mit anfangen kann.
Ich kann deine Map-Dateien nicht einfach Notepad++ öffnen und bearbeiten, weil sie nicht menschenlesbar sind.
Worauf ist hinaus will ist eine öffentliche Minimal-Spezifikation für rpg_rt-ähnliche Engines, angefangen wie das Map-Format aufgebaut ist.
Es spart erstens viel Zeit sich ein eigenes Format auszudenken und zweitens wer will schon für sagen wir mal 10 Engines mit je unterschiedlichem Map-Format 10 Konvertierungsalgorithmen in das eigene Map-Format schreiben.
22.08.2012, 17:08
R.D.
Was sparst du dir denn für Zeit ein Format auszudenken? So wie ich das sehe tun das viele Entwickler ohne groß drüber nachzudenken. Sie schreiben einfach die Daten sie brauchen und mehr tue ich in dem "Map-Format" ja auch nicht. Das es für dich nach müll aussieht liegt wahrscheinlich daran das es mittels ZLib komprimiert wurde. Ich will halt kein XML oder Json dafür haben. Das ist mir zu bloated und naja wie gesagt, schau in die MapIO Klasse, da kannst du sehen wie man es lesen kann. Es sind nur ein paar primitives und Strings die ich schreibe. Keine Magie :)
Das Ganze ist auch eher ein Feature in der Engine. Ich werde es sehr wahrscheinlich entfernen und als Extension wieder ermöglichen. Ich will eben nur aktuell alles in einem Projekt haben :D
Es ist auch meines Wissens nach nur in meiner Engine so. Die meisten nutzen halt Tiled. Aber ich mag Tiled nicht. Total nutzlos das Tool wenn man mehr als "darstellen" will. Aktuell ist das ja nicht in meinem Map-Format drin aber es wird noch ein Event-System eingefügt das dem von Rpg Maker sehr ähnlich ist (Die Idee ist allein von Lachsen).
22.08.2012, 17:58
Whiz-zarD
Zitat:
Zitat von R.D.
Sie schreiben einfach die Daten sie brauchen
Und das ist oftmals das Problem in größeren Projekten.
Man denkt nicht nach. Man tut einfach irgendwas.
In so einer Situation befinde ich mich auch grad auf der Arbeit. Für ein und das selbe Problem gibt es tausend unterschiedliche Implementierungen und ich darf ein Feature bauen, womit alle Implementierungen zurechtkommen können. Am liebsten würde ich sagen: "Gebt mir ein halbes Jahr Zeit und ich mache alles neu!", nur welche Firma investiert 180 PT für ein einzelnes Feature, welches die meisten Kunden eh nicht benutzen, bzw welcher Kunde würde 180 PT für ein Feature bezahlen wollen?
22.08.2012, 18:21
Jesus_666
@Whiz: PT? Das einzige, wozu ich das auflösen könnte, wären "Punkte" wie in "Prozentpunkte", aber ich bezwifle, daß deine Firma Verträge macht, in denen sie 180% ihres Einkommens weggeben...
Insgesamt aber ja. "Ich schreibe mal Kram in eine Datei, ohne drüber nachzudenken" funktioniert so lange, wie man davon ausgeht, daß niemals jemand mit einem kompatibel sein will.
Beispiel: Es gibt für DSA3 und DSA4 einen Charaktereditor namens "DSAWiege". Für DSA3 war das Ding echt heißer Scheiß; für DSA4 wurde es von einem OSS-Projekt überholt. Wir haben zu DSA3-Zeiten ewig den Entwickler angehauen, daß er uns doch mal die Sourcen gibt; unter Anderem deshalb, weil sämtliche Datenformate aus "ich schreibe einfach Strings in einer Textdatei und die Reihenfolge bestimmt, was was ist" bestanden. Richtig geil, wenn man den Kram verwerten möchte, weil das ewig langes Reverse Engineering bedeutet.
Die Sourcen hätten da auch nicht furchtbar viel Zeitersparnis gebracht.
Beispiel: Magic Workstation. Ein Programm, mit dem man online MtG spielen kann. Ganz nett und hat in der Regel recht aktuelle Kartenlisten komplett mit eingebackenen Errata. Sehr geil, wenn man eine Kartendatenbank bauen möchte... Bis auf ein Problem: Das Datenformat für die Kartenlisten ist "ich nehme dieses Delphi-Objekt und schreibe es auf die Festplatte". Damit sind die Listen exakt dann lesbar, wenn man Delphi benutzt und alle verwendeten Klassen hat. Magic Workstation ist nicht OSS.
Ich habe meine Karten exportiert gekriegt, aber es involvierte eine recht zerbrechliche Toolchain aus mehreren Konvertierungsprogrammen.
Wenn du ein Datenformat entwickelst, mach' es selbsterklärend (denke "XML") und/oder dokumentiere es vernünftig. Es sei denn, Inkompatibilität mit dem Rest der Welt ist ein Designziel.
22.08.2012, 18:42
Whiz-zarD
Zitat:
Zitat von Jesus_666
@Whiz: PT? Das einzige, wozu ich das auflösen könnte, wären "Punkte" wie in "Prozentpunkte", aber ich bezwifle, daß deine Firma Verträge macht, in denen sie 180% ihres Einkommens weggeben...
In so einer Situation befinde ich mich auch grad auf der Arbeit. Für ein und das selbe Problem gibt es tausend unterschiedliche Implementierungen und ich darf ein Feature bauen, womit alle Implementierungen zurechtkommen können. Am liebsten würde ich sagen: "Gebt mir ein halbes Jahr Zeit und ich mache alles neu!", nur welche Firma investiert 180 PT für ein einzelnes Feature, welches die meisten Kunden eh nicht benutzen, bzw welcher Kunde würde 180 PT für ein Feature bezahlen wollen?
Du bist nicht allein! (=
Es gibt nichts ätzenderes als historisch gewachsene Projekte, an die zig Entwickler unzählige Änderungen rangeflanscht haben.
Die Auswirkung von tieferen Modifikationen ist quasi "untestbar", weil man mit an Sicherheit grenzender Wahrscheinlichkeit doch einen der hundert Sonderfälle vergisst und spätestens beim Going-Live knallts dann an allen Ecken und Enden.
Weil das ein verdammt teurer Spaß würde, bleibt einem also nichts übrig, als seinen eigenen Kram auch irgendwie ranzuflanschen.
@ R.D.: Gute Planung zaht sich wirklich aus! (:
22.08.2012, 23:11
R.D.
@Whiz
Ich meinte ehr direkt Spiele usw und weniger Engine aber egal, wie gesagt sehe ich das eh eher als Extension :) Man sollte dazu vllt auch Wissen das die Engine mehr oder weniger aus einem Spiel entsteht. ich enkopple nur Sachen die ich eh wiederverwenden werde. Wenn ich damit Leuten noch helfen kann, schneller ihre Ideen auf den Bildschirm zu kommen mach es umso mehr Spaß.
@NPC-Fighter
Was genau meinst du damit?
23.08.2012, 00:26
Kyuu
Ich sehe nichts Verwerfliches in einem Binärformat, d.h. solange es gut durchdacht und dukumentiert ist. Erweiterbarkeit lässt sich auch in Binärformaten realisieren, z.B. ähnlich wie es RIFF macht. XML finde ich persönlich zu aufgebläht und würde JSON vorziehen, falls Menschenlesbarkeit erforderlich ist und Binärdaten nicht gespeichert werden sollen.
23.08.2012, 14:37
MagicMagor
Hallo,
ich habe da eine kleine C++ Frage.
Mein Compiler weigert sich den Typ int64_t in time_t ohne expliziten Cast umzuwandeln.
Code:
#include <time.h>
#include <stdint.h>
int main() {
int64_t test = 1234567890;
tm* now = localtime(&test);
return 0;
}
Dieser Code ergibt als Ausgabe:
Code:
test.cpp: In function ‘int main()’:
test.cpp:7: error: invalid conversion from ‘int64_t*’ to ‘const time_t*’
test.cpp:7: error: initializing argument 1 of ‘tm* localtime(const time_t*)’
Meine Frage ist, woran liegt das? An einer zu alten Compiler-Version? (Bei mir läuft 4.2.1) Und nein, einfach explizit zu casten ist keine brauchbare Lösung für mich.
23.08.2012, 22:44
DFYX
Da wird kein int64_t sondern ein int64_t*, also ein Pointer konvertiert. Pointerkonvertierung macht C++ normalerweise NIE automatisch.
24.08.2012, 17:47
niR-kun
Konvertierung von Datentypen, ach ja ... ich kann mich in C noch an die Funktion atoi erinnern, ein Beispiel wie man Funktionen nicht benennen sollte.
25.08.2012, 00:01
Kyuu
Wie würdest du es benennen? Soll übrigens für "ASCII to Integer" stehen, soweit ich weiß.
26.08.2012, 00:13
makenshi
int convertAsciiToInt ( const char * ascii);
oder
int asciiToInt ( const char * ascii);
Beschreibende Methodennamen sind da in meinen Augen am besten. Sind zwar mehr zu tippen, aber wozu gibt es heutzutage die Auto-Vervollständigung.
Damals war es ja mehr der gute Ton alles kurz zu machen, als es leicht lesbar zu machen.
26.08.2012, 16:24
Kyuu
atoi ist aber beschreibend (und in meinen Augen auch leicht lesbar). Der einzige Unterschied zwischen atoi und AsciiToInt ist doch der, dass in atoi "Ascii" und "Int" abgekürzt sind. Das Problem mit atoi ist wohl eher, dass heute nicht jedem sofort klar ist, wofür das "a" steht (mir war es anfangs auch nicht klar). Ich schätze, dass der Term "ASCII" zur Blütezeit von C sehr viel präsenter war und es machte Sinn ihn durch "a" abzukürzen. Heute sieht es allerdings nicht sehr viel anders aus: Wenn der Name einer Funktion sinnvoll abgekürzt werden kann und es bei der abgekürzten Version immernoch klar ist, was die Funktion macht, wird der Name abgekürzt. Und das ist absolut in Ordnung. Selbst eine derart ausführliche Sprache wie Java hat in ihrem Repertoire Funktionen mit abgekürzten Namen, wie etwa die mathematischen Funktionen, weil es erstens Sinn macht solch elementaren Funktionen kurze Namen zu geben und zweitens, weil die Abkürzung immernoch Sinn ergibt und es klar ist, was die Funktion macht. Krampfhafte Ausführlichkeit ist meiner Meinung nach genauso schädlich (selbst heute, mit automatischer Vervollständigung), wie kryptische Abkürzungen. Es muss abgewogen werden und abgewogen hast du ja auch, oder weshalb ist deine Wahl auf "AsciiToInt" und nicht etwa auf "ConvertAsciiEncodedCStringToIntegerAndReturnTheResult" gefallen?
02.09.2012, 18:30
makenshi
Weil es einen Unterschied gibt zwischen "verbose" Namen und einfach beschreibenden Namen. Aber nein, schon klar darauf willst du nicht hinaus.
Wie du selbst sagst muss man wissen was das "a" und das "i" zu bedeuten hat. Dann erst mach auch das "to" im Methodennamen Sinn.
Das Ganze mit den Methoden von java.lang.Math zu vergleichen finde ich nicht ganz so passend.
Immerhin hast du hier mathematische Ausdrücke die damit quasi von der fachlichen Seite vorgegeben sind.
Meine Wahl ist von daher eher auf asciiToInt gefallen.
Ich finde hier sieht man von vornherein was die Methode tun wird. Hierfür ist auch kein Wissen nötig was irgendein Abkürzung nun genau bedeutet.
Sicherlich gäbe es hier noch passendere Name.
Man könnte sich z.B. sparen was überhaupt zurück gegeben wird, da man dies idR auch anderweitig sehen kann.
08.09.2012, 14:27
Kyuu
Zitat:
Zitat von makenshi
Das Ganze mit den Methoden von java.lang.Math zu vergleichen finde ich nicht ganz so passend.
Immerhin hast du hier mathematische Ausdrücke die damit quasi von der fachlichen Seite vorgegeben sind.
Gutes Argument, daran habe ich nicht gedacht. Ich habe zu wenig Erfahrung mit Javas Bibliotheken um passendere Beispiele nennen zu können (falls es welche gibt) und Lust darauf noch weniger.
Zitat:
Zitat von makenshi
Meine Wahl ist von daher eher auf asciiToInt gefallen.
Ich finde hier sieht man von vornherein was die Methode tun wird. Hierfür ist auch kein Wissen nötig was irgendein Abkürzung nun genau bedeutet.
"ascii" und "Int" sind aber auch Abkürzungen. Aber ich schätze, dir geht es mehr darum, dass das "to" hervorgehoben ist.
08.09.2012, 15:07
DFYX
Zitat:
Zitat von Kyuu
"ascii" und "Int" sind aber auch Abkürzungen. Aber ich schätze, dir geht es mehr darum, dass das "to" hervorgehoben ist.
Aber es sind (im Kontext der Softwareentwicklung) eindeutige Abkürzungen. atoi könnte dagegen zum Beispiel auch "all to int" oder sonst was stehen.
11.09.2012, 11:26
Kyuu
"all to int" macht - zumindest für mich - keinen Sinn, vor allem weil es itoa gibt. Mir fällt jetzt auf Anhieb auch nichts ein, was sonst (außer "ASCII") für das "a" in atoi stehen könnte und Sinn machen würde. Hand aufs Herz, es ist doch nicht so, dass man die benötigte Information alleine aus dem Funktionsnamen entschlüsseln muss. In der Praxis schaut man sich doch immer die Dokumentation, oder zumindest die Deklaration an. Selbst bei AsciiToInt ist nicht alles sofort klar und man muss die Deklaration heranziehen. Darüber hinaus handelt es sich nicht um irgendeine Funktion aus der Bibliothek eines Drittanbieters, sondern um eine Funktion aus der Standardbibliothek von C, die im Header stdlib.h definiert und unter "String conversion" aufgelistet ist (zumindest auf cplusplus.com).
Zugegeben, das "a" in atoi könnte für jemanden, der den Funktionsnamen zum ersten mal liest, schwierig zu entziffern sein (wie gesagt, ich wusste anfangs auch nicht, dass es für ASCII steht). Aber das alleine reicht für mich nicht aus um den Funktionsnamen als "ein Beispiel wie man Funktionen nicht benennen sollte" zu betiteln, in Anbetracht dessen, dass - wie ich meine - der Term ASCII früher deutlich präsenter war und damit auch klar war, was mit dem "a" gemeint ist, sowie in Anbetracht der Punkte, die ich oben genannt habe und vielleicht noch aus Respekt gegenüber den Autoren der C-Standardbibliothek. ;)
11.09.2012, 11:49
Whiz-zarD
Das "a" könnte aber auch Array heißen, da hier ein Char-Array in die Funktion reingereicht wird. Ein String ist ja in C nichts weiter, als ein Char-Array.
11.09.2012, 12:06
Indy
Code:
<?php
class tx_kbs_con_countrycon extends tx_eb_mvc_con_acon {
/**
* countryrep
*
* @var tx_kbs_dom_rep_countryrep
*/
protected $countryrep;
/**
* icountryrep
*
* @param tx_kbs_dom_rep_countryrep $countryrep
* @return void
*/
public function icountryrep(tx_kbs_dom_rep_countryrep $countryrep) {
$this->countryrep = $countryrep;
}
/**
* action list
*
* @return void
*/
public function laction() {
$country = $this->countryrep->fall();
$this->v->asn('country', $country);
}
/**
* action show
*
* @param $c
* @return void
*/
public function saction(tx_kbs_dom_mod_country $country) {
$this->v->asn('country', $country);
}
}
?>
Ich kenne die Bedeutungen hinter den Abkürzungen, also kann es eigentlich nicht so verkehrt sein. :A