SlideShare una empresa de Scribd logo
1 de 73
Descargar para leer sin conexión
ℙƴ☂ℌøἤ	
	 	⒝⒴⒯⒠⒮
DΣMYƧƬIFIΣD
Boris	FELD	-	PyParis,	Paris	-	2017
Boris	FELD
Python	developer
Mercurial	and	Python	consultant	at	Octobus
https://lothiraldan.github.io/
@lothiraldan
/me
Unicode	is	���!
Let's	test	it!
What	is	the	length	of	this	Unicode	string	in	Python	2?
len(u' ')
1
2
3
4
1.	Unicode	length
It	depends	of	your	python:
DOCKER_IMAGE=quay.io/pypa/manylinux1_x86_64
$>	docker	run	-t	-i	$DOCKER_IMAGE	/opt/python/cp27-cp27mu/bin/python	
-c	"print	len(u'U0001f60e')"
1
But	it	can	also	be:
DOCKER_IMAGE=quay.io/pypa/manylinux1_x86_64
$>	docker	run	-t	-i	$DOCKER_IMAGE	/opt/python/cp27-cp27m/bin/python	
-c	"print	len(u'U0001f60e')"
2
Unicode	length
When	could	you	see	this	error	message?
UnicodeEncodeError:	'ascii'	codec	can't	encode	character
When	doing	.encode('ascii')
When	doing	.decode('ascii')
When	doing	.decode('utf-8')
In	all	of	theses	situations
2.	UnicodeEncodeError
In	all	of	these	situations!
>>>	x	=	u'é'
>>>	x.encode('ascii')
Traceback	(most	recent	call	last):
				File	"<stdin>",	line	1,	in	<module>
UnicodeEncodeError:	'ascii'	codec	can't	encode	character	u'xe9'	in	position	0:	ordinal	not	in	range(128)
>>>	x.decode('ascii')
Traceback	(most	recent	call	last):
				File	"<stdin>",	line	1,	in	<module>
UnicodeEncodeError:	'ascii'	codec	can't	encode	character	u'xe9'	in	position	0:	ordinal	not	in	range(128)
>>>	x.decode('utf-8')
Traceback	(most	recent	call	last):
				File	"<stdin>",	line	1,	in	<module>
UnicodeEncodeError:	'ascii'	codec	can't	encode	character	u'xe9'	in	position	0:	ordinal	not	in	range(128)
UnicodeEncodeError
When	should	you	use	chr	and	unichr?
You	should	always	use	chr.
You	should	always	use	unichr.
You	should	chr	for	ASCII	and	unichr	for	Unicode.
3.	Chr	vs	unichr
Prefer	using	unichr	for	everything.
Chr	vs	unichr
Skeptical	dog	is	skeptical
We	have	to	go	back!
The	60s
Apollo	11
Woodstock
Something	important
Something	huge
ASCII	was	born
In	1960s,	the	American	Standards	Association	wanted	to	answer	the	question:
How	to	represent	text	digitally?
The	important	question
Problem,	computers	are	only	speaking	bits.	How	to	transform	text	into	bits?
Problem
We	know	how	to	convert	integer	to	binary:
0			=	0000000
1			=	0000001
2			=	0000010
3			=	0000011
.............
127	=	1111111
Let's	assign	each	character	an	integer	from	0	to	127	named	"code	point".
Pretty	simple	solution
ASCII	with	Python
Let's	take	a	string:
"pyparis"
A	string	is	a	sequence	of	characters:
assert	list("pyparis")	==	['p',	'y',	'p',	'a',	'r',	'i',	's']
What	is	a	string?
assert	type("pyparis"[0])	==	<type	'str'>
assert	len("pyparis"[0])	==	1
A	character	(from	the	Greek	χαρακτήρ	"engraved	or
stamped	mark"	on	coins	or	seals,	"branding	mark,	symbol")
is	a	sign	or	symbol.
—	Wikipedia
A	character	is	basically	anything.	It	could	represents	be	a	letter,	a	digit	or	even	an	emoji.
What	is	character
For	retrieving	the	ASCII	code	point	of	a	character,	we	can	use	ord:
assert	ord("p")	==	112
To	reverse	the	process	we	can	use	chr:
assert	chr(112)	==	"p"
Code	point	in	Python
p y p a r i s
Code	Point 112 121 112 97 114 105 115
Code	points
p y p a r i s
Code	Point 112 121 112 97 114 105 115
Binary 1110000 1111001 1110000 1100001 1110010 1101001 1110011
code	point				 	encode	 				binary
code	point				 	decode	 				binary
ASCII	encoding
encode	is	meant	to	transform	a	string	into	some	bytes:
string	=	'abc'
bytes	=	bytes.encode('ascii')
assert	hex(bytes)	==	'616263'
decode	is	meant	to	transform	some	bytes	into	a	string:
bytes	=	unhex('616263')
string	=	bytes.decode('ascii')
assert	string	==	'abc'
Each	of	these	methods	accepts	an	encoding	parameter	for	the	name	of	the	conversion
algorithm	to	use.
Encode	vs	Decode
Everything	is	awesome...
...	right?
Small	problem
ASCII	solved	the	problem	for	USA	but	not	for	everyone	else.
Not	everyone	speaks	english
ASCII	only	use	the	7	lower	bits	of	a	byte.	01100001
But	on	most	computer	a	byte	is	actually	8	bits	so	we	can	support	more	characters.
And	so	new	standard	were	born...
Other	standards
Some	were	based	on	ASCII	and	use	a	8	bit	to	add	support	for	accents	for	example,	like
Latin1	that	defines	the	character	É	with	the	code	point	201.
Some	other,	were	not	compatible	at	all,	like	EBCDIC,	used	on	IBM	mainframes,	where	the
1001011	(code	point	75)	code	point	represent	the	punctuation	mark	"."	while	in	ASCII	it
represent	"A".
Of	course	they	were	not	all	cross-compatible...
Other	standards
It	was	a	mess
Initial	text a b ã é
Latin1	Code	Point 97 98 227 233
Latin1	encoding 01100001 01100010 11100011 11101001
ASCII	decoding a b ERROR ERROR
Mac	OS	Roman	decoding a b „ È
EBCDIC	decoding / ERROR T Z
Example
Here	comes	our	savior!
One	Standard	to	rule	them	all,
One	Standard	to	find	them,
One	Standard	to	bring	them	all
and	in	the	greater	good	bind	them
Unicode	the	savior
Unicode	is	a	computing	industry	standard	for	the	consistent
encoding,	representation,	and	handling	of	text	expressed	in
most	of	the	world's	writing	systems.
—	Wikipedia
It	all	started	in	1987-1988	as	a	coordination	between	Joe	Becker	from	Xerox	and	Lee	Collins
and	Mark	Davis	from	Apple.
The	unicode	code	points	are	fortunately	for	us	ASCII	compatible.
What	is	Unicode?
The	latest	version	of	Unicode	contains	a	repertoire	of
128,237	characters	covering	135	modern	and	historic
scripts,	as	well	as	multiple	symbol	sets.
—	Wikipedia
ASCII	was	defining	127	characters,	so	Unicode	defines	1000	times	more	characters.
It	defines	several	blocks:
Basic	Latin:	ab...XYZ
Greek,	Aramaic,	Cherokee:	Δ‫ע‬Ꮧ
Right	to	left	scripts,	Cuneiform,	hieroglyphs:	
Mahjong	Tiles,	Domino	Tiles,	Playing	cards:	
Emoticons,	Musical	notations:	
Unicode	size
Remember	the	ASCII	table?
Unicode	vs	ASCII
Unicode	with	Python
Let's	take	a	unicode	character	€.
First,	declare	the	encoding	of	your	python	source	file	as	utf-8:
#	-*-	coding:	utf-8	-*-
Then,	you	can	write	it	this	way:
u'€'
Or:
u'u20AC'
Its	code	point	is	8364:
ord(u'€')	==	8364
How	to	write	Unicode	in	Python
Let's	convert	the	code	point	into	binary:
€
Code	Point 8364
Naive	conversion 00100000	10101100
Problem
It	doesn't	fit	into	1	byte.
The	problems	when	you	start	using	more	than	1	bytes	are	multiple	and	annoying:
How	to	order	the	bytes,	Big	And	Little	Endian	problems	anyone?
How	to	recognize	which	byte	you	are	reading	in	a	file	or	stream?
How	to	detect	and	correct	transmission	errors	where	only	some	bytes	were	missing?
8364	into	binary	takes	two	bytes.	Unicode	characters	code	points	goes	well	beyond	1	000
000	(because	of	non	allocated	yet),	taking	up	to	3	bytes.
Multi-bytes
As	ASCII	was	simple,	transforming	ASCII	code	points	into	binary	was	straightforward.
But	the	presence	of	high	code	point	characters	in	Unicode	complexify	the	process.	There	are
multiple	ways	of	doing	it,	called	encodings:
UTF-8
UTF-16
UTF-32
Multiple	encoding
If	you	are	not	sure,	use	UTF-8,	it	will	be	compatible	with	every	characters,	works	well
most	of	the	time	and	solved	multi-bytes	related	problems	Elegantly.
If	you	process	more	Asian	characters	than	Latin,	use	UTF-16	so	you	use	less	space
and	memory.
If	you	need	to	interact	with	another	program,	use	the	default	other	program	encoding
(CSV	anyone?).
Comparison	of	Unicode	encodings	-	Wikipedia
Choose	an	encoding
UTF-8	Everywhere	Manifesto
UTF-8	everywhere
A €
Code	Point 65 8364
Naive
conversion
01000001 00100000	10101100
UTF-8 01000001 11100010	10000010	10101100
UTF-16 00000000	01000001 00100000	10101100
UTF-32
00000000	00000000	00000000
01000001
00000000	00000000	00100000
10101100
What	are	the	differences?
Let's	clarify	something:
encode	is	meant	to	transform	an	unicode	string	into	some	bytes:
hex(u'é'.encode('utf-8'))	==	'c3a9'
decode	is	meant	to	transform	some	bytes	into	an	unicode	string:
unhex('c3a9').decode('utf-8')	==	u'é'
Encode	vs	Decode
Python	2
Counting	the	length	of	an	ASCII	string	is	easy,	count	the	number	of	bytes!
But	it's	much	more	harder	with	Unicode	strings.
Python	2	tries	hard	to	get	you	a	correct	answer.
Let's	take	back	our	example:	 .	Its	code	point	is	128526.
1.	String	length
Python	2	comes	in	several	flavor,	two	are	related	to	Unicode.	Its	either	a	narrow	build	or	a
wide	build.	It	basically	change	how	Python	stores	its	strings.
For	code	point	<	65535,	everything	works	the	same,	Python	store	each	character
separately	and	only	one	character.
For	code	point	>	65535,	it	differs.	The	wide	build	character	size	is	enough	for	all
Unicode	code	points.	But	the	narrow	build	character	size	is	not	big	enough	for	code
point	>	65535,	so	it	store	upper	code	points	as	a	pair	of	characters.
The	narrow	build	use	less	memory	but	it	explains	why	the	narrow	build	returns	2	for
len(u' '),	it's	because	Python	2	actually	store	two	characters.
Multiple	flavors	of	Python	2
Remember	the	signification	of	encode	and	decode?
Encode	transforms	an	Unicode	string	into	some	bytes.
Decode	transforms	some	bytes	into	an	Unicode	string.
2.	Encoding	/	Decoding	in	Python	2
Python	2	always	had	a	string	type	but	introduced	the	Unicode	type	in	Python	2.1.
Python	2	str	is	badly	named	as	it's	basically	a	bag	of	bytes.	When	you	display	it,	Python	will
try	to	decode	it	for	you.	So	for	ASCII	only	strings,	encode	and	decode	will	return	the	same.
x	=	'abc'
assert	x.encode('ascii')	==	x
assert	x.decode('ascii')	==	x
Python	2	type	system
Python	is	a	strongly	typed	language,	meaning	that	Python	shouldn't	coerce	types	behind
your	back:
'012'	+	3
Traceback	(most	recent	call	last):
		File	"<stdin>",	line	1,	in	<module>
TypeError:	cannot	concatenate	'str'	and	'int'	objects
But	it's	not	respecting	this	property	with	strings.	Remember	that	decode	convert	bytes	into
an	Unicode	string	in	Python?
x	=	u'é'
x.decode('utf-8')
As	decode	is	called	on	an	Unicode	instance,	it	isn't	bytes.	So	python	tries	to	makes	some
bytes	out	of	the	string	and	does:
x	=	u'é'
x.encode('ascii').decode('utf-8')
That's	way	you	can	see	an	UnicodeEncodeError	error	while	trying	to	decode	an	Unicode
Python	2	type	coercing
You	can	use	chr	to	get	the	character	of	a	code	point:
assert	chr(65)	==	'A'
But	it	only	works	with	ASCII	characters!
chr(8364)
Traceback	(most	recent	call	last):
		File	"<stdin>",	line	1,	in	<module>
ValueError:	chr()	arg	not	in	range(256)
For	Unicode	you	need	to	use	unichr:
assert	unichr(8364)	==	u'€'
3.	Python	2	chr	vs	unichr
Python	3	♥	 	♥	 	♥	 	♥
Python	3	now	always	store	its	strings	the	same	way	and	len	returns	you	the	right	answer	no
matter	what:
x	=	' '
assert	len(x)	==	1
1.	Python	3	single	flavor
Python	3	biggest	change	was	to	change	the	type	systems	of	strings.
Bytes String Unicode	strings
Python	2 str unicode
Python	3 bytes str
2.	Python	3	big	change
Now	that	Python	3	have	separate	types	for	bytes	and	string,	we	now	longer	can	mess	with
encode	and	decode:
string	=	''
string.decode('ascii')
Traceback	(most	recent	call	last):
		File	"<stdin>",	line	1,	in	<module>
AttributeError:	'str'	object	has	no	attribute	'decode'
Decoding	an	Unicode	string	never	made	sense	anyway.
bytes	=	b''
bytes.encode('utf-8')
Traceback	(most	recent	call	last):
		File	"<stdin>",	line	1,	in	<module>
AttributeError:	'bytes'	object	has	no	attribute	'encode'
So	you	always	know	what	the	types	you	are	dealing	with.
2.	Python	3	coherent	type	system
Unicode	strings	are	now	the	norm,	so	Python	3	dropped	the	u	prefix	for	Unicode	strings	and
replaced	it	by	a	b	prefix	for	bytes,	so	you	directly	write:
x	=	' '
Python	3.3	reintroduced	the	prefix	for	codebases	that	needs	to	be	compatible	with	Python	2
and	Python	3,	so	it's	also	works:
x	=	u' '
2.	No	more	u	prefix
Python	3	no	longer	have	separate	functions	for	chr	and	unichr,	just	use	chr.
assert	chr(65)	==	'A'
assert	chr(8364)	==	'€'
3.	Python	3	chr
Pain	relief	tips
Thanks	to	the	new	type	system,	it	is	now	easier	to	identify	which	part	of	the	code	needs	to
encode	strings	and	decode	bytes.
bytes Outside	world
decode Library
unicode
Business	logic
unicode
encode Library
bytes Outside	world
1.	Unicode	sandwich
Software	should	only	work	with	Unicode	strings	internally,
decoding	the	input	data	as	soon	as	possible	and	encoding
the	output	only	at	the	end.
—	Python	doc	on	unicode
Unicode	sandwich
You	cannot	infer	the	encodings	of	bytes:
Content-Type:	text/html;	charset=ISO-8859-4
<meta	http-equiv="Content-Type"	content="text/html;charset=utf-8"	/>
<?xml	version="1.0"	encoding="UTF-8"	?>
#	-*-	coding:	iso8859-1	-*-
If	you	really	really	really	really	need	to	guess	the	encoding,	you	can	use	chardet,	but
remember,	it's	a	best	effort	scenario.
2.	Use	declared	encoding
encode	and	decode	accepts	a	second	arguments	for	error	handling.	By	default	it	is	set	on
strict,	which	means	crash
x	=	u'abcé'
x.encode('ascii',	errors='strict')
Traceback	(most	recent	call	last):
		File	"<stdin>",	line	1,	in	<module>
UnicodeEncodeError:	'ascii'	codec	can't	encode	character	u'xe9'	in	position	3...
You	can	also	use	replace	to	replace	invalid	character	by	?:
assert	x.encode('ascii',	errors='replace')	==	'abc?'
Or	you	can	simply	ignore	them:
assert	x.encode('ascii',	errors='ignore')	==	'abc'
Finally	you	can	replace	them	by	their	XML	code:
assert	x.encode('ascii',	errors='xmlcharrefreplace')	==	'abc&#233;'
3.	Error	handling
Use	Unicode	anytime	possible.
Use	Python	3.
Explicitly	encode	str	and	decode	str	in	Python	2,	it
might	solves	bugs	in	your	code	and	ease	Python	3
conversions.
Unicode	sandwich.
Never	guess	an	encoding!
Use	error	handling.
Conclusion
for	c	in	range(0x1F410,	0x1F4f0):
				print	(r"U%08x"%c).decode("unicode-escape"),
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
Python	fun
Thank	you!
The	Absolute	Minimum	Every	Software	Developer	Absolutely,	Positively	Must	Know
About	Unicode	and	Character	Sets	(No	Excuses!)
Pragmatic	Unicode
Unicode	In	Python,	Completely	Demystified
What	every	programmer	absolutely,	positively	needs	to	know	about	encodings	and
character	sets	to	work	with	text
Holy	batman
Reddit	on	unicode
References

Más contenido relacionado

Similar a PyParis 2017 / Unicode and bytes demystified, by Boris Feld

Os Grossupdated
Os GrossupdatedOs Grossupdated
Os Grossupdated
oscon2007
 
python-160403194316.pdf
python-160403194316.pdfpython-160403194316.pdf
python-160403194316.pdf
gmadhu8
 

Similar a PyParis 2017 / Unicode and bytes demystified, by Boris Feld (20)

Python arch wiki
Python   arch wikiPython   arch wiki
Python arch wiki
 
Python_final_print_vison_academy_9822506209.pdf
Python_final_print_vison_academy_9822506209.pdfPython_final_print_vison_academy_9822506209.pdf
Python_final_print_vison_academy_9822506209.pdf
 
python presentation
python presentationpython presentation
python presentation
 
Python tutorial
Python tutorialPython tutorial
Python tutorial
 
64-bit Loki
64-bit Loki64-bit Loki
64-bit Loki
 
05 python.pdf
05 python.pdf05 python.pdf
05 python.pdf
 
Python_final_print_batch_II_vision_academy.pdf
Python_final_print_batch_II_vision_academy.pdfPython_final_print_batch_II_vision_academy.pdf
Python_final_print_batch_II_vision_academy.pdf
 
Python_final_print_batch_II_vision_academy (1).pdf
Python_final_print_batch_II_vision_academy (1).pdfPython_final_print_batch_II_vision_academy (1).pdf
Python_final_print_batch_II_vision_academy (1).pdf
 
Python_final_print_batch_II_vision_academy.pdf
Python_final_print_batch_II_vision_academy.pdfPython_final_print_batch_II_vision_academy.pdf
Python_final_print_batch_II_vision_academy.pdf
 
Python_vision_academy notes
Python_vision_academy notes Python_vision_academy notes
Python_vision_academy notes
 
Prometheus as exposition format for eBPF programs running on Kubernetes
Prometheus as exposition format for eBPF programs running on KubernetesPrometheus as exposition format for eBPF programs running on Kubernetes
Prometheus as exposition format for eBPF programs running on Kubernetes
 
Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024
 
Writing Fast Code (JP) - PyCon JP 2015
Writing Fast Code (JP) - PyCon JP 2015Writing Fast Code (JP) - PyCon JP 2015
Writing Fast Code (JP) - PyCon JP 2015
 
Os Grossupdated
Os GrossupdatedOs Grossupdated
Os Grossupdated
 
Internet ALL the Things - a walking tour of MQTT
Internet ALL the Things - a walking tour of MQTTInternet ALL the Things - a walking tour of MQTT
Internet ALL the Things - a walking tour of MQTT
 
python-160403194316.pdf
python-160403194316.pdfpython-160403194316.pdf
python-160403194316.pdf
 
容器與IoT端點應用
容器與IoT端點應用容器與IoT端點應用
容器與IoT端點應用
 
Возможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OSВозможности интерпретатора Python в NX-OS
Возможности интерпретатора Python в NX-OS
 
PHARO IoT: Present and Future
PHARO IoT: Present and FuturePHARO IoT: Present and Future
PHARO IoT: Present and Future
 
Python
PythonPython
Python
 

Más de Pôle Systematic Paris-Region

Más de Pôle Systematic Paris-Region (20)

OSIS19_IoT :Transparent remote connectivity to short-range IoT devices, by Na...
OSIS19_IoT :Transparent remote connectivity to short-range IoT devices, by Na...OSIS19_IoT :Transparent remote connectivity to short-range IoT devices, by Na...
OSIS19_IoT :Transparent remote connectivity to short-range IoT devices, by Na...
 
OSIS19_Cloud : SAFC: Scheduling and Allocation Framework for Containers in a ...
OSIS19_Cloud : SAFC: Scheduling and Allocation Framework for Containers in a ...OSIS19_Cloud : SAFC: Scheduling and Allocation Framework for Containers in a ...
OSIS19_Cloud : SAFC: Scheduling and Allocation Framework for Containers in a ...
 
OSIS19_Cloud : Qu’apporte l’observabilité à la gestion de configuration? par ...
OSIS19_Cloud : Qu’apporte l’observabilité à la gestion de configuration? par ...OSIS19_Cloud : Qu’apporte l’observabilité à la gestion de configuration? par ...
OSIS19_Cloud : Qu’apporte l’observabilité à la gestion de configuration? par ...
 
OSIS19_Cloud : Performance and power management in virtualized data centers, ...
OSIS19_Cloud : Performance and power management in virtualized data centers, ...OSIS19_Cloud : Performance and power management in virtualized data centers, ...
OSIS19_Cloud : Performance and power management in virtualized data centers, ...
 
OSIS19_Cloud : Des objets dans le cloud, et qui y restent -- L'expérience du ...
OSIS19_Cloud : Des objets dans le cloud, et qui y restent -- L'expérience du ...OSIS19_Cloud : Des objets dans le cloud, et qui y restent -- L'expérience du ...
OSIS19_Cloud : Des objets dans le cloud, et qui y restent -- L'expérience du ...
 
OSIS19_Cloud : Attribution automatique de ressources pour micro-services, Alt...
OSIS19_Cloud : Attribution automatique de ressources pour micro-services, Alt...OSIS19_Cloud : Attribution automatique de ressources pour micro-services, Alt...
OSIS19_Cloud : Attribution automatique de ressources pour micro-services, Alt...
 
OSIS19_IoT : State of the art in security for embedded systems and IoT, by Pi...
OSIS19_IoT : State of the art in security for embedded systems and IoT, by Pi...OSIS19_IoT : State of the art in security for embedded systems and IoT, by Pi...
OSIS19_IoT : State of the art in security for embedded systems and IoT, by Pi...
 
Osis19_IoT: Proof of Pointer Programs with Ownership in SPARK, by Yannick Moy
Osis19_IoT: Proof of Pointer Programs with Ownership in SPARK, by Yannick MoyOsis19_IoT: Proof of Pointer Programs with Ownership in SPARK, by Yannick Moy
Osis19_IoT: Proof of Pointer Programs with Ownership in SPARK, by Yannick Moy
 
Osis18_Cloud : Pas de commun sans communauté ?
Osis18_Cloud : Pas de commun sans communauté ?Osis18_Cloud : Pas de commun sans communauté ?
Osis18_Cloud : Pas de commun sans communauté ?
 
Osis18_Cloud : Projet Wolphin
Osis18_Cloud : Projet Wolphin Osis18_Cloud : Projet Wolphin
Osis18_Cloud : Projet Wolphin
 
Osis18_Cloud : Virtualisation efficace d’architectures NUMA
Osis18_Cloud : Virtualisation efficace d’architectures NUMAOsis18_Cloud : Virtualisation efficace d’architectures NUMA
Osis18_Cloud : Virtualisation efficace d’architectures NUMA
 
Osis18_Cloud : DeepTorrent Stockage distribué perenne basé sur Bittorrent
Osis18_Cloud : DeepTorrent Stockage distribué perenne basé sur BittorrentOsis18_Cloud : DeepTorrent Stockage distribué perenne basé sur Bittorrent
Osis18_Cloud : DeepTorrent Stockage distribué perenne basé sur Bittorrent
 
Osis18_Cloud : Software-heritage
Osis18_Cloud : Software-heritageOsis18_Cloud : Software-heritage
Osis18_Cloud : Software-heritage
 
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
OSIS18_IoT: L'approche machine virtuelle pour les microcontrôleurs, le projet...
 
OSIS18_IoT: La securite des objets connectes a bas cout avec l'os et riot
OSIS18_IoT: La securite des objets connectes a bas cout avec l'os et riotOSIS18_IoT: La securite des objets connectes a bas cout avec l'os et riot
OSIS18_IoT: La securite des objets connectes a bas cout avec l'os et riot
 
OSIS18_IoT : Solution de mise au point pour les systemes embarques, par Julio...
OSIS18_IoT : Solution de mise au point pour les systemes embarques, par Julio...OSIS18_IoT : Solution de mise au point pour les systemes embarques, par Julio...
OSIS18_IoT : Solution de mise au point pour les systemes embarques, par Julio...
 
OSIS18_IoT : Securisation du reseau des objets connectes, par Nicolas LE SAUZ...
OSIS18_IoT : Securisation du reseau des objets connectes, par Nicolas LE SAUZ...OSIS18_IoT : Securisation du reseau des objets connectes, par Nicolas LE SAUZ...
OSIS18_IoT : Securisation du reseau des objets connectes, par Nicolas LE SAUZ...
 
OSIS18_IoT : Ada and SPARK - Defense in Depth for Safe Micro-controller Progr...
OSIS18_IoT : Ada and SPARK - Defense in Depth for Safe Micro-controller Progr...OSIS18_IoT : Ada and SPARK - Defense in Depth for Safe Micro-controller Progr...
OSIS18_IoT : Ada and SPARK - Defense in Depth for Safe Micro-controller Progr...
 
OSIS18_IoT : RTEMS pour l'IoT professionnel, par Pierre Ficheux (Smile ECS)
OSIS18_IoT : RTEMS pour l'IoT professionnel, par Pierre Ficheux (Smile ECS)OSIS18_IoT : RTEMS pour l'IoT professionnel, par Pierre Ficheux (Smile ECS)
OSIS18_IoT : RTEMS pour l'IoT professionnel, par Pierre Ficheux (Smile ECS)
 
PyParis 2017 / Un mooc python, by thierry parmentelat
PyParis 2017 / Un mooc python, by thierry parmentelatPyParis 2017 / Un mooc python, by thierry parmentelat
PyParis 2017 / Un mooc python, by thierry parmentelat
 

Último

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 

PyParis 2017 / Unicode and bytes demystified, by Boris Feld