Printing the Web: CSS-Techniques
2011-02-04
2011-02-04
2011-01-26
The only interesting answers are those that destroy the questions
2010-12-20
«What are the differences between Mark Zuckerberg and me? I give private information on corporations to you for free, and I’m a villain. Zuckerberg gives your private information to corporations for money and he’s Man of the Year.»
— Julian Assange on SNL
2010-12-10
Yoann Bourgeois encore, avec des balles, sur france3.
2010-12-10
Step Motion Flight par la compagnie Yoann Bourgeois
2010-11-17
Rosab propose une interface zoomable pour son nouveau numéro. En Flash™, avec un antialiasing pas très heureux et une tendance à pédaler un peu. Principe intéressant, quoi qu'il en soit. Ma propre tentative javascript s'était soldée par un scroll horizontal multidirectionnel mais à une seule dimension. Scroll rendu délicat par une surface de scroll trop importante.
2010-11-17
2010-11-16
currybetdotnet is Martin Belam’s blog about information architecture, journalism and digital media. Martin Belam works for the Guardian as Information Architect on the guardian.co.uk website.
2010-11-15
On en parle beaucoup a beaucoup parlé un peu partout. Sur Le Typographe (deux fois) et 2 ou 3 choses, entre autres lieux fréquentables. À mon tour doc ;
Ypsilon éditeur publie Roger Excoffon et la fonderie Olive.
Christian Schwartz – à moins que ce ne fût Paul Barnes – disait l'autre jour sur twitter :
Just received our studio copy of “Roger Excoffon et la fonderie Olive”. BRILLIANT. My favorite book of the year.
Sandra Chamaret (venue récemment en workshop Design d'information à l'ESAC), Julien Gineste, Sébastien Morlighem en sont les auteurs apparemment très inspirés.
Pour mémoire – et on notera le référentiel états-unien assez paradoxalement marqué – Ken Barber (House Industries) disait :
Typetheory : What typeface do you look at and say, “I wish I had created that!”
Ken Barnes : Anything by Roger Excoffon.
2010-11-10
Le design graphique est un langage qui communique des idées, des émotions et des valeurs. C’est une langue vivante qui ne peut évoluer et s’épanouir que lorsqu’on maîtrise parfaitement sa syntaxe et qu’on connait son vocabulaire.
Le design graphique est partout. Les supports se multiplient, mais son rôle demeure : donner du sens, expliquer, convaincre.
Le design graphique a la responsabilité d’agir et de participer à la société comme source de richesse, de culture et de fierté.
2010-11-09
2010-11-08
2010-11-03
2010-11-03
2010-11-03
Sur bitbucket, un gestionnaire d'uploads / sélecteur de médias pour django : django-adminfiles
Voir sur viméo la démo du fonctionnement côté admin django.
Et pour l'embed d'élements dans les pages publiques (parsing de html brut), djangoembed sur pypi.
2010-11-03
Sentry provides you with a generic interface to view and interact with your error logs. By default, it will catch any exception thrown by Django and store it in a database. With this it allows you to interact and view near real-time information to discover issues and more easily trace them in your application.
— Sentry
2010-11-03
2010-11-02
Art direction is about evoking the right emotion, it’s about creating that connection to what you’re seeing and experiencing.
— Dan Mall captures the perfect definition of art direction in A List Apart 317. (via 9-bits)
2010-10-31
2010-10-25
In graphic design, nothing is what it actually is. Everything other than content is representative of something else. Additionally, much of the content is also merely representative of something other than what it actually is.
2010-10-22
Sergio Alves, young designer from Porto.
2010-10-22
2010-10-22
2010-10-22
2010-10-22
2010-10-22
2010-10-21
2010-10-15
via butdoesitfloat
2010-10-15
2010-10-13
2010-10-04
2010-09-15
2010-09-14
Quelques références pour Sass, extension ruby de génération de css, qui permete l'utilisation de variables, règles imbriquées, mixins, imports en ligne, génération de png base-64, etc. :
Sass et sa documentation ;
Compass : mixins, includes et « framework » pour sass ;
Lemonade : bientôt intégré à Sass, un générateur de sprites.
2010-09-07
After nearly five years in which Vollkorn became famous in the web and world it gets two crispy sisters : Italic and Bold-Italic.
— Friedrich Althausen, Typographer and Type Designer, Weimar, Germany
2010-08-23
Le layout de l'application est similaire à celui décrit par Zachary Voase ici: http://blog.zacharyvoase.com/2010/03/05/django-uwsgi-nginx/#configuration
Tout est question de chemin…
``` export PROJECT_NAME="myproject" export VIRTUAL_ENV="myprojectenv"
```
Créer un répertoire locale
à la racine du projet
``` workon $VIRTUAL_ENV cdvirtualenv cd $PROJECT_NAME mkdir locale
```
Créer un répertoire par localisation dans locale
cd locale
mkdir fr en
Configurer le LOCALE_PATHS
dans les settings de Django
```
LOCALE_PATHS = (
SITE_ROOT / 'locale'
)
```
Lancer le makemessages
```
DJANGO_SETTINGS_MODULE="$PROJECT_NAME.settings.development" PYTHONPATH=".." django-admin.py makemessages --settings=$PROJECT_NAME.settings.development -s -a $ import sys, warnings, os, fnmatch, glob, shutil, codecs, md5 $ processing language fr
DJANGO_SETTINGS_MODULE="$PROJECT_NAME.settings.development" PYTHONPATH=".." django-admin.py makemessages --settings=$PROJECT_NAME.settings.development -s -a -d djangojs -e.html,.js
```
Compiler les messages traduits
DJANGOSETTINGSMODULE="$PROJECTNAME.settings.development" PYTHONPATH=".." django-admin.py compilemessages --settings=$PROJECTNAME.settings.development
2010-08-23
2010-08-23
to enable that, set
LOCALE_PATH
in your settings pointing to directory containing locales, e.g.
import os SITE_ROOT = os.path.dirname(os.path.abspath(__file__)) LOCALE_PATHS = ( os.path.join(SITE_ROOT, 'locale') )
2010-08-20
2010-08-04
À nettoyer, modifier, améliorer… Emprunté au snippet MediaWikiMarkup
Usage :
{{ object.html_text|createToc }}
Code :
```
from django.template import Library import re from django.template.defaultfilters import slugify, striptags
register = Library()
_headerPat = re.compile(ur"<Hh(.?)>(.?)", re.UNICODE) _tagPat = re.compile(ur"<.*?>", re.UNICODE)
def createToc(text, extractToc=None, noToc=None):
# Get all headlines for numbering them and adding funky stuff like [edit]
# links - this is for later, but we need the number of headlines right now
matches = _headerPat.findall(text)
numMatches = len(matches)
# if there are fewer than 4 headlines in the article, do not show TOC
# unless it's been explicitly enabled.
enoughToc = (numMatches >= 3)
# headline counter
headlineCount = 0
# Ugh .. the TOC should have neat indentation levels which can be
# passed to the skin functions. These are determined here
toc = []
head = {}
sublevelCount = {}
levelCount = {}
toclevel = 0
level = 0
prevlevel = 0
toclevel = 0
prevtoclevel = 0
refers = {}
refcount = {}
wgMaxTocLevel = 5
for match in matches:
headline = match[2]
if toclevel:
prevlevel = level
prevtoclevel = toclevel
level = matches[headlineCount][0]
if enoughToc:
if level > prevlevel:
toclevel += 1
sublevelCount[toclevel] = 0
if toclevel < wgMaxTocLevel:
toc.append(u'\n<ul class="toc">')
elif level < prevlevel and toclevel > 1:
# Decrease TOC level, find level to jump to
if toclevel == 2 and level < levelCount[1]:
toclevel = 1
else:
for i in range(toclevel, 0, -1):
if levelCount[i] == level:
# Found last matching level
toclevel = i
break
elif levelCount[i] < level:
toclevel = i + 1
break
if toclevel < wgMaxTocLevel:
toc.append(u"</li>\n")
toc.append(u"</ul>\n</li>\n" * max(prevtoclevel - toclevel, 0))
else:
if toclevel < wgMaxTocLevel:
toc.append(u"</li>\n")
levelCount[toclevel] = level
# count number of headlines for each level
sublevelCount[toclevel] += 1
# The canonized header is a version of the header text safe to use for links
canonized_headline = slugify(headline)
# strip out HTML
tocline = striptags(headline)
# Save headline for section edit hint before it's escaped
headline_hint = tocline
canonized_headline = slugify(tocline)
refers[headlineCount] = canonized_headline
# count how many in assoc. array so we can track dupes in anchors
if canonized_headline not in refers:
refers[canonized_headline] = 1
else:
refers[canonized_headline] += 1
refcount[headlineCount] = refers[canonized_headline]
# Create the anchor for linking from the TOC to the section
anchor = canonized_headline;
if refcount[headlineCount] > 1:
anchor += u'_' + unicode(refcount[headlineCount])
if enoughToc:
toc.append(u'\n<li class="toclevel-')
toc.append(unicode(toclevel))
toc.append(u'"><a href="#')
toc.append(anchor)
toc.append(u'">')
toc.append(u'<span class="toctext">')
toc.append(tocline)
toc.append(u'</span></a>')
# give headline the correct <h#> tag
if headlineCount not in head:
head[headlineCount] = []
h = head[headlineCount]
h.append(u'<h')
h.append(unicode(level))
h.append(u' id="')
h.append(anchor)
h.append('">')
h.append(matches[headlineCount][1].strip())
h.append(headline.strip())
h.append(u'</h')
h.append(unicode(level))
h.append(u'>')
headlineCount += 1
if enoughToc:
if toclevel < wgMaxTocLevel:
toc.append(u"</li>\n")
toc.append(u"</ul>\n</li>\n" * max(0, toclevel - 1))
#toc.insert(0, u'<table id="toc" class="toc" summary="Contents"><tr><td><div id="toctitle"><h2>Contents</h2></div>')
toc.append(u'</ul>\n')
# split up and insert constructed headlines
if extractToc is not None:
full = []
if enoughToc :
full += toc
full = u''.join(full)
return full
else:
blocks = _headerPat.split(text)
i = 0
len_blocks = len(blocks)
full = []
while i < len_blocks:
j = i/4
full.append(blocks[i])
if enoughToc and not i :
if noToc is not None :
full += toc
toc = None
if j in head and head[j]:
full += head[j]
head[j] = None
i += 4
full = u''.join(full)
return full
"""
return text
"""
register.filter(createToc)
```
2010-07-29