Posted
2 days
ago
by
Reinout van Rees' weblog
It is about collaboration between healthcare professionals. A patient record
shared between several health actors in charge of a common patient. The
family doctor has a coordinating role.
There's already a lot of health care open source
... [More]
software, but they don't talk
together. So there is a need for a more modular approach in order to share
those components. Python seems a good match for the project, but they need
technical help for this. See the open source working groups of the
The GAE isn't really portable. That's just for practical issues, not by
design. One of the barriers is the datastore. So he chose to reimplement
the datastore (as alternatives weren't practical yet). Targeting small to
medium apps. In the end he went for BDB which shared some features with the
original google data store. He uses java for it, for instance as Python's
protocol buffers are dog slow. And the java implementation of BDB is pretty
good and solves some issues with the normal BDB.
Python and excel: you could use CSV or the "HTML hack". There's something
better: . This can directly read
and write excel files.
It collects declared dependencies between eggs as a tree. And it can
visualize them using dot/graphviz. You can filter out uninteresting packages
(like setuptools) and zoom in on the dependencies of one specific package.
You can also group for instance all zope.tal.* packages into one zope.tal node
to make the image cleaner. And you can even filter by regular expression.
is an open access server platform for
institutional repositories. The server manipulates OAI feeds that are in some
xml format. One of the users is which actually is the birth
place of Python. Infrae harvested the 8963 documents in CWI's repository. So
in the demo Kit was able to find 16 documents by a certain Guido van Rossum
from 1995.
So 14 years after Guido left CWI, the first fully fledged Python application
is installed at CWI. Python has come home!
He demonstrates amazon's cloud stuff. Cloudware is outsourced virtualization.
So a virtual server or storage hosted on a remote platform. The two well
known once are Amazon Web Services and Google's app engine. It is good for
scaling on demand. And you can get some outsourcing of your
infrastructure. The oldest of Amazon's web services is S3, the storage
solution. There are Python libraries to connect to it and manage it.
Shooting is not too good for my enemies. There is no software bug for which
shooting is not the good solution.
Take a 5 year old as an advisor. They will always spot the flaws in your
plans. So always have someone else look at your code.
Do not consume any more energy than will fit in your head. So no
metaclasses.
If I have an unstoppable superweapen, I will use it as early and often as
possible. So pdb instead of print statements.
"Push the button" should be enough. Automate everything. Don't do long
manual steps or the hero will slay you.
Governments are turning the internet and the mobile networks into the greatest
mass surveillance system ever. Iran likes that as it can use
surveillance software and our data-retaining mobile infrastructure to retain
all the protesters SMS messages and analyze them afterwards... So our western
measures enacted for our protection is going to send thousands of Iranians
into the torture chambers.
And the government in some countries is allowed to put trojan horses on your
devices. And the government in Germany can in the future sensor any webpage
they want. Just by executive decision instead of democratic process. And
France tries to put a three-strikes law into effect.
And all that even though the internet is so great. But it is turning into a
huge surveillance database for the government. There are technical
counter-strategies. Unlocatable content. Untrackable connections.
Untrackable access. And there are political counter-strategies like blogging,
involvement, twitter, etc.
He showed an event-like system used for re-rendering placeholder-tags in an
html page with the real content.
At the end of July there'll be a European conference for Python in science in
Leipzig, Germany.
They're working on a new Python IDE: pycharm. Currently a plugin for intelliJ
IDEA, but soon standalone. See . Price not yet
announced, should be available later this year.
He demoed it with nice warnings, quite intelligent autocompletion. Integrated
test support. Snippets. Display of docstrings for methods with just a
keyboard shortcut.
He showed a speed test of a normal and a pure Python property implementation
to see how much psyco2 can speed that up. On average, there was a 100x
improvement. There'll be a psyco2 release on Saturday.
There are self-service terminals at his university (Wirtschaftsuniversitaet
Wien), implemented with Python, for paying study fees, taking photos, etc. So
a card reader, printer, touch screen, etc. All vandal-proof.
The hardest thing of the project was to communicate with all the hardware.
There's a watchdog that monitors a subversion repo for updates. And it starts
the main program. Zope is used with xmlrpc for the data. The data is stored
in an oracle database. The use mostly WXPython widgets for the user
interface. Quite big buttons as the interface is a touch screen.
Please use political activism to prevent the recording industry from being
allowed to lift us from our beds in the middle of the night for horrid crimes
like downloading stuff or even developing open source software. It a
very real danger. We prevailed against software patents after a long
struggle. There must
be the ones to do the talking.
PSI is a Python C extension to get information from the kernel via system
calls and kernel hooks and so. It currently supports most unixy platforms
already, but BSD is lacking and windows too. They do want to add that.
. Erlang is a
functional language with a focus on scalability. There is an "ERM" protocol
to communicate between nodes, which is documented. CouchDB is one of the nice
applications made with Erlang. But as a Python programmer we want to access
that too.
TwOTP has parsing/packing to/from Python types, an EPMD deamon implementation
and implementations for server and client protocols. And monitoring of Erlang
processes. Send and receive messages from/to Erlang processes. The good
thing: every Python goodie is available to develop with, like UI, web
libraries and database interfaces. Several of those things are hard(er) with
Erlang.
Most numerical analysis is still done with Fortran. Not nice. So he tried to
do it with Python. All the goodies like eigenvalues, green functions, plots
of the green functions. The number of lines in the program was much lower
than with a comparable Fortran program. He hopes that the Python community
will work towards promoting the scientific application of Python. It is so
much nicer.
Filterpype: "complex systems in 10 lines of code". A classic case of a filter
and pipe system is an oil refinery. With filterpype you can also work with
pipes and filters: from source to sink.
There are base classes for all sorts of filters. Stuff you can do? Just pass
it on, bzip compression, etc. You tie the filters together in a pipeline with
a small config file that specifies the route between the various filters.
Django's admin interface is highly customizable. At his company he needed to
make some modifications, especially adding reports for their issues database.
In the end, he generated reports with word by using a template in word's xml
format where he could get the software to fill in data. The template was
simply uploaded to the site. The documentation on how he did it is all on the
wiki of djangoproject.org.
Use it, it really changes the way you program. It is real easy to make a
clean copy of something, work on it and possibly push the changes back. He
thinks there should be more tools like that. For instance for bug reports:
there is a tool that embeds bug reports in such a DVCS.
is something that he made that
embeds a wiki in the DVCS, including the whole page history. It comes with a
small web server that you run straight from your DVCS checkout, so you can
easily browse your version of the wiki and even change it via the web
interface. And also directly in the source file, of course. [Less]
Posted
2 days
ago
by
Zea Partners News
A Plone "Intelligent Intranet" suite of applications, integrating document and dossier management with ISO 9001:2000 - certified organization processes, used in a mid-sized Italian Public Organization, is going to be reused by other similar organizations of the Italian PloneGov subcommunity
Posted
2 days
ago
by
Reinout van Rees' weblog
Comment beforehand: this is just a dump of some quotes hurriedly typed down
while Martijn rattled on. Pick some nice ones out of the list and be happy.
This talk is about creativity in programming. Especially creating open
... [More]
source
software. Some of his comments will contradict each other, which is fine.
Both are valid, then, and just need to be weighed against each other. Sleep
on it, pick one and change it later on if you're wrong.
. You might not reach it, but you at least
created something.
If you are inexperienced with the tools of creation, find a mentor. (He was
helped by his father for his first project).
Inexperienced programmers often look for a trick or code snippet if they
encounter a problem without understanding it. They lack the knowledge to
really apply the basic idea in other situations. Knowledge helps to
generalize and generalization helps creativity.
Access to knowledge is greatly improved. Even early-80's MSX assembly codes
are easy to google now.
If all goals look infeasible, you might not create anything at all. Writing a
computer game in the 1980's seemed feasible. Writing a full 3D game now?
Seems hard.
something from
it.
Networks stimulate creation. Networks bring creations in front of
people.
Martijn re-discovered the joy of quick creation in 1998 with python like he
had with basic (in contrast to C++).
God said
"let there be light" and there was light) sometimes also works for people.
Speak up, announce something, start something.
A community around software forms more easily if the software aims at
developers instead of end-users as developers are more easily converted to
contributors.
To create a business together with someone else is one of the most educational
things you can ever do with your life.
A creation is successful if it continues to evolve after you're no longer
involved.
It is easier to make a creation evolve without you if you are not alone in its
creation.
Getting an idea is often overvalued. Implementation is most-times what
counts.
If you want a community to create something, avoid doing all the work
yourself.
Name recognition is useful in creation. Just making regular noise on a
mailinglist might be enough.
Europython was basically started by Martijn. He mailed Guido that there was
to be a EU python conference and whether he wanted to attend ("yes"). Then he
mailed around in the EU that Guido was coming to the EU python conference and
asked for volunteers to help organize it. So others did the work and we have
now Europython conferences.
Create something because it is cool. Not because it will succeed but because
you will learn something from it.
Integration is a form of creation. Integration of software can integrate
communities. (Example: the Five project that brought zope2 and zope3 back
together).
Talk about what you create. Use some oft-repeated phrases in those talks.
"Evolution, not revolution" for instance. After a while people were picking
up these phrases.
Separate concerns. Each component gets a clearer purpose and clearer
boundaries. And the basic components become candidates for reuse. [Less]
Posted
2 days
ago
by
Reinout van Rees' weblog
. Several
languages have something like that. C++'s template metaprogramming (which is
too difficult for most people). Java has aspect oriented programming and
annotations. Ruby can add methods to metaclass objects. Python first
... [More]
had
metaclasses and moved on to the much simpler decorators afterwards.
You use metaprogramming when you start to repeat yourself over and over again
but you cannot filter out a common method or base class.
Built-in decorators in python are @property, @classmethod, @contextmanager.
Twisted, turbogears, django and zope all have their own decorators for common
tasks. Someone came up with an argument checker for
checking the type of method arguments. And a decorator can store
a method's result in a cache so that the method only has to calculate
everything once and that the cached value is returned afterwards, all without
having to deal with it in the method itself as the decorator handles it in a
generic manner.
def addstring(function):
function.mystring = 'added string'
return function
@addstring
def f():
return 1
>>> f()
1
>>> f.mystring
'added string'
decorator gets passed the item it applies to and returns
it again. But modifying it in-between. The way it works is extremely simple,
but the effect is big and very useful. It gets a bit more evolved when you want to
pass an argument to the decorator (), but that's what
examples are for. See for instance the
. They work on a whole class
instead of on a function. Typical use is to register the class somewhere or
to augment it. For example adding the rest of the
ordering methods give one of
Metaclasses are still part of the python language. A big problem is that a
metaclass is more or less hidden; decorators are visible right in front of
your class, on the line above. In plain sight. Metaclasses are much harder
to understand and should only be used in special cases.
in
addition to is what gets fed into
, so if you need to do some fiddling with the inheritance tree
or other specialized weird thing, you can just use instead of
using metaclasses.
Again, if you only want to add some attributes/methods or register the class
or so: just use a simple decorator.
) presentation on "class decorators:
radically simple", see
Summary: decorators are easy and very useful. Don't forget to use
.
Metaclasses are hardly ever needed and when you need it you'll that you
need it. [Less]
Posted
3 days
ago
by
Reinout van Rees' weblog
the semantic web is a construction
game
The value of a network like the current internet grows exponentially with the
amount of information that is available and linked. The semantic web extends
that linking to data instead of just
... [More]
documents.
The semantic web is a world-wide database with URLs as the keys into the
"database". Specific semantic web formats include RDF and OWL. And
ontologies describe what you're describing. There's even a specific query
language: SPARQL.
Our current frameworks don't really support all this, so we need adapted
frameworks. For instance what did with
cubicweb. Cubic has a couple of core concepts. An entity-relationship model
of the data. Views to present results of queries (RQL, soon SPARQL). The
visible web app uses html and json views; there are also views that
output rdf and owl.
Cubicweb's back-end combines/aggregates various sources such as sql, RQL, LDAP,
comma separated files and is queryable with RQL. So if you don't like the
second layer (the web engine), you can always reuse the back-end layer as that
only communicates with plain queries. The aggregation allows you to store for
instance metadata in an sql database ("last modification time" and so),
cubicweb will aggregate it. In his demo at the end he showed turbogears as a
front-end as proof that you can use the back-end separately.
For the front-end, there is support for partially generated user interfaces.
And there is a library of reusable components (called "cubes").
They're keen on agile methodologies at Logilab. So cubicweb supports that.
For instance by generating a basic CRUD (create, delete, etc) user interface
based on a data model. That's all you need to get started. You can then
improve views progressively. And there's support for data migration as the
data of course also evolves. They're using cubicweb internally in logilab for
5 years now and always managed to migrate the older content.
Aformentioned "cubes" are python classes that define their attributes in a
schema style (like zope's schema). There are more frameworks that do that
now, but 7 years ago it was much less common. Those entities are tied
together by relations: also a class, but now with a and an
attribute (so source/target for the relation). Semantic web style
linking! Cubicweb aggregates all those cubes' content so that you can query
it.
Some examples of build-in semantic views: owl, foaf (friend of a friend,
social networking), doap (description of a project) and a couple of common
microformats as RDFa, iCal, vCard. [Less]