PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IM IN YR LOOP\n VISIBLE FOO\n IM OUTTA YR LOOP - Der Programmierer-Spamthread #2



Seiten : [1] 2

Jesus_666
20.05.2010, 23:52
Willkommen in Thread 10b!

this.last()

DFYX
20.05.2010, 23:54
Der neue Threadtitel ist ja beinahe langweilig. Die frage ist, welche Hälfte wir beibehalten. Die vor dem Bindestrich oder die danach.

Jesus_666
21.05.2010, 00:48
So besser? Für C++ war's gut genug.

drunken monkey
21.05.2010, 13:14
Den Titel check' ich nicht. ^^" Parst das überhaupt eine Sprache so? Und 2 heißt das ja in keinem Fall. o_O" (Also die letzten beiden Zeichen jetzt – der Rest ist ja eh bloß abgeschrieben. ^^")
Ich würde aber überhaupt vorschlagen, im Titel das "while(true) {write();}" in neuen Threads immer durch Sinnlos-Schnipsel aus einer anderen Sprache zu ersetzen. (Und kommt mir jetzt nicht, dass das schon eine andere Sprache ist – ich meinen einen Unterschied, den man merkt. XO)

DFYX
21.05.2010, 13:18
Ja, so hatte ich mir das auch gedacht.

dead_orc
21.05.2010, 13:30
Ich stimme dem Affen zu. Aber immerhin die Nummerierung in Jeez Post-Body stimmt, auch wenn 10b natürlich schöner wäre. :p

Und könnte irgendwer bitte die Threads in eine doubly-linked list umwandeln? Find das immer praktischer...

DFYX
21.05.2010, 13:36
Wenn ich noch die Rechte dazu hätte, würde ichs machen. Ist in der Tat praktischer.

Edit: nein, wäre es nicht ganz. Dann hätten wir keinen Wahlfreien Zugriff mehr. Sprich: nur noch der erste und ggf. der letzte Thread würden in der Forenübersicht auftauchen.

Jesus_666
21.05.2010, 14:01
Den Titel check' ich nicht.
Die hypothetische, seit Jahren versprochene "nächste Version" von C++ ist C++0x. Und nein, das "0x" bedeutet nicht mal mehr was; ursprünglich sollte es darauf hinweisen, daß der Standard irgendwann zwischen 2000 und 2009 rauskommt, was sie ja nicht geschafft haben.

BTW: Im ersten Thread drehte der erste Post sich um was? Richtig, C++0x. Die Referenz ging offensichtlich ins leere.


Okay, dann also ohne C++-Referenz und mit neuem Code und verlinktem Vorgänger...

DFYX
21.05.2010, 14:20
Naja, bis 2015 können sie es theoretisch noch C++0x nennen, wenn sie hexadezimal schreiben. Die Frage ist, ob sie das tun.

Lukas
21.05.2010, 14:22
… und ob sie bis 2015 fertig werden. :P

Mivey
21.05.2010, 15:23
Naja, bis 2015 können sie es theoretisch noch C++0x nennen.
Oder sie behaupten es war eine Zahl vom Sexagesimalsystem und haben Zeit bis 2059

dead_orc
21.05.2010, 15:28
Oder sie behaupten es war eine Zahl vom Sexagesimalsystem und haben Zeit bis 2059

Gibts die Zeichen dafür eigentlich in Unicode?

Mivey
21.05.2010, 15:32
Gibts die Zeichen dafür eigentlich in Unicode?
Glaub kaum, dass die alten Babylonier ihre Interessen beim ISO durchsetzen konnten :D

Whiz-zarD
21.05.2010, 16:01
passend zum 30. Geburtstag von Pac-Man beinhaltet heute Google ein Pac-Man Spiel als Logo, wo man noch selbst spielen kann.

DFYX
21.05.2010, 16:10
Geile Idee und gut umgesetzt. Manchmal bin ich von Google echt positiv überrascht.

WeTa
21.05.2010, 16:13
Haha, dachte zuerst es wäre "nur" ein normales Logo, bis ich den Münzeinwurf gesehen habe. Coole Sache :A

dead_orc
21.05.2010, 17:22
Geile Idee und gut umgesetzt. Manchmal bin ich von Google echt positiv überrascht.

Gut umgesetzt kann man wohl sagen. Google hat ziemlich erfolgreich gezeigt, dass man kein Flash braucht, um tolle Spiele auf Webseiten zu machen. :D
Allerdings finde ich das neue Google Design gar nicht toll. Nicht nur, weil ich ein Gewohnheitstier bin, sondern weil sie leider auch nicht darüber nachgedacht haben, dass es Menschen mit einem dunklen System-Theme gibt, bei denen jetzt weiße Schrift auf weißen Buttons ist...

R.D.
29.05.2010, 14:49
Moin.

Ich habe mal eine Frage bezüglich Java, bei der ich nicht mehr weiter weiß (Und das trotz Internets und API :/).
Ich arbeite gerade an einer Anwendung die meinen bereits fertigen StringToImageCreator um einen Editor erweitert.
Dort gibt es eine einfache JMenuBar und und 2 JScrollPanes (die liegen auf einem JPanel:
http://npshare.de/files/5a6dbf0d/bla.png
Das ganze liegt auf einem FlowLayout.

Ich hab nun folgendes Problem, und zwar das sich die beiden ScrollPanes zwar anpassen lassen, aber leider bisher nur im Sinne vom hardcodding, sprich das Fenster größer als gedacht, die Komponenten dazu und pack().
Gibt es eine Möglichkeit die Komponenten auch nach unten hin anzupassen? sonst sieht es nämlich so aus:
http://npshare.de/files/11f37dad/bla.png

Gui ist echt doof :/

Miau
29.05.2010, 17:12
Vermutlich nicht die eleganteste Lösung, aber füg doch einfach einen ComponentListener hinzu und führ deinen Code aus, wann immer das Fenster verändert wird. Etwa so



frame.addComponentListener(new ComponentAdapter(){
public void componentResized(ComponentEvent e)
{
// Hier die Größe der Komponenten anpassen
}
});


Jetzt mal unter der Annahme, du hast den Code für die Größenveränderung schon geschrieben (es klang so) dürfte das eine zumindest schnelle Lösung sein. :)

DFYX
29.05.2010, 17:40
Äh nein, das ist definitiv nicht die eleganteste Lösung. Für sowas gibt es ja die Layout-Klassen. Wenn man die richtig einsetzt, erledigen die das von alleine. R.D., poste einach mal deinen Code, dann schau ichs mir an.

R.D.
29.05.2010, 19:21
@Miau
Gerade auf solche Sachen sollte ich verzichten^^ Aber meien Lösung ist auch nicht viel besser.

@DYFX


public DialogEditor(JMenuBar popUp) {
FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 2, 2);

setFocusable(true);
setBounds(0, 0, 800, 600);
setLayout(layout);

//Initialisierung einige Variablen
saveStatus = true;
data = null;

//tests

//ScrollPane für JTree und Bild Betrachtung!
treePane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
treePane.setPreferredSize(new Dimension(200, 600));
treePane.setWheelScrollingEnabled(true);
add(treePane);
viewPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
viewPane.setPreferredSize(new Dimension(600, 600));
viewPane.setWheelScrollingEnabled(true);
add(viewPane);
....

Darunter kommen noch einige MenuBar-Komponenten mit ihren listenern, aber das sollte egal sein^^

@Edit
Übrigens hab ich es schon über Methode die die Größe des Fensters zurückgeben probiert, was nicht klappt, da die angegebe Größe nicht die richtige ist (er zählt ja den Rand noch mit).

DFYX
30.05.2010, 01:30
Ich bin mir nicht ganz sicher, aber ich glaube, ich hatte mal ein ähnliches Problem. Füg mal spaßhalber zur ContentPane hinzu, statt zum Fenster selbst. Irgendwas war da.

R.D.
30.05.2010, 02:00
uh, ich hab ganz vergessen, das ich das alles auf einem JPanel habe^^
Aber mal sehen ob deine Idee Wirkung zeigt^^

Miau
30.05.2010, 06:08
Ich bin mir nicht ganz sicher, aber ich glaube, ich hatte mal ein ähnliches Problem. Füg mal spaßhalber zur ContentPane hinzu, statt zum Fenster selbst. Irgendwas war da.

Das sollte seit Java5 eigentlich genau auf das gleiche hinauslaufen.

Okay, "vermutlich nicht die eleganteste Lösung" war natürlich untertrieben. Ich bin mir bewusst, dass es eher in die Kategorie Quick&Dirty fällt. ;) Das Problem ist das FlowLayout. Das lässt nämlich, wenn möglich, alle Komponenten auf ihrer bevorzugten Größe und ordnet sie nur an, passt aber keine Größen an. Das heißt, der LayoutManager an sich wird nichts verändern, wenn du die Größe des Fensters änderst. Im wesentlichen wirst du also zu einem anderen LayoutManager wechseln müssen - ich weiß aber nicht, wie sehr du dich mit den verschiedenen Managern auskennst.
Was auf jeden Fall funktioniert ist GroupLayout für das Panel, das Frame kannst du auf (wenn es nicht mehr enthält als das Panel - in dem Fall kannst du das Panel aber eigentlich auch komplett streichen) auf BorderLayout stellen. Ein Tutorial für GroupLayout gibts direkt bei Sun. (http://java.sun.com/docs/books/tutorial/uiswing/layout/group.html)

R.D.
30.05.2010, 12:19
Mit den Layouts kenn ich mich ganz gut aus, hab sie alle mal probiert um zu sehen, was so ganz gut passt.
Den Panel habe ich eigentlich nur, weil ich evtl später noch auf dem Panel zeichnen wollte was damit imho ganz gut geht (Unser Spiel basiert auf einem solchen Prinzip).
Ist ja nicht so als wäre es schlimm da der Frame sich eh auf false stellt was das resizen angeht^^
Mir ging es nur grundsätzlich um die Möglichkeiten, weil man im Beruf sicher nicht solche hardcoding Sachen bevorzugt xD

Jesus_666
30.05.2010, 12:20
...und genau deshalb sind XUL und Cocoa die einzigen GUI-Toolkits, die ich leiden kann.

Kyuu
18.06.2010, 09:28
Things to Say When You're Losing a Technical Argument (http://www.pigdog.org/auto/mr_bads_list/shortcolumn/1914.html) ^^

R.D.
18.06.2010, 12:14
I was reading about that on BugTraq yesterday.

Sehr gut xD

Weiß jemand eine gute Seite für KI's im Gamebereich? Ich will mich da mal etwas rein lesen bevor ich Maker alles zu kompliziert mache.

Kyuu
18.06.2010, 12:20
Na klar:

http://www-cs-students.stanford.edu/~amitp/gameprog.html#ai
http://www.gamedev.net/reference/list.asp?categoryid=18#101

R.D.
18.06.2010, 12:50
Wie praktisch das ich mal eine Ausarbeitung zu naturanalogen Optimierungsverfahren machen musste. So wie es aussieht wird das ja nicht anders gemacht als ich mir das schon gedacht habe.

Die meiste Links verweisen da zwar vor allem auf Shooter (was ich bräcuhte wären eher RPG's), aber trotzdem merkt man die Denkweise dahinter.
Mal ob meine geplante KI wirklich so funktioniert wie gedacht, ich bin da skeptisch... nicht wegen dem Maker eher wegen lack of ability meinerseits.

Die Ki so soll ich grundlegend an Verhalten richten und je nach dem werden einfach verschiedene Bedingungen durchgegangen und mit einem Zufallsgenerator verknüpft. Vllt denk ich auch nur zu kompliziert xD

Kyuu
18.06.2010, 13:10
Wie praktisch das ich mal eine Ausarbeitung zu naturanalogen Optimierungsverfahren machen musste.

Klingt interessant. Wenn du Zeit hast, stelle es doch hier mal vor. :)

R.D.
18.06.2010, 13:17
Klar gerne, ist aber nichts besonderes oder so. Nur etwas das man hier als "Teamprojekt" am Anfang des ersten Semesters macht. Wir haben uns auch nur auf den Evolutionären Algorithmus beschränkt. Die Arbeit blieb halt an mir hängen weil ich der Einzige wahr der das interessant fand.
Irgendwo lümmelt noch ein Präsentation davon rum und ein Seite zu einem Applet welches einige Algorithmen an mathematischen Funktionen zeigt (finde den höchsten Punkt).

So wie ich das gerade sehe existieren sogar 2 Präsentationen. Wobei die eine halt rein davon lebt das man alles erklärt...
Willst du das trotzdem sehen?

Kyuu
18.06.2010, 13:25
Sicher nicht nur ich. ;)

R.D.
18.06.2010, 13:38
Ok, ich lad einfach mal beide Pdf's hoch, ihr werdet sehen dass das eine darauf ausgelegt ist präsentiert zu werden, während das Andere nur ein Test war.

Leider funktioniert der Demolink nicht mehr weil ich grad festgestellt habe, was SEHR SEHR schade ist, imho geile Veranschaulichung.
Und irgendwie finde ich nicht mehr meine Ausarbeitung, wie ich was erklärt habe.
Aber ich denke mal sieht das ich es mit einfachen Mittel und Witz versucht habe, was auch geklappt hat.

Das Zeug mit Text (http://npshare.de/files/c99458e1/Vortrag_NaOv_final.pdf)
Das Zeug mit Witz (http://npshare.de/files/b15c4a9c/NaOv_v_final_ger.pdf)

Ich versuch noch den ganzen Text zu finden, wenn nicht müssen die Quelllinks reichen xD

Edit:
weiß jemand was man bei Java für eine Komponente verwenden könnte um das Maker Eventfenster nachzubilden? hab da so eine Idee.

Miau
18.06.2010, 17:31
Was genau meinst du denn mit Eventfenster?

DFYX
18.06.2010, 20:35
Zu genetischen Algorithmen hatten wir hier übrigens vor einiger Zeit einen Thread. Kannst mal suchen.

R.D.
18.06.2010, 22:06
Zu genetischen Algorithmen hatten wir hier übrigens vor einiger Zeit einen Thread. Kannst mal suchen.

Öhm, joa kann ich tun.


Was genau meinst du denn mit Eventfenster?

Hat sich schon erledigt^^
Aber was ich meinte war wie beim RPG-Maker 2000 das Eventfenster in dem man ein Event bearbeitet.
Nehmen tu ich nun ein JTree. Im Gespräch mit Lachsen hat sich das als gute Möglich ergeben da man da gut Elemente hinzufügen und wieder löschen kann.

Kyuu
19.06.2010, 13:53
ALT/1977 (http://www.behance.net/Gallery/ALT1977-WE-ARE-NOT-TIME-TRAVELERS/545221) :A

R.D.: Ich hatte den Eindruck als würde bei dem Vortrag mehr die Übung im Vordergrund stehen als das Thema selbst - was bei Erstsemestern natürlich nicht unüblich ist, war aber dennoch interessant, danke.

R.D.
19.06.2010, 14:01
R.D.: Ich hatte den Eindruck als würde bei dem Vortrag mehr die Übung im Vordergrund stehen als das Thema selbst - was bei Erstsemestern natürlich nicht unüblich ist, war aber dennoch interessant, danke.

Ich hoffe ja, das ich noch mal in späteren Semestern irgendwie damit zu tun habe, weils halt ziemlich cool :D

drunken monkey
19.06.2010, 17:40
ALT/1977 (http://www.behance.net/Gallery/ALT1977-WE-ARE-NOT-TIME-TRAVELERS/545221) :A
Mann, ist das cool! XD
"So the next time you're looking fr a way to bring your tunes with you on the go, remember two things: nothing beats the Pocket Hi-Fi™, and our company definitely wasn't started by rogue time travelers from 33 years in the future. Like, at all." :A

Kyuu
20.06.2010, 19:21
Mein Favorit ist "[MobileVoxx.] Like any other phone. But without the wall attached." :D

BTW: List of freely available programming books (http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books). Enthält viele sehr gute Links, falls jemand auf der Suche ist.

Miau
20.06.2010, 22:09
Auf der Suche nicht, aber da sind tatsächlich interessante Sachen dabei. Danke für den Link auf jeden Fall. :)

drunken monkey
21.06.2010, 17:30
http://www.gnu.org/fun/jokes/ed.msg.html

Gerade zum ersten Mal drüber gestolpert. XD Aber die meisten hier werden den wohl schon kennen. ^^"

Ineluki
25.06.2010, 19:59
Bin ich gerade drueber gestolpert .. scheint ein interessantere Kurs ueber Computerspiele zu sein. Von Hintergruenden bis Pathfinding.

Uebersicht des Kurses (http://physics.medma.uni-heidelberg.de/cms/index.php?option=com_content&view=article&id=52:cg&catid=13:teaching2008&Itemid=81)

Teil 1 (http://medphyssrv1.medma.uni-heidelberg.de/cms/images/Teaching/ComputerGames/v1.pdf), Teil 2 (http://medphyssrv1.medma.uni-heidelberg.de/cms/images/Teaching/ComputerGames/v2.pdf), Teil 3 (http://medphyssrv1.medma.uni-heidelberg.de/cms/images/Teaching/ComputerGames/v3.pdf)
Teil 4 (http://medphyssrv1.medma.uni-heidelberg.de/cms/images/Teaching/ComputerGames/v4.pdf), Teil 5 (http://medphyssrv1.medma.uni-heidelberg.de/cms/images/Teaching/ComputerGames/v5.pdf), Teil 6 (http://medphyssrv1.medma.uni-heidelberg.de/cms/images/Teaching/ComputerGames/v6.pdf)

DFYX
25.06.2010, 22:13
Ich finde es grade faszinierend, dass das für einen Medizin Studiengang ist.

Kyuu
26.06.2010, 14:17
In der Einführung wird darauf sogar eine Antwort gegeben: Es gibt viele Parallelen zwischen Spieleengines und Simulatoren in der Medizin. :D

Nice, werde mir später auch die anderen Folien ansehen.

Mog
26.06.2010, 16:28
http://www.youtube.com/watch?v=KrfpnbGXL70

Mivey
26.06.2010, 18:23
http://www.youtube.com/watch?v=KrfpnbGXL70
Reine unseriöse Propaganda gegen unser schönes .NET :o
Verbieten sollte man solche Schundvideos.

drunken monkey
26.06.2010, 18:42
Guns don't kill people – .NET does! :(

Jesus_666
26.06.2010, 20:37
Naja, es ist klar, daß Java von Dotnet bedroht ist. Microsoft hat "langsame Runtime", "platzfressende, sinnlos redundante VMs" und "läuft theoretisch überall, aber nur für eine Untermenge der Sprache" viel besser implementiert als Sun/Oracle. Selbst "XML ist Gott" kann Dotnet gut.

Ja, ich würde an Oracles Stelle zittern. Der "nettes Konzept mit beschissener Umsetzung"-Thron ist am wackeln.

DFYX
29.06.2010, 20:31
Meine Güte, was haben die Jungs von Strato mit ihren Servern gemacht? Ich soll für einen Kunden dessen Website neu machen. Die bisherige Seite läuft über einen Webhostingtarif von Strato für 20 Euro im Monat mit 2 GB Webspace, unbegrenzt Traffic, 6 MySQL Datenbanken, 500 Mailadressen, 3 Inklusivdomains und SSH-Zugriff. Also nicht schlecht für ein kleines Unternehmen, das seine Website quasi nur zur als digitalen Katalog ohne online-Bestellservice nutzt.

In freudiger Erwartung hab ich mich auf der Shell eingeloggt und ein bisschen umgeschaut. Hier fängt der Horror an:

1. Dateiberechtigung/Homedir
So wie es aussieht, haben die den htdocs Ordner als Homedir gesetzt. Ich habe also keine Chance, ein paar Dateien für Besucher unzugänglich abzulegen, ohne mich gleich mit .htaccess rumzuschlagen.

2. Ruby on Rails
Es gibt einen Ordner cgi-bin, der wohl auch korrekt konfiguriert ist und Ruby ist
installiert. Sogar in einer ziemlich aktuellen Version. Das lädt doch förmlich dazu ein, die Seite mit Rails zu schreiben. Dummerweise ist Rails aber nicht installiert. Rubygems auch nicht, ich kann also nichtmal Rails als gem im Homedir installieren.

3. Buildumgebung
Ich dachte mir, ist alles kein Problem. Es ist ja kein Beinbruch, rubygems selber zu installieren. Zumindest in der Theorie. Das Installationsskript bietet offensichtlich keine komfortable Möglichkeit an, einen Präfix anzugeben. Stattdessen orientiert es sich daran, wo Ruby liegt. Ich müsste also auch noch ein eigenes Ruby installieren, was ich nicht kann, weil man mir weder einen C-Compiler noch make zur Verfügung stellt und ich nicht an Ruby Binärpakete für Solaris rankomm, die ich ohne Rootrechte installieren könnte.

4. RVM
Für genau solche Einsatzgebiete gibt es RVM. Eine komplette Umgebung mit Ruby, rubygems und Rails, die man ohne Rootrechte installieren kann. Besagt zumindest die Theorie. Das Installationsskript verwendet diverse Befehle, die ich offensichtlich nicht ausführen darf (etwa export, whoami und derart sicherheitskritische Dinge) und setzt zudem auf GNU-spezifische Flags wie zum Beispiel grep -q (heißt auf non-GNU grep -s)

Ich hab die Schnauze voll, rumzuexperimentieren. Ich hab den Support angeschrieben, wie das aussieht. Ich werde ja wohl mit einer Kundennummer im mittleren sechsstelligen Bereich nicht der erste sein, der Rails verwenden will. Wenn die mir keine Antwort liefern können, muss sich mein Kunde entscheiden, ob er auf ein anderes Hostingpaket umsteigen will (was mit Mehrkosten verbunden wäre) oder ob er mir einen Aufpreis zahlt, damit ich ihm seinen Kram in PHP schreib, was für die Art von Anwendung erheblich mehr Aufwand wäre.

DFYX
01.07.2010, 23:57
Ich hab einen neuen Kandidaten für die ekligste Regular Expression, die ich jemals geschrieben hab:


/\[\*(:[^\[]+)?\](.*?)[\r\n]*(?=(\[\*.*?\]|\[li\]|<\/[uo]l.*?>))/mi

Na, wer errät, was das matchen soll?

drunken monkey
02.07.2010, 00:18
Leicht seltsamen Markup-Code für Listen?
Und hm, ich müsste echt überlegen, wo ich meine grauslichste RE verbrochen habe…

DFYX
02.07.2010, 00:20
Absolut richtig. Die Regular Expression für Foo in BB-Code Listen, für die zusätzlich auch Foo unterstützen. Letzteres kann BB-Ruby von sich aus und ich wollte dazu nicht inkompatibel sein.

DFYX
06.07.2010, 22:24
Grade in nem IRC Channel aufgegabelt, passend zum Topic:


[23:15] []Nukleus: Gott NEIN, man kann Postgres mit LOLCODE erweitern

Ineluki
07.07.2010, 10:56
Der Wolfire Blog (http://blog.wolfire.com/) ist doch immer wieder eine Fundgrube fuer kleine Schaetze ...

Habe da gerade ein nettes Programm gefunden, dass ich hier vorstelle.

Ineluki
14.07.2010, 21:44
Der Wolfire Blog ist mal wieder ergiebig. Ein sehr interessanter Essay ueber Terraingenerierung (http://blog.wolfire.com/2008/10/terrain-part-1/).

DFYX
06.08.2010, 21:31
Ich muss das jetzt einfach mal rauslassen: wer zur Hölle hat Typo3 verbrochen? Wir haben uns heute im Büro zu dritt den ganzen Tag damit rumgeschlagen, eine Webanwendung fehlerfrei als Unterseite einzubinden. Das Ding hat laufend rumgezickt. Erst wollten die Einstellungen nicht, dann sah das Design furchtbar verschoben aus, weil uns die Standardstylesheets dazwischen gepfuscht haben, dann gingen wieder irgendwelche Einstellungen nicht. Von den Problemen mit den Dateipfaden will ich gar nicht reden.

Ich war kurz davor, dem Chef vorzuschlagen, Typo 3 wegzuwerfen. Effektiv verwenden wir das eh kaum. Die meisten Inhalte, die wir haben, sind eigenständige Anwendungen, die nur eingebunden werden. Bei der Gelegenheit könnte man dann auch gleich mal von PHP wegkommen. Nennt mich Fanboy, aber mit Ruby on Rails hätten wir den ganzen Schrott in drei Tagen geschrieben, statt in 50.

Miau
07.08.2010, 10:01
Fanboy! :p Wobei du natürlich trotzdem Recht hast. PHP ist auch die schlechteste Lösung, und wer Ruby on Rails nicht mag, kann ja Django nehmen, das kommt effektiv fast auf das gleiche raus und ist beides so viel besser und effektiver ... ein Glück ist mein Chef da einsichtiger als deiner. :D

Indy
07.08.2010, 14:43
Ich muss das jetzt einfach mal rauslassen: wer zur Hölle hat Typo3 verbrochen? Wir haben uns heute im Büro zu dritt den ganzen Tag damit rumgeschlagen, eine Webanwendung fehlerfrei als Unterseite einzubinden. Das Ding hat laufend rumgezickt. Erst wollten die Einstellungen nicht, dann sah das Design furchtbar verschoben aus, weil uns die Standardstylesheets dazwischen gepfuscht haben, dann gingen wieder irgendwelche Einstellungen nicht. Von den Problemen mit den Dateipfaden will ich gar nicht reden.

Welches komplexere (Enterprise) CMS zickt nicht rum, wenn man nicht das notwendige Know-How zu dessen Konfiguration und Einrichtung mitbringt?

DFYX
07.08.2010, 16:31
Welches komplexere (Enterprise) CMS zickt nicht rum, wenn man nicht das notwendige Know-How zu dessen Konfiguration und Einrichtung mitbringt?

Auch von einem Enterprise CMS erwarte ich, dass es funktioniert, wenn man einen Eintrag kopiert und einen Dateipfad anpasst. Davon abgesehen war einer von uns dreien der Admin der Firma und arbeitet schon seit längerem mit Typo 3. Trotzdem ist er 5 Stunden lang dran verzweifelt, weil einiges nicht so funktioniert hat, wie es (auch laut Doku) sollte.

MagicMagor
08.08.2010, 11:14
Vielleicht eignet sich für die Frage auch ein eigener Thread, aber ich stelle sie dennoch mal hier.
Ich überlege, in meinem üblichen programmiertechnischen Größenwahn, so etwas wie einen Game Maker zu schreiben - zumindest aber wohl eine Spielengine + Editor.
Die Frage die sich mir stellt, ist die nach der Sprache, bzw ob es zwischen den beiden Alternativen gravierende Performance-Unterschiede oder sonstige Argumente gibt.

Java
Java hat den Vorteil, das ich in der Uni sowieso einige Zeit damit gearbeitet habe und die Sprache mittlerweile recht lieb gewonnen habe. Plattformunabhänig wäre die Sache sowieso und es gäbe keinerlei Probleme mit Bibliotheken beim Ausliefern des fertigen Programms.
In dem kleinen Testprogramm das ich habe, arbeite ich mit einem Graphics2D-Objekt auf einem JPanel als Zeichenfläche (entnommen aus einem Tutorial für Java-Game Programmierung).
Hier würde ich momentan am ehesten zu tendieren, sofern es nicht extreme Performanceprobleme gibt.

Python+Pygame
Das wäre die zweite Alternative. Der Nachteil wäre hier, daß ich eine extra GUI-Bibliothek für den Editor nehmen müsste, was wieder eventuelle Probleme bei der Auslieferung macht. (Irgendwie ist meine Erfahrung mit externen Bibliotheken zu 80% das es irgendwie rumzickt)
Da Python auch interpretiert ist, bin ich mir nicht 100%ig sicher ob es zu Java so einen riesigen Performance-Vorteil hätte.

DFYX
08.08.2010, 22:47
Für alle, die der theoretischen Informatik zugeneigt sind: die gefühlt undertste Auflage von "Ich beweise, dass P != NP (http://www.win.tue.nl/~gwoegi/P-versus-NP/Deolalikar.pdf). Herausgegeben vorgestern. Hatte bis jetzt noch keine Zeit, mit das komplett durchzulesen, aber ich nehme an, dass sich irgendwo auf den 66 Seiten ein Fehler finden wird.

Tabris
12.08.2010, 22:47
Naja, die meisten "Beweise" waren ja für P = NP. Der Beweis scheint übrigens (zumindest in der aktuellen Version) fehlerhaft zu sein. Wer mehr erfahren will, dem empfehle ich Richard Liptons hervorragenden Blog: http://rjlipton.wordpress.com/.

Kyuu
17.08.2010, 23:43
MagicMagor: Python ist definitiv keine schlechte Wahl. Ich kenne einige, die mit Python + Pygame gute Erfahrungen gesammelt haben. Mit Pygame fährst du in Sachen Spieleprogrammierung sowieso gut, da die Bibliothek genau dafür entwickelt wurde und dementsprechend alles bietet, was du brauchen wirst. Für das GUI würde ich dann Qt nehmen, bzw. PythonQt (http://pythonqt.sourceforge.net/). Qt ist sehr ausgereift, wird professionell weiterentwickelt und ist für zahlreiche Plattformen verfügbar. Ich glaube nicht, dass du mit Qt irgendwelche Schwierigkeiten bei der Auslieferung der Binaries haben wirst.

Bezüglich des Performanceunterschieds, da müsste eigentlich Python den kürzeren ziehen, da Java dynamisch in Maschinencode übersetzt wird. Allerdings gibt es den JIT-Compiler Psyco (http://psyco.sourceforge.net/) für Python, nur für den Fall, dass zusätzliche Performance benötigt wird.

Lukas
18.08.2010, 12:37
Aus Interesse: Was spricht für PythonQt gegenüber PyQt (bzw. PySide, was die selbe API wie PyQt implementiert und vom Qt-Hersteller kommt)? Davon hör ich nämlich zum ersten Mal, und die anderen haben eine gewisse Verbreitung …

Und Psyco ist de facto tot und macht wohl auch hauptsächlich number crunching schneller, da würd ich mich nicht drauf verlassen.

Kyuu
18.08.2010, 15:59
In erster Linie natürlich nichts, außer vielleicht im Vergleich zu PyQt, das keine LGPL-Lizenz anbietet, oder im Vergleich zu PySide, das laut der offiziellen Website noch keinen Windowsport besitzt.

Ehrlich gesagt habe ich mit keinem der Kandidaten Erfahrungen gesammelt und meine Python-Zeiten sind schon etwas länger her, so dass ich nicht mehr auf dem aktuellen Stand bin. Aus diesem Grund zitiere ich hier lieber die, die sich mehr auskennen:



Unlike PyQt and Qt Jambi, PythonQt is not designed to provide support for developers writing standalone applications. Instead, it provides facilities to embed a Python interpreter and focuses on making it easy to expose parts of the application to Python.

PythonQt makes extensive use of the Qt 4 meta-object system. Thus, PythonQt can dynamically script any QObject without any prior knowledge of it, using only the information supplied by QMetaObject (defined using Qt's moc tool in C++ applications). This dynamic approach allows several different script bindings to be embedded in the same application, each of which can use the same scripting API; e.g., JavaScript (QSA or QtScript) and Python.




Comparison with PyQt/PySide

PythonQt is not as pythonic as PyQt in many details (e.g. buffer protocol, pickling, translation support, ...) and it is mainly thought for embedding and intercommunication between Qt/Cpp and Python
PythonQt allows to communicate in both directions, e.g., calling a Python object from C++ AND calling a C++ method from Python, while PyQt only handles the Python->C++ direction
PythonQt offers properties as Python attributes, while PyQt offers them as setter/getter methods (e.g. QWidget.width is a property in PythonQt and a method in PyQt)
PythonQt currently does not support instanceof checks for Qt classes, except for the exact match and derived Python classes
QObject.emit to emit Qt signals from Python is not yet implemented but PythonQt allows to just emit a signal by calling it like a normal slot
PythonQt does not (yet) offer to add new signals to Python/C++ objects and it does not yet support the newstyle PyQt signals (so you need to connect via C++ string signatures)
Ownership of objects is a bit different in PythonQt, currently Python classes derived from a C++ class need to be manually referenced in Python to not get deleted too early (this will be fixed in a future version)
QStrings are always converted to unicode Python objects, QByteArray always stays a QByteArray and can be converted using str()
There are many details in the generated wrappers that could need some polishing, e.g., methods that use pointer arguments for additional return values could return a results tuple.
Not all types of QList/QVector/QHash templates are supported, some Qt methods use those as arguments/return values (but you can add your own handlers to handle them if you need them).
Probably there are lots of details that differ, I do not know PyQt that well to list them all.
In the long run, PythonQt will consider using/extending PySide with the features of PythonQt to get rid of its own generator and typesystem files, alternatively the KDE Smoke generator might be used in the future (this has not yet been decided, the current PythonQt generator works well and there is no hurry to switch).


BTW: So viel attraktiver wird PySide dadurch, dass es von einem Nokia-Tochterunternehmen entwickelt wird auch nicht. Zumindest macht MeVis ebenfalls was her. ;)


Was Psyco angeht, kann es auf der einen Seite natürlich ein Problem darstellen, dass es nicht mehr weiterentwickelt wird, muss auf der anderen Seite aber nicht. Wie gesagt, wenn mehr Performance benötigt wird, kann man damit experimentieren.

Je nach Situation, kann eine Verbesserung der Rechenleistung durchaus etwas bringen, besonders in Spielen.

Außer Psyco kenne ich noch Unladen Swallow, aber das ist scheinbar 2009 auch ins Stocken geraten.

In jedem Fall ist es immernoch möglich performancekritischen Code nach C/C++ auszulagern. Das ist eigentlich auch eine bewährte Vorgehensweise.

MagicMagor
14.10.2010, 12:23
Ich bin mal so frei und nutze diesen Thread um meinen momentanen Ärger etwas Luft zu machen.

Ich sitze gerade an den Vorbereitungen für meine Bachelor-Arbeit, in der ich einen Orc (http://orc.csres.utexas.edu/index.shtml) Interpreter in Prolog schreiben muss.
Um mir die Arbeit des Parsings zu ersparen will ich den offiziellen Orc-Parser nutzen (in Java geschrieben, unter BSD-Lizenz verfügbar) und mit dem AST dieses Parsers weiterarbeiten.

Augenscheinlich schien bei der Entwicklung von Orc aber niemand daran gedacht zu haben, dass ein Aussenstehender jemals auf die Idee kommen könnte mit dem AST zu arbeiten.
Das fängt damit an, das es keine wirkliche Dokumentation gibt. Es gibt zwar eine Dokumentation per Javadoc, aber geschätzte 90-95% aller Klassen sind unkommentiert.
Der Versuch über die Namen der Klassen und Felder ein wenig die Bedeutung zu erfahren klappt an manchen Stellen ganz gut (Left, Right, body etc..) an anderen Stellen dafür weniger.
Was eine ConsExpr ist kann ich noch erahnen (Constant Expression?) was sich hinter den Kinderknoten "t" und "h" verrbirgt ist mir dagegen schleierhaft.

Bleibt mir nur, simple Testprogramme zu parsen und mir den resultierenden AST anzugucken. Glücklicherweise bietet der Orc-Quellcode direkt eine Funktion um den AST als XML-Datei abzulegen. Aber wirklich verständlich wird es dadurch auch nicht...
Folgendes Orc-Programm


2 + 5

Erzeugt einen AST, dessen XML-Datei zuviele Zeichen enthält, als das ich ihn hier posten könnte. Ungeachtet des Overheads der durch XML dazu kommt...
381.808 Zeichen in 1114 Zeilen sind ein wenig viel um den AST zu verstehen...

Ich glaub, bevor ich den AST verstehe krieg ich davon Alpträume.. Irgendwie hätte ich von Code, der immerhin an einer Universität entwickelt wird, ein wenig mehr Dokumentation erwartet...

Kyuu
10.12.2010, 10:57
for (unsigned int i = foo.Length()-1; i >= 0; --i) //...


Wer findet den Bug? (Wahrscheinlich alle, ich bin nur etwas verblüfft sowas subtiles zu sehen.)

Jesus_666
10.12.2010, 11:48
Im Falle von foo.Length() == 0 wird die Schleife 2³²-, bzw. 2⁶⁴mal zu oft durchlaufen?

Kyuu
11.12.2010, 00:14
Ne, die Schleife wird nie beendet. ;)

DFYX
11.12.2010, 02:09
Ah, ja, jetzt seh ichs. Ein >= 0 auf einem unsigned int... Wahnsinn.

Mivey
11.12.2010, 13:02
Ne, die Schleife wird nie beendet. ;)
Weil sobald i 0 ist, es um eins reduziert wird, dadurch dann sofort den größtmöglichen Wert annimmt?

Whiz-zarD
11.12.2010, 13:25
Jop.

DFYX
13.12.2010, 20:15
Spaß mit verschachtelten Templates!


std::map<size_t, std::map<std::string, std::pair<PropertyType, ParameterDefinitionList> > > m_mActions;
führt zu

1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\xlocnum(135) : warning C4503: 'std::_Tree<_Traits>::_Buynode': Die Länge des ergänzten Namens wurde überschritten. Der Name wurde gekürzt.
1> with
1> [
1> _Traits=std::_Tmap_traits<size_t,std::map<std::string,std::pair<DeviceManager::PropertyType,DeviceManager::ParameterDefinitionList>>,std::less<size_t>,std::allocator<std::pair<const size_t,std::map<std::string,std::pair<DeviceManager::PropertyType,DeviceManager::ParameterDefinitionList>>>>,false>
1> ]

Mit komplett aufgelösten typedefs wäre es übrigens:

std::map<size_t, std::map<std::string, std::pair<enum PropertyType, std::map<std::string, enum PropertyType> > > > m_mActions;

Ich könnte die Warnung umgehen, indem ich noch mehr Typedefs verwend, aber dazu bin ich ehrlich gesagt zu faul.

nudelsalat
01.07.2011, 14:50
Sleepsort: http://beust.com/weblog/2011/06/15/sleep-sort/
:D:A

FF
01.07.2011, 18:01
Hat jemand zufällig eine Google+ oder wie das heißt einladung? Würde das gerne mal ausprobieren. :)

drunken monkey
01.07.2011, 22:52
Sleepsort: http://beust.com/weblog/2011/06/15/sleep-sort/
:D:A
Quantum bogosort! \o/

Wikipedia: (http://en.wikipedia.org/wiki/Bogosort#Related_algorithms) An in-joke among some computer scientists is that quantum computing could be used to effectively implement a bogosort with a time complexity of O(n). It uses true quantum randomness to randomly permute the list. The list is then inspected, and if it is not in order, the universe is destroyed.
:A

Aber Sleepsort ist auch Spitze! :D Kannte ich allerdings schon … :p

Mog
02.07.2011, 03:44
Hat jemand zufällig eine Google+ oder wie das heißt einladung? Würde das gerne mal ausprobieren. :)

Bin in der Beta. :A Einladungen gibt es allerdings derweil keine mehr.

DFYX
02.07.2011, 17:43
Hab ich mal erwähnt, dass der Qt Creator als IDE wahnsinnig unhandlich ist? Deren Debuggerfrontend ist scheiße und gelegentlich verschwindet der Cursor einfach so. Dummerweise wird für ein Praktukum erwartet, dass wir damit arbeiten.

drunken monkey
02.07.2011, 22:28
Hab ich mal erwähnt, dass der Qt Creator als IDE wahnsinnig unhandlich ist? Deren Debuggerfrontend ist scheiße und gelegentlich verschwindet der Cursor einfach so. Dummerweise wird für ein Praktukum erwartet, dass wir damit arbeiten.
Das ist doch noch gar nichts! Wir mussten in "Logikorientierte Programmierung" Emacs verwenden, das ganze Semester über. Das sind Schmerzen! :O
Aber an schlechten IDEs herrscht leider echt kein Mangel. :-/

Mog
11.07.2011, 19:42
Das ist doch noch gar nichts! Wir mussten in "Logikorientierte Programmierung" Emacs verwenden, das ganze Semester über. Das sind Schmerzen! :O
Aber an schlechten IDEs herrscht leider echt kein Mangel. :-/

Haha, ich hab genau 7 Tage gebraucht um heraus zu finden, dass es noch einen zweiten Prof gibt, der das macht. Da muss man zwar am Ende des Semesters eine Prüfung machen, und wird vom schlimmsten Englisch der österreichischen Geschichte der Fremdsprachen terrorisiert, insofern sich der Prof. nicht gerade dazu entscheidet in seinem heimischen, deutschen, Dialekt zu sprechen.

Dementsprechend hab ich mich abgemeldet, und es ein Semester später mit einem echten Texteditor gemacht. :A


Ich hab gerade für mein Praktikum einen Compiler-Bug fixen müssen, der mir im Weg war.

DFYX
11.07.2011, 20:18
emacs ist ein tolles Betriebssystem, aber es könnte echt mal einen guten Texteditor vertragen.

Jesus_666
22.07.2011, 19:55
http://slashdot.org/comments.pl?sid=2342176&cid=36844420

Ich muß dem nichts hinzufügen.

DFYX
22.07.2011, 20:11
Ich bin beeindruckt. Also so richtig. Besonders, als ich mir den Quelltext angeschaut hab. Die setzen die Buchstaben noch nicht mal an irgendwelche zufälligen Positionen. Das ist ne Tabelle, bei der valign zufällig auf top, bottom oder gar nicht gesetzt wird.

Edit:
Ach ja, das Skript, das verhindern soll, dass man den Text markiert, funktioniert in Opera nicht. Obwohl sie dafür extra ne Browserweiche haben.

drunken monkey
22.07.2011, 23:12
Genial! XD
Sowas kann man sich nicht ausdenken. :D

R.D.
23.07.2011, 00:38
Oh Mann, das ist toll :D

DFYX
23.07.2011, 01:00
Ich hab leider noch nicht rausgefunden, wo das zum Einsatz kommt.

FF
23.07.2011, 21:45
XDDD

Jesus_666
25.08.2011, 20:05
Wie gerade bekannt wurde, ist Steve Jobs CmdrTaco.

Nein, falsch, sie sind nur verdächtig zeitnah zurückgetreten. Für die, die sich wundern: Rob Malda aka CmdrTaco ist der Typ, der Slashdot gegründet hat. Und ich muß sagen: Respekt. Man schafft nicht alle Tage eine Community, wo mal eben Leute wie Bruce Schneier reinschauen, um ihren Senf abzugeben. Oder die so viel Traffic erzeugt, daß versehentliche DoS-Angriffe nach ihr benannt sind.

(Gut; alle Leute, die sich für diese Nachricht interessieren, werden sie eh auf /. gelesen haben, aber ich fand's trotzdem erwähnenswert.)

DFYX
25.08.2011, 21:32
Och, ich benutz dich durchaus als meinen persönlichen /. Filter, weil ich keine Zeit hab, alles selbst zu lesen. Also mach weiter.

nudelsalat
27.08.2011, 16:11
Punktwolken in WebGL
Blog: http://asalga.wordpress.com/
Eine von zahlreichen Demos: http://scotland.proximity.on.ca/asalga/demos/fixed_function/

Äusserst interessanter Blog mMn, für Leute die sich für Graphikprogrammierung interessieren.

drunken monkey
28.08.2011, 21:53
Die Demo geht bei mir nicht. XD
Aber egal, wollte nur allen (und zukünftigen) professionellen Programmierern hier einen wichtigen Karrieretipp mit auf den Weg geben: http://phpadvent.org/2009/unmaintainable-php-by-stoyan-stefanov

Traurigerweise scheint alles an populärem C/C++-Code, den ich bisher gesehen habe, ziemlich exakt diesem Muster zu folgen. XD

nudelsalat
30.08.2011, 13:26
Versuchs mal mit einem richtigen Betriebssystem. :p

Der Vorschlag mit dem Cyrillic а klingt wirklich sehr verlockend. Damit kann man Nachfolger bestimmt tagelang beschäfigen.

R.D.
30.08.2011, 13:30
Geiler Scheiß! WebGL FTW!

DFYX
30.08.2011, 13:31
Der Vorschlag mit dem Cyrillic а klingt wirklich sehr verlockend. Damit kann man Nachfolger bestimmt tagelang beschäfigen.
Auf die Art bin ich mal Stunden lang nem Syntax Error hinterhergerannt. Das Problem war letztendlich, dass irgendwas, was ich für ein Minus gehalten hab, eigentlich ein Gedankenstrich oder sonst was war, was in Monospace Schriftarten nicht unterscheidbar ist. Hat wohl irgendein Editor automatisch ersetzt.

Jesus_666
30.08.2011, 19:19
Auch immer wieder ungern gesehen: Editoren, die UTF-8 mit byte-order mark speichern. Herrlich, wenn einem plötzlich die Webapp kaputt geht, weil jemand beim letzten Commit ein überflüssiges, unsichtbares Zeichen eingebracht hat und PHP jetzt keine Header mehr senden kann, weil ja bereits Seiteninhalt gesendet wurde.

drunken monkey
30.08.2011, 23:53
Auch immer wieder ungern gesehen: Editoren, die UTF-8 mit byte-order mark speichern. Herrlich, wenn einem plötzlich die Webapp kaputt geht, weil jemand beim letzten Commit ein überflüssiges, unsichtbares Zeichen eingebracht hat und PHP jetzt keine Header mehr senden kann, weil ja bereits Seiteninhalt gesendet wurde.
Oooohja, BOMs sind verdammt böse! XD Hat mich damals auch einige Zeit gekostet, da drauf zu kommen, nachdem ich auf Notepad++ umgestiegen bin …
Aber für die Zwecke des Unmaintainable-Machens sind sie halt leider kaum geeignet. :-/

Cherry
06.10.2011, 21:58
Hab hier was auf meiner Platte gefunden was ich schon ganz vergessen hatte.

Einen (klarerweise fehlgeschlagenen) Versuch, das Problem des Handlungsreisenden (travelling salesman problem) zu lösen.

Das Demoprogramm testet den Algo mit 6 Stationen und hält immer bei einem Fehler an. Bei durchschnittlich 2,5-3% der Fälle liegt er falsch, mit einem Unterschied von 1-2%, seltener bis zu 5%.

Binary: http://share.cherrytree.at/showfile-4224/handlungsreisender.exe

FB Source:


#Define C_MIN Asc("A")
#Define C_MAX Asc("F")

Type PointXY
x As Integer
y As Integer
Declare Constructor (x_ As Integer, y_ As Integer)
Declare Constructor ()
End Type

Constructor PointXY(x_ As Integer, y_ As Integer)
x = x_
y = y_
End Constructor

Constructor PointXY()

End Constructor

Dim Shared cost(C_MIN To C_MAX, C_MIN To C_MAX) As Integer
Dim Shared city(C_MIN To C_MAX) As PointXY

Randomize(Timer())

ScreenRes 800, 600, 32

Type Route
way As String
price As Integer
Declare Constructor (w As String, p As Integer)
Declare Sub Insert(c As Integer)
End Type

Constructor Route(w As String, p As Integer)
way = w
price = p
End Constructor

Sub Route.Insert(c As Integer)
Var best = Route(way, &h7FFFFFFF)
For i As Integer = 1 To Len(way) - 1
Var w = Left(way, i) & Chr(c) & Right(way, Len(way) - i)
Var p = price - cost(way[i - 1], way[i]) + cost(way[i - 1], c) + cost(c, way[i])
If p < best.price Then best = Route(w, p)
Next
This = best
End Sub

Function Calc(s As String) As Integer
Dim p As Integer = 0
For i As Integer = 0 To Len(s) - 2
p += cost(s[i], s[i + 1])
Next
Return p
End Function

Sub Rec(s As String = "", best As Route Ptr)
If Len(s) = C_MAX - C_MIN + 1 Then
Var s2 = s & Left(s, 1)
Var p = Calc(s2)
If p < best->price Then *best = Route(s2, p)
Exit Sub
EndIf

Var l = Len(s)
For i As Integer = C_MIN To C_MAX
If l = 0 Then Print Chr(i);
If InStr(s, Chr(i)) = 0 Then Rec(s & Chr(i), best)
Next
End Sub

Sub DrawRoute(w As String)
Circle (city(w[0]).x, city(w[0]).y), 5
For i As Integer = 0 To Len(w) - 2
Line (city(w[i]).x, city(w[i]).y)-(city(w[i + 1]).x, city(w[i + 1]).y)
Next
End Sub

Dim done As Integer = 0
Dim wrong As Integer = 0
Do
done += 1

ScreenLock()
Cls()
For i As Integer = C_MIN To C_MAX
city(i) = PointXY(CInt(Rnd * 800), 200 + CInt(Rnd * 400))
Circle (city(i).x, city(i).y), 3, RGB(255, 0, 0), , , , F
Draw String (city(i).x, city(i).y - 12), Chr(i), RGB(255, 255, 255)
Next

For x As Integer = C_MIN To C_MAX
For y As Integer = C_MIN To C_MAX
Line (city(x).x, city(x).y)-(city(y).x, city(y).y), RGB(96, 96, 96)
cost(x, y) = Sqr((city(y).x - city(x).x) ^ 2 + (city(y).y - city(x).y) ^ 2) * 100
If x <> y Then Draw String ((city(y).x + city(x).x) / 2 + 4, (city(y).y + city(x).y) / 2 - 4), "" & cost(x, y), RGB(160, 160, 160)
Next
Next

Var t = Timer()

Color RGB(255, 255, 0)

Print "USING CHERRY'S ALGORITHM"
Var best = Route("", &h7FFFFFFF)
For f As Integer = C_MIN To C_MAX
Print Chr(f);
Var r = Route(Chr(f, f), cost(f, f))
For i As Integer = C_MIN To C_MAX
If f <> i Then r.Insert(i)
Next
If r.price < best.price Then best = r
Next

Print
Print "--------------------"
Print Timer() - t & " sec."
Print best.way
Print best.price
Var oldbest = best.price
DrawRoute(best.way)

Color RGB(255, 255, 255)

Print "--------------------"

t = Timer()

Color RGB(0, 255, 0)

Print "USING NAIVE ALGORITHM (Try all possible ways, find shortest)"
best = Route("", &h7FFFFFFF)
Rec(, @best)

Print
Print "--------------------"
Print Timer() - t & " sec."
Print best.way
Print best.price
DrawRoute(best.way)


Color RGB(255, 255, 255)
Print "--------------------"
Print "" & done & " tries"
Print "--------------------"

If best.price <> oldbest Then
wrong += 1
Color RGB(255, 0, 0)
Print "FAILED!"
Print "Diff: " & oldbest - best.price & " (";
Print Using "##.##"; ((oldbest - best.price) / best.price) * 100;
Print "%)"
Print "--------------------"
Print "" & wrong & " tries wrong (";
Print Using "##.##"; (wrong / done) * 100;
Print "%)"
Print "(Press any key to continue)"
ScreenUnLock()
Sleep()
Else
ScreenUnLock()
EndIf
Loop Until InKey() = !"\&hFFk"


mfG Cherry

niR-kun
07.10.2011, 02:18
Travelling salesman ... damit wurde ich bei dem Schunk Graphentheorie (allerdings nicht in der Theorie-Verlesung, sondern bei der Methodisch-Praktischen Vorlesung) auch nicht mit verschont. Ich kann mich immer noch dran erinnern, dass ich einen Djikstra-Algorithmus und einen Ford-Fulkerson-Algorithmus implementieren musste.

Cherry
07.10.2011, 14:21
Naja, mein Algorithmus ist ja billig eigentlich.

DFYX
08.10.2011, 21:12
Einfach, weil das Thema hier drüben noch gar nicht angesprochen wurde:

10694
Quelle: WillDrawForFood1 - Apple Memorial (deviantART) (http://fav.me/d4byl3n)

Übrigens hat deviantART eine ganze Steve Jobs Tribute (http://browse.deviantart.com/projects/tributes/stevejobs/) Aktion angeleiert, bei der schon einige sehr interessante Bilder entstanden sind.

makenshi
09.10.2011, 10:57
Hrm, Steve Jobs war schon ein großer Mann. Keine Frage.
Hat zu den damaligen Zeiten die Zeichen der Zeit richtig gedeutet und richtig gehandelt um sich ein riesen Unternehmen zu erschaffen.
Definitiv beeindruckend.

Allerdings ist die Frage seit wann die Welt so Steve Jobs vergöttert? Ich meine, gut möglich das ich es verpasst habe.
Aber ich wüsste nicht das er dafür so viele "Jünger" hatte, die ihn vergöttert haben. Es kommt mir ein wenig so vor, als wäre
momentan der gleiche Effekt wie vorher bei Michael Jackson. Und ob man das so ernst nehmen kann ist eine andere Frage.

Jesus_666
09.10.2011, 12:15
Hrm, Steve Jobs war schon ein großer Mann. Keine Frage.
Hat zu den damaligen Zeiten die Zeichen der Zeit richtig gedeutet und richtig gehandelt um sich ein riesen Unternehmen zu erschaffen.
Definitiv beeindruckend.

Allerdings ist die Frage seit wann die Welt so Steve Jobs vergöttert? Ich meine, gut möglich das ich es verpasst habe.
Aber ich wüsste nicht das er dafür so viele "Jünger" hatte, die ihn vergöttert haben. Es kommt mir ein wenig so vor, als wäre
momentan der gleiche Effekt wie vorher bei Michael Jackson. Und ob man das so ernst nehmen kann ist eine andere Frage.Ganz einfach: Jeder Machead hat Respekt vor Steve. Seit ein paar Jahren sind Macs dermaßen erfolgreich, daß es jetzt VIELE Macheads gibt. Folglich ist Steve plötzlich äußerst respektiert.

Dazu kommt, daß auch die Wettbewerber zugeben müssen, daß Apple ein Innovationstreiber ist. Apple hat schon immer nach dem Motto "scheiß auf Abwärtskompatibilität, wir wollen das Beste" gearbeitet, mit dem Ergebnis, daß sie das Wachstum von Dingen wie USB, FireWire oder der graphischen Benutzeroberfläche gefördert haben. Davon, wie Apple mal eben diktiert hat, wie Gadgets heutzutage auszusehen haben muß ich gar nicht erst reden. Einiges davon geht auf Steves Mentalität zurück. (Man bedenke, daß OS X und iOS beide von NeXTStep abstammen, seinem Projekt, nachdem er bei Apple ausgestiegen war. OS X ist im Wesentlichen NeXTStep mit einem an Mac OS Classic angelehnten GUI.)

Und an welche Person denkt man, wenn man an eine Firma denkt? An den CEO. In den 90ern war Bill Gates der große Computerheld, obwohl er sich schon früh eher auf das Geschäftliche konzentriert hatte. Aber er war präsent. Steve Jobs war das Gesicht bei Apple, das uns demonstriert hat, wie cool die neuen Produkte aussehen und was sie auf dem Kasten haben. Sicher, es gab auch ein paar andere wichtige Leute da wie Jonathan Ive, aber Steve ist der, den alle kennen.

niR-kun
09.10.2011, 13:18
Ich hatte gestern mit TWS einen Disput über Variablenbenennung, er bevorzugt es in Java Variablen so zu nennen wie "a_cool_variable", aber Funktionen mit camelCase zu benennen wie "aCoolFunction()". Ich meinte zu ihm, dass es syntakisch viel besser aussehen würde, wenn beides im camelCase-Syntax wäre.

Was ist denn nun mehr verbreitet (oder besser)?

Im Sinne einer Kooperation muss man ja syntaktisch irgendwie übereinkommen.

DFYX
09.10.2011, 13:54
Ich denke auch nicht, dass das jetzt was mit "Vergötterung" zu tun hat. Ich denke, bei Bill Gates und Linus Torvalds würden die Leute ähnlich reagieren. Die drei sind einfach die großen Gesichter der Branche, ohne die vieles, was wir heute für selbstverständlich halten, nicht in dieser Form existieren würde.

Edit:

Ich hatte gestern mit TWS einen Disput über Variablenbenennung, er bevorzugt es in Java Variablen so zu nennen wie "a_cool_variable", aber Funktionen mit camelCase zu benennen wie "aCoolFunction()". Ich meinte zu ihm, dass es syntakisch viel besser aussehen würde, wenn beides im camelCase-Syntax wäre.

Was ist denn nun mehr verbreitet (oder besser)?

Im Sinne einer Kooperation muss man ja syntaktisch irgendwie übereinkommen.
Ich bevorzuge es, mich jeweils an die Konvention der Standardbibliothek der entsprechenden Sprache zu halten. Grade bei Java gibt es von Sun einen sehr ausführlichen Style Guide.

Kyuu
09.10.2011, 14:04
Ihr solltet euch bei euren Konventionen nicht zu sehr verkrampfen. Wichtig ist nur, dass der Code einheitlich aussieht.

niR-kun
09.10.2011, 14:29
Ihr solltet euch bei euren Konventionen nicht zu sehr verkrampfen. Wichtig ist nur, dass der Code einheitlich aussieht.
Das ist ja genau das Problem. Es wirkt für mich mit der Unterstrich-Konvention uneinheitlich und ist für mich schwer lesbar, weil ich mich an die unter Java typischen Namens-Konvention halte.
Aber auf Hinblick das nicht nur TWS und ich den Code lesen werden sondern auch andere.

R.D.
09.10.2011, 14:43
Was Kyuu sagt reicht doch schon. Nur weil einer sagt: "Hey, ich brin Prof uns sage euch dass das so am Besten ist!" muss man sich nicht daran halten. Ich kenne auch Leute die fahren eine komplett andere Schiene mit sogenanntem CleanCode bei dem z.B. Methoden endlose Namen haben die genau beschreibt was alles in der Methode passiert und Methoden gleich ganz zerstückelt. Das ist jedem selbst überlassen.
Selbst bei Teamarbeit ist das nicht soooo wichtig, es sei denn man arbeitet zu zweit an einer Klasse. Dann sollte man sich vllt vorher auf einen Mittelweg einigen :)

Jesus_666
09.10.2011, 15:40
Ich bevorzuge es, mich jeweils an die Konvention der Standardbibliothek der entsprechenden Sprache zu halten. Grade bei Java gibt es von Sun einen sehr ausführlichen Style Guide.
Ja. Allein schon, weil einige Sachen auch nicht gut übertragbar sind. Nehmen wir mal als Extrembeispiel Objective-C: Da hat man Aufrufe, die in etwa so aussehen:


[GrowlApplicationBridge notifyWithTitle:@"Bei Artikel überboten"
description:title
notificationName:@"Outbid"
iconData:nil
priority:1
isSticky:NO
clickContext:articleID];

Das ist sehr deskriptiv, aber nur deshalb lesbar, weil a) Name und Variablen vermengt sind und b) XCode in der Lage ist, das automatisch sinnvoll einzurücken. Daß man mehrere Zeilen für einen Aufruf hat, ist bei längeren Aufrufen absolut nicht ungewöhnlich.

Aber was, wenn wir solche Namen in C++ benutzen wollen?


GrowlApplicationBridge.notifyWithTitleDescriptionNameIconPriorityStickyContext("Bei Artikel überboten", title, "Outbid", null, 1, false, articleID);

Funktioniert gar nicht. Wir haben zwar drin, was die Variablen bedeuten, aber der Funktionsaufruf ist enorm lang und man müßte ohnehin abzählen, welches Wort zu welcher Variable gehört. Das sollte uns doch eher die IDE erklären und nicht der Variablenname. Für sowas gibt es Doxygen und Konsorten und jede IDE, die den Namen verdient, wird einem genau sagen können, welche Variable was ist.


Ich muß aber zugeben, daß ich mich bei einer Sprache absolut nicht daran halte, wie die Funktionen standardmäßig heißen: PHP. In PHP ist camelCase typisch für objektorientierten PHP-Code, während Unterstriche in der Regel in prozeduralen Funktionen zu finden sind. Da ich aber meine Codebase konsistent formatiert haben will, nehme ich überall camelCase.



Das ist ja genau das Problem. Es wirkt für mich mit der Unterstrich-Konvention uneinheitlich und ist für mich schwer lesbar, weil ich mich an die unter Java typischen Namens-Konvention halte.
Aber auf Hinblick das nicht nur TWS und ich den Code lesen werden sondern auch andere.
"Einheitlich" bedeutet nicht, daß der Stil gleichförmig aussieht; es bedeutet, daß die Codebase einheitlich ist. Eine Variable sollte in Quelldatei A den selben Formatierungsregeln folgen wie in Quelldatei B und C. Denn man WIRD früher oder später mit jemand anderes Code arbeiten müssen und dann ist es einfacher, wenn man sich nicht erst in die Konvention einarbeiten muß.

Solchen Spaß habe ich auf der Arbeit. Ein von meinem Vorgänger geschriebenes Modul hat Datenklassen, die zusammen mit den Werten noch Metadaten für den (schlechten) Formulargenerator mitbringen. Das macht das Befüllen umständlich:


$customer = new Customer();

// falsch
$customer->FirstName = "Walter";

// so wie der Code vom Vorgänger es macht
$customer->FirstName->Value = "Walter";

// so, wie es korrekt wäre
$customer->FirstName = new stdClass();
$customer->FirstName->Value = "Walter";

// Es geht auch ohne das explizite Instanzieren von FirstName, aber dann warnt
// PHP, weil ein Objekt implizit erzeugt wurde. Das ist idR. kein Problem, aber
// wir haben einen eigenen Fehlerhandler, der jedes Mal aufgerufen wird. Bei
// 1.500 Warnungen beim Erstellen der Kundenliste macht das ein fieses
// Performanceloch aus.

Wenn ich jetzt also mit Daten aus seinem System arbeite, muß ich daran denken, daß a) camelCase herrscht, aber Unterwerte von Objekten mit PascalCase geschrieben werden und b) Werte Objekte sind, die eine Variable für den eigentlichen Wert beinhalte. Freude.

(Ja, ich weiß, das könnte man mit magischen Gettern und Settern lösen, aber meine erste Handlung als Entwickler war, den Code meines Vorgängers komplett zu deprecaten. Irgendwann wird der ganze Ramsch komplett ersetzt und bis dahin halte ich mich mit strukturellen Änderungen zurück.)

Cherry
23.10.2011, 01:39
Ich habe mich etwas mit einem procedural sound generator gespielt.

L: (s=40000-t)*0+(u=t-12000)*0+(t<30000?(s*(s>>10))*sin((s>>9)-s*0.00001)*cos(((Math.round(s)%4444)>>10)+s*0.000001):(t<60000?((Math.round((t+3000)/3000)%2)==0?t*5:t*2):(t<240000?(t<70000?Math.pow(t,t/70000):((t<120000&&Math.round(u/1500)%2==0)?0:u*Math.round(u/1500)*1500)):(t<245000?Math.pow(t,(300000-t)/70000):((t>260000||(Math.round(t/5000)%2==0))?0:t*2))))) | R: (s=30000-t)*0+(u=t-12000)*0+(t<30000?(s*(s>>10))*sin((s>>9)-s*0.00001)*cos(((Math.round(s)%4444)>>10)+s*0.000001):(t<60000?((Math.round((t+3000)/3000)%2)==0?t*4:t*2):(t<240000?(t<70000?Math.pow(t,(200000-t)/110000):((t<120000&&Math.round(u/1500)%2==0)?0:u*Math.round((u+16*1500)/500)*500)):(t<245000?Math.pow(t,(270000-t)/70000):((t>260000||(Math.round(t/5000)%2==0))?0:t*6))))) (http://wurstcaptures.untergrund.net/music/?oneliner=(s%3D40000-t)*0%2B(u%3Dt-12000)*0%2B(t%3C30000%3F(s*(s%3E%3E10))*sin((s%3E%3E9)-s*0.00001)*cos(((Math.round(s)%254444)%3E%3E10)%2Bs*0.000001)%3A(t%3C60000%3F((Math.round((t%2B3000)%2F3000)%252)%3D%3D0%3Ft*5%3At*2)%3A(t%3C240000%3F(t%3C70000%3FMath.pow(t%2Ct%2F70000)%3A((t%3C120000%26%26Math.round(u%2F1500)%252%3D%3D0)%3F0%3Au*Math.round(u%2F1500)*1500))%3A(t%3C245000%3FMath.pow(t%2C(300000-t)%2F70000)%3A((t%3E260000%7C%7C(Math.round(t%2F5000)%252%3D%3D0))%3F0%3At*2)))))&oneliner2=(s%3D30000-t)*0%2B(u%3Dt-12000)*0%2B(t%3C30000%3F(s*(s%3E%3E10))*sin((s%3E%3E9)-s*0.00001)*cos(((Math.round(s)%254444)%3E%3E10)%2Bs*0.000001)%3A(t%3C60000%3F((Math.round((t%2B3000)%2F3000)%252)%3D%3D0%3Ft*4%3At*2)%3A(t%3C240000%3F(t%3C70000%3FMath.pow(t%2C(200000-t)%2F110000)%3A((t%3C120000%26%26Math.round(u%2F1500)%252%3D%3D0)%3F0%3Au*Math.round((u%2B16*1500)%2F500)*500))%3A(t%3C245000%3FMath.pow(t%2C(270000-t)%2F70000)%3A((t%3E260000%7C%7C(Math.round(t%2F5000)%252%3D%3D0))%3F0%3At*6)))))&t0=0&tmod=0&duration=24&separation=100&rate=11025)

nudelsalat
26.10.2011, 10:39
Strangest language feature (http://stackoverflow.com/questions/1995113/strangest-language-feature)


In JavaScript:
'5' + 3 gives '53'
Whereas
'5' - 3 gives 2




JavaScript truth table:


'' == '0' //false
0 == '' //true
0 == '0' //true
false == 'false' //false
false == '0' //true
false == undefined //false
false == null //false
null == undefined //true
" \t\r\n" == 0 //true



Die Beispiele für C und Java sind aber auch nicht schlecht.

Jesus_666
26.10.2011, 12:05
Immerhin nicht Dart. Da ist 1 == false. In der aktuellen Version von Dart ist alles false bis auf das Boole'sche true.

Wenigstens ist ein Bug dazu offen; in Zukunft soll wohl alles true sein, das nicht null oder das Boole'sche false ist. Natürlich bedeutet das dann 0 == true.

YoshiGreen
26.10.2011, 13:12
Perl:

$[ — change your array base from 0-based to 1-based to 42-based: WHEEE!

... bitte, nicht wirklich....

DFYX
27.10.2011, 00:17
Ich kopiere jetzt mal schamlos von fefe (http://blog.fefe.de/?ts=b056eea8):


Standard des Tages: Das "Extensible Configuration Checklist Description Format" (http://csrc.nist.gov/publications/nistir/ir7275-rev4/NISTIR-7275r4.pdf). Ja, Checklisten. As in
[ ] Müll rausgebracht
[ ] Geschirr abgewaschen

Man bemerke: das Dokument hat 80 Seiten.

Whiz-zarD
28.10.2011, 20:02
Die Google Maps API wird ab 2012 nicht mehr kostenlos sein. (http://www.googlewatchblog.de/2011/10/ab-anfang-2012-google-maps-api-wird-kostenpflichtig/)

DFYX
28.10.2011, 21:13
Der Artikel ist ziemlicher Blödsinn. Diese Limits gibt es jetzt schon, zumindest für die API ohne Mapanzeige, also zum Beispiel für Koordinaten-Lookups. Bei dem Limit für die Maps gehe ich auch mal davon aus, dass das pro User und nicht pro Website ist. So gesehen ändert sich nicht viel. Bisher war es eben so, dass die Anfragen dann abgelehnt wurden, jetzt hat man die Möglichkeit, gegen Geld mehr zu bekommen.

nudelsalat
06.11.2011, 17:09
Eigentlich hätt ich ja geglaubt, dass die shared_ptr eine syntaktisch hässliche aber trotzdem bessere alternative zu normalen pointern sind. Wegen so sachen wie enable_shared_from_this (http://stackoverflow.com/questions/712279/what-is-the-usefulness-of-enable-shared-from-this) und anderem zeug wächst allerdings grad wieder mein wunsch, dass c++ doch endlich sterben möge.

Mog
07.11.2011, 03:10
Eigentlich hätt ich ja geglaubt, dass die shared_ptr eine syntaktisch hässliche aber trotzdem bessere alternative zu normalen pointern sind. Wegen so sachen wie enable_shared_from_this (http://stackoverflow.com/questions/712279/what-is-the-usefulness-of-enable-shared-from-this) und anderem zeug wächst allerdings grad wieder mein wunsch, dass c++ doch endlich sterben möge.

Wir haben neulich in IRC eine Ansammlung von den schrecklichsten Jobs erstellt. Cobol-to-java hat gewonnen. :D

nudelsalat
07.11.2011, 06:06
Wir haben neulich in IRC eine Ansammlung von den schrecklichsten Jobs erstellt. Cobol-to-java hat gewonnen. :D
Ein bisschen Respekt, bitte! Cobol to Java Programmierer sind ein wichtiger Teil der Gesellschaft. :O
Fehln nur noch Leute die C und C++ durch was besseres ablösen. Javascript oder so. :D

DFYX
07.11.2011, 16:05
Mir ist grade ein sehr interessanter Ansatz über den Weg gelaufen, um MD5 Hashes zu cracken: BozoCrack (https://github.com/juuso/BozoCrack). Das ist ein winziges Ruby Programm, das die Hashes ganz stumpf googlet und dann das Suchergebnis als Dictionary für eine Attacke verwendet. Dadurch, dass viele MD5 Cracker Seiten ihre Ergebnisse in googlebaren Tabellen haben, ist die Erfolgsquote ziemlich hoch.

makenshi
08.11.2011, 14:20
Mir ist grade ein sehr interessanter Ansatz über den Weg gelaufen, um MD5 Hashes zu cracken: BozoCrack (https://github.com/juuso/BozoCrack). Das ist ein winziges Ruby Programm, das die Hashes ganz stumpf googlet und dann das Suchergebnis als Dictionary für eine Attacke verwendet. Dadurch, dass viele MD5 Cracker Seiten ihre Ergebnisse in googlebaren Tabellen haben, ist die Erfolgsquote ziemlich hoch.

Also sooo gut funktioniert das nicht.
Bei einem Schnellversuch eben, musste der verschlüsselte Text schon sehr simpel sein, damit das Programm etwas fand.
Für vernünftige Passwörter halte ich das für keine Gefahr. Der Autor übertreibt "ein wenig".

R.D.
08.11.2011, 15:28
11139

Mal so reingeworfen, der MapMaker für Mr. Hat I Remake das ich im Rahmen einer Vorlesung hier machen darf :) 3 Wochen Arbeit haben sich dann doch gelohnt. Und gespeichert wie die Map wie ein Boss Mit Serialization8)

Mog
08.11.2011, 22:33
Ein bisschen Respekt, bitte! Cobol to Java Programmierer sind ein wichtiger Teil der Gesellschaft. :O
Fehln nur noch Leute die C und C++ durch was besseres ablösen. Javascript oder so. :D

Fehlt nur noch etwas Besseres, als C und C++. Ich suche schon seit Jahren etwas besseres, mit Gesellschaftscharakter.

Whiz-zarD
09.11.2011, 21:19
Bubble Sort einmal anders:

http://www.youtube.com/watch?v=lyZQPjUT5B4

niR-kun
12.11.2011, 15:23
Aus der gleichen Kategorie, falls ihr es noch nicht kennt:

http://www.youtube.com/watch?NR=1&v=t8g-iYGHpEA

Cherry
15.11.2011, 19:35
Wer es noch nicht kennt: http://www.stophiphop.com/modules/news/article.php?storyid=184

Leider gibts solche Leute wirklich zu Genüge.
Ich vermute allerdings auch, dass das ein Fake ist. Witzig ist es aber trotzdem.

Es ist zwar nicht möglich, eine Systempartition aus laufendem Windtews heraus zu formatieren, allerdings können tatsächlich Dateien gelöscht werden, sogar solche die zu laufenden Programmen gehören (DLLs und EXE-Dateien). Es ist sogar möglich, einfach die komplette Partition auszuhängen (d.h. ihr den Laufwerksbuchstaben C: wegzunehmen), wie einige Leute vom BMT bezeugen können (wo ich das versehentlich gemacht habe - es hat einige Verrenkungen und entsprechend viel Hirn gebraucht die Partition wieder einzuhängen wenn man eigentlich auf keine Dateien mehr zugreifen kann die auf ihr liegen, inklusive "mountvol.exe". Es ist auch ganz witzig wie Windows und laufende Programme sich verhalten wenn man ihnen quasi den Boden unter den Füßen wegzieht...).

DFYX
15.11.2011, 20:12
Also sooo gut funktioniert das nicht.
Bei einem Schnellversuch eben, musste der verschlüsselte Text schon sehr simpel sein, damit das Programm etwas fand.
Für vernünftige Passwörter halte ich das für keine Gefahr. Der Autor übertreibt "ein wenig".
Das ist klar. Aber in der Regel willst du ja nicht unbedingt ein bestimmtes Passwort haben, sondern (möglichst viele) beliebige aus einer ganzen Liste mit Hashes (etwa einem geklauten Datenbankdump). Da sind die Chancen schon recht hoch, dass irgendwer ein schwaches Passwort hat und so ein naiver Ansatz ist wesentlich praktikabler, als eigene Tabellen anzulegen.

DFYX
16.12.2011, 00:53
Manchmal kann Open Source Software echt toll sein. Ich hab einen kleinen Bug in den GitLabHQ Install Scripts (https://github.com/gitlabhq/gitlabhq_install) gefunden, ihn direkt im github Webinterface gefixt, einen Merge Request geschickt und grade mal 5 Minuten später wurde der Fix ins Hauptrepository übernommen. Genau so muss das laufen.

Mog
16.12.2011, 17:09
Manchmal kann Open Source Software echt toll sein. Ich hab einen kleinen Bug in den GitLabHQ Install Scripts (https://github.com/gitlabhq/gitlabhq_install) gefunden, ihn direkt im github Webinterface gefixt, einen Merge Request geschickt und grade mal 5 Minuten später wurde der Fix ins Hauptrepository übernommen. Genau so muss das laufen.

Also, ich lasse zz. jemanden bis Februar warten, bis sein Request abgearbeitet wird. :D

DFYX
16.12.2011, 19:17
Warum das? Magst du ihn nicht oder bist du einfach nur sadistisch?

Mog
21.12.2011, 00:59
Warum das? Magst du ihn nicht oder bist du einfach nur sadistisch?

Nö, ich warte bis meine Dependency gepatcht wird. Und das dauert erfahrungsgemäß eine Weile. :P

DFYX
24.12.2011, 22:32
031 == 25, Merry Christmas!

(Oder für die, die ihn nicht kennen: warum verwechseln Geeks so oft Weihnachten und Halloween? Weil Oct 31 == Dec 25)

niR-kun
04.01.2012, 16:37
Gerade auf http://blog.fefe.de/?ts=b1fa9d42 gefunden:
Eine erfolgreiche Kaputtoptimierung - so sollte man es nicht machen.

Whiz-zarD
04.01.2012, 17:56
ok, das ist echt schon nett O_o
Aber einen XML-Parser kann einen manchmal echt zur Weißglut bringen. Neulich hatte ich nen RSS Feed-Parser unter Java gebastelt.
Es ist nervig, dass hier die Daten nicht Elementar sind. Der <author>-Tag besitzt sowohl die E-Mail Adresse, als auch den Namen des Verfassers. Konnte man da nicht einfach zwei Tags draus machen? Stattdessen wird hier der <creator>-Tag aus dem "Dublin Core Metadata Element Set" verwendet, welcher noch eingebunden werden muss ...

Aus diesem Grund habe ich der Webentwicklung so weit es geht den Rücken zugekehrt. Ständig stößt man dort nur auf irgendwelche Flickenteppiche, die dann gesondert behandelt werden müssen.

Desmulator
05.01.2012, 12:14
Bill Gates ist der Teufel, denn korrekt heißt er William Henry Gates III. Wandelt man die Buchstaben seines Namens in ASCII- Werte um, erhält man folgendes: B 66 - I 73 - L 76 - L 76 - G 71 - A 65 - T 84 - E 69 - S 83 + 3 = 666. Die 666 ist die Ziffer und das Zeichen des Teufels.

Quelle (http://www.uni-muenster.de/PeaCon/conspiracy/taz-21c-theories.htm).

Jesus_666
06.01.2012, 07:27
ok, das ist echt schon nett O_o
Aber einen XML-Parser kann einen manchmal echt zur Weißglut bringen. Neulich hatte ich nen RSS Feed-Parser unter Java gebastelt.
Es ist nervig, dass hier die Daten nicht Elementar sind. Der <author>-Tag besitzt sowohl die E-Mail Adresse, als auch den Namen des Verfassers. Konnte man da nicht einfach zwei Tags draus machen? Stattdessen wird hier der <creator>-Tag aus dem "Dublin Core Metadata Element Set" verwendet, welcher noch eingebunden werden muss ...

Aus diesem Grund habe ich der Webentwicklung so weit es geht den Rücken zugekehrt. Ständig stößt man dort nur auf irgendwelche Flickenteppiche, die dann gesondert behandelt werden müssen.Es hilft, wenn man sich von XML fern hält. Es ist schon erstunlich, wie viel sinnvoller auf einmal alles wird.

R.D.
06.01.2012, 11:12
Das denke ich auch wobei es sich auch SUPER für Animationen eignet :D Zumindest kann ich damit viel leichter Animationen laden, Alternative wäre natürlich JSON, aber ich hab nen guten XML-Parser von daher geht das, ich mache ja damit nichts in Echtzeit.

Xardas der Dunkle
06.01.2012, 17:16
Zum Daten-Austausch bevorzuge ich JSON ...
Es ist selbst in formatierter Form um die Hälfte kleiner als ein XML-Dokument ... und ist vor allem typisiert. Und wie ich finde häufig auch lesbarer als XML.

Ein krasses Beispiel was ich die tage gesehen habe ... SOLR (Eine Java-Web-Anwendung zum füttern eines Lucene Such Indexes):

XML:

<add>

<doc>
<field name="id">F8V7067-APL-KIT</field>
<field name="name">Belkin Mobile Power Cord for iPod w/ Dock</field>
<field name="manu">Belkin</field>
<field name="cat">electronics</field>
<field name="cat">connector</field>
<field name="features">car power adapter, white</field>
<field name="weight">4</field>
<field name="price">19.95</field>
<field name="popularity">1</field>
<field name="inStock">false</field>
<!-- Buffalo store -->
<field name="store">45.17614,-93.87341</field>
<field name="manufacturedate_dt">2005-08-01T16:30:25Z</field>
</doc>

<doc>
<field name="id">IW-02</field>
<field name="name">iPod &amp; iPod Mini USB 2.0 Cable</field>
<field name="manu">Belkin</field>
<field name="cat">electronics</field>
<field name="cat">connector</field>
<field name="features">car power adapter for iPod, white</field>
<field name="weight">2</field>
<field name="price">11.50</field>
<field name="popularity">1</field>
<field name="inStock">false</field>
<!-- San Francisco store -->
<field name="store">37.7752,-122.4232</field>
<field name="manufacturedate_dt">2006-02-14T23:55:59Z</field>
</doc>


</add>


JSON:

[
{
"id" : "978-0641723445",
"cat" : ["book","hardcover"],
"name" : "The Lightning Thief",
"author" : "Rick Riordan",
"series_t" : "Percy Jackson and the Olympians",
"sequence_i" : 1,
"genre_s" : "fantasy",
"inStock" : true,
"price" : 12.50,
"pages_i" : 384
}
,
{
"id" : "978-1423103349",
"cat" : ["book","paperback"],
"name" : "The Sea of Monsters",
"author" : "Rick Riordan",
"series_t" : "Percy Jackson and the Olympians",
"sequence_i" : 2,
"genre_s" : "fantasy",
"inStock" : true,
"price" : 6.49,
"pages_i" : 304
}
,
{
"id" : "978-1857995879",
"cat" : ["book","paperback"],
"name" : "Sophie's World : The Greek Philosophers",
"author" : "Jostein Gaarder",
"sequence_i" : 1,
"genre_s" : "fantasy",
"inStock" : true,
"price" : 3.07,
"pages_i" : 64
}
,
{
"id" : "978-1933988177",
"cat" : ["book","paperback"],
"name" : "Lucene in Action, Second Edition",
"author" : "Michael McCandless",
"sequence_i" : 1,
"genre_s" : "IT",
"inStock" : true,
"price" : 30.50,
"pages_i" : 475
}
]

Whiz-zarD
06.01.2012, 18:11
JSON bringt mir aber nichts, wenn ich RSS Feeds von Webseiten auslesen möchte ^^

DFYX
06.01.2012, 18:29
Gibt doch genug Bibliotheken, die dir das abnehmen. In Ruby empfehle ich feed_normalizer und für andere Sprachen gibts sicher auch was.

R.D.
06.01.2012, 19:08
http://www.youtube.com/watch?v=uBSdVMOJGUA&feature=g-upl&context=G28e6447AUAAAAAAAAAA

Und hier auch noch mal das Video :) Ja das ist alles Java.

Whiz-zarD
06.01.2012, 19:11
Mit Java bekommt man auch schnell einen RSS Parser gebastelt. Den hatte ich eigentlich nach ca. ner Stunde fertig, mit Hilfe vom SAXParser ... eigentlich.
Nur das Problem sind die ganzen Flickenteppiche, den man oft in RSS Feeds findet. Schau dir doch mal den feed_normalizer genauer an. Du findest dort zig Tags, die nicht mal bestandteil des RSS Standards sind, weil jeder meint, er müsse es anders machen und für Java habe ich nichts gefunden, was die gröbsten Flickenteppiche abdeckt.

YoshiGreen
08.01.2012, 15:13
Hat jemand eine nette Empfehlung für ein CMS?

Meine Erfahrung damit ist sehr begrenzt. Ich habe zwar im Frühling gut zwei Monate an einem Joomla-Plugin gebastlet aber wirklich damit gearbeitet habe ich nicht. Eine kleine Recherche hat mir nun WordPress aufgezeigt (angeblich ziemlich gut im Umsetzen von Webstandards? Das wäre ein +.) und Drupal (kenne ich von meinen Mitarbeiten - ist wohl manchmal echt grausam aber recht mächtig).

Vor allem sollte es Opensource und am besten unter MIT/GPL Linzenz stehen beziehungsweise auch im kommerziellen Rahmen verwendbar sein. Im Augenblick würde ich zwei recht unterschiedliche Webseiten damit einbinden wollen, weswegen ich eine nicht all zu spezifische Lösung bevorzugen würde. Ich habe auch kein Problem damit Hand an zu legen und Erweiterungen zu schreiben solange der Aufwand vertretbar bleibt. (Eine komplett neue Scriptsprache würde ich im Moment ungern lernen wollen).

Jesus_666
08.01.2012, 17:58
Ich habe beruflich mit WordPress zu tun (auch wenn ich nicht unser WordPress-Entwickler bin). Prinzipiell ist WP ganz ordentlich, allerdings würde ich sagen, daß der Großteil der WP-Pluginautoren das Webentwicklungs-Äquivalent zu Visual Basic-Entwicklern sind. Man hat da gerne unsauberen Code und allgemein exzentrische Sachen. Paradebeispiel: Es gibt ein Plugin, über das man einzelnen Blogs verschiedene Domains zuweisen kann. Dieses Plugin versteht keine IDNs und der Autor hat einen entsprechenden Patch abgelehnt mit der Begründung, daß er keine IDNs braucht und daß man doch ein Plugin schreiben kann, das seins erweitert.

Grundsätzlich ist WordPress okay, aber du mußt wirklich darauf gefaßt sein, daß die Plugins in Sachen Softwaredesign, Codequalität und Bemühtheit der Autoren extrem unterschiedlich sind.

Lukas
08.01.2012, 18:02
Irgendwann war Wordpress mal dafür berüchtigt, auf wildeste Art HTML- und PHP-Code zu mixen, so dass Templates nicht wirklich unabhängig von der application logic waren -- hat sich das inzwischen geändert?

Jesus_666
09.01.2012, 06:08
WordPress setzt immer noch auf PHTML anstatt auf ein richtiges Templatesystem, deshalb sind Themes immer noch mächtiger, als sie sein sollten. Allerdings setzt das WP-Team den Kram immerhin ziemlich sauber um.

Das Problem ist, daß der Rest der Welt nicht die Disziplin hat, um mit PHTML sauber umzugehen. Themes von Dritten können u.U. nicht den gesamten Funktionsumfang haben, aber das absolute Hauptproblem sind sie Plugins. Da gibt es drei Gruppen:

Gruppe 1 ignoriert die WordPress-Codingvorschriften und praktiziert strenges MVC. Das ist die Gruppe, die am besten wartbar ist und die am wenigsten Ärger macht, wenn man Funktionen aus ihnen in einem anderen Plugin verwendet.

Gruppe 2 ist in etwa so geschrieben wie WordPress selbst: Alle Funktionen, die etwas mit dem Frontend zu tun haben, sind komplett PHTML. Das ist nicht so schön wartbar, aber wenn der Autor die nötige Disziplin hatte, kann es gut funktionieren.

Gruppe 3 ist das Visual Basic des Internets: Es gibt keinen Unterschied zwischen Model, View und Controller* und im Extremfall hat das gesamte Plugin nur eine Funktion, die dann zwischen haufenweise Inline-HTML dynamisch entscheidet, was eigentlich zu erledigen ist. Viel Spaß, wenn du da irgendwas von einem anderen Plugin einbinden willst; das gibt eine Menge überflüssiges Herumspielen mit dem Output-Puffer.

WordPress 4 könnte wirklich eine gute Template Engine und etwas strengeres MVC vertragen. Twig wäre wunderbar.


Auf der Habenseite ist WordPress allerdings extrem erweiterbar. Das geht so weit, daß ich für unser WordPress ein Plugin gebaut habe, mit dem es per-Blog-Benutzer gibt. Die entsprechenden Funktionen sind entweder als ersetzbar intendiert oder können problemlos geklont werden.

Xardas der Dunkle
09.01.2012, 13:06
Mein CMS der Wahl ist SilverStripe (http://www.silverstripe.org/) das Backend ist in der aktuellen Version an einigen Stellen zwar leider relativ statisch ansonsten lässt es sich es sehr einfach erweitern.

Allerdings ist SilverStripe kein CMS für 0815 One Click Nutzer, da die Auswahl öffentlicher Module nicht besonders groß ist (auch wenn es mittlerweile schon mehr gibt), dafür lassen sich eigene Module in 5 Minuten, dank des zu Grunde liegenden MVCs + ORM (http://doc.silverstripe.org/sapphire/en/tutorials), schreiben!

NPC Fighter
09.01.2012, 19:38
Concrete5 (http://www.concrete5.org/) war in zwei Anwendungsfällen einfach und schnell einzurichten und zu warten.
Es ist gleichzeitig mächtig und auch für sehr unerfahrene Anwender zu gebrauchen. Jederzeit wieder. (=

YoshiGreen
10.01.2012, 00:47
Hmmm ich denke ich weiß schon warum ich CMS nie so überzeugend fand. Mein Umfeld hat mich nun erstmal dazu bewogen Drupal aus zu probieren. SilverStripe und Concrete5 würde ich mir notfalls danach nochmal ansehen.
Ich habe mich im Kopf aber schon fast damit abgefunden, dass ich nicht um ein eigenes kleines CMS rum komme. Das kann dann gemütlich mit den Aufgaben wachsen. Ich glaube nämlich inzwischen, dass es wohl einfach kein System gibt was sowohl einfach als auch effizient arbeitet :)

Mein Ziel ist es ja mir Arbeit ab zu nehmen und nicht meine Probleme einfach nur auf eine andere Ebene zu verschieben.

Jesus_666
10.01.2012, 05:36
Mein Ziel ist es ja mir Arbeit ab zu nehmen und nicht meine Probleme einfach nur auf eine andere Ebene zu verschieben....was die Entwicklung eines eigenen CMS tun würde. (Also, letzteres.)

Dee Liteyears
14.01.2012, 23:04
FYX meint ich sollt des mal hier posten.
http://www.toplessrobot.com/2012/01/super_terrific_japanese_thing_wipeout_quantum.php
Die hätten lieber mal F-Zero als Designbasis nehmen sollen^^

Mog
16.01.2012, 02:06
Also, meine OSS-related webpage lebt davon, dass ein shellscript ein xml-file parst, um daraus dann 2.5 gig Text zu generieren, welcher dann einmal pro Tag per cron-job und pull mit dem repo gesynct wird.

Demnächst kommt da noch eien db dazu, die mit ein paar Metadaten bei jedem pull gefüttert/geupdated wird.

Wer braucht schon CMS?^^



\All:
Irgendwer mit C# auf der platte herum liegen?

Würd gerne wissen ob folgende Dinge valid sind:

MyClass is MyClass

bzw:

T is MyClass

wobei T ein Type-Parameter ist.


Kann vlt wer ausprobieren?

Whiz-zarD
16.01.2012, 17:16
T muss eine Variable sein.

Mog
17.01.2012, 20:40
T muss eine Variable sein.

Expression mit einem Typ, alles klar -- tx. Dann wird mein fix leichter. Yay.

Desmulator
17.01.2012, 22:18
Hey Leute,
ich weiß, dass sich hier echte Profis rumtreiben und ich als Anfänger habe da mal eine kurze Frage und bin mir sicher, dass ihr sie beantworten könnte. ;)

Ich habe mich den der letzten Zeit etwas ausführlicher mit den Maxwellgleichungen auseinander gesetzt und die dazu passende Mathematik, den Vektorfeldern.
Maxwells Gleichungen selbst, sollen hier nicht das Thema sein, viel mehr der mathematische Aspekt.

Wir betrachten nun zunächst einmal das Induktionsgesetz und das Durchflutungsgesetz. Da wir nur von Feldern sprechen ist der Stromfluss j = 0.
Außerdem betrachten wir alles im Vakuum, können also die Materialgleichungen vernachlässigen.
http://img209.imageshack.us/img209/4645/maxwell.png


Außerdem sei ein B-Feld gegeben. Dessen Ursprung ist unerheblich und seine Form oder Entstehung nicht zu ergründen.
Bei diesem Feld handelt es sich um rotierendes Wechselfeld:
http://img209.imageshack.us/img209/5738/bfeld.png

Nun ist die Frage, wie sieht das passende E-Feld dazu aus, dass die obigen Forderungen erfüllt?
Dazu differenzieren wir erstmal das B-Feld wie gefordert:
http://img705.imageshack.us/img705/4618/bfelddiff.png

Aus den Zusammenhängen ergibt sich dann für die zeitliche Ableitung:
http://img834.imageshack.us/img834/2389/efelddifft.png
( Faktor c² wurde vergessen )

Betrachten wir nun den Nabla-Operator:
http://img845.imageshack.us/img845/4013/nabladef.png,
ergibt sich durch das Kreuzprodukt analog dazu für die Rotation des E-Felds:
http://img844.imageshack.us/img844/1518/efeldrot.png

Zusammenhänge nocheinmal in der Übersicht:
http://img6.imageshack.us/img6/8364/efeldgleichung.png
( Faktor c² wurde vergessen )

Daraus folgen nun diese Bedingungen im einzellnen:
http://img210.imageshack.us/img210/2411/beding.png

Ich bin leider noch nicht soo fit im Lösen von Differentialgleichungen, darum ist meine Frage nun, ob mir hier jemand wenigstens einen Denkanstoß geben könnte,
wie ich ein passendes E-Feld finde. Oder ist gar nur die Numerische Annäherung möglich?

Nachtrag: Mir ist jetzt erst aufgefallen, dass ich bei den zeitlichen Ableitungen des E-Feldes jeweil den Faktor c² vergessen habe. Diese muss natürlich entsprechend ergänzt werden.

Ineluki
17.01.2012, 23:01
Deine letzten Schritte sind Quark. Das E-Feld ist doch nicht (x, y, z) sondern (E_x, E_y, E_z) ... Der Nabla-Operator ist ja die Ableitung nach den Koordinatenachsen (x, y, z). Und die wendest du auf das E-Feld (wie immer es aussehen mag) an. Damit aendern sich natuerlich deine Gleichungen. Mach das mal (hab gerade keine Lust) .. dann sehen wir weiter.

Desmulator
18.01.2012, 08:13
Unpassende Namensgebung.
Hier in Forum ist Latex ja verfügbar, darum tippe ich das jetzt mal kurz mit dem Handy ...
\huge \frac{d E_x}{d t} = 0
\huge \frac{d E_y}{d t} = 0
\huge \frac{d E_z}{d t} = 2 c^2 \cos t
\huge \frac{d E_z}{d y} - \frac{d E_y}{d z} = -y \sin t
\huge \frac{d E_x}{d z} - \frac{d E_z}{d x} = x \sin t
\huge \frac{d E_y}{d x} - \frac{d E_x}{d y} = 0

Die anderen Formeln schreibe ich jetzt aber nicht mehr auf, mit Handy und Latex ist das echt anstrengend ... Ich hoffe du kannst mir helfen :-)

Rein physikalisch gesehen sollte ein Feld entstehen bei dem nur die z-Komponente gefüllt ist.
Wenn also nun \huge E_x = E_y= 0 angenommen wird so ist
\huge \frac{d E_x}{d t} = \frac{d E_y}{d t} = \frac{d E_y}{d x} - \frac{d E_x}{d y} = 0 erfüllt.
Außerdem reduzieren sich die Differenzen und die anderen Bedingungen zu
\huge \frac{d E_z}{d y}= -y \sin t
\huge - \frac{d E_z}{d x} = x \sin t \Rightarrow \frac{d E_z}{d x} = - x \sin t
\huge \frac{d E_z}{d t} = 2 c^2 \cos t

Ineluki
18.01.2012, 20:02
E_x und E_y muessen nicht 0 sein. Es wird nur gefordert, dass ihre Ableitung nach der Zeit 0 ist. Selbst koennen sie aber immer noch Funktionen des Ortes sein.
Auf die Schnelle habe ich jetzt auch keine Loesung fuer dein Differentialgleichungssystem mit E_x = E_y = 0 gefunden. Hab aber auch nicht sonderlich viel Zeit reingesteckt, da ich selbst mehr als genug zu tun hab, mehr als ne Stunde konnte ich da nicht investieren. Probiere es doch einfach mal mit numerischen Loesungen, z.B. in einem Linear Algebra System wie Mathematica. Ansonsten helfen dir vielleicht Lagrange-Multiplikatoren weiter, die sind ja fuer das Loesen von Differentialgleichungssystemen mit Randbedingungen zustaendig ...

Mog
20.01.2012, 18:56
Ich hasse Überschriften.

Da schreiben die groß, FFT wurde geschwindigkeitsmäßig geknackt. Ich freu mich, backe einen Kuchen, und will schon Einladungen vertanzen, so wie es Pinky Pie mir beigebracht hat.

Und dann steht im letzten Satz des Artikels, dass es nur ein weiterer sparse algo ist.

Fickt euch doch ins Knie, Journalisten. Früher wart ihr ganz schön coole Leute, vor denen man den Hut ziehen konnte. Tim, Superman, etc. Was ist nur aus euch geworden, dass ihr arme Informatiker so foppen müsst?

nudelsalat
22.01.2012, 11:06
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:

/**
* @class
*/
Float32Array = Float32Array;
:D

DFYX
02.02.2012, 17:17
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:

http://www.wecallit42.de/temp/aquariumperson.png

(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 )

Whiz-zarD
04.02.2012, 21:17
Indizierter Zugriff made in china:

String cityAndZip = "";
for (int idx = 0; idx <= address.getMaxAddressLineIndex(); idx++)
{
if (idx == 0)
{
// street
}
else if (idx == 1)
{
cityAndZip = address.getAddressLine(idx);
}
else
{
break;
}
}
return cityAndZip;

Gefunden in einer Android-App.
Auf sowas muss man erstmal kommen :hehe:

Karl
04.02.2012, 21:27
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 sitztBedeutet das Bild nicht auch, dass du eigentlich ein Roboter bist? :p

nudelsalat
04.02.2012, 21:28
Schaut aus als hätte jemand den Balmers Peak um ein paar Promille überschritten. :O

DFYX
04.02.2012, 21:28
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.

YoshiGreen
05.02.2012, 19:06
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:




public String returnAddress(String[] addressData){
String string0 = addressData[0];
String string1 = addressData[1];
String string2 = addressData[2];
String string3 = addressData[3];
String string4 = addressData[4];

return string0+" "+string1+" "+string2+" "+string3+" "+string4;
}



... kein Scherz.

Lachsen
07.02.2012, 20:11
Bin auf nen witziges Video gestossen: WAT momente in Scriptsprachen (speziell Ruby und JavaScript)

Link: https://www.destroyallsoftware.com/talks/wat

Besonders toll fand ich: Array(16).join("wat" - 1) + " Batman!" ^^

R.D.
08.02.2012, 09:51
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...

R.D.
08.02.2012, 15:18
Double Post /o

Weil man sagt ich soll hier mehr posten:
Mr. Hat I Demo (http://www.multimediaxis.de/threads/134273-Mr.-Hat-I-Remake-Demo-Inside?p=2910452#post2910452)

:A

Aurae
08.02.2012, 22:03
Bin auf nen witziges Video gestossen: WAT momente in Scriptsprachen (speziell Ruby und JavaScript)

Link: https://www.destroyallsoftware.com/talks/wat

Besonders toll fand ich: Array(16).join("wat" - 1) + " Batman!" ^^
Der ist lustig! :D

DFYX
16.02.2012, 16:44
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.

12350


#!/bin/bash

display_usage()
{
echo "usage: $(echo $0 | sed "s/^.*\///") host port_from [port_to]"
}

# Check parameters
if [ $# -eq 0 ]; then
display_usage
exit 1
fi

# Setup variables
ADDRESS=$1
FROM=$2
TO=$3
if [ -z "$TO" ]; then
TO=$2
fi

FINISHED=0
TEMPFILE="/tmp/.portscan-temp-$$"
OPEN="/tmp/.portscan-open-$$"
REFUSED="/tmp/.portscan-refused-$$"
TIMEOUT="/tmp/.portscan-timeout-$$"
PID=0
NUM_OPEN=0
NUM_REFUSED=0
NUM_TIMEOUT=0

# Setup screen positions
PROGRESS_X=1
PROGRESS_Y=2
PROGRESS_WIDTH=$[$(tput cols) - ${PROGRESS_X} * 2 - 4]
CURRENT_X=3
CURRENT_Y=3
STATUS_X=3
STATUS_Y=5
OPEN_X=3
REFUSED_X=$[($(tput cols) - 15) / 2]
TIMEOUT_X=$[$(tput cols) - ${OPEN_X} * 2 - 15]
PORTS_Y=7
PORTS_HEIGHT=$[$(tput lines) - ${PORTS_Y} - 4]

# Create exit handler
trap "exit_handler" EXIT
exit_handler()
{
# Kill running nc
if [ "$PID" -gt 0 ]; then
kill $PID 2>/dev/null
wait $PID 2>/dev/null
fi

# Remove temp file
rm $TEMPFILE

# End on last line
tput cup $[$(tput lines) + $FINISHED - 2] 0
printf '\e[0K'

# Restore cursor
printf '\e[?25h'
# Restore foreground color
tput setaf 9
}

display_progress()
{
# Display progress bar
tput cup ${PROGRESS_Y} ${PROGRESS_X}
tput setaf 9
echo -n "[ "
PROGRESS=$[(1 + ${PORT} - ${FROM}) * ${PROGRESS_WIDTH} / (1 + ${TO} - ${FROM})]
for ((I=0; I < $PROGRESS; I++)); do
echo -n "-"
done
for ((I=$PROGRESS; I < $PROGRESS_WIDTH; I++)); do
echo -n " "
done
echo " ]"
}

display_current()
{
tput cup ${CURRENT_Y} ${CURRENT_X}
tput setaf 9
echo "Currently scanning port $PORT"
}

display_ports()
{
# Display ports header
tput cup ${PORTS_Y} ${OPEN_X}
tput setaf 2
echo -n "Open: ${NUM_OPEN}"
if [ -f $OPEN ]; then
I=2
for P in $(tail -n ${PORTS_HEIGHT} ${OPEN}); do
tput cup $[${PORTS_Y} + I] ${OPEN_X}
echo -n $P
I=$[$I + 1]
done
fi

tput cup ${PORTS_Y} ${REFUSED_X}
tput setaf 3
echo -n "Refused: ${NUM_REFUSED}"
if [ -f $REFUSED ]; then
I=2
for P in $(tail -n ${PORTS_HEIGHT} ${REFUSED}); do
tput cup $[${PORTS_Y} + I] ${REFUSED_X}
echo -n $P
I=$[$I + 1]
done
fi

tput cup ${PORTS_Y} ${TIMEOUT_X}
tput setaf 1
echo -n "Timeout: ${NUM_TIMEOUT}"
if [ -f $TIMEOUT ]; then
I=2
for P in $(tail -n ${PORTS_HEIGHT} ${TIMEOUT}); do
tput cup $[${PORTS_Y} + I] ${TIMEOUT_X}
echo -n $P
I=$[$I + 1]
done
fi
}

# Clear screen and hide cursor
tput clear
printf '\e[?25l'
echo "Scanning $ADDRESS from port $FROM to $TO"
tput cup $[$(tput lines) - 1] 0
echo -n "Cancel with CTRL+C"

display_ports

for ((PORT=$FROM; PORT <= $TO; PORT++)); do
display_progress
display_current

# Scan and display status
tput cup ${STATUS_Y} ${STATUS_X}
tput setaf 9
echo -n "Status: "
nc -zv $ADDRESS $PORT 2>$TEMPFILE > $TEMPFILE &
PID=$!
sleep 1
kill $PID 2>/dev/null
wait $PID 2>/dev/null
RESULT=$(cat $TEMPFILE)
if grep -qi succeeded $TEMPFILE; then
tput setaf 2
printf '\e[0K'
echo "Found open port $PORT"
NUM_OPEN=$[$NUM_OPEN + 1]
echo $PORT >> $OPEN
elif grep -qi refused $TEMPFILE; then
tput setaf 3
printf '\e[0k'
echo "Connection refused on port $PORT"
NUM_REFUSED=$[$NUM_REFUSED + 1]
echo $PORT >> $REFUSED
else
NUM_TIMEOUT=$[$NUM_TIMEOUT + 1]
echo $PORT >> $TIMEOUT
fi

display_ports
done

FINISHED=1

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.

R.D.
20.02.2012, 10:38
Ich sitze grad in der Arbeit und muss warten weil der Android Emulator so UNFASSBAR langsam ist. Selbst C kompiliert da schneller -.-

Whiz-zarD
20.02.2012, 17:20
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.

R.D.
20.02.2012, 18:03
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 :)

YoshiGreen
21.02.2012, 22:48
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.)

R.D.
22.02.2012, 13:34
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 :/

Whiz-zarD
22.02.2012, 17:17
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.


(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.

YoshiGreen
22.02.2012, 23:35
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.

JSON: http://developer.android.com/reference/org/json/JSONObject.html hm?

@Whiz: Es gibt Lebewesen die machen damit ganze Designs. "Und der Code ist ja so sauber formatiert." Nettere Menschen bekommen davon gesteigerten Blutdruck :C

R.D.
23.02.2012, 08:14
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:


{
riskaProject: [
{
title: "Ein Titel",
items: {
riskitems: [
{
// einige key/value pairs
},
{
// einige key/value pairs
}
]
},
description: "",
},
{
title: "Ein Titel 2",
items: {
riskitems: [
{
// einige key/value pairs
},
{
// einige key/value pairs
}
]
},
description: "Discription",
}
]
}


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.

Whiz-zarD
23.02.2012, 17:14
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.


@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.

YoshiGreen
23.02.2012, 18:28
Also JSON bringe ich nun nicht wirklich mit komplex in Verbindung. o.O Einmal durchatmen und Hand anlegen.



//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" :)


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.

Whiz-zarD
23.02.2012, 18:42
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.

YoshiGreen
23.02.2012, 18:48
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 :)

R.D.
24.02.2012, 08:16
@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?

Whiz-zarD
24.02.2012, 17:12
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.

R.D.
25.02.2012, 17:43
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.

DFYX
15.04.2012, 01:14
Gründe, warum PHP sterben muss (http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/). 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.

Jesus_666
15.04.2012, 12:19
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.

Jesus_666
21.04.2012, 15:56
Und da sehe ich wieder, warum ich PHP benutze.

Ich bin demletzt über Fred Boyle's Code Challenge (http://fredboyle.com/codechallenge/) 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.

DFYX
21.04.2012, 18:03
Einmal in Ruby:


foo = "#{Time.now.hash}#{number}".to_i.to_s(36)

Geht aber sicher sogar noch einfacher.

drunken monkey
08.05.2012, 22:37
Netter Artikel, einige ganz witzige Sachen drin. ^^" Hat mich wieder an dieses herrliche Video (https://www.destroyallsoftware.com/talks/wat) 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. ^^""

Jesus_666
16.05.2012, 15:07
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 (http://playground.ebiene.de/spamfrei-bloggen-unter-wordpress/) 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() (http://codex.wordpress.org/Function_Reference/get_the_content).)

Wenn ihr Schmerzen mögt, dann seht euch mal die zuständige Datei (http://core.trac.wordpress.org/browser/trunk/wp-includes/comment-template.php) 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.

niR-kun
19.05.2012, 01:44
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.

Whiz-zarD
19.05.2012, 11:05
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() (http://codex.wordpress.org/Function_Reference/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.

Xardas der Dunkle
19.05.2012, 11:30
Das mit dem translate beruht allerdings auf gettext (http://de.wikipedia.org/wiki/Gettext) einem Unix Standard ... ist also keine reine PHP Erfindung.
(Ändert nichts daran das gettext einfach nur Schwachsinn ist^^)

Kyuu
19.05.2012, 14:01
(Ändert nichts daran das gettext einfach nur Schwachsinn ist^^)

Warum ist gettext Schwachsinn?

Whiz-zarD
19.05.2012, 14:32
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.

Lukas
19.05.2012, 14:41
Und was schlägst du als Alternative vor?

Whiz-zarD
19.05.2012, 15:16
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.

Xardas der Dunkle
19.05.2012, 17:26
Wir nutzen auf der Arbeit SilverStripe (http://www.silverstripe.org/) das nutzt genau diese Mischung:
_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.)

DFYX
19.05.2012, 22:37
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.

niR-kun
20.05.2012, 14:52
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 (http://de.wikipedia.org/wiki/Eclipse_Modeling_Framework) und Entwicklung von Plugins und Editoren mit GEF (http://en.wikipedia.org/wiki/Graphical_Editing_Framework) 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 ;)

R.D.
20.05.2012, 14:59
Habt ihr schon mal modellgetrieben etwas entwickelt?


Nein, ich entwickle lieber zum Ziel hin als davon weg :D

Cherry
21.05.2012, 19:42
http://www.freebasic.net/forum/viewtopic.php?f=8&t=19817

(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:


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.

Moyaccercchi
21.05.2012, 22:01
[...] 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!

R.D.
22.05.2012, 12:02
Besser wäre eine Main.exe die Daten im Ram verwaltet und alle Module können drauf zugreifen. Erfordert wahrscheinlich etwas rumgefummel :D

Cherry
22.05.2012, 12:14
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.

Desmulator
22.05.2012, 12:54
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.

Whiz-zarD
22.05.2012, 13:10
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 ;)

DFYX
22.05.2012, 13:13
Wer sagt, dass Textdateien unbedingt auf der Festplatte liegen müssen?
Eine RAM-Disk würde auch gute Dienste machen ;)
Kann Windows sowas überhaupt?

Whiz-zarD
22.05.2012, 13:16
Nicht von Haus aus, aber es gibt diverse Software dafür.

Jesus_666
22.05.2012, 15:32
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?

Whiz-zarD
12.06.2012, 20:06
Wird "In deinem Land nicht verfügbar" zum Internetstandard? (http://www.golem.de/news/http-status-code-wird-in-deinem-land-nicht-verfuegbar-zum-internetstandard-1206-92464.html)

Gott, bitte nicht ...
(Der Vorschlag ist zwar eher zynisch gemeint, aber der könnte gewisse Personen auf dumme Ideen bringen)

Cherry
11.08.2012, 15:37
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:

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!

This kind of bug even slipped into the Windows kernel (http://blogs.msdn.com/b/oldnewthing/archive/2012/05/14/10304701.aspx) and stayed there for decades.

Interessiert euch vielleicht auch.

R.D.
20.08.2012, 16:42
Weil mir grad danach ist: https://github.com/Regiden/RadicalFishEngine

Daran arbeite ich gerade :D

Aurae
20.08.2012, 18:11
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. :)

R.D.
20.08.2012, 20:44
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).

niR-kun
21.08.2012, 16:47
Für Sound nutzen wir beim Cuina Project Paulscode Soundsystem (http://www.paulscode.com/forum/index.php?topic=4.0).
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.

R.D.
21.08.2012, 21:22
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:
15043

niR-kun
22.08.2012, 14:45
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.

R.D.
22.08.2012, 17:08
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).

Whiz-zarD
22.08.2012, 17:58
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?

Jesus_666
22.08.2012, 18:21
@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.

Whiz-zarD
22.08.2012, 18:42
@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...

PT = Persontage (http://de.wikipedia.org/wiki/Personenstunde)

NPC Fighter
22.08.2012, 20:18
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! (:

R.D.
22.08.2012, 23:11
@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?

Kyuu
23.08.2012, 00:26
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 (http://en.wikipedia.org/wiki/Resource_Interchange_File_Format) 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.

MagicMagor
23.08.2012, 14:37
Hallo,
ich habe da eine kleine C++ Frage.
Mein Compiler weigert sich den Typ int64_t in time_t ohne expliziten Cast umzuwandeln.



#include <time.h>
#include <stdint.h>

int main() {
int64_t test = 1234567890;
tm* now = localtime(&test);
return 0;
}

Dieser Code ergibt als Ausgabe:


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.

DFYX
23.08.2012, 22:44
Da wird kein int64_t sondern ein int64_t*, also ein Pointer konvertiert. Pointerkonvertierung macht C++ normalerweise NIE automatisch.

niR-kun
24.08.2012, 17:47
Konvertierung von Datentypen, ach ja ... ich kann mich in C noch an die Funktion atoi (http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/) erinnern, ein Beispiel wie man Funktionen nicht benennen sollte.

Kyuu
25.08.2012, 00:01
Wie würdest du es benennen? Soll übrigens für "ASCII to Integer" stehen, soweit ich weiß.

makenshi
26.08.2012, 00:13
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.

Kyuu
26.08.2012, 16:24
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?

makenshi
02.09.2012, 18:30
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.

Kyuu
08.09.2012, 14:27
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.



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.

DFYX
08.09.2012, 15:07
"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.

Kyuu
11.09.2012, 11:26
"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. ;)

Whiz-zarD
11.09.2012, 11:49
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.

Indy
11.09.2012, 12:06
<?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

Kyuu
11.09.2012, 12:52
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.

Ein C-String ist ein nullterminiertes Char-Array. Aber es würde mich jetzt, ehrlich gesagt, überraschen, wenn das "a" tatsächlich für "Array" stehen würde, denn der zugrundeliegende Datentyp, bzw. hier die Codierung der Zeichen ist entscheidender als die Datenstruktur.

Whiz-zarD
11.09.2012, 14:15
Ein C-String ist ein nullterminiertes Char-Array. Aber es würde mich jetzt, ehrlich gesagt, überraschen, wenn das "a" tatsächlich für "Array" stehen würde, denn der zugrundeliegende Datentyp, bzw. hier die Codierung der Zeichen ist entscheidender als die Datenstruktur.

Meine alternative Idee muss ja nicht richtig sein. :)

Jesus_666
11.09.2012, 19:33
Ein C-String ist ein nullterminiertes Char-Array. Aber es würde mich jetzt, ehrlich gesagt, überraschen, wenn das "a" tatsächlich für "Array" stehen würde, denn der zugrundeliegende Datentyp, bzw. hier die Codierung der Zeichen ist entscheidender als die Datenstruktur.

Tatsächlich hatte ich auch immer "array" statt "ASCII" im Kopf und ich bin mir auch gerade nicht sicher, ob C überhaupt irgendwo fix definiert, daß es ASCII sein muß. Es würde mich nicht wirklich überraschen, wenn die Funktion auf irgendwelchen IBM-Maschinen auf EBCDIC arbeitet, zumindest in einem der älteren C-Standards.

Kyuu
12.09.2012, 09:28
Du hast Recht, zumindest in C99 ist nicht fest definiert, dass es ASCII sein muss. Ich denke, das Gleiche wird auch für ältere Standards zutreffen. Interessant ist aber, dass bereits in den Manpages der ersten Unix-Edition atoi (http://minnie.tuhs.org/cgi-bin/utree.pl?file=V1/man/man3/atoi.3) als "ascii to integer" beschrieben wird. Rückblickend war die Entscheidung, "ASCII" im Funktionsnamen zu verwenden, also keine gute Idee. Immerhin haben sie es mit strtol besser gemacht.

Pray
12.09.2012, 14:04
Ich wollt für meine Frage keinen extra Thread machen deswegen frag ich mal hier nach.
Ich bin auf der Suche nach einem Hobby Team in Richtung Apps für Andorid, 2D oder 3D Games für PC/Android und sollte deutschsprachig sein.
Hoffe mir kann bei meiner Suche jemand helfen.

R.D.
13.09.2012, 07:34
Du suchst also Leute die die Arbeit machen, für lau?

Whiz-zarD
13.09.2012, 07:53
Ich denke, dass er dort mitmachen möchte.

Indy
13.09.2012, 08:00
Erfahrungen mit Android-Apps: ja
Erfahrungen speziell im 2D/3D-Bereich: nein
Der grafische Kram dürfte bei Android alles mit OpenGL/OpenGL ES gelöst sein.
Aber wonach suchst du überhaupt?

Ardam
13.09.2012, 10:22
Ich wollt für meine Frage keinen extra Thread machen deswegen frag ich mal hier nach.
Ich bin auf der Suche nach einem Hobby Team in Richtung Apps für Andorid, 2D oder 3D Games für PC/Android und sollte deutschsprachig sein.
Hoffe mir kann bei meiner Suche jemand helfen.

Hallo Pray,

viele Informatik-Fakültäten richten zurzeit Applikationen-Labore ein, in denen Interessierte Android-Apps entwickeln und testen. Vielleicht wirst du dort fündig :)

NPC Fighter
27.09.2012, 17:14
Die Font hier (http://www.heise.de/newsticker/meldung/Neue-entwicklerfreundliche-Schrifttype-von-Adobe-1718746.html) sieht interessant aus. Werde sie vllt. in den nächsten Tagen mal intensiv auf der Arbeit testen. (:
Habt ihr irgendwelche Font-Vorlieben wenn ihr entwickelt oder nutzt ihr prinzipiell den Standard eurer IDE?