]> pere.pagekite.me Git - homepage.git/blob - blog/Plain_text_accounting_file_from_your_bitcoin_transactions.html
Generated.
[homepage.git] / blog / Plain_text_accounting_file_from_your_bitcoin_transactions.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
4 <head>
5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen: Plain text accounting file from your bitcoin transactions</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="http://www.hungry.com/~pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://www.hungry.com/~pere/blog/vim.css" />
9
10
11 </head>
12 <body>
13 <div class="title">
14 <h1>
15 <a href="http://www.hungry.com/~pere/blog/">Petter Reinholdtsen</a>
16
17 </h1>
18
19 </div>
20
21
22 <div class="entry">
23 <div class="title">Plain text accounting file from your bitcoin transactions</div>
24 <div class="date"> 7th March 2024</div>
25 <div class="body"><p>A while back I wrote a small script to extract the Bitcoin
26 transactions in a wallet in the
27 <ahref="https://plaintextaccounting.org/">ledger plain text accounting
28 format</a>. The last few days I spent some time to get it working
29 better with more special cases. In case it can be useful for others,
30 here is a copy:</p>
31
32 <p><blockquote><pre>
33 #!/usr/bin/python3
34 # -*- coding: utf-8 -*-
35 # Copyright (c) 2023-2024 Petter Reinholdtsen
36
37 from decimal import Decimal
38 import json
39 import subprocess
40 import time
41
42 import numpy
43
44 def format_float(num):
45 return numpy.format_float_positional(num, trim='-')
46
47 accounts = {
48 u'amount' : 'Assets:BTC:main',
49 }
50
51 addresses = {
52 '<some address>' : 'Assets:bankkonto',
53 '<some address>' : 'Assets:bankkonto',
54 }
55
56 def exec_json(cmd):
57 proc = subprocess.Popen(cmd,stdout=subprocess.PIPE)
58 j = json.loads(proc.communicate()[0], parse_float=Decimal)
59 return j
60
61 def list_txs():
62 # get all transactions for all accounts / addresses
63 c = 0
64 txs = []
65 txidfee = {}
66 limit=100000
67 cmd = ['bitcoin-cli', 'listtransactions', '*', str(limit)]
68 if True:
69 txs.extend(exec_json(cmd))
70 else:
71 # Useful for debugging
72 with open('transactions.json') as f:
73 txs.extend(json.load(f, parse_float=Decimal))
74 #print txs
75 for tx in sorted(txs, key=lambda a: a['time']):
76 # print tx['category']
77 if 'abandoned' in tx and tx['abandoned']:
78 continue
79 if 'confirmations' in tx and 0 >= tx['confirmations']:
80 continue
81 when = time.strftime('%Y-%m-%d %H:%M', time.localtime(tx['time']))
82 if 'message' in tx:
83 desc = tx['message']
84 elif 'comment' in tx:
85 desc = tx['comment']
86 elif 'label' in tx:
87 desc = tx['label']
88 else:
89 desc = 'n/a'
90 print("%s %s" % (when, desc))
91 if 'address' in tx:
92 print(" ; to bitcoin address %s" % tx['address'])
93 else:
94 print(" ; missing address in transaction, txid=%s" % tx['txid'])
95 print(f" ; amount={tx['amount']}")
96 if 'fee'in tx:
97 print(f" ; fee={tx['fee']}")
98 for f in accounts.keys():
99 if f in tx and Decimal(0) != tx[f]:
100 amount = tx[f]
101 print(" %-20s %s BTC" % (accounts[f], format_float(amount)))
102 if 'fee' in tx and Decimal(0) != tx['fee']:
103 # Make sure to list fee used in several transactions only once.
104 if 'fee' in tx and tx['txid'] in txidfee \
105 and tx['fee'] == txidfee[tx['txid']]:
106 True
107 else:
108 fee = tx['fee']
109 print(" %-20s %s BTC" % (accounts['amount'], format_float(fee)))
110 print(" %-20s %s BTC" % ('Expences:BTC-fee', format_float(-fee)))
111 txidfee[tx['txid']] = tx['fee']
112
113 if 'address' in tx and tx['address'] in addresses:
114 print(" %s" % addresses[tx['address']])
115 else:
116 if 'generate' == tx['category']:
117 print(" Income:BTC-mining")
118 else:
119 if amount < Decimal(0):
120 print(f" Assets:unknown:sent:update-script-addr-{tx['address']}")
121 else:
122 print(f" Assets:unknown:received:update-script-addr-{tx['address']}")
123
124 print()
125 c = c + 1
126 print("# Found %d transactions" % c)
127 if limit == c:
128 print(f"# Warning: Limit {limit} reached, consider increasing limit.")
129
130 def main():
131 list_txs()
132
133 main()
134 </pre></blockquote></p>
135
136 <p>It is more of a proof of concept, and I do not expect it to handle
137 all edge cases, but it worked for me, and perhaps you can find it
138 useful too.</p>
139
140 <p>To get a more interesting result, it is useful to map accounts sent
141 to or received from to accounting accounts, using the
142 <tt>addresses</tt> hash. As these will be very context dependent, I
143 leave out my list to allow each user to fill out their own list of
144 accounts. Out of the box, 'ledger reg BTC:main' should be able to
145 show the amount of BTCs present in the wallet at any given time in the
146 past. For other and more valuable analysis, a account plan need to be
147 set up in the <tt>addresses</tt> hash. Here is an example
148 transaction:</p>
149
150 <p><blockquote><pre>
151 2024-03-07 17:00 Donated to good cause
152 Assets:BTC:main -0.1 BTC
153 Assets:BTC:main -0.00001 BTC
154 Expences:BTC-fee 0.00001 BTC
155 Expences:donations 0.1 BTC
156 </pre></blockquote></p>
157
158 <p>It need a running Bitcoin Core daemon running, as it connect to it
159 using <tt>bitcoin-cli listtransactions * 100000</tt> to extract the
160 transactions listed in the Wallet.</p>
161
162 <p>As usual, if you use Bitcoin and want to show your support of my
163 activities, please send Bitcoin donations to my address
164 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
165 </div>
166
167 <div class="tags">Tags: <a href="http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>.</div>
168
169
170 </div>
171
172
173
174
175 <div id="sidebar">
176
177
178
179 <h2>Archive</h2>
180 <ul>
181
182 <li>2025
183 <ul>
184
185 <li><a href="http://www.hungry.com/~pere/blog/archive/2025/01/">January (4)</a></li>
186
187 <li><a href="http://www.hungry.com/~pere/blog/archive/2025/02/">February (3)</a></li>
188
189 </ul></li>
190
191 <li>2024
192 <ul>
193
194 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/01/">January (1)</a></li>
195
196 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/02/">February (1)</a></li>
197
198 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/03/">March (2)</a></li>
199
200 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/04/">April (3)</a></li>
201
202 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/05/">May (1)</a></li>
203
204 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/06/">June (1)</a></li>
205
206 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/07/">July (2)</a></li>
207
208 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/12/">December (1)</a></li>
209
210 </ul></li>
211
212 <li>2023
213 <ul>
214
215 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/01/">January (3)</a></li>
216
217 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/02/">February (1)</a></li>
218
219 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/04/">April (2)</a></li>
220
221 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/05/">May (3)</a></li>
222
223 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/06/">June (1)</a></li>
224
225 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/08/">August (1)</a></li>
226
227 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/09/">September (1)</a></li>
228
229 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/10/">October (1)</a></li>
230
231 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/11/">November (4)</a></li>
232
233 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/12/">December (1)</a></li>
234
235 </ul></li>
236
237 <li>2022
238 <ul>
239
240 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/02/">February (1)</a></li>
241
242 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/03/">March (3)</a></li>
243
244 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/04/">April (2)</a></li>
245
246 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/06/">June (2)</a></li>
247
248 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/07/">July (1)</a></li>
249
250 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/09/">September (1)</a></li>
251
252 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/10/">October (1)</a></li>
253
254 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/12/">December (1)</a></li>
255
256 </ul></li>
257
258 <li>2021
259 <ul>
260
261 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/01/">January (2)</a></li>
262
263 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/02/">February (1)</a></li>
264
265 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/05/">May (1)</a></li>
266
267 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/06/">June (1)</a></li>
268
269 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/07/">July (3)</a></li>
270
271 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/08/">August (1)</a></li>
272
273 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/09/">September (1)</a></li>
274
275 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/10/">October (1)</a></li>
276
277 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/12/">December (1)</a></li>
278
279 </ul></li>
280
281 <li>2020
282 <ul>
283
284 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/02/">February (2)</a></li>
285
286 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/03/">March (2)</a></li>
287
288 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/04/">April (2)</a></li>
289
290 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/05/">May (3)</a></li>
291
292 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/06/">June (2)</a></li>
293
294 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/07/">July (1)</a></li>
295
296 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/09/">September (1)</a></li>
297
298 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/10/">October (1)</a></li>
299
300 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/11/">November (1)</a></li>
301
302 </ul></li>
303
304 <li>2019
305 <ul>
306
307 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/01/">January (4)</a></li>
308
309 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/02/">February (3)</a></li>
310
311 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/03/">March (3)</a></li>
312
313 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/05/">May (2)</a></li>
314
315 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/06/">June (5)</a></li>
316
317 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/07/">July (2)</a></li>
318
319 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/08/">August (1)</a></li>
320
321 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/09/">September (1)</a></li>
322
323 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/11/">November (1)</a></li>
324
325 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/12/">December (4)</a></li>
326
327 </ul></li>
328
329 <li>2018
330 <ul>
331
332 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/01/">January (1)</a></li>
333
334 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/02/">February (5)</a></li>
335
336 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/03/">March (5)</a></li>
337
338 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/04/">April (3)</a></li>
339
340 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/06/">June (2)</a></li>
341
342 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/07/">July (5)</a></li>
343
344 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/08/">August (3)</a></li>
345
346 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/09/">September (3)</a></li>
347
348 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/10/">October (5)</a></li>
349
350 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/11/">November (2)</a></li>
351
352 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/12/">December (4)</a></li>
353
354 </ul></li>
355
356 <li>2017
357 <ul>
358
359 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/01/">January (4)</a></li>
360
361 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/02/">February (3)</a></li>
362
363 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/03/">March (5)</a></li>
364
365 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/04/">April (2)</a></li>
366
367 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/06/">June (5)</a></li>
368
369 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/07/">July (1)</a></li>
370
371 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/08/">August (1)</a></li>
372
373 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/09/">September (3)</a></li>
374
375 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/10/">October (5)</a></li>
376
377 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/11/">November (3)</a></li>
378
379 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/12/">December (4)</a></li>
380
381 </ul></li>
382
383 <li>2016
384 <ul>
385
386 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/01/">January (3)</a></li>
387
388 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/02/">February (2)</a></li>
389
390 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/03/">March (3)</a></li>
391
392 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/04/">April (8)</a></li>
393
394 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/05/">May (8)</a></li>
395
396 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/06/">June (2)</a></li>
397
398 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/07/">July (2)</a></li>
399
400 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/08/">August (5)</a></li>
401
402 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/09/">September (2)</a></li>
403
404 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/10/">October (3)</a></li>
405
406 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/11/">November (8)</a></li>
407
408 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/12/">December (5)</a></li>
409
410 </ul></li>
411
412 <li>2015
413 <ul>
414
415 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/01/">January (7)</a></li>
416
417 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/02/">February (6)</a></li>
418
419 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/03/">March (1)</a></li>
420
421 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/04/">April (4)</a></li>
422
423 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/05/">May (3)</a></li>
424
425 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/06/">June (4)</a></li>
426
427 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/07/">July (6)</a></li>
428
429 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/08/">August (2)</a></li>
430
431 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/09/">September (2)</a></li>
432
433 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/10/">October (9)</a></li>
434
435 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/11/">November (6)</a></li>
436
437 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/12/">December (3)</a></li>
438
439 </ul></li>
440
441 <li>2014
442 <ul>
443
444 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/01/">January (2)</a></li>
445
446 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/02/">February (3)</a></li>
447
448 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/03/">March (8)</a></li>
449
450 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/04/">April (7)</a></li>
451
452 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/05/">May (1)</a></li>
453
454 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/06/">June (2)</a></li>
455
456 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/07/">July (2)</a></li>
457
458 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/08/">August (2)</a></li>
459
460 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/09/">September (5)</a></li>
461
462 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/10/">October (6)</a></li>
463
464 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/11/">November (3)</a></li>
465
466 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/12/">December (5)</a></li>
467
468 </ul></li>
469
470 <li>2013
471 <ul>
472
473 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/01/">January (11)</a></li>
474
475 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/02/">February (9)</a></li>
476
477 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/03/">March (9)</a></li>
478
479 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/04/">April (6)</a></li>
480
481 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/05/">May (9)</a></li>
482
483 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/06/">June (10)</a></li>
484
485 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/07/">July (7)</a></li>
486
487 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/08/">August (3)</a></li>
488
489 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/09/">September (5)</a></li>
490
491 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/10/">October (7)</a></li>
492
493 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/11/">November (9)</a></li>
494
495 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/12/">December (3)</a></li>
496
497 </ul></li>
498
499 <li>2012
500 <ul>
501
502 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/01/">January (7)</a></li>
503
504 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/02/">February (10)</a></li>
505
506 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/03/">March (17)</a></li>
507
508 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/04/">April (12)</a></li>
509
510 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/05/">May (12)</a></li>
511
512 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/06/">June (20)</a></li>
513
514 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/07/">July (17)</a></li>
515
516 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/08/">August (6)</a></li>
517
518 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/09/">September (9)</a></li>
519
520 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/10/">October (17)</a></li>
521
522 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/11/">November (10)</a></li>
523
524 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/12/">December (7)</a></li>
525
526 </ul></li>
527
528 <li>2011
529 <ul>
530
531 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/01/">January (16)</a></li>
532
533 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/02/">February (6)</a></li>
534
535 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/03/">March (6)</a></li>
536
537 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/04/">April (7)</a></li>
538
539 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/05/">May (3)</a></li>
540
541 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/06/">June (2)</a></li>
542
543 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/07/">July (7)</a></li>
544
545 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/08/">August (6)</a></li>
546
547 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/09/">September (4)</a></li>
548
549 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/10/">October (2)</a></li>
550
551 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/11/">November (3)</a></li>
552
553 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/12/">December (1)</a></li>
554
555 </ul></li>
556
557 <li>2010
558 <ul>
559
560 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/01/">January (2)</a></li>
561
562 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/02/">February (1)</a></li>
563
564 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/03/">March (3)</a></li>
565
566 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/04/">April (3)</a></li>
567
568 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/05/">May (9)</a></li>
569
570 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/06/">June (14)</a></li>
571
572 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/07/">July (12)</a></li>
573
574 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/08/">August (13)</a></li>
575
576 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/09/">September (7)</a></li>
577
578 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/10/">October (9)</a></li>
579
580 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/11/">November (13)</a></li>
581
582 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/12/">December (12)</a></li>
583
584 </ul></li>
585
586 <li>2009
587 <ul>
588
589 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/01/">January (8)</a></li>
590
591 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/02/">February (8)</a></li>
592
593 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/03/">March (12)</a></li>
594
595 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/04/">April (10)</a></li>
596
597 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/05/">May (9)</a></li>
598
599 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/06/">June (3)</a></li>
600
601 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/07/">July (4)</a></li>
602
603 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/08/">August (3)</a></li>
604
605 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/09/">September (1)</a></li>
606
607 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/10/">October (2)</a></li>
608
609 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/11/">November (3)</a></li>
610
611 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/12/">December (3)</a></li>
612
613 </ul></li>
614
615 <li>2008
616 <ul>
617
618 <li><a href="http://www.hungry.com/~pere/blog/archive/2008/11/">November (5)</a></li>
619
620 <li><a href="http://www.hungry.com/~pere/blog/archive/2008/12/">December (7)</a></li>
621
622 </ul></li>
623
624 </ul>
625
626
627
628 <h2>Tags</h2>
629 <ul>
630
631 <li><a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer (19)</a></li>
632
633 <li><a href="http://www.hungry.com/~pere/blog/tags/amiga">amiga (1)</a></li>
634
635 <li><a href="http://www.hungry.com/~pere/blog/tags/aros">aros (1)</a></li>
636
637 <li><a href="http://www.hungry.com/~pere/blog/tags/bankid">bankid (4)</a></li>
638
639 <li><a href="http://www.hungry.com/~pere/blog/tags/betalkontant">betalkontant (9)</a></li>
640
641 <li><a href="http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin (13)</a></li>
642
643 <li><a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem (17)</a></li>
644
645 <li><a href="http://www.hungry.com/~pere/blog/tags/bsa">bsa (2)</a></li>
646
647 <li><a href="http://www.hungry.com/~pere/blog/tags/chrpath">chrpath (3)</a></li>
648
649 <li><a href="http://www.hungry.com/~pere/blog/tags/debian">debian (209)</a></li>
650
651 <li><a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu (159)</a></li>
652
653 <li><a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
654
655 <li><a href="http://www.hungry.com/~pere/blog/tags/digistan">digistan (11)</a></li>
656
657 <li><a href="http://www.hungry.com/~pere/blog/tags/dld">dld (18)</a></li>
658
659 <li><a href="http://www.hungry.com/~pere/blog/tags/docbook">docbook (33)</a></li>
660
661 <li><a href="http://www.hungry.com/~pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
662
663 <li><a href="http://www.hungry.com/~pere/blog/tags/english">english (471)</a></li>
664
665 <li><a href="http://www.hungry.com/~pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
666
667 <li><a href="http://www.hungry.com/~pere/blog/tags/fildeling">fildeling (14)</a></li>
668
669 <li><a href="http://www.hungry.com/~pere/blog/tags/freeculture">freeculture (34)</a></li>
670
671 <li><a href="http://www.hungry.com/~pere/blog/tags/freedombox">freedombox (9)</a></li>
672
673 <li><a href="http://www.hungry.com/~pere/blog/tags/frikanalen">frikanalen (20)</a></li>
674
675 <li><a href="http://www.hungry.com/~pere/blog/tags/h264">h264 (20)</a></li>
676
677 <li><a href="http://www.hungry.com/~pere/blog/tags/intervju">intervju (43)</a></li>
678
679 <li><a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram (21)</a></li>
680
681 <li><a href="http://www.hungry.com/~pere/blog/tags/kart">kart (23)</a></li>
682
683 <li><a href="http://www.hungry.com/~pere/blog/tags/kodi">kodi (6)</a></li>
684
685 <li><a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap (9)</a></li>
686
687 <li><a href="http://www.hungry.com/~pere/blog/tags/lego">lego (5)</a></li>
688
689 <li><a href="http://www.hungry.com/~pere/blog/tags/lenker">lenker (8)</a></li>
690
691 <li><a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc (8)</a></li>
692
693 <li><a href="http://www.hungry.com/~pere/blog/tags/lsdvd">lsdvd (3)</a></li>
694
695 <li><a href="http://www.hungry.com/~pere/blog/tags/ltsp">ltsp (1)</a></li>
696
697 <li><a href="http://www.hungry.com/~pere/blog/tags/madewithcc">madewithcc (3)</a></li>
698
699 <li><a href="http://www.hungry.com/~pere/blog/tags/mesh network">mesh network (8)</a></li>
700
701 <li><a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia (48)</a></li>
702
703 <li><a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software (15)</a></li>
704
705 <li><a href="http://www.hungry.com/~pere/blog/tags/noark5">noark5 (27)</a></li>
706
707 <li><a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk (326)</a></li>
708
709 <li><a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug (200)</a></li>
710
711 <li><a href="http://www.hungry.com/~pere/blog/tags/offentlig innsyn">offentlig innsyn (42)</a></li>
712
713 <li><a href="http://www.hungry.com/~pere/blog/tags/open311">open311 (2)</a></li>
714
715 <li><a href="http://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch (4)</a></li>
716
717 <li><a href="http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett (76)</a></li>
718
719 <li><a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern (114)</a></li>
720
721 <li><a href="http://www.hungry.com/~pere/blog/tags/raid">raid (4)</a></li>
722
723 <li><a href="http://www.hungry.com/~pere/blog/tags/reactos">reactos (1)</a></li>
724
725 <li><a href="http://www.hungry.com/~pere/blog/tags/reprap">reprap (11)</a></li>
726
727 <li><a href="http://www.hungry.com/~pere/blog/tags/rfid">rfid (3)</a></li>
728
729 <li><a href="http://www.hungry.com/~pere/blog/tags/robot">robot (17)</a></li>
730
731 <li><a href="http://www.hungry.com/~pere/blog/tags/rss">rss (1)</a></li>
732
733 <li><a href="http://www.hungry.com/~pere/blog/tags/ruter">ruter (7)</a></li>
734
735 <li><a href="http://www.hungry.com/~pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
736
737 <li><a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet (60)</a></li>
738
739 <li><a href="http://www.hungry.com/~pere/blog/tags/sitesummary">sitesummary (4)</a></li>
740
741 <li><a href="http://www.hungry.com/~pere/blog/tags/skepsis">skepsis (5)</a></li>
742
743 <li><a href="http://www.hungry.com/~pere/blog/tags/standard">standard (80)</a></li>
744
745 <li><a href="http://www.hungry.com/~pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
746
747 <li><a href="http://www.hungry.com/~pere/blog/tags/stortinget">stortinget (14)</a></li>
748
749 <li><a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance (65)</a></li>
750
751 <li><a href="http://www.hungry.com/~pere/blog/tags/sysadmin">sysadmin (6)</a></li>
752
753 <li><a href="http://www.hungry.com/~pere/blog/tags/usenix">usenix (2)</a></li>
754
755 <li><a href="http://www.hungry.com/~pere/blog/tags/valg">valg (9)</a></li>
756
757 <li><a href="http://www.hungry.com/~pere/blog/tags/verkidetfri">verkidetfri (23)</a></li>
758
759 <li><a href="http://www.hungry.com/~pere/blog/tags/video">video (82)</a></li>
760
761 <li><a href="http://www.hungry.com/~pere/blog/tags/vitenskap">vitenskap (4)</a></li>
762
763 <li><a href="http://www.hungry.com/~pere/blog/tags/web">web (42)</a></li>
764
765 </ul>
766
767
768 </div>
769 <p style="text-align: right">
770 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
771 </p>
772
773 </body>
774 </html>