Posted
over 14 years
ago
by
Reinout van Rees' weblog
Why does he care about telling us about design? He can't teach us design in
half an hour. What he can do is tell us about the design that we can do
something about. Design is just one of the things that you should know a
little bit
... [More]
about. Just like you must know a bit about databases,
optimization, caching, deploying, testing and so on, you must know a bit about
design. As programmer. Don Norman quote: attractive things work better.
The goal is sucking less. You're not going to be a great designer. A good
way of sucking less is doing less. Be minimal. You simply have less
opportunities to suck. It is also a bit of a trend nowadays to do more with
white space and to put less on a page. "Minimalist design".
He showed some examples. Just a few colors. A solid background. A couple of
1px dashed lines to add structure.
Create a visual hierarchy. Try to steer the visitor. Some things are
more important, some are less important. Add contrast for that. Add
discoverability.
Put your content front and center. That's the most important part. Squint
your eyes and look at your page: can you still make out the main content
block? Also: give your content room to breath. So add white space between
things. It helps set them off.
Contrast (color, or bold, or upper/lowercase) helps showing your hierarchy.
Emphasize (big, color) and de-emphasize (smaller and a bit grayer, for
instance).
Play with it. Steal ideas. Keep a folder with screenshots of (parts of)
pages that you like. You'll get better with time.
Design with a grid. You don't need a unique structure every time. You
can use one of the available css frameworks, for instance http://960.gs/ or
http://www.blueprint.org/. Such a grid seems to fit our brain and it
almost automatically looks OK. Just go with a grid and start with pencil and
paper.
Typography is not only font selection. It also means laying out your
letters on a page. There's loads of best-practices from our 574 years of
typesetting, but most of that got forgotten when we moved to the web. There's
more attention lately. Some things NOT to do:
Lines are normally set "solid". Set a line height of 1.3em to 2.0em so that
the lines are set a little bit apart. This is the biggest issue on most
websites.
Don't make the columns too wide (and thus the lines too long). Rule of thumb:
make your line about two alphabets (a-z a-z) long.
12 pt fonts. That's ok for books, but a computer screen is further away, so
16pt is better.
Too many fonts. Rule of thumb: just 2 or 3 typefaces, maximum. A good
guide is a sans-serif ("helvetica") for titles and serif for body text (for
instance Georgia).
Two highly recommended links: http://typographyforlawyers.com and
http://webtypography.net .
Most browsers (including IE since version 4.0) allow web fonts. You can use
more than those 8 standard fonts now. You can DIY (for instance with the
FontSquirrel font-face generator) or you can go with a hosted solution like
http://typekit.com/ (note that google also jumped into this lately with
typekit so those
fonts are now hosted using google's CDN).
Color. Choosing a good color scheme. Color theory is hard, it is a lot
like music theory. Watch out for localization as colors have different
meanings: in the west, white means purity, in the east it often means death...
If you don't know what to do, go with a monochromatic scheme. White/black
plus red, medium red, light red.
You can go with complementary (colors on the opposite sides of the color wheel)
and many others.
Two suggested sites for color schemes: http://colourlovers.com and
http://kuler.adobe.com .
Steal and learn. Look at http://patterntap.com/ or sites like that to get
design ideas. And read a free book http://designingfortheweb.co.uk/book .
Rules are meant to be broken. Just don't break too many at the same time.
Question: stealing? What are the legal issues? Answer: I didn't mean steal
steal, I meant lifting ideas. Don't copy someone's layout wholescale. Change
things.
Question: what about color blindness? Answer: hire an expect, this is hard.
Colors are hard. There's biology, culture, ...
[Less]
|
Posted
over 14 years
ago
by
gmane.comp.web.zope.announce
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Please note:
First of all, apologies for the cross-posting. I wanted to reach as many
people as possible.
On Thursday, May 27 (2 days from now) one of the Zope
Foundation-maintained servers will be
... [More]
physically moved to a different
data center by our hosting provider. The server will be shut down at
around 20:00 UTC and, according to the hosting provider, become
available again no later than 05:30 UTC the next day (Friday, May 28).
This outage will affect several websites as well as the mailing list
service. No mail sent to the lists will be lost, though, it will just be
queued up on our secondary mail relay, which is unaffected by this move.
Once the main server comes back up it will be delivered.
Services affected
=================
- the docs.zope.org website
- the download.zope.org website
- all zope.org mailing lists and the lists.zope.org website
Server shutdown
===============
Thursday, May 27 20:00 UTC
- 22:00 CEST/Berlin
- 16:00 EDT/New York
- [Less]
|
Posted
over 14 years
ago
by
Reinout van Rees' weblog
Peter Bengtsson picked MongoDB out of the available NoSQL databases just as it
seemed to be the best for his needs at the time. He had already 10 years of
NoSQL experience: zope's ZODB object database (which stores python pickles).
A
... [More]
NoSQL database matters as it can be much more performant than an SQL
database. MongoDB has some features that make it easier to step over from an
SQL database. Internally it uses BSON (JSON + some binary types, for instance
datetime). You can set it up in a master/slave configuration.
A big thing about MongoDB is that it is document-oriented, so it isn't a
simple key/value store and it also isn't a sql-like database with fixed
columns.
MongoDB has some implications:
No joins. Your code suddenly needs to work with pagination.
No transactions. You might need to change the way you code. You cannot
rely on rolling back a transaction, so perhaps your views have to do smaller
things. The speed advantage is huge, though, so it is also easier to write
smaller changes more often.
Polymorphism. It makes inheritance workable. Inheritance of structure
(awesome, according to Peter). You can ask for all "Pages", but also for
all "WikipediaPages" if that's a subclass.
IDs are hashes, not integers. So you'll have to change your \d+ regexes
in your urls.py.
The Django admin is one of the things that initially stop working when you
use MongoDB. Flatpages, piston, celery, etc. You can change things,
though, to get them working again.
The python bindings are explained in the API docs of pymongo. You probably also need
one of the "ORM"s for python and MongoDB. See the ming ORM or an article by Peter about
mongoengine and django-mongokit.
Peter has a suggestion on what to use when starting with NoSQL: MongoEngine. It is the least verbose and it has
automatic collection management. Django-mongoforms is nice for forms.
Look at the Django non-rel project that released
something nice just yesterday. So Peter warns that some of his talk might be
overtaken by reality by that. So look it up!
(About the photo: 1990 school trip to Berlin)
[Less]
|
Posted
over 14 years
ago
by
Reinout van Rees' weblog
I've just finished reviewing Carlos de la Guadia's Grok 1.0 web development
in the train on my way to Berlin for the EU Django conference :-)
End verdict: solid book that explains everything you need to get going
with Grok. Also valuable
... [More]
as reminder when you're more advanced as it is handy
to look up, for instance, how to best deploy your application or how to set up
users and security.
Next, I'll give my notes on a chapter-by-chapter basis, as that's the handiest
way for me to give my feedback on the book.
Chapter 1. Grok intro. Grok has three good things going for it: Zope's component
architecture; the object database; object publishing and traversal. All three
are explained. The Zope component architecture (ZCA) is, due to its brevity,
hard to follow if you don't know the terms ("adapter", "utility") beforehand.
Traversal: it just works. You can have an arbitrary hierarchy of objects and
Grok will traverse them just fine. Packt's default layout (huge headers, also
for "h3" headers) bites this chapter as page 12 just overflows with headers.
Not the author's error, though :-)
The comparison with ruby on rails and with Django are pretty much spot-on.
Grok is heavily inspired by RoR's "don't repeat yourself" and "convention over
configuration", but combines those with Zope's strong and clean component
architecture. Django also likes those two RoR characteristics. Django is
more focused on relational database back ends and wants to keep most major
parts private (its own ORM, its own template language, etc) to keep Django's
admin interface working. Grok doesn't provide such an admin interface, so it
is more free to reuse, for instance, sqlalchemy.
Chapter 2. Starting with Grok. Grokproject is a handy tool to generate a
Grok project complete with a buildout environment. It is basically a
well-tweaked wrapper around the Paster code generation tool. You get a
working application right out of the box, ready for customization.
Chapter 3. Views. As this is the first foray into customization land, some
of Grok's conventions need explaining. Followed by a LONG explanation of
Zope's TAL/TALES template language. Seemingly every Plone/Zope/Grok book
needs one of those. Powerful template language and nicely integrated with
html, unlike Django's curly braces stuff. The advantage of Django's curly
braces stuff is that it needs less explaining and that it is less verbose than
TAL's html/xml attributes. (I still really like TAL, btw).
A good thing about TAL is that it is easy to put dummy data in a valid
template so that you can see what you're doing. And so that you can already
do some css. And you can build up a proper page and flesh out what data
you're going to need from the code before even diving into python. That way,
you get better code. The book does this, too.
Chapter 4. Models. By default, Grok uses Zope's object database (ZODB).
Which is a more natural fit for python objects than an sql database with an
object-relation mapper (ORM) around it. The chapter nicely shows the
advantages. Including the container mechanism with which you can build
arbitrary hierarchies, should your data call for that (think content
management system or intranet, for instance).
Chapter 5. Forms. Every framework has a mechanism for generating forms from
some schema. Grok does too and the book explains how, including a handy list
of all available default schema types (choice field, URI, TextLine, etc).
Chapter 6. The catalog. Or: the jackpot! If you use the zodb, you can add
indexes to aid you in searching ALL your data. Full text search in all your
various text fields, anyone? Pure luxury. This chapter shows how Grok helps
you in setting it all up.
Chapter 7. Security. Zope's and thus Grok's security mechanism is powerful.
Per-object security out of the box instead of class-level security as offered
by default by most other frameworks. It does mean that the chapter is a tad
hard as there are a few layers of concepts to work through (users, principals,
roles, policies). And some of it is defined in an xml configuration and some
of it can be elegantly configured right in the code with Grok statements. The
chapter also explains how to add a "pluggable authentication utility" that
actually does the authentication and so. I've always wondered why one isn't
already included in Grok: I'm so used to having one available from my Plone
time... Anyway, the chapter explains how to set one up by hand.
Chapter 8. Layout. Grok has a nice way to set up your templates: a lot can
actually be handled in code. The template says to render a viewlet manager
and the code takes care of registering small viewlets to those viewlet
managers. That way the template doesn't have to bother about the number of
menu items, for instance: it just renders the menu viewletmanager. Real handy
to selectively inject something into the template from an object that actually
knows best when something is needed. Nicer than Django that doesn't have
something like that out of the box: you need to set something up yourself.
Before getting to that viewlet stuff, the chapter explains how Grok looks up
objects at all and how it renders views and templates after that. It came as
a bit of a surprise to me to find it here. Perhaps it was the best place
after all.
Grok has an opinion about layout. Django (which I'm working with now)
basically has no layout story: you need to set that up yourself. The
assumption clearly is that you're better off setting it up yourself after all
as sites' needs are wildly different. On the other extreme, Plone really
has a layout story, coming with a ready-made layout and a big main template.
Chapter 9. Grok and the ZODB. ZODB is that super-de-luxe easy-as-pie python
object database, remember? This chapter explains the ZODB details like ACID,
transactions, ZEO replication (really easy to set up replication of your
database!), packing, etc. Good explanation.
Chapter 10. Grok and relational databases. You didn't think Grok would
leave relation databases in the cold, now would you? This chapter shows you
how to tie sqlalchemy into your Grok project so
that you can use sql objects as first-class Grok citizens.
Chapter 11. Key concepts behind Grok. Grok uses all of Zope's component
architecture. Interfaces, adapters, events, etc. All are explained in this
chapter.
Adapters are the things I miss most when developing with Django now. I'd
really have to look into using it. You can use interfaces/adapters without
pulling in the whole of Zope, so there's nothing really stopping me... I
often have to render something on a map, so just calling for an adapter to
IMapRenderable or so would be handier than registering stuff in setuptools
entry points or in custom registries. BFG, another framework that uses some
Zope machinery, advocates wrapping all the Zope machinery in a small number of
custom api methods to hide the complexity (if I remember their docs
correctly). That might be a nice idea to try out.
Anyway, the chapter is very useful. A good intro on the various Zope concepts
that Grok uses.
Chapter 12. Grokkers. Hey, grok makes configuring your application and
setting up the Zope machinery easy. No xml sit-ups. You can do that
yourself, too! Build your own grokker. This chapter explains how. For those
coming from the Django world: Django effectively does something similar with
its model classes: there's a whole lot of setting-up going on behind the
scenes when you add one extra field to your model class!
For me, the chapter had a funny detail. As example, it set up a configuration
mechanism for sending emails. That's the very same subject on which I worked
on a grokker last year. This chapter sure would have been a great help to
have had next to my keyboard then!
Chapter 13. Testing and debugging. Not much to say here. Grokproject sets
you up with a pretty good ready-made testing setup. The chapter shows you all
the basics.
Chapter 14. Deployment. Also not much to say here. Solid chapter. The hint
to use mod_wsgi is a good one. And providing an explanation on how to set up
zeo database replication is good. Setting it up is not hard, but you do need
an example configuration.
Again my end verdict: solid book! Recommended if you do grok development.
[Less]
|
Posted
over 14 years
ago
by
Lennart Regebro: Open Source, Python, Web
My shelf of review copies of Packt Publishing books is getting, well packed. But that’s OK, I enjoy reviewing books, and they look good. The latest addition is the Plone 3 Products Development Cookbook by Juan Pablo Giménez and Marcos F. Romero. To
... [More]
my surprise this book is black and green, not Packt Publishings ordinary black and Orange. That probably won’t look as good in the shelf.
I wondered how useful a cookbook could be, it’s after all a series of “recipes”, telling you how to do one specific thing, and often you need to do something slightly different, and then the book might not be so useful. Reading the book dispelled those worries. Some of the specific recipes in this cookbook are how to set up a development environment, and installing and using various Plone development tools. That’s always useful. The book then goes on to explain how to make content types, create workflows, do caching and portlets etc, covering the most important parts of Plone development.
My major complaint with the book is that they focus the testing examples exclusively on doctests. Doctests are designed to test documentation. But there has been an unfortunate trend in the Zope and Plone world to do all testing as doctests, something which is evil in many ways. The book should come with a warning sticker: “Warning: Abuse of doctests can be dangerous to your sanity”.
Other than that, this book makes for a great entry book to Pone development, something that has been lacking in Packts set of Plone books. By the nature of the style of the book the recipes are sometimes lacking in depth, but they’ll get you 99% of the way there, which what entry books should do. It’s not a book for complete Plone newbies, you will need to know a bit of Plone first, for that I can heartily recommend “Practical Plone 3“. And no, I’m not paid by Packt Publishing to say that. They just send me the books for review, that’s all.
Plone 3 Products Development Cookbook book will also work fine for Plone 4 development. How to develop in Plone hasn’t changed that much between Plone 3 and 4. That said I’m hoping for a Plone 4 edition that has changed most of those doctests to normal tests.
Filed under: plone Tagged: book, packt, review [Less]
|
Posted
over 14 years
ago
by
PyPI recent updates
A Plone product that provides the PDF viewer FlexPaper.
|
Posted
over 14 years
ago
by
Weekly Zope Development Meeting
|
Posted
over 14 years
ago
by
gmane.comp.web.zope.announce
Grok 1.1 released!
==================
Grok 1.1 is a feature release of Grok preparing for the Zope Toolkit.
The major user visible change is Python 2.6 support. Grok 1.1 supports
Grok 2.6 and 2.5. Python 2.4 support is deprecated. Note that to
... [More]
install Grok on Windows, please use Python 2.6, not Python 2.5.
The other user visible change is a new version of the Grok UI. This
now uses a more extensible UI framework, and cuts down on
dependencies. You will also note that the Grok introspector has been
removed - we did this to cut down on dependencies for Grok, but we are
looking into ways to bring it back in the future.
Other user visible changes are relatively minor: see Grok's `change log`_ for
more.
.. _`change log`: http://pypi.python.org/pypi/grok
The main changes in Grok 1.1 are under the hood, however:
* Grok builds on a prerelease version of the `Zope Toolkit`_.
* New more reusable spin-off libraries Grok uses: grokcore.site,
grokcore.annotation and grokcore.content.
.. _`Zope Toolkit`: http:/ [Less]
|
Posted
over 14 years
ago
by
Jazkarta Blog
Attracting and keeping talented developers is the lifeblood of any open source project. Domen Kožar is one such developer. I met Domen at the 2009 Plone Conference and he showed me a thing or two about Vim that I didn’t know. He has already
... [More]
contributed to a number of Plone related projects. As he is currently a student, he needs a little help from the community so he can attend the Sauna Sprint. I am sure a lot of us can relate to the unique financial circumstances you find yourself in as a student. You can read more about his request here. This community has come through in the past to help a fellow member. I am asking, for a minimum donation of the cost of a beer in your country, help Domen get to the sprint. Let’s make this happen.
[Less]
|
Posted
over 14 years
ago
by
Grok News and Blog
Grok 1.1 is a feature release of Grok preparing for the Zope Toolkit. The major user visible changes are Python 2.6 support and new version of the Grok UI. The main changes in Grok 1.1 are under the hood: now Grok builds on a prerelease version of
... [More]
the Zope Toolkit.
Grok 1.1 should be compatible with Grok 1.0. Grok 1.1 lets you prepare for the upcoming Grok 1.2 release by updating your imports.
For more information about this release, see the release info:
http://grok.zope.org/project/releases/1.1 [Less]
|