Also diese genannten Funktionen habe ich, auch bei großen Projekten, noch nie gebraucht.
Dann waren diese Projekte nicht groß.
Also diese genannten Funktionen habe ich, auch bei großen Projekten, noch nie gebraucht.
Dann waren diese Projekte nicht groß.
Dann waren diese Projekte nicht groß.
Es waren wohl nichtmal Software-Projekte.
Das man für 'nen Python-5-Zeiler jetzt kein PyCharm braucht ist wohl jedem klar.
Es waren wohl nichtmal Software-Projekte.
Das wohlmöglich auch.
Also dass man bei grossen Codebases nur noch mit IDEs arbeiten kann würde ich so auch nicht unterschreiben. Kenne viele die C++ mit vim/emacs coden, auch an gigantischen Projekten. Ich find's halt unkomfortabel.
Brauchen tut man das alles nicht, klar, aber es geht ja um Produktivität.
… und es lässt sich sicherlich auch bestätigen, dass IDEs bislang noch keinen Programmierer daran gehindert haben, Schrottcode zu produzieren.
Also dass man bei grossen Codebases nur noch mit IDEs arbeiten kann würde ich so auch nicht unterschreiben. Kenne viele die C++ mit vim/emacs coden, auch an gigantischen Projekten. Ich find's halt unkomfortabel.Brauchen tut man das alles nicht, klar, aber es geht ja um Produktivität.
Ja gut, die arbeiten dann aber auch mit tausend Plugins...
Und zu obigem: Der Programmierer muss schon noch was drauf haben, das ist ja aber klar.
… und es lässt sich sicherlich auch bestätigen, dass IDEs bislang noch keinen Programmierer daran gehindert haben, Schrottcode zu produzieren.
Dir ist schon bekannt, das Werkzeuge nicht die Fähigkeit haben, einem die Arbeit komplett und korrekt zu erledigen - jedoch einem „unter die Arme greifen“ können wenn es darum geht Fehler zu verhindern.
Steintafeln (heute vermutlich eher nur noch Grabsteine) sind zwar mit Hammer, Meißel und Schleifpapier sicherlich auch herzustellen, aber eine Maschine mit Rechtschreibkorrektur, die jemanden fragt ob er wirklich "dass" statt "das" in den Stein fräsen soll, spart sicherlich die ein oder andere Marmorplatte.
Werkzeuge wie Maschinen erlauben es durchaus Fehler bei Aufgaben zu reduzieren, Sie komplett zu verhindern geht bisweilen noch nicht.
Deshalb sind IDEs ein wirklich tolles Werkzeug.
Danke, dass du meine Gedanken nochmal zusammengefasst hast. Ich hatte es gar nicht anders gemeint.
Im Auftrag meiner Mutter: Kleines Script, was die Spielstände von "Candy Crush" vom Android-Smartphone runtersichert. Benötigt adb.
Vor Aufruf des Scripts einmal kurz "Helium Backup" auf dem Android-Gerät ausführen, damit die Dateien an der richtigen Stelle liegen.
Aufrufen einfach mit candy.sh, Rest geht automatisch.
#!/bin/bash
cd /tmp/
for i in com.king.candycrushsaga.ab com.king.candycrushsaga.json
do
adb pull /mnt/sdcard/carbon/com.king.candycrushsaga/${i} .
done
tar -cvf /stuart/backup/candy_$(date +%Y-%m-%d_%H-%M-%S).tar com.king.candycrushsaga.ab com.king.candycrushsaga.json
rm com.king.candycrushsaga.ab com.king.candycrushsaga.json
cd -
Kleines Python-Skript, das sich jeden Tag auf Arbeit mit dem Referenz- und Entwicklungs-Datenbankserver verbindet und auf neue Daten überprüft, die von ersteren auf letzteren gespiegelt werden müssen:
import os.path, datetime
conn_str_ziel = "user1/pass1@tnsname1"
conn_str_quelle = "user2/pass2@tnsname2"
query_str = "SELECT MAX(RECHENTERMIN) FROM GROSSE_TABELLE"
msg_titel = "Data Transfer Checker"
msg_head = "Es ist ein neuerer Datenstand vorhanden!"
# aktuelles Datum im ISO-Format (YYYY-MM-DD)
today = datetime.date.today().isoformat()
lastrun = today
lastrun_file = os.path.join(os.path.dirname(os.path.realpath(__file__)),
"datatransfer_check_last.txt")
if os.path.isfile(lastrun_file):
# Durch den with-Context werden Fehler beim Einlesen der Datei abgefangen
# und lastrun behält den Wert von today bei -> keine DB-Anfrage.
with open(lastrun_file, encoding='ascii') as f:
lastrun = f.readline().rstrip()
if lastrun < today:
# Ich verzichte hier auf zusätzliche Wrapper und nutze den Oracle-Treiber
# direkt. Diese funktionieren alle ähnlich dem eingebauten sqlite-Modul.
import cx_Oracle as oracle
rechendatum_ziel = None
rechendatum_quelle = None
# Siehe oben. Bei DB-Fehler ist das Rechendatum unbestimmt.
with oracle.connect(conn_str_ziel) as conn:
cursor = conn.cursor()
cursor.execute(query_str)
result = cursor.fetchone()
if result:
# RECHENTERMIN ist eine DATE-Spalte, die der DB-Treiber als
# datetime.datetime-Objekt zurückgibt. Wir wollen nur den
# Datums-Teil, da ohnehin keine Tageszeit angegeben ist.
rechendatum_ziel = result[0].date().isoformat()
cursor.close()
with oracle.connect(conn_str_quelle) as conn:
cursor = conn.cursor()
cursor.execute(query_str)
result = cursor.fetchone()
if result:
rechendatum_quelle = result[0].date().isoformat()
cursor.close()
if rechendatum_ziel and rechendatum_quelle and rechendatum_quelle > rechendatum_ziel:
msg = "\n".join([msg_head, "Rechendatum Ziel:\t" + rechendatum_ziel,
"Rechendatum Quelle:\t" + rechendatum_quelle])
# ich frickel lieber mit der Win32-API herum als mit Tk :P
import ctypes
MB_OK = 0x00000000
MB_INFORMATION = 0x00000040
# unter Python2 mit Byte-Strings MessageBoxA nutzen!
ctypes.windll.user32.MessageBoxW(None, msg, msg_titel, MB_OK | MB_INFORMATION)
with open(lastrun_file, mode='w', encoding='ascii') as f:
print(today, file=f)
Alles anzeigen
Weil XING die Contacts-Export-Funktion rausgeschmissen hat und ich schnell alle meine Kontakte mit Position und Firma brauchte:
https://gist.github.com/chrisnew/69d82b8a55a5ea94dc8f
window.contacts = [];
$('#contacts-table > li').each(function(){
var elem = $(this);
var data = {
name: elem.find('.title > a[href^="/profile"]').text(),
position: $.trim(elem.find('.text').clone().children().remove().end().text()),
company: elem.find('.company > a').text()
};
if (data.name) {
window.contacts.push(data);
}
});
JSON.stringify(window.contacts);
Alles anzeigen
Erzeugt einen schönen JSON String.
Ein bisschen Zalgo-Fuckup. Von gandro in Rust und von indiagreen aus #haskell und mir in Haskell:
fn main() {
let x = "Z̷̘̲̗̤̹̞̥̦͖̻̘̍ͦ̋̐͑̈ͪͣͫͧ͑ͭ̇͡ͅÄ̸̧͈̣̩̲̲̜̟͓͚̻ͭ͂̌ͫ̊͊ͤ̇ͨ̀̈̔͂̚͟L̊̄̌̎̕͜͏̳̣̼̰̭̮̠̗̞̜͙G̡̳͕͕̫̍ͩͬ̉̀̐̔͗̃͛̌͆͑̚͠Ó͇̟̯̤̖̩̬̯̻͚͆͒ͫ̏͊̌̆ͯ̏ͧͭͩ";
println!("Graphemes: {}", x.graphemes(true).count());
println!("Characters: {}", x.char_len());
println!("Bytes: {}", x.len());
}
import qualified Data.ByteString as B
import qualified Data.ByteString.UTF8 as UB
import qualified Data.Text as T
import Data.Text.ICU
x = "Z̷̘̲̗̤̹̞̥̦͖̻̘̍ͦ̋̐͑̈ͪͣͫͧ͑ͭ̇͡ͅÄ̸̧͈̣̩̲̲̜̟͓͚̻ͭ͂̌ͫ̊͊ͤ̇ͨ̀̈̔͂̚͟L̊̄̌̎̕͜͏̳̣̼̰̭̮̠̗̞̜͙G̡̳͕͕̫̍ͩͬ̉̀̐̔͗̃͛̌͆͑̚͠Ó͇̟̯̤̖̩̬̯̻͚͆͒ͫ̏͊̌̆ͯ̏ͧͭͩ"
main = do
putStrLn x
putStr "Graphemes: "
print $ length $ breaks (breakCharacter Current) $ T.pack x
putStr "Codepoints: "
print $ length x
putStr "Bytes (in UTF-8): "
print $ B.length $ UB.fromString x
Alles anzeigen
missingno detected
Viel zu viele ifs
/* Programmierer: akino_germany
Made with wxDev-C++ */
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a;
char eingabe;
do {
cout << "Welche Zahl wollen Sie pruefen?" << endl;
cin >> a;
if (a < 5)
{
if (a < 3)
{
if (a==1)
{
cout << "Wahr" << endl;
}
else
{
cout << "Falsch" << endl;
}
}
else
{
if (a==3)
{
cout << "Wahr" << endl;
}
else
{
cout << "Falsch" << endl;
}
}
}
else
{
if (a < 7)
{
if (a==5)
{
cout << "Wahr" << endl;
}
else
{
cout << "Falsch" << endl;
}
}
else
{
if (a==7)
{
cout << "Wahr" << endl;
}
else
{
cout << "Falsch" << endl;
}
}
}
cout << "Wollen Sie noch einmal pruefen?" << endl;
cin >> eingabe;
} while (eingabe=='j');
return EXIT_SUCCESS;
}
Alles anzeigen
Alter wtf, geh mal den Code gescheit formatieren o_O
Was soll ich denn da ändern? Ist doch übersichtlich so.
Was soll ich denn da ändern? Ist doch übersichtlich so.
Nein.
/* Programmierer: akino_germany
Made with wxDev-C++ */
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a;
char eingabe;
do {
cout << "Welche Zahl wollen Sie pruefen?" << endl;
cin >> a;
if (a < 5) {
if (a < 3) {
if (a == 1) {
cout << "Wahr" << endl;
} else {
cout << "Falsch" << endl;
}
} else {
if (a == 3) {
cout << "Wahr" << endl;
} else {
cout << "Falsch" << endl;
}
}
} else {
if (a < 7) {
if (a == 5) {
cout << "Wahr" << endl;
} else {
cout << "Falsch" << endl;
}
} else {
if (a == 7) {
cout << "Wahr" << endl;
} else {
cout << "Falsch" << endl;
}
}
}
cout << "Wollen Sie noch einmal pruefen?" << endl;
cin >> eingabe;
} while (eingabe == 'j');
return EXIT_SUCCESS;
}
Alles anzeigen
Hmm das ist in der Tat übersichtlicher. Danke.
Alter wtf, geh mal den Code gescheit formatieren o_O
Sagt der, der die { nichtmal in ne neue Zeile macht.
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!