abonnement Unibet Coolblue Bitvavo
pi_55604624
Als er dan toch een Perl topic is dan denk ik er toch maar aan om eens een echte mannentaal te introduceren hier op FOK!

Python! Het geestekindje van Guido van Rossum.

Wie gebruiken Python?
- Google, een groot deel van de spiders van Google en hun applicaties zijn in Python geschreven.
- Yahoo!Maps
- Battlefield 2
- Civilization 4
- ABN Amro
- Blender 3D
- Paintshop Pro
- NASA
- Ubuntu
Deze lijst gaat eindeloos door, lees meer op: http://wiki.python.org/moin/OrganizationsUsingPython

Wat is Python?
Python is een scripting taal die zeer leesbaar is, zeer platform onafhankelijk (van je pc tot je mac tot je mobiele telefoon tot je PSP) en ook zeer snel.

Python Links?
http://www.python.org/
http://www.python.org/doc/Intros.html

Python op het web?
http://www.djangoproject.com/

Nog meer vragen? Stel ze gerust Ik zal hier binnenkort ook wat code neerzetten. Ik vraag me gewoon af of veel mensen op FOK! ook daadwerkelijk wat doen met Python.

Een voorbeeld Python script om vanaf command line fahrenheit in celsius om te zetten:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/local/bin/python
import string, sys

# If no arguments were given, print a helpful message
if len( sys.argv ) == 1:
    print 'Usage: celsius temp1 temp2 ...'
    sys.exit( 0 )

# Loop over the arguments
for i in sys.argv[ 1: ]:
    try: 
        fahrenheit = float( string.atoi( i ) )
    except string.atoi_error:
   print repr( i ), "not a numeric value"
    else:
   celsius = ( fahrenheit - 32 ) * 5.0 /9.0
   print '%i\260F = %i\260C' % ( int( fahrenheit ), int( celsius+.5 ) )


Deze OP en instructies voor nieuw topic: http://wiki.fok.nl/index.php/OP/Python
Mocht je een link vinden die zeker in de OP hoort, twijfel niet en zet hem erbij!

[ Bericht 17% gewijzigd door WyriHaximus op 28-12-2007 23:09:39 ]
  vrijdag 28 december 2007 @ 17:45:51 #2
8076 JeOma
voor al uw recepten
pi_55605248
Scripting is voor mietjes.
Zo'n 100 miljoen jaar geleden leefde in het drassig park dat wij thans als Holland kennen een groep dinosaurussen die echt wreed uit hun dak gingen! DE GABBERSAURUS!!
pi_55605265
quote:
Op vrijdag 28 december 2007 17:16 schreef colourAgga het volgende:
Nog meer vragen? Stel ze gerust Ik zal hier binnenkort ook wat code neerzetten. Ik vraag me gewoon af of veel mensen op FOK! ook daadwerkelijk wat doen met Python.
Ik zit te denken om Python te gaan leren voor m'n bladelogic tools suite, aangezien ze een python API hebben. Maar aangezien ze ook een shell API hebben, ben ik me eerst daarop gaan focussen.
In theory there is no difference between theory and practice. In practice there is.
  vrijdag 28 december 2007 @ 17:58:05 #4
35325 shi
elegance in simplicity
pi_55605535
python ftw
idiots will be shot, survivors will be shot...again.
pi_55605596
quote:
<Sonium> someone speak python here?
<lucky> HHHHHSSSSSHSSS
<lucky> SSSSS
<Sonium> the programming language
.
-
pi_55606492
quote:
Op vrijdag 28 december 2007 17:45 schreef JeOma het volgende:
Scripting is voor mietjes.
Als jij de voordelen van scriptingtalen niet inziet
pi_55606732
Ik heb python op mjin mobieltje staan en op mijn pc gebruik ik nicotine, een soulseek client die helemaal in python is geschreven, maar ik kan niet zeggen dat ik er zelf echt al wat mee gedaan heb, al moet het wel een coole taal zijn.... alleen die indenting om blokken aan te geven... brr.
pi_55607497
Moet je echt indenten voor die if/else statements? Lijkt me eerder een voorkeur van de coder.. Haha, het wordt echt afgedwongen door de compiler/taal...
  vrijdag 28 december 2007 @ 19:56:06 #9
8076 JeOma
voor al uw recepten
pi_55608075
quote:
Op vrijdag 28 december 2007 19:28 schreef slakkie het volgende:
Moet je echt indenten voor die if/else statements? Lijkt me eerder een voorkeur van de coder.. Haha, het wordt echt afgedwongen door de compiler/taal...
Ik dacht dat alleen COBOL dat had, haha.

Enne, ik zie wel de voordelen van scripting. Maar het is gewoon voor mietjes. Vind ik.
Zo'n 100 miljoen jaar geleden leefde in het drassig park dat wij thans als Holland kennen een groep dinosaurussen die echt wreed uit hun dak gingen! DE GABBERSAURUS!!
pi_55611723
quote:
Op vrijdag 28 december 2007 19:28 schreef slakkie het volgende:
Moet je echt indenten voor die if/else statements? Lijkt me eerder een voorkeur van de coder.. Haha, het wordt echt afgedwongen door de compiler/taal...
Ja, moet Zorgt ook voor wat nettere code, vergeten te indenten of niet correct indenten geeft een parse error
  vrijdag 28 december 2007 @ 22:59:04 #11
176873 marcel-o
ŻŻŻŻŻŻŻŻŻŻŻŻ
pi_55612794
TijdVoorPython

[ Bericht 1% gewijzigd door marcel-o op 28-12-2007 23:27:02 ]
| Wordfeud: marcel-o |plug.dj/uptempo |&lt;-- draai zelf je platen
pi_55612855
Hoe werkt die indentation precies? Maakt het uit hoeveel spaties/tabs je gebruikt? Klopt het voorbeeld dan wel?
Waarom maak je van een string een integer, en daarna een float? En waarom gebruik je depricated method(s)?

Zomaar een paar vraagjes, ik weet niets van Python
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  vrijdag 28 december 2007 @ 23:11:55 #13
84926 WyriHaximus
Release the hounds smithers!
pi_55613125
Heb ff de OP op de Fok!Wiki gezet en dat ook gelijk ff in de OP aangepast .
phluphy for president!
  vrijdag 28 december 2007 @ 23:50:36 #14
176873 marcel-o
ŻŻŻŻŻŻŻŻŻŻŻŻ
pi_55614256
hier een NL tutorial http://www.coolpython.nl/tutorials/tut/
als de goldstrike is uitgewerkt is, ga ik die eens doornemen

miss. iets voor in de OP?
| Wordfeud: marcel-o |plug.dj/uptempo |&lt;-- draai zelf je platen
pi_55772681
Ben er zelf ook sinds kort mee begonnen. Vind zelf 'Beginning Python: From novice to professional' een erg fijn boek. Ook ben ik begonnen met Django. Er is lastig hosting voor te vinden, dus ben er nu mee bezig op mijn eigen Ubuntu servertje.

M.i de voordelen van Python: goed gestructureerd, leesbaar, snel voor een scripttaal, veel librairies, grote community, volledig object georienteerd en bovendien met een Nederlander als geestelijk vader.
  vrijdag 4 januari 2008 @ 15:36:44 #16
30719 keesjeislief
NextGenerationHippie
pi_55773223
Python rocks . Helaas heb ik (ben geen IT-er) er al een tijdje weinig meer mee gedaan, maar toen ik er destijds mee bezig was vond ik het een heerlijk intuïtieve taal, met talloze geavanceerdere functies al ingebouwd in de standaard library. De vertaalslag van de structuur in je hoofd naar code is verrassend simpel, géén verplichte vage technische toeters en bellen of contra-intuïtieve constructies zoals in Java en C++/C. En de grap is dat het desondanks niet aan mogelijkheden inlevert t.o.v. deze talen (misschien heeft Java meer out there aan frameworks & add-ons). De gemiddelde Java-code heeft een equivalent in Python-code die 10 maal minder regels bevat .

Met het gebruik van indenting om blokken aan te geven heb ik persoonlijk absoluut geen probleem, ik gebruik het ook zoveel mogelijk in andere talen, bevordert m.i. alleen maar de leesbaarheid en het overzicht.
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
  maandag 7 januari 2008 @ 16:48:56 #17
65490 whoops
Home is where the heart is...
pi_55851442
Ik ben sinds een week of twee bezig met het bestuderen van het boek Python Power (The Comprehensive Guide) door Matt Teller.

Mijn eerste indruk is erg goed, de taal komt er intuïtief over, en ik hoop dat ik d.m.v. Python eindelijk object oriented programming goed onder de knie krijg...

Die IDLE editor is ook nice, je probeert je snippets gewoon rechtstreeks in de compiler, en dan zet je ze later om in scripts. Ideaal. Helaas ziet IDLE er erg 1995 uit op een Linux machine, maar dat heeft met Tcl/Tk te maken, het schijnt dat de nieuwe release (8.5) er stukken beter uitziet.
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
  maandag 7 januari 2008 @ 18:09:37 #18
30719 keesjeislief
NextGenerationHippie
pi_55853255
Afgelopen weekend heb ik me wat zitten verdiepen in Dabo (www.dabodev.com), een "3-tier framework" dat je kunt importeren in je code (is zelf ook geschreven in Python) en een wrapper vormt om wxPython en een aantal database backends. Het idee is dat je daarmee makkelijker desktop progjes kunt bouwen compleet met GUI en achterliggende database. Ik ben er behoorlijk enthousiast over . Ik weet niet of jullie het met me eens zijn, maar ik vind wxPython een hel. Het produceert een zeer complete en mooie (native) GUI, maar het progranmmeren is rampzalig, wxPython is een vrij dunne wrapper om de wxWidgets code die in C++ is geschreven (is misschien makkelijker als je meer (C++-)ervaring hebt hoor). Wat ik ervan gezien heb, ziet de interface die Dabo beschikbaar stelt er véle malen intuïtiever en makkelijker uit voor iemand die Python gewend is. Verder zijn de drie lagen (database backend, business rules, GUI) natuurlijk op zo'n manier opgezet dat je een hoop standaardwerk wat betreft de communicatie tussen deze drie uit handen wordt genomen.

Op het moment is de 0.8 release uit en het is allemaal nog gedeeltelijk in het opbouwstadium, maar er lijkt zich al een redelijke gerbuikersgroep gevormd te hebben. Het lijkt geknipt voor een progje wat ik al een tijd geleden eens beloofd heb om te maken, ik hoop daar binnenkort eens echt aan te kunnen beginnen en Dabo te kunnen gebruiken .
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
  maandag 7 januari 2008 @ 18:10:37 #19
65490 whoops
Home is where the heart is...
pi_55853277
Btw. aangezien ik de built-in theme van de IDLE editor veel te licht vond heb ik deze aangepast, dit is het resultaat:

Voor:


Na:


Hij is gebaseerd op de 'Desert' theme van jEdit.

Deze settings worden opgeslagen in het bestand ~/.idlerc/config-highlight.cfg onder linux en (volgens mij) in c:\.idlerc\config-highlight.cfg onder Windows.

De inhoud van config-highlight.cfg
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
[desert]
keyword-background = #333333
definition-foreground = #98fb98
error-foreground = #ff0000
string-background = #333333
keyword-foreground = #cc4e00
comment-background = #333333
hit-foreground = #ffffff
builtin-background = #333333
hilite-foreground = #000000
stdout-foreground = #eeeeee
cursor-foreground = #ffcc00
break-background = #ffff55
comment-foreground = #87ceeb
hilite-background = #666666
definition-background = #333333
stderr-background = #333333
hit-background = #333333
console-foreground = #87ceeb
normal-background = #333333
builtin-foreground = #519e51
stdout-background = #333333
console-background = #333333
stderr-foreground = #ff8800
normal-foreground = #f0e68c
string-foreground = #ffa0a0
break-foreground = black
error-background = #000000
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
  maandag 7 januari 2008 @ 18:14:05 #20
65490 whoops
Home is where the heart is...
pi_55853371
quote:
Op maandag 7 januari 2008 18:09 schreef keesjeislief het volgende:
www.dabodev.com
Die staat in de m'n bookmarks! Het ziet er zeker erg interessant uit!
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
  dinsdag 15 januari 2008 @ 00:47:09 #21
65490 whoops
Home is where the heart is...
pi_56039315
Ik heb iets raars met de IDLE editor onder Ubuntu. Als ik heb vanuit het menu opstart krijg ik voor de prompt de volgende melding (zie ook bovenstaande screenshot):
quote:
IDLE 1.2.1 ==== No Subprocess ====
en is het menuitem 'Shell' niet aanwezig. Niet handig, want het restarten van de shell (Ctrl-F6) werkt dan ook niet meer...

Als ik hem vanaf de terminal opstart, of via Alt-F2 (start-run equiv. in Gnome), krijg ik de melding van het subprocess niet, en is de Shell optie ook aanwezig.

Heeft iemand een idee waar dit aan zou kunnen liggen?

Ik heb het al, een kijkje in de help leverde het volgende op:
quote:
Running without a subprocess:

If IDLE is started with the -n command line switch it will run in a
single process and will not create the subprocess which runs the RPC
Python execution server. This can be useful if Python cannot create
the subprocess or the RPC socket interface on your platform. However,
in this mode user code is not isolated from IDLE itself. Also, the
environment is not restarted when Run/Run Module (F5) is selected. If
your code has been modified, you must reload() the affected modules and
re-import any specific items (e.g. from foo import baz) if the changes
are to take effect. For these reasons, it is preferable to run IDLE
with the default subprocess if at all possible.
En vanuit het menu wordt hij inderdaad met -n opgestart. Snap nogsteeds niet precies waarom je dit nodig zou hebben maar dat wordt vast nog wel duidelijk.

[ Bericht 25% gewijzigd door whoops op 15-01-2008 00:53:00 ]
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_56042995
quote:
Op vrijdag 28 december 2007 17:45 schreef JeOma het volgende:
Scripting is voor mietjes.
Juist ja. Perl wordt toch ook gebruikt als scripttaal? Is PHP ook voor mietjes? En Python kan ook gecompileerde programma's afleveren...
Beetje goedkope reactie JeOma.


Het indenten van Python werkt zeer fijn, je hoeft niet meer te letten op { en } of ermee te rotzooien, en het maakt de code een stuk leesbaarder. Python probeert geen dikke soep te zijn qua leesbaarheid, dat staat me wel aan. Perl lijkt echter zijn best te doen om maar niet leesbaar te zijn...
EVE-Online is overigens ook geschreven in Python. Als je beginnend programmeur bent dan is Python Echt de beste optie, het is op zijn minst de beste manier om in de wereld van programmeertalen te stappen en om het 'idee' te leren.
pi_56043209
quote:
Op dinsdag 15 januari 2008 10:21 schreef sentiao. het volgende:

[..]

Het indenten van Python werkt zeer fijn, je hoeft niet meer te letten op { en } of ermee te rotzooien, en het maakt de code een stuk leesbaarder. Python probeert geen dikke soep te zijn qua leesbaarheid, dat staat me wel aan. Perl lijkt echter zijn best te doen om maar niet leesbaar te zijn...
Ik ben het juist niet eens met je stelling dat python-code leesbaarder is. Ik vind perl veel leesbaarder, omdat het net iets systematischer is opgebouwd. Je herkent variabelen en arrays, je herkent counters beter, je ziet meteen wanneer welke loop afgelopen is.

Verder vind ik dat je door Python zeer 'lui' wordt, omdat het zoveel accepteert en zo vergevend is. Als je vervolgens Perl gebruikt (een taal die qua gecompliceerdheid misschien nog wel minder is dan python), voor bijvoorbeeld Regex (ja sorry daarvoor is Perl echt 100x beter dan python), moet je weer helemaal inkomen in het 'scriptgevoel', dus netjes de {, } en ; gebruiken.
pi_56044464
quote:
Op dinsdag 15 januari 2008 10:34 schreef Stranger het volgende:

[..]

Ik ben het juist niet eens met je stelling dat python-code leesbaarder is. Ik vind perl veel leesbaarder, omdat het net iets systematischer is opgebouwd. Je herkent variabelen en arrays, je herkent counters beter, je ziet meteen wanneer welke loop afgelopen is.

Verder vind ik dat je door Python zeer 'lui' wordt, omdat het zoveel accepteert en zo vergevend is. Als je vervolgens Perl gebruikt (een taal die qua gecompliceerdheid misschien nog wel minder is dan python), voor bijvoorbeeld Regex (ja sorry daarvoor is Perl echt 100x beter dan python), moet je weer helemaal inkomen in het 'scriptgevoel', dus netjes de {, } en ; gebruiken.
Ik vind het maar moeilijk, een keuze maken. Ik werk momenteel met C# (laat me a.u.b. heel =]) dus ik ben momenteel gewend aan de eindeloze ; en { en }. Welke taal is krachtiger?
  dinsdag 15 januari 2008 @ 23:34:56 #25
30719 keesjeislief
NextGenerationHippie
pi_56061924
quote:
Op dinsdag 15 januari 2008 10:34 schreef Stranger het volgende:

[..]

Ik ben het juist niet eens met je stelling dat python-code leesbaarder is. Ik vind perl veel leesbaarder, omdat het net iets systematischer is opgebouwd. Je herkent variabelen en arrays, je herkent counters beter, je ziet meteen wanneer welke loop afgelopen is.
Ieder z'n mening natuurlijk, maar er zijn maar érg weinig mensen die het met je eens zijn. Geef eens een codevoorbeeld van beide talen waarbij jij Perl leesbaarder vindt?
quote:
Verder vind ik dat je door Python zeer 'lui' wordt, omdat het zoveel accepteert en zo vergevend is. Als je vervolgens Perl gebruikt (een taal die qua gecompliceerdheid misschien nog wel minder is dan python), voor bijvoorbeeld Regex (ja sorry daarvoor is Perl echt 100x beter dan python), moet je weer helemaal inkomen in het 'scriptgevoel', dus netjes de {, } en ; gebruiken.
Jaja. Waarom geen assembly dan? Tik jij je teksten ook nog op een typemachine met de typex binnen handbereik omdat je van een computer zo lui wordt met al die comfortabele knoppen zoals backspace? Oftewel, als er een taal beschikbaar is waarmee je zoveel intuïtiever en leesbaarder tot je doel kunt komen, en die je ook nog eens niet lastigvalt met allerlei overbodig tikwerk om je in principe al werkende code in een of ander afgedwongen stringent jasje te krijgen ("zoveel accepteert en zo vergevend is"), waarom zou je dan überhaupt nog denken aan teruggaan?
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
  dinsdag 15 januari 2008 @ 23:46:41 #26
30719 keesjeislief
NextGenerationHippie
pi_56062268
quote:
Op dinsdag 15 januari 2008 11:30 schreef sentiao. het volgende:

[..]

Ik vind het maar moeilijk, een keuze maken. Ik werk momenteel met C# (laat me a.u.b. heel =]) dus ik ben momenteel gewend aan de eindeloze ; en { en }. Welke taal is krachtiger?
Ik ben niet bekend met C# moet ik je zeggen. Maar ik zou me niet zo druk maken als ik jou was. De tendens de laatste jaren is een shift richting een nieuwe generatie talen zoals Python en Ruby. Daar zijn een hele berg uitstekende redenen voor, waarbij de rode draad is het gebruikersgemak (je schrijft bijna pseudo-code) in combinatie met de grote kracht van de talen qua mogelijkheden. Mocht je dan tegen iets aanlopen wat je toch liever in een andere taal schrijft, om wat voor reden dan ook, dan is dit geruststellend om te weten:
quote:
Python plays well with others

Python can integrate with COM, .NET, and CORBA objects.

For Java libraries, use Jython, an implementation of Python for the Java Virtual Machine.

For .NET, try IronPython , Microsoft's new implementation of Python for .NET, or Python for .NET.

Python is also supported for the Internet Communications Engine (ICE) and many other integration technologies.

If you find something that Python cannot do, or if you need the performance advantage of low-level code, you can write extension modules in C or C++, or wrap existing code with SWIG or Boost.Python. Wrapped modules appear to your program exactly like native Python code. That's language integration made easy. You can also go the opposite route and embed Python in your own application, providing your users with a language they'll enjoy using.
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
pi_56066985
Een taal die geschikt is voor zowel beginners als experts, prachtig .

Maar hoe zit het met de scene (*engels uitspreken) van Python? Perl is haast een religie geworden, en ook dat is wat ik zoek in een taal.

[speculatief] Als ik het uberhaubt zou doen dan zou ik liever een t-shirt dragen met een stukje Perl code dan met een stukje Python code erop, ik vraag me uberhaubt af of je goed kan zien dat het Python code is (door de pseudo-code-heid). [/speculatief] Snappen jullie wat ik bedoel?

Uiteraard lachen we Perl programmeurs weer uit zodra de pauze om is en we weer aan het werk moeten .
pi_56069820
Voordat ik deze taal ga leren, wil ik weten hoe ik mijn programmatje/scriptje kan laten draaien op een andere computer. Compilen is dat toch? Hoe doe ik dat?
  woensdag 16 januari 2008 @ 12:37:04 #29
187069 slacker_nl
Sicko pur sang
pi_56070398
quote:
Op woensdag 16 januari 2008 12:11 schreef FastFox91 het volgende:
Voordat ik deze taal ga leren, wil ik weten hoe ik mijn programmatje/scriptje kan laten draaien op een andere computer. Compilen is dat toch? Hoe doe ik dat?
Ik zou eens hier kijken:
http://docs.python.org/tut/tut.html
In theory there is no difference between theory and practice. In practice there is.
  woensdag 16 januari 2008 @ 13:50:48 #30
65490 whoops
Home is where the heart is...
pi_56072451
quote:
Op woensdag 16 januari 2008 12:11 schreef FastFox91 het volgende:
Voordat ik deze taal ga leren, wil ik weten hoe ik mijn programmatje/scriptje kan laten draaien op een andere computer. Compilen is dat toch? Hoe doe ik dat?
Python kan compilen, maar over het algemeen worden de scripts geinterpreteerd en dan uitgevoerd. Je kan de scripts dus ongewijzigd draaien, op elk OS dat Python ondersteunt. En dat zijn er erg veel.
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_56073661
quote:
Op woensdag 16 januari 2008 13:50 schreef whoops het volgende:

[..]

Python kan compilen, maar over het algemeen worden de scripts geinterpreteerd en dan uitgevoerd. Je kan de scripts dus ongewijzigd draaien, op elk OS dat Python ondersteunt. En dat zijn er erg veel.
Helaas Windows niet, toch?
  woensdag 16 januari 2008 @ 15:54:26 #32
187069 slacker_nl
Sicko pur sang
pi_56075717
Lijkt me dat als MS een Phython voor .Net kent dat het ook onder Windows draait... En zie hier: http://www.python.org/download/windows/
In theory there is no difference between theory and practice. In practice there is.
  woensdag 16 januari 2008 @ 16:32:01 #33
30719 keesjeislief
NextGenerationHippie
pi_56076756
quote:
Op woensdag 16 januari 2008 12:11 schreef FastFox91 het volgende:
Voordat ik deze taal ga leren, wil ik weten hoe ik mijn programmatje/scriptje kan laten draaien op een andere computer. Compilen is dat toch? Hoe doe ik dat?
Python werkt, net als Java en talen op .NET etc., met een virtual machine. Je code (bla.py) wordt in een eerste vertaalslag omgezet naar bytecode (bla.pyc) die door die virtual machine gerund kan worden (vergelijkbaar met compilen van C-code naar low-level instructies die 'direct' door een OS gerund kan worden). De volgende keer dat je het programma runt wordt, als je niets aan de oorspronkelijke code hebt veranderd, deze eerste stap overgeslagen en meteen de bytecode aan de VM gevoerd.
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
  woensdag 16 januari 2008 @ 16:35:52 #34
30719 keesjeislief
NextGenerationHippie
pi_56076846
quote:
Op woensdag 16 januari 2008 14:36 schreef sentiao. het volgende:

[..]

Helaas Windows niet, toch?
Tuurlijk wel, hoe kom je daar nou bij? . Van python.org:
quote:
Python runs everywhere

Python is available for all major operating systems: Windows, Linux/Unix, OS/2, Mac, Amiga, among others. There are even versions that runs on .NET, the Java virtual machine, and Nokia Series 60 cell phones. You'll be pleased to know that the same source code will run unchanged across all implementations.

Your favorite system isn't listed here? It may still support Python if there's a C compiler for it. Ask around on news:comp.lang.python - or just try compiling Python yourself.
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
pi_56099571
Ik vind Python een heerlijke taal, ben nu bezig met een beginnetje maken binnen het OOP (Object Oriented Programming) en dan nu met name de inheritance van klassen, erg leuk
pi_56385461
quote:
Op vrijdag 28 december 2007 22:59 schreef marcel-o het volgende:
TijdVoorPython
  donderdag 15 mei 2008 @ 11:59:02 #37
187069 slacker_nl
Sicko pur sang
pi_58682038
Even een kick, aangezien ik nu echt actief ben begonnen met Python..
In theory there is no difference between theory and practice. In practice there is.
  woensdag 4 juni 2008 @ 19:15:28 #38
73006 PaRaR
Geboren en getogen
pi_59124308
Probleempje: Ik probeer MySQL in Python 2.5 te krijgen(module stijl). Ik krijg het echter niet voor mekaar om dit simpel te doen terwijl ik de benodigde mysql bestanden wel heb. Heeft iemand een simpele uitleg of tutorial voor dit probleem ? Hoe krijg ik MySQL aan de praat met Python 2.5 in Windows ?
pi_59124399
http://sourceforge.net/projects/mysql-python

Google: mysql python windows

Good luck.
pi_59146400
TVP, ga beginnen met python omdat mijn nieuwe N95-8gb morgen binnenkomt. Je kunt heel mooi Python gebruiken om op de S60 chipset 3rd edition van Nokia te programmeren.
"Reality is an illusion created by a lack of alcohol."
  donderdag 5 juni 2008 @ 15:26:37 #41
69357 R-Mon
jong en dynamisch
pi_59146645
Ooit mee gespeeld [Python] voor dummies
&lt;tsjsieb&gt; maarja, jij bent ook gewoon cool R-Mon :p
  dinsdag 10 juni 2008 @ 23:33:14 #42
73006 PaRaR
Geboren en getogen
pi_59293641
quote:
Op woensdag 4 juni 2008 19:18 schreef slakkie het volgende:
http://sourceforge.net/projects/mysql-python

Google: mysql python windows

Good luck.
Bedankt voor je reactie. Ik heb alles al bekeken en geprobeerd, maar het lijkt ongelijk mysql met python te verbinden op een of andere manier. Zijn er toevallig ook complete installatie pakketten die python en mysql installeren op windows ?

Alvast bedankt!
pi_59293912
quote:
Op dinsdag 10 juni 2008 23:33 schreef PaRaR het volgende:

[..]

Bedankt voor je reactie. Ik heb alles al bekeken en geprobeerd, maar het lijkt ongelijk mysql met python te verbinden op een of andere manier. Zijn er toevallig ook complete installatie pakketten die python en mysql installeren op windows ?

Alvast bedankt!
Met "het lukt niet" ("het lijkt ongelijk"?? ) kom je er niet. Als iets niet lukt dan vermeld je wat er precies niet lukt en welke foutmelding(en) je krijgt, wat je allemaal precies geprobeerd hebt om het wel te laten lukken, en waar je vastloopt. Misschien kunnen we dan helpen. Nu niet.
  dinsdag 10 juni 2008 @ 23:44:49 #44
159841 Dzy
It is I
pi_59293997
Ik ben wat dingetjes aan het uitproberen met Python voor Symbian 60 telefoons, die API gebruiken. Werkt best makkelijk en ik heb zelfs een redelijke python IDE op m'n N95 zelf.
"Reality is an illusion created by a lack of alcohol."
  woensdag 11 juni 2008 @ 14:01:05 #45
65490 whoops
Home is where the heart is...
pi_59304500
quote:
Op dinsdag 10 juni 2008 23:44 schreef Dzy het volgende:
Ik ben wat dingetjes aan het uitproberen met Python voor Symbian 60 telefoons, die API gebruiken. Werkt best makkelijk en ik heb zelfs een redelijke python IDE op m'n N95 zelf.
Klinkt interessant... Welke IDE is dat dan? Ik heb alleen de Python runtime en shell (standaard Python install) op m'n S60 telefoon (Nokia E50)...
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
pi_59306684
http://masteranza.wordpre(...)hon-on-mobile-s60v3/

PED is de IDE, werkt best redelijk. Alleen blijft het kut als je op het T9 tobo moet typen dus een bluetooth tobo is wel aan te raden
"Reality is an illusion created by a lack of alcohol."
  woensdag 11 juni 2008 @ 17:22:04 #47
65490 whoops
Home is where the heart is...
pi_59310395
quote:
Op woensdag 11 juni 2008 15:14 schreef Dzy het volgende:
http://masteranza.wordpre(...)hon-on-mobile-s60v3/

PED is de IDE, werkt best redelijk. Alleen blijft het kut als je op het T9 tobo moet typen dus een bluetooth tobo is wel aan te raden
Oke, dit ziet er wel nice uit... Het lijkt me inderdaad niet handig om complete apps mee te schrijven, maar het is wel mooi om even wat mee te experimenteren...
In the beginning, the universe was created. This made a lot of people very angry and has been widely regarded as a bad move.
  woensdag 11 juni 2008 @ 19:41:55 #48
73006 PaRaR
Geboren en getogen
pi_59314307
quote:
Op dinsdag 10 juni 2008 23:41 schreef Farenji het volgende:

[..]

Met "het lukt niet" ("het lijkt ongelijk"?? ) kom je er niet. Als iets niet lukt dan vermeld je wat er precies niet lukt en welke foutmelding(en) je krijgt, wat je allemaal precies geprobeerd hebt om het wel te laten lukken, en waar je vastloopt. Misschien kunnen we dan helpen. Nu niet.
Het implementeren van de mysql for python2.5 module. Hoe krijg ik dat voor mekaar?
pi_59314538
quote:
Op woensdag 11 juni 2008 17:22 schreef whoops het volgende:

[..]

Oke, dit ziet er wel nice uit... Het lijkt me inderdaad niet handig om complete apps mee te schrijven, maar het is wel mooi om even wat mee te experimenteren...
Precies
"Reality is an illusion created by a lack of alcohol."
  zaterdag 14 juni 2008 @ 23:33:46 #50
73006 PaRaR
Geboren en getogen
pi_59397756
Nouja, ik heb het voor mekaar. Nu zit ik met het volgende probleem(alhoewel ik niet zeker weet of het een Python probleem is): Het script runt goed, geen fouten. Hij moet alleen data verwerken in een tabel. Dit gebeurt echt niet. Ik krijg geen enkele foutmelding. Heeft een van jullie een idee hoe ik er achter kan komen wat de fout kan zijn mbt database instellingen/firewall of iets anders? Ik zie ook niks in mijn mysql log, hoe kan dit nou?
  zondag 22 juni 2008 @ 12:06:35 #51
19840 Libris
Live from Singapore
pi_59599971
Heb je wat code?

Tevens Schopje
pi_59601418
Het is officieel: Python is kut.

Ik was net heel even aan het spelen met dit stukje code: Wat devven we vandaag? Deel 2
Gewoon een copy/paste, en toen wilde ik even een regeltje toevoegen. Kreeg ik deze foutmelding:

1IndentationError: unindent does not match any outer indentation level


Probleem was dus dat de indents in de code uit 4 spaties bestonden, en de indent die mijn editor toevoegde uit een tab bestond, die toevallig hetzelfde eruitziet als 4 spaties. En daar verslikt python zich blijkbaar al in. :r

Ik heb die indentation die bepalend is voor syntax en werking van je programma altijd al een Slecht Idee gevonden en nu weet ik het zeker. Ik zie de problemen al voor me als je met meerdere mensen en verschillende editors aan dezelfde code werkt, wat een nachtmerrie gaat dat worden. Voor mij geen python, er is voor mij sowieso geen reden om daar tijd aan te verliezen, ik hou het wel gewoon bij perl. Veel beter.
pi_59611217
Moet zeggen dat ik wel onder de indruk ben van python. Vind het wel een prettige taal om in te proggen (lekkerder dan PHP bijv.). De indentation is vooral in het begin wennen, maar dat is een kwestie van tijd.

Als je met python werkt weet je dat je indentation cruciaal is voor de uitvoer en moet je gewoon een goede editor pakken zodat je je geen zorgen hoeft te maken over het editten van .py files.. Ik heb er zelf geen problemen mee gehad, wellicht omdat mijn tab/shiftwidth onder vim hetzelfde zijn als Python voorschrijft. Geen problemen mee dus.
In de interactieve python shell vind ik het bij vlagen irritant.

Python
  maandag 23 juni 2008 @ 13:40:00 #54
19840 Libris
Live from Singapore
pi_59624774
quote:
Op zondag 22 juni 2008 21:23 schreef slakkie het volgende:
Moet zeggen dat ik wel onder de indruk ben van python. Vind het wel een prettige taal om in te proggen (lekkerder dan PHP bijv.). De indentation is vooral in het begin wennen, maar dat is een kwestie van tijd.

Als je met python werkt weet je dat je indentation cruciaal is voor de uitvoer en moet je gewoon een goede editor pakken zodat je je geen zorgen hoeft te maken over het editten van .py files.. Ik heb er zelf geen problemen mee gehad, wellicht omdat mijn tab/shiftwidth onder vim hetzelfde zijn als Python voorschrijft. Geen problemen mee dus.
In de interactieve python shell vind ik het bij vlagen irritant.

[ afbeelding ] Python [ afbeelding ]
Ik heb collega's die die shell vaak gebruiken, ik kan er ook niet mee werken. Ik snap niet wat de voordelen zijn ten opzichte can een normale editor (zoals Eclipse), of zelfs notepad.
  maandag 23 juni 2008 @ 13:59:52 #55
147503 Iblis
aequat omnis cinis
pi_59625242
quote:
Op zondag 22 juni 2008 13:00 schreef Farenji het volgende:
Probleem was dus dat de indents in de code uit 4 spaties bestonden, en de indent die mijn editor toevoegde uit een tab bestond, die toevallig hetzelfde eruitziet als 4 spaties. En daar verslikt python zich blijkbaar al in.
Of 8 spaties. Dat hangt van je editor af. Of twee spaties. Of 3. Onder Unix is de standaard 8 spaties. Het wordt sterk afgeraden om spaties en tabs door elkaar te gebruiken, en dat geldt niet alleen voor Python (waar het errors geeft) maar ook voor C of Perl. Als jij je file netjes hebt opgemaakt, met 8 spaties voor een tab en omgekeerd, maar de tabs en spaties door elkaar gebruikt dan krijgt iemand anders die het bestand opent een chaos te zien. Kortom, een editor die spaties en tabs zo door elkaar gebruikt is een Slecht Idee.

Pythons manual zegt dan ook:
quote:
Cross-platform compatibility note: because of the nature of text editors on non-UNIX platforms, it is unwise to use a mixture of spaces and tabs for the indentation in a single source file. It should also be noted that different platforms may explicitly limit the maximum indentation level.
quote:
Ik heb die indentation die bepalend is voor syntax en werking van je programma altijd al een Slecht Idee gevonden en nu weet ik het zeker. Ik zie de problemen al voor me als je met meerdere mensen en verschillende editors aan dezelfde code werkt, wat een nachtmerrie gaat dat worden. Voor mij geen python, er is voor mij sowieso geen reden om daar tijd aan te verliezen, ik hou het wel gewoon bij perl. Veel beter.
Zoals gezegd, je krijgt dezelfde problemen in willekeurig welke taal als het om onderhoud van je source gaat. Als je met een groep samenwerkt en er wordt geen afspraak gemaakt over tab/spaties dan krijg je, ongeacht welke taal je gebruikt, ontzettend lelijke source-code doordat vroeg of laat iemand spaties door tabs gaat vervangen of omgekeerd.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  maandag 23 juni 2008 @ 14:02:59 #56
187069 slacker_nl
Sicko pur sang
pi_59625333
quote:
Op maandag 23 juni 2008 13:40 schreef Libris het volgende:

[..]

Ik heb collega's die die shell vaak gebruiken, ik kan er ook niet mee werken. Ik snap niet wat de voordelen zijn ten opzichte can een normale editor (zoals Eclipse), of zelfs notepad.
Voordeel is dat je snel een functie kan prototypen enzo. ff kijken of dit en dit zo werkt. heb hem zelf altijd open om help(func) of dir(var) te doen.
In theory there is no difference between theory and practice. In practice there is.
  maandag 23 juni 2008 @ 14:04:39 #57
147503 Iblis
aequat omnis cinis
pi_59625368
quote:
Op maandag 23 juni 2008 13:40 schreef Libris het volgende:
Ik heb collega's die die shell vaak gebruiken, ik kan er ook niet mee werken. Ik snap niet wat de voordelen zijn ten opzichte can een normale editor (zoals Eclipse), of zelfs notepad.
De Python-shell of vi? De Pythonshell heeft als voordeel dat je snel wat constructies kunt uittesten om te zien of ze werken, of je laadt een module, en je kunt met tab-completion (dat heeft de shell) even de attributen opzoeken, en snel een regeltje of constructie testen. Ik heb meestal wel een python shell open om snel iets uit te zoeken.

En wat vi betreft… dat blijft simpelweg een voorkeur, een editor als vi is heel krachtig als je ermee om kunt gaan (veel krachtiger dan Notepad bijvoorbeeld).
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  dinsdag 24 juni 2008 @ 18:18:49 #58
73006 PaRaR
Geboren en getogen
pi_59656838
quote:
Op zondag 22 juni 2008 12:06 schreef Libris het volgende:
Heb je wat code?

Tevens Schopje
Uiteraard:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
allmatches = set()
   conn = MySQLdb.connect("localhost", "root", "", "espn")
   cs = conn.cursor()
   cs.execute("SELECT match_id FROM all_match WHERE league = '%s'" % (league))
   row = cs.fetchone()
   while row != None:
      allmatches.add(row[0])
      row = cs.fetchone()

   allsql = []


conn = MySQLdb.connect("localhost", "root", "", "espn")
   cs = conn.cursor()
   for sql in allsql:
      cs.execute(sql)
   conn.close()


Dit is het stukje dat de informatie die ik krijg in m'n DB moet zetten. Uiteraard heb ik user en wachtwoord even weggehaald. Als ik het script run dan krijg ik hier geen fouten mee. Dus hij connect wel. Hij schrijft alleen niks weg. Ik ben er nog steeds niet achter wat het nou is. Heeft iemand nog slimme tips om te kijken tot hoever de uitvoer van de sql gegevens komt o.i.d. ?

Alvast bedankt mensen
  dinsdag 24 juni 2008 @ 18:24:54 #59
147503 Iblis
aequat omnis cinis
pi_59656929
quote:
Op dinsdag 24 juni 2008 18:18 schreef PaRaR het volgende:
Uiteraard:
[ code verwijderd ]

Dit is het stukje dat de informatie die ik krijg in m'n DB moet zetten. Uiteraard heb ik root en wachtwoord even weggehaald. Als ik het script run dan krijg ik hier geen fouten mee. Dus hij connect wel. Hij schrijft alleen niks weg. Ik ben er nog steeds niet achter wat het nou is. Heeft iemand nog slimme tips om te kijken tot hoever de uitvoer van de sql gegevens komt o.i.d. ?

Alvast bedankt mensen
Hoe bedoel je wegschrijven? Je zou in de loop een print kunnen zetten. Dan kun je zien hoe vaak het daar doorheen komt. Ook kun je b.v. de boel in een script zetten tot row = cs.fetchone() en dan met python -i het script draaien, waarna je de boel kunt inspecteren in de shell (kun je kijken wat row is,etc.)

Overigens is ‘while row:’ beter Python-idioom dan ‘while row != None’.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  dinsdag 24 juni 2008 @ 19:15:27 #60
187069 slacker_nl
Sicko pur sang
pi_59657858
Kan je niet beter while row = cs.fetchone(): doen?
In theory there is no difference between theory and practice. In practice there is.
  dinsdag 24 juni 2008 @ 19:36:30 #61
147503 Iblis
aequat omnis cinis
pi_59658301
quote:
Op dinsdag 24 juni 2008 19:15 schreef slacker_nl het volgende:
Kan je niet beter while row = cs.fetchone(): doen?
Nee, dat is C-idioom en werkt expres niet in Python. Het geeft een syntax error. Je kunt geen toekenning binnen een conditie doen. De reden hiervoor is dat het ten eerste een beetje obscuur is, en ten tweede vaak de bug if (x = 3) vangt terwijl je (x == 3) wilde doen. Het staat ook in de FAQ
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  dinsdag 24 juni 2008 @ 19:49:13 #62
187069 slacker_nl
Sicko pur sang
pi_59658584
Dan zou ik het zo doen:

1
2
3
4
while True:
    row = cs.fetchone()
    if row == None: break
    # do stuff


Ik vind die row = fetchone, en de while loop met de fetchone erin lelijk staan.
In theory there is no difference between theory and practice. In practice there is.
  woensdag 25 juni 2008 @ 19:21:28 #63
73006 PaRaR
Geboren en getogen
pi_59683602
quote:
Op dinsdag 24 juni 2008 18:24 schreef Iblis het volgende:

[..]

Hoe bedoel je wegschrijven? Je zou in de loop een print kunnen zetten. Dan kun je zien hoe vaak het daar doorheen komt. Ook kun je b.v. de boel in een script zetten tot row = cs.fetchone() en dan met python -i het script draaien, waarna je de boel kunt inspecteren in de shell (kun je kijken wat row is,etc.)

Overigens is ‘while row:’ beter Python-idioom dan ‘while row != None’.
Met wegschrijven bedoel ik het INSERT-en in m'n tabel. De rest van je tips ga ik nu uitproberen.
  maandag 18 augustus 2008 @ 11:51:20 #64
187069 slacker_nl
Sicko pur sang
pi_60919562
Iemand bekend met happydoc?

Ik heb een file PyCli.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env bljython

import os
import bladelogic.cli.CLI as blcli

class PyCli:

    def __init__(self):
        """Initilize a JLI connection"""
        self.jli = blcli.CLI()
        self.jli.connect()


    def cmd(self, cmd):
        """Execute a command with jli, returns a string on succes, None on failure"""
        result = self.jli.run(cmd)
        if result.success():
           return result.returnValue
        else:
            print result.getError()
            return None


Nu draai ik happydoc over deze file, maar hij geeft de docstring niet weer in de gegenereerde documentatie.. En dat moet ie wel gaan doen.. Iemand een tip cq oplossing?
In theory there is no difference between theory and practice. In practice there is.
pi_60986763
Python is best ok, maar #python wordt bewaakt door een anal opper:

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
17:27 <slacker_nl> lol
17:27 <Yhg1s> slacker_nl: please mind the rules.
17:28 <slacker_nl> Yhg1s: ?
17:28 <Yhg1s> slacker_nl: notice the topic.
17:28 <slacker_nl> lol @ no lol
17:29 <sproingie> someone's asking for it
17:29 <nopper> what for lol?
17:29 <Yhg1s> sigh.
17:29 <nopper> :D
17:29 <sproingie> Yhg1s: kids these days
17:29 <slacker_nl> ok ok, i will rofl then
17:29 <Yhg1s> slacker_nl: or you can just not type anything.
17:29 <nopper> lmao is officially supported?
17:29 <Yhg1s> no.
17:29 <slacker_nl> also an option, having a bad day?
17:29 <Yhg1s> retarded comments in general are strongly discouraged. forcefully, if necessary.
17:30 <nopper> i've to wait next release?
17:30 <Yhg1s> what we value is not the words you use, but the signal to noise ratio. Which is currently in a steep decline.
17:30 <nopper> i could have a noise-o-meter?
17:31 <slacker_nl> nopper, i want one as well
17:31 <nopper> yeah i'm waiting for Yhg1s
17:32 <slacker_nl> nopper, just say laughin out load as a tla and he will notice you
17:32 <Yhg1s> slacker_nl, nopper: or I can just ban you, if you prefer.
17:34 <slacker_nl> Yhg1s: you are having a bad day...
17:34 <Yhg1s> slacker_nl: nope.
In theory there is no difference between theory and practice. In practice there is.
  maandag 25 augustus 2008 @ 18:23:49 #66
187069 slacker_nl
Sicko pur sang
pi_61116622
Kan iemand me even helpen met het dynamisch laden van modules:

Ik wil namelijk alle files uit een directory importeren, instances aan te maken en wat stuff mee te doen:

ala:

1
2
3
4
5
for file in dir:
    # Strip .py from file
    import OSS.bladelogic.file
    k = file.file()
    k.do_stuff()
In theory there is no difference between theory and practice. In practice there is.
  maandag 25 augustus 2008 @ 19:34:16 #67
147503 Iblis
aequat omnis cinis
pi_61118631
quote:
Op maandag 25 augustus 2008 18:23 schreef slacker_nl het volgende:
Kan iemand me even helpen met het dynamisch laden van modules:

Ik wil namelijk alle files uit een directory importeren, instances aan te maken en wat stuff mee te doen:

ala:
[ code verwijderd ]
Wat je wilt gebruiken is __import__. Zie hier een proof of concept:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import os

BASE='test'
for filename in os.listdir(BASE):
    if not filename.endswith('.py'):
        continue
    filename = filename[:-3]
    # De fromlist zorgt ervoor dat je als module direct filename krijgt,
    # en niet 'BASE'. Stel dat je BASE/foo.py hebt, dan zou je zonder
    # fromlist hebben dat je mod.foo.bar moet hebben als bar een class
    # in foo is. Dit voorkomt dat. Eventueel kan het wel, maar dan moet
    # je herhaaldelijk getattr aanroepen, gebaseerd op de string BASE.filename.
    mod = __import__('%s.%s' % (BASE, filename), fromlist=filename)
    # Test is de naam van de klasse
    c = getattr(mod, 'Test')
    # Dit is de instantie
    o = c() 
    # En roep de functie aan.
    o.hello()


In de directory test heb ik een paar bestanden staan, die allemaal de volgende inhoud hebben:

1
2
3
class Test:
        def hello(self):
                print "Hello from %s." % __file__


Deze worden stuk voor stuk geladen, een instantie wordt gemaakt en hello() wordt aangeroepen. Eventueel kan dat ook dynamischer natuurlijk door middel van getattr. Ook een functie als hasattr kan je van dienst zijn. De uitvoer is nu iets als:

Hello from /home/Iblis/tmp/test/bar.pyc.
Hello from /home/Iblis/tmp/test/baz.pyc.
Hello from /home/Iblis/tmp/test/foo.pyc.
Hello from /home/Iblis/tmp/test/test.pyc.

Let dus op het probleem dat je kun hebben als je diep genest importeert, zoals OSS.bladelogic, dat je een paar keer recursief getattr moet doen, of de fromlist moet gebruiken, maar dat staat ook in de documentatie.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  maandag 25 augustus 2008 @ 19:36:52 #68
147503 Iblis
aequat omnis cinis
pi_61118694
En je kunt nog verder gaan met de IMP module waarmee je in feite je eigen definitie van __import__ zou kunnen schrijven als je dat zou willen.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_61120559
Thank you, heb er dit van gemaakt:

1
2
3
4
5
6
7
8
9
10
11
12
def load_modules(dir, module_prefix):
    for filename in os.listdir(dir):
        if not filename.endswith('.py') or not filename[0:1].isupper():
            continue

        file = filename[:-3]
        mod = __import__('%s.%s' % (module_prefix, file), fromlist=filename)
        c = getattr(mod, file)
        o = c()
        info(o)

load_modules("/home/wesleys/sbox/blpython/src/lib/OSS/bladelogic", "OSS.bladelogic")


Had het nodig om alle functies uit de verschillende klasses te printen. De info functie print de verschillende functies uit en de bijbehorende doc strings.

Overigens werkt de __import__ functie niet met jython (v2.2.1).

[ Bericht 2% gewijzigd door slakkie op 25-08-2008 20:53:54 ]
pi_61158072
quote:
Op maandag 25 augustus 2008 20:37 schreef slakkie het volgende:
Overigens werkt de __import__ functie niet met jython (v2.2.1).
En het werkt nu ook onder jython:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def load_modules(dir, module_prefix = None):
    files = os.listdir(dir)
    files.sort()
    for filename in files:
        if not filename.endswith('.py') or not filename[0:1].isupper():
            continue

        filename = filename[:-3]
        if module_prefix == None:
            module_name = filename
        else:
            module_name = '%s.%s' % (module_prefix, filename)

        # Work around for http://bugs.jython.org/issue1111
        # mod = __import__(modules, {}, {}, [ filename ], -1)
        mod = __import__(module_name)
        components = module_name.split('.')
        for comp in components[1:]:
            mod = getattr(mod, comp)

        c = getattr(mod, filename)
        o = c()
        info(o)
In theory there is no difference between theory and practice. In practice there is.
pi_61765513
Pfff... ik heb (als leek met XP) Python geïnstalleerd, en Apache... en probeer nu mod_python aan de gang te krijgen ivm Django, maar het lukt niet .

Apache kan de module niet importeren, denk ik.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Starting the Apache2.2 service
The Apache2.2 service is running.
] Apache/2.2.9 (Win32) configured -- resuming normal operations
[Fri Sep 19 18:38:47 2008] [notice] Server built: Jun 13 2008 04:04:59
[Fri Sep 19 18:38:47 2008] [notice] Parent: Created child process 560
[Fri Sep 19 18:38:47 2008] [error] python_init: Python version mismatch, expected '2.5', found '2.5.2'.
[Fri Sep 19 18:38:47 2008] [error] python_init: Python executable found 'C:\\webroot\\bin\\httpd.exe'.
[Fri Sep 19 18:38:47 2008] [error] python_init: Python path being used 'c:\\Python25\\python25.zip;.\\DLLs;.\\lib;.\\lib\\plat-win;.\\lib\\lib-tk;C:\\webroot\\bin'.
[Fri Sep 19 18:38:47 2008] [notice] mod_python: Creating 8 session mutexes based on 0 max processes and 64 max threads.
[Fri Sep 19 18:38:47 2008] [notice] Child 560: Child process is running
[Fri Sep 19 18:38:47 2008] [notice] Child 560: Acquired the start mutex.
[Fri Sep 19 18:38:47 2008] [notice] Child 560: Starting 64 worker threads.
[Fri Sep 19 18:38:47 2008] [notice] Child 560: Starting thread to listen on port 80.
[Fri Sep 19 18:40:26 2008] [error] make_obcallback: could not import mod_python.apache.\n
'import site' failed; use -v for traceback
'import site' failed; use -v for traceback
ImportError: No module named mod_python.apache
[Fri Sep 19 18:40:26 2008] [error] make_obcallback: Python path being used "['c:\\\\Python25\\\\python25.zip', '.\\\\DLLs', '.\\\\lib', '.\\\\lib\\\\plat-win', '.\\\\lib\\\\lib-tk', 'C:\\\\webroot\\\\bin']".
[Fri Sep 19 18:40:26 2008] [error] get_interpreter: no interpreter callback found.
[Fri Sep 19 18:40:26 2008] [error] [client 127.0.0.1] python_handler: Can't get/create interpreter., referer: http://localhost/test/

'k Dacht dat ik toch alles netjes volgens de tutorial/installatie-dinges had gedaan...
pi_63388159
Schop.

Python op beginnersniveau vraag:

Ik ben een class aan het schrijven. Deze bevat enkele functies. Nu wil ik van 1 van de functies het resultaat vastleggen in een string, zodat (wanneer ik de class importeer naar een ander document) deze kan oproepen. Ik heb gelezen dat dit kan door return className(naamString) aan het eind van je functie te schrijven, maar dit werkt niet. Dit is wellicht een cryptische omschrijving, maar hoop dat het een beetje duidelijk is en iemand weet hoe dit mogelijk is.
  donderdag 20 november 2008 @ 22:22:03 #73
147503 Iblis
aequat omnis cinis
pi_63388285
Ik snap niet helemaal wat je wilt eerlijk gezegd. Stel ik heb een bestand spam.py:

1
2
3
4
5
class spam:
    def eggs(self):
        x = 1 + 2 
        r = str(x)
        return r


Dan kan ik in Python doen:

1
2
3
4
>>> import spam
>>> s = spam.spam()
>>> s.eggs()
'3'


Is dat wat je wilt? Of wanneer wil je precies die string tevoorschijn toveren?
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_63388733
Wow, snelle reactie!

Het is niet helemaal wat ik bedoel.

1
2
3
4
5
6
7
8
class spam
    def comp(self, s):
        self.change=list(s)
        reversed=self.change.reverse()
        stringreversed="".join(reversed)
        print "Reversed version", stringreversed
        
        return Sequence(stringreversed)


Dat laatste is het probleem. Ik wil die string namelijk ook kunnen oproepen wanneer ik in een andere functie zit te werken.
  donderdag 20 november 2008 @ 22:42:25 #75
147503 Iblis
aequat omnis cinis
pi_63389069
quote:
Op donderdag 20 november 2008 22:33 schreef Clyde_Frog het volgende:
Wow, snelle reactie!

Het is niet helemaal wat ik bedoel.
[ code verwijderd ]

Dat laatste is het probleem. Ik wil die string namelijk ook kunnen oproepen wanneer ik in een andere functie zit te werken.
Maar je wilt dus dat die comp() de laatste input opslaat? Dus je roept ergens comp('1234') aan, het resultaat hiervan ('4321') wordt opgeslagen en je kunt 100 regels verder over dit laatste resultaat beschikken?
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_63389206
Psies. :$ Of ik zou alles in 1 functie moeten zetten zodat ik dat niet hoeft te doen, maar dat wordt een beetje lastig.
  donderdag 20 november 2008 @ 22:52:35 #77
147503 Iblis
aequat omnis cinis
pi_63389453
quote:
Op donderdag 20 november 2008 22:45 schreef Clyde_Frog het volgende:
Psies. :$ Of ik zou alles in 1 functie moeten zetten zodat ik dat niet hoeft te doen, maar dat wordt een beetje lastig.
Het is meestal geen teken van een goed programmeerontwerp als je zoiets wilt doen. Meestal is het duidelijker dat je variabele meegeeft waarin je het resultaat bewaart, maar zoiets zou kunnen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class spam:
    def __init__(self):
        self.revstr = ''

    def comp(self, s):
        self.revstr = ''.join(list(s)[::-1])
        return self.revstr

s = spam()
t = spam()
print s.comp('123')
print t.comp('456')
print "Nu iets anders"
print t.revstr
print "Nog iets anders."
print s.revstr


Elke instantie krijgt dus een variabele als je namelijk:
1
2
3
class spam:
  revstr = ''
   ....


doet creëer je een klasse-variabele, dat wil je niet. Die wordt gedeeld tussen alle instanties. Verder moet je er rekening mee houden dat de reverse() call ‘in-place’ is, dus reversed=self.change.reverse() verandert self.change, en kent niet het resultaat toe aan reversed. Ik gebruik een slice om direct de reveral te doen, maar enfin…
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_63389629
Python

tevens TVP !
pi_63390070
quote:
Op donderdag 20 november 2008 22:52 schreef Iblis het volgende:

[..]

Het is meestal geen teken van een goed programmeerontwerp als je zoiets wilt doen. Meestal is het duidelijker dat je variabele meegeeft waarin je het resultaat bewaart, maar zoiets zou kunnen:
[ code verwijderd ]

Elke instantie krijgt dus een variabele als je namelijk:
[ code verwijderd ]

doet creëer je een klasse-variabele, dat wil je niet. Die wordt gedeeld tussen alle instanties. Verder moet je er rekening mee houden dat de reverse() call ‘in-place’ is, dus reversed=self.change.reverse() verandert self.change, en kent niet het resultaat toe aan reversed. Ik gebruik een slice om direct de reveral te doen, maar enfin…
Ja klopt , ik heb het in mn originele programma zonder variabele staan, had het even snel gekopieerd en netjes gemaakt, want het is een nogal grote class.om hier te posten.

Maar bedankt voor je post, ik zal eens kijken wat ik er mee kan.
pi_63391811
quote:
Op vrijdag 28 december 2007 18:00 schreef Dr.Daggla het volgende:

[..]

.
Lambo of Rekt
  maandag 12 oktober 2009 @ 15:57:09 #81
73930 Blinker
Only one Go Ahead Eagles
pi_73613337
quote:
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
#!/usr/bin/env python

from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler
from optparse import OptionParser

class ClientHandler(StreamRequestHandler):
    def handle(self):
        data = self.rfile.readline().strip()
        f = open('/proc/cpuinfo', 'r')
        g = open('/proc/version', 'r')

        self.wfile.write('<h1>Welkom op mijn Python Webserver</h1><p>')
        self.wfile.write('<b>Hier wordt de cpuinfo afgebeeld:</b></p>')
        self.wfile.write(f.read())
        self.wfile.write('<b><p>Dit is de versie :</p></b>')
        self.wfile.write(g.read())

class myServer( ThreadingMixIn, TCPServer ):
    allow_reuse_address = True

if __name__ == "__main__":

    parser = OptionParser()

    parser.add_option("-p", "--port", default = 1335, type="int", dest="port")

    (options, args) = parser.parse_args()

    server = myServer(
        ('',options.port), ClientHandler )
    server.serve_forever()
Ik heb deze code, maar als output krijg ik een laptekst aan elkaar.
Hoe kan ik het zo filteren, zodat ik dezelfde output krijg als ik bijvoorbeeld in de shell dit invul: cat /proc/cpuinfo ipv aan één stuk.
  maandag 12 oktober 2009 @ 16:07:53 #82
147503 Iblis
aequat omnis cinis
pi_73613712
Wat bedoel je met ‘één stuk’? Geen regeleindes? Dat komt omdat je het denk ik met een browser bekijkt. In HTML bestaan regeleindes niet natuurlijk. Althans, die worden niet zo weergegeven. Een oplossing is om een <pre> ... </pre> mee te zenden, voor en na f.read() en anders zul je <br/> moeten invoegen.

Een snelle maar weinig schone oplossing is:

self.wfile.write(f.read())

Vervangen door:

self.wfile.write('<br/>'.join(f.readlines()))
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  maandag 12 oktober 2009 @ 16:15:02 #83
73930 Blinker
Only one Go Ahead Eagles
pi_73613980
Uitstekend! <pre></pre> did the job!

Duizend maal dank
  maandag 12 oktober 2009 @ 16:21:09 #84
147503 Iblis
aequat omnis cinis
pi_73614182
Voor de goede orde: je probleem is dus eigenlijk dat in HTML regeleindes meestal geen speciale betekenis hebben. Het is whitespace, maar ook niet meer dan dat. Een alinea geef je aan m.b.v. <p>…</p> en andere regeleindes met <br/>. Het is niet Python die hier de regeleindes ‘verknoeit’ dus, maar je browser.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  maandag 12 oktober 2009 @ 16:31:15 #85
73930 Blinker
Only one Go Ahead Eagles
pi_73614517
Juist ja. Ik heb 'm door. Klinkt ook best logisch, alleen een oplossing kon ik even niet zo snel verzinnen.
Maar dit werkt goed.
:
Nog een ding, ik beschik nu over een webpagina waar alle informatie staat.
Nu zou ik graag het onderbrengen onder twee sub-pagina's en doorlinken.
quote:
1
2
3
4
      
                    hoofdpagina
                     /      \
                 cpuinfo     freemem
Hoe kan ik dat het beste aanpakken?

bvd
  maandag 12 oktober 2009 @ 16:33:45 #86
147503 Iblis
aequat omnis cinis
pi_73614585
Goede vraag, dat weet ik zo niet, je moet dan even kijken of je in die handle method bij de oorspronkelijke request kunt komen. Op basis van de request kun je dan iets anders teruggeven.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_73615544
Een pythontopic, ik wist niet dat dat bestond. .

Goed, bij deze zojuist gedane ontdekking heb ik meteen een (ongetwijfeld kinderlijk eenvoudige) vraag. Ik probeer nu met de module multiprocessing via Process een childproces aan te maken. Hoe kan ik exceptions die door het childprocess geraised worden opvangen in het parentprocess? Kan dat met multiprocessing.Process of is het beter iets anders te gebruiken?
  maandag 12 oktober 2009 @ 17:09:33 #88
147503 Iblis
aequat omnis cinis
pi_73615816
quote:
Op maandag 12 oktober 2009 17:00 schreef thabit het volgende:
Een pythontopic, ik wist niet dat dat bestond. .

Goed, bij deze zojuist gedane ontdekking heb ik meteen een (ongetwijfeld kinderlijk eenvoudige) vraag. Ik probeer nu met de module multiprocessing via Process een childproces aan te maken. Hoe kan ik exceptions die door het childprocess geraised worden opvangen in het parentprocess? Kan dat met multiprocessing.Process of is het beter iets anders te gebruiken?
Volgens mij niet. Als ik het zo bekijk zul je een Queue of een Pipe moeten gebruiken.

Dus je vangt een exceptie af, en propt die in een queue die dan uitgelezen wordt door de parent.

De processen delen niet expliciet geheugenruimte (dat zou namelijk allerhande race-condities in de hand werken) en kunnen dus ook niet zo elkaars exceptions afvangen, aangezien dat in feite objecten zijn die door een proces gegenereerd worden.

Wel kun je ze dus in een queue stoppen en eventueel in de parent re-raisen.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_73616163
Okee, dus gewoon een try-blok neerzetten en de exceptie in de Pipe/Queue gooien. Ik zal het eens proberen!
  maandag 12 oktober 2009 @ 17:29:11 #90
147503 Iblis
aequat omnis cinis
pi_73616396
quote:
Op maandag 12 oktober 2009 17:20 schreef thabit het volgende:
Okee, dus gewoon een try-blok neerzetten en de exceptie in de Pipe/Queue gooien. Ik zal het eens proberen!
Ik denk trouwens dat het beter is om te proberen in de child de boel te fiksen, als er wat aan te fiksen valt, en het alleen als dat niet kan door te gooien.

Want allerlei inspection e.d. die je normaal kunt doen kan niet meer in de parent, omdat je niet bij de variabelen/gegevens van je child kunt.

Ik weet niet of het de netste manier is om Exceptions, die van nature tamelijk proces-specifiek zijn, in een Queue te proppen. Want hoe wilde je de traceback in de parent doen b.v.?
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_73616722
Natuurlijk is het de bedoeling om alles zoveel mogelijk te fiksen en idealiter zijn er geen exceptions. Maar er kunnen natuurlijk altijd fouten optreden en ik wil niet dat de parent deadlockt op het moment dat de child in de soep draait. Dus vraag ik me af wat de handigste manier is om dit op te lossen.
pi_73616764
Wat toevallig, een vrij late bump van dit topic (in mijn AT), maar ik ben sinds paar dagen écht begonnen met Python. Ben nu vooral aan het richten op Django, maar aantal scriptjes inclusief venstertjes is al gelukt.
pi_73637617
Doen jullie wel 's wat met Google App Engine? En dat evt in combi met Django?
pi_73800982
Ook hier even mijn vraag stellen.:
quote:
Beste,

Vooraf, PY staat voor Python en DJ voor het webframework Django. Ik ben hier nog niet zo lang mee bezig en ik vind het best leuk.

Stel je hebt een inlogpagina. Op het moment dat je al ingelogd bent en je bezoekt die pagina dan krijg je een melding dat je al ingelogd bent. Of als je wilt uitloggen, terwijl je niet uitgelogd bent krijg je daar ook een melding van. Qua opbouw hetzelfde dus ik wil hier geen twee templates voor gebruiken. DRY dus. (Vroeger in php gebruikte ik hier een MessageException voor.)

Dus ik denk ik los dit zo op.
return render_to_response('message.html', {"title": "Login", "content": "U bent succesvol ingelogd."})

Dit werkt goed, totdat ik iets wilde doen als <a href="link">Klik hier om door te gaan</a>. Dit loste ik op door in message.html "{{ content|safe }}" te doen ipv zonder |safe.

Maar als ik nou {% url iuser.views.login %} als link wil doen, dan wordt dat letterlijk genomen en niet omgezet tot een link. Logisch, want het is een template tag en geen view tag ofzo. Hiervoor is dan de oplossing urlresolvers.reverse. Alleen dit krijg ik niet aan de praat. Help!

Daarnaast vind ik het nog niet goed dat ik nou html gebruik in een view. Is dit not done, of in dit geval wel verantwoord toegepast? Zijn er (betere) alternatieven om zo'n standaard bericht terug te sturen?

Nou heb ik ook nog een tweede vraag. Ik heb het volgende scriptje gevonden: klik. Dit lijkt mij wel handig, maar ik heb geen idee waar ik dit moet plaatsen. Daarnaast weer mijn vraag, is dit 'verantwoord'? (Niet tegen een bepaalde principe (van Python/Django) in ofzo)

Alvast bedankt,

Michiel
  zondag 18 oktober 2009 @ 12:52:36 #95
147503 Iblis
aequat omnis cinis
pi_73801841
Ik heb helaas helemaal geen verstand van CMS – maar heeft Django niet en heel levendige community? Dat is wel vaak het geval bij zulke projecten. Het ‘nadeel’ is wel dat je je vraag in het Engels zult moeten stellen.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
pi_73802170
Oh vast wel. Ik probeer het eerst even hier, proberen kan geen kwaad. Ik zal over een paar dagen wel opzoek gaan naar zo'n community. Bedankt iig.
pi_73958987
GUI-gerelateerde zaken, daar heb ik nul komma nul verstand van.

Ik zal in elk geval een stukje code hier posten dat mijn eerdere vraag behandelt. Ongetwijfeld kan er vanalles aan bijgeschaafd worden. Het werkt erg goed. Met dank ook aan Iblis voor een aantal tips.

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
class ChildProcessError(RuntimeError):
    """
    A parent process may raise this if a child process produces an error.
    """
    pass
    

def execute_in_child_process(f, traceback_file="traceback"):
    """
    Decorator that makes a function execute in a child process.
    
    INPUT: 
     - ``f`` - function 
     - ``traceback_file`` - string (default: "traceback") 
     
    OUTPUT:
     - function - create a child process, call f from there and return f's result
     
    REMARKS:
     - The side effects of f (such as caching) are thrown away.  So make 
       sure that all important information is in the output of f.  In fact,
       reducing memory leaks is the intended use of the decorator.      
     - If f raises an exception, the traceback is stored in traceback_file
       and a ChildProcessError is raised by the new function.
     
    EXAMPLES: TODO
    """
    def new_f(*args, **kwargs):
        def child_process(conn):
            try:
                result = f(*args, **kwargs)
            except BaseException:
                message = "the traceback is in the file '%s'" % traceback_file
                conn.send(ChildProcessError(message))
                conn.close()
                with open(traceback_file, 'a') as tr_file:
                    traceback.print_exc(file=tr_file)
                return
            conn.send(result)
            conn.close()
        parent_conn, child_conn = Pipe()
        p = Process(target=child_process, args=(child_conn,))
        p.start()
        result = parent_conn.recv()
        p.join()
        if isinstance(result, ChildProcessError):
            raise result
        return result
    return new_f


[ Bericht 0% gewijzigd door thabit op 22-10-2009 19:21:00 ]
pi_75661412
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
aantalsoorten = 4

for aantalpersoort in range(1,20):
    if aantalpersoort == 1:
        prijsperstuk = 1.85
    elif 1 < aantalpersoort < 6:
        prijsperstuk = 1.70
    else:
        prijsperstuk = 1.55
    
    aantal = aantalsoorten * aantalpersoort
    
    if 2 < aantal < 6:
        verzendkosten = 1.76
    elif 6 <= aantal < 11:
        verzendkosten = 3.60
    else:
        verzendkosten = 6.75
   
    totaalkosten = verzendkosten + aantal*prijsperstuk
    
    totaalperstuk = totaalkosten / float(aantal)
    print (int(totaalperstuk*100)-160) * "X", aantalpersoort, "->", "%.2f" % totaalperstuk

Whehehe.
Mijn eerste IRL toepassing om te schatten wat een optimale bestelhoeveelheid beefjerky is .

Output:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1 -> 2.29
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2 -> 2.15
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 3 -> 2.26
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4 -> 2.12
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5 -> 2.04
XXXXXXXXXXXXXXXXXXXXXXX 6 -> 1.83
XXXXXXXXXXXXXXXXXXX 7 -> 1.79
XXXXXXXXXXXXXXXX 8 -> 1.76
XXXXXXXXXXXXX 9 -> 1.74
XXXXXXXXXXX 10 -> 1.72
XXXXXXXXXX 11 -> 1.70
XXXXXXXXX 12 -> 1.69
XXXXXXX 13 -> 1.68
XXXXXXX 14 -> 1.67
XXXXXX 15 -> 1.66
XXXXX 16 -> 1.66
XXXX 17 -> 1.65
XXXX 18 -> 1.64
XXX 19 -> 1.64
  woensdag 5 mei 2010 @ 15:42:50 #99
111382 Ofyles2
Bestemming: onbekend
pi_81051595
* Ofyles2 schopt dit topic omhoog.

Eerstens: ik ben sinds kort verslaafd geworden aan Python (dit in combinatie met Qt4)
Tweedens: dit topic raakt ondergesneeuwd door de andere talen.
pi_81907050
Kennen jullie trouwens Cython? Dat is echt geweldig. 't Is een soort mix van C en Python, the best of both worlds als het ware, de snelheid van C en de syntax van Python. Het is een gecompileerde variant op Python, waarin je de mogelijkheid hebt om statische typedeclaraties te doen, C types te gebruiken en als je wilt zelf ook je deallocatieprocedures te schrijven, etc. De meeste pure Python code compileert het overigens ook gewoon.
  woensdag 26 mei 2010 @ 15:40:19 #101
30719 keesjeislief
NextGenerationHippie
pi_81923674
quote:
Op woensdag 26 mei 2010 08:42 schreef thabit het volgende:
Kennen jullie trouwens Cython? Dat is echt geweldig. 't Is een soort mix van C en Python, the best of both worlds als het ware, de snelheid van C en de syntax van Python. Het is een gecompileerde variant op Python, waarin je de mogelijkheid hebt om statische typedeclaraties te doen, C types te gebruiken en als je wilt zelf ook je deallocatieprocedures te schrijven, etc. De meeste pure Python code compileert het overigens ook gewoon.
Ik gebruik het nogal eens om stukken code in het open source CAS SAGE te 'compileren', ik vind het ook fantastisch om de voordelen van 'high-level' Python gecombineerd te zien met uitvoeringssnelheden in dezelfde orde als C!
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
pi_81944963
quote:
Op woensdag 26 mei 2010 08:42 schreef thabit het volgende:
Kennen jullie trouwens Cython? Dat is echt geweldig. 't Is een soort mix van C en Python, the best of both worlds als het ware, de snelheid van C en de syntax van Python. Het is een gecompileerde variant op Python, waarin je de mogelijkheid hebt om statische typedeclaraties te doen, C types te gebruiken en als je wilt zelf ook je deallocatieprocedures te schrijven, etc. De meeste pure Python code compileert het overigens ook gewoon.
Een taal die ook het gemak van python probeert te combineren met de snelheid van c is go. Het is een vrij nieuwe taal, maar het heeft wel potentie om groot te worden aangezien google er achter zit.
pi_81960310
Dat go heeft zo te zien wel accolades. Dus ik denk dat ik het maar bij Python en C(++) houd.
  donderdag 27 mei 2010 @ 20:35:25 #104
147503 Iblis
aequat omnis cinis
pi_81985801
Ik vind Go meer op Limbo lijken. Ik vind het in vergelijking met Python (te) kaal qua taalfeatures zoals een soort van polymorfisme of overerving.
Daher iſt die Aufgabe nicht ſowohl, zu ſehn was noch Keiner geſehn hat, als, bei Dem, was Jeder ſieht, zu denken was noch Keiner gedacht hat.
  zaterdag 7 augustus 2010 @ 01:28:42 #105
296399 Outlined
Renaissance Man
pi_84964462
Haskell, dat is pas leuk :Y
Come on, who can, who can, can hear the bass drum.
pi_84969063
Heb laatst wat geklooid met Django, en ik moet zeggen, dat is toch best cool. Mooi clean framework waar je binnen no time een webapplicatie mee hebt opgezet.
  zaterdag 7 augustus 2010 @ 12:12:34 #107
30719 keesjeislief
NextGenerationHippie
pi_84970597
De laatste tijd doe ik alle programmeerdingetjes voor mijn werk in SAGE (een open source computer algebra system in Python), ik raak mijn versie van Mathematica nauwelijks meer aan. :). Het is ontzettend fijn om een volledige programmeertaal tot je beschikking te hebben (zoals de OO-capaciteiten) met zo'n fijne syntax, in combinatie met het feit dat het open source zijn betekent dat je zo diep in SAGE kunt graven als je zelf wilt/nodig hebt. (Vooral als je voor snelheid wilt optimaliseren is dat ideaal.)

Eigenlijk vind ik dat je als wetenschapper sowieso principieel zoveel mogelijk gesloten systemen zoals Mathematica moet vermijden.
heeft de hoop dat het allemaal stiekum toch nog goed komt...
Fotoboek
pi_84980159
Sage gebruik ik tegenwoordig ook heel veel. Er zit nog wel een shitload aan bugs in, maar het voordeel van open source is dat je die zelf kunt fixen en zo je steentje aan het systeem kunt bijdragen. :).
pi_89281703
Klein schopje. Ben wat aan het rondklooien met curses. Hoe kan ik

1stdscr.refresh()

automatisch iedere x seconden z'n werk laten doen?
Eins, zwei, hoeplakai.
pi_89282325
Misschien met een Thread die telkens x seconden slaapt en daarna de zaak refresht?
pi_139035327
Algemeen vraagje; ik ben bezig Python om video's en foto's te kunnen schieten met de raspberry pi en de pi camera. Echter ben ik opzoek naar een nette / snelle methode om te kijken of 2 afbeeldingen op elkaar lijken. Nu heb ik al verschillende snippets gevonden maar veel wijzer wordt ik daar niet van. :N

Weet iemand een snelle simpele manier om via python (zonder een system call) 2 afbeeldingen te vergelijken (eventueel te verkleinen, zwart-wit te maken)?

Thanks! :)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139075175
quote:
14s.gif Op zaterdag 19 april 2014 01:46 schreef Chandler het volgende:
Algemeen vraagje; ik ben bezig Python om video's en foto's te kunnen schieten met de raspberry pi en de pi camera. Echter ben ik opzoek naar een nette / snelle methode om te kijken of 2 afbeeldingen op elkaar lijken. Nu heb ik al verschillende snippets gevonden maar veel wijzer wordt ik daar niet van. :N

Weet iemand een snelle simpele manier om via python (zonder een system call) 2 afbeeldingen te vergelijken (eventueel te verkleinen, zwart-wit te maken)?

Thanks! :)
Heb je hier misschien wat aan?
https://wiki.python.org/moin/ImageMagick
pi_139096034
quote:
1s.gif Op zondag 20 april 2014 16:20 schreef robin007bond het volgende:

[..]

Heb je hier misschien wat aan?
https://wiki.python.org/moin/ImageMagick
Op zich wel, heb er nu al een tijdje door de docs heen zitten scrollen maar zie niet echt een mogelijkheid om 'compare' zonder commandline te doen, het vergelijken van 2 beelden. Heb je een voorbeeld gezien?
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139114649
Even een andere vraag, waarom kom ik nooit uit op finally? ik dacht dat een else met break werkte niet.. hoe kan ik zorgen dat ik bij een false op motion detect de finally bereik? :D

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    try:
      motionFilename = directory + '/' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%s') + '.h264'
      while True:
        camera.wait_recording(1)
        # if motion is detected, record for xx time and the video every xx seconds
        if detect_motion():
          # Once we've detected motion, keep recording for xx seconds
          # and only then dump the stream to disk
          camera.wait_recording(motionVideoTime)
          write_video(stream, motionFilename)
#        else:
#          break;
          
    finally:
      # no motion detected anymore? stop recording
      camera.stop_recording()
      # remove first frame, so we need to run multiple runs for new 'screens'
      prior_image = None
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139152865
quote:
0s.gif Op maandag 21 april 2014 17:19 schreef Chandler het volgende:
Even een andere vraag, waarom kom ik nooit uit op finally? ik dacht dat een else met break werkte niet.. hoe kan ik zorgen dat ik bij een false op motion detect de finally bereik? :D
[ code verwijderd ]

Wat is het nut van een try zonder catch?
pi_139153579
Euh... geen idee, zo uit een snippet gehaald en aangepast zodat het werkte zoals ik het wenste :P

Heb je een betere opzet? :D

In 2 weken python geleerd en dit is met kopieren en plakken en een hoop aanpassen m'n huidige scriptje
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
#python example
import io
import time
import math  # for microtime
import datetime  # for date
import os # for system calls
import datetime
from PIL import Image
import ImageChops
import operator
import picamera

# functions

def avg(values):
    if type(values) == type(1):
        return values
    return sum(values)//len(values)

def hamming_distance(a_list, b_list):
    return sum(item1 != item2 for item1, item2 in zip(a_list, b_list))

def num_pairs(num_items):
    num_pairs = 0
    while num_items > 0:
        num_items -= 1
        num_pairs += num_items
    return num_pairs

def compare(image1, image2): 
    image1 = image1.resize((8, 8), Image.BILINEAR)
    grayscale_pixels = map(avg, list(image1.getdata()))
#    del image1
    pixel_avg = avg(grayscale_pixels)
    first = [(pixel > pixel_avg) for pixel in grayscale_pixels]

    image2 = image2.resize((8, 8), Image.BILINEAR)
    grayscale_pixels = map(avg, list(image2.getdata()))
#    del image2
    pixel_avg = avg(grayscale_pixels)
    second = [(pixel > pixel_avg) for pixel in grayscale_pixels]

    return ((64 - hamming_distance(first, second)) * 100) // 64
    
def getFreeSpace():
  # read free space from current path.
  st = os.statvfs(os.getcwd())
  du = st.f_bavail * st.f_frsize
  return du
  
def bytes2human(n):
  symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
  prefix = {}
  for i, s in enumerate(symbols):
    prefix[s] = 1 << (i + 1) * 10
    
  for s in reversed(symbols):
    if n >= prefix[s]:
       value = float(n) / prefix[s]
       return '%.1f%s' % (value, s)

  return "%sB" % n  

def detect_motion():
  global camera, prior_image, current_image
  global motionShotWidth, motionShotHeight

  stream = io.BytesIO()
  # camera.capture(stream, format = 'jpeg', use_video_port = True)
  camera.capture(stream, format = 'jpeg', use_video_port = True, resize = (motionShotWidth, motionShotHeight))
  stream.seek(0)
  
  if prior_image is None:
#    print ("{} - First motion saved".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
    prior_image = Image.open(stream)
    prior_image.save('first.jpg', 'jpeg', quality=80, optimize=True, progressive=True)
    return 0 
    # false
  else:
#    print ("{} - Second motion saved".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
    current_image = Image.open(stream)
    current_image.save('second.jpg', 'jpeg', quality=80, optimize=True, progressive=True)

    # we want this in percent of difference, all below 90 is for continue recording, all higher could end.
    procent = compare(prior_image, current_image)
    if procent  < 80:
      print ("{} - Motion detected!!! {}%".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), procent))
      return True
#       image_found = 1
    else:
      print ("{} - NO motion detected {}%".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), procent))
#       image_found = 0
      prior_image = current_image
      return False
#       return image_found

def write_video(stream, filename):
  # Write the entire content of the circular buffer to disk
  with io.open(filename, 'wb') as output:
    with stream.lock:
      for frame in stream.frames:
        if frame.header:
          stream.seek(frame.position)
          break
      while True:
        buf = stream.read1()
        if not buf:
          break
        output.write(buf)

def takeTimeleapseShot():
  global camera, timeLeapseWidth, timeLeapseHeight, timeLeapseDirectory
  global prior_image
  # create variable for timeLeapseshot
  
  if not os.path.exists(timeLeapseDirectory):
    os.makedirs(timeLeapseDirectory)
    
  directory = timeLeapseDirectory + '/' + datetime.datetime.now().strftime('%Y-%m-%d')
  if not os.path.exists(directory):
    os.makedirs(directory)
    
  tlshot = directory + '/' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%s') + '.jpg'
  
  # set resolution and take the shot!
  camera.resolution = (timeLeapseWidth, timeLeapseHeight)
  camera.capture(tlshot, 'jpeg')

  return

def takeMovementShot():
  global camera
  global motionVideoWidth, motionVideoHeight, motionVideoTime, motionDirectory

  if not os.path.exists(motionDirectory):
    os.makedirs(motionDirectory)
    
  # is motion detected?
  if detect_motion():
    # display that motion is detected
#    print("{} -++ Motion detected".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
    # set camera resolution for the motion video
    camera.resolution = (motionVideoWidth, motionVideoHeight)
    # open stream for the recording
    stream = picamera.PiCameraCircularIO(camera, seconds=5)
    # start recording the stream in format h264
    camera.start_recording(stream, format = 'h264')
    try:
      directory = motionDirectory + '/' + datetime.datetime.now().strftime('%Y-%m-%d')
      if not os.path.exists(directory):
        os.makedirs(directory)
  
      motionFilename = directory + '/' + datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%s') + '.h264'
      while (True):
        camera.wait_recording(1)
        # if motion is detected, record for xx time and the video every xx seconds
        if detect_motion() == True:
          # Once we've detected motion, keep recording for xx seconds
          # and only then dump the stream to disk
          print("{} -++ Recording for {} seconds".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), motionVideoTime))
          camera.wait_recording(motionVideoTime)
          write_video(stream, motionFilename)
        else:
          break;
          
    finally:
      # no motion detected anymore? stop recording
      print("{} - End recording, no more motion detected".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
      camera.stop_recording()
      # remove first frame, so we need to run multiple runs for new 'screens'
      prior_image = None
  
  print("{} -++ Exit function".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
          
# variables
timeLeapseWidth = 1920
timeLeapseHeight = 1080
timeLeapseDirectory = 'timeleapseshot'
motionShotWidth = 102
motionShotHeight = 77
motionVideoWidth = 1024
motionVideoHeight = 768
motionVideoTime   = 5
motionDirectory = 'motion'
# for image comparisson
prior_image = None
# for comparing images imageChops
maximum_rms = 15
# for comparing images commandline
imageDifference = 75;
# start the picamera
camera = picamera.PiCamera()
# disable camera led
camera.led = False
# Keep 500 mb free on disk
diskSpaceToReserve = 500 * 1024 * 1024   

# seconds
timerLoop = time.time() + (3600 * 24)
# microseconds (100000 is one second)
timerDelay = 0.005
# init loopCounter
loopCounter = 0
currentTimer = 0

# array for timeleapse shot
timerArray = {}
timerArray[0] = {}
timerArray[0]['each'] = 5
timerArray[0]['last'] = time.time()
timerArray[0]['time'] = 0
timerArray[0]['timemin'] = 0
timerArray[0]['timemax'] = 0
timerArray[0]['counter'] = 0
timerArray[0]['execute'] = 'takeTimeleapseShot'
timerArray[0]['title'] = 'Take timeleapse shot'

timerArray[1] = {}
timerArray[1]['each'] = 0.25
timerArray[1]['last'] = time.time()
timerArray[1]['time'] = 0
timerArray[1]['timemin'] = 0
timerArray[1]['timemax'] = 0
timerArray[1]['counter'] = 0
timerArray[1]['execute'] = 'takeMovementShot'
timerArray[1]['title'] = 'Take motion shot'

# main script
while True:
  timeLeft = timerLoop - time.time()
  loopCounter = loopCounter + 1
  
  for (key, s) in timerArray.items():
    if s['each'] > 0:
      if (s['last'] == 0) or (time.time() - s['last'] > s['each']):
        print ("{} - Function {} starting".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), s['execute']))

        c = s['counter'] + 1
        currentTimer = time.time()
        # start function
        locals()[s['execute']]()
        endTimer = time.time() - currentTimer

        print ("{} - {} secs left - {} - {} (# {})".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), math.trunc(timeLeft), loopCounter, s['title'], c))

        # save information about last function
        timerArray[key]['last'] = time.time()
        timerArray[key]['counter'] += 1
        timerArray[key]['time'] = timerArray[key]['time'] + endTimer

        # save min/max time for benchmarking
        if (timerArray[key]['timemin'] == 0) or (timerArray[key]['timemin'] != 0 and timerArray[key]['timemin'] > endTimer):
          timerArray[key]['timemin'] = endTimer
        if (timerArray[key]['timemax'] == 0) or (timerArray[key]['timemax'] != 0 and timerArray[key]['timemax'] < endTimer):
          timerArray[key]['timemax'] = endTimer
    
    # sleep for timerDelay seconds (or microseconds)      
    time.sleep(timerDelay)
    
  # break when time has reached its end.
  if time.time() > timerLoop:
    print(timerArray)
    break
  
  # break when free space is lower then given value
  if getFreeSpace() < diskSpaceToReserve: 
    print("{} - Exiting: No more free space {} free".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), bytes2human(getFreeSpace())))
    
# close camera    
camera.close()

Graag hoor ik opbouwende comments! *)

[ Bericht 97% gewijzigd door Chandler op 22-04-2014 19:06:31 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139157704
quote:
0s.gif Op dinsdag 22 april 2014 18:55 schreef Chandler het volgende:
Euh... geen idee, zo uit een snippet gehaald en aangepast zodat het werkte zoals ik het wenste :P

Heb je een betere opzet? :D

In 2 weken python geleerd en dit is met kopieren en plakken en een hoop aanpassen m'n huidige scriptje
[ code verwijderd ]

Graag hoor ik opbouwende comments! *)
Oké. Hmm. Ik ben gewend om objectgeoriënteerd te programmeren, dus het is even wennen voor mij om een lijst met functies te lezen.

De average-functie die je hebt gemaakt heeft Python zelf ook. https://docs.python.org/3/library/statistics.html#statistics.mean

Wel goed dat je de taal zo leert. https://docs.python.org/3/library/statistics.html#statistics.mean

Met het alleen kopiëren en plakken van dingen moet je oppassen dat je de achterliggende gedachten wel begrijpt. Een try en catch gebruik je als je er van uitgaat dat er iets fout kan gaan.

Als de code binnen de try fout gaat, dan komt je programma in de catch. Finally wordt ook uitgevoerd als er problemen zijn binnen de try.

Voorbeeldje:

1
2
3
4
5
6
7
8
Try:
   #Hier gebeuren allerlei dingen blablablabla
   # Eventueel zouden ze mis kunnen gaan
Catch:
   #Hier gaat de code naartoe als er iets fout gaat.
   #In dit blok kun je bijvoorbeeld een foutmelding laten verschijnen als het mis gaat.
Finally: 
   #Altijd als de try wordt verlaten zal dit blok uitgevoerd worden, dus zowel wanneer er een exception palatsvindt als wanneer het goed gaat.

Alleen werkt het in Python net wat anders dan Catch. In Python heet dat Except volgens mij. Een goed voorbeeld staat hier:

https://docs.python.org/2/tutorial/errors.html

[ Bericht 3% gewijzigd door #ANONIEM op 22-04-2014 20:55:16 ]
pi_139158700
Commentaar binnen de functiebody's mag wel iets minder. Voorbeeld:
1
2
    # start recording the stream in format h264
    camera.start_recording(stream, format = 'h264')
Het stuk code is leesbaar genoeg hier en sowieso vrijwel hetzelfde als het commentaar dat erboven staat.

Wat je bijvoorbeeld wel kan doen, is elke functie van een docstring voorzien. Ben je daarmee bekend?
pi_139158937
1
2
3
4
5
6
def num_pairs(num_items):
    num_pairs = 0
    while num_items > 0:
        num_items -= 1
        num_pairs += num_items
    return num_pairs

Kan eenvoudiger:
1
2
def num_pairs(num_items):
    return num_items * (num_items - 1) / 2

Of met docstring:
1
2
3
def num_pairs(num_items):
    """Return the number of pairs that can be drawn from a list of num_items items."""
    return num_items * (num_items - 1) / 2
pi_139159675
Thanks allebeide! :)

Ik heb idd nog een hoop te leren, en dit is mijn manier van leren ;) maar aangezien ik PHP aardig onder de knie heb en dit er goed op lijkt gaat het me best aardig af! *)

Zal weer verder gaan spelen met de code, stukje voor stukje wordt het beter ;)

Oh, kunnen jullie me het volgende mogelijk vertellen/verwijzen;

- die beginnende array beginnend op regel 207, kan dat ook mooier? :P
- volgens mij is die try daar helemaal niet nodig, want een while voor het detecteren van de 'motion' lijkt me genoeg.
- Mijn functie van het detecteren van beweging is alles behalve 'erg goed' ;) in goed licht werkt het vrij goed, maar wordt het ietsje donkerder dan blijft hij zelfs 'donker' opnemen.... vreemd.
- Oh en die While(True), waar haalt hij zijn true vandaan? uit de if statement?

[ Bericht 3% gewijzigd door Chandler op 22-04-2014 21:34:49 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139161213
quote:
0s.gif Op dinsdag 22 april 2014 21:11 schreef Chandler het volgende:
Thanks allebeide! :)

Ik heb idd nog een hoop te leren, en dit is mijn manier van leren ;) maar aangezien ik PHP aardig onder de knie heb en dit er goed op lijkt gaat het me best aardig af! *)

Zal weer verder gaan spelen met de code, stukje voor stukje wordt het beter ;)

Oh, kunnen jullie me het volgende mogelijk vertellen/verwijzen;

- die beginnende array beginnend op regel 207, kan dat ook mooier? :P
- volgens mij is die try daar helemaal niet nodig, want een while voor het detecteren van de 'motion' lijkt me genoeg.
- Mijn functie van het detecteren van beweging is alles behalve 'erg goed' ;) in goed licht werkt het vrij goed, maar wordt het ietsje donkerder dan blijft hij zelfs 'donker' opnemen.... vreemd.
- Oh en die While(True), waar haalt hij zijn true vandaan? uit de if statement?
While(true) is een oneindige loop die pas stopt als het programma stopt als ik mij niet vergis. :)

[ Bericht 0% gewijzigd door #ANONIEM op 22-04-2014 21:39:59 ]
pi_139161238
quote:
0s.gif Op dinsdag 22 april 2014 21:39 schreef robin007bond het volgende:

[..]

While(true) is een oneindige loop die pas stopt als het programma stopt als ik mij niet vergis. :)
Tenzij er een break komt dan, want die zit er ook in :P
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139161257
quote:
0s.gif Op dinsdag 22 april 2014 21:39 schreef Chandler het volgende:

[..]

Tenzij er een break komt dan, want die zit er ook in :P
Precies! Wat ook zou kunnen is een boolean daarvoor aanmaken. Vind ik persoonlijk wel netter.

1
2
3
4
5
shouldLoop  = True # maar dan een betere naam!

while(shouldLoop):
   if blablablaconditie:
      shouldLoop = False


[ Bericht 32% gewijzigd door #ANONIEM op 22-04-2014 21:42:33 ]
pi_139162583
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# array for timeleapse shot
timerArray = {}
timerArray[0] = {}
timerArray[0]['each'] = 5
timerArray[0]['last'] = time.time()
timerArray[0]['time'] = 0
timerArray[0]['timemin'] = 0
timerArray[0]['timemax'] = 0
timerArray[0]['counter'] = 0
timerArray[0]['execute'] = 'takeTimeleapseShot'
timerArray[0]['title'] = 'Take timeleapse shot'

timerArray[1] = {}
timerArray[1]['each'] = 0.25
timerArray[1]['last'] = time.time()
timerArray[1]['time'] = 0
timerArray[1]['timemin'] = 0
timerArray[1]['timemax'] = 0
timerArray[1]['counter'] = 0
timerArray[1]['execute'] = 'takeMovementShot'
timerArray[1]['title'] = 'Take motion shot'
Je maakt hier een dictionary van dictionaries van timerArray. Waarom niet gewoon een list? Snake case is trouwens gebruikelijker in Python dan camel case (dus timer_array).
1
2
timer_array = [{'each': 5,    'last': time.time(), 'time': 0, etc},
               {'each': 0.25, 'last': time.time(), 'time': 0, etc}]
pi_139163011
1for (key, s) in timerArray.items():
Je gebruikt de waarde van de key hier alleen om de timerArray te indexeren. Het kan ook zo:
1for s in timerArray:
pi_139163528
1locals()[s['execute']]()
Dit is ook wat cryptisch. Je kunt functies gewoon gebruiken als dict values (gewoon geen aanhalingstekens gebruiken: takeTimeleapseShot ipv 'takeTimeleapseShot'). Dan kun je het eenvoudig zo doen:
1s['execute']()
pi_139171218
Top! ik ga er verder mee spelen en kom hier later allemaal op terug ;)

_O_ Thanks!

Oh en deze regel

1for s in timerArray:
Ik kan ik dan ook de data aanpassen? daarvoor gebruik ik nu de key, om de juiste data aan te passen in deze array...

-edit 1-

s['execute']() werkt niet, krijg een foutmelding, als ik het weer verander naar locals()[s['execute']]() werkt het wel :+

Tevens als ik de dictionary verander, moet ik ook de for veranderen, dus dat moet even wachten...

[ Bericht 30% gewijzigd door Chandler op 23-04-2014 07:42:35 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139171458
1
2
3
timerArray[0]['execute'] = 'takeTimeleapseShot'
...
timerArray[1]['execute'] = 'takeMovementShot'
Dat moet je veranderen in:
1
2
3
timerArray[0]['execute'] = takeTimeleapseShot
...
timerArray[1]['execute'] = takeMovementShot
pi_139171554
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def compare(image1, image2): 
    image1 = image1.resize((8, 8), Image.BILINEAR)
    grayscale_pixels = map(avg, list(image1.getdata()))
#    del image1
    pixel_avg = avg(grayscale_pixels)
    first = [(pixel > pixel_avg) for pixel in grayscale_pixels]

    image2 = image2.resize((8, 8), Image.BILINEAR)
    grayscale_pixels = map(avg, list(image2.getdata()))
#    del image2
    pixel_avg = avg(grayscale_pixels)
    second = [(pixel > pixel_avg) for pixel in grayscale_pixels]

    return ((64 - hamming_distance(first, second)) * 100) // 64
    
Dit ziet er vrij ingewikkeld uit. Kun je misschien het volgende proberen:
1
2
3
4
5
6
7
8
def compare(image1, image2): 
    image1 = image1.resize((8, 8), Image.BILINEAR)
    grayscale_pixels1 = map(avg, list(image1.getdata()))

    image2 = image2.resize((8, 8), Image.BILINEAR)
    grayscale_pixels2 = map(avg, list(image2.getdata()))

    return sum((grayscale_pixels1[i]-grayscale_pixels2[i])**2 for i in len(grayscale_pixels1))

En dan kijken of dit boven een bepaalde drempelwaarde uitkomt?

[ Bericht 0% gewijzigd door thabit op 23-04-2014 08:14:01 ]
pi_139171577
quote:
0s.gif Op woensdag 23 april 2014 07:55 schreef thabit het volgende:

[ code verwijderd ]

Dat moet je veranderen in:
[ code verwijderd ]

Dit werkte niet met deze array
1
2
timerArray = [{'each': 5,    'last': time.time(), 'time': 0, 'timemin': 0, 'timem...},
              {'each': 0.25, 'last': time.time(), 'time': 0, 'timemin': 0, 'timem...}]

Maar wel met mijn huidige 'array' :@ en ik zal die andere functie vanavond eens proberen! *) thanks!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  woensdag 23 april 2014 @ 10:10:05 #131
187069 slacker_nl
Sicko pur sang
pi_139173545
Crap, ik had een stukje tekst en die is nu weg.

In het kort, ik zag het ook in je PHP code, maar je doet aan code duplicatie, bijvoorbeeld in je compare:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def compare(a, b) 
    ik_doe_kekke_dingen(a);
    a.kekkedingen_ik_doe();

    ik_doe_kekke_dingen(b);
    b.kekkedingen_ik_doe();

    return verschil_tussen(a,b);

# maar
def compare(a, b);
    a = _meuk(a);
    b = _meuk(b);
    return verschil_tussen(a,b);

def _meuk(x):
    ik_doe_kekke_dingen(x);
    x.kekkedingen_ik_doe();
    return x;

Verder zou ik niet

1
2
3
4
5
dir = my_custom_dir . '/' . iets(); doen

# maar 

os.path.join(my_custom_dir, iets(), dit(), dat());

Dat fixed je shit ook op een ander platform (denk Windows portability).

En verder had ik zo'n type interface ingedachte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import picamera
import motiondetect

camera = picamera.PiCamer();
camera.led = False;
# Kijk trouwens even of dit kan:
camera = picamera.PiCamer(led => False);

md = motiondetect.MotionDetect(
    camera => camera,
    path   => '/path/to/storage',
    # meerdere opties hier
);

md.run();

Dat is dan je script.

Voordeel is dat je motiondetect volledig kan testen in een testfile, want alle logica zit in die module/class. Een script testen is toch wat lastiger.

En mocht er een camera API zijn anders dan picamera die dezelfde interface heeft dan kan je dat plugged en playend aanpassen.

Overigens zou ik ook nog in de docs van picamera kijken, je doet een resize en de docs zeggen dit:
http://picamera.readthedo(...)uring-resized-images
quote:
Although such resizing can be performed using libraries like PIL or OpenCV, it is considerably more efficient to have the Pi’s GPU perform the resizing when capturing the image. This can be done with the resize parameter of the capture() methods:
Verder moet je meer commentaar in je code zetten, en daarmee bedoel ik dat je je functies moet documenteren.
https://docs.python.org/devguide/documenting.html
https://google-styleguide(...)yguide.html#Comments (staan leuke dingen in, los van hoe te documenteren).

Tevens ben ik benieuwd naar wat er gebeurd als je een pad hebt wat niet aangemaakt kan worden, ga je dood of blijf je doorgaan? Ik zie namelijk nergens een die, throw oid.

[ Bericht 2% gewijzigd door slacker_nl op 23-04-2014 10:15:45 ]
In theory there is no difference between theory and practice. In practice there is.
pi_139174893
In een python script maak ik een (grote numpy) matrix. Die sla ik vervolgens op met pickle. Werkt prima. Vervolgens laad ik het bestand met pickle in een ander script, en dan zegt die MemoryError. :?
Als je 'm überhaupt kan maken, dan zou je 'm toch ook kunnen laden?
edit: bug in cPickle, want met pickle werkt het wel.

[ Bericht 7% gewijzigd door FastFox91 op 23-04-2014 13:24:46 ]
pi_139190157
quote:
0s.gif Op woensdag 23 april 2014 10:10 schreef slacker_nl het volgende:
Crap, ik had een stukje tekst en die is nu weg.

In het kort, ik zag het ook in je PHP code, maar je doet aan code duplicatie, bijvoorbeeld in je compare:
[ code verwijderd ]

Verder zou ik niet
[ code verwijderd ]

Dat fixed je shit ook op een ander platform (denk Windows portability).

En verder had ik zo'n type interface ingedachte:
[ code verwijderd ]

Dat is dan je script.

Voordeel is dat je motiondetect volledig kan testen in een testfile, want alle logica zit in die module/class. Een script testen is toch wat lastiger.

En mocht er een camera API zijn anders dan picamera die dezelfde interface heeft dan kan je dat plugged en playend aanpassen.

Overigens zou ik ook nog in de docs van picamera kijken, je doet een resize en de docs zeggen dit:
http://picamera.readthedo(...)uring-resized-images

[..]

Verder moet je meer commentaar in je code zetten, en daarmee bedoel ik dat je je functies moet documenteren.
https://docs.python.org/devguide/documenting.html
https://google-styleguide(...)yguide.html#Comments (staan leuke dingen in, los van hoe te documenteren).

Tevens ben ik benieuwd naar wat er gebeurd als je een pad hebt wat niet aangemaakt kan worden, ga je dood of blijf je doorgaan? Ik zie namelijk nergens een die, throw oid.
Krijg je geen kramp in je pink van al die puntkomma's?
pi_139190253
quote:
12s.gif Op woensdag 23 april 2014 19:39 schreef thabit het volgende:

[..]

Krijg je geen kramp in je pink van al die puntkomma's?
Blijft wennen. Die catch deed ik ook per ongeluk. :@
  woensdag 23 april 2014 @ 20:03:13 #135
187069 slacker_nl
Sicko pur sang
pi_139191111
quote:
12s.gif Op woensdag 23 april 2014 19:39 schreef thabit het volgende:

[..]

Krijg je geen kramp in je pink van al die puntkomma's?
Ja;
In theory there is no difference between theory and practice. In practice there is.
pi_139197465
:D Ik ga morgen avond even inhoudelijk reageren maar heb wel 1 vette bug gevonden, misschien dat jullie zo de oplossing zien; het zit hem in het opslaan van de video, in de volgende stukjes code kijk ik of er beweging is en zo ja dan wil ik deze gegevens opslaan, echter voegt hij niets toe maar overschrijft hij steeds het bestand, is het mogelijk om het steeds aan elkaar toe te voegen? of zit ik dan met 'headers' van het h264 bestand (heb daar nog niet de documentatie doorgelezen, ga ik morgen doen).

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
  motion = detect_motion()
  if motion is not False and motion < motionPercent:
    print("{} -> Movement detected".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
    # set camera resolution for the motion video
    camera.resolution = (motionVideoWidth, motionVideoHeight)
    # open stream for the recording
    stream = picamera.PiCameraCircularIO(camera, seconds=5)
    camera.start_recording(stream, format = 'h264')

    while (motion):
      camera.wait_recording(1)

      if motion is not False and motion < motionPercent:
        # Once we've detected motion, keep recording for xx seconds and only then dump the stream to disk
        if DEBUG:
          print("{} -> Recording for {} seconds".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), motionVideoTime))
        camera.wait_recording(motionVideoTime)
        write_video(stream, motionFilename)
        
        # get new motion
        motion = detect_motion()
        
+      else:
        # set to false coz to low in percent to continue
        motion = False
          
    print("{} -> End recording".format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))
    camera.stop_recording()

    # remove motion frames, so we need to run multiple runs for new 'screens'    
    prior_image = None
    current_image = None
  
def write_video(stream, filename):
  """Write the entire content of the circular buffer to disk"""
  with io.open(filename, 'wb') as output:
    with stream.lock:
      for frame in stream.frames:
        if frame.header:
          stream.seek(frame.position)
          break
      while True:
        buf = stream.read1()
        if not buf:
          break
        output.write(buf)

stukje code komt van : https://github.com/wavefo(...)er/docs/recipes2.rst

Thanks wederom voor alle input, iets waar ik morgen weer ff mee bezig kan ;)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139198643
1open(filename, 'ab')
pi_139204499
quote:
0s.gif Op woensdag 23 april 2014 10:10 schreef slacker_nl het volgende:
Crap, ik had een stukje tekst en die is nu weg.

In het kort, ik zag het ook in je PHP code, maar je doet aan code duplicatie, bijvoorbeeld in je compare:
Klopt, op zich niet zo erg toch zolang het er maar geen 10+x in staat, maar heb het gelijk een functie gegeven ;)
1
2
3
4
5
6
7
8
9
10
11
def compareLoadImage(image):
  """Load image for comparing, resize and grayscale"""
  image1 = image.resize((8, 8), Image.BILINEAR)
  grayscale_pixels = map(avg, list(image1.getdata()))
  pixel_avg = avg(grayscale_pixels)
  
  return [(pixel > pixel_avg) for pixel in grayscale_pixels]

def compare(image1, image2): 
  """Return the hamming distance between to loaded, resized and getting grayscaled pixel data"""
  return ((64 - hamming_distance(compareLoadImage(image1), compareLoadImage(image2))) * 100) // 64
Beter? :+
quote:
Verder zou ik niet ..

[ code verwijderd ]

Dat fixed je shit ook op een ander platform (denk Windows portability).
Ik gebruik idd no os.path.join, is duidelijker ;)

quote:
En verder had ik zo'n type interface ingedachte:
[ code verwijderd ]
Dat is dan je script.

Voordeel is dat je motiondetect volledig kan testen in een testfile, want alle logica zit in die module/class. Een script testen is toch wat lastiger.

En mocht er een camera API zijn anders dan picamera die dezelfde interface heeft dan kan je dat plugged en playend aanpassen. [/qoute]

Hoeft voor mij niet, denk dat ik nog wel commandline opties ga toevoegen zodat ik het scriptje kan gebruiken voor bv alleen een timeleapse of juist alleen voor video's (motion) opnemen..

[quote]
Overigens zou ik ook nog in de docs van picamera kijken, je doet een resize en de docs zeggen dit:
http://picamera.readthedo(...)uring-resized-images
Doe ik reeds:
1camera.capture(stream, format = 'jpeg', use_video_port = True, resize = (motionShotWidth, motionShotHeight))

quote:
Verder moet je meer commentaar in je code zetten, en daarmee bedoel ik dat je je functies moet documenteren.
https://docs.python.org/devguide/documenting.html
https://google-styleguide(...)yguide.html#Comments (staan leuke dingen in, los van hoe te documenteren).
Is idd handiger, ben er al druk doende mee ;)

quote:
Tevens ben ik benieuwd naar wat er gebeurd als je een pad hebt wat niet aangemaakt kan worden, ga je dood of blijf je doorgaan? Ik zie namelijk nergens een die, throw oid.
Klopt, hoeft ook niet, ga er gewoon vanuit dat het werkt :P dit scriptje hoeft niet alles af te vangen :D

quote:
0s.gif Op woensdag 23 april 2014 22:48 schreef thabit het volgende:
Ga ik proberen! :) maar ben bang dat h264 video's niet zo werken :P

Voorbeeld: http://pastebin.com/xwaczyJL

[ Bericht 6% gewijzigd door Chandler op 24-04-2014 08:08:26 ]
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  vrijdag 25 april 2014 @ 15:46:26 #139
187069 slacker_nl
Sicko pur sang
pi_139253004
quote:
0s.gif Op donderdag 24 april 2014 07:46 schreef Chandler het volgende:

[..]

Klopt, op zich niet zo erg toch zolang het er maar geen 10+x in staat, maar heb het gelijk een functie gegeven ;)
[ code verwijderd ]

Beter? :+

Veel! Ik zie het ook vaker in je PHP code, dus je hebt er een handje naar ;)

quote:
Klopt, hoeft ook niet, ga er gewoon vanuit dat het werkt :P dit scriptje hoeft niet alles af te vangen :D

Dan kan die diskspace check er ook uit!
In theory there is no difference between theory and practice. In practice there is.
pi_139257965
quote:
0s.gif Op vrijdag 25 april 2014 15:46 schreef slacker_nl het volgende:
Veel! Ik zie het ook vaker in je PHP code, dus je hebt er een handje naar ;)
Valt toch wel mee? :D

quote:
Dan kan die diskspace check er ook uit!
Kan, maar vind een nette exit wel een stuk leuker :P en die andere extra's zijn juist bedoeld dat als ik bestanden verplaats en per ongelijk de directory ook mee neem, deze ook weer aangemaakt worden.. maar goed ben nog maar net begonnen met Python! dus heb nog een lange weg te gaan!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_139261229
Wel een heerlijke taal, Python. O+
pi_139261310
Op zich zekers, lekker basic zeg maar.. Alleen moet ik erg wennen aan het niet plaatsen van ; :P

Vrij snel voor mijn doeleinden! sneller iig dan PHP :P
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  dinsdag 29 april 2014 @ 19:49:41 #143
355592 Djurres
Knowledge, Fuck it.
pi_139386038
Ja, ik ga ook beginnen met python!
Mensen die hier bekend zijn met python icm de GPIO pinnen van een raspberry pi?
Tadumtiedum.
pi_139901427
Ik heb een script gevonden;
https://gist.github.com/astanin/626356

Nu wil ik deze gebruiken voor het vergelijken van afbeeldingen maar snap echt de ballen van de uitkomst van het script, ik zou liever in % willen zien hoeveel verschil er tussen de plaatjes zit.

Ik krijg nu resultaat terug in
Manhattan norm?
Zero norm?

Kan iemand mij hier een duidelijke uitleg over geven? eventueel helpen met aanpassen zodat ik het resultaat procentueel terug krijg? :D
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_140089548
Kwam een tijd terug Q tegen waarmee op CSV (bestanden) SQL queries uitgevoerd kunnen worden.

Voorbeelden:

find /tmp -ls | q "select c5,c6,sum(c7)/1024.0/1024 as total from - group by c5,c6 order by total desc"

q "select myfiles.c8,emails.c2 from exampledatafile myfiles join group-emails-example emails on (myfiles.c4 = emails.c1) where myfiles.c8 = 'ppp'"
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
pi_149464585
Te weinig activiteit, terwijl Python zo baas is.
pi_149465807
Ik heb vorige week mijn eerste functionele python scriptje gemaakt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/python

import serial, os
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=40)


while True: 
    line= ser.readline()
    print("iets gelezen")
    if 'VOL +' in line:
        print("volume omhoog")
        os.system("amixer -D pulse sset Master 1%+ > /dev/null")
    elif 'VOL -' in line:
        print("volume omlaag")
        os.system("amixer -D pulse sset Master 1%- > /dev/null")
                
ser.close()
En nu bediend ik mijn volume met de kaku afstandbediening. :7
pi_149465844
quote:
14s.gif Op zondag 8 februari 2015 10:56 schreef KomtTijd... het volgende:
Ik heb vorige week mijn eerste functionele python scriptje gemaakt.
[ code verwijderd ]

En nu bediend ik mijn volume met de kaku afstandbediening. :7
Haha nice. Python leent zich ook super makkelijk voor dit soort dingen. Shell scripts schrijven is eigenlijk overbodig geworden naar mijn mening. Tenzij het echt een paar commando's zijn of zo.

Wat ik wel eens heb is dat ik een grote batch met videobestanden download, die meerdere audio tracks hebben. Met mkvmerge kun je makkelijk de audio-tracks die je niet wilt verwijderen, maar dit zou je dan voor elk bestand moeten doen. Met Python had ik ook een quick 'n dirty-scriptje gemaakt dat even langs de bestanden itereert.

https://github.com/robin0(...)master/dubremover.py
pi_149466000
Ik heb echt een bloedhekel aan shell scripting, het is zo'n ontiegelijke syntactische bende... Krijg het nooit voor elkaar dat het gewoon in een keer werkt. Ik heb eerder voor ditsoort scriptjes vaak gewoon PHP gebruikt omdat ik dat ken, maar ga toch vaker python gebruiken denk ik. Toch wel erg makkelijk.
  zondag 8 februari 2015 @ 14:40:55 #150
230788 n8n
Pragmatisch
pi_149471609
Dwingt python nou 4 spaties af of mogen het ook tabs zijn? Beide uiteraard niet door elkaar
Specialization is for insects”.—Robert Heinlein
pi_149471999
quote:
0s.gif Op zondag 8 februari 2015 14:40 schreef n8n het volgende:
Dwingt python nou 4 spaties af of mogen het ook tabs zijn? Beide uiteraard niet door elkaar
Ik doe 2 spaties :P.
జ్ఞ‌ా
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')