Ja, er zijn veel libraries die je kan gebruiken plus veel voorbeelden. Het is even wennen aan de manier van code schrijven. Er worden geen {} en puntcomma's gebruiktquote:
1 2 3 4 | for ($i = 0; $i < 10; $++) { print $i."<br>"; ?> |
1 2 | print i |
1 2 3 4 5 6 7 | for x in range(2, n): if n % x == 0: print n, 'equals', x, '*', n/x break else: print n, 'is a prime number' |
Ik zou dat stukje code nog eens goed controleren.quote:Op zondag 22 juni 2008 12:07 schreef Libris het volgende:
Nog een klein voorbeeldje
[ code verwijderd ]
Prime numbers vinden
Hier is een werkendequote:Op zondag 22 juni 2008 12:18 schreef Farenji het volgende:
[..]
Ik zou dat stukje code nog eens goed controleren.
1 2 3 4 5 6 7 8 | prime = True for x in range(2, n): if n % x == 0: prime = False break if prime: print n, 'is a prime number' |
Android, zie sig... Het ligt alleen even stilquote:Op zondag 22 juni 2008 12:21 schreef Mordreth het volgende:
Python lijkt me inderdaad ook een erg leuke taal om te leren. Jammer genoeg te weinig tijd voor op dit moment. Waar ik wel graag mee bezig wil is Android. Aangezien ik bezig ben met Java te leren is dat een mooi meepakkertje
.
Programmeer wedstrijden zijn leuk! Alleen vind ik de langere wedstrijden teveel tijd vreten, dus aan een fok-contest zal ik niet mee doen. Google houdt binnenkort ook weer een wedstrijd. De hoofdprijs bestaat onder andere uit 10 keer een gratis lunch bij een Google kantoorquote:Op donderdag 12 juni 2008 23:36 schreef Serphiot het volgende:
Op sommige sites worden wel eens programmeer wedstrijden gehouden, ik vroeg me af hoeveel devvers hier zitten en of onder de devvers mensen zijn die het leuk vinden om een contest te houden?
Nog geen idee hoe het in het vat te gieten, dacht eerst maar eens te peilen of er animo is.
Microsoft Visual Studio Express mag het ook meequote:Op zondag 22 juni 2008 14:21 schreef webbyplus het volgende:
Momenteel gebruik ik Turbo Delphi Explorer voor het maken van programmatjes, deze versie is gratis, en de apps mogen ook via internet verspreidt worden.
Zijn er meer stand-aloneapplicatie builders in omloop die gratis zijn & waarmee je applicaties mag verspreiden?
thx,
Webby
1 2 3 4 5 6 7 8 9 10 | <zip> <format value="0000AA"/> <format value="0000 AA"/> <format value="NL-0000AA"/> <format value="NL-0000-AA"/> </zip> <phone> etc... etc.. |
MVSE werkt goed idd , voor de java devvers: Jcreator, eclipse , netbeansquote:Op zondag 29 juni 2008 23:03 schreef existenz het volgende:
[..]
Microsoft Visual Studio Express mag het ook mee
hier ook, heb SVN werkend nu (al loop ik nog tegen het probleem aan dat me tortoisesvn vast loopt als ik 90.000 bestanden probeer te committenquote:Op dinsdag 24 juni 2008 13:41 schreef Mordreth het volgende:
Aan het kloten met subversion enz.
Mensen die hier werken met Trac en subversion? Ik vraag me af hoe de connectie in elkaar zit. Hoe weet trac welke bestanden zijn gewijzigd voor welke ticket.
Heb het werkend, (de eigen deamon van trac dan de link met apache gaat nog niet goed) maar je geeft de directory van je svn repo op op de server en dan leest trac het van daar uit hoe het zit.quote:Op dinsdag 24 juni 2008 13:41 schreef Mordreth het volgende:
Mensen die hier werken met Trac en subversion? Ik vraag me af hoe de connectie in elkaar zit. Hoe weet trac welke bestanden zijn gewijzigd voor welke ticket.
Die snappen het idee van webservices dus niet helemaal...quote:Op zondag 20 juli 2008 22:21 schreef super-muffin het volgende:
Ik ben mijn Last.fm PHP API aan het updaten omdat ze met de nieuwe layout ook de hele webservices hebben om gegooid.
Nou ja, het idee is niet per definitie dat je API tot het einde der tijden backwards compatible hoeft te zijn natuurlijk. Alhoewel de oude webservices online houden nou ook weer niet zoveel moeite zou moeten kosten, zeker in een overgangsfase.quote:Op maandag 21 juli 2008 00:05 schreef existenz het volgende:
[..]
Die snappen het idee van webservices dus niet helemaal...
Nee, dat de webservice bruikbaar blijft voor de consumers ongeacht veranderingen aan de backend van de webservice.... En blijkbaar hebben ze dat hier dus netjes gedaan door de oude webservices te deprecaten en mensen op te roepen om de nieuwe webservices te gebruiken. Dat is een hele nette oplossing.quote:Op maandag 21 juli 2008 00:08 schreef Litpho het volgende:
[..]
Nou ja, het idee is niet per definitie dat je API tot het einde der tijden backwards compatible hoeft te zijn natuurlijk. Alhoewel de oude webservices online houden nou ook weer niet zoveel moeite zou moeten kosten, zeker in een overgangsfase.
Kan je niet veel beter die methodes in een abstracte class zetten en daarvan laten inheriten?quote:Op zaterdag 9 augustus 2008 12:17 schreef StonedKinG het volgende:
Ik ben momenteel bezig met een ASP/NET / C# Generator, die op basis van een tabel in een DBMS een C# class genereert, en bijbhorende usercontrols. Volgende methoden worden gegenereerd :
public static Blaat load(keys)
public static Blaat save(keys)
public static Blaat[] loadall(keys)
public static Blaat[] lfind(string searchString, string Column)
public Control[] getControlFor(string column);
Op deze manier kun je heel makkelijk (zeker als je geen LINQ oid kunt/wilt gebruiken) een tabel converteren naar een pagina om dit object te maken. Een Bit worden 2 radio buttons, een blob wordt een upload veld, als een kolom verplicht is komt er automatisch een RequiredFieldValidator op, etc....
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | using System; namespace maral.db.obj { ///////////////////////////////////////////////// // Class generated by Maral DbClassCreator V2.0// // Created for: ASP.NET 2.0 ///////////////////// ///////////////////////////////////////////////// public class News { public string content { get; set; } public DateTime date { get; set; } public string author { get; set; } public int id { get; set; } /// <summary> /// Constructs a new News object. Nullable fields are <code>null</code>, other are getting a default value suchs as -1L for <code>long</code>s. /// </summary> public News() { id = -1; } public static News load(int key_id) { var result = new News(); var reader = DbTools.getOleDataReader("SELECT * FROM News WHERE id = " + key_id); while (reader.Read()) { result.content = DbTools.getString(reader["content"]); result.date = DbTools.getDate(reader["date"]); result.author = DbTools.getString(reader["author"]); result.id = DbTools.getInt(reader["id"]); } reader.Close(); return result; } public void save() { var newRecord = id > 0; var query = newRecord ? "INSERT INTO News VALUES(@content, @date, @author);" : "UPDATE News SET content = @content, date = @date, author = @author WHERE id = @id;"; var command = DbTools.getOleCommand(query); try { if (!newRecord) command.Parameters.AddWithValue("@id", id); command.Parameters.AddWithValue("@content", content); command.Parameters.AddWithValue("@date", date); command.Parameters.AddWithValue("@author", author); if (newRecord) id = int.Parse(command.ExecuteScalar().ToString()); else command.ExecuteNonQuery(); } catch (Exception e) { //TODO: Log error! } finally { command.Connection.Close(); } } public static News[] loadAll() { var reader = DbTools.getOleDataReader("SELECT * FROM News;"); var amount = 0; while (reader.Read()) { amount++; } reader.Close(); reader = DbTools.getOleDataReader("SELECT * FROM News;"); var result = new News[amount]; var i = 0; while (reader.Read()) { result[i] = new News(); result[i].content = DbTools.getString(reader["content"]); result[i].date = DbTools.getDate(reader["date"]); result[i].author = DbTools.getString(reader["author"]); result[i].id = DbTools.getInt(reader["id"]); i++; } reader.Close(); return result; } public static News[] find(string searchString, string columnName) { var reader = DbTools.getOleDataReader("SELECT * FROM News WHERE " + columnName + " LIKE '%" + searchString + "%';"); var amount = 0; while (reader.Read()) { amount++; } reader.Close(); reader = DbTools.getOleDataReader("SELECT * FROM News WHERE " + columnName + " LIKE '%" + searchString + "%';"); var result = new News[amount]; var i = 0; while (reader.Read()) { result[i] = new News(); result[i].content = DbTools.getString(reader["content"]); result[i].date = DbTools.getDate(reader["date"]); result[i].author = DbTools.getString(reader["author"]); result[i].id = DbTools.getInt(reader["id"]); i++; } reader.Close(); return result; } public static void delete(int key_id) { var command = DbTools.getOleCommand("DELETE FROM News WHERE id = " + key_id); command.ExecuteNonQuery(); } } } |
Houd je wel aan de coding conventiesquote:Op zaterdag 9 augustus 2008 12:17 schreef StonedKinG het volgende:
Ik ben momenteel bezig met een ASP/NET / C# Generator, die op basis van een tabel in een DBMS een C# class genereert, en bijbhorende usercontrols. Volgende methoden worden gegenereerd :
public static Blaat load(keys)
public static Blaat save(keys)
public static Blaat[] loadall(keys)
public static Blaat[] lfind(string searchString, string Column)
public Control[] getControlFor(string column);
Op deze manier kun je heel makkelijk (zeker als je geen LINQ oid kunt/wilt gebruiken) een tabel converteren naar een pagina om dit object te maken. Een Bit worden 2 radio buttons, een blob wordt een upload veld, als een kolom verplicht is komt er automatisch een RequiredFieldValidator op, etc....
Ik heb een tijd geleden zoiets gemaakt maar dan in perl: DataRow. Dat is een generieke abstracte class die een row uit een willekeurige databasetabel representeert, met load, save, delete, copy etc methods, generieke voorzieningen voor 1-to-many, 1-to-1 en many-to-many relaties. Die class is relatief groot, maar in subclasses inherit je dan daarvan, en daarin geef je alleen aan wat de databasetabel is, welke velden die tabel heeft, je definieert de identificerende key(s) en je definieert de relaties die het object met andere subclasses heeft. Hierdoor blijven de subclasses heel klein, in principe hoef je dan niet meer dan de constructor te overriden. Dat scheelt heel veel herhaling van grotendeels identieke code; en dat is belangrijk, als je dan iets wil wijzigen hoeft dat maar in 1 bestand, al je subclasses nemen dat vanzelf over, en hoef je ook geen generator aan te passen. Ik geloof sowieso niet in code die code genereert eigenlijk, vragen om problemen is dat.quote:Op zaterdag 9 augustus 2008 13:39 schreef StonedKinG het volgende:
Dat zou kunnen, allen per tabel verschilt alles wel zo veel dat het weinig zin heeftdan zou ik meer op een interface terecht komen. Daarbij verschilt de signature nogal eens van zo''n methode, de load heeft namelijk bij een enkele sleutel slechts 1 parameter, bij meerdere natuurlijk meer
Hier een voorbeeltje van zo'n gegenereerde class, kan nog wat foutjes bevatten maar schiet al lekker op
[ code verwijderd ]
Alles is dus gegenereerd, dus ook het commentaar
Wat bedoel je met een meer lagen model? Het gebruik van interfaces/abstrace klassen etc? De null value afhandeling doe ik door velden die verplicht zijn in de DB een standaard waarde te geven als -1, of een nieuwe instantie van bv DateTime en niet verplichte velden gaan straks weer de db in als een Db.NullValue indien ze hun standaardwaarde hebben of een null zijn.quote:Op zaterdag 9 augustus 2008 14:51 schreef existenz het volgende:
[..]
Houd je wel aan de coding conventies. Is zeker bij generators belangrijk om te doen. En let ff op null value afhandeling en ik zie dat je geen meer lagen model gebruikt. Is dat expres (Kan natuurlijk prima als je daarvoor kiest)?
Dat was ook mijn doel, het af zijn van innerline SQL, die eeuwige readers, vergeten connecties te sluiten, etc. Of je gelooft in code generatie hangt puur af hoe intelligent je je generator maakt. Tot nu toe ben ik geen serieuze problemen tegen gekomen.quote:Op zaterdag 9 augustus 2008 16:42 schreef Farenji het volgende:
[..]
Ik heb een tijd geleden zoiets gemaakt maar dan in perl: DataRow. Dat is een generieke abstracte class die een row uit een willekeurige databasetabel representeert, met load, save, delete, copy etc methods, generieke voorzieningen voor 1-to-many, 1-to-1 en many-to-many relaties. Die class is relatief groot, maar in subclasses inherit je dan daarvan, en daarin geef je alleen aan wat de databasetabel is, welke velden die tabel heeft, je definieert de identificerende key(s) en je definieert de relaties die het object met andere subclasses heeft. Hierdoor blijven de subclasses heel klein, in principe hoef je dan niet meer dan de constructor te overriden. Dat scheelt heel veel herhaling van grotendeels identieke code; en dat is belangrijk, als je dan iets wil wijzigen hoeft dat maar in 1 bestand, al je subclasses nemen dat vanzelf over, en hoef je ook geen generator aan te passen. Ik geloof sowieso niet in code die code genereert eigenlijk, vragen om problemen is dat.
Deze DataRow class gebruik ik tegenwoordig in bijna al mijn perl projecten. Scheelt echt veel tijd, development is nog nooit zo snel gegaan, je hebt vrijwel geen inline SQL meer nodig en je code wordt er ongelooflijk compact en overzichtelijk van.
In perl zijn er veel van dit soort classes, zoals DBIx::Class waar nog veel meer mee kan. Veel frameworks in andere talen zoals phpCake of Ruby on Rails hebben een vergelijkbare class, hoogstwaarschijnlijk is er voor .NET ook wel zoiets te vinden.
Volgens de meeste gebruikte conventie zou je het als volgt doen:quote:Op zaterdag 9 augustus 2008 19:48 schreef StonedKinG het volgende:
[..]
Wat bedoel je met een meer lagen model? Het gebruik van interfaces/abstrace klassen etc? De null value afhandeling doe ik door velden die verplicht zijn in de DB een standaard waarde te geven als -1, of een nieuwe instantie van bv DateTime en niet verplichte velden gaan straks weer de db in als een Db.NullValue indien ze hun standaardwaarde hebben of een null zijn.
Wat bedoel je met coding conventies? Zie ik iets over het hoofd? Ik laat elke klasse sowieso checken door Resharper 4, en zorg dat ik niet eens warnings genereer
1 2 3 4 5 6 7 8 9 10 | public string ExampleProperty { get { return exampleProperty; } set { exampleProperty = value; } } public void Save() { } |
Thx voor die uppercasequote:Op zaterdag 9 augustus 2008 20:04 schreef existenz het volgende:
[..]
Volgens de meeste gebruikte conventie zou je het als volgt doen:
[ code verwijderd ]
Methode names dus altijd met uppercase beginnen en public fields private omturnen in properties. Dat viel me eigenlijk vooral op. Dat is ieg de meest gebruikte standaard (Maar absoluut niet de enige).
edit: Ik zie 3.5 gebruikt worden, dan hoeft de private declarie niet, maar ook de properties met hoofdletter beginnen
Omdat je soms niet van een bepaalde technologie kunt gebruiken door een dwarsliggende webhost, oude meuk, of simpelweg omdat het ff snel genereren van de hele zooi voor een klein projectje gewoon fijn is. Daarbij genereert Linq To SQL en die andere meuk toch geen ASP.NET pagina's? Zeker niet netjes met RequiredFieldValidators enzo toch ?quote:edit2:
Waarom trouwens zelfs wat schrijven als je NHibernate, ActiveRecord, WIlson, LLBGen, Linq To Sql, Entity Framework etc hebt?
Vandaar het keuzerondequote:Op zaterdag 9 augustus 2008 20:21 schreef existenz het volgende:
Nee, dat klopt (LLBLGen volgens mij wel, maar die kost dan ook $$$). Dit soort properties (waar je geen fields hoeft te declareren) bestaan trouwens pas sinds .NET 3.5
Waarom heb je er voor gekozen om de methods static te maken?quote:
Was mij inderdaad nog niet opgevallen. Het is inderdaad niet gebruikelijk, maar kan prima. Probleem is alleen dat wanneer je dan specifieke methodes die statefull zijn voor een class krijgt je instance methods en statics gaat mixen.quote:Op zondag 10 augustus 2008 14:19 schreef rekenwonder het volgende:
[..]
Waarom heb je er voor gekozen om de methods static te maken?
Als een methode static kan zijn, waarom zou je het dan niet doen? Persoonlijk vind ik het handiger als ik var blaat = Blaat.load(dinges) kan doen dan dat ik var blaat = new Blaat(); blaat.load(dinges); moet doen. Sowieso was bij de meeste bedrijven en stages waar ik gelopen heb het gebruikelijk om een methode static te maken indien mogelijk... Net zoals private indien niet public nodig, en final (java) of fixed variabeles waar mogelijk.quote:Op zondag 10 augustus 2008 14:27 schreef existenz het volgende:
[..]
Was mij inderdaad nog niet opgevallen. Het is inderdaad niet gebruikelijk, maar kan prima. Probleem is alleen dat wanneer je dan specifieke methodes die statefull zijn voor een class krijgt je instance methods en statics gaat mixen.
Je weet dat k's niets zegt over een goed programmaquote:Op zondag 10 augustus 2008 14:35 schreef PiRANiA het volgende:
Ik ben nu bezig met een crawler om een lijst domeinnamen te verkrijgen voor een project van me (php cli ftw).
Heb er inmiddels 19k
Vanuit de bedrijven waar ik werk (Ik doe detachering) is static niet echt gebruikelijk om iets static te maken omdat het kan. Het moet echt een reden en voordeel hebben, statics zijn namelijk niet statefull, vele malen minder flexibel etc. Ik heb al te vaak applicaties moeten "destaticen", omdat er aanpassingen gedaan moesten worden of state problemen waren, waar de mensen niet uit kwamen.quote:Op zondag 10 augustus 2008 22:47 schreef StonedKinG het volgende:
[..]
Als een methode static kan zijn, waarom zou je het dan niet doen? Persoonlijk vind ik het handiger als ik var blaat = Blaat.load(dinges) kan doen dan dat ik var blaat = new Blaat(); blaat.load(dinges); moet doen. Sowieso was bij de meeste bedrijven en stages waar ik gelopen heb het gebruikelijk om een methode static te maken indien mogelijk... Net zoals private indien niet public nodig, en final (java) of fixed variabeles waar mogelijk.
Nja ik gebruik static ook eigelijk alleen maar bij van die "tool" methoden, zoals een bepaald algoritme uitvoeren op iets, of zoals nu een simpel objectje laden ofzo. Voordeel van static methoden vind ik vooral dat je ze makkelijk in andere software kunt gebruiken. Gaat dus inderdaad vaak om helper methods.quote:Op zondag 10 augustus 2008 22:59 schreef existenz het volgende:
[..]
Vanuit de bedrijven waar ik werk (Ik doe detachering) is static niet echt gebruikelijk om iets static te maken omdat het kan. Het moet echt een reden en voordeel hebben, statics zijn namelijk niet statefull, vele malen minder flexibel etc. Ik heb al te vaak applicaties moeten "destaticen", omdat er aanpassingen gedaan moesten worden of state problemen waren, waar de mensen niet uit kwamen.
Het is niet slecht, maar je moet wel verdomd goed opletten wat je aan het doen bent. Voordat je het weet is je hele applicatie static en dat geeft 100% zeker problemen.
Zelfde soort probleem als mij dusquote:Op maandag 11 augustus 2008 08:38 schreef Slarioux het volgende:
Krijg foutmeldingen bij de Whatpulse topic. Server geeft een 500 error, maar nergens een fout te bekennen. Straks maar eens naar een file gaan loggen.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |