Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 27bd360abe | |||
| c5744585c7 | |||
| 2bd6f8ae21 | |||
| 0d5d5ce535 | |||
| 4ece9e9079 | |||
| 1b0c92e45a | |||
| fa98b0b0e0 | |||
| 96e12bce83 | |||
| b7fb9738a1 | |||
| 1805967833 | |||
| 10347ec588 | |||
| 7cb4f1d3d7 | |||
| 4b642fa48a | |||
| f99bea97ef | |||
| e029a1fc35 | |||
| 05c92a1738 | |||
| 7b93925d00 |
@@ -1,3 +1,12 @@
|
||||
v0.5 (05/06/2016)
|
||||
** User **
|
||||
|
||||
** Dev **
|
||||
|
||||
** Bugs **
|
||||
Some robots doesn't set referer when they try to add comment
|
||||
|
||||
|
||||
v0.4 (22/05/2016)
|
||||
|
||||
** User **
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Dynastie is static blog generator delivered under GPL v3 licence terms.
|
||||
|
||||
Current version is 0.4
|
||||
Current version is 0.5
|
||||
|
||||
Requirements :
|
||||
Django >= 1.8, libapache2-mod-wsgi if you want to use Dynastie with Apache. PyGments (Optional).
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
"""
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from dynastie.models import Language
|
||||
|
||||
class UserProfile(models.Model):
|
||||
# This field is required.
|
||||
@@ -26,3 +27,6 @@ class UserProfile(models.Model):
|
||||
|
||||
# Other fields here
|
||||
editor = models.CharField(max_length=20, default="TinyMCE")
|
||||
|
||||
default_language = models.ForeignKey(Language, on_delete=models.CASCADE)
|
||||
|
||||
|
||||
+3
-2
@@ -33,16 +33,17 @@ class PostForm(ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = Post
|
||||
exclude = ('title_slug', 'creation_date', 'modification_date', 'author', 'blog', 'tags', 'content_format')
|
||||
exclude = ('title_slug', 'creation_date', 'modification_date', 'author', 'blog', 'tags', 'content_format', 'post_type')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(PostForm, self).__init__(*args, **kwargs)
|
||||
self.fields['category'].choices = [(cat.id, cat.name) for cat in Category.objects.all()]
|
||||
self.fields['language'].choices = [(lang.id, lang.name) for lang in Language.objects.all()]
|
||||
|
||||
class DraftForm(PostForm):
|
||||
class Meta:
|
||||
model = Draft
|
||||
exclude = ('title_slug', 'creation_date', 'modification_date', 'author', 'blog', 'tags', 'content_format', 'published')
|
||||
exclude = ('title_slug', 'creation_date', 'modification_date', 'author', 'blog', 'tags', 'content_format', 'published', 'post_type')
|
||||
|
||||
class CategoryForm(ModelForm):
|
||||
class Meta:
|
||||
|
||||
@@ -77,7 +77,7 @@ class Atom(RSS):
|
||||
return
|
||||
|
||||
f = open(filename, 'rb')
|
||||
post_content = '<![CDATA[' + f.read() + ']]>'
|
||||
post_content = '<![CDATA[' + f.read().decode('utf-8') + ']]>'
|
||||
f.close()
|
||||
|
||||
if post.content_format == Post.CONTENT_TEXT:
|
||||
|
||||
@@ -22,6 +22,7 @@ import hashlib
|
||||
import gzip
|
||||
import math
|
||||
import codecs
|
||||
import re
|
||||
from xml.dom import *
|
||||
from xml.dom.minidom import parse
|
||||
from xml.parsers.expat import *
|
||||
@@ -32,7 +33,7 @@ class StrictUTF8Writer(codecs.StreamWriter):
|
||||
value = ''
|
||||
|
||||
def __init__(self):
|
||||
self.value = u''
|
||||
self.value = ''
|
||||
|
||||
def write(self, object):
|
||||
object = object.replace('<', '<')
|
||||
@@ -41,17 +42,17 @@ class StrictUTF8Writer(codecs.StreamWriter):
|
||||
object = object.replace(''', "'")
|
||||
object = object.replace('&', '&')
|
||||
|
||||
if not type(object) == unicode:
|
||||
self.value = self.value + unicode(object, 'utf-8')
|
||||
if type(object) == bytes:
|
||||
self.value = self.value + object.decode('utf-8')
|
||||
else:
|
||||
self.value = self.value + object
|
||||
return self.value
|
||||
|
||||
def reset(self):
|
||||
self.value = u''
|
||||
self.value = ''
|
||||
|
||||
def getvalue(self):
|
||||
return self.value
|
||||
return self.value.encode('utf-8')
|
||||
|
||||
class DynastieGenerator:
|
||||
|
||||
@@ -64,7 +65,8 @@ class DynastieGenerator:
|
||||
self.hash_posts = hash_posts
|
||||
self.hash_posts_content = hash_posts_content
|
||||
self.user = request and request.user or None
|
||||
|
||||
self.iframe_re = re.compile(r'(<iframe.*)/>')
|
||||
|
||||
def addReport(self, string, color=''):
|
||||
if string in self.report: return
|
||||
if color:
|
||||
@@ -94,8 +96,10 @@ class DynastieGenerator:
|
||||
|
||||
writer = StrictUTF8Writer()
|
||||
node.writexml(writer)
|
||||
content = writer.getvalue().encode('utf-8')
|
||||
|
||||
content = writer.getvalue().decode('utf-8')
|
||||
# iframe tag must be like <iframe ... ></iframe>, not optimized <iframe ... />
|
||||
content = self.iframe_re.sub('\\1></iframe>', content).encode('utf-8')
|
||||
|
||||
dst_md5 = hashlib.md5()
|
||||
dst_md5.update(content)
|
||||
|
||||
@@ -105,6 +109,10 @@ class DynastieGenerator:
|
||||
else:
|
||||
cache_obj = cache_objs[0]
|
||||
|
||||
if cache_obj and not os.path.exists(filename):
|
||||
cache_obj.delete()
|
||||
cache_obj = None
|
||||
|
||||
if cache_obj or os.path.exists(filename):
|
||||
if not cache_obj:
|
||||
src_md5 = hashlib.md5()
|
||||
@@ -160,8 +168,8 @@ class DynastieGenerator:
|
||||
for node in subtree.childNodes:
|
||||
div.appendChild(node.cloneNode(True))
|
||||
|
||||
def createElement(self, dom, name='', content='', subtree=None):
|
||||
div = dom.createElement('div')
|
||||
def createElement(self, dom, name='', content='', subtree=None, _type='div'):
|
||||
div = dom.createElement(_type)
|
||||
if name:
|
||||
div.setAttribute('class', name)
|
||||
if content:
|
||||
@@ -186,7 +194,7 @@ class DynastieGenerator:
|
||||
if node.prefix == 'dyn':
|
||||
if node.localName in values:
|
||||
content = values[node.localName]
|
||||
if isinstance(content, basestring):
|
||||
if isinstance(content, str):
|
||||
new_elem = self.createElement(dom, node.localName, content)
|
||||
else:
|
||||
new_elem = self.createElement(dom, node.localName)
|
||||
@@ -245,7 +253,7 @@ class DynastieGenerator:
|
||||
dom2 = root
|
||||
try:
|
||||
dom2 = parse(src + '/' + filename)
|
||||
except ExpatError, e:
|
||||
except ExpatError as e:
|
||||
self.addError('Error parsing ' + src + '/' + filename)
|
||||
return root
|
||||
|
||||
@@ -257,12 +265,11 @@ class DynastieGenerator:
|
||||
return root
|
||||
blockname = block.getAttribute('name')
|
||||
for target_block in target_blocks:
|
||||
|
||||
if blockname != target_block.getAttribute('name'):
|
||||
continue
|
||||
|
||||
for child in target_block.childNodes:
|
||||
block.parentNode.appendChild(child.cloneNode(True))
|
||||
block.parentNode.insertBefore(child.cloneNode(True), block)
|
||||
block_found = True
|
||||
break
|
||||
block.parentNode.removeChild(block)
|
||||
|
||||
@@ -157,10 +157,10 @@ class Index(DynastieGenerator):
|
||||
create_link = (title_elem.getAttribute('link') == '1')
|
||||
post = self.cur_post_obj
|
||||
if create_link == True:
|
||||
node = self.createElement(dom, 'title')
|
||||
node = self.createElement(dom, 'title', _type='h2')
|
||||
node.appendChild(self.createLinkElem(dom, post.getPath(), post.title))
|
||||
else:
|
||||
node = self.createElement(dom, 'title', post.title)
|
||||
node = self.createElement(dom, 'title', post.title, _type='h2')
|
||||
|
||||
root.replaceChild(node, title_elem)
|
||||
|
||||
@@ -240,10 +240,11 @@ class Index(DynastieGenerator):
|
||||
if not user: user = post.author
|
||||
# Markdown replace
|
||||
if not post or (post and post.content_format == Post.CONTENT_TEXT):
|
||||
internal_posts = re.search('\[\[([0-9]+)\]\]', text)
|
||||
internal_posts = re.finditer('\[\[([0-9]+)\]\]', text)
|
||||
if internal_posts:
|
||||
for post_id in internal_posts.groups():
|
||||
post_id = int(post_id)
|
||||
for post in internal_posts:
|
||||
post_id = post.groups()
|
||||
post_id = int(post_id[0])
|
||||
if post_id in self.parent_posts: continue
|
||||
_,post = self._have_I_right(user, post_id)
|
||||
if not post: continue
|
||||
@@ -291,7 +292,7 @@ class Index(DynastieGenerator):
|
||||
filename = filename2
|
||||
|
||||
if not filename in self.hash_posts_content:
|
||||
f = codecs.open(filename, 'rb', 'utf-8')
|
||||
f = codecs.open(filename, 'r', 'utf-8')
|
||||
post_content = f.read()
|
||||
f.close()
|
||||
self.parent_posts.append(post.id)
|
||||
@@ -308,7 +309,7 @@ class Index(DynastieGenerator):
|
||||
from dynastie.models import Post
|
||||
post = self.cur_post_obj
|
||||
|
||||
if post.id in self.hash_posts and not self.first_try:
|
||||
if post.id > 0 and post.id in self.hash_posts.keys() and not self.first_try:
|
||||
node,_ = self.hash_posts[post.id]
|
||||
return node.cloneNode(0)
|
||||
|
||||
@@ -318,6 +319,9 @@ class Index(DynastieGenerator):
|
||||
except:
|
||||
pass
|
||||
|
||||
if post.language != None:
|
||||
post_elem.setAttribute('lang', post.language.abbrev)
|
||||
|
||||
self.parent_posts = []
|
||||
post_content = self._loadPostContent(post)
|
||||
if not post_content: return None
|
||||
@@ -334,27 +338,28 @@ class Index(DynastieGenerator):
|
||||
continue
|
||||
new_node = dom.createTextNode(post_content)
|
||||
content_node.appendChild(new_node)
|
||||
|
||||
writer = StrictUTF8Writer()
|
||||
post_elem.writexml(writer)
|
||||
content = writer.getvalue().encode('utf-8')
|
||||
|
||||
md5 = hashlib.md5()
|
||||
md5.update(content)
|
||||
|
||||
if post.id in self.hash_posts:
|
||||
# Here, we are in first_try, check that computed
|
||||
# post has the same result than the one in cache
|
||||
self.first_try = False
|
||||
|
||||
_,md5_2 = self.hash_posts[post.id]
|
||||
# Disable this cache
|
||||
# writer = StrictUTF8Writer()
|
||||
# post_elem.writexml(writer)
|
||||
# content = writer.getvalue().encode('utf-8')
|
||||
|
||||
# If not, clear cache
|
||||
if md5.digest() != md5_2:
|
||||
self.hash_posts = {}
|
||||
self.hash_posts[post.id] = (post_elem.cloneNode(0), md5.digest())
|
||||
else:
|
||||
self.hash_posts[post.id] = (post_elem.cloneNode(0), md5.digest())
|
||||
# md5 = hashlib.md5()
|
||||
# md5.update(content)
|
||||
|
||||
# if post.id in self.hash_posts:
|
||||
# # Here, we are in first_try, check that computed
|
||||
# # post has the same result than the one in cache
|
||||
# self.first_try = False
|
||||
|
||||
# _,md5_2 = self.hash_posts[post.id]
|
||||
|
||||
# # If not, clear cache
|
||||
# if md5.digest() != md5_2:
|
||||
# self.hash_posts = {}
|
||||
# self.hash_posts[post.id] = (post_elem.cloneNode(0), md5.digest())
|
||||
# else:
|
||||
# self.hash_posts[post.id] = (post_elem.cloneNode(0), md5.digest())
|
||||
|
||||
return post_elem
|
||||
|
||||
@@ -363,10 +368,9 @@ class Index(DynastieGenerator):
|
||||
create_link = (node.getAttribute('link') == '1')
|
||||
for i in range(0, self.posts_per_page):
|
||||
post_elem = self.createElement(dom, 'post')
|
||||
if len(posts) > self.cur_post:
|
||||
if self.cur_post < len(posts):
|
||||
self.cur_post_obj = posts[self.cur_post]
|
||||
post_elem = self.createPost(posts, dom, post_elem, node)
|
||||
if post_elem is None: continue
|
||||
else:
|
||||
post_elem = self.createElement(dom, '', '<b>No posts yet</b>')
|
||||
self.cur_post_obj = None
|
||||
@@ -490,19 +494,20 @@ class Index(DynastieGenerator):
|
||||
|
||||
writer = StrictUTF8Writer()
|
||||
node.firstChild.writexml(writer)
|
||||
code = writer.getvalue().encode('utf-8')
|
||||
code = writer.getvalue().decode('utf-8')
|
||||
|
||||
r,w = os.pipe()
|
||||
r,w=os.fdopen(r,'r',0), os.fdopen(w,'w',0)
|
||||
r,w=os.fdopen(r,'rb'), os.fdopen(w,'wb')
|
||||
highlight(code, lexer, formatter, w)
|
||||
w.close()
|
||||
|
||||
code = r.read()
|
||||
code = code.decode('utf-8')
|
||||
r.close()
|
||||
|
||||
# Remove <pre> after <div class="highlight">
|
||||
code = code[28:-13]
|
||||
code = u'<div class="highlight">' + unicode(code, 'utf-8') + u'</div>'
|
||||
code = '<div class="highlight">' + code + u'</div>'
|
||||
|
||||
return code
|
||||
|
||||
@@ -554,8 +559,6 @@ class Index(DynastieGenerator):
|
||||
self.cur_page = self.cur_page + 1
|
||||
filename = self.dirname + '/' + self.filename + str(self.cur_page) + '.html'
|
||||
|
||||
filename = output + filename
|
||||
|
||||
while os.path.exists(filename):
|
||||
self.addReport('Removing unused ' + filename)
|
||||
os.unlink(filename)
|
||||
@@ -565,7 +568,6 @@ class Index(DynastieGenerator):
|
||||
os.unlink(filename)
|
||||
self.cur_page = self.cur_page + 1
|
||||
filename = self.dirname + '/' + self.filename + str(self.cur_page) + '.html'
|
||||
filename = output + filename
|
||||
|
||||
def generate(self, blog, src, output):
|
||||
from dynastie.models import Post, Blog
|
||||
|
||||
+373
-188
File diff suppressed because it is too large
Load Diff
+21
-10
@@ -20,6 +20,7 @@
|
||||
import datetime
|
||||
import os
|
||||
import xml
|
||||
import re
|
||||
from xml.dom.minidom import parse, parseString
|
||||
from dynastie.generators.generator import DynastieGenerator, StrictUTF8Writer
|
||||
from dynastie.generators.index import Index
|
||||
@@ -133,7 +134,13 @@ class Post(Index):
|
||||
new_elem = self.createMeta(dom, name, post.author.first_name + ' ' + post.author.last_name)
|
||||
except:
|
||||
return None
|
||||
|
||||
elif name == 'lang':
|
||||
meta_elem.removeChild(root)
|
||||
# Add attribute lang in <html> tag
|
||||
if post.language != None:
|
||||
meta_elem.parentNode.setAttribute('lang', post.language.abbrev)
|
||||
return None
|
||||
|
||||
if not new_elem is None:
|
||||
root.parentNode.replaceChild(new_elem, root)
|
||||
return new_elem
|
||||
@@ -146,15 +153,14 @@ class Post(Index):
|
||||
self.replaceByText(dom, root, node, value)
|
||||
return None
|
||||
|
||||
def _createPost(self, post, dom, post_elem, root):
|
||||
def _createPost(self, post, dom, root, node):
|
||||
self.cur_post_obj = post
|
||||
posts = [post]
|
||||
self.createPost(posts, dom, post_elem, root)
|
||||
post_elem = self.createElement(dom, 'post')
|
||||
post_elem = self.createPost(posts, dom, post_elem, node)
|
||||
|
||||
# Post are appended by index. Remove template
|
||||
post_nodes = dom.getElementsByTagNameNS(self.URI, 'post')
|
||||
post_elem = post_nodes[0]
|
||||
post_elem.parentNode.removeChild(post_elem)
|
||||
root.replaceChild(post_elem, node)
|
||||
|
||||
title_nodes = dom.getElementsByTagName('title')
|
||||
|
||||
@@ -164,7 +170,7 @@ class Post(Index):
|
||||
node.removeChild(node.childNodes[0])
|
||||
node.appendChild(dom.createTextNode(post.title))
|
||||
|
||||
return node
|
||||
return post_elem
|
||||
|
||||
def _generate(self, blog, src, output, posts):
|
||||
from dynastie.search import Search
|
||||
@@ -244,8 +250,8 @@ class Post(Index):
|
||||
if not the_class in post_transform:
|
||||
continue
|
||||
if the_class == 'post_content':
|
||||
s = u'<div>' + post_content + u'</div>'
|
||||
new_node = parseString(s.encode('utf-8'))
|
||||
s = '<div>' + post_content + u'</div>'
|
||||
new_node = parseString(s)
|
||||
for n in new_node.childNodes[0].childNodes:
|
||||
content_node.appendChild(n)
|
||||
break
|
||||
@@ -258,6 +264,7 @@ class Post(Index):
|
||||
|
||||
def preview(self, request, src, values):
|
||||
from dynastie.models import Blog
|
||||
iframe_re = re.compile(r'(<iframe.*)/>')
|
||||
|
||||
self.user = request.user
|
||||
|
||||
@@ -287,4 +294,8 @@ class Post(Index):
|
||||
writer = StrictUTF8Writer()
|
||||
nodes[0].writexml(writer)
|
||||
|
||||
return writer.getvalue().encode('utf-8')
|
||||
content = writer.getvalue().decode('utf-8')
|
||||
# iframe tag must be like <iframe ... ></iframe>, not optimized <iframe ... />
|
||||
content = self.iframe_re.sub('\\1></iframe>', content)
|
||||
|
||||
return content
|
||||
|
||||
@@ -31,7 +31,7 @@ class RSS(DynastieGenerator):
|
||||
def appendElement(self, dom, root, name='', content='', attributes=None):
|
||||
elem = dom.createElement(name)
|
||||
if attributes:
|
||||
for k, v in attributes.iteritems():
|
||||
for k, v in attributes.items():
|
||||
elem.setAttribute(k, v)
|
||||
if content != '':
|
||||
elem.appendChild(dom.createTextNode(content))
|
||||
@@ -77,7 +77,7 @@ class RSS(DynastieGenerator):
|
||||
return
|
||||
|
||||
f = open(filename, 'rb')
|
||||
post_content = f.read()
|
||||
post_content = f.read().decode('utf-8')
|
||||
f.close()
|
||||
|
||||
if post.content_format == Post.CONTENT_TEXT:
|
||||
|
||||
@@ -71,5 +71,5 @@ class Search(Index):
|
||||
|
||||
writer = StrictUTF8Writer()
|
||||
nodes[0].writexml(writer)
|
||||
return writer.getvalue().encode('utf-8')
|
||||
return writer.getvalue().decode('utf-8')
|
||||
|
||||
|
||||
+40
-16
@@ -34,13 +34,17 @@ from dynastie.generators import *
|
||||
|
||||
def slugify(name):
|
||||
name = name.strip()
|
||||
name = normalize('NFKD', name).encode('ascii', 'ignore').replace(' ', '-').lower()
|
||||
name = normalize('NFKD', name).replace(' ', '-').lower()
|
||||
#remove `other` characters
|
||||
name = sub('[^a-zA-Z0-9_-]', '', name)
|
||||
#nomalize dashes
|
||||
name = sub('-+', '-', name)
|
||||
return name
|
||||
|
||||
class Language(models.Model):
|
||||
name = models.CharField(max_length=255, unique=True)
|
||||
abbrev = models.CharField(max_length=4, unique=True)
|
||||
|
||||
class Blog(models.Model):
|
||||
name = models.CharField(max_length=255, unique=True)
|
||||
title = models.CharField(max_length=255)
|
||||
@@ -83,7 +87,7 @@ class Blog(models.Model):
|
||||
continue
|
||||
engine = line.strip()
|
||||
if not engine in globals():
|
||||
print 'Engine ' + engine + ' doesn\'t exists'
|
||||
print('Engine ' + engine + ' doesn\'t exists')
|
||||
else:
|
||||
self.engines.append(globals()[engine])
|
||||
f.close()
|
||||
@@ -116,7 +120,7 @@ class Blog(models.Model):
|
||||
if os.path.isdir(srcname):
|
||||
if not os.path.exists(dstname):
|
||||
os.makedirs(dstname)
|
||||
self.copytree(srcname, dstname, ignore=True)
|
||||
shutil.copytree(srcname, dstname, ignore=True)
|
||||
else:
|
||||
return self.copytree(srcname, dstname)
|
||||
else:
|
||||
@@ -162,11 +166,11 @@ class Blog(models.Model):
|
||||
|
||||
|
||||
# XXX What about devices, sockets etc.?
|
||||
except (IOError, os.error), why:
|
||||
except (IOError, os.error) as why:
|
||||
errors.append((srcname, dstname, str(why)))
|
||||
# catch the Error from the recursive copytree so that we can
|
||||
# continue with other files
|
||||
except Exception, err:
|
||||
except Exception as err:
|
||||
errors.extend(err.args[0])
|
||||
if errors:
|
||||
raise Exception(errors)
|
||||
@@ -186,7 +190,12 @@ class Blog(models.Model):
|
||||
if inspect.isclass(obj) and obj.__module__.startswith("dynastie.generators"):
|
||||
if obj.__module__ in generated: continue
|
||||
e = obj(hash_posts, hash_posts_content)
|
||||
r = e.generate(self, self.src_path, self.output_path)
|
||||
print('Go for {}'.format(e))
|
||||
try:
|
||||
r = e.generate(self, self.src_path, self.output_path)
|
||||
except Exception as err:
|
||||
self.report += err
|
||||
continue
|
||||
generated.append(obj.__module__)
|
||||
if not r is None:
|
||||
self.report = self.report + '<br/>\n' + r
|
||||
@@ -225,9 +234,9 @@ class Editor(models.Model):
|
||||
class Category(models.Model):
|
||||
name = models.CharField(max_length=255, unique=True)
|
||||
name_slug = models.CharField(max_length=255)
|
||||
parent = models.ForeignKey('self', blank=True, null=True)
|
||||
parent = models.ForeignKey('self', blank=True, null=True, on_delete=models.CASCADE)
|
||||
description = models.TextField(max_length=255, blank=True)
|
||||
blog = models.ForeignKey(Blog)
|
||||
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
|
||||
|
||||
def save(self):
|
||||
self.name_slug = slugify(self.name)
|
||||
@@ -243,7 +252,7 @@ class Category(models.Model):
|
||||
class Tag(models.Model):
|
||||
name = models.CharField(max_length=255, unique=True)
|
||||
name_slug = models.CharField(max_length=255)
|
||||
blog = models.ForeignKey(Blog)
|
||||
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
|
||||
|
||||
def save(self):
|
||||
self.name_slug = slugify(self.name)
|
||||
@@ -255,7 +264,15 @@ class Tag(models.Model):
|
||||
if os.path.exists(output):
|
||||
shutil.rmtree(output)
|
||||
|
||||
class PostOnlyManager(models.Manager):
|
||||
|
||||
def get_queryset(self):
|
||||
return super(PostOnlyManager, self).get_queryset().filter(post_type='P')
|
||||
|
||||
class Post(models.Model):
|
||||
|
||||
objects = PostOnlyManager()
|
||||
|
||||
title = models.CharField(max_length=255)
|
||||
title_slug = models.CharField(max_length=255)
|
||||
category = models.ForeignKey(Category, blank=True, null=True, on_delete=models.SET_NULL)
|
||||
@@ -267,13 +284,15 @@ class Post(models.Model):
|
||||
description = models.TextField(max_length=255, blank=True)
|
||||
keywords = models.TextField(blank=True)
|
||||
tags = models.ManyToManyField(Tag, blank=True, null=True)
|
||||
blog = models.ForeignKey(Blog)
|
||||
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
|
||||
language = models.ForeignKey(Language, null=True, on_delete=models.CASCADE)
|
||||
CONTENT_HTML = 0
|
||||
CONTENT_TEXT = 1
|
||||
CONTENT_FORMAT = (
|
||||
(CONTENT_HTML, 'HTML'),
|
||||
(CONTENT_TEXT, 'Text'))
|
||||
content_format = models.IntegerField(choices=CONTENT_FORMAT, default=CONTENT_HTML, blank=False, null=False)
|
||||
content_format = models.IntegerField(choices=CONTENT_FORMAT, default=CONTENT_TEXT, blank=False, null=False)
|
||||
post_type = models.CharField(max_length=1, default='P')
|
||||
|
||||
def getPath(self):
|
||||
filename = '/post/'
|
||||
@@ -344,7 +363,6 @@ class Post(models.Model):
|
||||
os.mkdir(output + '/_post')
|
||||
|
||||
filename = output + '/_post/' + str(self.pk)
|
||||
content = unicode(content)
|
||||
content = content.encode('utf-8')
|
||||
|
||||
f = open(filename, 'wb')
|
||||
@@ -386,6 +404,9 @@ class Post(models.Model):
|
||||
return 'text'
|
||||
|
||||
class Draft(Post):
|
||||
|
||||
objects = models.Manager()
|
||||
|
||||
def createDraft(self, content, tags):
|
||||
b = self.blog
|
||||
output = b.src_path
|
||||
@@ -393,7 +414,6 @@ class Draft(Post):
|
||||
os.mkdir(output + '/_draft')
|
||||
|
||||
filename = output + '/_draft/' + str(self.pk)
|
||||
content = unicode(content)
|
||||
content = content.encode('utf-8')
|
||||
modif = True
|
||||
|
||||
@@ -432,8 +452,8 @@ class Draft(Post):
|
||||
super(Draft, self).save()
|
||||
|
||||
class Comment(models.Model):
|
||||
post = models.ForeignKey(Post)
|
||||
parent = models.ForeignKey('self', null=True, blank=True)
|
||||
post = models.ForeignKey(Post, on_delete=models.CASCADE)
|
||||
parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE)
|
||||
date = models.DateTimeField()
|
||||
author = models.CharField(max_length=255)
|
||||
email = models.EmailField(max_length=255, blank=True)
|
||||
@@ -445,7 +465,7 @@ class Comment(models.Model):
|
||||
|
||||
def _remove_br(self):
|
||||
self.the_comment = self.the_comment.replace('<br />', '\n')
|
||||
|
||||
|
||||
class FileOutputCache(models.Model):
|
||||
name = models.CharField(max_length=512)
|
||||
hash = models.CharField(max_length=512)
|
||||
@@ -483,3 +503,7 @@ def pre_delete_post_signal(sender, **kwargs):
|
||||
@receiver(pre_save, sender=Comment)
|
||||
def pre_save_comment_signal(sender, **kwargs):
|
||||
kwargs['instance']._update_line_returns()
|
||||
|
||||
@receiver(pre_save, sender=Draft)
|
||||
def pre_save_draft_signal(sender, **kwargs):
|
||||
kwargs['instance'].post_type = 'D'
|
||||
|
||||
+8
-9
@@ -61,7 +61,7 @@ class Search:
|
||||
def _saveDatabase(self, blog, hashtable):
|
||||
d = pickle.dumps(hashtable)
|
||||
|
||||
f = open(blog.src_path + '/_search.db', 'w')
|
||||
f = open(blog.src_path + '/_search.db', 'wb')
|
||||
f.write(d)
|
||||
f.close()
|
||||
|
||||
@@ -69,7 +69,7 @@ class Search:
|
||||
filename = blog.src_path + '/_search.db'
|
||||
|
||||
if not os.path.exists(filename):
|
||||
print 'No search index !'
|
||||
print('No search index !')
|
||||
return None
|
||||
|
||||
f = open(filename, 'rb')
|
||||
@@ -100,7 +100,7 @@ class Search:
|
||||
|
||||
def _prepare_string(self, content):
|
||||
content = self._remove_tag(content)
|
||||
content = self._strip_accents(unicode(content, 'utf8'))
|
||||
content = self._strip_accents(content)
|
||||
|
||||
return content
|
||||
|
||||
@@ -128,12 +128,12 @@ class Search:
|
||||
except:
|
||||
return
|
||||
|
||||
f = open(filename, 'r')
|
||||
content = f.read()
|
||||
f = open(filename, 'rb')
|
||||
content = f.read().decode('utf-8')
|
||||
f.close()
|
||||
|
||||
self._indexContent(hashtable, index, content, 1)
|
||||
self._indexContent(hashtable, index, post.title.encode('utf-8'), 5)
|
||||
self._indexContent(hashtable, index, post.title, 5)
|
||||
|
||||
def create_index(self, blog):
|
||||
hashtable = {}
|
||||
@@ -192,7 +192,7 @@ class Search:
|
||||
def search(self, blog, string):
|
||||
hashtable = self._loadDatabase(blog)
|
||||
|
||||
string = self._prepare_string(string.encode('utf-8'))
|
||||
string = self._prepare_string(string)
|
||||
|
||||
wordlist = string.split(' ')
|
||||
|
||||
@@ -207,8 +207,7 @@ class Search:
|
||||
for post in hashtable[key]:
|
||||
res[post[0]] = res.get(post[0],0) + post[1]
|
||||
|
||||
sorted_res = sorted(res.iteritems(), key=operator.itemgetter(1))
|
||||
sorted_res.reverse()
|
||||
sorted_res = sorted(res.items(), key=operator.itemgetter(1), reverse=True)
|
||||
|
||||
res = [sorted_res[i][0] for i in range(len(sorted_res))]
|
||||
|
||||
|
||||
@@ -1,104 +1,115 @@
|
||||
<html xmlns:dyn="http://indefero.soutade.fr/p/dynastie" xmlns="http://www.w3.org/1999/xhtml">
|
||||
<html xmlns:dyn="http://indefero.soutade.fr/p/dynastie" xmlns="http://www.w3.org/1999/xhtml" lang="fr">
|
||||
<head>
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
|
||||
<meta content="index, follow" name="robots"/>
|
||||
<meta content="blog, gregory, soutade, grégory, soutadé, Grégory, Soutadé" name="keywords"/>
|
||||
<meta content="Blog de Grégory Soutadé" name="description"/>
|
||||
<meta content="Dynastie" name="generator"/>
|
||||
<meta name="viewport" content="width=width, initial-scale=1"/>
|
||||
<title>Blog de Grégory Soutadé</title>
|
||||
<link rel="icon" type="image/png" href="/images/favicon.png" />
|
||||
<link href="/rss.xml" rel="alternate" type="application/rss+xml" title="RSS 2.0" />
|
||||
<link href="/atom.xml" rel="alternate" type="application/atom+xml" title="Atom 1.0" />
|
||||
<link href="/css/blog.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="/js/blog.js"> </script>
|
||||
<script src="/js/blog.js"> </script>
|
||||
<dyn:block name="head"/>
|
||||
</head>
|
||||
<body>
|
||||
<a href="/"><img id="logo" src="/images/tux_final.png"/></a>
|
||||
<div class="body">
|
||||
<div class="table-row">
|
||||
<header>
|
||||
<div class="table-cell" id="header">
|
||||
<h2 id="title"><a href="/">Blog de Grégory Soutadé</a></h2>
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
<div class="table-row">
|
||||
<div class="content">
|
||||
<dyn:block name="content"/>
|
||||
<div class="content" id="content">
|
||||
<header>
|
||||
<a href="/"><img id="logo" alt="Logo Tux" src="/images/tux_final2.png"/></a>
|
||||
<div id="header">
|
||||
<span id="title"><a href="/">Blog de Grégory Soutadé</a></span>
|
||||
</div>
|
||||
<div class="menu">
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Recherche</div>
|
||||
<div id="menu_main">
|
||||
<dyn:replace div_name="form" id="search_form" method="POST" action="/search/dyn:blog_id">
|
||||
<input type="text" name="text" id="search_text" onkeypress="handleKeyPress(event,this.form)"/>
|
||||
</dyn:replace>
|
||||
</div>
|
||||
</div>
|
||||
<nav>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Menu principal</div>
|
||||
<div id="menu_main">
|
||||
<div class="menu_content_content"><a href="/">Première page</a></div>
|
||||
<div class="menu_content_content"><a href="/about.html">À propos</a></div>
|
||||
<div class="menu_content_content"><a href="/all_posts.html">Tous les articles</a></div>
|
||||
<div class="menu_content_content"><a href="http://indefero.soutade.fr">Projets personnels</a></div>
|
||||
<div class="menu_content_content"><a href="/ljdc">Les joies du code</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Catégories</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/category/articles">Articles</a></li>
|
||||
<li><a href="/category/musique">Musique</a></li>
|
||||
<li><a href="/category/informatique">Informatique</a></li>
|
||||
<li><a href="/category/cinema">Cinéma</a></li>
|
||||
<li><a href="/category/sport">Sport</a></li>
|
||||
<li><a href="/category/configurations-pc">Configurations PC</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Tags</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/tag/inenglish">In English</a></li>
|
||||
<li><a href="/tag/python">Python</a></li>
|
||||
<li><a href="/tag/sheevaplug">SheevaPlug</a></li>
|
||||
<li><a href="/tag/course-a-pied">Course à pied</a></li>
|
||||
<li><a href="/tag/tag-rugby">Tag rugby</a></li>
|
||||
<li><a href="/tag/politique">Politique</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Archives</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/archive/2015">2015</a></li>
|
||||
<li><a href="/archive/2014">2014</a></li>
|
||||
<li><a href="/archive/2013">2013</a></li>
|
||||
<li><a href="/archive/2012">2012</a></li>
|
||||
<li><a href="/archive/2011">2011</a></li>
|
||||
<li><a href="/archive/2010">2010</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feed">
|
||||
<a href="/rss.xml"><img src="/images/rss.png" alt="RSS feeds"></img> RSS</a><a href="/atom.xml"><img src="/images/atom.png" alt="Atom feeds"></img> Atom</a>
|
||||
</div>
|
||||
</nav>
|
||||
<p style="text-align:center">Généré avec <a href="http://indefero.soutade.fr/p/dynastie">Dynastie</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<dyn:block name="content"/>
|
||||
<footer>
|
||||
<div class="footer">
|
||||
Copyright © 2010-2016 Grégory Soutadé.<br/>
|
||||
Copyright © 2010-2022 Grégory Soutadé.<br/>
|
||||
Tous droits réservés.
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
<div class="hamburger" id="hamburger">
|
||||
<a href="#" onclick="switchMenu();return false;">
|
||||
<img id="hamburger_logo" alt="Menu" src="/images/hamburger.png"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu" id="menu" lang="fr">
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Recherche</div>
|
||||
<div class="menu_main">
|
||||
<dyn:replace div_name="form" id="search_form" method="POST" action="/search/dyn:blog_id">
|
||||
<input type="text" name="text" id="search_text" onkeypress="handleKeyPress(event,this.form)"/>
|
||||
</dyn:replace>
|
||||
</div>
|
||||
</div>
|
||||
<nav>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Menu principal</div>
|
||||
<div class="menu_main">
|
||||
<div class="menu_content_content"><a href="/">Première page</a></div>
|
||||
<div class="menu_content_content"><a href="/about.html">À propos</a></div>
|
||||
<div class="menu_content_content"><a href="/all_posts.html">Tous les articles</a></div>
|
||||
<div class="menu_content_content"><a href="http://indefero.soutade.fr">Projets personnels</a></div>
|
||||
<div class="menu_content_content"><a href="/ljdc">Les joies du code</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Catégories</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/category/articles">Articles</a></li>
|
||||
<li><a href="/category/musique">Musique</a></li>
|
||||
<li><a href="/category/informatique">Informatique</a></li>
|
||||
<li><a href="/category/sport">Sport</a></li>
|
||||
<li><a href="/category/configurations-pc">Configurations PC</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Tags</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/tag/inenglish">In English</a></li>
|
||||
<li><a href="/tag/python">Python</a></li>
|
||||
<li><a href="/tag/sheevaplug">SheevaPlug</a></li>
|
||||
<li><a href="/tag/course-a-pied">Course à pied</a></li>
|
||||
<li><a href="/tag/tag-rugby">Tag rugby</a></li>
|
||||
<li><a href="/tag/politique">Politique</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Archives</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/archive/2021">2021</a></li>
|
||||
<li><a href="/archive/2020">2020</a></li>
|
||||
<li><a href="/archive/2019">2019</a></li>
|
||||
<li><a href="/archive/2018">2018</a></li>
|
||||
<li><a href="/archive/2017">2017</a></li>
|
||||
<li><a href="/archive/2016">2016</a></li>
|
||||
<li><a href="/archive/2015">2015</a></li>
|
||||
<li><a href="/archive/2014">2014</a></li>
|
||||
<li><a href="/archive/2013">2013</a></li>
|
||||
<li><a href="/archive/2012">2012</a></li>
|
||||
<li><a href="/archive/2011">2011</a></li>
|
||||
<li><a href="/archive/2010">2010</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feed">
|
||||
<a href="/rss.xml"><img src="/images/rss.png" alt="RSS feeds"/> RSS</a><a href="/atom.xml"><img src="/images/atom.png" alt="Atom feeds"/> Atom</a>
|
||||
</div>
|
||||
<div class="newsletter">
|
||||
<p>Newsletter
|
||||
<input id="pannous_email" type="email" onclick="clear_your_email();" value="Your email"/>
|
||||
<input type="button" value="Subscribe" onclick="pannous_list_subscribe();"/>
|
||||
</p>
|
||||
</div>
|
||||
</nav>
|
||||
<p style="text-align:center">Généré avec <a href="http://indefero.soutade.fr/p/dynastie">Dynastie</a></p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -6,100 +6,112 @@
|
||||
<dyn:meta name="keywords"/>
|
||||
<dyn:meta name="title"/>
|
||||
<dyn:meta name="author"/>
|
||||
<dyn:meta name="lang"/>
|
||||
<meta content="Dynastie" name="generator"/>
|
||||
<meta name="viewport" content="width=width, initial-scale=1"/>
|
||||
<title>Blog de Grégory Soutadé</title>
|
||||
<link rel="icon" type="image/png" href="/images/favicon.png" />
|
||||
<link href="/rss.xml" rel="alternate" type="application/rss+xml" title="RSS 2.0" />
|
||||
<link href="/atom.xml" rel="alternate" type="application/atom+xml" title="Atom 1.0" />
|
||||
<link href="/css/blog.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="/js/blog.js"> </script>
|
||||
<script src="/js/blog.js"> </script>
|
||||
</head>
|
||||
<body onLoad="javascript:init();">
|
||||
<a href="/"><img id="logo" src="/images/tux_final.png"/></a>
|
||||
<div class="body">
|
||||
<div class="table-row">
|
||||
<header>
|
||||
<div class="table-cell" id="header">
|
||||
<h2 id="title"><a href="/">Blog de Grégory Soutadé</a></h2>
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
<div class="table-row">
|
||||
<div class="content">
|
||||
<dyn:block name="content"/>
|
||||
<div class="content" id="content">
|
||||
<header>
|
||||
<a href="/"><img id="logo" alt="Logo Tux" src="/images/tux_final2.png"/></a>
|
||||
<div id="header">
|
||||
<span id="title"><a href="/">Blog de Grégory Soutadé</a></span>
|
||||
</div>
|
||||
<div class="menu">
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Recherche</div>
|
||||
<div id="menu_main">
|
||||
<dyn:replace div_name="form" id="search_form" method="POST" action="/search/dyn:blog_id">
|
||||
<input type="text" name="text" id="search_text" onkeypress="handleKeyPress(event,this.form)"/>
|
||||
</dyn:replace>
|
||||
</div>
|
||||
</div>
|
||||
<nav>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Menu principal</div>
|
||||
<div id="menu_main">
|
||||
<div class="menu_content_content"><a href="/">Première page</a></div>
|
||||
<div class="menu_content_content"><a href="/about.html">À propos</a></div>
|
||||
<div class="menu_content_content"><a href="/all_posts.html">Tous les articles</a></div>
|
||||
<div class="menu_content_content"><a href="http://indefero.soutade.fr">Projets personnels</a></div>
|
||||
<div class="menu_content_content"><a href="/ljdc">Les joies du code</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Catégories</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/category/articles">Articles</a></li>
|
||||
<li><a href="/category/musique">Musique</a></li>
|
||||
<li><a href="/category/informatique">Informatique</a></li>
|
||||
<li><a href="/category/cinema">Cinéma</a></li>
|
||||
<li><a href="/category/sport">Sport</a></li>
|
||||
<li><a href="/category/configurations-pc">Configurations PC</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Tags</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/tag/inenglish">In English</a></li>
|
||||
<li><a href="/tag/python">Python</a></li>
|
||||
<li><a href="/tag/sheevaplug">SheevaPlug</a></li>
|
||||
<li><a href="/tag/course-a-pied">Course à pied</a></li>
|
||||
<li><a href="/tag/tag-rugby">Tag rugby</a></li>
|
||||
<li><a href="/tag/politique">Politique</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Archives</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/archive/2015">2015</a></li>
|
||||
<li><a href="/archive/2014">2014</a></li>
|
||||
<li><a href="/archive/2013">2013</a></li>
|
||||
<li><a href="/archive/2012">2012</a></li>
|
||||
<li><a href="/archive/2011">2011</a></li>
|
||||
<li><a href="/archive/2010">2010</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feed">
|
||||
<a href="/rss.xml"><img src="/images/rss.png" alt="RSS feeds"></img> RSS</a><a href="/atom.xml"><img src="/images/atom.png" alt="Atom feeds"></img> Atom</a>
|
||||
</div>
|
||||
</nav>
|
||||
<p style="text-align:center">Généré avec <a href="http://indefero.soutade.fr/p/dynastie">Dynastie</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<dyn:block name="content"/>
|
||||
<footer>
|
||||
<div class="footer">
|
||||
Copyright © 2010-2016 Grégory Soutadé.<br/>
|
||||
Copyright © 2010-2022 Grégory Soutadé.<br/>
|
||||
Tous droits réservés.
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
<div class="hamburger" id="hamburger">
|
||||
<a href="#" onclick="switchMenu();return false;">
|
||||
<img id="hamburger_logo" alt="Menu" src="/images/hamburger.png"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu" id="menu" lang="fr">
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Recherche</div>
|
||||
<div class="menu_main">
|
||||
<dyn:replace div_name="form" id="search_form" method="POST" action="/search/dyn:blog_id">
|
||||
<input type="text" name="text" id="search_text" onkeypress="handleKeyPress(event,this.form)"/>
|
||||
</dyn:replace>
|
||||
</div>
|
||||
</div>
|
||||
<nav>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Menu principal</div>
|
||||
<div class="menu_main">
|
||||
<div class="menu_content_content"><a href="/">Première page</a></div>
|
||||
<div class="menu_content_content"><a href="/about.html">À propos</a></div>
|
||||
<div class="menu_content_content"><a href="/all_posts.html">Tous les articles</a></div>
|
||||
<div class="menu_content_content"><a href="http://indefero.soutade.fr">Projets personnels</a></div>
|
||||
<div class="menu_content_content"><a href="/ljdc">Les joies du code</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Catégories</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/category/articles">Articles</a></li>
|
||||
<li><a href="/category/musique">Musique</a></li>
|
||||
<li><a href="/category/informatique">Informatique</a></li>
|
||||
<li><a href="/category/sport">Sport</a></li>
|
||||
<li><a href="/category/configurations-pc">Configurations PC</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Tags</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/tag/inenglish">In English</a></li>
|
||||
<li><a href="/tag/python">Python</a></li>
|
||||
<li><a href="/tag/sheevaplug">SheevaPlug</a></li>
|
||||
<li><a href="/tag/course-a-pied">Course à pied</a></li>
|
||||
<li><a href="/tag/tag-rugby">Tag rugby</a></li>
|
||||
<li><a href="/tag/politique">Politique</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Archives</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/archive/2021">2021</a></li>
|
||||
<li><a href="/archive/2020">2020</a></li>
|
||||
<li><a href="/archive/2019">2019</a></li>
|
||||
<li><a href="/archive/2018">2018</a></li>
|
||||
<li><a href="/archive/2017">2017</a></li>
|
||||
<li><a href="/archive/2016">2016</a></li>
|
||||
<li><a href="/archive/2015">2015</a></li>
|
||||
<li><a href="/archive/2014">2014</a></li>
|
||||
<li><a href="/archive/2013">2013</a></li>
|
||||
<li><a href="/archive/2012">2012</a></li>
|
||||
<li><a href="/archive/2011">2011</a></li>
|
||||
<li><a href="/archive/2010">2010</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feed">
|
||||
<a href="/rss.xml"><img src="/images/rss.png" alt="RSS feeds"/> RSS</a><a href="/atom.xml"><img src="/images/atom.png" alt="Atom feeds"/> Atom</a>
|
||||
</div>
|
||||
<div class="newsletter">
|
||||
<p>Newsletter
|
||||
<input id="pannous_email" type="email" onclick="clear_your_email();" value="Your email"/>
|
||||
<input type="button" value="Subscribe" onclick="pannous_list_subscribe();"/>
|
||||
</p>
|
||||
</div>
|
||||
</nav>
|
||||
<p style="text-align:center">Généré avec <a href="http://indefero.soutade.fr/p/dynastie">Dynastie</a></p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,627 +1,643 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ljdc>
|
||||
<entry>
|
||||
<id>143366123038</id>
|
||||
<address>http://lesjoiesducode.fr/post/143366123038/quand-un-client-m%C3%A9content-me-saute-dessus-d%C3%A8s-le</address>
|
||||
<address>https://lesjoiesducode.fr/quand-le-client-menvoie-ses-nouvelles-demandes-devolution</address>
|
||||
<title>Quand le client m'envoie ses nouvelles demandes d'évolution</title>
|
||||
<img>https://lesjoiesducode.fr/content/046/oYStSXb.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-jessaie-de-suivre-un-tuto-et-que-la-complexite-augmente-dun-coup</address>
|
||||
<title>Quand j'essaie de suivre un tuto et que la complexité augmente d'un coup</title>
|
||||
<img>https://lesjoiesducode.fr/content/046/SEZ5vom.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-le-po-commence-a-tester-mon-dev</address>
|
||||
<title>Quand le PO commence à tester mon dev</title>
|
||||
<img>https://lesjoiesducode.fr/content/029/tFAJw1m.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-les-experts-securite-saverent-etre-moins-competents-que-prevu</address>
|
||||
<title>Quand les experts sécurité s'avèrent être moins compétents que prévu</title>
|
||||
<img>https://lesjoiesducode.fr/content/043/rhLvUor.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-on-debugue-en-prod</address>
|
||||
<title>Quand on débugue en prod</title>
|
||||
<img>https://lesjoiesducode.fr/content/043/yq08VvS.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-jessaie-dimplementer-le-multithreading</address>
|
||||
<title>Quand j'essaie d'implémenter le multithreading</title>
|
||||
<img>https://lesjoiesducode.fr/content/042/MaxpeKQ.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-le-specialiste-securite-essaie-de-pentester-mon-application</address>
|
||||
<title>Quand le spécialiste sécurité essaie de pentester mon application</title>
|
||||
<img>https://lesjoiesducode.fr/content/041/8sVIedl.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-je-nai-pas-gere-les-effets-de-bord</address>
|
||||
<title>Quand je n'ai pas géré les effets de bord</title>
|
||||
<img>https://lesjoiesducode.fr/content/040/IJgJqmd.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-je-fais-mon-dernier-git-push-avant-les-vacances</address>
|
||||
<title>Quand je fais mon dernier git push avant les vacances</title>
|
||||
<img>https://lesjoiesducode.fr/content/039/aX7FfR2.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-je-reviens-au-bureau-apres-un-buffet-a-volonte</address>
|
||||
<title>Quand je reviens au bureau après un buffet à volonté</title>
|
||||
<img>https://lesjoiesducode.fr/content/038/9hWfv30.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-on-me-lance-seul-sur-un-projet-avec-une-techno-que-je-ne-connais-pas</address>
|
||||
<title>Quand on me lance seul sur un projet avec une techno que je ne connais pas</title>
|
||||
<img>https://lesjoiesducode.fr/content/038/HsO3DA6.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-toute-lequipe-sacharne-a-me-contredire</address>
|
||||
<title>Quand toute l'équipe s'acharne à me contredire</title>
|
||||
<img>https://lesjoiesducode.fr/content/037/yUlS8jd.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-jessaie-de-suivre-le-lead-dev-dans-ses-explications</address>
|
||||
<title>Quand j'essaie de suivre le lead dev dans ses explications</title>
|
||||
<img>https://lesjoiesducode.fr/content/037/MW7IC4h.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-je-compile-mon-code-pour-la-premiere-fois</address>
|
||||
<title>Quand je compile mon code pour la première fois</title>
|
||||
<img>https://lesjoiesducode.fr/content/037/iB7iVrw.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-ma-requete-sql-ne-retourne-rien</address>
|
||||
<title>Quand ma requête SQL ne retourne rien</title>
|
||||
<img>https://lesjoiesducode.fr/content/036/Dxzg1wD.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-on-remet-lappli-au-client</address>
|
||||
<title>Quand on remet l'appli au client</title>
|
||||
<img>https://lesjoiesducode.fr/content/036/3aBmbkM.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-je-vois-comment-le-client-utilise-lapplication</address>
|
||||
<title>Quand je vois comment le client utilise l'application</title>
|
||||
<img>https://lesjoiesducode.fr/content/036/JqeuVFM.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-lappli-ne-repond-plus</address>
|
||||
<title>Quand l'appli ne répond plus</title>
|
||||
<img>https://lesjoiesducode.fr/content/022/mhxbumI.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/comment-je-mimagine-les-developpeurs-cobol</address>
|
||||
<title>Comment je m'imagine les développeurs COBOL</title>
|
||||
<img>https://lesjoiesducode.fr/content/025/PRjlD6h.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-je-vois-le-rendu-de-mon-css</address>
|
||||
<title>Quand je vois le rendu de mon CSS</title>
|
||||
<img>https://lesjoiesducode.fr/content/034/yjaD7Xr.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-un-collgue-minterrompt-en-pleine-rflexion</address>
|
||||
<title>Quand un collègue m’interrompt en pleine réflexion</title>
|
||||
<img>https://lesjoiesducode.fr/content/012/cF3StcQ9cXV5u.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-mon-environnement-de-dveloppement-nest-pas</address>
|
||||
<title>Quand mon environnement de développement n'est pas adapté</title>
|
||||
<img>https://lesjoiesducode.fr/content/011/B7OTzWA.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://thecodinglove.com/when-nobody-notices-my-bug-during-the-demo</address>
|
||||
<title>When nobody notices my bug during the demo</title>
|
||||
<img>https://thecodinglove.com/content/017/hpktiZq.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://thecodinglove.com/when-a-client-comes-in-the-office-in-august</address>
|
||||
<title>When a client comes in the office in august</title>
|
||||
<img>https://thecodinglove.com/content/017/h3bPkKi.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://thecodinglove.com/when-i-make-a-minor-change-in-a-legacy-code</address>
|
||||
<title>When I make a minor change in a legacy code</title>
|
||||
<img>https://thecodinglove.com/content/028/sv1sN0F.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<address>https://lesjoiesducode.fr/quand-un-client-mcontent-me-saute-dessus-ds-le-lundi-matin</address>
|
||||
<title>Quand un client mécontent me saute dessus dès le lundi matin</title>
|
||||
<img>http://ljdchost.com/ahfGsho.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/010/ahfGsho.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>142340614088</id>
|
||||
<address>http://lesjoiesducode.fr/post/142340614088/quand-je-fais-un-force-commit</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-fais-un-force-commit</address>
|
||||
<title>Quand je fais un force commit</title>
|
||||
<img>http://ljdchost.com/szetnRM.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/028/szetnRM.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>141258011839</id>
|
||||
<address>http://lesjoiesducode.fr/post/141258011839/vendredi-apr%C3%A8s-midi</address>
|
||||
<address>https://lesjoiesducode.fr/vendredi-aprs-midi</address>
|
||||
<title>Vendredi après-midi</title>
|
||||
<img>http://ljdchost.com/H9PbWDi.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/017/H9PbWDi.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>138932499327</id>
|
||||
<address>http://thecodinglove.com/post/138932499327/seeing-my-own-code-after-years</address>
|
||||
<address>https://thecodinglove.com/seeing-my-own-code-after-years</address>
|
||||
<title>Seeing my own code after years</title>
|
||||
<img>http://tclhost.com/nDmdJau.gif</img>
|
||||
<img>https://thecodinglove.com/content/023/nDmdJau.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>137804239758</id>
|
||||
<address>http://thecodinglove.com/post/137804239758/when-you-discover-a-serious-bug-during-a-client</address>
|
||||
<title>When you discover a serious bug during a client...</title>
|
||||
<img>http://tclhost.com/rzUXIEl.gif</img>
|
||||
<address>https://thecodinglove.com/when-you-discover-a-serious-bug-during-a-client</address>
|
||||
<title>When you discover a serious bug during a client demo</title>
|
||||
<img>https://thecodinglove.com/content/027/rzUXIEl.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>137344478111</id>
|
||||
<address>http://thecodinglove.com/post/137344478111/arriving-late-to-an-important-meeting</address>
|
||||
<address>https://thecodinglove.com/arriving-late-to-an-important-meeting</address>
|
||||
<title>Arriving late to an important meeting</title>
|
||||
<img>http://tclhost.com/CXW1sJ4.gif</img>
|
||||
<img>https://thecodinglove.com/content/012/CXW1sJ4.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>132019829293</id>
|
||||
<address>http://thecodinglove.com/post/132019829293/when-a-mad-boss-looking-for-me-enters-the-open</address>
|
||||
<title>When a mad boss looking for me enters the open...</title>
|
||||
<img>http://tclhost.com/18aypyo.gif</img>
|
||||
<address>https://thecodinglove.com/when-a-mad-boss-looking-for-me-enters-the-open</address>
|
||||
<title>When a mad boss looking for me enters the open space</title>
|
||||
<img>https://thecodinglove.com/content/001/18aypyo.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>130345575469</id>
|
||||
<address>http://thecodinglove.com/post/130345575469/friday-evening</address>
|
||||
<address>https://thecodinglove.com/friday-evening</address>
|
||||
<title>Friday evening</title>
|
||||
<img>http://tclhost.com/y6FIHUN.gif</img>
|
||||
<img>https://thecodinglove.com/content/006/66r12jM.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>124083117265</id>
|
||||
<address>http://thecodinglove.com/post/124083117265/git-push-force</address>
|
||||
<title>Git push --force</title>
|
||||
<img>http://tclhost.com/cMusPk2.gif</img>
|
||||
<address>https://thecodinglove.com/git-push-force</address>
|
||||
<title>Git push –force</title>
|
||||
<img>https://thecodinglove.com/content/003/30GaznI.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>117591456984</id>
|
||||
<address>http://lesjoiesducode.fr/post/117591456984/quand-le-nouveau-essaie-de-suivre-le-dialogue</address>
|
||||
<address>https://lesjoiesducode.fr/quand-le-nouveau-essaie-de-suivre-le-dialogue</address>
|
||||
<title>Quand le nouveau essaie de suivre le dialogue entre le client et le commercial</title>
|
||||
<img>http://ljdchost.com/FcIr0Od.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/015/FcIr0Od.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>111942471013</id>
|
||||
<address>http://lesjoiesducode.fr/post/111942471013/quand-le-nouveau-essaie-de-sintegrer-a-lequipe</address>
|
||||
<title>Quand le nouveau essaie de s'intégrer à l’équipe</title>
|
||||
<img>http://ljdchost.com/2QdeyzW.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-le-nouveau-essaie-de-sintgrer-lquipe</address>
|
||||
<title>Quand le nouveau essaie de s'intégrer à l'équipe</title>
|
||||
<img>https://lesjoiesducode.fr/content/002/2QdeyzW.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>112123501777</id>
|
||||
<address>http://thecodinglove.com/post/112123501777/when-i-cancel-the-deployment-right-on-time</address>
|
||||
<address>https://thecodinglove.com/when-i-cancel-the-deployment-right-on-time</address>
|
||||
<title>When I cancel the deployment right on time</title>
|
||||
<img>http://tclhost.com/ZTl3UxN.gif</img>
|
||||
<img>https://thecodinglove.com/content/035/ZTl3UxN.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>110057614002</id>
|
||||
<address>http://lesjoiesducode.fr/post/110057614002/quand-je-reussis-enfin-a-ajuster-les-marges-de</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-russis-enfin-ajuster-les-marges-de-limpression</address>
|
||||
<title>Quand je réussis enfin à ajuster les marges de l'impression</title>
|
||||
<img>http://ljdchost.com/JT2cxL0.jpg</img>
|
||||
<img>https://lesjoiesducode.fr/content/019/JT2cxL0.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>110906961496</id>
|
||||
<address>http://thecodinglove.com/post/110906961496/completing-a-project-before-holidays</address>
|
||||
<address>https://thecodinglove.com/completing-a-project-before-holidays</address>
|
||||
<title>Completing a project before holidays</title>
|
||||
<img>http://tclhost.com/8nZ39Xu.gif</img>
|
||||
<img>https://thecodinglove.com/content/008/8nZ39Xu.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>109394455862</id>
|
||||
<address>http://thecodinglove.com/post/109394455862/fixing-a-critical-bug-5-minutes-before-the</address>
|
||||
<title>Fixing a critical bug 5 minutes before the...</title>
|
||||
<img>http://tclhost.com/J6s9wr8.jpg</img>
|
||||
<address>https://thecodinglove.com/fixing-a-critical-bug-5-minutes-before-the</address>
|
||||
<title>Fixing a critical bug 5 minutes before the deployment</title>
|
||||
<img>https://thecodinglove.com/content/019/J6s9wr8.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>108151523525</id>
|
||||
<address>http://thecodinglove.com/post/108151523525/when-the-client-always-sends-me-the-same-bug</address>
|
||||
<title>When the client always sends me the same bug...</title>
|
||||
<img>http://tclhost.com/LgnGD09.jpg</img>
|
||||
<address>https://thecodinglove.com/when-the-client-always-sends-me-the-same-bug</address>
|
||||
<title>When the client always sends me the same bug ticket</title>
|
||||
<img>https://thecodinglove.com/content/021/LgnGD09.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>106600573945</id>
|
||||
<address>http://lesjoiesducode.fr/post/106600573945/quand-jai-fait-une-erreur-et-que-quelquun</address>
|
||||
<address>https://lesjoiesducode.fr/quand-jai-fait-une-erreur-et-que-quelquun</address>
|
||||
<title>Quand j'ai fait une erreur et que quelqu'un d'autre se fait blâmer à ma place</title>
|
||||
<img>http://ljdchost.com/uRNHJje.jpg</img>
|
||||
<img>https://lesjoiesducode.fr/content/030/uRNHJje.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>106066410201</id>
|
||||
<address>http://thecodinglove.com/post/106066410201/trying-to-stop-the-projects-deployment</address>
|
||||
<title>Trying to stop the project's deployment</title>
|
||||
<img>http://tclhost.com/iXXli87.gif</img>
|
||||
<address>https://thecodinglove.com/trying-to-stop-the-projects-deployment</address>
|
||||
<title>Trying to stop the project’s deployment</title>
|
||||
<img>https://thecodinglove.com/content/018/iXXli87.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>106884181378</id>
|
||||
<address>http://thecodinglove.com/post/106884181378/when-the-development-team-says-the-build-doesnt</address>
|
||||
<title>When the development team says the build doesn't...</title>
|
||||
<img>http://tclhost.com/FhsufXe.gif</img>
|
||||
<address>https://thecodinglove.com/when-the-development-team-says-the-build-doesnt</address>
|
||||
<title>When the development team says the build doesn’t need to be tested</title>
|
||||
<img>https://thecodinglove.com/content/015/FhsufXe.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>102456707903</id>
|
||||
<address>http://thecodinglove.com/post/102456707903/switching-frameworks-just-because-a-feature-sounded</address>
|
||||
<title>switching frameworks just because a feature...</title>
|
||||
<img>http://tclhost.com/2mYDrjH.gif</img>
|
||||
<address>https://thecodinglove.com/switching-frameworks-just-because-a-feature</address>
|
||||
<title>Switching frameworks just because a feature sounded cool</title>
|
||||
<img>https://thecodinglove.com/content/002/2mYDrjH.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>101328062138</id>
|
||||
<address>http://thecodinglove.com/post/101328062138/when-a-colleague-hands-me-his-keyboard-to-help-him-fix</address>
|
||||
<title>When a colleague hands me his keyboard to help him...</title>
|
||||
<img>http://tclhost.com/dRUGycW.gif</img>
|
||||
<address>https://thecodinglove.com/when-a-colleague-hands-me-his-keyboard-to-help-him</address>
|
||||
<title>When a colleague hands me his keyboard to help him fix a bug</title>
|
||||
<img>https://thecodinglove.com/content/013/dRUGycW.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>100159105239</id>
|
||||
<address>http://thecodinglove.com/post/100159105239/developer-vs-designer</address>
|
||||
<address>https://thecodinglove.com/developer-vs-designer</address>
|
||||
<title>Developer vs designer</title>
|
||||
<img>http://tclhost.com/jPOgeEh.gif</img>
|
||||
<img>https://thecodinglove.com/content/019/jPOgeEh.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>98957550324</id>
|
||||
<address>http://lesjoiesducode.fr/post/98957550324/quand-je-guette-larrivee-dune-developpeuse-qui-vient</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-guette-larrive-dune-dveloppeuse-qui-vient-passer-un-entretien</address>
|
||||
<title>Quand je guette l'arrivée d'une développeuse qui vient passer un entretien</title>
|
||||
<img>http://ljdchost.com/WS8cDDf.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/032/WS8cDDf.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>94165641267</id>
|
||||
<address>http://thecodinglove.com/post/94165641267/when-the-boss-is-not-around-on-friday-night</address>
|
||||
<title>when the boss is not around on friday night</title>
|
||||
<address>https://thecodinglove.com/when-the-boss-is-not-around-on-friday-night</address>
|
||||
<title>When the boss is not around on friday night</title>
|
||||
<img>http://i.imgur.com/DZBuoIt.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>93881928426</id>
|
||||
<address>http://thecodinglove.com/post/93881928426/when-i-forgot-and-ending-condition-in-my-while-loop</address>
|
||||
<title>when I forgot and ending condition in my while...</title>
|
||||
<img>http://ljdchost.com/XhFmRb0.gif</img>
|
||||
<address>https://thecodinglove.com/when-i-forgot-and-ending-condition-in-my-while</address>
|
||||
<title>When I forgot and ending condition in my while loop</title>
|
||||
<img>https://thecodinglove.com/content/033/XhFmRb0.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>93383747099</id>
|
||||
<address>http://thecodinglove.com/post/93383747099/when-the-app-wont-stop</address>
|
||||
<title>when the app won't stop</title>
|
||||
<img>http://ljdchost.com/yszCN0J.gif</img>
|
||||
<address>https://thecodinglove.com/when-the-app-wont-stop</address>
|
||||
<title>When the app won’t stop</title>
|
||||
<img>https://thecodinglove.com/content/034/yszCN0J.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>91956775613</id>
|
||||
<address>http://thecodinglove.com/post/91956775613/when-the-boss-is-on-holidays</address>
|
||||
<title>when the boss is on holidays</title>
|
||||
<img>http://ljdchost.com/BavZuVt.gif</img>
|
||||
<address>https://thecodinglove.com/when-the-boss-is-on-holidays</address>
|
||||
<title>When the boss is on holidays</title>
|
||||
<img>https://thecodinglove.com/content/011/BavZuVt.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>90643638432</id>
|
||||
<address>http://lesjoiesducode.fr/post/90643638432/quand-toute-lequipe-scrute-les-stats-du-reseau-alors</address>
|
||||
<title>quand toute l’équipe scrute les stats du réseau alors que la connexion est instable</title>
|
||||
<img>http://ljdchost.com/8lc6A.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-toute-lquipe-scrute-les-stats-du-rseau-alors-que-la-connexion-est-instable</address>
|
||||
<title>quand toute l'équipe scrute les stats du réseau alors que la connexion est instable</title>
|
||||
<img>https://lesjoiesducode.fr/content/008/8lc6A.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>91030327924</id>
|
||||
<address>http://thecodinglove.com/post/91030327924/when-i-solve-an-annoying-bug</address>
|
||||
<title>when I solve an annoying bug</title>
|
||||
<address>https://thecodinglove.com/when-i-solve-an-annoying-bug</address>
|
||||
<title>When I solve an annoying bug</title>
|
||||
<img>http://i.imgur.com/7uKQBkq.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>91935663898</id>
|
||||
<address>http://thecodinglove.com/post/91935663898/when-i-dont-have-any-time-left-for-the-tests</address>
|
||||
<title>when I don't have any time left for the tests</title>
|
||||
<img>http://ljdchost.com/lIm3con.gif</img>
|
||||
<address>https://thecodinglove.com/when-i-dont-have-any-time-left-for-the-tests</address>
|
||||
<title>When I don’t have any time left for the tests</title>
|
||||
<img>https://thecodinglove.com/content/021/lIm3con.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>89760574671</id>
|
||||
<address>http://lesjoiesducode.fr/post/89760574671/quand-le-commercial-annonce-la-signature-dun-site-avec</address>
|
||||
<address>https://lesjoiesducode.fr/quand-le-commercial-annonce-la-signature-dun-site-avec</address>
|
||||
<title>quand le commercial annonce la signature d'un site avec Dorcel</title>
|
||||
<img>http://ljdchost.com/eONWG4U.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/014/eONWG4U.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>89738308086</id>
|
||||
<address>http://lesjoiesducode.fr/post/89738308086/quand-je-mets-un-break-dans-la-mauvaise-fonction</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-mets-un-break-dans-la-mauvaise-fonction</address>
|
||||
<title>quand je mets un break dans la mauvaise fonction</title>
|
||||
<img>http://ljdchost.com/20EefUs.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/002/20EefUs.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>89054547970</id>
|
||||
<address>http://lesjoiesducode.fr/post/89054547970/quand-jimplemente-pour-la-premiere-fois-une-nouvelle</address>
|
||||
<address>https://lesjoiesducode.fr/quand-jimplmente-pour-la-premire-fois-une-nouvelle</address>
|
||||
<title>quand j'implémente pour la première fois une nouvelle API</title>
|
||||
<img>http://ljdchost.com/sUM14Vp.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/028/sUM14Vp.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>88943623032</id>
|
||||
<address>http://thecodinglove.com/post/88943623032/when-i-do-an-rm-on-a-linux-server</address>
|
||||
<title>when I do an rm on a linux server</title>
|
||||
<address>https://thecodinglove.com/when-i-do-an-rm-on-a-linux-server</address>
|
||||
<title>When I do an rm on a linux server</title>
|
||||
<img>http://i.minus.com/i1wHuaMkzSau7.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>88260306303</id>
|
||||
<address>http://thecodinglove.com/post/88260306303/when-i-learn-a-new-framework</address>
|
||||
<title>when I learn a new framework</title>
|
||||
<address>https://thecodinglove.com/when-i-learn-a-new-framework</address>
|
||||
<title>When I learn a new framework</title>
|
||||
<img>http://i.imgur.com/9SM3IVT.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>86876038790</id>
|
||||
<address>http://lesjoiesducode.fr/post/86876038790/quand-je-corrige-sans-probleme-une-serie-de-bugs</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-corrige-sans-problme-une-srie-de-bugs</address>
|
||||
<title>quand je corrige sans problème une série de bugs mineurs</title>
|
||||
<img>http://ljdchost.com/H3lqXrR.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/017/H3lqXrR.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>87986380794</id>
|
||||
<address>http://thecodinglove.com/post/87986380794/when-the-server-crashes-right-before-the-week-end</address>
|
||||
<title>when the server crashes right before the week end</title>
|
||||
<address>https://thecodinglove.com/when-the-server-crashes-right-before-the-week-end</address>
|
||||
<title>When the server crashes right before the week end</title>
|
||||
<img>http://i.imgur.com/444LbGY.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>86598933572</id>
|
||||
<address>http://lesjoiesducode.fr/post/86598933572/vendredi-17h</address>
|
||||
<title>vendredi, 17h</title>
|
||||
<img>http://ljdchost.com/KtEbpO4.gif</img>
|
||||
<address>https://lesjoiesducode.fr/vendredi-17h</address>
|
||||
<title>Vendredi, 17h</title>
|
||||
<img>https://lesjoiesducode.fr/content/003/3V6zUKr.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>87886854819</id>
|
||||
<address>http://thecodinglove.com/post/87886854819/when-my-app-comes-back-from-qa-without-any-bugs</address>
|
||||
<title>when my app comes back from QA without any bugs</title>
|
||||
<address>https://thecodinglove.com/when-my-app-comes-back-from-qa-without-any-bugs</address>
|
||||
<title>When my app comes back from QA without any bugs</title>
|
||||
<img>http://i.imgur.com/uk5JoVB.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>86408294325</id>
|
||||
<address>http://lesjoiesducode.fr/post/86408294325/quand-on-me-donne-quelque-chose-a-coder-apres-un-mois</address>
|
||||
<address>https://lesjoiesducode.fr/quand-on-me-donne-quelque-chose-coder-aprs-un-mois</address>
|
||||
<title>quand on me donne quelque chose à coder après un mois passé à rédiger des docs</title>
|
||||
<img>http://ljdchost.com/eSi5YaK.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/014/eSi5YaK.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>86498759470</id>
|
||||
<address>http://lesjoiesducode.fr/post/86498759470/quand-on-debug-en-mode-ninja-pendant-la-demo</address>
|
||||
<address>https://lesjoiesducode.fr/quand-on-debug-en-mode-ninja-pendant-la-dmo</address>
|
||||
<title>quand on debug en mode ninja pendant la démo</title>
|
||||
<img>http://ljdchost.com/ibpfNpQ8sZ4ziO.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/018/ibpfNpQ8sZ4ziO.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>86206676795</id>
|
||||
<address>http://lesjoiesducode.fr/post/86206676795/quand-une-mise-en-production-seffectue-sans-souci</address>
|
||||
<address>https://lesjoiesducode.fr/quand-une-mise-en-production-seffectue-sans-souci</address>
|
||||
<title>quand une mise en production s'effectue sans souci</title>
|
||||
<img>http://i.imgur.com/oRTod71.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>87094581962</id>
|
||||
<address>http://thecodinglove.com/post/87094581962/when-caffeine-is-no-longer-effective</address>
|
||||
<title>when caffeine is no longer effective</title>
|
||||
<address>https://thecodinglove.com/when-caffeine-is-no-longer-effective</address>
|
||||
<title>When caffeine is no longer effective</title>
|
||||
<img>http://i.imgur.com/ocjPFJL.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>85721632915</id>
|
||||
<address>http://lesjoiesducode.fr/post/85721632915/quand-je-suggere-lusage-de-nouvelles-technos</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-suggre-lusage-de-nouvelles-technos</address>
|
||||
<title>quand je suggère l'usage de nouvelles technos</title>
|
||||
<img>http://i.imgur.com/BezORLq.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>85709017865</id>
|
||||
<address>http://lesjoiesducode.fr/post/85709017865/quand-un-collegue-me-refile-un-ticket-facile-a</address>
|
||||
<title>quand un collègue me refile un ticket “facile à traiter”</title>
|
||||
<img>http://ljdchost.com/XyeioZc.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-un-collgue-me-refile-un-ticket-facile-traiter</address>
|
||||
<title>quand un collègue me refile un ticket "facile à traiter"</title>
|
||||
<img>https://lesjoiesducode.fr/content/033/XyeioZc.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>85704348740</id>
|
||||
<address>http://lesjoiesducode.fr/post/85704348740/quand-le-client-reclame-une-feature-hors-cahier-des</address>
|
||||
<address>https://lesjoiesducode.fr/quand-le-client-rclame-une-feature-hors-cahier-des</address>
|
||||
<title>quand le client réclame une feature hors cahier des charges et qu'on lui renvoie en réponse sa facture impayée</title>
|
||||
<img>http://i.imgur.com/3minh1d.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>72755714066</id>
|
||||
<address>http://lesjoiesducode.fr/post/72755714066/quand-on-me-demande-si-je-veux-relire-la-doc</address>
|
||||
<address>https://lesjoiesducode.fr/quand-on-me-demande-si-je-veux-relire-la-doc</address>
|
||||
<title>quand on me demande si je veux relire la doc</title>
|
||||
<img>http://ljdchost.com/5jFD7OS.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/005/5jFD7OS.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>84217503221</id>
|
||||
<address>http://thecodinglove.com/post/84217503221/when-i-have-a-bad-feeling-about-the-project</address>
|
||||
<title>when I have a bad feeling about the project</title>
|
||||
<address>https://thecodinglove.com/when-i-have-a-bad-feeling-about-the-project</address>
|
||||
<title>When I have a bad feeling about the project</title>
|
||||
<img>http://i.imgur.com/GMU8de2.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>84208887361</id>
|
||||
<address>http://thecodinglove.com/post/84208887361/when-the-intern-modifies-my-code</address>
|
||||
<title>when the intern modifies my code</title>
|
||||
<address>https://thecodinglove.com/when-the-intern-modifies-my-code</address>
|
||||
<title>When the intern modifies my code</title>
|
||||
<img>http://i.imgur.com/8jw2zLm.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>83611569882</id>
|
||||
<address>http://thecodinglove.com/post/83611569882/when-its-finally-time-to-leave-work</address>
|
||||
<title>when it's finally time to leave work</title>
|
||||
<address>https://thecodinglove.com/when-its-finally-time-to-leave-work</address>
|
||||
<title>When it’s finally time to leave work</title>
|
||||
<img>http://i.minus.com/i6r0CMzKoKhcr.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>83602223279</id>
|
||||
<address>http://thecodinglove.com/post/83602223279/when-a-backend-developer-wants-to-edit-my-sass-files</address>
|
||||
<title>when a backend developer wants to edit my sass...</title>
|
||||
<address>https://thecodinglove.com/when-a-backend-developer-wants-to-edit-my-sass</address>
|
||||
<title>When a backend developer wants to edit my sass files</title>
|
||||
<img>http://i.imgur.com/kKqDrYd.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>83401607427</id>
|
||||
<address>http://thecodinglove.com/post/83401607427/when-the-intern-tries-to-use-my-library-for-the-first</address>
|
||||
<title>when the intern tries to use my library for the...</title>
|
||||
<address>https://thecodinglove.com/when-the-intern-tries-to-use-my-library-for-the</address>
|
||||
<title>When the intern tries to use my library for the first time</title>
|
||||
<img>http://i.imgur.com/eGUcWVN.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>82186019033</id>
|
||||
<address>http://thecodinglove.com/post/82186019033/when-i-finally-release-an-annoying-project</address>
|
||||
<title>when I finally release an annoying project</title>
|
||||
<address>https://thecodinglove.com/when-i-finally-release-an-annoying-project</address>
|
||||
<title>When I finally release an annoying project</title>
|
||||
<img>http://i.imgur.com/GT8qqQz.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>81678749540</id>
|
||||
<address>http://thecodinglove.com/post/81678749540/when-my-boss-is-looking-for-a-bug-fixer-on-friday-night</address>
|
||||
<title>when my boss is looking for a bug fixer on friday...</title>
|
||||
<address>https://thecodinglove.com/when-my-boss-is-looking-for-a-bug-fixer-on-friday</address>
|
||||
<title>When my boss is looking for a bug fixer on friday night</title>
|
||||
<img>http://i.imgur.com/CVDVCwz.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>59103801763</id>
|
||||
<address>http://thecodinglove.com/post/59103801763/when-the-boss-calls-me-to-tell-me-that-he-even-cant</address>
|
||||
<title>when the boss calls me to tell me that he even...</title>
|
||||
<address>https://thecodinglove.com/when-the-boss-calls-me-to-tell-me-that-he-even</address>
|
||||
<title>When the boss calls me to tell me that he even can’t launch the application</title>
|
||||
<img>http://i.imgur.com/baZaV.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>64879310625</id>
|
||||
<address>http://thecodinglove.com/post/64879310625/when-i-see-my-clients-car-parked-outside-when-im</address>
|
||||
<title>when I see my client's car parked outside when I'm...</title>
|
||||
<address>https://thecodinglove.com/when-i-see-my-clients-car-parked-outside-when-im</address>
|
||||
<title>When I see my client’s car parked outside when I’m leaving the office</title>
|
||||
<img>http://i.imgur.com/eoqaGSx.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>68181705123</id>
|
||||
<address>http://thecodinglove.com/post/68181705123/when-the-network-is-very-slow</address>
|
||||
<title>when the network is very slow</title>
|
||||
<address>https://thecodinglove.com/when-the-network-is-very-slow</address>
|
||||
<title>When the network is very slow</title>
|
||||
<img>http://i.minus.com/ibz5fxcZqtgSHt.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>69077017325</id>
|
||||
<address>http://thecodinglove.com/post/69077017325/when-i-think-i-will-finish-a-project-without-any-issues</address>
|
||||
<title>when I think I will finish a project without any...</title>
|
||||
<address>https://thecodinglove.com/when-i-think-i-will-finish-a-project-without-any</address>
|
||||
<title>When I think I will finish a project without any issues</title>
|
||||
<img>http://i.imgur.com/yPE58vP.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>80977664309</id>
|
||||
<address>http://thecodinglove.com/post/80977664309/when-i-criticize-my-boss-decision-who-is-right-around</address>
|
||||
<title>when I criticize my boss' decision who is right...</title>
|
||||
<address>https://thecodinglove.com/when-i-criticize-my-boss-decision-who-is-right</address>
|
||||
<title>When I criticize my boss’ decision who is right around the corner</title>
|
||||
<img>http://i.imgur.com/d86g7Ps.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>80285273617</id>
|
||||
<address>http://thecodinglove.com/post/80285273617/when-i-dont-have-time-for-writing-tests</address>
|
||||
<title>when I don't have time for writing tests</title>
|
||||
<address>https://thecodinglove.com/when-i-dont-have-time-for-writing-tests</address>
|
||||
<title>When I don’t have time for writing tests</title>
|
||||
<img>http://i.imgur.com/WKr8PT6.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>79359073019</id>
|
||||
<address>http://thecodinglove.com/post/79359073019/when-a-colleague-does-not-agree-with-our-coding-rules</address>
|
||||
<title>when a colleague does not agree with our coding...</title>
|
||||
<address>https://thecodinglove.com/when-a-colleague-does-not-agree-with-our-coding</address>
|
||||
<title>When a colleague does not agree with our coding rules</title>
|
||||
<img>http://i.imgur.com/JaDshKN.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>79149589869</id>
|
||||
<address>http://thecodinglove.com/post/79149589869/hey-look-the-bug-is-fixed</address>
|
||||
<title>"hey look, the bug is fixed"</title>
|
||||
<address>https://thecodinglove.com/hey-look-the-bug-is-fixed</address>
|
||||
<title>“hey look, the bug is fixed”</title>
|
||||
<img>http://i.imgur.com/oH4BThU.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>76957965046</id>
|
||||
<address>http://thecodinglove.com/post/76957965046/when-i-try-to-sneak-out-of-the-office-early-thinking</address>
|
||||
<title>when I try to sneak out of the office early,...</title>
|
||||
<address>https://thecodinglove.com/when-i-try-to-sneak-out-of-the-office-early</address>
|
||||
<title>When I try to sneak out of the office early, thinking that the boss is not around</title>
|
||||
<img>http://i.imgur.com/6Ewq7Ha.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>79874079928</id>
|
||||
<address>http://lesjoiesducode.fr/post/79874079928/quand-ma-requete-sql-me-retourne-exactement-ce-que-je</address>
|
||||
<address>https://lesjoiesducode.fr/quand-ma-requte-sql-me-retourne-exactement-ce-que-je</address>
|
||||
<title>quand ma requête SQL me retourne exactement ce que je veux</title>
|
||||
<img>http://ljdchost.com/8cimjld.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/008/8cimjld.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>79348684503</id>
|
||||
<address>http://lesjoiesducode.fr/post/79348684503/quand-je-commence-a-developper-sous-linux-apres</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-commence-dvelopper-sous-linux-aprs-plusieurs-annes-passes-sous-windows</address>
|
||||
<title>quand je commence à développer sous Linux après plusieurs années passées sous Windows</title>
|
||||
<img>http://ljdchost.com/Ma1feZq.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/022/Ma1feZq.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>79169643105</id>
|
||||
<address>http://lesjoiesducode.fr/post/79169643105/quand-un-proche-me-demande-encore-une-fois-de-reparer</address>
|
||||
<title>quand un proche me demande encore une fois de “réparer son Facebook”</title>
|
||||
<img>http://ljdchost.com/MxFZvNI.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-un-proche-me-demande-encore-une-fois-de-rparer</address>
|
||||
<title>quand un proche me demande encore une fois de "réparer son Facebook"</title>
|
||||
<img>https://lesjoiesducode.fr/content/022/MxFZvNI.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>78753329421</id>
|
||||
<address>http://lesjoiesducode.fr/post/78753329421/la-dev-team-quand-la-mise-en-prod-fonctionne-du-premier</address>
|
||||
<address>https://lesjoiesducode.fr/la-dev-team-quand-la-mise-en-prod-fonctionne-du-premier</address>
|
||||
<title>la dev team quand la mise en prod fonctionne du premier coup</title>
|
||||
<img>http://ljdchost.com/iQybVzt.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/018/iQybVzt.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>76430309812</id>
|
||||
<address>http://lesjoiesducode.fr/post/76430309812/quand-git-blame-balance-qui-a-ecrit-le-code-que-la</address>
|
||||
<title>quand “git blame” balance qui a écrit le code que la team a passé 2 jours à debugger</title>
|
||||
<img>http://ljdchost.com/ibz52ZxNgAM2oA.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-git-blame-balance-qui-a-crit-le-code-que-la</address>
|
||||
<title>quand "git blame" balance qui a écrit le code que la team a passé 2 jours à debugger</title>
|
||||
<img>https://lesjoiesducode.fr/content/018/ibz52ZxNgAM2oA.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>76414125378</id>
|
||||
<address>http://lesjoiesducode.fr/post/76414125378/la-difference-entre-lintitule-du-stage-et-le-stage-en</address>
|
||||
<address>https://lesjoiesducode.fr/la-diffrence-entre-lintitul-du-stage-et-le-stage-en</address>
|
||||
<title>la différence entre l'intitulé du stage et le stage en question</title>
|
||||
<img>http://ljdchost.com/ScSsJaG.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/028/ScSsJaG.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>74262291448</id>
|
||||
<address>http://lesjoiesducode.fr/post/74262291448/quand-je-prends-en-charge-le-support-utilisateur</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-prends-en-charge-le-support-utilisateur</address>
|
||||
<title>quand je prends en charge le support utilisateur</title>
|
||||
<img>http://ljdchost.com/iREPuffTNOthP.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/018/iREPuffTNOthP.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>74168932838</id>
|
||||
<address>http://lesjoiesducode.fr/post/74168932838/quand-je-developpe-une-appli-facebook-et-que-le-boss</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-dveloppe-une-appli-facebook-et-que-le-boss</address>
|
||||
<title>quand je développe une appli Facebook et que le boss jette un oeil à mon écran</title>
|
||||
<img>http://ljdchost.com/zjik30m.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/035/zjik30m.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>73935666374</id>
|
||||
<address>http://lesjoiesducode.fr/post/73935666374/quand-le-sysadmin-a-mal-configure-le-proxy</address>
|
||||
<address>https://lesjoiesducode.fr/quand-le-sysadmin-a-mal-configur-le-proxy</address>
|
||||
<title>quand le sysadmin a mal configuré le proxy</title>
|
||||
<img>http://ljdchost.com/o5LbzNy.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/024/o5LbzNy.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>73394310782</id>
|
||||
<address>http://lesjoiesducode.fr/post/73394310782/quand-mon-pc-rame-sans-raison-et-que-jai-des-choses</address>
|
||||
<address>https://lesjoiesducode.fr/quand-mon-pc-rame-sans-raison-et-que-jai-des-choses</address>
|
||||
<title>quand mon PC rame sans raison et que j'ai des choses urgentes à faire</title>
|
||||
<img>http://ljdchost.com/i2rMts44clHLw.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/018/i2rMts44clHLw.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>72660713690</id>
|
||||
<address>http://lesjoiesducode.fr/post/72660713690/quand-je-cache-des-bugs-au-chef</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-cache-des-bugs-au-chef</address>
|
||||
<title>quand je cache des bugs au chef</title>
|
||||
<img>http://ljdchost.com/dBATah1.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/013/dBATah1.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>69485497531</id>
|
||||
<address>http://lesjoiesducode.fr/post/69485497531/quand-les-collegues-se-ramassent-sur-un-projet-sur</address>
|
||||
<address>https://lesjoiesducode.fr/quand-les-collgues-se-ramassent-sur-un-projet-sur</address>
|
||||
<title>quand les collègues se ramassent sur un projet sur lequel je ne travaille pas</title>
|
||||
<img>http://ljdchost.com/FCpwSIk.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/015/FCpwSIk.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>68966745060</id>
|
||||
<address>http://lesjoiesducode.fr/post/68966745060/quand-je-teste-une-requete-sql-monstrueuse-et-que-je</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-teste-une-requte-sql-monstrueuse-et-que-je</address>
|
||||
<title>quand je teste une requête SQL monstrueuse et que je m'aperçois que j'ai oublié une parenthèse</title>
|
||||
<img>http://ljdchost.com/7ZGdjjk.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/007/7ZGdjjk.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>68348831778</id>
|
||||
<address>http://lesjoiesducode.fr/post/68348831778/quand-je-publie-une-appli-jeu-concours-qui-a-ete-teasee</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-publie-une-appli-jeu-concours-qui-a-t-tease</address>
|
||||
<title>quand je publie une appli jeu-concours qui a été teasée à mort</title>
|
||||
<img>http://ljdchost.com/ibgETFO7jGDq2n.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/018/ibgETFO7jGDq2n.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>67562114278</id>
|
||||
<address>http://lesjoiesducode.fr/post/67562114278/quand-la-nouvelle-developpeuse-casse-mon-code</address>
|
||||
<address>https://lesjoiesducode.fr/quand-la-nouvelle-dveloppeuse-casse-mon-code</address>
|
||||
<title>quand la nouvelle développeuse casse mon code</title>
|
||||
<img>http://ljdchost.com/gtXEh5k.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/016/gtXEh5k.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>66175879670</id>
|
||||
<address>http://lesjoiesducode.fr/post/66175879670/quand-un-collegue-fait-un-force-commit-de-son-code</address>
|
||||
<title>quand un collègue fait un force commit de son code “testé”</title>
|
||||
<img>http://ljdchost.com/17ZvQW7.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-un-collgue-fait-un-force-commit-de-son-code</address>
|
||||
<title>quand un collègue fait un force commit de son code "testé"</title>
|
||||
<img>https://lesjoiesducode.fr/content/001/17ZvQW7.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>65985797316</id>
|
||||
<address>http://lesjoiesducode.fr/post/65985797316/quand-je-tente-de-faire-adopter-de-nouvelles</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-tente-de-faire-adopter-de-nouvelles</address>
|
||||
<title>quand je tente de faire adopter de nouvelles technologies à mon boss</title>
|
||||
<img>http://ljdchost.com/2yLYnwm.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/002/2yLYnwm.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>65325325887</id>
|
||||
<address>http://lesjoiesducode.fr/post/65325325887/premier-jour-de-production-de-lappli</address>
|
||||
<address>https://lesjoiesducode.fr/premier-jour-de-production-de-lappli</address>
|
||||
<title>premier jour de production de l'appli</title>
|
||||
<img>http://ljdchost.com/h72rDqA.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/017/h72rDqA.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>65028123102</id>
|
||||
<address>http://lesjoiesducode.fr/post/65028123102/quand-je-lance-un-script-sensible-en-prod</address>
|
||||
<title>quand je lance un script sensible en prod</title>
|
||||
<img>http://ljdchost.com/SQ23RQv.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-je-lance-un-script-sensible-en-prod</address>
|
||||
<title>Quand je lance un script sensible en prod</title>
|
||||
<img>https://lesjoiesducode.fr/content/028/SQ23RQv.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>62889465788</id>
|
||||
<address>http://lesjoiesducode.fr/post/62889465788/quand-mes-15-lignes-de-code-font-buguer-les-5000-codees</address>
|
||||
<address>https://lesjoiesducode.fr/quand-mes-15-lignes-de-code-font-buguer-les-5000-codes</address>
|
||||
<title>quand mes 15 lignes de code font buguer les 5000 codées par mon collègue</title>
|
||||
<img>http://ljdchost.com/i1iPnQGiNMMcS.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/018/i1iPnQGiNMMcS.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>62226484904</id>
|
||||
<address>http://lesjoiesducode.fr/post/62226484904/quand-jevite-de-justesse-une-integration-sous-ie</address>
|
||||
<title>quand j’évite de justesse une intégration sous IE</title>
|
||||
<img>http://ljdchost.com/ibrcM4QCUzuO4F.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-jvite-de-justesse-une-intgration-sous-ie</address>
|
||||
<title>quand j'évite de justesse une intégration sous IE</title>
|
||||
<img>https://lesjoiesducode.fr/content/018/ibrcM4QCUzuO4F.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>61755928134</id>
|
||||
<address>http://lesjoiesducode.fr/post/61755928134/a-chaque-fois-que-je-dois-corriger-un-bug</address>
|
||||
<address>https://lesjoiesducode.fr/chaque-fois-que-je-dois-corriger-un-bug</address>
|
||||
<title>à chaque fois que je dois corriger un bug</title>
|
||||
<img>http://ljdchost.com/ibwJNFK7KOextP.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/018/ibwJNFK7KOextP.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>61095633488</id>
|
||||
<address>http://lesjoiesducode.fr/post/61095633488/quand-on-teste-la-release-pour-la-premiere-fois</address>
|
||||
<address>https://lesjoiesducode.fr/quand-on-teste-la-release-pour-la-premire-fois</address>
|
||||
<title>quand on teste la release pour la première fois</title>
|
||||
<img>http://ljdchost.com/iNBfqcRWVujkK.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/018/iNBfqcRWVujkK.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>60257064090</id>
|
||||
<address>http://lesjoiesducode.fr/post/60257064090/quand-le-chef-me-surveille-de-loin-sur-mon-pc</address>
|
||||
<title>quand le chef me surveille de loin sur mon PC</title>
|
||||
<img>http://ljdchost.com/rJoXjxb.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-le-chef-me-surveille-de-loin-sur-mon-pc</address>
|
||||
<title>Quand le chef me surveille de loin sur mon PC</title>
|
||||
<img>https://lesjoiesducode.fr/content/027/rJoXjxb.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>55159334107</id>
|
||||
<address>http://lesjoiesducode.fr/post/55159334107/quand-la-concurrence-nous-rend-visite-sur-un-salon</address>
|
||||
<address>https://lesjoiesducode.fr/quand-la-concurrence-nous-rend-visite-sur-un-salon</address>
|
||||
<title>quand la concurrence nous rend visite sur un salon</title>
|
||||
<img>http://ljdchost.com/UA3XKTA.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/030/UA3XKTA.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>54659996060</id>
|
||||
<address>http://lesjoiesducode.fr/post/54659996060/quand-le-sysadmin-passe-par-lopen-space-pour-rebooter</address>
|
||||
<address>https://lesjoiesducode.fr/quand-le-sysadmin-passe-par-lopen-space-pour-rebooter</address>
|
||||
<title>quand le sysadmin passe par l'open space pour rebooter un serveur crashe par l'applicatif</title>
|
||||
<img>http://ljdchost.com/Oxdx7cS.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/024/Oxdx7cS.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>53193488681</id>
|
||||
<address>http://lesjoiesducode.fr/post/53193488681/quand-je-montre-au-stagiaire-comment-devrait-se-passer</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-montre-au-stagiaire-comment-devrait-se-passer</address>
|
||||
<title>quand je montre au stagiaire comment devrait se passer une mise en prod</title>
|
||||
<img>http://ljdchost.com/iOON215zIRp7s.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/018/iOON215zIRp7s.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>52787691243</id>
|
||||
<address>http://lesjoiesducode.fr/post/52787691243/quand-je-pense-que-ma-correction-est-passee-en-prod</address>
|
||||
<address>https://lesjoiesducode.fr/quand-je-pense-que-ma-correction-est-passe-en-prod</address>
|
||||
<title>quand je pense que ma correction est passée en prod alors que je suis en local</title>
|
||||
<img>http://ljdchost.com/uP2Urzr.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/030/uP2Urzr.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>50079464381</id>
|
||||
<address>http://lesjoiesducode.fr/post/50079464381/quand-je-veux-utiliser-la-derniere-api-en-version-beta</address>
|
||||
<title>quand je veux utiliser la dernière API en version bêta dans un projet en prod</title>
|
||||
<img>http://ljdchost.com/yidIDyA.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-je-veux-utiliser-la-dernire-api-en-version-bta</address>
|
||||
<title>Quand je veux utiliser la dernière API en version bêta dans un projet en prod</title>
|
||||
<img>https://lesjoiesducode.fr/content/034/yidIDyA.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>49930756926</id>
|
||||
<address>http://lesjoiesducode.fr/post/49930756926/quand-mon-try-catch-ne-fonctionne-pas</address>
|
||||
<title>quand mon try-catch ne fonctionne pas</title>
|
||||
<img>http://ljdchost.com/ZKMvZ0O.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-mon-try-catch-ne-fonctionne-pas</address>
|
||||
<title>Quand mon try-catch ne fonctionne pas</title>
|
||||
<img>https://lesjoiesducode.fr/content/025/PrestigiousDownrightHerring.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>47194170613</id>
|
||||
<address>http://lesjoiesducode.fr/post/47194170613/quand-le-chef-veut-faire-le-point-a-5-heures-le</address>
|
||||
<address>https://lesjoiesducode.fr/quand-le-chef-veut-faire-le-point-5-heures-le</address>
|
||||
<title>quand le chef veut faire le point à 5 heures le vendredi</title>
|
||||
<img>http://ljdchost.com/E1DhQgU.gif</img>
|
||||
<img>https://lesjoiesducode.fr/content/014/E1DhQgU.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>46420018667</id>
|
||||
<address>http://lesjoiesducode.fr/post/46420018667/quand-lequipe-support-se-tient-prete-pour-la-mise-en</address>
|
||||
<title>quand l’équipe support se tient prête pour la mise en prod</title>
|
||||
<img>http://ljdchost.com/iwCfev6TBohRP.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-lquipe-support-se-tient-prte-pour-la-mise-en</address>
|
||||
<title>Quand l'équipe support se tient prête pour la mise en prod</title>
|
||||
<img>https://lesjoiesducode.fr/content/018/iwCfev6TBohRP.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>45418246519</id>
|
||||
<address>http://lesjoiesducode.fr/post/45418246519/quand-un-client-mecontent-se-pointe-au-bureau</address>
|
||||
<title>quand un client mécontent se pointe au bureau</title>
|
||||
<img>http://ljdchost.com/i1cbaP9vnF8d8.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-un-client-mcontent-se-pointe-au-bureau</address>
|
||||
<title>Quand un client mécontent se pointe au bureau</title>
|
||||
<img>https://lesjoiesducode.fr/content/018/i1cbaP9vnF8d8.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>45408448927</id>
|
||||
<address>http://lesjoiesducode.fr/post/45408448927/quand-le-nouveau-ne-comprend-rien-au-code-existant</address>
|
||||
<title>quand le nouveau ne comprend rien au code existant</title>
|
||||
<img>http://ljdchost.com/Ab1sBGN.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-le-nouveau-ne-comprend-rien-au-code-existant</address>
|
||||
<title>Quand le nouveau ne comprend rien au code existant</title>
|
||||
<img>https://lesjoiesducode.fr/content/010/Ab1sBGN.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>45188616951</id>
|
||||
<address>http://lesjoiesducode.fr/post/45188616951/quand-je-forme-le-stagiaire</address>
|
||||
<title>quand je forme le stagiaire</title>
|
||||
<img>http://i.imgur.com/JPJjSDO.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-je-forme-le-stagiaire</address>
|
||||
<title>Quand je forme le stagiaire</title>
|
||||
<img>https://lesjoiesducode.fr/content/019/JPJjSDO.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>43554518707</id>
|
||||
<address>http://lesjoiesducode.fr/post/43554518707/quand-je-fais-une-demo-de-la-stabilite-du-programme-aux</address>
|
||||
<title>quand je fais une demo de la stabilite du programme aux clients</title>
|
||||
<img>http://i.imgur.com/c9RSVyh.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-je-fais-une-demo-de-la-stabilite-du-programme-aux</address>
|
||||
<title>Quand je fais une démo de la stabilité du programme aux clients</title>
|
||||
<img>https://lesjoiesducode.fr/content/012/c9RSVyh.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>37906597625</id>
|
||||
<address>http://lesjoiesducode.fr/post/37906597625/quand-on-mannonce-que-je-vais-devoir-travailler-main</address>
|
||||
<title>quand on m'annonce que je vais devoir travailler main dans la main avec les sysadmins</title>
|
||||
<img>http://imgur.com/dguiD.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-on-mannonce-que-je-vais-devoir-travailler-main</address>
|
||||
<title>Quand on m'annonce que je vais devoir travailler main dans la main avec les sysadmins</title>
|
||||
<img>https://lesjoiesducode.fr/content/013/dguiD.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>36581607302</id>
|
||||
<address>http://lesjoiesducode.fr/post/36581607302/quand-je-me-rends-compte-que-je-bloque-depuis-2-heures</address>
|
||||
<title>quand je me rends compte que je bloque depuis 2 heures a cause d'un point virgule oublie</title>
|
||||
<img>http://i.imgur.com/bBKKy.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-je-me-rends-compte-que-je-bloque-depuis-2-heures</address>
|
||||
<title>Quand je me rends compte que je bloque depuis 2 heures à cause d'un point virgule oublié</title>
|
||||
<img>https://lesjoiesducode.fr/content/011/bBKKy.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>35336782255</id>
|
||||
<address>http://lesjoiesducode.fr/post/35336782255/quand-le-client-essaie-de-cliquer-sur-les-maquettes</address>
|
||||
<address>https://lesjoiesducode.fr/quand-le-client-essaie-de-cliquer-sur-les-maquettes</address>
|
||||
<title>quand le client essaie de cliquer sur les maquettes</title>
|
||||
<img>http://i.imgur.com/Fs2K4.gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>35117256254</id>
|
||||
<address>http://lesjoiesducode.fr/post/35117256254/quand-le-binome-me-demande-sil-doit-coder-a-ma-place</address>
|
||||
<title>quand le binome me demande s'il doit coder a ma place</title>
|
||||
<img>http://cdn.theatlanticwire.com/img/upload/2012/05/10/1268393910_george_clooney_at_the_oscars%20(1).gif</img>
|
||||
</entry>
|
||||
<entry>
|
||||
<id>34692087813</id>
|
||||
<address>http://lesjoiesducode.fr/post/34692087813/quand-je-decouvre-un-force-close-juste-apres-ma</address>
|
||||
<title>quand je decouvre un force close juste apres ma soumission sur le play store // android</title>
|
||||
<img>http://i.imgur.com/QJu8Z.gif</img>
|
||||
<address>https://lesjoiesducode.fr/quand-je-decouvre-un-force-close-juste-apres-ma-soumission-sur-le-play-store-android</address>
|
||||
<title>Quand je découvre un force close juste après ma soumission sur le play store // android</title>
|
||||
<img>https://lesjoiesducode.fr/content/026/QJu8Z.gif</img>
|
||||
</entry>
|
||||
</ljdc>
|
||||
|
||||
@@ -23,16 +23,16 @@
|
||||
<dyn:comment_content/>
|
||||
<dyn:replace div_name="a" href="javascript:void(0);" onClick="javascript:display('response_dyn:comment_index');">Répondre</dyn:replace><br/>
|
||||
<dyn:replace div_name="form" id="response_dyn:comment_index" class="response" method="POST" action="/comment/add/dyn:post_id/dyn:comment_id" onsubmit="return validateComment('response_dyn:comment_index');">
|
||||
Auteur :<br/><input type="required" name="author"/><br/><br/>
|
||||
Auteur :<br/><input required="1" name="author"/><br/><br/>
|
||||
e-mail* :<br/><input id="email" type="email" name="email"/><input type="email" name="mel"/><br/><br/>
|
||||
Le commentaire :<br/><textarea type="required" name="the_comment" cols="80" rows="10"> </textarea><br/><br/>
|
||||
Le commentaire :<br/><textarea required="1" name="the_comment" cols="80" rows="10"> </textarea><br/><br/>
|
||||
<input type="submit" value="Commenter"/>
|
||||
</dyn:replace>
|
||||
</dyn:comments>
|
||||
<dyn:replace div_name="form" id="response_0" method="POST" action="/comment/add/dyn:post_id/0" onsubmit="return validateComment('response_0');">
|
||||
Auteur :<br/><input type="required" name="author"/><br/><br/>
|
||||
Auteur :<br/><input required="1" name="author"/><br/><br/>
|
||||
e-mail* :<br/><input id="email" type="email" name="email"/><input type="email" name="mel"/><br/><br/>
|
||||
Le commentaire :<br/><textarea type="required" name="the_comment" cols="80" rows="10"> </textarea><br/><br/>
|
||||
Le commentaire :<br/><textarea required="1" name="the_comment" cols="80" rows="10"> </textarea><br/><br/>
|
||||
<input type="submit" value="Commenter"/><br/><br/>
|
||||
* Seulement pour être notifié d'une réponse à cet article
|
||||
</dyn:replace>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
|
||||
<head>
|
||||
<meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
|
||||
<meta content="index, follow" name="robots"/>
|
||||
@@ -6,113 +7,135 @@
|
||||
<meta content="Blog de Grégory Soutadé" name="description"/>
|
||||
<meta content="Dynastie" name="generator"/>
|
||||
<title>Blog de Grégory Soutadé</title>
|
||||
<link rel="icon" type="image/png" href="/images/favicon.png" />
|
||||
<link href="/rss.xml" rel="alternate" type="application/rss+xml" title="RSS 2.0" />
|
||||
<link href="/atom.xml" rel="alternate" type="application/atom+xml" title="Atom 1.0" />
|
||||
<link href="/css/blog.css" rel="stylesheet" type="text/css"/>
|
||||
<script language="javascript" src="/js/base64.js"></script>
|
||||
<script src="/js/base64.js"></script>
|
||||
<script language="javascript" type="text/javascript" >
|
||||
<!--
|
||||
function decryptBase64()
|
||||
{
|
||||
<!--
|
||||
function decryptBase64()
|
||||
{
|
||||
var elements = document.getElementsByClassName("decode64");
|
||||
for(var i=0; i<elements.length; i++)
|
||||
{
|
||||
content = elements[i].innerHTML;
|
||||
decoded = Base64.decode(content);
|
||||
elements[i].innerHTML = decoded;
|
||||
content = elements[i].innerHTML;
|
||||
decoded = Base64.decode(content);
|
||||
elements[i].innerHTML = decoded;
|
||||
}
|
||||
}
|
||||
-->
|
||||
}
|
||||
-->
|
||||
</script>
|
||||
</head>
|
||||
<body onLoad="decryptBase64();">
|
||||
<img id="logo" src="/images/tux_final.png"/>
|
||||
<div class="body">
|
||||
<div class="table-row">
|
||||
<div class="table-cell" id="header">
|
||||
<h2 id="title"><a href="/">Blog de Grégory Soutadé</a></h2>
|
||||
<div class="content" id="content">
|
||||
<header>
|
||||
<a href="/"><img id="logo" alt="Logo Tux" src="/images/tux_final2.png"/></a>
|
||||
<div id="header">
|
||||
<span id="title"><a href="/">Blog de Grégory Soutadé</a></span>
|
||||
</div>
|
||||
</header>
|
||||
<div class="about">
|
||||
<p>Bienvenue sur mon blog</p> <p>Bien que beaucoup d'articles soient techniques, l'objectif de ce dernier est avant tout le partage. J'y traiterai ainsi de sujets aussi divers que la musique, le cinéma, des reportages photo de balades, de sciences informatiques, de société et de tout ce qui me passera par la tête et que je jugerai bon de publier.</p>
|
||||
<p>Pour ma part, je suis ingénieur en informatique, spécialisé dans le logiciel embarqué. Après 10 ans passés chez Neotion (dans nos beaux locaux de Sophia-Antipolis), je suis désormais consultant chez Elsys Design (site de Vallauris/Sophia-Antipolis).</p><br/>
|
||||
Pour me contacter :<br/>
|
||||
<ul>
|
||||
<li class="decode64">PGltZyBzcmM9L2ltYWdlcy9tYWlsLnBuZyBhbHQ9bG9nbyBtYWlsPiA8YSBocmVmPW1haWx0bzpncmVnb3J5QHNvdXRhZGUuZnI+Z3JlZ29yeUBzb3V0YWRlLmZyPC9hPg==</li>
|
||||
<li class="decode64">PGltZyBzcmM9L2ltYWdlcy94bXBwLnBuZyBhbHQ9bG9nbyBYTVBQPiBncmVnb3J5QHNvdXRhZGUuZnI=</li>
|
||||
<li class="decode64">PGltZyBzcmM9L2ltYWdlcy9mYWNlYm9vay5wbmcgYWx0PWxvZ28gRmFjZWJvb2s+IDxhIGhyZWY9aHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL2dyZWdvcnkuc291dGFkZT5GYWNlYm9vazwvYT4=</li>
|
||||
<li class="decode64">PGltZyBzcmM9L2ltYWdlcy9saW5rZWRpbi5wbmcgYWx0PWxvZ28gTGlua2VkSU4+IDxhIGhyZWY9aHR0cHM6Ly9saW5rZWRpbi5jb20vaW4vZ3LDqWdvcnktc291dGFkw6k+TGlua2VkaW48L2E+</li>
|
||||
</ul>
|
||||
<br/>
|
||||
<div class="decode64">TWEgY2zDqSA8YSBocmVmPSJodHRwOi8vZnIud2lraXBlZGlhLm9yZy93aWtpL0dQRyI+R1BHPC9hPiA6</div>
|
||||
<div class="decode64">PHByZT4tLS0tLUJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0NClZlcnNpb246IEdudVBHIHYxLjQuMTQgKEdOVS9MaW51eCkNCg0KbVFFTkJGS294NUlCQ0FDOHZOMG83aWRqODJrUXBuSWJxeXR0NzVraGc1TFhMNEJVWVord0ZFZEg2L2FqdGNWVw0KZWxvSlh0Zld6YTlxaTZTdUFPYVBJMVdXS2lMdjFqSW92TEpnSW92Y2Y3aDlOODUwUG85TWc5ZnBwU1NBazFhdg0KcERMUUlvdTcxWlZ2bTU1bTF1amxZZFIwVGxEU016cWJnKzVRY1pWL09sZ1p6R0hXd3NpYjhOazBJN2J6OTRROQ0KRE95TkxxOHJ3U05WL203dEw1WGhJOWFoMjNHNHVWN0VwdXlMenZBeDhPUyt5NGo0NW9SSCt4bkw1RS9DNktPQQ0Ka0FZb1NBaElOQVl4MXVvL0k0YlNzYjFmK1l0ajVjazVhTHdHMytJWWRFK3VUaUVlUUdJSEZ6UXJDUFZEc3AvNA0KZSt3YWNWWjJPY0NkcXlKaTYzVVRTVVQvOUMyQ0dQQTZjbHR2QUJFQkFBRzBKa2R5dzZsbmIzSjVJRk52ZFhSaA0KWk1PcElEeG5jbVZuYjNKNVFITnZkWFJoWkdVdVpuSStpUUU0QkJNQkFnQWlCUUpTcU1lU0Foc0RCZ3NKQ0FjRA0KQWdZVkNBSUpDZ3NFRmdJREFRSWVBUUlYZ0FBS0NSQWtZUDdLNWpnT2k1WkFCL3NHVk1VSnRYWlFJcVhhK3gyUQ0KRkozc0xUWVA3ODF4UmdhM1hLaW9vTk5ReTN1QkptUFdVc1RzZzdqSVljTGRhcTh6a1JYdjB6bjFxYkE3V0tLZQ0KNjd0YkVseUwwYWZqR1d4NDU1cXJBMzRNZmVNMkdRUGIzUWZTTXpSZGc1YkxQamlpbzNnRi8yR1JoUWJLVlh4eA0KNnY0aGRMVEY4SkVoWDk5M1drTDFtMkZKdGp0L1NxSWx5Y0kxclY1dlJXSmFqZk9RSVhsWlFPQXFmM0J1amU1NQ0KNExmRlF5V1A1VmFYVFhRM3RNczl4bzREaWMyZk1CZSt0S290eVdpcysxTFFaYmRGSFN1NDJsTTZXNWdaV3A2Uw0KeFgra2szbDNhNmtKZGt3TmhKYTFra3pXdGF2UFEvZ3Z6VTI2d3lBTVpueDh2bTBEa1RLK1Y0c1JHZmhoV3ZnUA0KZzB2a3VRRU5CRktveDVJQkNBREpXT2hzQkZqVE9rYmlVdDNubWRSOXQyN1p4WWRnTTAvbzZlek9ML08zR0IzMQ0Kb0FKR2xrUFdGaDVjUE5qL0tSZ2Zrd2ZOZ1RvNkNYVjJBSEdCRWw5ejQwRDY2WFhVdEU5U3ovdEJjQXRUS1B2MA0KY1g0c0hoVVZBZmJyZEJwWFgxSXJsOGJEQ2FlNTdKSEFWUSsycVpWYlptOWs2ZG1IN3pFVTcwWU81MWRQbjJuZg0KbXcvUG1NS1lLV2JYNWpPWUpaWFd1bDM4aFBJZU9wTkNGdHBIS3ZURkJvb0prd3NPRCtLMzQyY3R3WWc5YlZmZw0KTWZkeEtla2EwVnBVSy9sOG1FV25ablFObGdHeTVGSGkzVjFSNStPK1lVaDd4WnBQWUNmSjE4bEtCQi9vbHlZUg0KTmR5QTZrcXg4cHlvdHpVOU42NnVZOVN0Wi82cnBPZ0JoR0hUa2dyeEFCRUJBQUdKQVI4RUdBRUNBQWtGQWxLbw0KeDVJQ0d3d0FDZ2tRSkdEK3l1WTREb3VQTndmL1JlU0RBQzFQQmk4Q1VLZXdETWVtcmFlanpKTFpoVzNZWEFZag0KM3ZLZk5Ja290dS96MU9BY1QxZVc4bzdla2h3dzhTMktyMk5DUEhRalJqRmdqNExiWEQrS3lFTFhuVUNDckk3bg0Kc0hXMzcraHB4R0J4ck9zVGRxZitXM2plRUFEVVBHcTVnZW54NnFBVU1yWFpvT2lXUUt6Q1MzczkyZFh3Qk1NRA0KbU1ZbVBBTTFJVFdPbkt4WkhHNlByUTFKWEVzMDAzR0RObHlVZ2xpeW9zd2MwTGN5M25odEVUTGprWVg5QTVLTA0KdEZyMWlkTEtvTEFqMTh2SmVLZTZpSzhWYWVpMExLN3R0Z0VKQmo5UDhaalBobVpRaUpCOTkxTHNlSDBDUmd1dw0KQ3J3MzdqVm9wclRwazFwcG5TcDVsSVhubWh2RXRtVytNaEE4emdWa3BqR2xPaFlRYUxrRExnUlNxTWdGRVFnQQ0KOFFQUnBUZXIwM2tTMlhnNTZnSkFBdWgzRE5ncE1VbkQvMUNrNysrc3NwR1BpUFJvY1BEeCtjVnNlUUdaZDNGVA0KMkVTL1pTSEwvMWFxRnh4V01ZNmZGRjRhbjg3czdGdFdGNDJjWk9OL0NraVJjeXo3dlpHTVhvTzBGUVUzVG1yWA0KZGJ6dU9rc3g5V21ENkhsRWhOYktaSmVYZUVOMjcxdGlXOGNIQzdrTUZWei9Kdk9JQjdJOVlKeWd5QnUvWHJJeQ0KaU9VbzM5aWltcmpsUHRWUDR1T3hBOTVDaHBSNjFNcDVlb25Na2F2M0dFRTZNaFRGTlJVRnI2bVd3MWR3M1B0SQ0KL3NUQ25Ncjl3bG5WL05VRE9vMlZjSEY5c21VM091eEJDWDBQQnBndXpjZTliVjE4R0dMTEhaaXFvQk4wWk0rOQ0KSklQRGxrUzM3VnJnVVNYbXRpbDJ4d0VBckprOW5SU2dFRm8vTEgvVkdCYTVDVlBTQmNjY1MvcWdYUTZJTm9XTQ0KdzRNSUFPa0tUeVVQRVJKUy8zV2tCQ2IwcHd6dUVVVi8wRmZKZjBnamErQW1qYkRaeE9ObEliL2YyRVJRb0FFMg0KYk5qOVU5RUYyYXYwZDJKdzVjSTJCTmN6SkFFdDFOSTk4aXQ5Y3Z0ajI4S3NxZzZwYzN1VEllTDlqWmU3a1dYaQ0KdCtEUkkzKzZLMnZPc010MTZINi9HUlBCNExicDVQUHZHTEs1cS9ya0d4Q3VRRFdWQ3ROMzIwMHgwV2NrUHRRZA0Kb0p6Rk9NMDBVaWJhQ0tid1NCdGFlUFUxWEJhbC9HOHJwdVQwM2hIdHB6d1paN045SlY4ZzFWNHNXRHlJTmNQTw0Kb1dsUTVoUXVPZU1IYkpCaGVyWlAvemN6cWx5YnVQRnYyaFRUVFZEUWN2WXJNTlJPRTczR25QTmhaTzlNSUhiMQ0KV0xHUTJRc2RwT2h3VVFraU9ZTG1yUXZDd3o4SC8wekZ6Z2NpbWMrV0plU0tKNllWMHpxTDZUYUoxTThGTkNUdQ0KdWdQWjBVeXRuWmM5MFJsN1VDS0RhOFJzbTZNQnV0MWpYWlMwaGZqUVl4aitObnpnbWg4WUNwTmhwQncrUTJseg0KWEdEN3FJZHgzUzdQU3p3RUQvbGNqZVp3aFIySnpPT3Z4SS9vei9JTVJjV3ZGWFBsZHNueHM5N2Qxa2p0blFJNA0KM3hMUEVoRHZ2TDBNWlJ3MDl5Z2VwSE1IU0FrM1d3My8vR1NRaWt0THRZc3lIK2phL2d1R2t6ZmpsUHhBNmhOSg0KeWFsU1U0TGcvOEN1RTdUaGQyTEdOVVRQUDYrUkhyRDBBN3l6M21XSXozUUZaYTJvbE9VZjh0VncwWktJUGoxZg0KT0RyUmFBZnMwUnVhR3BWaDIwM2VBbGZzbDVXTmRaamhvWlJyYkp1RTlySnFYaDVlMUV5SkFYOEVHQUVDQUFrRg0KQWxLb3lBVUNHd0lBYWdrUUpHRCt5dVk0RG90ZklBUVpFUWdBQmdVQ1VxaklCUUFLQ1JDM2x1bi83OTQ5R1psRA0KQVA0MGNydE5OcUVLZlhkYWFQWDVyZ0FIajRCSG8vbmF0SXNxUGxZNXRobU9sUUQ3QjJ1MEp0MUpYOTgrNTRJQg0KU1lnL3llTlZqZElCRmhOTkhkbWsyVkhYMDlFaHNnZ0FtcS84SURqT21UdEI3bkd0Q2gwMU01cDBXeThLQzExZw0Ka3JFUm93UjZubnQ2ZkNJZmFXamhUUVRCNDh4WWZSR3ZIOHcxZDlJcDBibVZVUkRuZ3lNdlduY01HeVd5aWk5VA0KTXdzUDdndE93UUJIQVFYR1VuK2lEd3FlMjhQVXBvMytzM3ZNTWhLaUZFWnhEN3ZzVkc5Z1VYb0lzVllaQVlncg0KWG9hZEpRZWNHM1g5RWFzcCtFTkV3aU5rYStuYWh3bVZ1SjdmZm9EQnR4UVI0V1lkQnZlSDVWUUpBbW16L01FMw0Kak45U3JkR1RIcmI0aVdJUFllM1FrQ2xrQkpKL3hocGt3ZGpjRjFwbHdXQlE4OCtZb0RMaXVvWWY4Z3pmTmN4eg0KSmRHQ3FzRnhZL3ROMkIvMkw1eXUvMVBQUDZEc1lGY2lDZmlsOWJURUNzVWRyQldMeWxzTFp3PT0NCj02ZDcyDQotLS0tLUVORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tDQo8L3ByZT4=</div>
|
||||
</div>
|
||||
<div class="table-row">
|
||||
<div class="content">
|
||||
Bonjour, je m'appelle Grégory Soutadé. Ingénieur en informatique (logiciel embarqué). Actuellement en poste chez Neotion (dans nos beaux locaux de Sophia-Antipolis).<br/><br/>
|
||||
Pour me contacter :<br/>
|
||||
<ul>
|
||||
<li class="decode64">PGEgaHJlZj0ibWFpbHRvOmdyZWdvcnlAc291dGFkZS5mciI+Z3JlZ29yeUBzb3V0YWRlLmZyPC9hPg==</li>
|
||||
<li class="decode64">PGEgaHJlZj0iaHR0cDovL2ZyLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbnNpYmxlX01lc3NhZ2luZ19hbmRfUHJlc2VuY2VfUHJvdG9jb2wiPlhNUFA8L2E+IDogZ3JlZ29yeUBzb3V0YWRlLmZy</li>
|
||||
<li class="decode64">PGEgaHJlZj0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vZ3JlZ29yeS5zb3V0YWRlIj5GYWNlYm9vazwvYT4=</li>
|
||||
</ul>
|
||||
<div class="decode64">TWEgY2zDqSA8YSBocmVmPSJodHRwOi8vZnIud2lraXBlZGlhLm9yZy93aWtpL0dQRyI+R1BHPC9hPiA6</div>
|
||||
<div class="decode64">PHByZT4tLS0tLUJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0NClZlcnNpb246IEdudVBHIHYxLjQuMTQgKEdOVS9MaW51eCkNCg0KbVFFTkJGS294NUlCQ0FDOHZOMG83aWRqODJrUXBuSWJxeXR0NzVraGc1TFhMNEJVWVord0ZFZEg2L2FqdGNWVw0KZWxvSlh0Zld6YTlxaTZTdUFPYVBJMVdXS2lMdjFqSW92TEpnSW92Y2Y3aDlOODUwUG85TWc5ZnBwU1NBazFhdg0KcERMUUlvdTcxWlZ2bTU1bTF1amxZZFIwVGxEU016cWJnKzVRY1pWL09sZ1p6R0hXd3NpYjhOazBJN2J6OTRROQ0KRE95TkxxOHJ3U05WL203dEw1WGhJOWFoMjNHNHVWN0VwdXlMenZBeDhPUyt5NGo0NW9SSCt4bkw1RS9DNktPQQ0Ka0FZb1NBaElOQVl4MXVvL0k0YlNzYjFmK1l0ajVjazVhTHdHMytJWWRFK3VUaUVlUUdJSEZ6UXJDUFZEc3AvNA0KZSt3YWNWWjJPY0NkcXlKaTYzVVRTVVQvOUMyQ0dQQTZjbHR2QUJFQkFBRzBKa2R5dzZsbmIzSjVJRk52ZFhSaA0KWk1PcElEeG5jbVZuYjNKNVFITnZkWFJoWkdVdVpuSStpUUU0QkJNQkFnQWlCUUpTcU1lU0Foc0RCZ3NKQ0FjRA0KQWdZVkNBSUpDZ3NFRmdJREFRSWVBUUlYZ0FBS0NSQWtZUDdLNWpnT2k1WkFCL3NHVk1VSnRYWlFJcVhhK3gyUQ0KRkozc0xUWVA3ODF4UmdhM1hLaW9vTk5ReTN1QkptUFdVc1RzZzdqSVljTGRhcTh6a1JYdjB6bjFxYkE3V0tLZQ0KNjd0YkVseUwwYWZqR1d4NDU1cXJBMzRNZmVNMkdRUGIzUWZTTXpSZGc1YkxQamlpbzNnRi8yR1JoUWJLVlh4eA0KNnY0aGRMVEY4SkVoWDk5M1drTDFtMkZKdGp0L1NxSWx5Y0kxclY1dlJXSmFqZk9RSVhsWlFPQXFmM0J1amU1NQ0KNExmRlF5V1A1VmFYVFhRM3RNczl4bzREaWMyZk1CZSt0S290eVdpcysxTFFaYmRGSFN1NDJsTTZXNWdaV3A2Uw0KeFgra2szbDNhNmtKZGt3TmhKYTFra3pXdGF2UFEvZ3Z6VTI2d3lBTVpueDh2bTBEa1RLK1Y0c1JHZmhoV3ZnUA0KZzB2a3VRRU5CRktveDVJQkNBREpXT2hzQkZqVE9rYmlVdDNubWRSOXQyN1p4WWRnTTAvbzZlek9ML08zR0IzMQ0Kb0FKR2xrUFdGaDVjUE5qL0tSZ2Zrd2ZOZ1RvNkNYVjJBSEdCRWw5ejQwRDY2WFhVdEU5U3ovdEJjQXRUS1B2MA0KY1g0c0hoVVZBZmJyZEJwWFgxSXJsOGJEQ2FlNTdKSEFWUSsycVpWYlptOWs2ZG1IN3pFVTcwWU81MWRQbjJuZg0KbXcvUG1NS1lLV2JYNWpPWUpaWFd1bDM4aFBJZU9wTkNGdHBIS3ZURkJvb0prd3NPRCtLMzQyY3R3WWc5YlZmZw0KTWZkeEtla2EwVnBVSy9sOG1FV25ablFObGdHeTVGSGkzVjFSNStPK1lVaDd4WnBQWUNmSjE4bEtCQi9vbHlZUg0KTmR5QTZrcXg4cHlvdHpVOU42NnVZOVN0Wi82cnBPZ0JoR0hUa2dyeEFCRUJBQUdKQVI4RUdBRUNBQWtGQWxLbw0KeDVJQ0d3d0FDZ2tRSkdEK3l1WTREb3VQTndmL1JlU0RBQzFQQmk4Q1VLZXdETWVtcmFlanpKTFpoVzNZWEFZag0KM3ZLZk5Ja290dS96MU9BY1QxZVc4bzdla2h3dzhTMktyMk5DUEhRalJqRmdqNExiWEQrS3lFTFhuVUNDckk3bg0Kc0hXMzcraHB4R0J4ck9zVGRxZitXM2plRUFEVVBHcTVnZW54NnFBVU1yWFpvT2lXUUt6Q1MzczkyZFh3Qk1NRA0KbU1ZbVBBTTFJVFdPbkt4WkhHNlByUTFKWEVzMDAzR0RObHlVZ2xpeW9zd2MwTGN5M25odEVUTGprWVg5QTVLTA0KdEZyMWlkTEtvTEFqMTh2SmVLZTZpSzhWYWVpMExLN3R0Z0VKQmo5UDhaalBobVpRaUpCOTkxTHNlSDBDUmd1dw0KQ3J3MzdqVm9wclRwazFwcG5TcDVsSVhubWh2RXRtVytNaEE4emdWa3BqR2xPaFlRYUxrRExnUlNxTWdGRVFnQQ0KOFFQUnBUZXIwM2tTMlhnNTZnSkFBdWgzRE5ncE1VbkQvMUNrNysrc3NwR1BpUFJvY1BEeCtjVnNlUUdaZDNGVA0KMkVTL1pTSEwvMWFxRnh4V01ZNmZGRjRhbjg3czdGdFdGNDJjWk9OL0NraVJjeXo3dlpHTVhvTzBGUVUzVG1yWA0KZGJ6dU9rc3g5V21ENkhsRWhOYktaSmVYZUVOMjcxdGlXOGNIQzdrTUZWei9Kdk9JQjdJOVlKeWd5QnUvWHJJeQ0KaU9VbzM5aWltcmpsUHRWUDR1T3hBOTVDaHBSNjFNcDVlb25Na2F2M0dFRTZNaFRGTlJVRnI2bVd3MWR3M1B0SQ0KL3NUQ25Ncjl3bG5WL05VRE9vMlZjSEY5c21VM091eEJDWDBQQnBndXpjZTliVjE4R0dMTEhaaXFvQk4wWk0rOQ0KSklQRGxrUzM3VnJnVVNYbXRpbDJ4d0VBckprOW5SU2dFRm8vTEgvVkdCYTVDVlBTQmNjY1MvcWdYUTZJTm9XTQ0KdzRNSUFPa0tUeVVQRVJKUy8zV2tCQ2IwcHd6dUVVVi8wRmZKZjBnamErQW1qYkRaeE9ObEliL2YyRVJRb0FFMg0KYk5qOVU5RUYyYXYwZDJKdzVjSTJCTmN6SkFFdDFOSTk4aXQ5Y3Z0ajI4S3NxZzZwYzN1VEllTDlqWmU3a1dYaQ0KdCtEUkkzKzZLMnZPc010MTZINi9HUlBCNExicDVQUHZHTEs1cS9ya0d4Q3VRRFdWQ3ROMzIwMHgwV2NrUHRRZA0Kb0p6Rk9NMDBVaWJhQ0tid1NCdGFlUFUxWEJhbC9HOHJwdVQwM2hIdHB6d1paN045SlY4ZzFWNHNXRHlJTmNQTw0Kb1dsUTVoUXVPZU1IYkpCaGVyWlAvemN6cWx5YnVQRnYyaFRUVFZEUWN2WXJNTlJPRTczR25QTmhaTzlNSUhiMQ0KV0xHUTJRc2RwT2h3VVFraU9ZTG1yUXZDd3o4SC8wekZ6Z2NpbWMrV0plU0tKNllWMHpxTDZUYUoxTThGTkNUdQ0KdWdQWjBVeXRuWmM5MFJsN1VDS0RhOFJzbTZNQnV0MWpYWlMwaGZqUVl4aitObnpnbWg4WUNwTmhwQncrUTJseg0KWEdEN3FJZHgzUzdQU3p3RUQvbGNqZVp3aFIySnpPT3Z4SS9vei9JTVJjV3ZGWFBsZHNueHM5N2Qxa2p0blFJNA0KM3hMUEVoRHZ2TDBNWlJ3MDl5Z2VwSE1IU0FrM1d3My8vR1NRaWt0THRZc3lIK2phL2d1R2t6ZmpsUHhBNmhOSg0KeWFsU1U0TGcvOEN1RTdUaGQyTEdOVVRQUDYrUkhyRDBBN3l6M21XSXozUUZaYTJvbE9VZjh0VncwWktJUGoxZg0KT0RyUmFBZnMwUnVhR3BWaDIwM2VBbGZzbDVXTmRaamhvWlJyYkp1RTlySnFYaDVlMUV5SkFYOEVHQUVDQUFrRg0KQWxLb3lBVUNHd0lBYWdrUUpHRCt5dVk0RG90ZklBUVpFUWdBQmdVQ1VxaklCUUFLQ1JDM2x1bi83OTQ5R1psRA0KQVA0MGNydE5OcUVLZlhkYWFQWDVyZ0FIajRCSG8vbmF0SXNxUGxZNXRobU9sUUQ3QjJ1MEp0MUpYOTgrNTRJQg0KU1lnL3llTlZqZElCRmhOTkhkbWsyVkhYMDlFaHNnZ0FtcS84SURqT21UdEI3bkd0Q2gwMU01cDBXeThLQzExZw0Ka3JFUm93UjZubnQ2ZkNJZmFXamhUUVRCNDh4WWZSR3ZIOHcxZDlJcDBibVZVUkRuZ3lNdlduY01HeVd5aWk5VA0KTXdzUDdndE93UUJIQVFYR1VuK2lEd3FlMjhQVXBvMytzM3ZNTWhLaUZFWnhEN3ZzVkc5Z1VYb0lzVllaQVlncg0KWG9hZEpRZWNHM1g5RWFzcCtFTkV3aU5rYStuYWh3bVZ1SjdmZm9EQnR4UVI0V1lkQnZlSDVWUUpBbW16L01FMw0Kak45U3JkR1RIcmI0aVdJUFllM1FrQ2xrQkpKL3hocGt3ZGpjRjFwbHdXQlE4OCtZb0RMaXVvWWY4Z3pmTmN4eg0KSmRHQ3FzRnhZL3ROMkIvMkw1eXUvMVBQUDZEc1lGY2lDZmlsOWJURUNzVWRyQldMeWxzTFp3PT0NCj02ZDcyDQotLS0tLUVORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tDQo8L3ByZT4=</div>
|
||||
<footer>
|
||||
<div class="footer">
|
||||
Copyright © 2010-2022 Grégory Soutadé.<br/>
|
||||
Tous droits réservés.
|
||||
</div>
|
||||
<div class="menu">
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Recherche</div>
|
||||
<div id="menu_main">
|
||||
<dyn:replace div_name="form" id="search_form" method="POST" action="/search/dyn:blog_id">
|
||||
<input type="text" name="text" id="search_text" onkeypress="handleKeyPress(event,this.form)"/>
|
||||
</dyn:replace>
|
||||
</div>
|
||||
</div>
|
||||
<nav>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Menu principal</div>
|
||||
<div id="menu_main">
|
||||
<div class="menu_content_content"><a href="/">Première page</a></div>
|
||||
<div class="menu_content_content"><a href="/about.html">À propos</a></div>
|
||||
<div class="menu_content_content"><a href="/all_posts.html">Tous les articles</a></div>
|
||||
<div class="menu_content_content"><a href="http://indefero.soutade.fr">Projets personnels</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Catégories</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/category/articles">Articles</a></li>
|
||||
<li><a href="/category/musique">Musique</a></li>
|
||||
<li><a href="/category/informatique">Informatique</a></li>
|
||||
<li><a href="/category/cinema">Cinéma</a></li>
|
||||
<li><a href="/category/sport">Sport</a></li>
|
||||
<li><a href="/category/configurations-pc">Configurations PC</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Tags</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/tag/inenglish">In English</a></li>
|
||||
<li><a href="/tag/python">Python</a></li>
|
||||
<li><a href="/tag/sheevaplug">SheevaPlug</a></li>
|
||||
<li><a href="/tag/course-a-pied">Course à pied</a></li>
|
||||
<li><a href="/tag/tag-rugby">Tag rugby</a></li>
|
||||
<li><a href="/tag/politique">Politique</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Archives</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/archive/2014">2014</a></li>
|
||||
<li><a href="/archive/2013">2013</a></li>
|
||||
<li><a href="/archive/2012">2012</a></li>
|
||||
<li><a href="/archive/2011">2011</a></li>
|
||||
<li><a href="/archive/2010">2010</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feed">
|
||||
<a href="/rss.xml"><img src="/images/rss.png" alt="RSS feeds"></img> RSS</a><a href="/atom.xml"><img src="/images/atom.png" alt="Atom feeds"></img> Atom</a>
|
||||
</div>
|
||||
</nav>
|
||||
<p style="align:text-center">Généré avec <a href="http://indefero.soutade.fr/p/dynastie">Dynastie</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
Copyright © 2010-2015 Grégory Soutadé.<br/>
|
||||
All Rights Reserved.
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
<div class="hamburger" id="hamburger">
|
||||
<a href="#" onclick="switchMenu();return false;">
|
||||
<img id="hamburger_logo" alt="Menu" src="/images/hamburger.png"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="menu">
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Recherche</div>
|
||||
<div class="menu_main">
|
||||
<form action="/search/1" id="search_form" method="POST">
|
||||
<input id="search_text" name="text" onkeypress="handleKeyPress(event,this.form)" type="text"/>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<nav>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Menu principal</div>
|
||||
<div class="menu_main">
|
||||
<div class="menu_content_content"><a href="/">Première page</a></div>
|
||||
<div class="menu_content_content"><a href="/about.html">À propos</a></div>
|
||||
<div class="menu_content_content"><a href="/all_posts.html">Tous les articles</a></div>
|
||||
<div class="menu_content_content"><a href="http://indefero.soutade.fr">Projets personnels</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Catégories</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/category/articles">Articles</a></li>
|
||||
<li><a href="/category/musique">Musique</a></li>
|
||||
<li><a href="/category/informatique">Informatique</a></li>
|
||||
<li><a href="/category/cinema">Cinéma</a></li>
|
||||
<li><a href="/category/sport">Sport</a></li>
|
||||
<li><a href="/category/configurations-pc">Configurations PC</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Tags</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/tag/inenglish">In English</a></li>
|
||||
<li><a href="/tag/python">Python</a></li>
|
||||
<li><a href="/tag/sheevaplug">SheevaPlug</a></li>
|
||||
<li><a href="/tag/course-a-pied">Course à pied</a></li>
|
||||
<li><a href="/tag/tag-rugby">Tag rugby</a></li>
|
||||
<li><a href="/tag/politique">Politique</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="menu_content">
|
||||
<div class="menu_content_header">Archives</div>
|
||||
<div class="menu_content_content">
|
||||
<ul>
|
||||
<li><a href="/archive/2021">2021</a></li>
|
||||
<li><a href="/archive/2020">2020</a></li>
|
||||
<li><a href="/archive/2019">2019</a></li>
|
||||
<li><a href="/archive/2018">2018</a></li>
|
||||
<li><a href="/archive/2017">2017</a></li>
|
||||
<li><a href="/archive/2016">2016</a></li>
|
||||
<li><a href="/archive/2015">2015</a></li>
|
||||
<li><a href="/archive/2014">2014</a></li>
|
||||
<li><a href="/archive/2013">2013</a></li>
|
||||
<li><a href="/archive/2012">2012</a></li>
|
||||
<li><a href="/archive/2011">2011</a></li>
|
||||
<li><a href="/archive/2010">2010</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="feed">
|
||||
<a href="/rss.xml"><img src="/images/rss.png" alt="RSS feeds"/> RSS</a><a href="/atom.xml"><img src="/images/atom.png" alt="Atom feeds"/> Atom</a>
|
||||
</div>
|
||||
<div class="newsletter">
|
||||
<p>Newsletter
|
||||
<input id="pannous_email" type="email" onclick="clear_your_email();" value="Your email"/>
|
||||
<input type="button" value="Subscribe" onclick="pannous_list_subscribe();"/>
|
||||
</p>
|
||||
</div>
|
||||
</nav>
|
||||
<p style="align:text-center">Généré avec <a href="http://indefero.soutade.fr/p/dynastie">Dynastie</a></p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Executable → Regular
+201
-217
@@ -1,56 +1,35 @@
|
||||
html
|
||||
{
|
||||
height:100%;
|
||||
}
|
||||
|
||||
body
|
||||
{
|
||||
/* margin: 0 auto; */
|
||||
padding: 0;
|
||||
background-color: #ffffe2;
|
||||
margin-left: 15%;
|
||||
margin-right: 15%;
|
||||
height:100%;
|
||||
}
|
||||
|
||||
div.body
|
||||
{
|
||||
position:relative;
|
||||
top:-315px;
|
||||
display:table;
|
||||
width:100%;
|
||||
height:100%;
|
||||
background-color:white;
|
||||
border-style:solid;
|
||||
border-color:black;
|
||||
border-width:3px;
|
||||
margin-top:150px;
|
||||
background-color: #f0e5a4;
|
||||
font-family: Verdana, Serif;
|
||||
/* font-family: Georgia, 'Times New Roman', Times, serif; */
|
||||
}
|
||||
|
||||
#logo
|
||||
{
|
||||
z-index:2;
|
||||
display:inline;
|
||||
position:relative;
|
||||
/* top:-135px; */
|
||||
top: 33px;
|
||||
left:-27px;
|
||||
position:absolute;
|
||||
top: -125px;
|
||||
left:-30px;
|
||||
}
|
||||
|
||||
#title a
|
||||
{
|
||||
z-index:12;
|
||||
display:inline;
|
||||
color:black;
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
font-size: 50px;
|
||||
padding-left:180px;
|
||||
font-size: 2em;
|
||||
padding-left:20%;
|
||||
padding-right:2em;
|
||||
margin-right:3em;
|
||||
}
|
||||
|
||||
#header
|
||||
{
|
||||
padding-top:50px;
|
||||
padding-bottom:50px;
|
||||
padding-top:2em;
|
||||
padding-bottom:3em;
|
||||
background-color:white;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
#recents_title
|
||||
@@ -58,77 +37,77 @@ div.body
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
div.table {display:table;}
|
||||
div.table-row {display:table-row;}
|
||||
div.table-cell {display:table-cell;}
|
||||
|
||||
div.content
|
||||
{
|
||||
display:table-cell;
|
||||
padding-left:3%;
|
||||
padding-right:2%;
|
||||
/* margin-top:2%; */
|
||||
width:75%;
|
||||
display:inline-block;
|
||||
position:relative;
|
||||
top:170px;
|
||||
left:170px;
|
||||
padding-left:2em;
|
||||
padding-right:2em;
|
||||
margin-bottom:15em;
|
||||
/* margin-right:25%;*/
|
||||
width:70%;
|
||||
background-color:white;
|
||||
border-style:solid;
|
||||
border-color:black;
|
||||
border-width:3px;
|
||||
z-index:1;
|
||||
}
|
||||
|
||||
/* Menu */
|
||||
div.menu
|
||||
{
|
||||
display:inline-block;
|
||||
background-color:white;
|
||||
border-radius: 10px;
|
||||
border-style:solid;
|
||||
border-color: black;
|
||||
border-width:3px;
|
||||
background-color: #edeee7;
|
||||
width:13%;
|
||||
position:absolute;
|
||||
top:20em;
|
||||
right:2%;
|
||||
z-index:0;
|
||||
}
|
||||
|
||||
.menu_main
|
||||
{
|
||||
padding:0.5em;
|
||||
}
|
||||
|
||||
div.menu
|
||||
{
|
||||
display:table-cell;
|
||||
width:20%;
|
||||
margin:8px;
|
||||
}
|
||||
|
||||
#menu_main
|
||||
{
|
||||
padding:10px;
|
||||
font-family: Sans-serif;
|
||||
}
|
||||
|
||||
div.menu div.menu_content
|
||||
{
|
||||
background-color: #edeee7;
|
||||
border-style : solid ridge ridge solid;
|
||||
/* background-color: #edeee7; */
|
||||
border-style : solid solid solid solid;
|
||||
border-color:#d4d6c6;
|
||||
border-width:2px;
|
||||
border-bottom-width:4px;
|
||||
border-right-width:4px;
|
||||
padding:6px;
|
||||
margin :10px;
|
||||
padding:0.3em;
|
||||
margin :1em;
|
||||
}
|
||||
|
||||
div.menu div.menu_content div.menu_content_header
|
||||
{
|
||||
font-family: Sans-serif;
|
||||
font-size: 17px;
|
||||
background-image: url("/images/BlockHeaderIcon.png");
|
||||
font-size: 17pt;
|
||||
background-repeat: no-repeat;
|
||||
background-position: left center;
|
||||
padding-left: 18px;
|
||||
text-align:center;
|
||||
color: #475028;
|
||||
}
|
||||
|
||||
div.menu div.menu_content div.menu_content_content
|
||||
{
|
||||
color: #5e6a34;
|
||||
margin: 3px;
|
||||
margin: 0.2em;
|
||||
}
|
||||
|
||||
div.menu_content_content a
|
||||
{
|
||||
font-family: Sans-serif;
|
||||
color: #5e6a34;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
div.menu div.menu_content div.menu_content_content a:link
|
||||
{
|
||||
font-family: Sans-serif;
|
||||
color: #5e6a34;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
div.menu div.menu_content div.menu_content_content a:hover
|
||||
div.menu_content_content a, a:link, a:hover
|
||||
{
|
||||
font-family: Sans-serif;
|
||||
color: #5e6a34;
|
||||
@@ -138,7 +117,7 @@ div.menu div.menu_content div.menu_content_content a:hover
|
||||
|
||||
div.menu div.menu_content div.menu_content_content ul
|
||||
{
|
||||
padding-left:20px;
|
||||
padding-left:1.3em;
|
||||
}
|
||||
|
||||
div.menu div.menu_content div.menu_content_content li
|
||||
@@ -151,29 +130,46 @@ div.menu a img
|
||||
display:inline;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
div.recents
|
||||
{
|
||||
margin-left:20px;
|
||||
}
|
||||
|
||||
#archive_year, #category_name, #tag_name
|
||||
{
|
||||
font-size:50pt;
|
||||
padding-bottom:0.5em;
|
||||
}
|
||||
|
||||
div.navigation
|
||||
{
|
||||
margin:1em;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
div.footer
|
||||
{
|
||||
width:100%;
|
||||
display:block;
|
||||
text-align:center;
|
||||
padding:15px;
|
||||
padding-bottom:1em;
|
||||
}
|
||||
|
||||
/* Post */
|
||||
div.post
|
||||
{
|
||||
display:block;
|
||||
margin-bottom:100px;
|
||||
margin-bottom:5em;
|
||||
}
|
||||
|
||||
div.post div.post_header
|
||||
{
|
||||
display:block;
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
color: #3c3e2d;
|
||||
padding-bottom:5px;
|
||||
}
|
||||
|
||||
div.post div.post_header div.title
|
||||
div.post_header h2.title, div.post_header h2.title > a
|
||||
{
|
||||
display:block;
|
||||
text-decoration:none;
|
||||
@@ -190,52 +186,7 @@ div.post div.post_header div.title
|
||||
text-align:left;
|
||||
text-indent:0;
|
||||
line-height:inherit;
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
font-size: 26px;
|
||||
color: #181B0D;
|
||||
}
|
||||
|
||||
div.post_header div.title > a
|
||||
{
|
||||
display:block;
|
||||
text-decoration:none;
|
||||
margin: 0.2em 0;
|
||||
padding: 0;
|
||||
font-weight:normal;
|
||||
font-style:normal;
|
||||
letter-spacing:normal;
|
||||
word-spacing:normal;
|
||||
font-variant:normal;
|
||||
text-decoration:none;
|
||||
font-variant:normal;
|
||||
text-transform:none;
|
||||
text-align:left;
|
||||
text-indent:0;
|
||||
line-height:inherit;
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
font-size: 26px;
|
||||
color: #181B0D;
|
||||
}
|
||||
|
||||
div.post_header div.title > a:hover
|
||||
{
|
||||
display:block;
|
||||
text-decoration:none;
|
||||
margin: 0.2em 0;
|
||||
padding: 0;
|
||||
font-weight:normal;
|
||||
font-style:normal;
|
||||
letter-spacing:normal;
|
||||
word-spacing:normal;
|
||||
font-variant:normal;
|
||||
text-decoration:none;
|
||||
font-variant:normal;
|
||||
text-transform:none;
|
||||
text-align:left;
|
||||
text-indent:0;
|
||||
line-height:inherit;
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
font-size: 26px;
|
||||
font-size: 33pt;
|
||||
color: #181B0D;
|
||||
}
|
||||
|
||||
@@ -243,8 +194,7 @@ div.post_header div.post_sub_header
|
||||
{
|
||||
display:block;
|
||||
background-color: #edeee7;
|
||||
/* margin-left : 10px; */
|
||||
padding : 3px;
|
||||
padding : 0.3em;
|
||||
}
|
||||
|
||||
div.post_header div.post_sub_header > div.author_icon
|
||||
@@ -253,8 +203,7 @@ div.post_header div.post_sub_header > div.author_icon
|
||||
background-image: url('/images/authoricon.png');
|
||||
background-repeat: no-repeat;
|
||||
background-position: center left;
|
||||
padding-left: 18px;
|
||||
font-family: Sans-serif;
|
||||
padding-left: 1.5em;
|
||||
}
|
||||
|
||||
div.post_header div.post_sub_header > div.author_icon div.author
|
||||
@@ -270,17 +219,15 @@ div.post_header div.post_sub_header div.date
|
||||
background-image: url('/images/dateicon.png');
|
||||
background-repeat: no-repeat;
|
||||
background-position: left center;
|
||||
padding-left: 18px;
|
||||
padding-left: 1.5em;
|
||||
}
|
||||
|
||||
div.post div.post_content
|
||||
{
|
||||
display:block;
|
||||
margin-top:1%;
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
font-size: 1.1em;
|
||||
color: #171811;
|
||||
|
||||
}
|
||||
|
||||
footer.post_footer
|
||||
@@ -306,27 +253,9 @@ footer.post_footer > a:visited
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
|
||||
div.recents
|
||||
{
|
||||
margin-left:20px;
|
||||
}
|
||||
|
||||
#archive_year, #category_name, #tag_name
|
||||
{
|
||||
font-size:50;
|
||||
padding-bottom:20px;
|
||||
}
|
||||
|
||||
div.navigation
|
||||
{
|
||||
margin:5px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
a, a:link, a:hover
|
||||
{
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
font-family: Verdana, Serif;
|
||||
color: #818f00;
|
||||
text-decoration:none;
|
||||
}
|
||||
@@ -341,49 +270,19 @@ a img
|
||||
.inlineimage
|
||||
{
|
||||
display:inline;
|
||||
margin-right: 20px;
|
||||
margin-left: 5em;
|
||||
}
|
||||
|
||||
a .inlineimage
|
||||
{
|
||||
display:inline;
|
||||
margin-right: 20px;
|
||||
margin-left: 5em;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6, h1 a, h2 a, h3 a, h4 a, h5 a, h6 a h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
|
||||
{
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
h1, h1 a, h1 a:link, h1 a:visited, h1 a:hover
|
||||
{
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
padding-top:20px;
|
||||
font-size: 28px;
|
||||
color: #818f00;
|
||||
}
|
||||
|
||||
h2, h2 a, h2 a:link, h2 a:visited, h2 a:hover
|
||||
{
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
padding-top:18px;
|
||||
font-size: 26px;
|
||||
color: #8c9d4d;
|
||||
}
|
||||
|
||||
h3, h3 a, h3 a:link, h3 a:visited, h3 a:hover
|
||||
{
|
||||
font-family: 'Latin Modern Roman', Georgia, 'Times New Roman', Times, serif;
|
||||
padding-top:15px;
|
||||
font-size: 21px;
|
||||
color: #65684b;
|
||||
}
|
||||
|
||||
h4
|
||||
{
|
||||
padding-top:10px;
|
||||
font-size: 1em;
|
||||
font-weight: inherit;
|
||||
font-style: inherit;
|
||||
}
|
||||
|
||||
ul li
|
||||
@@ -391,6 +290,7 @@ ul li
|
||||
list-style-image: url("/images/bullet.png");
|
||||
}
|
||||
|
||||
/* Comments */
|
||||
.comments
|
||||
{
|
||||
padding-left:1%;
|
||||
@@ -405,24 +305,21 @@ ul li
|
||||
border-style:solid;
|
||||
border-radius: 10px;
|
||||
border-color: #8e785b;
|
||||
/* margin-bottom:3%; */
|
||||
padding:5px;
|
||||
margin:15px
|
||||
padding:0.5em;
|
||||
margin:1em;
|
||||
}
|
||||
|
||||
.comment .comment
|
||||
{
|
||||
margin-top:15px;
|
||||
margin-left:15px;
|
||||
margin-bottom:1px;
|
||||
margin-right:1px;
|
||||
margin-top:1em;
|
||||
margin-left:1em;
|
||||
}
|
||||
|
||||
.comment_content
|
||||
{
|
||||
padding-top:5px;
|
||||
padding-left:5px;
|
||||
margin-bottom:5px;
|
||||
padding-top:0.5em;
|
||||
padding-left:0.5em;
|
||||
margin-bottom:0.5em;
|
||||
text-align:justify;
|
||||
}
|
||||
|
||||
@@ -433,7 +330,7 @@ ul li
|
||||
|
||||
.comment_author, .comment_date
|
||||
{
|
||||
margin-left:5px;
|
||||
margin-left:0.3em;
|
||||
}
|
||||
|
||||
.comment_author
|
||||
@@ -444,7 +341,7 @@ ul li
|
||||
.response
|
||||
{
|
||||
display:none;
|
||||
padding:5px;
|
||||
padding:0.5em;
|
||||
}
|
||||
|
||||
.tags, .tag
|
||||
@@ -454,7 +351,7 @@ ul li
|
||||
|
||||
.tag
|
||||
{
|
||||
margin-left:10px;
|
||||
margin-left:1em;
|
||||
}
|
||||
|
||||
#email
|
||||
@@ -462,6 +359,12 @@ ul li
|
||||
display:none;
|
||||
}
|
||||
|
||||
.newsletter > p {
|
||||
font-weight:bold;
|
||||
text-align:center;
|
||||
color: #5e6a34;
|
||||
}
|
||||
|
||||
/* Pygments */
|
||||
.codehilite, .highlight { background-color: #e8e8e8; }
|
||||
.hl, .color_emacs_hll { background-color: #ffffcc }
|
||||
@@ -526,6 +429,7 @@ ul li
|
||||
.vi, .color_emacs_vi { color: #B8860B } /* Name.Variable.Instance */
|
||||
.il, .color_emacs_il { color: #666666 } /* Literal.Number.Integer.Long */
|
||||
|
||||
/* Search */
|
||||
#search_form
|
||||
{
|
||||
padding:0;
|
||||
@@ -537,6 +441,7 @@ ul li
|
||||
width:100%;
|
||||
}
|
||||
|
||||
/* All posts */
|
||||
div.all_posts
|
||||
{
|
||||
display:block;
|
||||
@@ -545,20 +450,20 @@ div.all_posts
|
||||
div.all_posts div.year
|
||||
{
|
||||
display:block;
|
||||
margin-bottom:50px;
|
||||
margin-bottom:3em;
|
||||
}
|
||||
|
||||
div.all_posts div.month
|
||||
{
|
||||
display:block;
|
||||
margin-bottom:20px;
|
||||
margin-left:20px;
|
||||
margin-bottom:1.3em;
|
||||
margin-left:1.3em;
|
||||
}
|
||||
|
||||
div.all_posts year
|
||||
{
|
||||
display:block;
|
||||
margin-bottom:20px;
|
||||
margin-bottom:1em;
|
||||
font-size: x-large;
|
||||
font-weight:bold;
|
||||
}
|
||||
@@ -566,15 +471,15 @@ div.all_posts year
|
||||
div.all_posts month
|
||||
{
|
||||
display:block;
|
||||
margin-bottom:5px;
|
||||
margin-bottom:0.2em;
|
||||
font-size: large;
|
||||
}
|
||||
|
||||
div.all_posts div.post
|
||||
{
|
||||
display:block;
|
||||
margin-bottom:2px;
|
||||
margin-left:20px;
|
||||
margin-bottom:0.1em;
|
||||
margin-left:1.3em;
|
||||
}
|
||||
|
||||
.post_content > p > img
|
||||
@@ -592,25 +497,104 @@ div.all_posts div.post
|
||||
.feed
|
||||
{
|
||||
margin-right:auto;
|
||||
margin-left:20px;
|
||||
margin-left:4em;
|
||||
}
|
||||
|
||||
.feed > a
|
||||
{
|
||||
margin-right:10px;
|
||||
margin-right:1em;
|
||||
}
|
||||
|
||||
#last_ljdc
|
||||
{
|
||||
padding-bottom:40px;
|
||||
padding-bottom:4em;
|
||||
}
|
||||
|
||||
.comments_link
|
||||
{
|
||||
padding-right:20px;
|
||||
padding-right:1em;
|
||||
}
|
||||
|
||||
.year .title
|
||||
{
|
||||
display:inline;
|
||||
}
|
||||
}
|
||||
|
||||
.hamburger
|
||||
{
|
||||
display:none;
|
||||
}
|
||||
|
||||
.about
|
||||
{
|
||||
font-family: Verdana, Serif;
|
||||
}
|
||||
|
||||
.about li
|
||||
{
|
||||
list-style-image: none;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
@media only screen and (max-width:1080px) {
|
||||
|
||||
#header
|
||||
{
|
||||
padding-bottom:1em;
|
||||
}
|
||||
|
||||
#title a
|
||||
{
|
||||
font-size: 1.5em;
|
||||
padding-left:1em;
|
||||
padding-right:1em;
|
||||
margin-right:0em;
|
||||
}
|
||||
|
||||
div.menu
|
||||
{
|
||||
display:none;
|
||||
left:10%;
|
||||
top:2em;
|
||||
margin-bottom:2em;
|
||||
}
|
||||
|
||||
div.content
|
||||
{
|
||||
top:1em;
|
||||
left:1em;
|
||||
margin-right:2em;
|
||||
padding-left:0.5em;
|
||||
padding-right:0.5em;
|
||||
margin-bottom:3em;
|
||||
}
|
||||
|
||||
.hamburger
|
||||
{
|
||||
display:block;
|
||||
z-index:999;
|
||||
position:fixed;
|
||||
top:2em;
|
||||
right:-5em;
|
||||
}
|
||||
|
||||
img
|
||||
{
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
#hamburger_logo
|
||||
{
|
||||
width:30%;
|
||||
}
|
||||
|
||||
#logo
|
||||
{
|
||||
display:none;
|
||||
}
|
||||
|
||||
.feed img
|
||||
{
|
||||
width:10%;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,4 +98,51 @@ function handleKeyPress(e){
|
||||
f = document.getElementById("search_form");
|
||||
f.submit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function switchMenu()
|
||||
{
|
||||
var menu = document.getElementById("menu");
|
||||
var content = document.getElementById("content");
|
||||
|
||||
if (menu.style.display == "none" ||
|
||||
menu.style.display == "")
|
||||
{
|
||||
menu.style.display = "block";
|
||||
content.style.display = "none";
|
||||
}
|
||||
else
|
||||
{
|
||||
menu.style.display = "none";
|
||||
content.style.display = "block";
|
||||
}
|
||||
}
|
||||
|
||||
function pannous_list_do_action(action)
|
||||
{
|
||||
var xhr = new XMLHttpRequest();
|
||||
var email_elem = document.getElementById('pannous_email');
|
||||
var uri = 'https://pannous.soutade.fr//rest/lists/blog/' + action + '?email=' + email_elem.value;
|
||||
xhr.open('GET', encodeURI(uri));
|
||||
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
xhr.addEventListener('readystatechange', function() {
|
||||
if (xhr.readyState === XMLHttpRequest.DONE) {
|
||||
if (this.status == 200) {
|
||||
alert(xhr.responseText);
|
||||
}
|
||||
else {
|
||||
alert("Error " + this.status);
|
||||
}
|
||||
}
|
||||
});
|
||||
xhr.addEventListener('error', function(event) {
|
||||
alert('Error ' + this.statusText);
|
||||
});
|
||||
xhr.send();
|
||||
}
|
||||
function pannous_list_subscribe() { pannous_list_do_action('subscribe'); }
|
||||
function pannous_list_unsubscribe() { pannous_list_do_action('unsubscribe'); }
|
||||
function clear_your_email() {
|
||||
var email_elem = document.getElementById('pannous_email');
|
||||
if (email_elem.value === 'Your email') email_elem.value = '';
|
||||
}
|
||||
|
||||
@@ -1,15 +1,29 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Dynastie</title>
|
||||
<link rel="icon" type="image/png" href="{{ STATIC_URL }}images/favicon.png" />
|
||||
{% load static %}
|
||||
<link rel="icon" type="image/png" href="{% static 'images/favicon.png' %}" />
|
||||
{% block head %} {% endblock %}
|
||||
<link href="{{ STATIC_URL }}css/dynastie.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="{% static 'css/dynastie.css' %}" rel="stylesheet" type="text/css"/>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<a href="/user">Users</a> <a href="/blog">Blogs</a> <a href="/disconnect">Disconnect</a><br/><br/>
|
||||
{% block content %} {% endblock %}
|
||||
<a href="/user">Users</a> <a href="/blog">Blogs</a> <a href="/disconnect">Disconnect</a><br/><br/>
|
||||
{% if blog_id != None %}
|
||||
<a href="/blog/{{ blog_id }}?page=0">Home</a> <a href="/category/{{ blog_id }}">Categories</a> <a href="/tag/{{ blog_id }}">Tags</a>
|
||||
{% else %}
|
||||
<a href="/blog/{{ blog.id }}?page=0">Home</a> <a href="/category/{{ blog.id }}">Categories</a> <a href="/tag/{{ blog.id }}">Tags</a>
|
||||
{% endif %}
|
||||
{% if user.is_superuser %}
|
||||
<form action="/blog/edit/{{ blog.id }}" method="post">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<input type="submit" name="edit" value="Edit" /><input type="submit" name="delete" value="Delete" />
|
||||
</form>
|
||||
{% endif %}
|
||||
<br/><br/>
|
||||
{% block content %} {% endblock %}
|
||||
<br/><br/><br/>
|
||||
<center><a href="http://indefero.soutade.fr/p/dynastie">Dynastie</a> 0.4</center>
|
||||
<center><a href="http://indefero.soutade.fr/p/dynastie">Dynastie</a> 0.5</center>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<a href="/blog/{{ blog.id }}?page=0">Home</a> <a href="/category/{{ blog.id }}">Categories</a> <a href="/tag/{{ blog.id }}">Tags</a><br/><br/>
|
||||
{% if categories|length == 0 %}
|
||||
<b>Any category available</b><br/><br/>
|
||||
{% else %}
|
||||
|
||||
@@ -37,11 +37,11 @@ Available tags:
|
||||
{% for comment in comments %}
|
||||
<div class="comment">
|
||||
<div class="infos">
|
||||
<a href="/comment/edit/{{ comment.id }}">#{{ comment.id }}</a> <span class="author">{{ comment.author }}</span> <span class="mail">{{ comment.email|default:"no mail" }}</span> <span class="date">{{ comment.date|date:"D d M Y H:m" }}<span> <a href="/comment/delete/{{ comment.id }}" onclick="return confirm('Do you really want to delete this item ?')">delete</a>
|
||||
<a href="/comment/edit/{{ comment.id }}">#{{ comment.id }}</a> <span class="author">{{ comment.author }}</span> <span class="mail">{{ comment.email|default:"no mail" }}</span> <span class="date">{{ comment.date|date:"D d M Y H:m" }}</span> <a href="/comment/delete/{{ comment.id }}" onclick="return confirm('Do you really want to delete this item ?')">delete</a>
|
||||
</div>
|
||||
<div class="content">
|
||||
{% autoescape off %}
|
||||
{{ comment.the_comment }}
|
||||
{{ comment.the_comment }}
|
||||
{% endautoescape %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
@@ -1,15 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<a href="/blog/{{ blog.id }}">Home</a> <a href="/category/{{ blog.id }}">Categories</a> <a href="/tag/{{ blog.id }}">Tags</a>
|
||||
{% if user.is_superuser %}
|
||||
<form action="/blog/edit/{{ blog.id }}" method="post">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<input type="submit" name="edit" value="Edit" /><input type="submit" name="delete" value="Delete" />
|
||||
</form>
|
||||
{% endif %}
|
||||
<br/><br/>
|
||||
<a href="/post/add/{{ blog.id }}">Add a post</a> <a href="/generate/{{ blog.id }}">Generate blog</a> <a href="/search/generate/{{ blog.id }}">Generate search index</a><br/><br/>
|
||||
{% if report|length == 0 %}
|
||||
<b style="color:red">Any engine selected</b><br/><br/>
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
<html xmlns:dyn="http://indefero.soutade.fr/p/dynastie">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
|
||||
<meta name="robots" content="index, follow"/>
|
||||
<meta name="keywords" content="blog, gregory, soutade, grégory, soutadé, Grégory, Soutadé"/>
|
||||
<meta name="description" content="Bolg de Grégory Soutadé"/>
|
||||
<meta name="generator" content="Joomla! 1.5 - Open Source Content Management"/>
|
||||
<title>Blog de Grégory Soutadé</title>
|
||||
</head>
|
||||
<body>
|
||||
<dyn:title/>
|
||||
<dyn:author/>
|
||||
<dyn:date/>
|
||||
<dyn:content/>
|
||||
<title>Another title</title>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,7 +1,8 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Dynastie</title>
|
||||
<link rel="icon" type="image/png" href="{{ STATIC_URL }}images/favicon.png" />
|
||||
{% load static %}
|
||||
<link rel="icon" type="image/png" href="{% static 'images/favicon.png' %}" />
|
||||
<style type="text/css">
|
||||
div.logo {
|
||||
margin-top:2%;
|
||||
@@ -23,7 +24,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="logo">
|
||||
<a href="http://indefero.soutade.fr/p/dynastie"><img src="{{ STATIC_URL }}images/logo.png"/></a>
|
||||
<a href="http://indefero.soutade.fr/p/dynastie"><img src="{% static 'images/logo.png' %}"/></a>
|
||||
</div>
|
||||
<div class="form">
|
||||
<form method="post" action="/index">
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<a href="/blog/{{ blog.id }}?page=0">Home</a> <a href="/category/{{ blog.id }}">Categories</a> <a href="/tag/{{ blog.id }}">Tags</a>
|
||||
<br/><br/>
|
||||
<a href="/post/add/{{ blog.id }}">Add a post</a> <a href="/generate/{{ blog.id }}">Generate blog</a> <a href="/search/generate/{{ blog.id }}">Generate search index</a>
|
||||
<br/><br/>
|
||||
<form action="/blog/search/{{ blog.id }}" method="post">
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<a href="/blog/{{ blog.id }}?page=0">Home</a> <a href="/category/{{ blog.id }}">Categories</a> <a href="/tag/{{ blog.id }}">Tags</a><br/><br/>
|
||||
{% if tags|length == 0 %}
|
||||
<b>Any tag available</b><br/><br/>
|
||||
{% else %}
|
||||
|
||||
@@ -1,18 +1,10 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<a href="/blog/{{ blog.id }}?page=0">Home</a> <a href="/category/{{ blog.id }}">Categories</a> <a href="/tag/{{ blog.id }}">Tags</a>
|
||||
{% if edited %}
|
||||
<p class="edited">Blog successfuly updated</p>
|
||||
{% endif %}
|
||||
{% if user.is_superuser %}
|
||||
<form action="/blog/edit/{{ blog.id }}" method="post">
|
||||
{% csrf_token %}
|
||||
{{ form.as_p }}
|
||||
<input type="submit" name="edit" value="Edit" /><input type="submit" name="delete" value="Delete" onclick="return confirm('Do you really want to delete this item ?')"/>
|
||||
</form>
|
||||
{% endif %}
|
||||
<br/><br/>
|
||||
{% endif %}
|
||||
<a href="/post/add/{{ blog.id }}">Add a post</a> <a href="/generate/{{ blog.id }}">Generate blog</a> <a href="/search/generate/{{ blog.id }}">Generate search index</a>
|
||||
<br/><br/>
|
||||
<form action="/blog/search/{{ blog.id }}" method="post">
|
||||
@@ -23,7 +15,7 @@
|
||||
<b>Drafts</b>
|
||||
<table>
|
||||
{% for draft in drafts %}
|
||||
<tr><td><a href="/draft/edit/{{ draft.id }}">{{ draft.id }}</a></td><td>{{ draft.title }}</td><td>{{ draft.category.name }}</td><td>{{ draft.creation_date }}</td><td>{{ draft.modification_date }}</td><td><a href="/draft/delete/{{ draft.id }}" onclick="return confirm('Do you really want to delete this item ?')">Delete</a></td></tr>
|
||||
<tr><td><a href="/draft/edit/{{ draft.id }}">{{ draft.id }}</a></td><td>{{ draft.title }}</td><td>{{ draft.category.name }}</td><td>{{ draft.creation_date }}</td><td>{{ draft.modification_date }}</td><td><a href="/draft/delete/{{ draft.id }}" onclick="return confirm('Do you really want to delete this item ?')">Delete</a></td><td><td/></tr>
|
||||
{% endfor %}
|
||||
</table><br/>
|
||||
{% endif %}
|
||||
@@ -36,7 +28,7 @@
|
||||
<table>
|
||||
{% for post in posts %}
|
||||
{% with post.id as cur_id %}
|
||||
<tr><td><a href="/post/edit/{{ post.id }}">{{ post.id }}</a></td><td>{{ post.title }}</td><td>{{ post.category.name }}</td><td>{{ post.creation_date }}</td><td>{{ post.modification_date }}</td><td>{{ post.published }}</td><td>{{ post.front_page }}</td><td>{{ comments|hash:cur_id|default_if_none:"0" }} comment{{ comments|hash:cur_id|pluralize }}</td><td><a href="/post/delete/{{ post.id }}" onclick="return confirm('Do you really want to delete this item ?')">Delete</a></td></tr>
|
||||
<tr><td><a href="/post/edit/{{ post.id }}">{{ post.id }}</a></td><td>{{ post.title }}</td><td>{{ post.category.name }}</td><td>{{ post.creation_date }}</td><td>{{ post.modification_date }}</td><td>{{ post.published }}</td><td>{{ post.front_page }}</td><td>{{ comments|hash:cur_id|default_if_none:"0" }} comment{{ comments|hash:cur_id|pluralize }}</td><td><a href="/post/delete/{{ post.id }}" onclick="return confirm('Do you really want to delete this item ?')">Delete</a></td><td><a href="/generate/{{ blog.id }}/{{ post.id }}" onclick="return confirm('Do you really want to re generate only this item ?')">re Generate this article</td></tr>
|
||||
{% endwith %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
+38
-37
@@ -18,51 +18,52 @@
|
||||
along with Dynastie. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
from django.conf.urls import patterns, include, url
|
||||
from django.conf.urls import re_path
|
||||
|
||||
# Uncomment the next two lines to enable the admin:
|
||||
# from django.contrib import admin
|
||||
# admin.autodiscover()
|
||||
from dynastie.views import *
|
||||
|
||||
urlpatterns = patterns('',
|
||||
url(r'^index$', 'dynastie.views.index', name='index'),
|
||||
url(r'^$', 'dynastie.views.index', name='index'),
|
||||
url(r'^disconnect$', 'dynastie.views.disconnect', name='disconnect'),
|
||||
url(r'^user$', 'dynastie.views.user', name='user'),
|
||||
url(r'^user/add$', 'dynastie.views.add_user', name='add_user'),
|
||||
url(r'^user/edit/(\d+)$', 'dynastie.views.edit_user', name='edit_user'),
|
||||
url(r'^user/(\d+)$', 'dynastie.views.edit_user', name='view_user'),
|
||||
url(r'^category/(\d+)$', 'dynastie.views.category', name='category'),
|
||||
url(r'^category/add/(\d+)$', 'dynastie.views.add_category', name='add_category'),
|
||||
url(r'^category/edit/(\d+)$', 'dynastie.views.edit_category', name='edit_category'),
|
||||
url(r'^category/delete/(\d+)$', 'dynastie.views.delete_category', name='delete_category'),
|
||||
url(r'^blog$', 'dynastie.views.blog', name='blog'),
|
||||
url(r'^blog/add$', 'dynastie.views.add_blog', name='add_blog'),
|
||||
url(r'^blog/(\d+)$', 'dynastie.views.view_blog', name='view_blog'),
|
||||
url(r'^blog/edit/(\d+)$', 'dynastie.views.edit_blog', name='edit_blog'),
|
||||
url(r'^blog/search/(\d+)$', 'dynastie.views.search_blog', name='search_blog'),
|
||||
url(r'^post/add/(\d+)$', 'dynastie.views.add_post', name='add_post'),
|
||||
url(r'^post/edit/(\d+)$', 'dynastie.views.edit_post', name='edit_post'),
|
||||
url(r'^post/delete/(\d+)$', 'dynastie.views.delete_post', name='delete_post'),
|
||||
url(r'^draft/edit/(\d+)$', 'dynastie.views.edit_draft', name='edit_draft'),
|
||||
url(r'^draft/delete/(\d+)$', 'dynastie.views.delete_draft', name='delete_draft'),
|
||||
url(r'^generate/(\d+)$', 'dynastie.views.generate', name='generate'),
|
||||
url(r'^generate/(\d+)/(\d+)$','dynastie.views.generate_post',name='generate_post'),
|
||||
url(r'^preview/(\d+)$', 'dynastie.views.preview', name='preview'),
|
||||
url(r'^tinyMCEExternalList/post/add/(\d+)$', 'dynastie.views.tinymcelist_add', name='tinymce'),
|
||||
url(r'^tinyMCEExternalList/post/edit/(\d+)$', 'dynastie.views.tinymcelist_edit', name='tinymce'),
|
||||
url(r'^comment/add/(\d+)/(\d+)$', 'dynastie.views.add_comment', name='add_comment'),
|
||||
url(r'^comment/edit/(\d+)$', 'dynastie.views.edit_comment', name='edit_comment'),
|
||||
url(r'^comment/delete/(\d+)$','dynastie.views.delete_comment',name='delete_comment'),
|
||||
url(r'^tag/(\d+)$', 'dynastie.views.tag', name='tag'),
|
||||
url(r'^tag/edit/(\d+)$', 'dynastie.views.edit_tag', name='edit_tag'),
|
||||
url(r'^tag/delete/(\d+)$', 'dynastie.views.delete_tag', name='delete_tag'),
|
||||
url(r'^search/generate/(\d+)$', 'dynastie.views.generate_search',name='generate_search'),
|
||||
url(r'^search/(\d+)$', 'dynastie.views.search', name='search'),
|
||||
urlpatterns = [
|
||||
re_path(r'^index$', index, name='index'),
|
||||
re_path(r'^$', index, name='index'),
|
||||
re_path(r'^disconnect$', disconnect, name='disconnect'),
|
||||
re_path(r'^user$', user, name='user'),
|
||||
re_path(r'^user/add$', add_user, name='add_user'),
|
||||
re_path(r'^user/edit/(\d+)$', edit_user, name='edit_user'),
|
||||
re_path(r'^user/(\d+)$', edit_user, name='view_user'),
|
||||
re_path(r'^category/(\d+)$', category, name='category'),
|
||||
re_path(r'^category/add/(\d+)$', add_category, name='add_category'),
|
||||
re_path(r'^category/edit/(\d+)$', edit_category, name='edit_category'),
|
||||
re_path(r'^category/delete/(\d+)$', delete_category, name='delete_category'),
|
||||
re_path(r'^blog$', blog, name='blog'),
|
||||
re_path(r'^blog/add$', add_blog, name='add_blog'),
|
||||
re_path(r'^blog/(\d+)$', view_blog, name='view_blog'),
|
||||
re_path(r'^blog/edit/(\d+)$', edit_blog, name='edit_blog'),
|
||||
re_path(r'^blog/search/(\d+)$', search_blog, name='search_blog'),
|
||||
re_path(r'^post/add/(\d+)$', add_post, name='add_post'),
|
||||
re_path(r'^post/edit/(\d+)$', edit_post, name='edit_post'),
|
||||
re_path(r'^post/delete/(\d+)$', delete_post, name='delete_post'),
|
||||
re_path(r'^draft/edit/(\d+)$', edit_draft, name='edit_draft'),
|
||||
re_path(r'^draft/delete/(\d+)$', delete_draft, name='delete_draft'),
|
||||
re_path(r'^generate/(\d+)$', generate, name='generate'),
|
||||
re_path(r'^generate/(\d+)/(\d+)$',generate_post,name='generate_post'),
|
||||
re_path(r'^preview/(\d+)$', preview, name='preview'),
|
||||
re_path(r'^tinyMCEExternalList/post/add/(\d+)$', tinymcelist_add, name='tinymce'),
|
||||
re_path(r'^tinyMCEExternalList/post/edit/(\d+)$', tinymcelist_edit, name='tinymce'),
|
||||
re_path(r'^comment/add/(\d+)/(\d+)$', add_comment, name='add_comment'),
|
||||
re_path(r'^comment/edit/(\d+)$', edit_comment, name='edit_comment'),
|
||||
re_path(r'^comment/delete/(\d+)$',delete_comment,name='delete_comment'),
|
||||
re_path(r'^tag/(\d+)$', tag, name='tag'),
|
||||
re_path(r'^tag/edit/(\d+)$', edit_tag, name='edit_tag'),
|
||||
re_path(r'^tag/delete/(\d+)$', delete_tag, name='delete_tag'),
|
||||
re_path(r'^search/generate/(\d+)$', generate_search,name='generate_search'),
|
||||
re_path(r'^search/(\d+)$', search, name='search'),
|
||||
|
||||
# Uncomment the admin/doc line below to enable admin documentation:
|
||||
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
||||
|
||||
# Uncomment the next line to enable the admin:
|
||||
# url(r'^admin/', include(admin.site.urls)),
|
||||
)
|
||||
]
|
||||
|
||||
+18
-19
@@ -22,7 +22,7 @@ import re
|
||||
from datetime import datetime, date, time
|
||||
from django.shortcuts import render
|
||||
from django.contrib.auth import authenticate, login, logout
|
||||
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
||||
from django.http import HttpResponseRedirect, HttpResponse, Http404, HttpResponseForbidden
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.forms.models import inlineformset_factory
|
||||
@@ -107,7 +107,7 @@ def createNavigationBar(blog_id, cur_page, nb_pages):
|
||||
|
||||
|
||||
def index(request):
|
||||
if request.user.is_authenticated():
|
||||
if request.user.is_authenticated:
|
||||
return HttpResponseRedirect('/blog')
|
||||
|
||||
login_failed = False
|
||||
@@ -344,7 +344,7 @@ def add_blog(request):
|
||||
def view_blog(request, blog_id):
|
||||
b,_ = have_I_right(request, blog_id)
|
||||
|
||||
orig_posts = Post.objects.filter(blog=b)
|
||||
posts = Post.objects.filter(blog=b)
|
||||
|
||||
if 'page' in request.GET:
|
||||
cur_page = int(request.GET['page'])
|
||||
@@ -356,7 +356,7 @@ def view_blog(request, blog_id):
|
||||
else:
|
||||
drafts = []
|
||||
|
||||
count = len(orig_posts) - len(drafts)
|
||||
count = len(posts) - len(drafts)
|
||||
nb_pages = int(count/50)
|
||||
|
||||
# Prevent error injection
|
||||
@@ -368,15 +368,8 @@ def view_blog(request, blog_id):
|
||||
start = cur_page * 50
|
||||
end = start + 50 + len(drafts)
|
||||
|
||||
orig_posts = orig_posts.order_by('-creation_date')[start:end]
|
||||
posts = posts.order_by('-creation_date')[start:end]
|
||||
|
||||
# Select post without drafts
|
||||
if drafts:
|
||||
drafts_id = [draft.id for draft in drafts]
|
||||
posts = [p for p in orig_posts if not p.id in drafts_id]
|
||||
else:
|
||||
posts = orig_posts
|
||||
|
||||
form = BlogForm(instance=b)
|
||||
|
||||
comments = Comment.objects.all()
|
||||
@@ -533,7 +526,7 @@ def edit_post(request, post_id):
|
||||
filename = b.src_path + '/_post/' + str(post.pk)
|
||||
if os.path.exists(filename):
|
||||
f = open(filename, 'rb')
|
||||
content = f.read()
|
||||
content = f.read().decode('utf-8')
|
||||
f.close()
|
||||
else:
|
||||
content = 'Empty post'
|
||||
@@ -593,7 +586,7 @@ def edit_draft(request, draft_id):
|
||||
filename = b.src_path + '/_draft/' + str(draft.pk)
|
||||
if os.path.exists(filename):
|
||||
f = open(filename, 'rb')
|
||||
content = f.read()
|
||||
content = f.read().decode('utf-8')
|
||||
f.close()
|
||||
else:
|
||||
content = 'Empty draft'
|
||||
@@ -677,6 +670,9 @@ def generate_search(request, blog_id):
|
||||
def search(request, blog_id):
|
||||
from dynastie.generators import search
|
||||
|
||||
if not 'HTTP_REFERER' in request.META:
|
||||
return HttpResponseForbidden()
|
||||
|
||||
ref = request.META['HTTP_REFERER']
|
||||
|
||||
b = Blog.objects.filter(pk=blog_id)
|
||||
@@ -738,7 +734,7 @@ def preview(request, blog_id):
|
||||
os.unlink(path)
|
||||
|
||||
f = open(path, 'wb')
|
||||
f.write(content)
|
||||
f.write(content.encode('utf-8'))
|
||||
f.close()
|
||||
|
||||
c = {'content' : content}
|
||||
@@ -802,14 +798,17 @@ def tinymcelist_edit(request, post_id):
|
||||
def add_comment(request, post_id, parent_id):
|
||||
from dynastie.generators import post
|
||||
|
||||
ref = request.META['HTTP_REFERER']
|
||||
if not 'HTTP_REFERER' in request.META:
|
||||
ref = "/"
|
||||
else:
|
||||
ref = request.META['HTTP_REFERER']
|
||||
|
||||
# Anti robot !!
|
||||
if request.POST['email'] != '':
|
||||
if not 'email' in request.POST or request.POST['email'] != '':
|
||||
if 'HTTP_X_REAL_IP' in request.META:
|
||||
print 'Dynastie : fucking robot %s' % (request.META['HTTP_X_REAL_IP'])
|
||||
print('Dynastie : fucking robot %s' % (request.META['HTTP_X_REAL_IP']))
|
||||
else:
|
||||
print 'Dynastie : fucking robot %s' % (request.META['REMOTE_ADDR'])
|
||||
print('Dynastie : fucking robot %s' % (request.META['REMOTE_ADDR']))
|
||||
return HttpResponseRedirect(ref)
|
||||
|
||||
post = Post.objects.get(pk=post_id)
|
||||
|
||||
Reference in New Issue
Block a user