commit c54d42b259cb8f82cc55cbc6c34a9e153c8bd1f9 Author: Wojciech Kwolek Date: Sun Sep 12 18:48:01 2021 +0200 initial diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..19cd2a1 --- /dev/null +++ b/config.toml @@ -0,0 +1,4 @@ +baseURL = 'http://example.org/' +languageCode = 'en-us' +title = 'Wojciech Kwolek' +theme = "kwolek" diff --git a/content/posts/2020-09-23_duolingo_helper.md b/content/posts/2020-09-23_duolingo_helper.md new file mode 100644 index 0000000..f429da9 --- /dev/null +++ b/content/posts/2020-09-23_duolingo_helper.md @@ -0,0 +1,32 @@ +--- +title: "A Duolingo helper to avoid skipping through corrections." +date: 2020-09-23T17:24:45+02:00 +draft: false +--- + + +I tend to go through [Duolingo](https://duolingo.com) lessons quite fast (if you do not know what Duolingo is, I recommend checking it out - it is quite a fun way to learn languages, and for free.) + +This results in me usually typing in the sentences at my 80 WPM (well, the average is probaly less, but I'm trying to train it to be more consistent), then quickly smashing Enter twice to first submit the sentence, and then accept the "Correct!" message. + +Sometimes, however, I make a mistake, and would like to read the correction before advancing further. Unfortunately, my monkey brain got trained to mash the Enter key twice to go as fast as possible to the next lessons. Aaand then I decided to fix that with my computer-y powers. + + +## Solution + +[A Tampermonkey script.](/content/duolingo-tampermonkey.js) + +It is a simple userscript for Tampermonkey, which catches all the Enter keypresses, and works as follows: + +* If you did the exercise correctly, the second enter gets you to the next one. +* If you made a mistake, the second Enter keypress is ignored, you can read the correction, and then press Enter again to advance. + +## Installation + +To install it you need to get the [Tampermonkey extension](https://www.tampermonkey.net), click on its icon, go to "Dashboard", then "Utilities", and you can paste the URL from below in the "Install from URL" field. + +``` +https://irth.pl/content/duolingo-tampermonkey.js +``` + +Enjoy! \ No newline at end of file diff --git a/content/posts/2021-01-09_reverse_pomodoro.md b/content/posts/2021-01-09_reverse_pomodoro.md new file mode 100644 index 0000000..43f1fa0 --- /dev/null +++ b/content/posts/2021-01-09_reverse_pomodoro.md @@ -0,0 +1,23 @@ +--- +title: "Reverse pomodoro." +date: 2021-01-09T17:32:00+02:00 +draft: false +--- +Hello 2021. + +I am an university student. I don't think I like being one, and around two weeks before the christmas break my brain decided to literally stop all the productivity. Couldn't even get myself to check what I am supposed to be doing/learning. + +This continued well into the christmas break, and only after the New Year's I came across a tweet that helped me break out of this productivity sinkhole loop, and I'd like to share it here because I'd be in much more trouble at uni if I didn't encounter this. + + +{{< tweet 1344018455347953665 >}} + +Go read her thread about this. It's just a few tweets, do so. + +The basic idea, however, is that you do pomodoro, but in reverse - do 5 minutes of work and 25 minutes of fun (or even much more!). + +The reasoning is, even 5 minutes is so so so much better than doing literally nothing. And the fun is actually fun, because you don't have hate yourself for being unproductive because it's part of the technique. + +{{< tweet 1344018462973181956 >}} + +Good luck. YMMV. \ No newline at end of file diff --git a/content/projects/Blag.md b/content/projects/Blag.md new file mode 100644 index 0000000..154a80f --- /dev/null +++ b/content/projects/Blag.md @@ -0,0 +1,14 @@ +--- +title: "Blag" +date: 2021-09-12T18:02:10+02:00 +draft: false +--- + +A static site (blog) generator written in Go, with optional Disqus and Google Analytics support. + +[View on Github](https://github.com/irth/blag) + +![XKCD 148](https://imgs.xkcd.com/comics/mispronouncing.png) + +[Source: XKCD](https://xkcd.com/148) + diff --git a/content/projects/Donethat.md b/content/projects/Donethat.md new file mode 100644 index 0000000..61bc8ad --- /dev/null +++ b/content/projects/Donethat.md @@ -0,0 +1,13 @@ +--- +title: "DoneTh.at" +date: 2021-09-12T18:06:12+02:00 +draft: false +projectName: donethat +--- + +[https://doneth.at](DoneTh.at) is a simple web app Flask that allows you to track your productivity more objectively, by keeping track of your accomplishments. + +It allows the user to assign points based on task difficulty, keep a daily goal and view statistics. + + +Git instance hosting the app is temporarily down. \ No newline at end of file diff --git a/content/projects/GopherNews.md b/content/projects/GopherNews.md new file mode 100644 index 0000000..bc2dfb5 --- /dev/null +++ b/content/projects/GopherNews.md @@ -0,0 +1,10 @@ +--- +title: "GopherNews" +date: 2021-09-12T17:59:35+02:00 +draft: false +--- + +A proxy that allows you to browse Hacker News using your favourite Gopher client, written in Go. + + +[View on Github](https://github.com/irth/gophernews) \ No newline at end of file diff --git a/content/projects/Together_for_Spotify.md b/content/projects/Together_for_Spotify.md new file mode 100644 index 0000000..474ed41 --- /dev/null +++ b/content/projects/Together_for_Spotify.md @@ -0,0 +1,16 @@ +--- +title: "Together for Spotify" +date: 2021-09-12T18:04:46+02:00 +draft: false +--- +A web app that allows two Spotify users to log in and find the cross section of their music libraries. It is then stored as a playlist, to which they can listen together. + +* Ruby on Rails 5 +* Tailwind.css +* Vue.js +* Capistrano + + +(Temporarily offline) + +[View on Github](https://github.com/irth/together) \ No newline at end of file diff --git a/content/top/about-me.md b/content/top/about-me.md new file mode 100644 index 0000000..cd19c56 --- /dev/null +++ b/content/top/about-me.md @@ -0,0 +1,6 @@ +--- +title: "About me" +date: 2021-09-12T17:12:35+02:00 +draft: false +--- +Hi! My name is Wojciech Kwolek, I am from Poland. I like coding, creating things, usually while listening to music. I sometimes roller-blade or ski. diff --git a/content/updates/2020-09-22_plans_for_DoneTh.at.md b/content/updates/2020-09-22_plans_for_DoneTh.at.md new file mode 100644 index 0000000..caa56cc --- /dev/null +++ b/content/updates/2020-09-22_plans_for_DoneTh.at.md @@ -0,0 +1,70 @@ +--- +title: "DoneTh.at: the why and the future." +date: 2020-09-22T17:15:30+02:00 +draft: false +project: donethat + +--- + +As some of you might know (because it is on my main website), I have recently built DoneTh.at: + +[https://doneth.at](https://doneth.at) + +The reasoning behind the project is that I noticed that I often feel like I waste my time a lot or am unproductive everyday. Even though that is true sometimes, usually it's just that I quickly forget what I accomplished during the day, and unless I have been working on something all day, I feel like I didn't do much. + +So, I made a simple website that allows me to track what I accomplished each day. Each accomplishement has a difficulty value assigned, which allows me to compare days, have daily goals and draw graphs. + +Originally, it was supposed to be an app that takes your TODOs from CalDAV or other services and draws a Github style activity graph based on how many tasks you complete. However, this had a few issues: + +* CalDAV is a PITA to work with. +* CalDAV doesn't support hand written TODOs, which I'll switch to once I get my reMarkable 2. +* You need to plan for each task ahead of time, no easy way to get points for something done without planning. +* Lot's of edge cases when syncing. + +Eventually, I came up with a cool domain name (DoneTh.at) and at that moment I decided to ditch the CalDAV sync idea and implement DoneTh.at instead. + + +## Future plans + +### Storing dates for the accomplishements and day-start-hour customisation +First, I need to refactor the code to use dates without time, because time has timezones and I do not want to handle this. + +The only point where actual time will be handled is when creating an accomplishement and then I'd like it to be as simple as possible: + +* Get the time in the user's configured timezone. +* Get just the date from that timestamp, without hours. +* Check what hour the user considers "start-of-day". +* If the time is before, set the day to the day before. +* Otherwise, set it to the day from the timestamp. + +Once the timezone and start-of-day hour is considered, the resulting day is saved in the database and I don't have to worry about the user changing the timezone or the hour later, as it won't affect historical data. + +This also solves a problem where I didn't know what timestamp to associate with accomplishements created from the edit view, for previous days. I do not want to ask the user for the exact time, as they might not know it, and I want the UX to be uncluttered. + +Allowing customising the hour that is considered the beginning of a new day would be useful for me and I'm sure for many others who also often do stuff in the night and go to sleep at 3 or 4 AM. The credit for the idea goes to the authors/contributors of GTimeLog which I got the idea from. + +[GTimeLog - a very nice open-source time tracker.](https://gtimelog.org) + +### Quests +Quests are kind of like TODOs - they are accomplishements, with associated difficulty, which you haven't done yet. You can add quests when you know you need to do something, and then when you eventually do it, just mark it as done and it is saved as an accomplishement. + +I plan of adding two types of quests - one-off and recurring. One-off quests are ordinary TODOs, recurring quests are for stuff like "Practice Dutch" which you need to do every day. + +I need to figure out how to add it without sacrificing the simplicity DoneTh.at currently has. + +### Daily goal +Allow to set a daily goal, and then the app would track your streak and show you how much you need to do to reach the goal. + +### Activity graph +Github style activity graph, but based on how much of the daily goal you did. + +(The daily target would be, I guess, around 50% color value, as ideally you would reach it every day, and having the graph clipped at that value would result in a kinda boring graph.) + +### Categories and advanced input parsing +Categories based on #hashtags in the accomplishement text. I also want to support changing the difficulty by writting stuff like "+30" in the input field. + + +### API +For apps and stuff. + +Currently DoneTh.at is 100% server-side rendered and works without JavaScript (it even mostly works with Lynx, except that it doesn't refresh after submitting forms, I'll need to fix that), and I think I want to keep it that way, but I'll see if I can extend it easily to support bearer token auth and JSON in requests and responses. \ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..2395019 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +hugo && rsync -avz --delete public/ zlomek.irth.pl:/srv/http/homepage/ \ No newline at end of file diff --git a/static/public-key.gpg b/static/public-key.gpg new file mode 100644 index 0000000..e3d4bdf --- /dev/null +++ b/static/public-key.gpg @@ -0,0 +1,135 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=uHZs +-----END PGP PUBLIC KEY BLOCK----- \ No newline at end of file diff --git a/themes/kwolek/LICENSE b/themes/kwolek/LICENSE new file mode 100644 index 0000000..e4483e2 --- /dev/null +++ b/themes/kwolek/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2021 YOUR_NAME_HERE + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/themes/kwolek/archetypes/default.md b/themes/kwolek/archetypes/default.md new file mode 100644 index 0000000..ac36e06 --- /dev/null +++ b/themes/kwolek/archetypes/default.md @@ -0,0 +1,2 @@ ++++ ++++ diff --git a/themes/kwolek/layouts/404.html b/themes/kwolek/layouts/404.html new file mode 100644 index 0000000..e69de29 diff --git a/themes/kwolek/layouts/_default/baseof.html b/themes/kwolek/layouts/_default/baseof.html new file mode 100644 index 0000000..5f8e2ec --- /dev/null +++ b/themes/kwolek/layouts/_default/baseof.html @@ -0,0 +1,11 @@ + + + {{- partial "head.html" . -}} + + {{- partial "header.html" . -}} +
+ {{- block "main" . }}{{- end }} +
+ {{- partial "footer.html" . -}} + + diff --git a/themes/kwolek/layouts/_default/list.html b/themes/kwolek/layouts/_default/list.html new file mode 100644 index 0000000..fb1430e --- /dev/null +++ b/themes/kwolek/layouts/_default/list.html @@ -0,0 +1,12 @@ +{{ define "main" }} +

{{ .Title }}

+{{ range .Paginator.Pages }} +

{{ .Title }}

+
{{ .Summary }}
+
+ See more... +
+{{ end }} +{{ template "_internal/pagination.html" . }} + +{{ end }} \ No newline at end of file diff --git a/themes/kwolek/layouts/_default/single.html b/themes/kwolek/layouts/_default/single.html new file mode 100644 index 0000000..495dd40 --- /dev/null +++ b/themes/kwolek/layouts/_default/single.html @@ -0,0 +1,29 @@ +{{ define "main" }} +

{{ .Title }}

+
+ {{ .Content | safeHTML }} +
+{{ if not (eq .Section "projects") }} +
+ {{ .Date }} +
+{{ end }} + +{{ if (isset .Params "projectname") }} + +{{ end }} +{{ end }} \ No newline at end of file diff --git a/themes/kwolek/layouts/index.html b/themes/kwolek/layouts/index.html new file mode 100644 index 0000000..960c567 --- /dev/null +++ b/themes/kwolek/layouts/index.html @@ -0,0 +1,67 @@ +{{ define "main" }} +
+ {{ if (where .Site.RegularPages "Section" "top") }} + {{ range where .Site.RegularPages "Section" "top" }} +

{{ .Title }}

+
+ {{ .Content }} +
+ {{ end }} + {{ end }} +
+
+
+

Recent posts

+
    + {{ range (first 10 (where .Site.RegularPages "Section" "posts")) }} +
  • +
    + {{ time.Format "2006-01-02" .Date }} +
    + +
  • + {{ end }} +
+ +
+ {{ if (where .Site.RegularPages "Section" "updates") }} +
+

Project updates

+
    + {{ range (first 10 (where .Site.RegularPages "Section" "updates")) }} +
  • +
    + {{ time.Format "2006-01-02" .Date }} +
    + +
  • + {{ end }} +
+ +
+ {{ end }} +
+ +{{ if (where .Site.RegularPages "Section" "projects") }} +
+

Projects

+ {{ range where .Site.RegularPages "Section" "projects" }} +
+

{{ .Title }}

+
+ {{ .Summary }} +
+

See more...

+
+ {{ end }} +
+{{ end }} +{{ end }} \ No newline at end of file diff --git a/themes/kwolek/layouts/partials/footer.html b/themes/kwolek/layouts/partials/footer.html new file mode 100644 index 0000000..e69de29 diff --git a/themes/kwolek/layouts/partials/head.html b/themes/kwolek/layouts/partials/head.html new file mode 100644 index 0000000..728d072 --- /dev/null +++ b/themes/kwolek/layouts/partials/head.html @@ -0,0 +1,9 @@ + + + + + {{ $title := print .Site.Title " | " .Title }} + {{ if .IsHome }}{{ $title = .Site.Title }}{{ end }} + {{ $title }} + + \ No newline at end of file diff --git a/themes/kwolek/layouts/partials/header.html b/themes/kwolek/layouts/partials/header.html new file mode 100644 index 0000000..eda6bf7 --- /dev/null +++ b/themes/kwolek/layouts/partials/header.html @@ -0,0 +1,9 @@ +
+

{{ .Site.Title }}

+
+ + + + +
+
\ No newline at end of file diff --git a/themes/kwolek/static/content/duolingo-tampermonkey.js b/themes/kwolek/static/content/duolingo-tampermonkey.js new file mode 100644 index 0000000..c1fa7b6 --- /dev/null +++ b/themes/kwolek/static/content/duolingo-tampermonkey.js @@ -0,0 +1,37 @@ +// ==UserScript== +// @name Duolingo mistake helper +// @description Requires an additional enter click to move to the next exercise when you have made a mistake. +// +// @run-at document-start +// @include https://www.duolingo.com/* +// @grant none +// ==/UserScript== + +var checking = 0; + +function advance() { + document.querySelector("button[data-test=player-next]").click() +} + + +(window.opera ? document.body : document).addEventListener('keydown', function(e) { + if (e.keyCode == 13) { + e.cancelBubble = true; + e.stopImmediatePropagation(); + e.preventDefault(); + if(checking === 0) { + checking = 1; + advance() + } else if(checking === 1) { + var correct = document.querySelector("[data-test*=blame-incorrect]") == null + if(correct) advance(); + else { + checking = 2; + } + } else if(checking === 2) { + checking = 0; + advance() + } + } + return false; +}, !window.opera); \ No newline at end of file diff --git a/themes/kwolek/static/css/style.css b/themes/kwolek/static/css/style.css new file mode 100644 index 0000000..fbb7195 --- /dev/null +++ b/themes/kwolek/static/css/style.css @@ -0,0 +1,221 @@ +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@200;400;500&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@200;500&display=swap'); + +body { + max-width: 768px; + margin: 0 auto; + padding-left: 1em; + padding-right: 2em; + color: #fdf6ff; + background-color: #27273c; + margin-bottom: 5em; + font-family: 'Montserrat', sans-serif; +} + +header { + text-align: center; + margin-top: 5em; +} + +h2 > a, h3 > a, h4 > a, h5 > a, +h2,h3,h4,h5 { + color: #bcadff; + font-weight: 500; + border-bottom: solid 2px #343850; + padding-bottom: .2em; +} + + +header a { + color: #fdf6ff; +} + +header .icons a:hover { + opacity: 0.7; +} + +header > h1 { + font-size: 4em; + font-weight: 200; + margin-bottom: 1.7rem; +} + +header > .icons > a { + margin: 0 .5em; + font-size: 1.2em; +} + +#content { + margin-top: 3em; +} + +#homepage { + display: flex; + align-content: stretch; +} + +#recent_posts, #project_updates { + flex-basis: 0px; + flex-grow: 1; +} + +a { + text-decoration: none; + color: #00e3ff; +} + +a:hover { + text-decoration: underline; +} + +ul li { + margin-bottom: 0.4em; +} + +h2 { + margin-bottom: 0.4em;; + margin-top: 1.0em; + font-size: 1.7em; +} + +h3 { + margin-bottom: 0.5em; +} + +h4 { + margin-bottom: 0.5em; +} + +ul.postList { + list-style: none; + padding-left: 0em; +} + +p { + margin-top: 0.2em; + margin-bottom: 1em; + text-align: justify; +} + +.meta { + font-size: .8em; + opacity: 0.7; +} + +#recent_posts { + margin-right: 1em; +} + +#project_updates { + margin-left: 1em; +} + +@media (max-width: 768px) { + #homepage { + display: block; + } + #recent_posts { + margin-right: 0; + } + #project_updates { + margin-left: 0; + } +} + + +ul.pagination { + border-left: none; + border-top: solid 2px #343850; + padding-top: 0.5em; + font-size: 1.2em; + margin: 0 auto; + max-width: 20em; + margin-top: 3em; + display: flex; + justify-content: center; + opacity: 0.8; +} + +ul.pagination li { + margin: 0 .5em; +} + +ul.pagination .active { + font-weight: bold; +} + +ul.pagination a { + color: #fdf6ff; +} + +ul.pagination .active a { + color: #bcadff; +} + +ul.pagination .disabled a { + color: #343850; + cursor: default; +} + +ul.pagination .disabled a:hover { + text-decoration: none; +} + +h2.listTitle { + text-align: center; + font-size: 2.5em; + margin-bottom: 1em; + border-bottom: none; +} + +h3.listItem { + font-size: 1.5em; +} + +h2.postTitle { + font-size: 2em; + margin-bottom: .7em; +} + +ul.projectUpdateList { + margin-top: 2em; +} + +.twitter-tweet { + padding-top: 0.2em; + padding-bottom: 0.6em; + padding-left: 0.5em; +} + +.postList li { + display: flex; +} + +.postList .timestamp { + flex-shrink: 0; + margin-right: .5em; + font-size: 0.9em; +} + +pre, +.postList .timestamp { + font-family: 'Source Code Pro', monospace; + font-weight: 200; +} + +pre { + font-size: 1.2em; +} + +.seeAll { + text-align: right; + padding-right: .5em; +} + +.project { + margin-bottom: 1em; +} + +.project h3 { + font-size: 1.2em; +} \ No newline at end of file diff --git a/themes/kwolek/theme.toml b/themes/kwolek/theme.toml new file mode 100644 index 0000000..7728c48 --- /dev/null +++ b/themes/kwolek/theme.toml @@ -0,0 +1,21 @@ +# theme.toml template for a Hugo theme +# See https://github.com/gohugoio/hugoThemes#themetoml for an example + +name = "Kwolek" +license = "MIT" +licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE" +description = "" +homepage = "http://example.com/" +tags = [] +features = [] +min_version = "0.41.0" + +[author] + name = "" + homepage = "" + +# If porting an existing theme +[original] + name = "" + homepage = "" + repo = ""