forked from andreagrandi/andreagrandi.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex10.html
More file actions
470 lines (387 loc) · 23.6 KB
/
index10.html
File metadata and controls
470 lines (387 loc) · 23.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Andrea Grandi</title>
<link rel="stylesheet" href="https://www.andreagrandi.it/theme/css/main.css" />
<link rel="stylesheet" href="https://www.andreagrandi.it/theme/tipuesearch/css/tipuesearch.css">
<link href="https://www.andreagrandi.it/feeds/all.rss.xml" type="application/rss+xml" rel="alternate" title="Andrea Grandi RSS Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="icon" href="/favicon.ico" type="image/x-icon">
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="https://www.andreagrandi.it/">Andrea Grandi </a></h1>
<nav><ul>
<li><a href="https://www.andreagrandi.it/about/">About</a></li>
<li><a href="https://www.andreagrandi.it/curriculum/">Curriculum</a></li>
<li><a href="https://www.andreagrandi.it/pgp-key/">PGP Key</a></li>
</ul>
<form id="search" action="https://www.andreagrandi.it/search.html" onsubmit="return validateForm(this.elements['q'].value);">
<input type="text" class="search-query" placeholder="" name="q" id="tipue_search_input">
</form>
</nav>
</header><!-- /#banner -->
<section id="content" class="body">
<ol id="posts-list" class="hfeed" start="3">
<li><article class="hentry">
<header>
<h1><a href="https://www.andreagrandi.it/2014/09/12/create-an-encfs-volume-compatible-with-boxcryptor-classic/" rel="bookmark"
title="Permalink to Create an EncFS volume compatible with BoxCryptor Classic">Create an EncFS volume compatible with BoxCryptor Classic</a></h1>
</header>
<div class="entry-content">
<footer class="post-info">
<span>Fri 12 September 2014</span>
<span>| in <a href="https://www.andreagrandi.it/category/howto-linux-sicurezza.html">HowTo, Linux, Sicurezza</a></span>
<span>| tags: <a href="https://www.andreagrandi.it/tag/boxcryptor.html">boxcryptor</a><a href="https://www.andreagrandi.it/tag/dropbox.html">dropbox</a><a href="https://www.andreagrandi.it/tag/encfs.html">encfs</a></span>
</footer><!-- /.post-info --> <p>If you are planning to share an encrypted volume between Linux/OSX and
Windows (I will assume you are sharing it on Dropbox, but you could use
any similar service) and you are using
<a href="http://www.arg0.net/encfs"><strong>EncFS</strong></a> under Linux/OSX and
<a href="https://www.boxcryptor.com"><strong>BoxCryptor</strong></a> under Windows, there are
some specifig settings to use when you create the EncFS volume. Infact
even if BoxCryptor claims to be "encfs compatible", it's not 100%.</p>
<p>Suppose you want to create an encrypted volume located at
<strong>\$HOME/.TestTmpEncrypted</strong> and mounted at <strong>\$HOME/TestTmp</strong> you need
the following command:</p>
<div class="highlight"><pre><span></span>andrea-Inspiron-660:~ andrea $ encfs ~/.TestTmpEncrypted ~/TestTmp
</pre></div>
<p>answer "Y" when you are asked if you want to create the folders:</p>
<div class="highlight"><pre><span></span>The directory "/home/andrea/.TestTmpEncrypted/" does not exist. Should it be created? (y,n) y
The directory "/home/andrea/TestTmp" does not exist. Should it be created? (y,n) y
</pre></div>
<p>At this point you will need to select between default paranoia mode or
advanced mode. Please choose the <strong>advanced</strong> one (x):</p>
<div class="highlight"><pre><span></span>Creating new encrypted volume.
Please choose from one of the following options:
enter "x" for expert configuration mode,
enter "p" for pre-configured paranoia mode,
anything else, or an empty line will select standard mode.
?> x
</pre></div>
<p>Manual configuration mode selected.</p>
<div class="highlight"><pre><span></span>Select AES as cypher algorithm:
The following cypher algorithms are available:
1. AES : 16 byte block cipher
-- Supports key lengths of 128 to 256 bits
-- Supports block sizes of 64 to 4096 bytes
2. Blowfish : 8 byte block cypher
-- Supports key lengths of 128 to 256 bits
-- Supports block sizes of 64 to 4096 bytes
Enter the number corresponding to your choice: 1
Selected algorithm "AES"
</pre></div>
<p>Select <strong>256</strong> as key size:</p>
<div class="highlight"><pre><span></span>Please select a key size in bits. The cypher you have chosen
supports sizes from 128 to 256 bits in increments of 64 bits.
For example:
128, 192, 256
Selected key size: 256
Using key size of 256 bits
</pre></div>
<p>Choose <strong>1024</strong> as block size:</p>
<div class="highlight"><pre><span></span>Select a block size in bytes. The cypher you have chosen
supports sizes from 64 to 4096 bytes in increments of 16.
Alternatively, just press enter for the default (1024 bytes)
filesystem block size:
Using filesystem block size of 1024 bytes
</pre></div>
<p>Select <strong>Stream</strong> as filename encoding:</p>
<div class="highlight"><pre><span></span>The following filename encoding algorithms are available:
1. Block : Block encoding, hides file name size somewhat
2. Null : No encryption of filenames
3. Stream : Stream encoding, keeps filenames as short as possible
Enter the number corresponding to your choice: 3
Selected algorithm "Stream""
</pre></div>
<p>Do <strong>NOT</strong> enable <strong>filename initialization vector chaining</strong>:</p>
<div class="highlight"><pre><span></span>Enable filename initialization vector chaining?
This makes filename encoding dependent on the complete path,
rather then encoding each path element individually.
The default here is Yes.
Any response that does not begin with 'n' will mean Yes: no
</pre></div>
<p>Do <strong>NOT</strong> enable <strong>per-file initialization vectors</strong>:</p>
<div class="highlight"><pre><span></span>Enable per-file initialization vectors?
This adds about 8 bytes per file to the storage requirements.
It should not affect performance except possibly with applications
which rely on block-aligned file io for performance.
The default here is Yes.
Any response that does not begin with 'n' will mean Yes: no
</pre></div>
<p>Do <strong>NOT</strong> enable <strong>external chained IV</strong>:</p>
<div class="highlight"><pre><span></span>External chained IV disabled, as both 'IV chaining'
and 'unique IV' features are required for this option.
Enable block authentication code headers
on every block in a file? This adds about 12 bytes per block
to the storage requirements for a file, and significantly affects
performance but it also means [almost] any modifications or errors
within a block will be caught and will cause a read error.
The default here is No.
Any response that does not begin with 'y' will mean No: no
</pre></div>
<p>Do <strong>NOT</strong> enable <strong>random bytes to each block header</strong>:</p>
<div class="highlight"><pre><span></span>Add random bytes to each block header?
This adds a performance penalty, but ensures that blocks
have different authentication codes. Note that you can
have the same benefits by enabling per-file initialisation
vectors, which does not come with as great a performance
penalty.
Select a number of bytes, from 0 (no random bytes) to 8: 0
</pre></div>
<p>Enable <strong>file-hole pass-through</strong>:</p>
<div class="highlight"><pre><span></span>Enable file-hole pass-through?
This avoids writing encrypted blocks when file holes are created.
The default here is Yes.
Any response that does not begin with 'n' will mean Yes: yes
</pre></div>
<p>Finally you will see:</p>
<div class="highlight"><pre><span></span>Configuration finished. The filesystem to be created has
the following properties:
Filesystem cypher: "ssl/aes", version 3:0:2
Filename encoding: "nameio/stream", version 2:1:2
Key Size: 256 bits
Block Size: 1024 bytes
File holes passed through to ciphertext.
</pre></div>
<p>At this point set a passphrase for your new volume:</p>
<div class="highlight"><pre><span></span>Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism. However, the password can be changed
later using encfsctl.
New Encfs Password:
Verify Encfs Password:
</pre></div>
<p>You should be able to mount this volume using BoxCryptor.</p>
<a class="readmore" href="https://www.andreagrandi.it/2014/09/12/create-an-encfs-volume-compatible-with-boxcryptor-classic/">read more</a>
<p><a href="https://www.andreagrandi.it/2014/09/12/create-an-encfs-volume-compatible-with-boxcryptor-classic/#disqus_thread">comments</a></p> </div><!-- /.entry-content -->
</article></li>
<li><article class="hentry">
<header>
<h1><a href="https://www.andreagrandi.it/2014/09/02/how-to-configure-edimax-ew-7811un-wifi-dongle-on-raspbian/" rel="bookmark"
title="Permalink to How to configure Edimax EW-7811UN Wifi dongle on Raspbian">How to configure Edimax EW-7811UN Wifi dongle on Raspbian</a></h1>
</header>
<div class="entry-content">
<footer class="post-info">
<span>Tue 02 September 2014</span>
<span>| in <a href="https://www.andreagrandi.it/category/howto.html">HowTo</a></span>
<span>| tags: <a href="https://www.andreagrandi.it/tag/howto.html">howto</a><a href="https://www.andreagrandi.it/tag/linux.html">Linux</a><a href="https://www.andreagrandi.it/tag/raspberrypi.html">RaspberryPI</a><a href="https://www.andreagrandi.it/tag/wifi.html">WIFI</a><a href="https://www.andreagrandi.it/tag/networking.html">networking</a><a href="https://www.andreagrandi.it/tag/debian.html">Debian</a></span>
</footer><!-- /.post-info --> <p>If you want to connect your <strong>RaspberryPi</strong> to your home network and you
want to avoid cables, I suggest you to use the <strong>Edimax wifi adapter</strong>.
This device is quite cheap (around £8 on
<a href="http://www.amazon.co.uk/Edimax-EW-7811UN-150Mbps-Wireless-Adapter/dp/B003MTTJOY/">Amazon</a>)
and it's very easy to configure on Raspbian (I assume you are using a
recent version of Raspbian. I'm using the one released on 20/06/2014).</p>
<p><a href="https://www.andreagrandi.it/images/2014/09/edimax-pi3.png"><img alt="edimax-pi3" src="https://www.andreagrandi.it/images/2014/09/edimax-pi3.png" width="100%"></a></p>
<h3>Configure the wifi adapter</h3>
<p>Edit <strong>/etc/network/interfaces</strong> and insert these configuration values:</p>
<div class="highlight"><pre><span></span>auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid YOURESSID
wpa-psk YOURWPAPASSWORD
</pre></div>
<h3>Power management issue</h3>
<p>There is a known "issue" with this adapter default configuration that
makes it to turn off if the wlan interface is not in use for some
minutes. To avoid this you have to customize the parameters used to load
the kernel module. First check that your adapter is using <strong>8192cu</strong>
module:</p>
<div class="highlight"><pre><span></span>sudo lsmod <span class="p">|</span> grep <span class="m">8192</span>
8192cu <span class="m">551136</span> <span class="m">0</span>
</pre></div>
<p>Create the file <strong>/etc/modprobe.d/8192cu.conf</strong> and insert the following
lines inside:</p>
<div class="highlight"><pre><span></span><span class="c1"># prevent power down of wireless when idle</span>
options 8192cu <span class="nv">rtw_power_mgnt</span><span class="o">=</span><span class="m">0</span> <span class="nv">rtw_enusbss</span><span class="o">=</span><span class="m">0</span>
</pre></div>
<p>I also suggest to create a little entry in crontab to make the
RaspberryPi ping your router every minute. This will ensure that your
wifi connection will stay alive. To edit crontab just type (from pi
user, you don't need to be root):</p>
<div class="highlight"><pre><span></span>crontab -e
</pre></div>
<p>and insert this line at the end:</p>
<div class="highlight"><pre><span></span>*/1 * * * * ping -c <span class="m">1</span> <span class="m">192</span>.168.0.1
</pre></div>
<p>where 192.168.0.1 is the IP of your router (of course substitute this
value with the ip of your router).</p>
<h3>Keep Alive Script</h3>
<p>I created a further script to keep my WIFI alive. This script will ping
the router (change the IP using the one of your router) every 5 minutes
and if the ping fails it brings down the wlan0 interface, the kernel
module for the wifi and bring them up again.</p>
<p>
<script src="https://gist.github.com/andreagrandi/c703e4e67c38fbecf340.js"></script>
</p>
<p>Just put this script in <strong>/root/wifi_recover.sh</strong> and then execute from
<strong>root</strong> user:</p>
<div class="highlight"><pre><span></span>chmod +x wifi_recover.sh
crontab -e
</pre></div>
<p>Insert this line inside the crontab editor:</p>
<div class="highlight"><pre><span></span>*/5 * * * * /root/wifi_recover.sh
</pre></div>
<h3>Conclusion</h3>
<p>The configuration is done. Just reboot your RaspberryPi and enjoy your
wifi connection.</p>
<a class="readmore" href="https://www.andreagrandi.it/2014/09/02/how-to-configure-edimax-ew-7811un-wifi-dongle-on-raspbian/">read more</a>
<p><a href="https://www.andreagrandi.it/2014/09/02/how-to-configure-edimax-ew-7811un-wifi-dongle-on-raspbian/#disqus_thread">comments</a></p> </div><!-- /.entry-content -->
</article></li>
<li><article class="hentry">
<header>
<h1><a href="https://www.andreagrandi.it/2014/09/02/configuring-ddclient-to-update-your-dynamic-dns-at-noip-com/" rel="bookmark"
title="Permalink to Configuring ddclient to update your dynamic DNS at noip.com">Configuring ddclient to update your dynamic DNS at noip.com</a></h1>
</header>
<div class="entry-content">
<footer class="post-info">
<span>Tue 02 September 2014</span>
<span>| in <a href="https://www.andreagrandi.it/category/howto.html">HowTo</a></span>
<span>| tags: <a href="https://www.andreagrandi.it/tag/howto.html">howto</a><a href="https://www.andreagrandi.it/tag/linux.html">linux</a><a href="https://www.andreagrandi.it/tag/dns.html">dns</a></span>
</footer><!-- /.post-info --> <p><a href="http://noip.com"><strong>noip.com</strong></a> is one of the few dynamic DNS free
services that are reliable to use. If you have, like in my situation, a
RaspberryPi connected to your home DSL and you want it to be always
reachable without knowing the current IP address (the IP could change if
you have a normal DSL service at home), you need a dynamic DNS service.</p>
<p>To update the noip.com one you just need <strong>ddclient</strong> a tool that is
available in Raspbian/Debian repository. You can install it with this
command:</p>
<div class="highlight"><pre><span></span>sudo apt-get install ddclient
</pre></div>
<p>then you just need to edit <strong>/etc/ddclient.conf</strong></p>
<div class="highlight"><pre><span></span><span class="nv">protocol</span><span class="o">=</span>dyndns2
<span class="nv">use</span><span class="o">=</span>web, <span class="nv">web</span><span class="o">=</span>checkip.dyndns.com/, web-skip<span class="o">=</span><span class="s1">'IP Address'</span>
<span class="nv">server</span><span class="o">=</span>dynupdate.no-ip.com
<span class="nv">login</span><span class="o">=</span>yourusername
<span class="nv">password</span><span class="o">=</span>yourpassword
yourhostname.no-ip.org
</pre></div>
<p>and restart the client:</p>
<div class="highlight"><pre><span></span>sudo /etc/init.d/ddclient restart
</pre></div>
<p>That's all! Please remember that noip.com <strong>free accounts</strong> have a
<strong>limitation</strong>: they need to be confirmed every 30 days (you will
receive an email and you need to click on the link contained to update
your DNS).</p>
<a class="readmore" href="https://www.andreagrandi.it/2014/09/02/configuring-ddclient-to-update-your-dynamic-dns-at-noip-com/">read more</a>
<p><a href="https://www.andreagrandi.it/2014/09/02/configuring-ddclient-to-update-your-dynamic-dns-at-noip-com/#disqus_thread">comments</a></p> </div><!-- /.entry-content -->
</article></li>
<li><article class="hentry">
<header>
<h1><a href="https://www.andreagrandi.it/2014/08/31/getting-started-with-digital-ocean-vps-configuring-dns-and-postfix-for-email-forwarding/" rel="bookmark"
title="Permalink to Getting started with Digital Ocean VPS: configuring DNS and Postfix for email forwarding">Getting started with Digital Ocean VPS: configuring DNS and Postfix for email forwarding</a></h1>
</header>
<div class="entry-content">
<footer class="post-info">
<span>Sun 31 August 2014</span>
<span>| in <a href="https://www.andreagrandi.it/category/howto.html">HowTo</a></span>
<span>| tags: <a href="https://www.andreagrandi.it/tag/dns.html">dns</a><a href="https://www.andreagrandi.it/tag/postfix.html">postfix</a><a href="https://www.andreagrandi.it/tag/vps.html">vps</a><a href="https://www.andreagrandi.it/tag/howto.html">howto</a><a href="https://www.andreagrandi.it/tag/digitalocean.html">digitalocean</a><a href="https://www.andreagrandi.it/tag/email.html">email</a></span>
</footer><!-- /.post-info --> <p>I have recently migrated my website from a shared hosting to a dedicated
VPS on Digital Ocean. Having a VPS surely gives you unlimited
possibilities, compared to a shared hosting, but of course you have to
manage some services by yourself.</p>
<p>In my case I only needed: SSH access, LEMP configuration (Nginx + MySQL
+ PHP) to serve my WordPress blog and Postfix to use email forwarding
from my aliases to my personal email.</p>
<h3>Configuring DNS on Digital Ocean</h3>
<p>Understanding how to properly configure the DNS entries in the panel
could be a bit tricky if it's not your daily bread. In particular there
is a Digital Ocean configuration that assumes certain things about your
droplet, so it's better to configure it properly.</p>
<p>For example the droplet name should not be casual, but it should match
your domain name: I initially called my host "andreagrandi" and I had to
rename it to "andreagrandi.it" to have the proper PTR values.</p>
<p>You will need to create at least a "mail" record, pointing to your IP
and an "MX" record pointing to mail.yourdomain.com. (please note the dot
at the end of the domain name). Here is the configuration of my own
droplet (you will notice also a CNAME record. You need it if you want
www.yourdomain.com to correctly point to your ip.</p>
<p><a href="https://www.andreagrandi.it/images/2014/08/dns_config_digitalocean.jpg"><img alt="dns_config_digitalocean" src="https://www.andreagrandi.it/images/2014/08/dns_config_digitalocean.jpg" width="100%"></a></p>
<h3>Configuring Postfix</h3>
<p>In my case I only needed some aliases that I use to forward emails to my
GMail account, so the configuration is quite easy. First you need to
install Postfix:</p>
<div class="highlight"><pre><span></span>sudo apt-get install postfix
</pre></div>
<p>Then you need to edit<strong> /etc/postfix/main.cf</strong> customizing myhostname
with your domain name and add <strong>virtual_alias_maps</strong> and
<strong>virtual_alias_domains</strong> parameters. Please also check that
<strong>mynetworks</strong> is configured exactly as I did, or you will make your
mail server vulnerable to spam bots. You can see my complete
configuration here:</p>
<p>
<script src="https://gist.github.com/andreagrandi/fe6246dac228250ee2c0.js"></script>
</p>
<h3>Add your email aliases</h3>
<p>Edit <strong>/etc/postfix/virtual</strong> file and add your aliases, one per line,
like in this example:</p>
<div class="highlight"><pre><span></span>info@yourdomain.com youremail@gmail.com
sales@yourdomain.com youremail@gmail.com
</pre></div>
<p>At this point update the alias map and reload Postfix configuration:</p>
<div class="highlight"><pre><span></span>sudo postmap /etc/postfix/virtual
sudo /etc/init.d/postfix reload
</pre></div>
<h3>Conclusion</h3>
<p>As you can see, configuring Postfix is quite easy, you just need to be
careful when you configure the DNS records in the control panel. Are you
curious to try how Digital Ocean VPS works? Fancy <strong>10\$ credit</strong>
(enough for 2 months if you choose the basic droplet) for <strong>free</strong>? Use
this link and enjoy it
<a href="https://www.digitalocean.com/?refcode=cc8349e328a5">https://www.digitalocean.com/?refcode=cc8349e328a5</a></p>
<a class="readmore" href="https://www.andreagrandi.it/2014/08/31/getting-started-with-digital-ocean-vps-configuring-dns-and-postfix-for-email-forwarding/">read more</a>
<p><a href="https://www.andreagrandi.it/2014/08/31/getting-started-with-digital-ocean-vps-configuring-dns-and-postfix-for-email-forwarding/#disqus_thread">comments</a></p> </div><!-- /.entry-content -->
</article></li>
</ol><!-- /#posts-list -->
<p class="paginator">
<a href="https://www.andreagrandi.it/index9.html">«</a>
Page 10 / 50
<a href="https://www.andreagrandi.it/index11.html">»</a>
</p>
</section><!-- /#content -->
<section id="extras" class="body">
<div class="social">
<h2>social</h2>
<ul>
<li><a href="https://www.andreagrandi.it/feeds/all.rss.xml" type="application/rss+xml" rel="alternate">rss feed</a></li>
<li><a href="https://twitter.com/andreagrandi">twitter</a></li>
<li><a href="https://github.com/andreagrandi">github</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<p>
Powered by <a href="http://getpelican.com/">Pelican</a> and Python -
Source code available on <a href="https://github.com/andreagrandi/andreagrandi.it">GitHub</a>
<a rel="license" href="http://creativecommons.org/licenses/by-nc/4.0/">
<img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc/4.0/80x15.png" />
</a>
</p>
</footer><!-- /#contentinfo -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2140684-3']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<script type="text/javascript">
var disqus_shortname = 'andrea-grandi-it';
(function () {
var s = document.createElement('script'); s.async = true;
s.type = 'text/javascript';
s.src = '//' + disqus_shortname + '.disqus.com/count.js';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());
</script>
</body>
</html>