commit fa8a89e0799a4da57c57d0a8d20c009a591e5420 Author: timkicker Date: Thu May 18 12:37:13 2023 +0000 deploy: 6fe600b53791c8c4d8810e4e47bd3639786ad181 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/2023/05/18/whatsapp-analyze/heatmapA.png b/2023/05/18/whatsapp-analyze/heatmapA.png new file mode 100644 index 0000000..108f121 Binary files /dev/null and b/2023/05/18/whatsapp-analyze/heatmapA.png differ diff --git a/2023/05/18/whatsapp-analyze/heatmapB.png b/2023/05/18/whatsapp-analyze/heatmapB.png new file mode 100644 index 0000000..8e883df Binary files /dev/null and b/2023/05/18/whatsapp-analyze/heatmapB.png differ diff --git a/2023/05/18/whatsapp-analyze/hourchartA.png b/2023/05/18/whatsapp-analyze/hourchartA.png new file mode 100644 index 0000000..373cd55 Binary files /dev/null and b/2023/05/18/whatsapp-analyze/hourchartA.png differ diff --git a/2023/05/18/whatsapp-analyze/hourchartB.png b/2023/05/18/whatsapp-analyze/hourchartB.png new file mode 100644 index 0000000..42bc08c Binary files /dev/null and b/2023/05/18/whatsapp-analyze/hourchartB.png differ diff --git a/2023/05/18/whatsapp-analyze/index.html b/2023/05/18/whatsapp-analyze/index.html new file mode 100644 index 0000000..8677738 --- /dev/null +++ b/2023/05/18/whatsapp-analyze/index.html @@ -0,0 +1,268 @@ + + + + + + + + + + + + + Data about data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+

+
🌑
+ + +

+
+ +
+

+ Hello World. +

+
+ +
+
+
+ Home + + + Blog + + + + About + + + + + Email + + +
+
+
+
+
+ +
+

Data about data

+ +

I am a huge fan of gathering, analyzing and evaluating data. Creating statistics and colorful graphs just has something to it. But the interesting part is not necessarily the data itself, it’s the data about the data. How often does something occur, at which time and by whom are very important characteristics when it comes to creating patterns.

+

For example, let’s look at the two weekday-graphs of two different WhatsApp-chats of mine.

+

Hours Chat A

+

hourchartA

+

Hours Chat B

+

hourchartB

+

It is not that hard to figure out the difference between those two graphs. The amount of daily messages in A are pretty stable except Friday and Monday, which are two extremes. Maybe this could be about a friend group planning what they’re going to do on the weekend? The general quantity of messages are also lower as in figure B. The second chat also has a huge gap between Sunday and Saturday. Could this be a groupchat related to work? Or is it someone close who happens to live in the same house?

+

You can see that it is possible to gather connections and create assumptions about certain topics without even looking at the data itself. Now let’s take a deeper look.

+

Days Chat A

+

heatmapA

+

How interesting. We can see that the group is most active between the end of January till May and spikes again in October. If you happen to live in Austria, you probably now what that means. See most Austrian summer breaks for students last from June till the beginning of September while Christmas lasts from December till January. There is also one small break during November. You can clearly see that this could be a chat between friends who happen to be students but don’t have the same classes together. Those friends probably spend a lot of their free time together, which explains the lack of data during the breaks.

+

Days Chat B

+

heatmapB

+

We can see that the amount of messages remains pretty stable. This could prove our theory of two people in the same household as true. The gap in August could be a planned vacation maybe?

+

It would be pretty frighting if I told you all our assumptions were correct. Right? You may now probably recognize that metadata is a lot more valuable than you originally thought. But what conclusions can we draw from this new gained awareness?

+

Most people rely on the encryption of their messaging apps. If no one can read my data then I am safe right? No. As we can see, an attacker does not need access your communication in order to gather valuable information.

+

Just keep that in mind.

+ +

— May 18, 2023

+ + + +
+ +
+

+ + + #opensource

+ +
+ + +
+ + + GitHub + + + + + + LinkedIn + + + + + + + +
+ +
+ +
+
+ +
+ +
+ + + + + + diff --git a/About/index.html b/About/index.html new file mode 100644 index 0000000..ad6f563 --- /dev/null +++ b/About/index.html @@ -0,0 +1,248 @@ + + + + + + + + + + + + + About - Tim Kicker + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+

+
🌑
+ + +

+
+ +
+

+ Hello World. +

+
+ +
+
+
+ Home + + + Blog + + + + About + + + + + Email + + +
+
+
+
+
+ +
+

About

+ + + +
+ +
+

+ + + #opensource

+ +
+ + +
+ + + GitHub + + + + + + LinkedIn + + + + + + + +
+ +
+ +
+
+ +
+ +
+ + + + + + diff --git a/archives/2023/05/index.html b/archives/2023/05/index.html new file mode 100644 index 0000000..1c324e7 --- /dev/null +++ b/archives/2023/05/index.html @@ -0,0 +1,272 @@ + + + + + + + + + + + + + All Posts - Tim Kicker + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+

+
🌑
+ + +

+
+ +
+

+ Hello World. +

+
+ +
+
+
+ Home + + + Blog + + + + About + + + + + Email + + +
+
+
+
+
+ +
+ +

All Posts

+ + + + +
+
    + + +
+
+ + +
+ +
+

+ + + #opensource

+ +
+ + +
+ + + GitHub + + + + + + LinkedIn + + + + + + + +
+ +
+ +
+
+ +
+ +
+ + + + + + diff --git a/archives/2023/index.html b/archives/2023/index.html new file mode 100644 index 0000000..64ac42f --- /dev/null +++ b/archives/2023/index.html @@ -0,0 +1,272 @@ + + + + + + + + + + + + + All Posts - Tim Kicker + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+

+
🌑
+ + +

+
+ +
+

+ Hello World. +

+
+ +
+
+
+ Home + + + Blog + + + + About + + + + + Email + + +
+
+
+
+
+ +
+ +

All Posts

+ + + + +
+
    + + +
+
+ + +
+ +
+

+ + + #opensource

+ +
+ + +
+ + + GitHub + + + + + + LinkedIn + + + + + + + +
+ +
+ +
+
+ +
+ +
+ + + + + + diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 0000000..a7b0ee8 --- /dev/null +++ b/archives/index.html @@ -0,0 +1,272 @@ + + + + + + + + + + + + + All Posts - Tim Kicker + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+

+
🌑
+ + +

+
+ +
+

+ Hello World. +

+
+ +
+
+
+ Home + + + Blog + + + + About + + + + + Email + + +
+
+
+
+
+ +
+ +

All Posts

+ + + + +
+
    + + +
+
+ + +
+ +
+

+ + + #opensource

+ +
+ + +
+ + + GitHub + + + + + + LinkedIn + + + + + + + +
+ +
+ +
+
+ +
+ +
+ + + + + + diff --git a/atom.xml b/atom.xml new file mode 100644 index 0000000..463be59 --- /dev/null +++ b/atom.xml @@ -0,0 +1,31 @@ + + + https://tim.kicker.dev + Hexo + + 2023-05-18T14:26:18.000Z + + https://tim.kicker.dev/2023/05/18/whatsapp-analyze/ + Data about data + + <p>I am a huge fan of gathering, analyzing and evaluating data. Creating statistics and colorful graphs just has something to it. But the interesting part is not necessarily the data itself, it’s the data about the data. How often does something occur, at which time and by whom are very important characteristics when it comes to creating patterns.</p> +<p>For example, let’s look at the two weekday-graphs of two different WhatsApp-chats of mine.</p> +<p><strong>Hours Chat A</strong></p> +<p><img src="/.%5Cwhatsapp-analyzer%5ChourchartA.png" alt="hourchartA"></p> +<p><strong>Hours Chat B</strong></p> +<p><img src="/.%5Cwhatsapp-analyzer%5ChourchartB.png" alt="hourchartB"></p> +<p>It is not that hard to figure out the difference between those two graphs. The amount of daily messages in A are pretty stable except Friday and Monday, which are two extremes. Maybe this could be about a friend group planning what they’re going to do on the weekend? The general quantity of messages are also lower as in figure B. The second chat also has a huge gap between Sunday and Saturday. Could this be a groupchat related to work? Or is it someone close who happens to live in the same house?</p> +<p>You can see that it is possible to gather connections and create assumptions about certain topics without even looking at the data itself. Now let’s take a deeper look.</p> +<p><strong>Days Chat A</strong></p> +<p><img src="/.%5Cwhatsapp-analyzer%5CheatmapA.png" alt="heatmapA"></p> +<p>How interesting. We can see that the group is most active between the end of January till May and spikes again in October. If you happen to live in Austria, you probably now what that means. See most Austrian summer breaks for students last from June till the beginning of September while Christmas lasts from December till January. There is also one small break during November. You can clearly see that this could be a chat between friends who happen to be students but don’t have the same classes together. Those friends probably spend a lot of their free time together, which explains the lack of data during the breaks.</p> +<p><strong>Days Chat B</strong></p> +<p><img src="/.%5Cwhatsapp-analyzer%5CheatmapB.png" alt="heatmapB"></p> +<p>We can see that the amount of messages remains pretty stable. This could prove our theory of two people in the same household as true. The gap in August could be a planned vacation maybe?</p> +<p>It would be pretty frighting if I told you all our assumptions were correct. Right? You may now probably recognize that metadata is a lot more valuable than you originally thought. But what conclusions can we draw from this new gained awareness? </p> +<p>Most people rely on the encryption of their messaging apps. If no one can read my data then I am safe right? No. As we can see, an attacker does not need access your communication in order to gather valuable information.</p> +<p>Just keep that in mind. </p> + + 2023-05-18T14:26:18.000Z + + diff --git a/css/custom.css b/css/custom.css new file mode 100644 index 0000000..ee5ae2c --- /dev/null +++ b/css/custom.css @@ -0,0 +1,319 @@ +/* dm-serif-display-regular - latin */ +@font-face { + font-family: 'DM Serif Display'; + font-style: normal; + font-weight: 400; + src: url('../fonts/dm-serif-display-v4-latin-regular.eot'); /* IE9 Compat Modes */ + src: local('DM Serif Display Regular'), local('DMSerifDisplay-Regular'), + url('../fonts/dm-serif-display-v4-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/dm-serif-display-v4-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/dm-serif-display-v4-latin-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/dm-serif-display-v4-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/dm-serif-display-v4-latin-regular.svg#DMSerifDisplay') format('svg'); /* Legacy iOS */ +} + +/* inter-regular - latin */ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 400; + src: url('../fonts/inter-v2-latin-regular.eot'); /* IE9 Compat Modes */ + src: local(''), + url('../fonts/inter-v2-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/inter-v2-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/inter-v2-latin-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/inter-v2-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/inter-v2-latin-regular.svg#Inter') format('svg'); /* Legacy iOS */ +} + +html { + overflow: auto; +} + +img { + max-width: 100%; + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.6); + -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 5px rgba(0, 0, 0, 0.6); + margin-bottom: 1%; +} + +@media (min-width: 550px) { + /* + Side by side gallery + use with alignment + e.g. + [_gallery >](imgages/test.jpg) + */ + img[alt~="_gallery"] { + max-width: 49.5%; + } + + /* Aligned to the right */ + img[alt$=">"] { + float: right; + } + + /* Aligned to the left */ + img[alt$="<"] { + float: left; + } + + /* Centered image */ + img[alt$="><"] { + display: block; + margin: auto; + float: none !important; + } +} + +.center { + text-align: center; +} + +.left { + margin-left: 0; +} + +.lit { + font-size: 1.5rem; + font-weight: 300; +} + +.little-svg { + fill: #fff; +} + +.ml-0 { + margin-left: 0.7rem; +} + +.ml { + margin-left: 2rem; +} + +.ml-1 { + margin-left: 5rem; +} + +.bottom { + margin-block-start: 0px; + margin-block-end: 0px; + margin-bottom: 0px; +} + +.mb-1 { + margin-bottom: 0px; +} + +.mb-2 { + margin-bottom: 5px; +} + +.mb-3 { + margin-bottom: 20px; +} + +.mr { + margin-right: 32px; +} + +.mt-0 { + margin-top: 0px; +} + +.mt-2 { + margin-top: 3rem; +} + +.mt-3 { + margin-top: 4rem; +} + +.mx-auto { + margin: auto; +} + +.mode { + position: absolute; + display: block; + cursor: pointer; + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Old versions of Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; /* Non-prefixed version, currently + supported by Chrome, Edge, Opera and Firefox */ +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.tag-link { + margin-right: 10px; +} + +.about { + width: 150px; + height: 150px; + border-radius: 50%; +} + +li p code { + background-color: rgb(230, 230, 230); + border-radius: 5px; + padding: 0px 2px; + font-size: 85%; +} + +body.darkmode li p code { + background-color: rgb(65, 65, 65); +} + +/* blockquote */ +blockquote { + font-family: 'Inter'; + background-color: rgba(148, 148, 149, 0.08) ; + margin: 1.5em 0px; + padding: 1.1em 20px 1px 20px; + font-style: italic; +} + +blockquote footer { + font-family: 'Inter'; + font-size: 16px; + padding-bottom: 10px; + margin-top: -10px; +} + +blockquote footer cite:before { + content: "—"; + padding: 0 0.5em; +} + +/* Scroll bar */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-thumb { + background: rgb(128 128 128 / 70%); +} +::-webkit-scrollbar-thumb:window-inactive { + background: rgb(128 128 128 / 20%); +} + +::-webkit-scrollbar-thumb:active { + background-color: rgb(128 128 128 / 100%); +} + +/* Footer */ +a.footer-link:hover, +a.footer-link:focus { + cursor: pointer; +} + +.svg-hov { + transition: all .2s ease-in-out; +} +.svg-hov:hover { + transform: translateY(-3px); + transition: all .2s ease-in-out; + +} + +.hexo { + fill: #03adfc; + vertical-align: middle; + padding-bottom: 4px; +} + +.github { + fill: #63636F; +} +.linkedin { + fill: #0073b1; +} +.twitter { + fill: #1DA1F2; +} +.instagram { + fill: #E4405F +} + +.nanobar { + left: 0; +} + +body { + position: absolute; + top: 10px; + left: 10px; + bottom: 10px; + right: 10px; + padding: 5px; + overflow-y: scroll; + overflow-x: hidden; + transition: all 0.3s ease-in-out; +} + +body.darkmode { + background: rgb(34, 34, 38); + color: rgb(230, 230, 230); +} + +.trans { + animation: transitionPlay 0.7s; +} + +@keyframes transitionPlay { + from { + opacity: 0; + transform: translateY(20px); + } + + to { + opacity: 1; + transform: none; + } +} + +.hidden { + display: none; +} + +#comments { + text-align: center; +} + +#madewith { + text-align: center; +} + +.posisi { + text-align: center; +} + + + +@media (min-width: 550px) { + .posisi { + text-align: right; + } + + #comments { + text-align: left; + } + + #madewith { + text-align: left; + } + +} diff --git a/css/normalize.css b/css/normalize.css new file mode 100644 index 0000000..ad771d8 --- /dev/null +++ b/css/normalize.css @@ -0,0 +1,351 @@ +/* normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + + html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/css/prism-dark.css b/css/prism-dark.css new file mode 100644 index 0000000..74c6546 --- /dev/null +++ b/css/prism-dark.css @@ -0,0 +1,289 @@ +/* https://github.com/PrismJS/prism-themes/blob/master/themes/prism-vsc-dark-plus.css */ +pre[class*="language-"], +code[class*="language-"] { + color: #d4d4d4; + font-size: 13px; + text-shadow: none; + font-family: Menlo, Monaco, Consolas, "Andale Mono", "Ubuntu Mono", + "Courier New", monospace; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::selection, +code[class*="language-"]::selection, +pre[class*="language-"] *::selection, +code[class*="language-"] *::selection { + text-shadow: none; + background: #75a7ca; +} + +@media print { + pre[class*="language-"], + code[class*="language-"] { + text-shadow: none; + } +} + +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; + background: #292929; +} + +:not(pre) > code[class*="language-"] { + padding: 0.1em 0.3em; + border-radius: 0.3em; + color: #db4c69; + background: #f9f2f4; +} +/********************************************************* +* Tokens +*/ +.namespace { + opacity: 0.7; +} + +.token.doctype .token.doctype-tag { + color: #569cd6; +} + +.token.doctype .token.name { + color: #9cdcfe; +} + +.token.comment, +.token.prolog { + color: #6a9955; +} + +.token.punctuation, +.language-html .language-css .token.punctuation, +.language-html .language-javascript .token.punctuation { + color: #d4d4d4; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.inserted, +.token.unit { + color: #b5cea8; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.deleted { + color: #ce9178; +} + +.language-css .token.string.url { + text-decoration: underline; +} + +.token.operator, +.token.entity { + color: #d4d4d4; +} + +.token.operator.arrow { + color: #569cd6; +} + +.token.atrule { + color: #ce9178; +} + +.token.atrule .token.rule { + color: #c586c0; +} + +.token.atrule .token.url { + color: #9cdcfe; +} + +.token.atrule .token.url .token.function { + color: #dcdcaa; +} + +.token.atrule .token.url .token.punctuation { + color: #d4d4d4; +} + +.token.keyword { + color: #569cd6; +} + +.token.keyword.module, +.token.keyword.control-flow { + color: #c586c0; +} + +.token.function, +.token.function .token.maybe-class-name { + color: #dcdcaa; +} + +.token.regex { + color: #d16969; +} + +.token.important { + color: #569cd6; +} + +.token.italic { + font-style: italic; +} + +.token.constant { + color: #9cdcfe; +} + +.token.class-name, +.token.maybe-class-name { + color: #4ec9b0; +} + +.token.console { + color: #9cdcfe; +} + +.token.parameter { + color: #9cdcfe; +} + +.token.interpolation { + color: #9cdcfe; +} + +.token.punctuation.interpolation-punctuation { + color: #569cd6; +} + +.token.boolean { + color: #569cd6; +} + +.token.property, +.token.variable, +.token.imports .token.maybe-class-name, +.token.exports .token.maybe-class-name { + color: #9cdcfe; +} + +.token.selector { + color: #d7ba7d; +} + +.token.escape { + color: #d7ba7d; +} + +.token.tag { + color: #569cd6; +} + +.token.tag .token.punctuation { + color: #808080; +} + +.token.cdata { + color: #808080; +} + +.token.attr-name { + color: #9cdcfe; +} + +.token.attr-value, +.token.attr-value .token.punctuation { + color: #ce9178; +} + +.token.attr-value .token.punctuation.attr-equals { + color: #d4d4d4; +} + +.token.entity { + color: #569cd6; +} + +.token.namespace { + color: #4ec9b0; +} +/********************************************************* +* Language Specific +*/ + +pre[class*="language-javascript"], +code[class*="language-javascript"], +pre[class*="language-jsx"], +code[class*="language-jsx"], +pre[class*="language-typescript"], +code[class*="language-typescript"], +pre[class*="language-tsx"], +code[class*="language-tsx"] { + color: #9cdcfe; +} + +pre[class*="language-css"], +code[class*="language-css"] { + color: #ce9178; +} + +pre[class*="language-html"], +code[class*="language-html"] { + color: #d4d4d4; +} + +.language-regex .token.anchor { + color: #dcdcaa; +} + +.language-html .token.punctuation { + color: #808080; +} +/********************************************************* +* Line highlighting +*/ +pre[data-line] { + position: relative; +} + +pre[class*="language-"] > code[class*="language-"] { + position: relative; + z-index: 1; +} + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; + background: #f7ebc6; + box-shadow: inset 5px 0 0 #f7d87c; + z-index: 0; + pointer-events: none; + line-height: inherit; + white-space: pre; +} diff --git a/css/prism-line-numbers.css b/css/prism-line-numbers.css new file mode 100644 index 0000000..bb3a6c4 --- /dev/null +++ b/css/prism-line-numbers.css @@ -0,0 +1,39 @@ +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 3em; + counter-reset: linenumber; +} + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; +} + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.line-numbers-rows > span { + display: block; + counter-increment: linenumber; +} + +.line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; +} diff --git a/css/skeleton.css b/css/skeleton.css new file mode 100644 index 0000000..62351ce --- /dev/null +++ b/css/skeleton.css @@ -0,0 +1,617 @@ +/* +* Skeleton V2.0.4 +* Copyright 2014, Dave Gamache +* www.getskeleton.com +* Free to use under the MIT license. +* http://www.opensource.org/licenses/mit-license.php +* 12/29/2014 +*/ +/* Table of contents +–––––––––––––––––––––––––––––––––––––––––––––––––– +- Grid +- Base Styles +- Typography +- Links +- Buttons +- Forms +- Lists +- Code +- Tables +- Spacing +- Utilities +- Clearing +- Media Queries +*/ +/* Grid +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.container { + position: relative; + width: 100%; + max-width: 640px; + margin: 0 auto; + padding: 0 20px; + box-sizing: border-box; +} + +.column, +.columns { + width: 100%; + float: left; + box-sizing: border-box; +} + +/* For devices larger than 550px */ +@media (min-width: 550px) { + .column, + .columns { + margin-left: 4%; + } + + .column:first-child, + .columns:first-child { + margin-left: 0; + } + + .one.column, + .one.columns { + width: 4.66666666667%; + } + + .two.columns { + width: 13.3333333333%; + } + + .three.columns { + width: 22%; + } + + .four.columns { + width: 30.6666666667%; + } + + .five.columns { + width: 39.3333333333%; + } + + .six.columns { + width: 48%; + } + + .seven.columns { + width: 56.6666666667%; + } + + .eight.columns { + width: 65.3333333333%; + } + + .nine.columns { + width: 74.0%; + } + + .ten.columns { + width: 82.6666666667%; + } + + .eleven.columns { + width: 91.3333333333%; + } + + .twelve.columns { + width: 100%; + margin-left: 0; + } + + .one-third.column { + width: 30.6666666667%; + } + + .two-thirds.column { + width: 65.3333333333%; + } + + .one-half.column { + width: 48%; + } + + /* Offsets */ + .offset-by-one.column, + .offset-by-one.columns { + margin-left: 8.66666666667%; + } + + .offset-by-two.column, + .offset-by-two.columns { + margin-left: 17.3333333333%; + } + + .offset-by-three.column, + .offset-by-three.columns { + margin-left: 26%; + } + + .offset-by-four.column, + .offset-by-four.columns { + margin-left: 34.6666666667%; + } + + .offset-by-five.column, + .offset-by-five.columns { + margin-left: 43.3333333333%; + } + + .offset-by-six.column, + .offset-by-six.columns { + margin-left: 52%; + } + + .offset-by-seven.column, + .offset-by-seven.columns { + margin-left: 60.6666666667%; + } + + .offset-by-eight.column, + .offset-by-eight.columns { + margin-left: 69.3333333333%; + } + + .offset-by-nine.column, + .offset-by-nine.columns { + margin-left: 78.0%; + } + + .offset-by-ten.column, + .offset-by-ten.columns { + margin-left: 86.6666666667%; + } + + .offset-by-eleven.column, + .offset-by-eleven.columns { + margin-left: 95.3333333333%; + } + + .offset-by-one-third.column, + .offset-by-one-third.columns { + margin-left: 34.6666666667%; + } + + .offset-by-two-thirds.column, + .offset-by-two-thirds.columns { + margin-left: 69.3333333333%; + } + + .offset-by-one-half.column, + .offset-by-one-half.columns { + margin-left: 52%; + } +} + +/* Base Styles +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* NOTE +html is set to 62.5% so that all the REM measurements throughout Skeleton +are based on 10px sizing. So basically 1.5rem = 15px :) */ +html { + font-size: 62.5%; +} + +body { + font-size: 1.6em; + /* currently ems cause chrome bug misinterpreting rems on body element */ + line-height: 1.6; + font-weight: 400; + font-family: "Inter", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; + color: #222; +} + +/* Typography +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 1.5rem; + font-family: 'DM Serif Display', serif; + font-weight: 400; +} + +h1 { + font-size: 3.4rem; + line-height: 1.2; +} + +h2 { + font-size: 2.6rem; + line-height: 1.25; +} + +h3 { + font-size: 2.0rem; + line-height: 1.3; +} + +h4 { + font-size: 1.6rem; + line-height: 1.35; +} + +h5 { + font-size: 1.4rem; + line-height: 1.5; +} + +h6 { + font-size: 1.2rem; + line-height: 1.6; + letter-spacing: 0; +} + +/* Larger than phablet */ +/* @media (min-width: 550px) { + h1 { + font-size: 5.0rem; + } + + h2 { + font-size: 4.2rem; + } + + h3 { + font-size: 3.6rem; + } + + h4 { + font-size: 3.0rem; + } + + h5 { + font-size: 2.4rem; + } + + h6 { + font-size: 1.8rem; + } +} */ + +p { + margin-top: 0; +} + +/* Links +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +a:not(.icon) { + color: inherit; + background-size: 100% 200%; + transition: + background-position .2s ease-in-out +} + +a:hover:not(.icon), +a:focus:not(.icon) { + background-position: 0 100%; + color: #fff; +} + +/* a:hover { + background-color: #0FA0CE; + transition: to top 200ms ease-out; + +} + +.link { + text-decoration: none; + color: inherit; + position: relative; +} + +.link:hover { + color: inherit; +} + +.link:after { + content: ""; + position: absolute; + z-index: -1; + top: 80%; + left: -0.1em; + right: -0.1em; + bottom: 0; + transition: top 200ms cubic-bezier(0, .8, .13, 1); + background-color: #0FA0CE; +} + +.link:hover:after { + top: 0%; +} */ + +/* Buttons +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.button, +button, +input[type="submit"], +input[type="reset"], +input[type="button"] { + display: inline-block; + height: 38px; + padding: 0 30px; + color: #555; + text-align: center; + font-size: 11px; + font-weight: 600; + line-height: 38px; + letter-spacing: .1rem; + text-transform: uppercase; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border-radius: 4px; + border: 1px solid #bbb; + cursor: pointer; + box-sizing: border-box; +} + +.button:hover, +button:hover, +input[type="submit"]:hover, +input[type="reset"]:hover, +input[type="button"]:hover, +.button:focus, +button:focus, +input[type="submit"]:focus, +input[type="reset"]:focus, +input[type="button"]:focus { + color: #333; + border-color: #888; + outline: 0; +} + +.button.button-primary, +button.button-primary, +input[type="submit"].button-primary, +input[type="reset"].button-primary, +input[type="button"].button-primary { + color: #FFF; + background-color: #333; + border-color: #333; +} + +.button.button-primary:hover, +button.button-primary:hover, +input[type="submit"].button-primary:hover, +input[type="reset"].button-primary:hover, +input[type="button"].button-primary:hover, +.button.button-primary:focus, +button.button-primary:focus, +input[type="submit"].button-primary:focus, +input[type="reset"].button-primary:focus, +input[type="button"].button-primary:focus { + color: #FFF; +} + +/* Forms +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea, +select { + height: 38px; + padding: 6px 10px; + /* The 6px vertically centers text on FF, ignored by Webkit */ + background-color: #fff; + border: 1px solid #D1D1D1; + border-radius: 4px; + box-shadow: none; + box-sizing: border-box; +} + +/* Removes awkward default styles on some inputs for iOS */ +input[type="email"], +input[type="number"], +input[type="search"], +input[type="text"], +input[type="tel"], +input[type="url"], +input[type="password"], +textarea { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +textarea { + min-height: 65px; + padding-top: 6px; + padding-bottom: 6px; +} + +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="text"]:focus, +input[type="tel"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +textarea:focus, +select:focus { + outline: 0; +} + +label, +legend { + display: block; + margin-bottom: .5rem; + font-weight: 600; +} + +fieldset { + padding: 0; + border-width: 0; +} + +input[type="checkbox"], +input[type="radio"] { + display: inline; +} + +label>.label-body { + display: inline-block; + margin-left: .5rem; + font-weight: normal; +} + +/* Lists +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +ul { + list-style: circle outside; + margin-left: 2rem; +} + +ol { + list-style: decimal outside; + margin-left: 2rem; +} + +ol, ul { + padding-left: 0; + margin-top: 0; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin: 1.5rem 0 1.5rem 3rem; + font-size: 90%; +} + +li { + margin-bottom: 1rem; +} + +/* Code +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* code { + padding: .2rem .5rem; + margin: 0 .2rem; + font-size: 90%; + white-space: nowrap; + background: #F1F1F1; + border: 1px solid #E1E1E1; + border-radius: 4px; +} + +pre>code { + display: block; + padding: 1rem 1.5rem; + white-space: pre; +} */ +/* Tables +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +th, +td { + padding: 12px 15px; + text-align: left; + border-bottom: 1px solid #E1E1E1; +} + +th:first-child, +td:first-child { + padding-left: 0; +} + +th:last-child, +td:last-child { + padding-right: 0; +} + +/* Spacing +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +button, +.button { + margin-bottom: 1rem; +} + +input, +textarea, +select, +fieldset { + margin-bottom: 1.5rem; +} + +/* pre, +blockquote, +dl, +figure, +table, +p, +ul, +ol, +form { + margin-bottom: 2.5rem; +} */ + +/* Utilities +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +.u-full-width { + width: 100%; + box-sizing: border-box; +} + +.u-max-full-width { + max-width: 100%; + box-sizing: border-box; +} + +.u-pull-right { + float: right; +} + +.u-pull-left { + float: left; +} + +/* Misc +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +hr { + margin-top: 3rem; + margin-bottom: 3.5rem; + border-width: 0; + border-top: 1px solid #E1E1E1; +} + +/* Clearing +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* Self Clearing Goodness */ +.container:after, +.row:after, +.u-cf { + content: ""; + display: table; + clear: both; +} + +/* Media Queries +–––––––––––––––––––––––––––––––––––––––––––––––––– */ +/* +Note: The best way to structure the use of media queries is to create the queries +near the relevant code. For example, if you wanted to change the styles for buttons +on small devices, paste the mobile query code up in the buttons section and style it +there. +*/ +/* Larger than mobile */ +@media (min-width: 400px) {} + +/* Larger than phablet (also point when grid becomes active) */ +@media (min-width: 550px) {} + +/* Larger than tablet */ +@media (min-width: 750px) {} + +/* Larger than desktop */ +@media (min-width: 1000px) {} + +/* Larger than Desktop HD */ +@media (min-width: 1200px) {} diff --git a/feed.json b/feed.json new file mode 100644 index 0000000..fb72770 --- /dev/null +++ b/feed.json @@ -0,0 +1,16 @@ +{ + "version": "https://jsonfeed.org/version/1", + "title": "Hexo", + "description": "", + "home_page_url": "https://tim.kicker.dev", + "items": [ + { + "id": "https://tim.kicker.dev/2023/05/18/whatsapp-analyze/", + "url": "https://tim.kicker.dev/2023/05/18/whatsapp-analyze/", + "title": "Data about data", + "date_published": "2023-05-18T14:26:18.000Z", + "content_html": "

I am a huge fan of gathering, analyzing and evaluating data. Creating statistics and colorful graphs just has something to it. But the interesting part is not necessarily the data itself, it’s the data about the data. How often does something occur, at which time and by whom are very important characteristics when it comes to creating patterns.

\n

For example, let’s look at the two weekday-graphs of two different WhatsApp-chats of mine.

\n

Hours Chat A

\n

\"hourchartA\"

\n

Hours Chat B

\n

\"hourchartB\"

\n

It is not that hard to figure out the difference between those two graphs. The amount of daily messages in A are pretty stable except Friday and Monday, which are two extremes. Maybe this could be about a friend group planning what they’re going to do on the weekend? The general quantity of messages are also lower as in figure B. The second chat also has a huge gap between Sunday and Saturday. Could this be a groupchat related to work? Or is it someone close who happens to live in the same house?

\n

You can see that it is possible to gather connections and create assumptions about certain topics without even looking at the data itself. Now let’s take a deeper look.

\n

Days Chat A

\n

\"heatmapA\"

\n

How interesting. We can see that the group is most active between the end of January till May and spikes again in October. If you happen to live in Austria, you probably now what that means. See most Austrian summer breaks for students last from June till the beginning of September while Christmas lasts from December till January. There is also one small break during November. You can clearly see that this could be a chat between friends who happen to be students but don’t have the same classes together. Those friends probably spend a lot of their free time together, which explains the lack of data during the breaks.

\n

Days Chat B

\n

\"heatmapB\"

\n

We can see that the amount of messages remains pretty stable. This could prove our theory of two people in the same household as true. The gap in August could be a planned vacation maybe?

\n

It would be pretty frighting if I told you all our assumptions were correct. Right? You may now probably recognize that metadata is a lot more valuable than you originally thought. But what conclusions can we draw from this new gained awareness?

\n

Most people rely on the encryption of their messaging apps. If no one can read my data then I am safe right? No. As we can see, an attacker does not need access your communication in order to gather valuable information.

\n

Just keep that in mind.

\n", + "tags": [] + } + ] +} \ No newline at end of file diff --git a/fonts/dm-serif-display-v4-latin-regular.eot b/fonts/dm-serif-display-v4-latin-regular.eot new file mode 100644 index 0000000..331cb92 Binary files /dev/null and b/fonts/dm-serif-display-v4-latin-regular.eot differ diff --git a/fonts/dm-serif-display-v4-latin-regular.svg b/fonts/dm-serif-display-v4-latin-regular.svg new file mode 100644 index 0000000..43837e4 --- /dev/null +++ b/fonts/dm-serif-display-v4-latin-regular.svg @@ -0,0 +1,404 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fonts/dm-serif-display-v4-latin-regular.ttf b/fonts/dm-serif-display-v4-latin-regular.ttf new file mode 100644 index 0000000..87a9bd0 Binary files /dev/null and b/fonts/dm-serif-display-v4-latin-regular.ttf differ diff --git a/fonts/dm-serif-display-v4-latin-regular.woff b/fonts/dm-serif-display-v4-latin-regular.woff new file mode 100644 index 0000000..5c7f475 Binary files /dev/null and b/fonts/dm-serif-display-v4-latin-regular.woff differ diff --git a/fonts/dm-serif-display-v4-latin-regular.woff2 b/fonts/dm-serif-display-v4-latin-regular.woff2 new file mode 100644 index 0000000..1e0a0fd Binary files /dev/null and b/fonts/dm-serif-display-v4-latin-regular.woff2 differ diff --git a/fonts/inter-v2-latin-regular.eot b/fonts/inter-v2-latin-regular.eot new file mode 100644 index 0000000..d77f8d2 Binary files /dev/null and b/fonts/inter-v2-latin-regular.eot differ diff --git a/fonts/inter-v2-latin-regular.svg b/fonts/inter-v2-latin-regular.svg new file mode 100644 index 0000000..84da31d --- /dev/null +++ b/fonts/inter-v2-latin-regular.svg @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fonts/inter-v2-latin-regular.ttf b/fonts/inter-v2-latin-regular.ttf new file mode 100644 index 0000000..3fedbc7 Binary files /dev/null and b/fonts/inter-v2-latin-regular.ttf differ diff --git a/fonts/inter-v2-latin-regular.woff b/fonts/inter-v2-latin-regular.woff new file mode 100644 index 0000000..2335e4a Binary files /dev/null and b/fonts/inter-v2-latin-regular.woff differ diff --git a/fonts/inter-v2-latin-regular.woff2 b/fonts/inter-v2-latin-regular.woff2 new file mode 100644 index 0000000..40a6ad2 Binary files /dev/null and b/fonts/inter-v2-latin-regular.woff2 differ diff --git a/images/epic-smiley.jpg b/images/epic-smiley.jpg new file mode 100644 index 0000000..51232c5 Binary files /dev/null and b/images/epic-smiley.jpg differ diff --git a/images/favicon.png b/images/favicon.png new file mode 100644 index 0000000..c52246b Binary files /dev/null and b/images/favicon.png differ diff --git a/images/teddy-bear-apple.webp b/images/teddy-bear-apple.webp new file mode 100644 index 0000000..573e31b Binary files /dev/null and b/images/teddy-bear-apple.webp differ diff --git a/images/thumbnail.jpg b/images/thumbnail.jpg new file mode 100644 index 0000000..0d28a0a Binary files /dev/null and b/images/thumbnail.jpg differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..690402e --- /dev/null +++ b/index.html @@ -0,0 +1,273 @@ + + + + + + + + + + + + + Hexo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+

+
🌑
+ + +

+
+ +
+

+ Hello World. +

+
+ +
+
+
+ Home + + + Blog + + + + About + + + + + Email + + +
+
+
+
+
+ +
+
+
+ +

I am Tim J. Kicker

+

A student and developer from Austria 🇦🇹

+

The purpose of this website is to give you a small overview about my projects, interests and opinions.

+
+
+ +

Recent Posts

+ + +
+ +
+

May 18, 2023

+
+ +
+ + +

All Posts

+ +
+ +
+

+ + + #opensource

+ +
+ + +
+ + + GitHub + + + + + + LinkedIn + + + + + + + +
+ +
+ +
+
+ +
+ +
+ + + + + + diff --git a/js/nanobar.min.js b/js/nanobar.min.js new file mode 100644 index 0000000..9acaa4d --- /dev/null +++ b/js/nanobar.min.js @@ -0,0 +1 @@ +(function(root){"use strict";var css=".nanobar{width:100%;height:4px;z-index:9999;top:0}.bar{width:0;height:100%;transition:height .3s;background:#000}";function addCss(){var s=document.getElementById("nanobarcss");if(s===null){s=document.createElement("style");s.type="text/css";s.id="nanobarcss";document.head.insertBefore(s,document.head.firstChild);if(!s.styleSheet)return s.appendChild(document.createTextNode(css));s.styleSheet.cssText=css}}function addClass(el,cls){if(el.classList)el.classList.add(cls);else el.className+=" "+cls}function createBar(rm){var el=document.createElement("div"),width=0,here=0,on=0,bar={el:el,go:go};addClass(el,"bar");function move(){var dist=width-here;if(dist<.1&&dist>-.1){place(here);on=0;if(width>=100){el.style.height=0;setTimeout(function(){rm(el)},300)}}else{place(width-dist/4);setTimeout(go,16)}}function place(num){width=num;el.style.width=width+"%"}function go(num){if(num>=0){here=num;if(!on){on=1;move()}}else if(on){move()}}return bar}function Nanobar(opts){opts=opts||{};var el=document.createElement("div"),applyGo,nanobar={el:el,go:function(p){applyGo(p);if(p>=100){init()}}};function rm(child){el.removeChild(child)}function init(){var bar=createBar(rm);el.appendChild(bar.el);applyGo=bar.go}addCss();addClass(el,"nanobar");if(opts.id)el.id=opts.id;if(opts.classname)addClass(el,opts.classname);if(opts.target){el.style.position="relative";opts.target.insertBefore(el,opts.target.firstChild)}else{el.style.position="fixed";document.getElementsByTagName("body")[0].appendChild(el)}init();return nanobar}if(typeof exports==="object"){module.exports=Nanobar}else if(typeof define==="function"&&define.amd){define([],function(){return Nanobar})}else{root.Nanobar=Nanobar}})(this); \ No newline at end of file diff --git a/rss.xml b/rss.xml new file mode 100644 index 0000000..a1d0323 --- /dev/null +++ b/rss.xml @@ -0,0 +1,35 @@ + + + + Hexo + https://tim.kicker.dev + + en + Thu, 18 May 2023 14:26:18 +0000 + Thu, 18 May 2023 14:26:18 +0000 + + https://tim.kicker.dev/2023/05/18/whatsapp-analyze/ + Data about data + https://tim.kicker.dev/2023/05/18/whatsapp-analyze/ + Thu, 18 May 2023 14:26:18 +0000 + + + +