Skip to content

Instantly share code, notes, and snippets.

@dloss
Last active August 29, 2015 14:03
Show Gist options
  • Save dloss/e8cf28b971a2876fa733 to your computer and use it in GitHub Desktop.
Save dloss/e8cf28b971a2876fa733 to your computer and use it in GitHub Desktop.
LibreSSL-RepoMining
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:215c6c58bef569b096dd01148ca66697f9fd4bb42ca9cbb85770370d1bff2c63"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"LibreSSL Repository Mining"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Dirk Loss / @dloss, v1.0, 2014-07-11"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The LibreSSL project has a git mirror of their CVS repository. Let's clone it and see if we can use it to answer some simple questions."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%time !git clone https://github.com/libressl-portable/openbsd.git"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Cloning into 'openbsd'...\r\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"remote: Counting objects: 46494, done.\u001b[K\r\n",
"remote: Compressing objects: 0% (1/8988) \u001b[K\r",
"remote: Compressing objects: 1% (90/8988) \u001b[K\r",
"remote: Compressing objects: 2% (180/8988) \u001b[K\r",
"remote: Compressing objects: 3% (270/8988) \u001b[K\r",
"remote: Compressing objects: 4% (360/8988) \u001b[K\r",
"remote: Compressing objects: 5% (450/8988) \u001b[K\r",
"remote: Compressing objects: 6% (540/8988) \u001b[K\r",
"remote: Compressing objects: 7% (630/8988) \u001b[K\r",
"remote: Compressing objects: 8% (720/8988) \u001b[K\r",
"remote: Compressing objects: 9% (809/8988) \u001b[K\r",
"remote: Compressing objects: 10% (899/8988) \u001b[K\r",
"remote: Compressing objects: 11% (989/8988) \u001b[K\r",
"remote: Compressing objects: 12% (1079/8988) \u001b[K\r",
"remote: Compressing objects: 13% (1169/8988) \u001b[K\r",
"remote: Compressing objects: 14% (1259/8988) \u001b[K\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"remote: Compressing objects: 15% (1349/8988) \u001b[K\r",
"remote: Compressing objects: 16% (1439/8988) \u001b[K\r",
"remote: Compressing objects: 17% (1528/8988) \u001b[K\r",
"remote: Compressing objects: 18% (1618/8988) \u001b[K\r",
"remote: Compressing objects: 19% (1708/8988) \u001b[K\r",
"remote: Compressing objects: 20% (1798/8988) \u001b[K\r",
"remote: Compressing objects: 21% (1888/8988) \u001b[K\r",
"remote: Compressing objects: 22% (1978/8988) \u001b[K\r",
"remote: Compressing objects: 23% (2068/8988) \u001b[K\r",
"remote: Compressing objects: 24% (2158/8988) \u001b[K\r",
"remote: Compressing objects: 25% (2247/8988) \u001b[K\r",
"remote: Compressing objects: 26% (2337/8988) \u001b[K\r",
"remote: Compressing objects: 27% (2427/8988) \u001b[K\r",
"remote: Compressing objects: 28% (2517/8988) \u001b[K\r",
"remote: Compressing objects: 29% (2607/8988) \u001b[K\r",
"remote: Compressing objects: 30% (2697/8988) \u001b[K\r",
"remote: Compressing objects: 31% (2787/8988) \u001b[K\r",
"remote: Compressing objects: 32% (2877/8988) \u001b[K\r",
"remote: Compressing objects: 33% (2967/8988) \u001b[K\r",
"remote: Compressing objects: 34% (3056/8988) \u001b[K\r",
"remote: Compressing objects: 35% (3146/8988) \u001b[K\r",
"remote: Compressing objects: 36% (3236/8988) \u001b[K\r",
"remote: Compressing objects: 37% (3326/8988) \u001b[K\r",
"remote: Compressing objects: 38% (3416/8988) \u001b[K\r",
"remote: Compressing objects: 39% (3506/8988) \u001b[K\r",
"remote: Compressing objects: 40% (3596/8988) \u001b[K\r",
"remote: Compressing objects: 41% (3686/8988) \u001b[K\r",
"remote: Compressing objects: 42% (3775/8988) \u001b[K\r",
"remote: Compressing objects: 43% (3865/8988) \u001b[K\r",
"remote: Compressing objects: 44% (3955/8988) \u001b[K\r",
"remote: Compressing objects: 45% (4045/8988) \u001b[K\r",
"remote: Compressing objects: 46% (4135/8988) \u001b[K\r",
"remote: Compressing objects: 47% (4225/8988) \u001b[K\r",
"remote: Compressing objects: 48% (4315/8988) \u001b[K\r",
"remote: Compressing objects: 49% (4405/8988) \u001b[K\r",
"remote: Compressing objects: 50% (4494/8988) \u001b[K\r",
"remote: Compressing objects: 51% (4584/8988) \u001b[K\r",
"remote: Compressing objects: 52% (4674/8988) \u001b[K\r",
"remote: Compressing objects: 53% (4764/8988) \u001b[K\r",
"remote: Compressing objects: 54% (4854/8988) \u001b[K\r",
"remote: Compressing objects: 55% (4944/8988) \u001b[K\r",
"remote: Compressing objects: 56% (5034/8988) \u001b[K\r",
"remote: Compressing objects: 57% (5124/8988) \u001b[K\r",
"remote: Compressing objects: 58% (5214/8988) \u001b[K\r",
"remote: Compressing objects: 59% (5303/8988) \u001b[K\r",
"remote: Compressing objects: 60% (5393/8988) \u001b[K\r",
"remote: Compressing objects: 61% (5483/8988) \u001b[K\r",
"remote: Compressing objects: 62% (5573/8988) \u001b[K\r",
"remote: Compressing objects: 63% (5663/8988) \u001b[K\r",
"remote: Compressing objects: 64% (5753/8988) \u001b[K\r",
"remote: Compressing objects: 65% (5843/8988) \u001b[K\r",
"remote: Compressing objects: 66% (5933/8988) \u001b[K\r",
"remote: Compressing objects: 67% (6022/8988) \u001b[K\r",
"remote: Compressing objects: 68% (6112/8988) \u001b[K\r",
"remote: Compressing objects: 69% (6202/8988) \u001b[K\r",
"remote: Compressing objects: 70% (6292/8988) \u001b[K\r",
"remote: Compressing objects: 71% (6382/8988) \u001b[K\r",
"remote: Compressing objects: 72% (6472/8988) \u001b[K\r",
"remote: Compressing objects: 73% (6562/8988) \u001b[K\r",
"remote: Compressing objects: 74% (6652/8988) \u001b[K\r",
"remote: Compressing objects: 75% (6741/8988) \u001b[K\r",
"remote: Compressing objects: 76% (6831/8988) \u001b[K\r",
"remote: Compressing objects: 77% (6921/8988) \u001b[K\r",
"remote: Compressing objects: 78% (7011/8988) \u001b[K\r",
"remote: Compressing objects: 79% (7101/8988) \u001b[K\r",
"remote: Compressing objects: 80% (7191/8988) \u001b[K\r",
"remote: Compressing objects: 81% (7281/8988) \u001b[K\r",
"remote: Compressing objects: 82% (7371/8988) \u001b[K\r",
"remote: Compressing objects: 83% (7461/8988) \u001b[K\r",
"remote: Compressing objects: 84% (7550/8988) \u001b[K\r",
"remote: Compressing objects: 85% (7640/8988) \u001b[K\r",
"remote: Compressing objects: 86% (7730/8988) \u001b[K\r",
"remote: Compressing objects: 87% (7820/8988) \u001b[K\r",
"remote: Compressing objects: 88% (7910/8988) \u001b[K\r",
"remote: Compressing objects: 89% (8000/8988) \u001b[K\r",
"remote: Compressing objects: 90% (8090/8988) \u001b[K\r",
"remote: Compressing objects: 91% (8180/8988) \u001b[K\r",
"remote: Compressing objects: 92% (8269/8988) \u001b[K\r",
"remote: Compressing objects: 93% (8359/8988) \u001b[K\r",
"remote: Compressing objects: 94% (8449/8988) \u001b[K\r",
"remote: Compressing objects: 95% (8539/8988) \u001b[K\r",
"remote: Compressing objects: 96% (8629/8988) \u001b[K\r",
"remote: Compressing objects: 97% (8719/8988) \u001b[K\r",
"remote: Compressing objects: 98% (8809/8988) \u001b[K\r",
"remote: Compressing objects: 99% (8899/8988) \u001b[K\r",
"remote: Compressing objects: 100% (8988/8988) \u001b[K\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"remote: Compressing objects: 100% (8988/8988), done.\u001b[K\r\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 0% (1/46494) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 1% (465/46494) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 2% (930/46494) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 3% (1395/46494), 204.00 KiB | 393.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 4% (1860/46494), 204.00 KiB | 393.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 4% (1891/46494), 380.00 KiB | 349.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 5% (2325/46494), 380.00 KiB | 349.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 6% (2790/46494), 380.00 KiB | 349.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 7% (3255/46494), 380.00 KiB | 349.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 8% (3720/46494), 692.00 KiB | 435.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 8% (4148/46494), 692.00 KiB | 435.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 9% (4185/46494), 692.00 KiB | 435.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 10% (4650/46494), 1.43 MiB | 563.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 10% (4814/46494), 1.43 MiB | 563.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 11% (5115/46494), 1.83 MiB | 602.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 12% (5580/46494), 2.22 MiB | 631.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 12% (5779/46494), 2.22 MiB | 631.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 13% (6045/46494), 2.63 MiB | 654.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 14% (6510/46494), 2.63 MiB | 654.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 14% (6899/46494), 3.03 MiB | 671.00 KiB/s \r",
"Receiving objects: 15% (6975/46494), 3.03 MiB | 671.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 16% (7440/46494), 3.44 MiB | 718.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 17% (7904/46494), 3.86 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 17% (8246/46494), 3.86 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 18% (8369/46494), 4.28 MiB | 808.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 19% (8834/46494), 4.28 MiB | 808.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 20% (9299/46494), 4.68 MiB | 813.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 20% (9374/46494), 4.68 MiB | 813.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 21% (9764/46494), 5.11 MiB | 823.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 22% (10229/46494), 5.53 MiB | 828.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 23% (10694/46494), 5.53 MiB | 828.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 23% (10767/46494), 5.53 MiB | 828.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 24% (11159/46494), 5.93 MiB | 829.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 25% (11624/46494), 6.15 MiB | 776.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 25% (11854/46494), 6.15 MiB | 776.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 26% (12089/46494), 6.15 MiB | 776.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 27% (12554/46494), 6.61 MiB | 788.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 28% (13019/46494), 6.61 MiB | 788.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 29% (13484/46494), 7.00 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 29% (13608/46494), 7.00 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 30% (13949/46494), 7.00 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 31% (14414/46494), 7.00 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 32% (14879/46494), 7.42 MiB | 783.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 33% (15344/46494), 7.42 MiB | 783.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 34% (15808/46494), 7.82 MiB | 780.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 34% (16243/46494), 7.82 MiB | 780.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 35% (16273/46494), 7.82 MiB | 780.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 36% (16738/46494), 7.82 MiB | 780.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 37% (17203/46494), 8.24 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 38% (17668/46494), 8.24 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 39% (18133/46494), 8.66 MiB | 782.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 39% (18314/46494), 8.66 MiB | 782.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 40% (18598/46494), 8.66 MiB | 782.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 41% (19063/46494), 8.66 MiB | 782.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 42% (19528/46494), 9.09 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 43% (19993/46494), 9.09 MiB | 784.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 44% (20458/46494), 9.49 MiB | 783.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 44% (20515/46494), 9.49 MiB | 783.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 45% (20923/46494), 9.49 MiB | 783.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 46% (21388/46494), 9.89 MiB | 837.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 47% (21853/46494), 9.89 MiB | 837.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 48% (22318/46494), 9.89 MiB | 837.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 49% (22783/46494), 10.29 MiB | 824.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 49% (22790/46494), 10.29 MiB | 824.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 50% (23247/46494), 10.29 MiB | 824.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 51% (23712/46494), 10.70 MiB | 830.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 51% (24076/46494), 11.10 MiB | 828.00 KiB/s \r",
"Receiving objects: 52% (24177/46494), 11.10 MiB | 828.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 53% (24642/46494), 11.10 MiB | 828.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 54% (25107/46494), 11.47 MiB | 820.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 55% (25572/46494), 11.86 MiB | 812.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 55% (25805/46494), 11.86 MiB | 812.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 56% (26037/46494), 11.86 MiB | 812.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 57% (26502/46494), 12.24 MiB | 803.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 58% (26967/46494), 12.62 MiB | 795.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 58% (27015/46494), 12.62 MiB | 795.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 59% (27432/46494), 13.00 MiB | 790.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 59% (27833/46494), 13.39 MiB | 785.00 KiB/s \r",
"Receiving objects: 60% (27897/46494), 13.39 MiB | 785.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 61% (28362/46494), 13.67 MiB | 756.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 61% (28628/46494), 13.97 MiB | 730.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 62% (28827/46494), 13.97 MiB | 730.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 63% (29292/46494), 14.29 MiB | 709.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 63% (29495/46494), 14.57 MiB | 692.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 64% (29757/46494), 14.89 MiB | 675.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 64% (29809/46494), 15.18 MiB | 658.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 65% (30222/46494), 15.46 MiB | 632.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 66% (30687/46494), 15.46 MiB | 632.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 67% (31151/46494), 15.46 MiB | 632.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 67% (31258/46494), 15.78 MiB | 616.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 68% (31616/46494), 15.78 MiB | 616.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 69% (32081/46494), 16.07 MiB | 594.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 69% (32512/46494), 16.07 MiB | 594.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 70% (32546/46494), 16.37 MiB | 603.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 71% (33011/46494), 16.67 MiB | 602.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 72% (33476/46494), 16.67 MiB | 602.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 72% (33721/46494), 16.67 MiB | 602.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 73% (33941/46494), 16.99 MiB | 603.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 74% (34406/46494), 16.99 MiB | 603.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 75% (34871/46494), 17.33 MiB | 615.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 75% (35268/46494), 17.33 MiB | 615.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 76% (35336/46494), 17.72 MiB | 632.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 77% (35801/46494), 17.72 MiB | 632.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 78% (36266/46494), 17.72 MiB | 632.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 79% (36731/46494), 17.72 MiB | 632.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 80% (37196/46494), 18.13 MiB | 656.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 81% (37661/46494), 18.13 MiB | 656.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 82% (38126/46494), 18.13 MiB | 656.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 82% (38174/46494), 18.13 MiB | 656.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 83% (38591/46494), 18.55 MiB | 689.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 84% (39055/46494), 18.55 MiB | 689.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 85% (39520/46494), 18.91 MiB | 702.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 85% (39891/46494), 18.91 MiB | 702.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 86% (39985/46494), 19.12 MiB | 685.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 87% (40450/46494), 19.12 MiB | 685.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 88% (40915/46494), 19.12 MiB | 685.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 89% (41380/46494), 19.54 MiB | 711.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 90% (41845/46494), 19.54 MiB | 711.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 90% (42231/46494), 19.54 MiB | 711.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 91% (42310/46494), 19.96 MiB | 739.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 92% (42775/46494), 19.96 MiB | 739.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 93% (43240/46494), 19.96 MiB | 739.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 94% (43705/46494), 20.36 MiB | 758.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 95% (44170/46494), 20.36 MiB | 758.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 95% (44502/46494), 20.36 MiB | 758.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 96% (44635/46494), 20.36 MiB | 758.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 97% (45100/46494), 20.74 MiB | 762.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 98% (45565/46494), 20.74 MiB | 762.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Receiving objects: 99% (46030/46494), 21.14 MiB | 766.00 KiB/s \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"remote: Total 46494 (delta 33293), reused 46490 (delta 33289)\u001b[K\r\n",
"Receiving objects: 100% (46494/46494), 21.14 MiB | 766.00 KiB/s \r",
"Receiving objects: 100% (46494/46494), 21.28 MiB | 759.00 KiB/s, done.\r\n",
"Resolving deltas: 0% (0/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 1% (343/33293) \r",
"Resolving deltas: 2% (692/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 3% (1003/33293) \r",
"Resolving deltas: 4% (1346/33293) \r",
"Resolving deltas: 5% (1667/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 6% (1999/33293) \r",
"Resolving deltas: 7% (2348/33293) \r",
"Resolving deltas: 8% (2672/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 9% (3002/33293) \r",
"Resolving deltas: 10% (3332/33293) \r",
"Resolving deltas: 11% (3677/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 12% (4008/33293) \r",
"Resolving deltas: 13% (4341/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 14% (4670/33293) \r",
"Resolving deltas: 15% (5011/33293) \r",
"Resolving deltas: 16% (5335/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 17% (5673/33293) \r",
"Resolving deltas: 18% (5995/33293) \r",
"Resolving deltas: 19% (6338/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 20% (6659/33293) \r",
"Resolving deltas: 21% (6999/33293) \r",
"Resolving deltas: 22% (7327/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 23% (7660/33293) \r",
"Resolving deltas: 24% (7997/33293) \r",
"Resolving deltas: 25% (8331/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 26% (8670/33293) \r",
"Resolving deltas: 27% (8992/33293) \r",
"Resolving deltas: 28% (9326/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 29% (9665/33293) \r",
"Resolving deltas: 30% (9993/33293) \r",
"Resolving deltas: 31% (10328/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 32% (10655/33293) \r",
"Resolving deltas: 33% (10987/33293) \r",
"Resolving deltas: 34% (11324/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 35% (11739/33293) \r",
"Resolving deltas: 36% (12000/33293) \r",
"Resolving deltas: 37% (12326/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 38% (12652/33293) \r",
"Resolving deltas: 39% (13008/33293) \r",
"Resolving deltas: 40% (13326/33293) \r",
"Resolving deltas: 41% (13658/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 42% (13989/33293) \r",
"Resolving deltas: 43% (14329/33293) \r",
"Resolving deltas: 44% (14665/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 45% (14982/33293) \r",
"Resolving deltas: 46% (15315/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 47% (15664/33293) \r",
"Resolving deltas: 48% (15995/33293) \r",
"Resolving deltas: 49% (16318/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 50% (16659/33293) \r",
"Resolving deltas: 51% (16992/33293) \r",
"Resolving deltas: 52% (17317/33293) \r",
"Resolving deltas: 53% (17646/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 54% (17985/33293) \r",
"Resolving deltas: 55% (18320/33293) \r",
"Resolving deltas: 56% (18647/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 57% (18995/33293) \r",
"Resolving deltas: 57% (19226/33293) \r",
"Resolving deltas: 58% (19314/33293) \r",
"Resolving deltas: 59% (19644/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 60% (19976/33293) \r",
"Resolving deltas: 61% (20312/33293) \r",
"Resolving deltas: 62% (20646/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 63% (20983/33293) \r",
"Resolving deltas: 64% (21319/33293) \r",
"Resolving deltas: 65% (21641/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 66% (21984/33293) \r",
"Resolving deltas: 67% (22322/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 68% (22641/33293) \r",
"Resolving deltas: 69% (22978/33293) \r",
"Resolving deltas: 70% (23316/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 71% (23641/33293) \r",
"Resolving deltas: 72% (23980/33293) \r",
"Resolving deltas: 73% (24305/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 74% (24638/33293) \r",
"Resolving deltas: 75% (24976/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 76% (25319/33293) \r",
"Resolving deltas: 77% (25636/33293) \r",
"Resolving deltas: 78% (25979/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 79% (26305/33293) \r",
"Resolving deltas: 80% (26636/33293) \r",
"Resolving deltas: 81% (26981/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 82% (27316/33293) \r",
"Resolving deltas: 83% (27641/33293) \r",
"Resolving deltas: 84% (27970/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 85% (28312/33293) \r",
"Resolving deltas: 86% (28639/33293) \r",
"Resolving deltas: 87% (28969/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 88% (29298/33293) \r",
"Resolving deltas: 89% (29639/33293) \r",
"Resolving deltas: 90% (29979/33293) \r",
"Resolving deltas: 91% (30301/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 92% (30634/33293) \r",
"Resolving deltas: 93% (30964/33293) \r",
"Resolving deltas: 94% (31296/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 95% (31636/33293) \r",
"Resolving deltas: 96% (31971/33293) \r",
"Resolving deltas: 97% (32297/33293) \r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Resolving deltas: 98% (32636/33293) \r",
"Resolving deltas: 99% (32976/33293) \r",
"Resolving deltas: 100% (33293/33293) \r",
"Resolving deltas: 100% (33293/33293), done.\r\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Checking connectivity... done.\r\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"CPU times: user 259 ms, sys: 80 ms, total: 339 ms\n",
"Wall time: 34.3 s\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cd openbsd/"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"/Users/dirk/projekte/repo-libressl/openbsd\n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!git log --reverse | head -10"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"commit dcac718930cb87c958bb05ea34b0ef6284f5e10b\r\n",
"Author: deraadt <>\r\n",
"Date: Wed Oct 18 08:42:23 1995 +0000\r\n",
"\r\n",
" initial import of NetBSD tree\r\n",
"\r\n",
"commit bf056200690ad2990feba19909f02f57687666fb\r\n",
"Author: deraadt <>\r\n",
"Date: Wed Oct 18 08:49:34 1995 +0000\r\n",
"\r\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!git log -1"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\u001b[33mcommit ea6dfc7cc887f405dc17af99e705e3082ea177e9\u001b[m\r\n",
"Author: beck <>\r\n",
"Date: Fri Jul 11 17:18:11 2014 +0000\r\n",
"\r\n",
" formatting\r\n",
" ok bcook@\r\n"
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So we have commits from 1995 to today. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!git log --oneline | wc -l"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 3002\r\n"
]
}
],
"prompt_number": 5
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"How large is the code base?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First let's see how much space the current checkout (excluding the .git repo) takes:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!du -hs -I\\.git"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 19M\t.\r\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For a deeper analysis, we use [CLOC](http://cloc.sourceforge.net/). Compared with [SLOCCount](http://www.dwheeler.com/sloccount/) it has nicer output, and is well maintained."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!cloc ."
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 100 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 200 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 300 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 400 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 500 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 600 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 700 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 800 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 900 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1000 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1100 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1200 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1300 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1400 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1500 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1600 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1700 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1800 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1900 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 1933 text files.\r\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"classified 1918 files\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Duplicate file check 1918 files (1725 known unique)\r",
"Unique: 100 files \r",
"Unique: 200 files \r",
"Unique: 300 files \r",
"Unique: 400 files \r",
"Unique: 500 files \r",
"Unique: 600 files \r",
"Unique: 700 files \r",
"Unique: 800 files \r",
"Unique: 900 files \r",
"Unique: 1000 files \r",
"Unique: 1100 files \r",
"Unique: 1200 files \r",
"Unique: 1300 files \r",
"Unique: 1400 files \r",
"Unique: 1500 files \r",
"Unique: 1600 files \r",
"Unique: 1700 files \r",
" 1865 unique files. \r\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 100\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 200\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 300\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 400\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 500\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 600\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 700\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 800\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 900\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 1000\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 1100\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 1200\r",
"Counting: 1300\r",
"Counting: 1400\r",
"Counting: 1500\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 1600\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 1700\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Counting: 1800\r"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
" 595 files ignored.\r\n",
"\r\n",
"http://cloc.sourceforge.net v 1.60 T=15.03 s (88.2 files/s, 28688.5 lines/s)\r\n",
"-------------------------------------------------------------------------------\r\n",
"Language files blank comment code\r\n",
"-------------------------------------------------------------------------------\r\n",
"C 939 28728 63620 200170\r\n",
"Perl 116 7275 6966 60669\r\n",
"C/C++ Header 138 4781 11844 26481\r\n",
"Assembly 13 1223 1350 9027\r\n",
"Bourne Shell 25 481 406 2901\r\n",
"make 90 376 217 2331\r\n",
"m4 1 514 0 1585\r\n",
"C++ 3 24 48 55\r\n",
"-------------------------------------------------------------------------------\r\n",
"SUM: 1325 43402 84451 303219\r\n",
"-------------------------------------------------------------------------------\r\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Who contributed?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I'll save the commit authors and timestamps as a CSV file, that can be imported and analysed using the excellent [pandas](http://pandas.pydata.org/) library:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"!git log --format=format:\"%ai,%an,%H\" > ../commits"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cd .."
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"/Users/dirk/projekte/repo-libressl\n"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pandas as pd"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df=pd.read_csv(\"commits\", header=None, names=[\"time\", \"author\", \"id\"], index_col=\"time\", parse_dates=True)\n",
"df.sort(ascending=True, inplace=True)\n",
"df.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>author</th>\n",
" <th>id</th>\n",
" </tr>\n",
" <tr>\n",
" <th>time</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1995-10-18 08:42:23</th>\n",
" <td> deraadt</td>\n",
" <td> dcac718930cb87c958bb05ea34b0ef6284f5e10b</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995-10-18 08:49:34</th>\n",
" <td> deraadt</td>\n",
" <td> bf056200690ad2990feba19909f02f57687666fb</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995-11-01 16:43:27</th>\n",
" <td> deraadt</td>\n",
" <td> cb274af2d57ba262232e24a6b348a75e4ddf39c3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995-12-14 02:16:48</th>\n",
" <td> deraadt</td>\n",
" <td> 8eb715a636f0c8677814890f93cd9fbd1dc2d0cb</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1995-12-15 01:46:48</th>\n",
" <td> deraadt</td>\n",
" <td> 0e76731307f064af3c9f5201066a17f720f5935d</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
" author id\n",
"time \n",
"1995-10-18 08:42:23 deraadt dcac718930cb87c958bb05ea34b0ef6284f5e10b\n",
"1995-10-18 08:49:34 deraadt bf056200690ad2990feba19909f02f57687666fb\n",
"1995-11-01 16:43:27 deraadt cb274af2d57ba262232e24a6b348a75e4ddf39c3\n",
"1995-12-14 02:16:48 deraadt 8eb715a636f0c8677814890f93cd9fbd1dc2d0cb\n",
"1995-12-15 01:46:48 deraadt 0e76731307f064af3c9f5201066a17f720f5935d"
]
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We are only interested in the commits since the OpenSSL valhalla rampage started. That was in April 2014:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df = df[\"2014-04-01\":]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pandas provides a convenience function that shows how often each value occurs in a given column:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"commits_per_author=df.author.value_counts()\n",
"commits_per_author"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": [
"jsing 384\n",
"miod 265\n",
"tedu 201\n",
"deraadt 141\n",
"beck 80\n",
"guenther 33\n",
"bcook 21\n",
"matthew 18\n",
"jsg 17\n",
"reyk 16\n",
"logan 14\n",
"sthen 11\n",
"jim 8\n",
"otto 8\n",
"mpi 6\n",
"lteo 6\n",
"jmc 5\n",
"afresh1 4\n",
"giovanni 4\n",
"mcbride 4\n",
"tobiasu 2\n",
"schwarze 2\n",
"chl 2\n",
"jca 2\n",
"djm 2\n",
"kettenis 2\n",
"espie 1\n",
"millert 1\n",
"avsm 1\n",
"naddy 1\n",
"halex 1\n",
"dtype: int64"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's visualize the commit counts with [Matplotlib](http://matplotlib.org/). But first import [seaborn](http://www.stanford.edu/~mwaskom/software/seaborn/), which gives us much prettier graphics:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import seaborn as sns"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"commits_per_author.plot(kind=\"bar\", figsize=(10,6))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 16,
"text": [
"<matplotlib.axes.AxesSubplot at 0x10962ec10>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nJEmSNBj+PxnfuhhyU8XSAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x10962e590>"
]
}
],
"prompt_number": 16
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Has development speed increased or slowed down over time?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Introduce counter:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df[\"c\"]=1 # counter\n",
"commits_over_time=df.c.cumsum().plot()\n",
"commits_over_time"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 17,
"text": [
"<matplotlib.axes.AxesSubplot at 0x10979ff10>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n3bXesxgrAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x1097424d0>"
]
}
],
"prompt_number": 17
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Has the number of authors increased or decreased over time?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"authors = commits_per_author.index\n",
"timelines=pd.DataFrame(index=df.index)\n",
"for author in authors:\n",
" timelines[author]=df.c.where(df.author==author)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"default_palette = sns.color_palette()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"top = 10\n",
"sns.set_palette(\"Set1\", top)\n",
"top_authors=authors[:top]\n",
"timelines[top_authors].cumsum().plot(style=\"o\",figsize=(20,10), title=\"Commit activity of the Top%s authors to LibreSSL\" % top)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 20,
"text": [
"<matplotlib.axes.AxesSubplot at 0x1098972d0>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x109bc27d0>"
]
}
],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sns.set_palette(default_palette)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 21
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's see how many authors where active together, e.g. during a 3 month period:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"per_months=timelines.resample(\"1D\", how=\"sum\")\n",
"per_months[\"nauthors\"]=per_months.applymap(lambda x: min(x, 1)).sum(axis=1)\n",
"per_months[\"nauthors\"].plot(kind=\"bar\", figsize=(20,5))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 22,
"text": [
"<matplotlib.axes.AxesSubplot at 0x10a248350>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAABHwAAAGdCAYAAABgqGSvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X+U5HdV5//XTE8ITGbSDsWMSgQmyeaCLis/lCgJJyQS\nQVcMS1iPGjEECCTCeoajhp9LdllWfmzklwsLWRcFYVUgCRoXghEIhPzYZYG4ke+i1zh2NiKQsboz\nmXESMunM94+q7qmp/lR1farr03Xft5+PcziZrnl1zavr86nb3ZfqT0sAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENqm1QJm9mOS3ubu55jZkyX9tqRFSd+VdKG7\n391wRwAAAAAAANSwedhfmtmrJf2OpOO7N71b0r9x93MkXSPpNc3WAwAAAAAAQF1DFz6S7pB0vo6+\nEugX3P327p+Pk3RfU8UAAAAAAAAwnqELH3e/RtKDPW9/W5LM7AxJr5T0rkbbAQAAAAAAoLbVXuGz\ngpn9vKT3S/qX7t6efCUAAAAAAACsxZY6YTN7oaSXSzrb3RdGeZ/Dhx88smXLzDjdAAAAAAAAUGHT\npk1DfxHXKL+la7ekP5D0DEn7JN0paX/3r7/o7v9+2Pvfffe9R0YpKkk7d27Xvn0HUmaj9MicjdKj\ntGyUHpmzUXqUlo3SI3M2So/M2Sg9SstG6ZE5G6VHadkoPTJno/QoLRulR+ZslB692V27Thy601n1\nFT7uPifpjO6brZEaAAAAAAAAYGpqX8MHAAAAAAAAsbHwAQAAAAAASIaFDwAAAAAAQDIsfAAAAAAA\nAJJh4QMAAAAAAJAMCx8AAAAAAIBkWPgAAAAAAAAkw8IHAAAAAAAgGRY+AAAAAAAAybDwAQAAAAAA\nSIaFDwAAAAAAQDIsfAAAAAAAAJJh4QMAAAAAAJAMCx8AAAAAAIBkWPgAAAAAAAAkw8IHAAAAAAAg\nGRY+AAAAAAAAybDwAQAAAAAASIaFDwAAAAAAQDJbpl0AWIvFxUXNze1dfnthYZvm5w9q9+5TNDMz\nM1JWUmUeAAAAAIBSsfBB0ebm9mrPFddq6+yu5dsO7b9b77nsPJ166mmrZoflAQAAAAAoFQsfFG/r\n7C5t23HSxLMAAAAAAJSKa/gAAAAAAAAkw8IHAAAAAAAgGRY+AAAAAAAAybDwAQAAAAAASIaFDwAA\nAAAAQDIsfAAAAAAAAJJh4QMAAAAAAJAMCx8AAAAAAIBkWPgAAAAAAAAkw8IHAAAAAAAgGRY+AAAA\nAAAAybDwAQAAAAAASIaFDwAAAAAAQDIsfAAAAAAAAJJh4QMAAAAAAJAMCx8AAAAAAIBkWPgAAAAA\nAAAks2W1gJn9mKS3ufs5ZvbPJH1I0kOSvi7ple5+pNmKAAAAAAAAqGPoK3zM7NWSfkfS8d2b3inp\n9e5+lqRNkp7XbD0AAAAAAADUtdqPdN0h6Xx1ljuS9FR3v7H75+skndtUMQAAAAAAAIxn6MLH3a+R\n9GDPTZt6/nxQ0mwTpQAAAAAAADC+TasFzGy3pD9096eb2V3u/pju7c+TdK67/+qw9z98+MEjW7bM\nTKQs0M/ddcnbPqttO05avu3gwjd15WvPlZmtmh2WBwAAAAAgqk2bNg3d6ax60eY+t5nZM939i5J+\nWtLnVnuHhYVDI9/5zp3btW/fgZTZKD2yZefnDw68vf/9BmUH5ev0KDkbpUfmbJQepWWj9MicjdIj\nczZKj9KyUXpkzkbpUVo2So/M2Sg9SstG6ZE5G6VHneyoC5+l38T165J+x8weJun/SrpqxPcHAAAA\nAADAOll14ePuc5LO6P75bySd3WwlAAAAAAAArMVqv6ULAAAAAAAAhWHhAwAAAAAAkAwLHwAAAAAA\ngGRY+AAAAAAAACTDwgcAAAAAACAZFj4AAAAAAADJsPABAAAAAABIhoUPAAAAAABAMix8AAAAAAAA\nkmHhAwAAAAAAkAwLHwAAAAAAgGRY+AAAAAAAACTDwgcAAAAAACAZFj4AAAAAAADJsPABAAAAAABI\nhoUPAAAAAABAMix8AAAAAAAAkmHhAwAAAAAAkMyWaRfAxrC4uKi5ub2SpIWFbZqfPyhJ2r37FM3M\nzEyzGgAAAAAA6bDwwbqYm9urPVdcq62zu5ZvO7T/br3nsvN06qmnTbEZAAAAAAD5sPDButk6u0vb\ndpw07RoAAAAAAKTHNXwAAAAAAACSYeEDAAAAAACQDAsfAAAAAACAZFj4AAAAAAAAJMPCBwAAAAAA\nIBkWPgAAAAAAAMmw8AEAAAAAAEiGhQ8AAAAAAEAyLHwAAAAAAACSYeEDAAAAAACQDAsfAAAAAACA\nZFj4AAAAAAAAJMPCBwAAAAAAIBkWPgAAAAAAAMmw8AEAAAAAAEiGhQ8AAAAAAEAyLHwAAAAAAACS\n2VL3Hcxss6T/JskkPSTpZe7+15MuBgAAAAAAgPGM8wqfZ0s6wd2fIek/SPrNyVYCAAAAAADAWoyz\n8LlP0qyZbZI0K+mByVYCAAAAAADAWtT+kS5JN0t6uKS/ktSS9LMTbQQAAAAAAIA1GWfh82pJN7v7\nG8zsByR93sye6O680gdpLC4uam5u7/LbCwvbND9/UJK0e/cpmpmZmVY1AAAAAMAGMex709VsqvuP\nmdlvSrrX3d9uZidI+rqkH3L3+6ryhw8/eGTLFr453ujcXZe87bPatuOk5dsOLnxTV772XJnZutxv\nVXZQ3t31y6/7A22d3XVM9tD+u/WRt16wps4AAAAAAIxi2PemX77mTUN3OuO8wucKSb9nZl+SdJyk\n1w1a9kjSwsKhke94587t2rfvQMpslB7Tyg7aQM7PHxz6fpO832Fb0P78/PxBbZ3dtWI5NInO0bJR\nemTORulRWjZKj8zZKD0yZ6P0KC0bpUfmbJQepWWj9MicjdKjtGyUHpmz0+ox7HvT1dRe+Lj7PZKe\nX/tfAgAAAAAAwLoY57d0AQAAAAAAIDAWPgAAAAAAAMmw8AEAAAAAAEiGhQ8AAAAAAEAyLHwAAAAA\nAACSYeEDAAAAAACQDAsfAAAAAACAZFj4AAAAAAAAJMPCBwAAAAAAIBkWPgAAAAAAAMmw8AEAAAAA\nAEiGhQ8AAAAAAEAyLHwAAAAAAACSYeEDAAAAAACQDAsfAAAAAACAZFj4AAAAAAAAJMPCBwAAAAAA\nIBkWPgAAAAAAAMmw8AEAAAAAAEhmy7QLAP0WFxc1N7dXkrSwsE3z8wclSbt3n6KZmZlpVtuQeo+H\ndPSYcDwAAAAAoCPi900sfBDO3Nxe7bniWm2d3bV826H9d+s9l52nU089bYrNNiaOBwAAAAAMF/H7\nJhY+CGnr7C5t23HStGugi+MBAAAAAMNF+76Ja/gAAAAAAAAkw8IHAAAAAAAgGRY+AAAAAAAAybDw\nAQAAAAAASIaFDwAAAAAAQDIsfAAAAAAAAJJh4QMAAAAAAJAMCx8AAAAAAIBkWPgAAAAAAAAkw8IH\nAAAAAAAgGRY+AAAAAAAAybDwAQAAAAAASIaFDwAAAAAAQDIsfAAAAAAAAJJh4QMAAAAAAJAMCx8A\nAAAAAIBkWPgAAAAAAAAks2WcdzKz10n6WUnHSXqvu394oq0AAAAAAAAwttqv8DGzsyU93d3PkHS2\npFMm3AkAAAAAAABrMM4rfJ4t6S/N7I8lnSjpsslWAgAAAAAAwFqMs/DZKekxkp6rzqt7rpX0hEmW\nQnyLi4uam9u7/PbCwjbNzx+UJO3efYpmZmamVW3d1Xksojxug3pstGOH9dF7vm3kWQEAQOn4nA6U\nZZyFzz9K+oa7PyjJzex+M3uUu/9jVXjHjq3asmX0J//OndvTZqP0mETW3bXnimu1dXbXMbcf2n+3\nPvLWC2Rmx9y+sLCt8n4e+chtK/6N9c5W5etk6zwWdR+3fpM6zlU9JnHs6vbYSNkoPaaRrXO+NdmD\nbOwembNRepSWjdIjczZKj9KyUXqU9jmdx7j5bJQembPD8k193zTse9PVjLPwuUnSHknvNLNHSzpB\nUntQeGHh0Mh3vHPndu3bdyBlNkqPSWXn5w9q6+wubdtxUuXf9b/f0vY/YrYqXzc76mNR93HrNcnj\nPKjHWh/jJjuXnI3SY1rZOudbkz3Ixu2RORulR2nZKD0yZ6P0KC0bpUdpn9N5jJvPRumRObtavqnv\nm4Z9b7qa2hdtdvdPSbrNzL6szo9zvcLdj4zdAAAAAAAAABM11q9ld/fXTLoIAAAAAAAAJqP2K3wA\nAAAAAAAQGwsfAAAAAACAZFj4AAAAAAAAJMPCBwAAAAAAIBkWPgAAAAAAAMmw8AEAAAAAAEiGhQ8A\nAAAAAEAyLHwAAAAAAACSYeEDAAAAAACQDAsfAAAAAACAZFj4AAAAAAAAJMPCBwAAAAAAIBkWPgAA\nAAAAAMmw8AEAAAAAAEiGhQ8AAAAAAEAyLHwAAAAAAACSYeEDAAAAAACQDAsfAAAAAACAZLZMuwCA\naouLi5qb27v89sLCNs3PH5Qk7d59imZmZgbmV8sCwKTVnVlAv0Hn0Gqf81bLAhiM2Q0M19Tnm/V6\n7rHwAYKam9urPVdcq62zu465/dD+u/Wey87Tqaeetmp+UBYAJq3uzAL61fk8xuc8YDKY3cBwTX2+\nWa/nHgsfILCts7u0bcdJjeUBYJKYQVirOucQ5xswGTyXgOGaeo6sx3OPa/gAAAAAAAAkw8IHAAAA\nAAAgGRY+AAAAAAAAybDwAQAAAAAASIaFDwAAAAAAQDIsfAAAAAAAAJJh4QMAAAAAAJAMCx8AAAAA\nAIBkWPgAAAAAAAAkw8IHAAAAAAAgGRY+AAAAAAAAybDwAQAAAAAASIaFDwAAAAAAQDIsfAAAAAAA\nAJJh4QMAAAAAAJAMCx8AAAAAAIBkWPgAAAAAAAAks2XcdzSzXZK+KulZ7u6TqwQAAAAAAIC1GOsV\nPmZ2nKQrJf3TZOsAAAAAAABgrcb9ka4rJL1f0rcm2AUAAAAAAAATUHvhY2YXSdrn7td3b9o00UYA\nAAAAAABYk3Gu4fNiSUfM7FxJT5b0YTN7nrt/Z7LVAKBci4uLmpvbu/z2wsI2zc8f1O7dp2hmZmaq\nHSSta486Ijxu2dV5jLMfj96Pb1rPjzrP06ayTfXtz5fwGKNcHGcAWKn2wsfdn7n0ZzO7QdIlw5Y9\nO3Zs1ZYtow/YnTu3p81G6TGJ7MLCtoHv88hHblvxfoPyEbJV+dKyw/Lrma0S+TxuMuvu2nPFtdo6\nu2v5tkP779ZH3nqBzGxdelR1qNNjUo9FnXMowuOWPVvnMa6TrTuz6nRuKruW821Sn//rPE+byjbV\nd1C+7jm01s9NUWZhxGyUHqV9zqubj5xt8uvNUTtMIk82Vo9M2ejfm65m7N/SNaqFhUMjZ3fu3K59\n+w6kzEbpMans0v9jMujv+t9vUD5CtipfWnZYfj2z/aKfx01m5+cPauvsLm3bcdKK29frcRvUYZQe\nk34sBt1edb5N+3HLnq3zGNfNDvs31+t8q5Md93yb5Of/Os/TprJN9R2WX+/PYxFmYbRslB6lfc6r\nm4+ebfLrzVE7rDVPNlaPbNno35uuZk0LH3c/Zy3vDwAAAAAAgMkb97d0AQAAAAAAICgWPgAAAAAA\nAMmw8AEAAAAAAEiGhQ8AAAAAAEAyLHwAAAAAAACSYeEDAAAAAACQDAsfAAAAAACAZFj4AAAAAAAA\nJMPCBwAAAAAAIBkWPgAAAAAAAMmw8AEAAAAAAEiGhQ8AAAAAAEAyLHwAAAAAAACSYeEDAAAAAACQ\nDAsfAAAAAACAZFj4AAAAAAAAJMPCBwAAAAAAIBkWPgAAAAAAAMmw8AEAAAAAAEhmy7QLANiYFhcX\nNTe3d/nthYVtmp8/KEnavfsUzczMjJVdr86T7DDo46u636YeiyiPMTaGEs+3Os//Os9plCvKedzU\n56ZxO6zWo/TP/709InSQcszNce+3976jft1Ut0OE5zTyYOEDYCrm5vZqzxXXauvsrmNuP7T/br3n\nsvN06qmnjZVd786T6FDnfpt6LKI8xtgYSjzf1vo8jfyxYTxRzuMI51tTn9N5jId3mEaPOvi6abwO\nEc435MHCB8DUbJ3dpW07Tpp4tklN9YjwWER5jLExlHi+RXieIpYoxzlCj6aeHxE+tig9InSoK8LX\nLCV2KPFYIyau4QMAAAAAAJAMCx8AAAAAAIBkWPgAAAAAAAAkw8IHAAAAAAAgGRY+AAAAAAAAybDw\nAQAAAAAASIaFDwAAAAAAQDIsfAAAAAAAAJJh4QMAAAAAAJAMCx8AAAAAAIBkWPgAAAAAAAAkw8IH\nAAAAAAAgGRY+AAAAAAAAybDwAQAAAAAASIaFDwAAAAAAQDIsfAAAAAAAAJJh4QMAAAAAAJDMlrrv\nYGbHSfpdSY+TdLyk/+jufzrpYgAAAAAAABjPOK/w+SVJ+9z9LEk/Jem9k60EAAAAAACAtaj9Ch9J\nn5B0VffPmyU9OLk6AAAAAAAAWKvaCx93/ydJMrPt6ix/3jDuP764uKi5ub3Lby8sbNP8/EFJ0u7d\np2hmZmbcu25Mb+dJ9h30WFTdb4mPGzaGCOdmhA7ZRXmMI8zNJh+LOp9vmvrcFEGU8w3IIMLcxFEl\nfm5qSp1zE80r8RxCtXFe4SMze4ykayS9z93/aFh2x46t2rKl+oRwd+254lptnd11zO2H9t+tj7z1\nApnZ0B47d24fufOkslWdR+077L7r3G+Ex21hYdvA93nkI7eteL9B+QjZqnxp2WH59czWOTebeiya\nfH5EeIwjnG91H+P1PN/We242eb6t9eNb7+MR5Xzrx3N6tB79Nurn/yqTeixGvd+62QhzM8J53OTx\nqPMY17nvph7jpu53WH49P6eX9vxv8jGuMonZEuH7zSjZCJ+bhmVXM85Fm79X0vWSXuHuN6yWX1g4\nNPDv5ucPauvsLm3bcVLl3+3bd2Dg++7cuX3o3zeVHdR5tb6r3Xed+43wuC1teAf9XVXnqNmqfGnZ\nYfn1zo56bjb5uDX1/IjyGA/rF/ExXu/zbT3nZtPn21o/viznJs/pZrP9NvLn/36TfCxGvd+62Qhz\nM8J53OTxqPMY17nvJh/jJu53WH69P6evtcOgfK9JPf+bfIz7TfJ7vWl/vxklG+Fz07DsasZ5hc/r\nJc1KutzMLu/e9tPufv/YLQAAAAAAADAx41zDZ4+kPQ10AQAAAAAAwASM82vZAQAAAAAAEBgLHwAA\nAAAAgGRY+AAAAAAAACTDwgcAAAAAACAZFj4AAAAAAADJsPABAAAAAABIhoUPAAAAAABAMix8AAAA\nAAAAkmHhAwAAAAAAkAwLHwAAAAAAgGRY+AAAAAAAACTDwgcAAAAAACAZFj4AAAAAAADJsPABAAAA\nAABIhoUPAAAAAABAMix8AAAAAAAAkmHhAwAAAAAAkAwLHwAAAAAAgGS2TLtAZouLi5qb27v89sLC\nNs3PH9Tu3adoZmZmqh0krWsPIKre5wjPD0jMzZJx7MbD43ZUU49F3fvlc1PzeIzRr8RZWOf7zaa+\nNy3xcdtIWPg0aG5ur/Zcca22zu5avu3Q/rv1nsvO06mnnja1DtPoAUQV4XmKWJib5eLYjYfH7aim\nHou698vnpubxGKNfibOwznnc1Dlf4uO2kbDwadjW2V3atuOkDd8BiIznCPpxTpSLYzceHrejmnos\n6t4vx6R5PMboV+I5UadzlPmG9cM1fAAAAAAAAJJh4QMAAAAAAJAMCx8AAAAAAIBkWPgAAAAAAAAk\nw8IHAAAAAAAgGRY+AAAAAAAAybDwAQAAAAAASIaFDwAAAAAAQDIsfAAAAAAAAJJh4QMAAAAAAJAM\nCx8AAAAAAIBkWPgAAAAAAAAkw8IHAAAAAAAgGRY+AAAAAAAAybDwAQAAAAAASIaFDwAAAAAAQDIs\nfAAAAAAAAJLZUvcdzGyzpP8i6YclfVfSxe7+t5MuBgAAAAAAgPGM8wqffyXpYe5+hqTXSnrHZCsB\nAAAAAABgLcZZ+Jwp6TOS5O7/S9KPTrQRAAAAAAAA1mSchc+Jku7teXux+2NeAAAAAAAACKD2NXzU\nWfZs73l7s7s/NCj8Iz/yxMrbv/rVr0uSDu2/+5jbb/3EG3XkoUU9/7qtOu6441bk697/pPOHDx/W\n/L2HdMbPv2X5tt6PoTe/lN20eUZP/7k3r8j25nuzkvT0n3vziuxSvj87LP/85z93RVaSnvTsX131\n4928eZMeeuiIpOrH59D+u3XrJ954zG1Lx+722/961Xzvce6//6WPZSnff0705ns/7tXOn1HPt49/\n/JOVj+ctH3v9iuzhw4f12DNeXvnxPv/5z12R7T9/enutdv70fwzTOt8GnT91z7dbPvb6FdkjDy1K\nL//8imyd863//OnNTvN8qzp/pOrzrer8kWKcb1XnT9XHO43zbdD5I8U535bs3r17ecb2in6+VZ0/\nS9lpn291Pj+u9/lW5/PjsHyd863//OnPSs1+fhyUb+p8q/P5cVC+qfOt7ufH9Tzf6nx+HJaf9vlW\n5/PjoPwkzrdeq31/EeV8q/P5sSrP1//Hfgxr+XpsUD7C1//T+H6zN9+bXS3fnx2Wj/T12KD8sPNt\n4szsfDP7ve6ff9zMPjX5fwUAAAAAAADjGucVPp+U9JNmdnP37RdPsA8AAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwdpum+Y+bWUvSrKR73H1+knmykpntknRWN7sg6VZ3/1bk\nztmzUXqUlo3SI3M2So9pZ5mb8bJRepSWjdIjczZKj5KyzNj1yUbpkTkbpUdp2Sg9SsqOMzd7TWXh\nY2ZPk/Q+dX4t/AFJ2yVtlvQKd79lLXmyy9mLJb1c0k092bMkfdDd368+QTqnzUbpUVo2So/M2Sg9\ngmSZm4GyUXqUlo3SI3M2So8Cs8zYhrNRemTORulRWjZKjwKzteZmlS2jhBrwbkkvcPe7lm4ws8dK\nukrS6WvMk+14iaQz3f1wT/Zhkm6RVHVyROicORulR2nZKD0yZ6P0iJBlbsbKRulRWjZKj8zZKD1K\nyzJjm89G6ZE5G6VHadkoPUrL1p2bK2weJdSALb0fYNddkh6aQJ5sNytpa99tJwzINtqDbKgepWWj\n9MicjdIjRFbMzUjZKD1Ky0bpkTkbpUdxWTFjm85G6ZE5G6VHadkoPYrLqt7crLyDafi0mX1O0vWS\n9qvz0qTnSLpuAnmyHW+W9BUzu6Mne5qkX6vIRumcORulR2nZKD0yZ6P0iJBlbsbKRulRWjZKj8zZ\nKD1KyzJjm89G6ZE5G6VHadkoPUrL1p2bK0ztos1m9lRJZ0o6UdK9km52969NIk92OXucpCf0ZL/h\n7g9WZQN1TpuN0qO0bJQembNRegTJMjcDZaP0KC0bpUfmbJQeBWaZsQ1no/TInI3So7RslB4FZmvN\nzX7TeoWP1HkZ0vGSHi7pfkkzE8xv+KyZPULSJZLOVffq35JuNLP3uvt9ETtvgGyUHqVlo/TInI3S\ng7lJNmqP0rJRemTORulRTJYZu27ZKD0yZ6P0KC0bpUcx2THn5jFWOyCNMLPLJV0oySV9R9Jxkl7a\narV+sN1u37CWPNmOVqv1UUn7JF0p6eOSbpZkkva02+2P8RivbzZKj9KyUXpkzkbpESHL3IyVjdKj\ntGyUHpmzUXqUlmXGNp+N0iNzNkqP0rJRepSWrTs3wzCzmypu22RmX15rnuzy7Tf23zboPgJ1TpuN\n0qO0bJQembNRegTJMjcDZaP0KC0bpUfmbJQeBWaZsQ1no/TInI3So7RslB4FZmvNzSpT+y1dZnZy\n320nS1qcQJ5sx/1mdqGZ7TKz481sp5m9SNKBimyUzpmzUXqUlo3SI3M2So8IWeZmrGyUHqVlo/TI\nnI3So7QsM7b5bJQembNRepSWjdKjtGzdubnyHxs1OGGvknSNmR2vzoWHtkt6QNKlE8iT7bhA0uWS\n9qjnYlCSXlSRjdI5czZKj9KyUXpkzkbpESHL3IyVjdKjtGyUHpmzUXqUlmXGNp+N0iNzNkqP0rJR\nepSWrTs3V9g0arAJZrZdnYsP3evu904yT3Y8ETpnzkbpUVo2So/M2Sg9ImTritA5czZKj9KyUXpk\nzkbpUVq2rgidS8tG6ZE5G6VHadkoPUrLFsvM3jjs7bXkyS7/3dXD3l7HHmQD9SgtG6VH5myUHkGy\nzM1A2Sg9SstG6ZE5G6VHgVlmbMPZKD0yZ6P0KC0bpUeB2Vpzs9e0ruGzpP9iQ6tdfKhOnmzHxX1v\nv2xItskeZGP1KC0bpUfmbJQeEbLMzVjZKD1Ky0bpkTkbpUdpWWZs89koPTJno/QoLRulR2nZunNz\n2bR/pOtR6vws2j3uPj/JPFnJzHZJOkudl4otSLrV3b8VuXP2bJQepWWj9MicjdJj2lnmZrxslB6l\nZaP0yJyN0qOkLDN2fbJRemTORulRWjZKj5Ky48zNXlNZ+JjZ0yS9T52LRh9Q50JFmyW9wt1vWUue\n7HL2YkkvV2dTuJQ9S9IH3f396hOkc9pslB6lZaP0yJyN0iNIlrkZKBulR2nZKD0yZ6P0KDDLjG04\nG6VH5myUHqVlo/QoMFtrblbZMkqoAe+W9AJ3v2vpBjN7rKSrJJ2+xjzZjpdIOtPdD/dkHybpFklV\nJ0eEzpmzUXqUlo3SI3M2So8IWeZmrGyUHqVlo/TInI3So7QsM7b5bJQembNRepSWjdKjtGzdubnC\ntK7hs6X3A+y6S9JDE8iT7WYlbe277YQB2UZ7kA3Vo7RslB6Zs1F6hMiKuRkpG6VHadkoPTJno/Qo\nLitmbNPZKD0yZ6P0KC0bpUdxWdWbm5V3MA2fNrPPSbpe0n51Xpr0HEnXTSBPtuPNkr5iZnf0ZE+T\n9GsV2SidM2ej9CgtG6VH5myUHhGyzM1Y2Sg9SstG6ZE5G6VHaVlmbPPZKD0yZ6P0KC0bpUdp2bpz\nc4WpXbTZzJ4q6Ux1LlR0r6Sb3f1rk8iTXc4eJ+kJPdlvuPuDVdlAndNmo/QoLRulR+ZslB5BsszN\nQNkoPUrMLQDXAAAgAElEQVTLRumRORulR4FZZmzD2Sg9Mmej9CgtG6VHgdlac7PftF7hI3VehnS8\npIdLul/SzATzGz5rZo+QdImkc9W5ovc9km40s/e6+30RO2+AbJQepWWj9MicjdKDuUk2ao/SslF6\nZM5G6VFMlhm7btkoPTJno/QoLRulRzHZMefmMVY7II0ws8slXSjJJX1H0nGSXtpqtX6w3W7fsJY8\n2Y5Wq/VRSfskXSnp45JulmSS9rTb7Y/xGK9vNkqP0rJRemTORukRIcvcjJWN0qO0bJQembNRepSW\nZcY2n43SI3M2So/SslF6lJatOzfDMLObKm7bZGZfXmue7PLtN/bfNug+AnVOm43So7RslB6Zs1F6\nBMkyNwNlo/QoLRulR+ZslB4FZpmxDWej9MicjdKjtGyUHgVma83NKlP7LV1mdnLfbSdLWpxAnmzH\n/WZ2oZntMrPjzWynmb1I0oGKbJTOmbNRepSWjdIjczZKjwhZ5masbJQepWWj9MicjdKjtCwztvls\nlB6Zs1F6lJaN0qO0bN25ufIfGzU4Ya+SdI2ZHa/OhYe2S3pA0qUTyJPtuEDS5ZL2qOdiUJJeVJGN\n0jlzNkqP0rJRemTORukRIcvcjJWN0qO0bJQembNRepSWZcY2n43SI3M2So/SslF6lJatOzdX2DRq\nsAlmtl2diw/d6+73TjJPdjwROmfORulRWjZKj8zZKD0iZOuK0DlzNkqP0rJRemTORulRWrauCJ1L\ny0bpkTkbpUdp2Sg9SssWy8zeOOztteTJLv/d1cPeXsceZAP1KC0bpUfmbJQeQbLMzUDZKD1Ky0bp\nkTkbpUeBWWZsw9koPTJno/QoLRulR4HZWnOz17Su4bOk/2JDq118qE6ebMfFfW+/bEi2yR5kY/Uo\nLRulR+ZslB4RsszNWNkoPUrLRumRORulR2lZZmzz2Sg9Mmej9CgtG6VHadm6c3PZtH+k61Hq/Cza\nPe4+P8k8WcnMdkk6S52Xii1IutXdvxW5c/ZslB6lZaP0yJyN0mPaWeZmvGyUHqVlo/TInI3So6Qs\nM3Z9slF6ZM5G6VFaNkqPkrLjzM1eU1n4mNnTJL1PnYtGH1DnQkWbJb3C3W9ZS57scvZiSS9XZ1O4\nlD1L0gfd/f3qE6Rz2myUHqVlo/TInI3SI0iWuRkoG6VHadkoPTJno/QoMMuMbTgbpUfmbJQepWWj\n9CgwW2tuVtkySqgB75b0Ane/a+kGM3uspKsknb7GPNmOl0g6090P92QfJukWSVUnR4TOmbNRepSW\njdIjczZKjwhZ5masbJQepWWj9MicjdKjtCwztvlslB6Zs1F6lJaN0qO0bN25ucK0ruGzpfcD7LpL\n0kMTyJPtZiVt7bvthAHZRnuQDdWjtGyUHpmzUXqEyIq5GSkbpUdp2Sg9Mmej9CguK2Zs09koPTJn\no/QoLRulR3FZ1ZublXcwDZ82s89Jul7SfnVemvQcSddNIE+2482SvmJmd/RkT5P0axXZKJ0zZ6P0\nKC0bpUfmbJQeEbLMzVjZKD1Ky0bpkTkbpUdpWWZs89koPTJno/QoLRulR2nZunNzhaldtNnMnirp\nTHUuVHSvpJvd/WuTyJNdzh4n6Qk92W+4+4NV2UCd02aj9CgtG6VH5myUHkGyzM1A2Sg9SstG6ZE5\nG6VHgVlmbMPZKD0yZ6P0KC0bpUeB2Vpzs9+0XuEjdV6GdLykh0u6X9LMBPMbPmtmj5B0iaRz1bmi\n9z2SbjSz97r7fRE7b4BslB6lZaP0yJyN0oO5STZqj9KyUXpkzkbpUUyWGbtu2Sg9Mmej9CgtG6VH\nMdkx5+YxVjsgjTCzyyVdKMklfUfScZJe2mq1frDdbt+wljzZjlar9VFJ+yRdKenjkm6WZJL2tNvt\nj/EYr282So/SslF6ZM5G6REhy9yMlY3So7RslB6Zs1F6lJZlxjafjdIjczZKj9KyUXqUlq07N8Mw\ns5sqbttkZl9ea57s8u039t826D4CdU6bjdKjtGyUHpmzUXoEyTI3A2Wj9CgtG6VH5myUHgVmmbEN\nZ6P0yJyN0qO0bJQeBWZrzc0qU/stXWZ2ct9tJ0tanECebMf9Znahme0ys+PNbKeZvUjSgYpslM6Z\ns1F6lJaN0iNzNkqPCFnmZqxslB6lZaP0yJyN0qO0LDO2+WyUHpmzUXqUlo3So7Rs3bm58h8bNThh\nr5J0jZkdr86Fh7ZLekDSpRPIk+24QNLlkvao52JQkl5UkY3SOXM2So/SslF6ZM5G6REhy9yMlY3S\no7RslB6Zs1F6lJZlxjafjdIjczZKj9KyUXqUlq07N1fYNGqwCWZ2orrF3f3eSebJjidC58zZKD1K\ny0bpkTkbpUeEbF0ROmfORulRWjZKj8zZKD1Ky9YVoXNp2Sg9Mmej9CgtG6VHaVkAAAAAAAAAAAAA\nAAAAWU3l17L3M7OTW63WbLvd3j9i/kntdvs7I+R2tlqtp7RarX9qt9uVv6fezLa02+2HzGy21Wr9\ni1ardajdbt9fkXt8u91uj9Kv4n1ParVa39dut+cH/P1Mq9X64VardUqr1XrEoFxP/lGtVuv7Wq3W\npkEf15g9Z1ut1ky73T7cc9vudrt9zyrvN/Lx2+jHrvs+Ez9+WY9dNxvm+GU/dt1syucec3M5U9yx\n675P6ucec7M563Gcu/kN/Txlxi5npn7supmpH7+sx66bTf3cY24O7BH+2FWZyjV8zOyZkt4jaUHS\n70l6taTDkt7r7h+syD9H0pHum5sk/SdJl0mSu1/fl/2Uu/+Mmf2MpHdJuk3SEyW91t3/tC/7Wknb\nJH1J0m9L+oakH5L0H9z9o33ZByW9TdKb3P2whjCzM7r394Ck35L0JknflfRRd393X/ZZkt4vaV7S\nP5f0NUktSS9x9y/3ZZ8m6X3qXGz7gDoXeNos6RXufktf9vE9j9kx3N0rOl8s6TXqLAGvdPe3d2+/\nwd3P6cuOfPw4dsfkRz5+dWQ+dt381I9f5mPXzad97jE3j8kWdey6+bTPPeZm85o6zt381I91aceZ\nGXtMtpFj181P/Xma+dh180U99+pgbh6Tnfqxqzs3q0zrt3S9TdLzJO2W9KeSHq3Og3ejpBUnh6S3\nS3pI0v9R5+TYJekXu3/X/83L1u5/XyvpTHffZ2bbJH2m+2/1Ol/Sj0v6gqRndLMndHv0P7lvknSP\npK+Y2Tsl/ZG7f3fAx/cOSb8gaVbSn6vza9YOqnNF7f7B/CZJT3f3tpmdos4T7D9K+iNJZ/Zl3y3p\nBe5+19INZvZYSVdJOr0v+7vdf/evK/qdU3Hby9U5OSXpw2b2Bnf/zQEfX53jx7E7auTjZ2a3S3qU\nVi5lj7j7o/tuy3zspBjHL/Oxk3I/95ibR5V27KTczz3m5tHbRz52QY6zFONYF3WcxYzt1dSxkwI8\nT5X72EmFPfeCHDspxvEr6tip/txcYfMooQZscvc73f2Lkv6zux/sbtiqfve8JJ2hzolxk7tfJOmv\n3P3F7v7iiuxx3f/eI6ktSe5+UNU/vvZQN/8tSYe6tz2o6i3aEXf/LUk/I+lJkm43sz/pnihVH98d\nkr4uab86V95e7P57/R7m7ksvK/t/kv559+BXHZstvSdG110D7vcnJf2DpF9293N6/1eRlaQH3f0B\nd39A0oWSzjGzXxyQrXP8OHZH1Tl+50v6pqRT3f37e/7XP5Sl3MdOinH8Mh87Kfdzj7l5VGnHTsr9\n3GNuHlXn2EU4zlKMY13acWbGHtXUsZNiPE8zHzupvOdehGMnxTh+pR27unNz5T82anDCPmdmfy7p\np9z9DZJkZu+VdHtV2N0PSXqxmf2GmX1AR0+AKm0z+/8kfY+kPWZ2paRPqLOJ6/cBSV+U9BVJt5rZ\nFySdreqN5FKXv5f0a2b2G+q8rMwqYp81s1vV2UzeLOn3zeygpKqXXX3JzK6T9GeSfkrSp83sQkl/\nX5H9tJl9rpu9V52Xfz1H0nUVPQ+Z2aWSHjvgvvrdbGZXS3qpu99jZj8n6XPqbBT7jXz8OHbHWDp+\n16szNIYdvzvM7LfV2dx+atDH1HWzmV2jzksGRzl2n5X0nJKOXbdPKc+9usdu2s87Kfdzj7l5VGnH\nTmJuLmFujpFVQ8/Rbo8wx7qg48yMXdll0sdOGu/4MWOZsUuYm0dFOHZ15+YK/S/rWjdm9hR3v63n\n7XMkfdHdB22rl3LPUmd4/NIquV2SHibp25Ke5e5/NiB3qqRnqfMyt7akm9396xW5n3L3z6zyYfXm\nnyDpu+7+d2Z2gaQTJH3IK35W0Do/m/hDkv7C3f/czEzSnV7x8jIze6qkZ6hzYtzb7fu1UXut0vkc\nSbcs/btm9ghJl7r7uyqy/cfvJyR9Ydjxq3HsvledAfBtSecOety7x+5cdY7dP2rwsXvOoOM/4H6f\nIOkBd987yWPXzT9VnZf1nagJHj8zO1vSrX3H7hKv/tnuJ7v7X/S8vepzb8zn3WrH7lmSdmrIsetm\n6z73Hq/O8SviubfG593Ejl03y9ysibm5nGdurnwf5maDz71RNT1juzm+NmXGLuWmPmO7+brHjxnL\njO29X+bm0Xxxc7PfNBc+T1ZnIM6q81KtG939f08iX3h2QdKXhj0Wo7CjF8Wq+lnNqmt4oGHdYXmx\npPsl/X7PEL3E3a8ckL2vm32ge/ul7v6BBrJNdRh2v/dL+vCw7AQ7T6LHk9W5sNo31fl54kVJ7/DO\n/1tRlY00V7LPWOZmUszNysch89wsZsZG6cGMxVowYysfh8wzlrm5ftkwc3MqCx8zu1zSj6nzMqYD\n6myUny3pa+7+xhHySy97WpGvc98FZnuvbL5kkyoOuJldJelHJd3Ql5dX/JxknZNpDdneq7JP6n57\nTfJ+l7LL3UfosPw+VU9AM/uEpL9R5/8heqY6L3+ct+qr3pNd+32frc7LgyfR+W3qXERtVp2fD75N\nnYu2PcndL+jLRpgVI8/MwJ2Zm8zNEHOotOwa7/tsTWduFjVjB+T52vQoZuxR6zpjB/QYOGcjzKzS\nsmu877O1Qb82HZBnbh41kblZZVrX8Hm2uz+j9wbr/Fzh/5K04uQYkP/PA/J17ru07Ms04IBr5ZXN\nf16dK5O/3d3/qiLfr859k62flaRd7v5zkmRm50v6EzP7yYoc2Xg9nunuT7fObwf4S3d/bvf9vlCR\njTAr6szMyJ2Zmxs7K8V4/peWjdKjztwsbcYOyvO16bGYseufrZuPMCtKy0bpwdwsN9vk3FxhWguf\nLWZ2srv/Xc9tJ2vwFb3r5DNnRz7g7r5onQtFnTAsN859kx0rK0nHmdlOd9/n7teY2eMk/XdJx5Md\nmI3SY5OZPc7d77Tubyows+8ZkI0wK5ixRzE3y81KMZ7/pWWj9KgzN0ubsVF6RMgyY2Nl6+YjzIrS\nslF6MDfLzTY5N1cWG/cd1+hVkq4xs+N19MrUD0i6dAL5tNm6B9zd/3bpz2b2aHf/hyHZke+bbP1s\n1xvVuYL7M939O+7+LjPbKulysgOzUXpcJulqMzvd3f9n97Y/lfTWiuzUZ0XNbJQezE2yVSI8/0vL\nRulRZ26WNmOj9Jh6lhkbKztGPsKsKC0bpQdzs9Bsk3MzHDM70cx+wMweO+l85mzP+zy6RrbqJWOT\num+yNbPd/Pd3//u9ZEfLRulhZo82s6HXQIswK5ixle/D3Cw0281HeP4XlY3SY5S5WScbZa5E6BEh\n2/M+zNhA2THuO8KsKCobpQdzs7xsz/s0NjfDMLPPN5VPnh35gI/xSbWR+yYbq0dp2Sg9amYjzApm\n7NEs52ah2Sg9SstG6ZF5xkbpESTLeRwoG6VH5myUHszNorONnZuStLnuOzSk7m8Lq5PPnK3jqobu\nF8BwEWYFM3Y8zE0gvihzJUKPCNk6mLHAdESZFRF6RMjWUXtuRln41C1eJ0+2Y1uNbJM9yMbqUVo2\nSo/M2Sg91j1rZmd1/ztjZq+U9BQzu9TMZtazB9nwPUrLRumRORulR+isme0ws6eb2WYze7GkHzKz\nXzGzUa8pGvrjC5qN0iNzNkqP0rJReoTOmtlbrHMdJ0mSu7+vxv1Kkkb9IrZRrVbrJ9rt9s1N5Ddq\n1sz+sNVqvaDVav3rVqv1ryVd0Gq1fqTVar2g3W5fHbHzRspG6VFaNkqPVZ57Z7Xb7TvNbKbVar1C\n0lNardajW63Wbe12+0i0bJQeEbKtVutD7Xb7w61W6wpJj5H0SUlPk/Tcdrv9aR43zs0SslF6NJjd\n0Wq1ntJqtf6h1WpdJOlJrVbrca1W6y/a7fZD65GN0qO0bKvV+mNJLunFkkzSZyT9iKQXttvta3iM\nOTdLyEbpUTP7llardWu73T4sSe12+3/3f0xNZ6P0KC3barX+u6Tnt1qtO9rt9tyg3DBT+S1dZvaH\nko7o6EudfsLMnizpiLtfsJY82WV/KelfSvp36vw6uCdI+oAGiNA5czZKj9KyUXrU7PwmSedIers6\nr6y7WtK5kt4j6d8EzEbpESG75HR3P6v75+vM7AsDchE6Z85G6VFaNkqPprJ/KOm/drM7JP0PSc+U\n9GFJv7RO2Sg9Sss+wju/avpX3f2c7m1/bGa3qlqEzqVlo/TInI3So072JZLONbPXuPtq14BpKhul\nR2nZb0h6qaR3m9nl6hzzz7j7wirvt2xav5a91jKiZp6sJHd/i5ndps4XSpdIusfdvzjgfkN0Tp6N\n0qO0bJQedTtLoy8NomSj9Jhm9jFmdr6ke81st7vPmdlJkh4+5H6n3XkjZKP0KC0bpceks3WWBk1l\no/QoLfuAmZ0u6Wbr/NrpL5rZMyQ9WJGN0rm0bJQembNRetTJ1lkaNJWN0qO0rNx9r6TzzOyHJb1Q\n0q+b2fe6+2Oq8v2mcg0fd3+LpN9UZxnxf9VdRgxaSNTJkz0mf52kyyR9RJ3N70AROmfORulRWjZK\nj5qdj1kaSNKQpUGEbJQeEbKXSXqqOj/u/Hwz+x5JN0t6Q0U2SufM2Sg9SstG6dFU9pilQTc7aGnQ\nVDZKj9KyvyLpbZKeJ+kGM9sv6V2SXlmRjdK5tGyUHpmzUXrU6uzue939PEl7JD1F0p+b2V3rmY3S\no7Rsz/vc7u6vdvcfHXXZI03vFT5y9+vM7G80wjKibp7sMfk7ul9EPXuE7NQ7Z85G6VFaNkqPGtnL\n1LkmwdLS4PfUWRq8NGg2So+pZ939k+pct6fX7or7DNM5eTZKj9KyUXo0lf0Vdf7f0J2SXm9mB9S5\nLsx6ZqP0KCrr7neo8yPRD5f0SEnz7n5/xX2G6VxgNkqPzNkoPep2ltRZGkh69bBM09koPUrI+tFX\nb41t01rvYK3M7ARJz+5+oT3R/EbOmtmjJP1bdX4GflbSPZJulPQmd787YueNko3So7RslB51O6Mc\na5mbANZXjaVBY9koPUrJjjtjS/n4ImWj9MicjdKjbmeUZRJfm05l4VO3eJ082eXspyT9vjq/AeGA\npO2SflrSxe5+rvoE6Zw2G6VHadkoPTJno/QIkmVuBspG6VFaNkqPzNkoPQrMMmMbzkbpkTkbpUdp\n2Sg9CszWmptVpnINH3WuHn6rpDMlPU7SMyR9SdIfTCBPtmO7u3/M3fe7+0Pd//6RpOMrslE6Z85G\n6VFaNkqPzNkoPSJkmZuxslF6lJaN0iNzNkqP0rLM2OazUXpkzkbpUVo2So/SsnXnZgxmduOA27+0\n1jzZ5duuNrPLzex0M3u8mT3NzP6dmX18wH1E6Jw2G6VHadkoPTJno/QIkmVuBspG6VFaNkqPzNko\nPQrMMmMbzkbpkTkbpUdp2Sg9CszWmptVpnXR5n3W+RVkn5G0X9KJ6vzK429NIE+244XqXMzrNd3c\nvepcAPFFFdkonTNno/QoLRulR+ZslB4RsszNWNkoPUrLRumRORulR2lZZmzz2Sg9Mmej9CgtG6VH\nadm6c3OFaS186havkycryd3vk/TO7v9kZi9x99+tuM8wnZNno/QoLRulR+ZslB5TzzI3w2Wj9Cgt\nG6VH5myUHkVlmbHrko3SI3M2So/SslF6FJUdY27GZGYvaSpPdjl7w6jZhnuQDdSjtGyUHpmzUXoE\nyTI3A2Wj9CgtG6VH5myUHgVmmbENZ6P0yJyN0qO0bJQeBWZrzU1pehdt7vfLDebJjidC58zZKD1K\ny0bpkTkbpUeEbF0ROmfORulRWjZKj8zZKD1Ky9YVoXNp2Sg9Mmej9CgtG6VHadnaoix80LyLp10A\nAArD3ASA5jBjAaCe2nNzWtfw6Ve3eJ38hsya2cN63twk6YNm9mxJcvcH1qsH2fA9SstG6ZE5G6UH\nc5Ns1B6lZaP0yJyN0iN0lhk7lWyUHpmzUXqUlo3SI3R2AnNTm2oUmZiK4n8maWDxOnmyy9l7JN0v\n6b7uTd8n6duSjrj7KeoTpHPabJQepWWj9MicjdIjSJa5GSgbpUdp2Sg9Mmej9Cgwy4xtOBulR+Zs\nlB6lZaP0KDBba25WmdYrfO7WyuJ/LemIpKridfJkO35c0jskvc7dbzezG9z9HA0WoXPmbJQepWWj\n9MicjdIjQpa5GSsbpUdp2Sg9Mmej9Cgty4xtPhulR+ZslB6lZaP0KC1bd26uMK1r+Py4pK9Kep67\nnyzpf7r7yUO2VHXyZCW5+19J+kVJrzOzF1bcV7jOybNRepSWjdIjczZKj6lnmZvhslF6lJaN0iNz\nNkqPorLM2HXJRumRORulR2nZKD2Kyo4xN1eYysKnbvE6ebLH5O+VdIGkfybpB6J3zpyN0qO0bJQe\nmbNRekTIdvPMzSDZKD1Ky0bpkTkbpUdp2W6eGdtgNkqPzNkoPUrLRulRWrabH3luVpnWK3xqF6/5\nCYLs0fwRd//37n7aCNmpd86cjdKjtGyUHpmzUXpEyHbzzM0g2Sg9SstG6ZE5G6VHadlunhnbYDZK\nj8zZKD1Ky0bpUVq2mx95bvbbVPcdUIa+i0Edw0e8ojcAbCTMTQBoDjMWAOqZxNycykWb6xavkye7\n7OuSdkla6Lu98iJaETpnzkbpUVo2So/M2Sg9ImTF3AyVjdKjtGyUHpmzUXqUlhUztvFslB6Zs1F6\nlJaN0qO0rGrOzSrT+i1ddYvXyZPtOFPS9ZKe5e7zWl2EzpmzUXqUlo3SI3M2So8IWeZmrGyUHqVl\no/TInI3So7QsM7b5bJQembNRepSWjdKjtGzdubnCtBY+dYvXyZOV5O77zOy1kp4q6bOr3G+Izsmz\nUXqUlo3SI3M2So+pZ5mb4bJRepSWjdIjczZKj6KyzNh1yUbpkTkbpUdp2Sg9isqOMTdXmBnnndaq\n3W4farVac5K+r91u751knuwx+b8dJRelc+ZslB6lZaP0yJyN0iNCtptnbgbJRulRWjZKj8zZKD1K\ny3bzzNgGs1F6ZM5G6VFaNkqP0rLd/MhzswoXbU7KzDZJep6kcyXNSrpH0o2SrnL3I9PsBgARMTcB\noDnMWACoZxJzc1oXba5VvE6e7LL3qbPQu07SQUnbJf20pOdIurgvG6Jz5myUHqVlo/TInI3SI0JW\nzM1Q2Sg9SstG6ZE5G6VHaVkxYxvPRumRORulR2nZKD1Ky6rm3KwyrWv41C1eJ0+244nuflbfbX9i\nZreoWoTOmbNRepSWjdIjczZKjwhZ5masbJQepWWj9MicjdKjtCwztvlslB6Zs1F6lJaN0qO0bN25\nGYOZ3Tjg9sridfJkl2+7yczO6rvtmWb2hQH3EaFz2myUHqVlo/TInI3SI0iWuRkoG6VHadkoPTJn\no/QoMMuMbTgbpUfmbJQepWWj9CgwW2tuVtk8anDCNlcVl9T/e+fHyZPtuEjSb5jZ35vZN83sLkm/\nLullFdkonTNno/QoLRulR+ZslB4RsheJuRkpG6VHadkoPTJno/QoLXuRmLFNZ6P0yJyN0qO0bJQe\npWUvUr25ucK0fqTrIknvNLM/UOflTA9Juk2Di9fJk5Xk7ndIOq//djN7eMX9huicPBulR2nZKD0y\nZ6P0mHqWuRkuG6VHadkoPTJno/QoKsuMXZdslB6Zs1F6lJaN0qOo7BhzM7a6xevkN1rWzH7WzO40\nszvM7Bd6br9h1PudRA+yZfQoLRulR+ZslB7MTbJRe5SWjdIjczZKj6hZZuz0slF6ZM5G6VFaNkqP\nqNlJzM2p/EjXoOLqXLhoTXmyy/6tpCdL+jFJl5jZRRWZUJ0zZ6P0KC0bpUfmbJQeEbJibobKRulR\nWjZKj8zZKD1Ky4oZ23g2So/M2Sg9SstG6VFaVjXnZpVpXcOnbvE6ebId33X3BXdvq/MysFea2TnB\nO2fORulRWjZKj8zZKD0iZJmbsbJRepSWjdIjczZKj9KyzNjms1F6ZM5G6VFaNkqP0rJ15+YK07qG\nz3fdfUGSzOw8SZ83szsnlCfbcaeZvVPS5e5+wMzOl3S9pNnAnTNno/QoLRulR+ZslB4RsszNWNko\nPUrLRumRORulR2lZZmzz2Sg9Mmej9CgtG6VHadm6c3OFab3C504ze6eZbXP3A5LOl/RfJD1+Anmy\nHS+RdLukI5Lk7ndJOlvSJyqyUTpnzkbpUVo2So/M2Sg9ImSZm7GyUXqUlo3SI3M2So/SsszY5rNR\nemTORulRWjZKj9KydefmCtNa+NQtXidPtvN3h939Q+7+Tz23fcfd91Tcb4jOybNRepSWjdIjczZK\nj6lnmZvhslF6lJaN0iNzNkqPorLM2HXJRumRORulR2nZKD2Kyo4xNwEAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAEY2K+mTkr5f0qem3AUAAAAAAAATsFvS3027BAAAAAAAACbnWknflXSNji5+\nPiTpvZL+QtKcpH8l6WpJd0j6rW5mRtI7JX21m3vVehUGAAAAAADAcI9TZ9Gz9F+ps/C5uvvnCyUt\nSHqUpG2S9ks6UdKlkt7RzRwv6QuSnrEehQEAANZiy7QLAAAArINNFbcdkXRd98//T9LXJf1j9+15\nSUq/zJMAAADQSURBVDsknSvpSZJ+onv7CZKeKOmmxpoCAABMAAsfAACwkR3u+fODFX+/WdJlkv64\n+/ZOSQeaLgUAALBWm6ddAAAAYB08qM7/0dX7Sp+qV/30+7ykl3ffd5ukL0k6feLtAAAAJoxX+AAA\ngI3g2+r82NbvqvOjXOr+t+rP6rntA5JOk3SbOl83fVDSjU2XBQAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmJr/H4a84HDDWaYhAAAA\nAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x10a251810>"
]
}
],
"prompt_number": 22
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Seems like the valhalla rampage started on 2014-04-13."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"How much has the code base increased over time?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cd openbsd/"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"/Users/dirk/projekte/repo-libressl/openbsd\n"
]
}
],
"prompt_number": 23
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For now we just cound the number of files:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%time \n",
"filecounts = []\n",
"for commit in df[\"id\"]:\n",
" cfiles =! git ls-tree -r --name-only $commit\n",
" filecounts.append(len(cfiles))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"CPU times: user 2.01 s, sys: 4.16 s, total: 6.17 s\n",
"Wall time: 23.6 s\n"
]
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"filestats=pd.DataFrame({\"filecount\": filecounts}, index=df.index)\n",
"filestats.plot(figsize=(10,6))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 25,
"text": [
"<matplotlib.axes.AxesSubplot at 0x10b1e4510>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x109d5eed0>"
]
}
],
"prompt_number": 25
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Which files have been changed most often?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The idea for the following git command comes from Gary Bernhardt's [gitchurn](https://github.com/garybernhardt/dotfiles/blob/master/bin/git-churn). We can simplify it though, because we have Python and pandas:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"file_changes =! git log --all -M -C --name-only --since \"2014-04-01\" --format='format:' | grep -v '^$'\n",
"dfc = pd.Series(list(file_changes))\n",
"dfc.value_counts()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 26,
"text": [
"src/lib/libssl/src/ssl/s3_clnt.c 52\n",
"src/lib/libssl/src/ssl/ssl_lib.c 51\n",
"src/lib/libssl/src/ssl/t1_enc.c 50\n",
"src/lib/libssl/src/ssl/s3_lib.c 50\n",
"src/lib/libssl/src/apps/apps.c 46\n",
"src/lib/libssl/src/ssl/s3_srvr.c 46\n",
"src/lib/libssl/src/apps/s_server.c 44\n",
"src/lib/libcrypto/crypto/Makefile 44\n",
"src/lib/libssl/src/ssl/ssl_ciph.c 43\n",
"src/lib/libssl/src/ssl/ssl.h 43\n",
"src/lib/libssl/src/apps/s_client.c 43\n",
"src/lib/libssl/src/ssl/ssl_locl.h 40\n",
"src/lib/libssl/src/crypto/bio/b_sock.c 40\n",
"src/lib/libssl/src/ssl/t1_lib.c 38\n",
"src/lib/libssl/src/apps/ca.c 38\n",
"...\n",
"src/lib/libssl/src/crypto/des/des_enc.c 1\n",
"src/lib/libssl/src/demos/x509/mkcert.c 1\n",
"src/lib/libssl/src/times/sparc2 1\n",
"src/lib/libssl/src/crypto/threads/README 1\n",
"src/lib/libssl/src/crypto/ripemd/rmd_one.c 1\n",
"src/lib/libssl/src/demos/tunala/ip.c 1\n",
"src/lib/libssl/src/crypto/bn/asm/mips3.s 1\n",
"src/lib/libssl/src/times/486-66.dos 1\n",
"src/lib/libssl/src/ms/bcb4.bat 1\n",
"src/lib/libssl/src/demos/prime/Makefile 1\n",
"src/lib/libssl/src/bugs/MS 1\n",
"src/lib/libssl/src/apps/tsget 1\n",
"src/lib/libssl/src/crypto/des/rpw.c 1\n",
"src/lib/libssl/src/crypto/des/DES.xs 1\n",
"src/lib/libc/string/bzero.c 1\n",
"Length: 2216, dtype: int64"
]
}
],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"c_changes=dfc.where(dfc.str.endswith(\".c\")).value_counts()\n",
"c_changes"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 27,
"text": [
"src/lib/libssl/src/ssl/s3_clnt.c 52\n",
"src/lib/libssl/src/ssl/ssl_lib.c 51\n",
"src/lib/libssl/src/ssl/s3_lib.c 50\n",
"src/lib/libssl/src/ssl/t1_enc.c 50\n",
"src/lib/libssl/src/ssl/s3_srvr.c 46\n",
"src/lib/libssl/src/apps/apps.c 46\n",
"src/lib/libssl/src/apps/s_server.c 44\n",
"src/lib/libssl/src/apps/s_client.c 43\n",
"src/lib/libssl/src/ssl/ssl_ciph.c 43\n",
"src/lib/libssl/src/crypto/bio/b_sock.c 40\n",
"src/lib/libssl/src/ssl/t1_lib.c 38\n",
"src/lib/libssl/src/apps/ca.c 38\n",
"src/lib/libssl/src/ssl/s3_enc.c 35\n",
"src/lib/libssl/src/ssl/s3_pkt.c 30\n",
"src/lib/libssl/src/apps/req.c 30\n",
"...\n",
"src/lib/libssl/src/demos/smime/smenc.c 1\n",
"src/lib/libssl/src/demos/asn1/ocsp.c 1\n",
"src/lib/libssl/src/crypto/bn/exp.c 1\n",
"src/lib/libc/string/strnlen.c 1\n",
"src/lib/libssl/src/apps/winrand.c 1\n",
"src/lib/libssl/src/demos/cms/cms_ver.c 1\n",
"src/lib/libssl/src/crypto/dh/p192.c 1\n",
"src/lib/libssl/src/demos/engines/ibmca/hw_ibmca_err.c 1\n",
"src/lib/libssl/src/crypto/ecdsa/ecs_asn1.c 1\n",
"src/regress/lib/libcrypto/hmac/hmactest.c 1\n",
"src/lib/libssl/src/crypto/idea/i_ofb64.c 1\n",
"src/lib/libssl/src/engines/ccgost/gost_ctl.c 1\n",
"src/lib/libssl/src/demos/sign/sign.c 1\n",
"src/lib/libssl/src/engines/e_atalla.c 1\n",
"src/lib/libssl/src/demos/tunala/sm.c 1\n",
"Length: 982, dtype: int64"
]
}
],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"c_changes.plot()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 28,
"text": [
"<matplotlib.axes.AxesSubplot at 0x1072e5850>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\ncdemgR3b0tYAAAAASUVORK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x109e38fd0>"
]
}
],
"prompt_number": 28
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As expected, a few files are changed very often and most files are changed infrequently."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What about header files?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"h_changes=dfc.where(dfc.str.endswith(\".h\")).value_counts()\n",
"h_changes"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 29,
"text": [
"src/lib/libssl/src/ssl/ssl.h 43\n",
"src/lib/libssl/src/ssl/ssl_locl.h 40\n",
"src/lib/libssl/src/apps/apps.h 21\n",
"src/lib/libssl/src/crypto/crypto.h 19\n",
"src/lib/libssl/src/crypto/engine/engine.h 17\n",
"src/lib/libssl/src/crypto/evp/evp.h 16\n",
"src/lib/libssl/src/ssl/ssl3.h 15\n",
"src/lib/libssl/src/crypto/asn1/asn1.h 14\n",
"src/lib/libssl/src/crypto/cryptlib.h 14\n",
"src/lib/libssl/src/crypto/bio/bio.h 11\n",
"src/lib/libssl/src/ssl/dtls1.h 11\n",
"src/lib/libssl/src/ssl/tls1.h 11\n",
"src/lib/libssl/src/crypto/bn/bn_lcl.h 10\n",
"src/lib/libssl/src/e_os.h 10\n",
"src/lib/libssl/src/crypto/bn/bn.h 10\n",
"...\n",
"src/lib/libssl/src/engines/vendor_defns/aep.h 1\n",
"src/lib/libssl/src/engines/e_aep_err.h 1\n",
"src/lib/libssl/src/engines/e_sureware_err.h 1\n",
"src/lib/libssl/src/demos/engines/zencod/hw_zencod.h 1\n",
"src/lib/libssl/src/demos/engines/zencod/hw_zencod_err.h 1\n",
"src/lib/libssl/src/crypto/ebcdic.h 1\n",
"src/lib/libssl/src/demos/engines/cluster_labs/cluster_labs.h 1\n",
"src/lib/libssl/src/crypto/dsa/dsa_locl.h 1\n",
"src/lib/libssl/src/engines/vendor_defns/atalla.h 1\n",
"src/lib/libssl/src/MacOS/_MWERKS_GUSI_prefix.h 1\n",
"src/lib/libssl/src/crypto/modes/modes.h 1\n",
"src/lib/libssl/src/crypto/rand/rand_lcl.h 1\n",
"src/lib/libssl/src/engines/vendor_defns/cswift.h 1\n",
"src/lib/libssl/src/engines/vendor_defns/hw_ubsec.h 1\n",
"src/lib/libssl/src/engines/ccgost/gost2001_keyx.h 1\n",
"Length: 203, dtype: int64"
]
}
],
"prompt_number": 29
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To be continued... ;-)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 29
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment