diff options
50 files changed, 3036 insertions, 221 deletions
diff --git a/assets/more/bookmarks.yml b/assets/more/bookmarks.yml index cf8f44b..64a3268 100644 --- a/assets/more/bookmarks.yml +++ b/assets/more/bookmarks.yml @@ -343,3 +343,15 @@ bookmarks: host: learncodethehardway.com source_url: source_host: +- url: https://c.eev.ee/doom-text-generator + title: Doom Text Generator + date: '2025-01-05' + host: c.eev.ee + source_url: + source_host: +- url: https://www.404media.co/instagram-begins-randomly-showing-users-ai-generated-images-of-themselves/ + title: Instagram Begins Randomly Showing Users AI-Generated Images of Themselves + date: '2025-01-07' + host: 404media.co + source_url: https://toot.cat/@devopscats/113786476817881132 + source_host: toot.cat diff --git a/content-org/star-trek.org b/content-org/star-trek.org index 819cb17..6bb88dc 100644 --- a/content-org/star-trek.org +++ b/content-org/star-trek.org @@ -1542,29 +1542,36 @@ Survival is insufficient Unsatisfactory. +*** DONE Star Trek: Voyager 06x03 - Barge of the Dead +CLOSED: [2025-01-07 Tue 20:47] +:PROPERTIES: +:EXPORT_FILE_NAME: 06x03-barge-of-the-dead +:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :abstract My mini review +:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :episode_id 6x03 +:END: + +B'Elanna starts having visions where she is on the Barge of the Dead, where dishonored Klingon souls are placed on their way to hell. -*** TODO Star Trek: Voyager 06x03 Barge of the Dead -B'Elanna starts having visions where she is on the Barge of the Dead, where dishonored Klingon souls are placed **** Impressions -I am rarely fond of B'Elanna's plots, but this is one to be better ones. +I am rarely fond of B'Elanna's plots, but this is one of the better ones. We often see her struggle with her Klingon heritage, but rarely we see her so vulnerable. -It's not /her/ who is punished, but her mother. +It's not /her/ who is punished for her sins, but it's her mother. A much bigger deal if you ask me. -Though he vision, we see twisted versions of the crew. +Though her visions, we see twisted versions of the crew. Everyone is becoming her demon, making her feel alienated and vulnerable. Seeing a Klingon in this position? Amazing. -Sadly, this episode is /yet another/ one were authors are playing with viewer but it's pointless. +Sadly, this episode is /yet another/ one were authors are playing with viewer, but it's pointless. Maybe she is dead? Maybe the entire Voyager was just a dream? Well, this is episode 223 of /ST:V/ so of course it's not. -Such plot device make for an interesting story when you look at it though the lens of single episode, it doesn't work in the context of the entire series. +Such plot device make for an interesting story when you look at it though the lens of single episode, but it doesn't work in the context of the entire series. Finding B'Elanna confused was great, but this puts me in the viewer's position. -I am not taking any part in the story, as I already know it. +I am not taking any part in the story, as I already know it how it will end. /Barge of the Dead/ marks the moment when Ronald Moore and Bryan Fuller gave up. The story was originally pitched as an episode of /Deep Space 9/ (funny to remember that those shows overlapped), but it was rejected. @@ -1572,8 +1579,78 @@ As we see, it became part of /Voyage/ but the duo felt that it's time to move on Voyager was not what they wanted - they had little creative control, and wanted more multi-episodes stories. Looking at their careers, they sure /made it/. Moore created the great remake of /Battlestar Galactica/ and Fuller even returned to modern Star Trek. - **** Doctor Factor Unsatisfactory. + + +*** TODO Star Trek: Voyager 06x04 - Tinker, Tenor, Doctor, Spy +:PROPERTIES: +:EXPORT_FILE_NAME: 06x04-tinker-tenor-doctor-spy +:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :abstract My mini review +:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :episode_id 6x04 +:END: + +The Doctor alters his program and starts to daydream. + +**** Impressions + +While I always love a good Doctor's epiode, this one easily takes the cake. +We've got two stories putting him the episode. + +The serious one, where an alien race is threating the ship and only Doctor can communicate with them (and therefore save the day), while entertaining, is only small part of why I loved it so much. +The other is full on commedy, where Doctor is living his own desires and dreams. +He is the hero of the crew, a lover, or the capitan. +He is getting all the respect he desires. +I burst out laughing here more than I had in ages. + +The episode was initally to be about Neelix, and I think both characters earned it. +Neelix is by far my least favorite /current/ crewmember, as he very rarely has anything significant to do. +He is not funny, he is not memorable. +More of a pet than a character, but sometimes we see his aspirations. +I'd love if they played more with Neelix, as the way it is, Doctor is lovable underdog of the crew. + +Great episode, will watch again. + +**** Doctor Factor + +Full marks here. +It's doctor at his best. + + +*** TODO Star Trek: Voyager 06x05 - Alice +:PROPERTIES: +:EXPORT_FILE_NAME: 06x05-alice +:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :abstract My mini review +:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :episode_id 6x05 +:END: + +Voyager meets a traded of used goods. +Amongst supplies and waste, a lone ship is found. +Paris falls in love with it, and gets himself in a bit of kerfuffle. + +**** Impressions + +One thing I really don't get about the series is how not alien the alien quadrant is. +Very rarely we see anything the crew find in it's path home that is not a quick look at to understand. +Here we see a completely unknown ship, built but some unknown race using a perhaps unknown technology. +Somehow Paris ret... ok, it's not that bad. +But Paris manages to asses it's value, to fix it, to learn how to use. +There is a neuro-link interface which allows the pilot to interact with the ship just with thought, but let's not worry about making it work. +Miles O'Brien already had an experience with something alike, and it went great. +He may have been scarred for life, but he is still there! +(At least to the best knowlege of the Crew. +He might have as well ascended to a lighting beaing at this point). +And while I get that all Treks are not about the SciFi elements, but about the humans, sometimes it's just a bit to much. + +A little risk assesment would go a long way, but it's Paris so of course he will YOLO it. +To surprise of none one (outside of Voyager) it doesn't go well, and we learn that the ship is sentient. +They have a short affair together and soon the ship decides to kill B'Ellana. +Now this I get. +Paris is reckless and some else is to pay the price. +That's relatable. + +That's also the plot of King's /Carrie/, but I don't care. +I loved the episode, as it played marvelously with Paris character. +It uses all his weaknesses through most of the story, only to remind us why we like him by the end. diff --git a/content/star-trek/voy/06x03-barge-of-the-dead.md b/content/star-trek/voy/06x03-barge-of-the-dead.md new file mode 100644 index 0000000..8a0ffd9 --- /dev/null +++ b/content/star-trek/voy/06x03-barge-of-the-dead.md @@ -0,0 +1,53 @@ ++++ +title = "Star Trek: Voyager 06x03 - Barge of the Dead" +author = ["Michał Sapka"] +date = 2025-01-07T20:47:00+01:00 +categories = ["star-trek", "voyager"] +draft = false +weight = 3002 +image_dir = "star-trek" +image_max_width = 575 +hasNavSection = "st-voy-episodes" +abstract = "My mini review" +episode_id = "6x03" +[menu] + [menu.star-trek] + weight = 3002 + identifier = "star-trek-voyager-06x03-barge-of-the-dead" + parent = "voy" ++++ + +B'Elanna starts having visions where she is on the Barge of the Dead, where dishonored Klingon souls are placed on their way to hell. + + +## Impressions {#impressions} + +I am rarely fond of B'Elanna's plots, but this is one of the better ones. +We often see her struggle with her Klingon heritage, but rarely we see her so vulnerable. +It's not _her_ who is punished for her sins, but it's her mother. +A much bigger deal if you ask me. + +Though her visions, we see twisted versions of the crew. +Everyone is becoming her demon, making her feel alienated and vulnerable. +Seeing a Klingon in this position? +Amazing. + +Sadly, this episode is _yet another_ one were authors are playing with viewer, but it's pointless. +Maybe she is dead? +Maybe the entire Voyager was just a dream? +Well, this is episode 223 of _ST:V_ so of course it's not. +Such plot device make for an interesting story when you look at it though the lens of single episode, but it doesn't work in the context of the entire series. +Finding B'Elanna confused was great, but this puts me in the viewer's position. +I am not taking any part in the story, as I already know it how it will end. + +_Barge of the Dead_ marks the moment when Ronald Moore and Bryan Fuller gave up. +The story was originally pitched as an episode of _Deep Space 9_ (funny to remember that those shows overlapped), but it was rejected. +As we see, it became part of _Voyage_ but the duo felt that it's time to move on. +Voyager was not what they wanted - they had little creative control, and wanted more multi-episodes stories. +Looking at their careers, they sure _made it_. +Moore created the great remake of _Battlestar Galactica_ and Fuller even returned to modern Star Trek. + + +## Doctor Factor {#doctor-factor} + +Unsatisfactory. diff --git a/new/.#.rubocop b/new/.#.rubocop new file mode 120000 index 0000000..0f72703 --- /dev/null +++ b/new/.#.rubocop @@ -0,0 +1 @@ +mms@voyager.local.6355:1735980208
\ No newline at end of file diff --git a/new/.#.rubocop_todo.yml b/new/.#.rubocop_todo.yml new file mode 120000 index 0000000..0f72703 --- /dev/null +++ b/new/.#.rubocop_todo.yml @@ -0,0 +1 @@ +mms@voyager.local.6355:1735980208
\ No newline at end of file diff --git a/new/.rubocop.yml b/new/.rubocop.yml new file mode 100644 index 0000000..9975492 --- /dev/null +++ b/new/.rubocop.yml @@ -0,0 +1,15 @@ +AllCops: + NewCops: enable + +Metrics/MethodLength: + Max: 30 + +Metrics/ParameterLists: + Enabled: false + +Naming/HeredocDelimiterNaming: + Enabled: false + +Style/Documentation: + Enabled: false + diff --git a/new/Gemfile b/new/Gemfile index 547b868..a4206aa 100644 --- a/new/Gemfile +++ b/new/Gemfile @@ -1,8 +1,10 @@ # frozen_string_literal: true -source "https://rubygems.org" +source 'https://rubygems.org' -gem "erb" -gem "rspec" -gem "rss" -gem "webrick" +gem 'erb' +gem 'rspec' +gem 'rss' +gem 'rsync' +gem 'rubocop' +gem 'webrick' diff --git a/new/Gemfile.lock b/new/Gemfile.lock index d610cfd..74b8aa8 100644 --- a/new/Gemfile.lock +++ b/new/Gemfile.lock @@ -1,10 +1,20 @@ GEM remote: https://rubygems.org/ specs: + ast (2.4.2) cgi (0.4.1) diff-lcs (1.5.1) erb (4.0.4) cgi (>= 0.3.3) + json (2.9.1) + language_server-protocol (3.17.0.3) + parallel (1.26.3) + parser (3.3.6.0) + ast (~> 2.4.1) + racc + racc (1.8.1) + rainbow (3.1.1) + regexp_parser (2.10.0) rexml (3.4.0) rspec (3.13.0) rspec-core (~> 3.13.0) @@ -21,6 +31,23 @@ GEM rspec-support (3.13.2) rss (0.3.1) rexml + rsync (1.0.9) + rubocop (1.69.2) + json (~> 2.3) + language_server-protocol (>= 3.17.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.36.2, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.37.0) + parser (>= 3.3.1.0) + ruby-progressbar (1.13.0) + unicode-display_width (3.1.3) + unicode-emoji (~> 4.0, >= 4.0.4) + unicode-emoji (4.0.4) webrick (1.9.1) PLATFORMS @@ -31,6 +58,8 @@ DEPENDENCIES erb rspec rss + rsync + rubocop webrick BUNDLED WITH diff --git a/new/bin/builder.rb b/new/bin/builder.rb index 47195b2..7172cf8 100644 --- a/new/bin/builder.rb +++ b/new/bin/builder.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + require 'optparse' -require_relative "../lib/crys" -require_relative "mixins/splash.rb" +require_relative '../lib/crys' +require_relative 'mixins/splash' Options = Struct.new(:filepath) @options = Options.new @@ -12,24 +14,35 @@ OptionParser.new do |opts| opts.on('-fPATH', '--file=PATH', 'File path') do |n| @options[:filepath] = n end -end.parse! + opts.on('-a', '--all', 'Process all files') do |_v| + @options[:filepath] = :all + end +end.parse! module Crys class BuilderRunner - - def initialize(file_path:, image_dir:, output_dir:, builder_class:) + def initialize(file_path:, image_dir:, output_dir:, builder_class:, batch_builder_class:, theme_dir:, pages_db:) @file_path = file_path @output_dir = output_dir @builder_class = builder_class + @batch_builder_class = batch_builder_class @image_dir = image_dir + @theme_dir = theme_dir + @pages_db = pages_db end - def run + def run + if file_path == :all + batch_builder_class.new(pages_db: pages_db, output_dir: output_dir, image_dir: image_dir, + builder_class: builder_class).build + else builder_class.new(file_path: file_path, output_dir: output_dir, image_dir: image_dir).build end + end private - attr_reader :builder_class, :file_path, :output_dir, :image_dir + + attr_reader :builder_class, :file_path, :output_dir, :image_dir, :batch_builder_class, :theme_dir, :pages_db end end diff --git a/new/bin/deployer.rb b/new/bin/deployer.rb new file mode 100644 index 0000000..4b6610c --- /dev/null +++ b/new/bin/deployer.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require_relative '../lib/crys' +require_relative 'mixins/splash' + +module Crys + class DeployerRunner + def initialize(source:, dest:) + @source = source + @dest = dest + end + + def run + Crys::Deployer.new(source: @source, dest: @dest).run + end + end +end diff --git a/new/bin/mixins/splash.rb b/new/bin/mixins/splash.rb index 04cdaca..ad73f0f 100644 --- a/new/bin/mixins/splash.rb +++ b/new/bin/mixins/splash.rb @@ -1,80 +1,81 @@ +# frozen_string_literal: true + module Crys module Splash - SPLASH_1 = <<-HEREDOC - ▄████▄ ██▀███ ▓██ ██▓ ██████ ██████ ██▓▄▄▄█████▓▓█████ -▒██▀ ▀█ ▓██ ▒ ██▒ ▒██ ██▒▒██ ▒ ▒██ ▒ ▓██▒▓ ██▒ ▓▒▓█ ▀ -▒▓█ ▄ ▓██ ░▄█ ▒ ▒██ ██░░ ▓██▄ ░ ▓██▄ ▒██▒▒ ▓██░ ▒░▒███ -▒▓▓▄ ▄██▒▒██▀▀█▄ ░ ▐██▓░ ▒ ██▒ ▒ ██▒░██░░ ▓██▓ ░ ▒▓█ ▄ -▒ ▓███▀ ░░██▓ ▒██▒ ░ ██▒▓░▒██████▒▒▒██████▒▒░██░ ▒██▒ ░ ░▒████▒ -░ ░▒ ▒ ░░ ▒▓ ░▒▓░ ██▒▒▒ ▒ ▒▓▒ ▒ ░▒ ▒▓▒ ▒ ░░▓ ▒ ░░ ░░ ▒░ ░ - ░ ▒ ░▒ ░ ▒░ ▓██ ░▒░ ░ ░▒ ░ ░░ ░▒ ░ ░ ▒ ░ ░ ░ ░ ░ -░ ░░ ░ ▒ ▒ ░░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░ -░ ░ ░ ░ ░ ░ ░ ░ ░ ░ -░ ░ ░ -HEREDOC + SPLASH_1 = <<~HEREDOC + ▄████▄ ██▀███ ▓██ ██▓ ██████ ██████ ██▓▄▄▄█████▓▓█████#{' '} + ▒██▀ ▀█ ▓██ ▒ ██▒ ▒██ ██▒▒██ ▒ ▒██ ▒ ▓██▒▓ ██▒ ▓▒▓█ ▀#{' '} + ▒▓█ ▄ ▓██ ░▄█ ▒ ▒██ ██░░ ▓██▄ ░ ▓██▄ ▒██▒▒ ▓██░ ▒░▒███#{' '} + ▒▓▓▄ ▄██▒▒██▀▀█▄ ░ ▐██▓░ ▒ ██▒ ▒ ██▒░██░░ ▓██▓ ░ ▒▓█ ▄#{' '} + ▒ ▓███▀ ░░██▓ ▒██▒ ░ ██▒▓░▒██████▒▒▒██████▒▒░██░ ▒██▒ ░ ░▒████▒ + ░ ░▒ ▒ ░░ ▒▓ ░▒▓░ ██▒▒▒ ▒ ▒▓▒ ▒ ░▒ ▒▓▒ ▒ ░░▓ ▒ ░░ ░░ ▒░ ░ + ░ ▒ ░▒ ░ ▒░ ▓██ ░▒░ ░ ░▒ ░ ░░ ░▒ ░ ░ ▒ ░ ░ ░ ░ ░ + ░ ░░ ░ ▒ ▒ ░░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░#{' '} + ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ + ░ ░ ░#{' '} + HEREDOC + + SPLASH_2 = <<~HEREDOC + _/_/_/ _/_/_/ _/ _/#{' '} + _/ _/ _/_/ _/ _/ _/_/_/ _/ _/_/_/_/ _/_/#{' '} + _/ _/_/ _/ _/ _/_/ _/_/ _/ _/ _/_/_/_/#{' '} + _/ _/ _/ _/ _/_/ _/ _/ _/ _/#{' '} + _/_/_/ _/ _/_/_/ _/_/_/ _/_/_/ _/ _/_/ _/_/_/#{' '} + _/#{' '} + _/_/#{' '} + HEREDOC - SPLASH_2 = <<-HEREDOC - _/_/_/ _/_/_/ _/ _/ - _/ _/ _/_/ _/ _/ _/_/_/ _/ _/_/_/_/ _/_/ - _/ _/_/ _/ _/ _/_/ _/_/ _/ _/ _/_/_/_/ -_/ _/ _/ _/ _/_/ _/ _/ _/ _/ - _/_/_/ _/ _/_/_/ _/_/_/ _/_/_/ _/ _/_/ _/_/_/ - _/ - _/_/ -HEREDOC - SPLASH_3 = <<-HEREDOC @@@@@@@ @@@@@@@ @@@ @@@ @@@@@@ @@@@@@ @@@ @@@@@@@ @@@@@@@@ - !@@ @@! @@@ @@! !@@ !@@ !@@ @@! @@! @@! - !@! @!@!!@! !@!@! !@@!! !@@!! !!@ @!! @!!!:! - :!! !!: :!! !!: !:! !:! !!: !!: !!: + !@@ @@! @@@ @@! !@@ !@@ !@@ @@! @@! @@!#{' '} + !@! @!@!!@! !@!@! !@@!! !@@!! !!@ @!! @!!!:!#{' '} + :!! !!: :!! !!: !:! !:! !!: !!: !!:#{' '} :: :: : : : : .: ::.: : ::.: : : : : :: ::: -HEREDOC + HEREDOC - SPLASH_4 = <<-HEREDOC - ██████╗██████╗ ██╗ ██╗███████╗███████╗██╗████████╗███████╗ -██╔════╝██╔══██╗╚██╗ ██╔╝██╔════╝██╔════╝██║╚══██╔══╝██╔════╝ -██║ ██████╔╝ ╚████╔╝ ███████╗███████╗██║ ██║ █████╗ -██║ ██╔══██╗ ╚██╔╝ ╚════██║╚════██║██║ ██║ ██╔══╝ -╚██████╗██║ ██║ ██║ ███████║███████║██║ ██║ ███████╗ - ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚══════╝ -HEREDOC + SPLASH_4 = <<~HEREDOC + ██████╗██████╗ ██╗ ██╗███████╗███████╗██╗████████╗███████╗ + ██╔════╝██╔══██╗╚██╗ ██╔╝██╔════╝██╔════╝██║╚══██╔══╝██╔════╝ + ██║ ██████╔╝ ╚████╔╝ ███████╗███████╗██║ ██║ █████╗#{' '} + ██║ ██╔══██╗ ╚██╔╝ ╚════██║╚════██║██║ ██║ ██╔══╝#{' '} + ╚██████╗██║ ██║ ██║ ███████║███████║██║ ██║ ███████╗ + ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚══════╝ + HEREDOC - SPLASH_5 = <<-HEREDOC - █████████ █████████ ███ █████ - ███░░░░░███ ███░░░░░███ ░░░ ░░███ - ███ ░░░ ████████ █████ ████ █████ ░███ ░░░ ████ ███████ ██████ -░███ ░░███░░███░░███ ░███ ███░░ ░░█████████ ░░███ ░░░███░ ███░░███ -░███ ░███ ░░░ ░███ ░███ ░░█████ ░░░░░░░░███ ░███ ░███ ░███████ -░░███ ███ ░███ ░███ ░███ ░░░░███ ███ ░███ ░███ ░███ ███░███░░░ - ░░█████████ █████ ░░███████ ██████ ░░█████████ █████ ░░█████ ░░██████ - ░░░░░░░░░ ░░░░░ ░░░░░███ ░░░░░░ ░░░░░░░░░ ░░░░░ ░░░░░ ░░░░░░ - ███ ░███ - ░░██████ - ░░░░░░ -HEREDOC + SPLASH_5 = <<~HEREDOC + █████████ █████████ ███ █████#{' '} + ███░░░░░███ ███░░░░░███ ░░░ ░░███#{' '} + ███ ░░░ ████████ █████ ████ █████ ░███ ░░░ ████ ███████ ██████#{' '} + ░███ ░░███░░███░░███ ░███ ███░░ ░░█████████ ░░███ ░░░███░ ███░░███ + ░███ ░███ ░░░ ░███ ░███ ░░█████ ░░░░░░░░███ ░███ ░███ ░███████#{' '} + ░░███ ███ ░███ ░███ ░███ ░░░░███ ███ ░███ ░███ ░███ ███░███░░░#{' '} + ░░█████████ █████ ░░███████ ██████ ░░█████████ █████ ░░█████ ░░██████#{' '} + ░░░░░░░░░ ░░░░░ ░░░░░███ ░░░░░░ ░░░░░░░░░ ░░░░░ ░░░░░ ░░░░░░#{' '} + ███ ░███#{' '} + ░░██████#{' '} + ░░░░░░#{' '} + HEREDOC - SPLASH_6 = <<-HEREDOC - ▄▀▄▄▄▄ ▄▀▀▄▀▀▀▄ ▄▀▀▄ ▀▀▄ ▄▀▀▀▀▄ ▄▀▀▀▀▄ ▄▀▀█▀▄ ▄▀▀▀█▀▀▄ ▄▀▀█▄▄▄▄ -█ █ ▌ █ █ █ █ ▀▄ ▄▀ █ █ ▐ █ █ ▐ █ █ █ █ █ ▐ ▐ ▄▀ ▐ -▐ █ ▐ █▀▀█▀ ▐ █ ▀▄ ▀▄ ▐ █ ▐ ▐ █ █▄▄▄▄▄ - █ ▄▀ █ █ ▀▄ █ ▀▄ █ █ █ █ ▌ - ▄▀▄▄▄▄▀ █ █ ▄▀ █▀▀▀ █▀▀▀ ▄▀▀▀▀▀▄ ▄▀ ▄▀▄▄▄▄ -█ ▐ ▐ ▐ █ ▐ ▐ █ █ █ █ ▐ -▐ ▐ ▐ ▐ ▐ ▐ -HEREDOC - - SPLASH_7 = <<-HEREDOC -:'######::'########::'##:::'##::'######:::'######::'####:'########:'########: -'##... ##: ##.... ##:. ##:'##::'##... ##:'##... ##:. ##::... ##..:: ##.....:: - ##:::..:: ##:::: ##::. ####::: ##:::..:: ##:::..::: ##::::: ##:::: ##::::::: - ##::::::: ########::::. ##::::. ######::. ######::: ##::::: ##:::: ######::: - ##::::::: ##.. ##:::::: ##:::::..... ##::..... ##:: ##::::: ##:::: ##...:::: - ##::: ##: ##::. ##::::: ##::::'##::: ##:'##::: ##:: ##::::: ##:::: ##::::::: -. ######:: ##:::. ##:::: ##::::. ######::. ######::'####:::: ##:::: ########: -:......:::..:::::..:::::..::::::......::::......:::....:::::..:::::........:: -HEREDOC + SPLASH_6 = <<~HEREDOC + ▄▀▄▄▄▄ ▄▀▀▄▀▀▀▄ ▄▀▀▄ ▀▀▄ ▄▀▀▀▀▄ ▄▀▀▀▀▄ ▄▀▀█▀▄ ▄▀▀▀█▀▀▄ ▄▀▀█▄▄▄▄#{' '} + █ █ ▌ █ █ █ █ ▀▄ ▄▀ █ █ ▐ █ █ ▐ █ █ █ █ █ ▐ ▐ ▄▀ ▐#{' '} + ▐ █ ▐ █▀▀█▀ ▐ █ ▀▄ ▀▄ ▐ █ ▐ ▐ █ █▄▄▄▄▄#{' '} + █ ▄▀ █ █ ▀▄ █ ▀▄ █ █ █ █ ▌#{' '} + ▄▀▄▄▄▄▀ █ █ ▄▀ █▀▀▀ █▀▀▀ ▄▀▀▀▀▀▄ ▄▀ ▄▀▄▄▄▄#{' '} + █ ▐ ▐ ▐ █ ▐ ▐ █ █ █ █ ▐#{' '} + ▐ ▐ ▐ ▐ ▐ ▐#{' '} + HEREDOC + SPLASH_7 = <<~HEREDOC + :'######::'########::'##:::'##::'######:::'######::'####:'########:'########: + '##... ##: ##.... ##:. ##:'##::'##... ##:'##... ##:. ##::... ##..:: ##.....:: + ##:::..:: ##:::: ##::. ####::: ##:::..:: ##:::..::: ##::::: ##:::: ##::::::: + ##::::::: ########::::. ##::::. ######::. ######::: ##::::: ##:::: ######::: + ##::::::: ##.. ##:::::: ##:::::..... ##::..... ##:: ##::::: ##:::: ##...:::: + ##::: ##: ##::. ##::::: ##::::'##::: ##:'##::: ##:: ##::::: ##:::: ##::::::: + . ######:: ##:::. ##:::: ##::::. ######::. ######::'####:::: ##:::: ########: + :......:::..:::::..:::::..::::::......::::......:::....:::::..:::::........:: + HEREDOC SPLASH = [ SPLASH_1, @@ -83,12 +84,11 @@ HEREDOC SPLASH_4, SPLASH_5, SPLASH_6, - SPLASH_7, - ] + SPLASH_7 + ].freeze def print_splash puts SPLASH.sample end - end end diff --git a/new/bin/server.rb b/new/bin/server.rb index 8133623..d1e85dd 100755 --- a/new/bin/server.rb +++ b/new/bin/server.rb @@ -1,31 +1,31 @@ -require "launchy" +# frozen_string_literal: true -require_relative "../lib/crys" -require_relative "mixins/splash.rb" +require 'launchy' +require_relative '../lib/crys' +require_relative 'mixins/splash' module Crys class ServerRunner - include Splash - + def initialize(server_class:, root:, section:) @root = File.expand_path root @server = server_class.new(root: root) @section = section end - def serve - puts "" - print_splash - puts "Hello mms to \e[1m" + section + "\e[22m" - puts "Serving from: " + root - puts "" - server.start + def serve + puts '' + print_splash + puts "Hello mms to \e[1m#{section}\e[22m" + puts "Serving from: #{root}" + puts '' + server.start end private attr_reader :root, :server, :section end -end +end diff --git a/new/lib/crys.rb b/new/lib/crys.rb index 68542a0..eea74fa 100644 --- a/new/lib/crys.rb +++ b/new/lib/crys.rb @@ -1,8 +1,16 @@ -require_relative "crys/processors/html_processor.rb" +# frozen_string_literal: true -require_relative "crys/server.rb" -require_relative "crys/builder.rb" -require_relative "crys/image_processor.rb" +require 'bundler/setup' + +require_relative 'crys/processors/html_processor' +require_relative 'crys/processors/rss_processor' + +require_relative 'crys/server' +require_relative 'crys/builder' +require_relative 'crys/batch_builder' +require_relative 'crys/image_processor' +require_relative 'crys/pages_db_manager' +require_relative 'crys/deployer' module Crys end diff --git a/new/lib/crys/_code_processor.rb b/new/lib/crys/_code_processor.rb deleted file mode 100644 index e69de29..0000000 --- a/new/lib/crys/_code_processor.rb +++ /dev/null diff --git a/new/lib/crys/_default_data.rb b/new/lib/crys/_default_data.rb deleted file mode 100644 index 8333669..0000000 --- a/new/lib/crys/_default_data.rb +++ /dev/null @@ -1,4 +0,0 @@ -module Crys - module DefaultData - end -end diff --git a/new/lib/crys/_file_watcher.rb b/new/lib/crys/_file_watcher.rb deleted file mode 100644 index e69de29..0000000 --- a/new/lib/crys/_file_watcher.rb +++ /dev/null diff --git a/new/lib/crys/_listing.rb b/new/lib/crys/_listing.rb deleted file mode 100644 index e69de29..0000000 --- a/new/lib/crys/_listing.rb +++ /dev/null diff --git a/new/lib/crys/_new_file.rb b/new/lib/crys/_new_file.rb deleted file mode 100644 index e69de29..0000000 --- a/new/lib/crys/_new_file.rb +++ /dev/null diff --git a/new/lib/crys/_page_from_erb.rb b/new/lib/crys/_page_from_erb.rb deleted file mode 100644 index e69de29..0000000 --- a/new/lib/crys/_page_from_erb.rb +++ /dev/null diff --git a/new/lib/crys/_page_from_org.rb b/new/lib/crys/_page_from_org.rb deleted file mode 100644 index e69de29..0000000 --- a/new/lib/crys/_page_from_org.rb +++ /dev/null diff --git a/new/lib/crys/_resource_from_css.rb b/new/lib/crys/_resource_from_css.rb deleted file mode 100644 index e69de29..0000000 --- a/new/lib/crys/_resource_from_css.rb +++ /dev/null diff --git a/new/lib/crys/batch_builder.rb b/new/lib/crys/batch_builder.rb new file mode 100644 index 0000000..43dbec6 --- /dev/null +++ b/new/lib/crys/batch_builder.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module Crys + class BatchBuilder + def initialize(pages_db:, output_dir:, image_dir:, builder_class:) + @pages_db = pages_db + @output_dir = output_dir + @image_dir = image_dir + @builder_class = builder_class + end + + def build + db.pages.each do |page| + builder_class.new( + file_path: page.file_path, + output_dir: output_dir, + image_dir: image_dir + ).build + puts "processed: #{page.filename}" + end + end + + private + + attr_reader :pages_db, :output_dir, :image_dir, :builder_class + + def db + pages_db.new + end + end +end diff --git a/new/lib/crys/builder.rb b/new/lib/crys/builder.rb index a3f55b1..3b1ed38 100644 --- a/new/lib/crys/builder.rb +++ b/new/lib/crys/builder.rb @@ -1,50 +1,64 @@ +# frozen_string_literal: true module Crys class Builder - - def initialize(file_path:, output_dir:, image_dir:) @file_path = file_path @output_dir = output_dir @processor = processor_class.new(file_path: file_path, image_dir: image_dir) - end def build - process_html + process_content process_assets + + upsert_pages_db end private - attr_reader :file_path, :output_dir, :processor + attr_reader :file_path, :output_dir, :processor, :db + + def pages_db_manager + Crys::PagesDbManager.new + end def process_assets processor.assets.each do |asset| - output_path = output_dir + "/" + asset.relative_path - File.open(output_path, 'w') { |file| file.write(asset.processed_asset) } + output_path = "#{output_dir}/#{asset.relative_path}" + File.write(output_path, asset.processed_asset) end end - def process_html - html = processor.to_html + def process_content + content = processor.parsed_content filename = processor.filename - output_path = output_dir + "/" + filename + output_path = "#{output_dir}/#{filename}" - File.open(output_path, 'w') { |file| file.write(html) } + File.write(output_path, content) end - def processor_class - case file_path - when /html.erb$/ - html_processor - else - raise StandardError.new("No processor for #{file_path}") + def processor_class + case file_path + when /html.erb$/ + html_processor + when /xml.rb$/ + rss_processor + else + raise StandardError, "No processor for #{file_path}" end end def html_processor Crys::HtmlProcessor end + + def rss_processor + Crys::RssProcessor + end + + def upsert_pages_db + pages_db_manager.add_page(processor) + end end end diff --git a/new/lib/crys/deployer.rb b/new/lib/crys/deployer.rb new file mode 100644 index 0000000..501ea04 --- /dev/null +++ b/new/lib/crys/deployer.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +require 'rsync' + +module Crys + class Deployer + DEST_PREFIX = '/usr/local/sites/' + + def initialize(dest:, source:) + @dest = dest + @source = source + + Rsync.configure do |config| + config.host = 'mms@10.0.7.0' + end + end + + def run + puts "source: #{source}" + full_dest = DEST_PREFIX + dest + puts "dest: #{full_dest}" + + Rsync.run(source, full_dest, ['-rtz']) do |result| + if result.success? + result.changes.each do |change| + puts "#{change.filename} (#{change.summary})" + end + else + puts result.error + end + end + end + + private + + attr_reader :dest, :source + end +end diff --git a/new/lib/crys/image_processor.rb b/new/lib/crys/image_processor.rb index b7e2fd6..306c076 100644 --- a/new/lib/crys/image_processor.rb +++ b/new/lib/crys/image_processor.rb @@ -1,26 +1,24 @@ +# frozen_string_literal: true + module Crys class ImageProcessor def initialize(path:, filename:, width: :auto) @path = path @filename = filename @file = File.read(path) + @width = width end def relative_path filename end - def filename - filename - end - def processed_asset file.to_s end - private + private - attr_reader :path, :filename, :file - + attr_reader :path, :filename, :file end end diff --git a/new/lib/crys/pages_db_manager.rb b/new/lib/crys/pages_db_manager.rb new file mode 100644 index 0000000..029b035 --- /dev/null +++ b/new/lib/crys/pages_db_manager.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +module Crys + class PagesDbManager + PAGES_KEY = :pages + PAGE = Struct.new(:filename, :file_path, :last_update, :in_rss, keyword_init: true) + + def db_path; end + + def add_page(processor) + @processor = processor + hash = Digest::MD5.hexdigest(processor.file_path) + known_page = known_page(hash) + + upsert_db(hash, known_page) + save_db + end + + def pages + db.fetch(:pages).map do |_, data| + PAGE.new(data) + end + end + + private + + attr_reader :hash, :processor + + def db + @db ||= YAML.load_file( + db_path, + permitted_classes: [Time, Symbol] + ) + end + + def upsert_db(hash, known_page) + record = PAGE.new(known_page || { filename: processor.filename, + file_path: processor.file_path, + in_rss: true }) + + record.last_update = Time.now + + @db[PAGES_KEY][hash] = record.to_h + end + + def save_db + File.write(db_path, db.to_yaml) + end + + def known_page(hash) + db[PAGES_KEY][hash] + end + end +end diff --git a/new/lib/crys/processors/common_functions.rb b/new/lib/crys/processors/common_functions.rb index f33c768..9cf5669 100644 --- a/new/lib/crys/processors/common_functions.rb +++ b/new/lib/crys/processors/common_functions.rb @@ -1,13 +1,15 @@ +# frozen_string_literal: true + require 'rss' module Crys module CommonFunctions def project_root - "#{File.dirname(File.dirname(File.dirname(File.dirname(File.dirname(File.expand_path(__FILE__))))))}" + File.dirname(File.dirname(File.dirname(File.dirname(File.dirname(File.expand_path(__FILE__)))))).to_s end def process_image(file:, width: :auto) - full_path = image_dir + "/" + file + full_path = "#{image_dir}/#{file}" image = ::Crys::ImageProcessor.new(path: full_path, filename: file, width: width) assets << image @@ -19,10 +21,13 @@ module Crys if name path = case name when :main - "/public/index.xml" + '/public/index.xml' end rss = File.read(project_root + path) + else + puts url + end RSS::Parser.parse(rss) diff --git a/new/lib/crys/processors/common_parts.rb b/new/lib/crys/processors/common_parts.rb index 1dbf6d8..a6c2dc1 100644 --- a/new/lib/crys/processors/common_parts.rb +++ b/new/lib/crys/processors/common_parts.rb @@ -1,20 +1,18 @@ +# frozen_string_literal: true + module Crys module CommonParts def webbutton(file:, url:, alt:) - full_path = image_dir + "/buttons/" + file - + full_path = "#{image_dir}/buttons/#{file}" + image = ::Crys::ImageProcessor.new(path: full_path, filename: file, width: 88) assets << image - code = ERB.new <<-EOF -<a href="<%=url%>"> -<img src="<%=image.relative_path%>" width="88" height="31" class="webbutton" alt="<%=alt%>"> -</a> -EOF + code = ERB.new <<~EOF + <a href="<%=url%>"><img src="<%=image.relative_path%>" width="88" height="31" class="webbutton" alt="<%=alt%>"></a> + EOF code.result(binding) - end - end end diff --git a/new/lib/crys/processors/html_processor.rb b/new/lib/crys/processors/html_processor.rb index d5ea73d..33116ce 100644 --- a/new/lib/crys/processors/html_processor.rb +++ b/new/lib/crys/processors/html_processor.rb @@ -1,38 +1,38 @@ +# frozen_string_literal: true + require 'erb' -require_relative "common_functions" -require_relative "common_parts" +require_relative 'common_functions' +require_relative 'common_parts' module Crys class HtmlProcessor - include CommonFunctions include CommonParts - + def initialize(file_path:, image_dir:) @file_path = file_path @image_dir = image_dir @assets = [] end - def to_html + def parsed_content html_file = ERB.new(File.read(file_path)) html_file.result(local_binding) end - def filename - file_path.scan(/.*\/(.*)\.erb/).flatten.first + file_path.scan(%r{.*/(.*)\.erb}).flatten.first end - attr_reader :assets + attr_reader :assets, :file_path private - attr_reader :file_path, :image_dir + attr_reader :image_dir attr_writer :assets def local_binding - local_binding ||= binding.clone + @local_binding ||= binding.clone end end end diff --git a/new/lib/crys/processors/rss_processor.rb b/new/lib/crys/processors/rss_processor.rb new file mode 100644 index 0000000..de79f11 --- /dev/null +++ b/new/lib/crys/processors/rss_processor.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require_relative 'common_functions' +require_relative 'common_parts' + +module Crys + class RssProcessor + def initialize(file_path:, image_dir:) + @file_path = file_path + rss_file = File.read(file_path) + instance_eval(rss_file) + @assets = [] + @image_dir = image_dir # just for api consistency + end + + def parsed_content + rss.content + end + + def filename + rss.filename + end + + attr_reader :assets, :file_path + + private + + attr_reader :rss + end +end diff --git a/new/lib/crys/server.rb b/new/lib/crys/server.rb index aa0c19c..cc43b39 100644 --- a/new/lib/crys/server.rb +++ b/new/lib/crys/server.rb @@ -1,4 +1,6 @@ -require 'webrick' +# frozen_string_literal: true + +require 'webrick' module Crys class Server def initialize(root:) @@ -6,16 +8,16 @@ module Crys end def start - server = WEBrick::HTTPServer.new :Port => 8000, :DocumentRoot => root - trap 'INT' do server.shutdown end + server = WEBrick::HTTPServer.new Port: 8000, DocumentRoot: root + trap 'INT' do + server.shutdown + end server.start end - private - - attr_reader :root + private + attr_reader :root end end - diff --git a/new/splash/Makefile b/new/splash/Makefile new file mode 100644 index 0000000..78168ca --- /dev/null +++ b/new/splash/Makefile @@ -0,0 +1,5 @@ +upload: + source_dir="output/"; \ + dest_server="mms@10.0.7.0:/usr/local/sites/site-crys-splash"; \ + rsync -irtvzP --delete "$$source_dir" "$$dest_server"; \ + echo "Rsync completed." diff --git a/new/splash/assets/images/buttons/org.brainmade.png b/new/splash/assets/images/buttons/org.brainmade.png Binary files differnew file mode 100644 index 0000000..9f40b68 --- /dev/null +++ b/new/splash/assets/images/buttons/org.brainmade.png diff --git a/new/splash/assets/images/logo.png b/new/splash/assets/images/logo.png Binary files differnew file mode 100644 index 0000000..8242224 --- /dev/null +++ b/new/splash/assets/images/logo.png diff --git a/new/splash/assets/images/updated.gif b/new/splash/assets/images/updated.gif Binary files differnew file mode 100644 index 0000000..15d6ff6 --- /dev/null +++ b/new/splash/assets/images/updated.gif diff --git a/new/splash/bin/.#build.rb b/new/splash/bin/.#build.rb new file mode 120000 index 0000000..0f72703 --- /dev/null +++ b/new/splash/bin/.#build.rb @@ -0,0 +1 @@ +mms@voyager.local.6355:1735980208
\ No newline at end of file diff --git a/new/splash/bin/build.rb b/new/splash/bin/build.rb index 1439dd6..7f5ac93 100755 --- a/new/splash/bin/build.rb +++ b/new/splash/bin/build.rb @@ -5,15 +5,20 @@ require_relative '../lib/splash' require_relative '../../bin/builder' builder_class = Crys::Splash::Builder +batch_builder_class = Crys::Splash::BatchBuilder output_dir = "#{File.dirname(File.dirname(__FILE__))}/output" -#file_path = "#{File.dirname(File.dirname(__FILE__))}/pages/#{@options[:filepath]}" image_dir = "#{File.dirname(File.dirname(File.expand_path(__FILE__)))}/assets/images" +theme_dir = "#{File.dirname(File.dirname(__FILE__))}/theme" +pages_db = Crys::Splash::PagesDbManager -file_path=@options[:filepath] +file_path = @options[:filepath] Crys::BuilderRunner.new( file_path: file_path, output_dir: output_dir, builder_class: builder_class, - image_dir: image_dir + image_dir: image_dir, + batch_builder_class: batch_builder_class, + theme_dir: theme_dir, + pages_db: pages_db ).run diff --git a/new/splash/bin/deploy.rb b/new/splash/bin/deploy.rb new file mode 100755 index 0000000..b763905 --- /dev/null +++ b/new/splash/bin/deploy.rb @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require_relative '../lib/splash' +require_relative '../../bin/deployer' + +source = "#{File.dirname(File.dirname(File.expand_path(__FILE__)))}/output/" +dest = 'site-crys-splash' + +Crys::DeployerRunner.new(source: source, dest: dest).run diff --git a/new/splash/db/pages.yaml b/new/splash/db/pages.yaml new file mode 100644 index 0000000..a0d5165 --- /dev/null +++ b/new/splash/db/pages.yaml @@ -0,0 +1,12 @@ +--- +:pages: + d5d3594a0e43df11c58fad58073dc288: + :filename: index.html + :file_path: "/home/mms/ghq/michal.sapka.me/mms/site/new/splash/pages/index.html.erb" + :last_update: 2025-01-08 21:08:36.876579930 +01:00 + :in_rss: false + b6bd1d5c7d2d3ea1d0db3032235af0bf: + :filename: index.xml + :file_path: "/home/mms/ghq/michal.sapka.me/mms/site/new/splash/pages/index.xml.rb" + :last_update: 2025-01-08 21:08:36.895155483 +01:00 + :in_rss: false diff --git a/new/splash/lib/splash.rb b/new/splash/lib/splash.rb index 68674f9..5a29956 100644 --- a/new/splash/lib/splash.rb +++ b/new/splash/lib/splash.rb @@ -4,6 +4,8 @@ require_relative '../../lib/crys' require_relative 'splash/server' require_relative 'splash/builder' +require_relative 'splash/batch_builder' +require_relative 'splash/pages_db_manager' module Crys module Splash diff --git a/new/splash/lib/splash/batch_builder.rb b/new/splash/lib/splash/batch_builder.rb new file mode 100644 index 0000000..71f5594 --- /dev/null +++ b/new/splash/lib/splash/batch_builder.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module Crys + module Splash + class BatchBuilder < Crys::BatchBuilder + end + end +end diff --git a/new/splash/lib/splash/builder.rb b/new/splash/lib/splash/builder.rb index 7b0f13f..f886a0e 100644 --- a/new/splash/lib/splash/builder.rb +++ b/new/splash/lib/splash/builder.rb @@ -1,14 +1,17 @@ # frozen_string_literal: true -require_relative "processors/splash_processor" +require_relative 'processors/splash_processor' module Crys module Splash class Builder < Crys::Builder - def html_processor Crys::Splash::SplashProcessor end + + def pages_db_manager + Crys::Splash::PagesDbManager.new + end end end end diff --git a/new/splash/lib/splash/pages_db_manager.rb b/new/splash/lib/splash/pages_db_manager.rb new file mode 100644 index 0000000..17658ea --- /dev/null +++ b/new/splash/lib/splash/pages_db_manager.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Crys + module Splash + class PagesDbManager < Crys::PagesDbManager + def db_path + "#{File.dirname(File.dirname(File.dirname(__FILE__)))}/db/pages.yaml" + end + end + end +end diff --git a/new/splash/lib/splash/processors/splash_processor.rb b/new/splash/lib/splash/processors/splash_processor.rb index 463dd65..1a1f2f2 100644 --- a/new/splash/lib/splash/processors/splash_processor.rb +++ b/new/splash/lib/splash/processors/splash_processor.rb @@ -1,52 +1,73 @@ -require "yaml" +# frozen_string_literal: true + +require 'yaml' module Crys module Splash class SplashProcessor < Crys::HtmlProcessor def not_real [ - "doctor", - "starfleet officer", - "magician", - "hacker", - "emperor of an evil galaxy", - "replicant", - "computer", - "evil genius" - ].sample + 'doctor', + 'starfleet officer', + 'magician', + 'hacker', + 'emperor of an evil galaxy', + 'replicant', + 'computer', + 'evil genius', + 'monster from another dimension', + 'Grim Ripper', + 'computer virus', + 'Leader of the Free World', + 'living legend', + 'sentient AI', + 'teenage pilot of a purple mech', + 'android', + 'last man on Earth', + 'time traveler', + 'pirate', + 'mayor of a vitual town' + ] end def update_badge(url_part) @main_rss = fetch_rss(name: :main) - if @main_rss.items.last(20).any? { |it| it.link.include? url_part } - new_badge - end + return unless @main_rss.items.first(20).any? { |it| it.link.include? url_part } + + updated_badge end def more_update_badge(name:) path = case name when :bookmarks - "/assets/more/bookmarks.yml" + '/assets/more/bookmarks.yml' when :links - "/assets/more/links.yml" + '/assets/more/links.yml' end yaml = YAML.load_file(project_root + path) _, vals = yaml.first - last_added = Time.parse(vals.last.fetch("date")) + last_added = Time.parse(vals.last.fetch('date')) - if (Time.now - last_added) / (24 * 60* 60) < 30 - new_badge - end - end + return unless (Time.now - last_added) / (24 * 60 * 60) < 30 + updated_badge + end def new_badge - image = process_image(file: "new.gif") - code = ERB.new <<-EOF -<img src="<%=image.relative_path%>" width="32" height="22" class="new-badge" alt="NEW"> -EOF - code.result(binding) + image = process_image(file: 'new.gif') + code = ERB.new <<~EOF + <img src="<%=image.relative_path%>" width="32" height="22" class="new-badge" alt="NEW"> + EOF + code.result(binding) + end + + def updated_badge + image = process_image(file: 'updated.gif') + code = ERB.new <<~EOF + <img src="<%=image.relative_path%>" width="54" height="12" class="new-badge" alt="UPDATED"> + EOF + code.result(binding) end end end diff --git a/new/splash/output/index.xml b/new/splash/output/index.xml new file mode 100644 index 0000000..8649916 --- /dev/null +++ b/new/splash/output/index.xml @@ -0,0 +1,2302 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<rss version="2.0" + xmlns:content="http://purl.org/rss/1.0/modules/content/" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" + xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> + <channel> + <title>Crys Site</title> + <link>https://crys.site/</link> + <description>Recent content on Crys Site</description> + <webMaster>rss</webMaster> + <lastBuildDate>Wed, 08 Jan 2025 19:48:00 +0100</lastBuildDate> + <item> + <title>Monday Begins on Saturday (Arkady and Boris Strugatsky, 1965)</title> + <link>https://crys.site/reviews/books/monday-begins-on-saturday-1965/</link> + <description> + <p><em>Monday Begins on Saturday</em> is yet another Science Fiction novel by Strugatsky Brothers I&rsquo;ve read this year. +It is also the weirdest one of those!</p> +<p>Aleksandr Ivanovich Privalov is a young programmer (warning: there no computers in the novel) on his way to his newly assigned position. +His car breaks down, he meets strange fellows who recruit him to a nearby &ldquo;Scientific Research Institute of Sorcery and Wizardry&rdquo;. +Yup - this is not run of the mill institute, as we&rsquo;re not dealing with boring stuff, like physics. +Instead we&rsquo;ve got magic, magical beasts and the pursuit to define happiness. +Nice combination, if you ask me.</p> +<p>Strugaccy stray from western tropes. +Their adventure as writers started deep into praising socialism - we&rsquo;ll go to space and show them all the nice things communism brings! +With time, they&rsquo;ve abandoned the hope. +<em>Monday&hellip;</em> was released right after <em><a href="/reviews/books/hard-to-be-a-god-strugatsky-1964/">Hard to be God</a></em> and they show striking similarities. +The latter was a grim tale about the terrible nature of man, where happiness does not exist. +This book is a funny novel about the terrible nature of the world, where happiness is as real as a Baba Yaga. +It&rsquo;s also a great critical analysis of soviet ideas, but for that I much preferred <em><a href="/reviews/books/moscow-2042-1986/">Moscow 2042</a></em>.</p> +<p>What the authors managed to achieve to make all the magic elements mundane. +Not by weaknesses of the plot (it&rsquo;s not a YA novel), but on purpose. +It&rsquo;s studied, it&rsquo;s analyzed, it&rsquo;s understood. +The characters analyze it without any emotion, much like things are thougt in school. +The idea is great, but it may be confusing for western audiences as it&rsquo;s rooted in Russian folklore. +I am Polish, so I&rsquo;ve been subjected to it quite early on. +But would reading some classic folk tales help? +No, not really. +The fantastic elements are not treated with any seriousness. +They simply <em>are</em> there to be studied. +It&rsquo;s the anti-Shrek where most of the jokes are based on you knowing who a magical beast is.</p> +<p>The <strong>actual</strong> subject of the story is great, but it requires some knowledge about Marxism to be seen. +Deep in the USSR Scientific communism was te norm. +Everything could have been analyzed and understood; proletariat&rsquo;s domination was to be scientific fact. +Here we see it put the limit - magical beast are to be analyzed, equated and understood. +<em>Monday&hellip;</em> is too smart of it&rsquo;s own good, as it may be very easily misunderstood.</p> +<p>Sadly, I have more gripes with how the novel is constructed, as we&rsquo;re seemingly without a plot. +The Institute and Privalov (aka Sasha, don&rsquo;t ask me how it&rsquo;s his nickname) who is slowly learning about magic is the only element connecting individual pages. +The actual story is presented as series of disjointed stories, each with it&rsquo;s own begging and end. +Sure, some stories may conclude much later, but they don&rsquo;t build on each other. +The novel consits of three parts, and each following is less and less guilty of that, but it&rsquo;s never a <em>novel</em> in a common sense.</p> +<p>The Institute is occupied by wonderfully mad characters, much like Invisible Institute from Discworld. +We&rsquo;ve got a former grand inquisitor in charge of the Department of Meaning of Life; a director who has two personalities which have no idea what the other one is doing. +Some ideas are also amazingly creative - have you ever heard of using a genie as a a bomb? +Each single part of the novel is great, but I had problem with the complete set. +It&rsquo;s a collection of short stories with overarching plot and nothing pushed me forward. +Heck, I even incured a fine from the library, as it took me very long to get to reading and then (despite the small length) to finish.</p> +<p>Personally, I enjoyed the last part the most as the final mystery is revealed and it&rsquo;s a very intriguing concept.</p> +<p>So, as I&rsquo;ve praised and recommended all Strugasky Brothers novels up to this, I have a bit of problem here. +As I&rsquo;ve finished it a few months ago and had some time to digest it, I consider it another bullseye. +But when I read it, I had much more problems, as the story-based structure is much less gripping that a full-on novel. +I&rsquo;m glad I&rsquo;ve read it, but I will never re-read it.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Wed, 08 Jan 2025 19:48:00 +0100</pubDate> + <guid>bbc60dab9cf71ce5171b6d5af95bc58a</guid> + </item> + <item> + <title>Pixelated images for vintage inspired websites</title> + <link>https://crys.site/blog/2025/pixelated-render-css/</link> + <description> + <p>We don&rsquo;t take kindly of modern, huge images here, at Crys. +But modern browsers don&rsquo;t care and they put a significant amount of grease over them. +Images must be big or ugly, and therefore I have more grease over my web buttons than in my fries.</p> +<p>But CSS comes to save the day once again! +We can force the amazing, pixelated rendering that we want.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-css" data-lang="css"><span style="display:flex;"><span>@<span style="font-weight:bold">media</span> (<span style="font-weight:bold">min-resolution</span>: <span style="font-weight:bold">192dpi</span>) { * { image-rendering: <span style="font-weight:bold">pixelated</span>; } } +</span></span></code></pre></div><p>(I stole from min-resolution <a href="http://retro.rubenerd.com">Ruben&rsquo;s retro site</a>, like a lot of other things).</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Wed, 08 Jan 2025 11:27:00 +0100</pubDate> + <guid>31636dcb174867762e1b0bd972d29776</guid> + </item> + <item> + <title>Star Trek: Voyager 06x03 - Barge of the Dead</title> + <link>https://crys.site/star-trek/voy/06x03-barge-of-the-dead/</link> + <description> + <p>B&rsquo;Elanna starts having visions where she is on the Barge of the Dead, where dishonored Klingon souls are placed on their way to hell.</p> +<h2 id="impressions">Impressions</h2> +<p>I am rarely fond of B&rsquo;Elanna&rsquo;s plots, but this is one of the better ones. +We often see her struggle with her Klingon heritage, but rarely we see her so vulnerable. +It&rsquo;s not <em>her</em> who is punished for her sins, but it&rsquo;s her mother. +A much bigger deal if you ask me.</p> +<p>Though her visions, we see twisted versions of the crew. +Everyone is becoming her demon, making her feel alienated and vulnerable. +Seeing a Klingon in this position? +Amazing.</p> +<p>Sadly, this episode is <em>yet another</em> one were authors are playing with viewer, but it&rsquo;s pointless. +Maybe she is dead? +Maybe the entire Voyager was just a dream? +Well, this is episode 223 of <em>ST:V</em> so of course it&rsquo;s not. +Such plot device make for an interesting story when you look at it though the lens of single episode, but it doesn&rsquo;t work in the context of the entire series. +Finding B&rsquo;Elanna confused was great, but this puts me in the viewer&rsquo;s position. +I am not taking any part in the story, as I already know it how it will end.</p> +<p><em>Barge of the Dead</em> marks the moment when Ronald Moore and Bryan Fuller gave up. +The story was originally pitched as an episode of <em>Deep Space 9</em> (funny to remember that those shows overlapped), but it was rejected. +As we see, it became part of <em>Voyage</em> but the duo felt that it&rsquo;s time to move on. +Voyager was not what they wanted - they had little creative control, and wanted more multi-episodes stories. +Looking at their careers, they sure <em>made it</em>. +Moore created the great remake of <em>Battlestar Galactica</em> and Fuller even returned to modern Star Trek.</p> +<h2 id="doctor-factor">Doctor Factor</h2> +<p>Unsatisfactory.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Tue, 07 Jan 2025 20:47:00 +0100</pubDate> + <guid>306cc7d06d4bdbe0e07822c246206e19</guid> + </item> + <item> + <title>Bookmark dump for December 2024</title> + <link>https://crys.site/blog/2025/bookmarks-dec/</link> + <description> + + +<p>Here are some cool webpages I've found recently:</p> +<ul> + + + + + + + + + + + + + + + <li> + 2024-12-23 + - + <a href="https://indiadispatch.com/2024/12/22/big-techs-292-billion-ai-spending-spree-meets-the-revenue-desert/">Tech giants pour $292 billion into AI while software revenue barely registers.</a> + (indiadispatch.com) + + (via <a href="https://tech.slashdot.org/story/24/12/23/1314259/software-revenue-lags-despite-tech-giants-292-billion-ai-spend">tech.slashdot.org</a>) + + + + + <li> + 2024-12-23 + - + <a href="https://perladvent.org/2024/2024-12-23.html"> Perl Advent Calendar 2024 - A New Logo for Perl </a> + (perladvent.org) + + + + + <li> + 2024-12-23 + - + <a href="https://www.osnews.com/story/141399/never-forgive-them/">Never forgive them</a> + (osnews.com) + + + + + <li> + 2024-12-21 + - + <a href="https://www.tomshardware.com/desktops/indiana-bakery-still-using-commodore-64s-originally-released-in-1982-as-point-of-sale-terminals">Indiana bakery still using Commodore 64s originally released in 1982 as cash registers — Hilligoss Bakery in Brownsburg sticks to the BASICs</a> + (tomshardware.com) + + (via <a href="https://lemmy.sdf.org/post/26623449">lemmy.sdf.org</a>) + + + + + <li> + 2024-12-21 + - + <a href="https://www.hackster.io/news/a-classic-acer-pocket-pc-lives-again-thanks-to-a-risc-v-emulation-of-its-battery-controller-f8a5474e592f">A Classic Acer Pocket PC Lives Again, Thanks to a RISC-V Emulation of Its Battery Controller</a> + (hackster.io) + + (via <a href="https://lemmy.sdf.org/post/26737655">lemmy.sdf.org</a>) + + + + + <li> + 2024-12-21 + - + <a href="https://www.honest-broker.com/p/the-ugly-truth-about-spotify-is-finally">The Ugly Truth About Spotify Is Finally Revealed</a> + (honest-broker.com) + + (via <a href="https://chaos.social/@citizen428/113691489014325440">chaos.social</a>) + + + + + <li> + 2024-12-17 + - + <a href="https://www.youtube.com/watch?v=cKjFJDZmWNM">(1981) Interlisp-D Demonstration by Beau Sheil</a> + (youtube.com) + + (via <a href="https://fosstodon.org/@interlisp/113650957735095671">fosstodon.org</a>) + + + + + <li> + 2024-12-17 + - + <a href="https://www.gog.com/en/gog-preservation-program">GOG Preservation Program</a> + (gog.com) + + + + + <li> + 2024-12-17 + - + <a href="https://arstechnica.com/tech-policy/2024/12/companies-issuing-rto-mandates-lose-their-best-talent-study/">Companies issuing RTO mandates “lose their best talent”: Study</a> + (arstechnica.com) + + + + + <li> + 2024-12-16 + - + <a href="https://dillo-browser.github.io/25-years/">25 years of Dillo</a> + (dillo-browser.github.io) + + (via <a href="https://lobste.rs/s/zrgps1/25_years_dillo">lobste.rs</a>) + + + + + <li> + 2024-12-13 + - + <a href="https://arstechnica.com/gadgets/2024/12/the-optical-disc-onslaught-continues-with-lg-quitting-blu-ray-players/">The optical disc onslaught continues, with LG quitting Blu-ray players</a> + (arstechnica.com) + + + + + <li> + 2024-12-13 + - + <a href="https://www.bbc.com/news/articles/cd0elzk24dno">BBC complains to Apple over misleading shooting headline</a> + (bbc.com) + + + + + <li> + 2024-12-12 + - + <a href="https://emacsconf.org/2024/talks/">EmacsConf - 2024 - Talks</a> + (emacsconf.org) + + + + + <li> + 2024-12-12 + - + <a href="https://bzg.fr/en/org-has-a-new-maintainer/">Org Mode has a new maintainer - Bastien Guerry</a> + (bzg.fr) + + + + + <li> + 2024-12-11 + - + <a href="https://tabloid.vercel.app/">Tabloid: the clickbait headline programming language</a> + (tabloid.vercel.app) + + (via <a href="https://urbanists.social/@enobacon/113630060542720768">urbanists.social</a>) + + + + + <li> + 2024-12-11 + - + <a href="https://arstechnica.com/science/2024/12/congressional-republicans-conclude-sars-cov-2-originated-in-a-lab-leak/">Congressional Republicans conclude SARS-CoV-2 originated in a lab leak</a> + (arstechnica.com) + + + + + <li> + 2024-12-11 + - + <a href="https://it.slashdot.org/story/24/12/11/156219/researchers-uncover-chinese-spyware-used-to-target-android-devices">Researchers Uncover Chinese Spyware Used To Target Android Devices - Slashdot</a> + (it.slashdot.org) + + + + + <li> + 2024-12-11 + - + <a href="https://www.youtube.com/watch?v=WDAZAgrzNoo">How Atari 8-Bit Computers Work!</a> + (youtube.com) + + (via <a href="https://lemmy.sdf.org/post/26228788">lemmy.sdf.org</a>) + + + + + <li> + 2024-12-10 + - + <a href="https://www.nathalielawhead.com/candybox/in-defense-and-absolute-condemnation-of-ai-how-ai-has-already-affected-the-game-industry">In defense and absolute condemnation of AI: how AI has already affected “The Game Industry”</a> + (nathalielawhead.com) + + (via <a href="https://mastodon.social/@alienmelon/113628449572893204">mastodon.social</a>) + + + + + <li> + 2024-12-10 + - + <a href="https://arstechnica.com/information-technology/2024/12/new-badram-attack-neuters-security-assurances-in-amd-epyc-processors/">AMD’s trusted execution environment blown wide open by new BadRAM attack</a> + (arstechnica.com) + + + + + <li> + 2024-12-09 + - + <a href="https://www.theverge.com/2024/12/9/24316882/itch-io-offline-domain-registration-funko-report">Itch.io is currently offline due to a ‘trash AI-powered’ phishing report</a> + (theverge.com) + + + + + <li> + 2024-12-09 + - + <a href="https://www.youtube.com/watch?v=OUuz9-CtCwY">Literate Programming for the 24th Century</a> + (youtube.com) + + + + + <li> + 2024-12-08 + - + <a href="https://www.youtube.com/watch?v=bopbmRyHQog">The new Vim project What has changed after Bram</a> + (youtube.com) + + (via <a href="https://hachyderm.io/@VimLinks/113619496551546679">hachyderm.io</a>) + + + + + <li> + 2024-12-08 + - + <a href="https://damieng.com/typography/advent/2024/">Advent of Fonts 2024</a> + (damieng.com) + + (via <a href="https://mastodon.social/@damieng/113618210924442400">mastodon.social</a>) + + + + + <li> + 2024-12-08 + - + <a href="https://www.youtube.com/watch?v=AeDaD-CEzzg">The History of the BSD Daemon</a> + (youtube.com) + + (via <a href="https://hostux.social/@lfa/113617660943032199">hostux.social</a>) + + + + + <li> + 2024-12-08 + - + <a href="https://addons.mozilla.org/en-US/firefox/addon/google-sign-in-popup-blocker/">Google Sign-in Popup Blocker</a> + (addons.mozilla.org) + + (via <a href="https://saltylike.us/@tuckerm/113613850024154051">saltylike.us</a>) + + + + + <li> + 2024-12-06 + - + <a href="https://arstechnica.com/ai/2024/12/openai-and-anduril-team-up-to-build-ai-powered-drone-defense-systems/">Soon, the tech behind ChatGPT may help drone operators decide which enemies to kill</a> + (arstechnica.com) + + + + + <li> + 2024-12-06 + - + <a href="https://techcrunch.com/2024/12/05/openais-o1-model-sure-tries-to-deceive-humans-a-lot/">OpenAI&#39;s o1 model sure tries to deceive humans a lot | TechCrunch</a> + (techcrunch.com) + + + + + <li> + 2024-12-04 + - + <a href="https://spectrum.ieee.org/groupware">Collaboration Software: Microsoft, SRI, Lotus, and the History of Groupware</a> + (spectrum.ieee.org) + + + + + <li> + 2024-12-04 + - + <a href="https://arstechnica.com/tech-policy/2024/12/us-recommends-encrypted-messaging-as-chinese-hackers-linger-in-telecom-networks/">US recommends encrypted messaging as Chinese hackers linger in telecom networks</a> + (arstechnica.com) + + + + + <li> + 2024-12-04 + - + <a href="https://jpcamara.com/2024/12/01/speeding-up-ruby.html">Speeding up Ruby by rewriting C… in Ruby</a> + (jpcamara.com) + + (via <a href="https://lobste.rs/s/lnnkmd/speeding_up_ruby_by_rewriting_c_ruby">lobste.rs</a>) + + + + + <li> + 2024-12-04 + - + <a href="https://spillhistorie.no/the-story-of-rogue/">The story of Rogue</a> + (spillhistorie.no) + + (via <a href="https://news.ycombinator.com/item?id=42313087">news.ycombinator.com</a>) + + + + + <li> + 2024-12-03 + - + <a href="https://www.youtube.com/watch?v=DestaWfHDIk">Let&#39;s Code MS DOS 0x01: Hello World!</a> + (youtube.com) + + + + + <li> + 2024-12-03 + - + <a href="https://www.theverge.com/2024/12/3/24312016/chatgpt-search-results-review-inaccurate-unpredictable">ChatGPT’s search results for news are ‘unpredictable’ and frequently inaccurate</a> + (theverge.com) + + + + + <li> + 2024-12-03 + - + <a href="https://www.freebsd.org/releases/14.2R/announce/">FreeBSD 14.2-RELEASE Announcement</a> + (freebsd.org) + + + + + <li> + 2024-12-03 + - + <a href="https://blog.infected.systems/posts/2024-12-01-no-nat-november/">No NAT November: My Month Without IPv4</a> + (blog.infected.systems) + + (via <a href="https://lobste.rs/s/ftizih/no_nat_november_my_month_without_ipv4">lobste.rs</a>) + + + + + <li> + 2024-12-03 + - + <a href="https://stfn.pl/blog/28-intro-to-meshtastic/">My first steps in Meshtastic</a> + (stfn.pl) + + + + + <li> + 2024-12-03 + - + <a href="https://ils.unc.edu/callee/gopherpaper.htm">Where Have all the Gophers Gone? Why the Web beat Gopher in the Battle for Protocol Mind Share </a> + (ils.unc.edu) + + (via <a href="https://jdd.freeshell.org/">jdd.freeshell.org</a>) + + + + + <li> + 2024-12-02 + - + <a href="https://www.latimes.com/entertainment-arts/business/story/2024-12-02/the-casual-moviegoer-is-a-thing-of-the-past-thats-a-big-problem-for-hollywood">The casual moviegoer is a thing of the past. That&#39;s a problem for Hollywood</a> + (latimes.com) + + + + + <li> + 2024-12-02 + - + <a href="https://sfconservancy.org/news/2024/nov/29/openwrt-one-wireless-router-now-ships-black-friday/">First Router Designed Specifically For OpenWrt Released</a> + (sfconservancy.org) + + + + + <li> + 2024-12-02 + - + <a href="https://www.servethehome.com/the-apple-mac-mini-m4-sets-the-mini-computer-standard/">The Apple Mac Mini M4 Sets the Mini Computer Standard</a> + (servethehome.com) + + + + + <li> + 2024-12-02 + - + <a href="https://www.youtube.com/watch?v=VUFOSJZJVM4">Worlds of Ultima Retrospective | Savage Empire &amp; Martian Dreams</a> + (youtube.com) + + + + + <li> + 2024-12-02 + - + <a href="https://abnml.com/blog/2024/11/26/replacing-proxmox-with-freebsd-and-bhyve/">Replacing Proxmox with FreeBSD and Bhyve - ABNML</a> + (abnml.com) + + (via <a href="https://vermaden.wordpress.com/2024/12/02/valuable-news-2024-12-02/">vermaden.wordpress.com</a>) + + + + + <li> + 2024-12-02 + - + <a href="https://no-color.org/">NO_COLOR: disabling ANSI color output by default</a> + (no-color.org) + + (via <a href="https://jcs.org/projects">jcs.org</a>) + + + + + <li> + 2024-12-02 + - + <a href="https://9to5google.com/2024/11/25/google-ios-app-link-annotations-search/">Google app for iOS now injects links back to Search on websites</a> + (9to5google.com) + + (via <a href="https://tech.slashdot.org/story/24/11/26/0029213/googles-ios-app-now-injects-links-on-third-party-websites-that-go-back-to-search">tech.slashdot.org</a>) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +</ul> +<p>You can find more on <a href="/more/bookmarks">Bookmarks</a></p> + + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Fri, 03 Jan 2025 16:14:00 +0100</pubDate> + <guid>816d8a1010c5f4fad8a50b07075e5b81</guid> + </item> + <item> + <title>2024 in retrospect</title> + <link>https://crys.site/blog/2025/2024-in-retrospect/</link> + <description> + <p><strong>Please note that content warning is warranted.</strong> +<strong>The year was good, but I touch unpleasant subjects.</strong> +<strong><em>O tempora!</em></strong></p> +<p>I have never done a retrospect here. +I&rsquo;ve made the rookie mistake of writing (or even having) plans for upcoming year, but that was futile. +Now I don&rsquo;t even plans of dinner. +So, even though mistakes were made in the past, this time I am armed with experience and only looking back.</p> +<p>Let&rsquo;s start with my personal life. +I don&rsquo;t write about it often, as it&rsquo;s trespassing on the lives of closest to me, but I think they&rsquo;ll allow me to indulge myself here. +It&rsquo;s also a subject I don&rsquo;t particularly <em>enjoy</em> thinking of, not to even mention writing about. +The last few years of my life were centered around two things: my wife&rsquo;s cancer and my son&rsquo;s developmental problems. +I think I&rsquo;ll write about what king of toll being a cancer caregiver takes, but that&rsquo;s not the day. +Today is a happy day, as both of those things are doing great&hellip; or terribly, depending on who you ask! +My wife is now 6 years after initial treatment and still in full remission. +It&rsquo;s crazy expensive (<a href="https://justyna.sapka.me">we are raising funds for continuous treatment!</a>), but she beat all chances and prognoses. +Not only is she still alive, but her cancer has not shown any signs of returning. +Similarly, my son (who was born prematurely) is beating all his problems like a champ. +He struggles, but all signs point toward him needing only some extra time to catch up. +Being a father of prematurely born child is a horror show on it&rsquo;s own, but none of the worst cases materialized. +I am also not showing no bigger problems, though it is time to do something about my cholesterol - it&rsquo;s elevated and I&rsquo;m <em>almost</em> 40, so it&rsquo;s time. +I have been diagnosed with asthma, but it seems I had it my entire life. +All in all, my personal life is as good as it could have been. +I was not expecting it to be as good as it is, but panic attacks still happen, and dreams often become nightmares.</p> +<p>In other side of my personal life, my father passed away. +We had complicated relation, and I still don&rsquo;t know how I feel about his death. +Another subject I don&rsquo;t want to pollute this happy site with.</p> +<p>Work-wise, well. +I was not laid off, which is an accomplishment in 2024. +But what have I done? +On one hand, I have not much to show. +I enjoy it, I like our product and my team - which is always great. +I also don&rsquo;t have much stress - which is extremely great. +Just think: I could have ended in something like Netflix! +I would have had heart attack by now! +I have also delivered some <em>small</em> projects which was a lot of fun. +Recently, I&rsquo;ve added plain-text transactional emails to one of the subsystems we own, which brought a huge smile to my face, even though I don&rsquo;t think any client will notice. +It was a rather a case of thing I wanted to do to make the product (and the web) better.</p> +<p>But more important things come from years of introspection. +I&rsquo;ve been a software engineer for 10 years now (in the same company btw!), ever since I&rsquo;ve changed fields from semi-manual labor. +After this 10 years I think I start to understand what <em>kind</em> of software engineer I want to be. +I am glad I work on the backend (I like Ruby more and more), and I love that most of my work can be done using terminal and Emacs. +I don&rsquo;t care much about new technologies, even if some say it&rsquo;s professional suicide. +What I care about it simplicity and stability. +And even though we work with Kubernetes running on AWS, I think my little world allows for that. +I have yet to be forced to do anything with GenAI, and somehow I managed to leave a small crack in our &ldquo;local&rdquo; development environment which will allow me not to use docker. +What I add to the plate is a different mindset, as I am an outlier. +Unique doesn&rsquo;t always mean good, but I think in this case it does. +I&rsquo;d love to have some more cool projects shipped <em>under my lead</em> next year, and there are signs for that. +What I&rsquo;d love even more would be if I believed in the product side of the project - but that also looks promising.</p> +<p>Money is between those two areas. +Funny, how swiftly priorities shift when health problems arise - and I don&rsquo;t even live in the US! +My mental state <em>requires</em> me to have a significant buffer of rainy day founds. +If my wife&rsquo;s illness returns - it will be expensive. +If my son&rsquo;s problems get worse - it will be expensive. +If my CEO gets the crazy idea of mutating my position into some GenAI investment - there will be no income. +I <em>need</em> to have a dozen or so months of normal expenses secured, and my earnings allow for that. +Guess this is why I look at apartment prices with laughter (1,5mil PLN for 70 meters? This stopped being funny some half a mil ago.), as I can&rsquo;t add a huge liability. +This is also why I&rsquo;m delaying purchasing a real computer for months, even though I really-really-really want to have full FreeBSD compatible desktop. +My job allows me to save a not insignificant sum, and this is what allows me to sleep at night.</p> +<p>Sadly, the IT business is going in the worst direction, but I&rsquo;ve already <a href="/blog/2024/llms-scare-me/">written about it</a>. +As a counter measure, as I still love computes, my spare time is split between just few things. +I hack on this site, I use old tech (FVMW! Emacs), I interact with like minded folks online (IRC, Mastodon). +I love you all - the people I social with, and you who read this via web or RSS. +I have also started my first <em>true</em> open source project - <a href="/projects/chotto/">Chotto</a>, and it should be usable in a month or so.</p> +<p>A good year is a boring year. +A great year is a very boring year. +I look at future with growing distaste and huge amount of panic. +2024 has bean a good year, as nothing bad happened to me or the closest to me.</p> +<p>Here&rsquo;s to another dull year!</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Thu, 02 Jan 2025 21:37:00 +0100</pubDate> + <guid>4d521912f1438301453bb460a0ac8520</guid> + </item> + <item> + <title>Armitage III (1995)</title> + <link>https://crys.site/reviews/anime_manga/armitage-iii-oav/</link> + <description> + <p>There was a time when anime was <em>the</em> place to get cyberpunk-like stories. +Titles like <em>Akira</em> or <em>Ghost in the Shell</em> are still the standard, which which we measure new movies. +In most cases, that&rsquo;s a very disappointing comparison. +Have we peaked in the 90s?</p> +<p>But among those giants, a lot of titles dissapeared from our shared consciousness. +What once was known to anyone in the SF and/or anime community, is now completely forgotten. +This is a review of such title.</p> +<p><em>Armitage III</em> is a 4 part OAV series from 1995. +Damn, that&rsquo;s close to 30 years! +In it, we are transferred to the not-too-distant future. +Mankind has colonized Mars and humanoid robots became a commodity. +Ross Sylibus is a detective from Earth transferred to Mars after an accident where a robot left him crippled and forced to use cybernetic leg. +He is assigned new partner - Naomi Armitage. +At the same time, a series of robot&rsquo;s murders is discovered. +We learn that they were all a part of a new series of androids - The Thirds. +They are not known to the public, but it soon we learn that in contrast to all previous generations, they are capable of bearing children.</p> +<p>The story here is, sadly, very basic. +There is a reason to why <em>Armitage III</em> is a forgotten classic. +Upon my first rewatch of the series since my teen years, I left a bit dissapointed. +We&rsquo;ve got robot woman, who can be impregnated by human males. +How much story possibilities does it give? +How many questions does it raise? +Apparently, zero. +They give birth to humans, end of story. +This is not a philosophical anime.</p> + + + + + + + + +<figure + class="centered" +> + <a href="https://crys.site/reviews/screenshots/armitage-iii-oav-1_hu8799345633121022968.jpg"> + <img + alt="" + src="https://crys.site/reviews/screenshots/armitage-iii-oav-1_hu10753540985211866555.png" + srcset=" + https://crys.site/reviews/screenshots/armitage-iii-oav-1_hu10753540985211866555.png 1x, + https://crys.site/reviews/screenshots/armitage-iii-oav-1_hu6991387434335146988.png 2x + " + width="640" + height="480" + loading="lazy" + > + </a> + + <figcaption> + +I love that 90s aestesteric. +Someone spent hours on those bullet holes. + <a href="https://animenostalgia.tumblr.com/post/651897636160487424" target="_blank" title="source">[source]</a> + + </figcaption> + +</figure> + +<p>But if not that, then what? +Well, it&rsquo;s deeply human. +It should not come as surprise that Naomi Armitage is a Third (it&rsquo;s in the title!), and all she wants is to be a human. +She doesn&rsquo;t understand her place in the world. +Humanity seems to <em>hate</em> robots, but it was the same humanity who created them. +For her, the story is finding her human side. +For Ross it&rsquo;s about dropping all prejudice against androids. +He starts as someone who would wear a &ldquo;no robots allowed&rdquo; t-shirt (if tshirst were still in fashion), but when he gets to know Naomi, all his believes are put to a test.</p> +<p><em>Armitage III</em> and everything in it is just a pretense for their story. +If we look at it like that, it&rsquo;s really nice. +There is no pretense to ask questions about nature of humanity. +It&rsquo;s much more starigt forward, and is done really well. +There is <em>some</em> depth - humans treat android as property. +They are sexualized, but they are more sexual creatures. +They walk half naked, but it&rsquo;s all for the joy of humans. +The first robots who are closer human, who can bear children, is hunted and have to live in hiding. +But that all plays second part.</p> + + + + + + + + +<figure + class="centered" +> + <a href="https://crys.site/reviews/screenshots/armitage-iii-oav-2_hu1172055006466100878.jpg"> + <img + alt="" + src="https://crys.site/reviews/screenshots/armitage-iii-oav-2_hu17367412055929525294.png" + srcset=" + https://crys.site/reviews/screenshots/armitage-iii-oav-2_hu17367412055929525294.png 1x, + https://crys.site/reviews/screenshots/armitage-iii-oav-2_hu17928384205759454475.png 2x + " + width="765" + height="574" + loading="lazy" + > + </a> + + <figcaption> + +I said it's over-sexualized + <a href="https://pinnedupink.com/blogs/flashbacks/armitage-iii-martian-cyberpunk-review" target="_blank" title="source">[source]</a> + + </figcaption> + +</figure> + +<p>Even the ending, where we learn why Thirds were developed, is only a reason for more Ross/Naomi scenes.</p> +<p>All in all, <em>Armitage III</em> is a very well made classic. +I love the character design, I like the music. +They action scenes are nicely done, there is no time to be bored. +All my gripes come from comparisons with <em>Ghost in the Shell</em>, but those comparisons are not needed.</p> +<p>As it stand, I wholeheartedly recommend <em>Armitage III</em> to anyone exploring the golden age of anime. +Just don&rsquo;t come in expecting one of the greats.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Tue, 24 Dec 2024 20:56:00 +0100</pubDate> + <guid>f0da2ffd8f3b48349495d05ece1f4676</guid> + </item> + <item> + <title>LLMs are everything that it wrong in the world of computing</title> + <link>https://crys.site/blog/2024/llms-scare-me/</link> + <description> + <p>For decades corporations have been doing anything in their power to make computers <em>worse</em>. +Software used to much faster, much leaner than it is now. +Hardware performance is progresing by leaps and bounds, but somehow the software is slower. +Yes, programs we run (cough, web applications, cough) are more complex, but the complexity increase is smaller than the compute improvements.</p> +<p>Software used to also be substantially better written. +When sending patches to clients was a risk by itself, releasing barely working software was akin to shooting yourself in the foot. +Now bug are expected. +Again - I am comparing simpler software to what we have now, but the complexity increase is smaller than increase in budgets and team sizes.</p> +<p>Software also used to be:</p> +<ul> +<li>much more open</li> +<li>purchasable</li> +<li>not requiring internet</li> +<li>not as streamlined</li> +<li>not designed by psychologists to be addictive</li> +<li>not designed to be a constant stream of revenue</li> +<li>swiftly improving</li> +<li>possible to be created by teens in their bedrooms</li> +<li>simple (as in having a limited use case)</li> +<li>small</li> +<li>running on different hardware architectures (yes, there used to be more than 3 systems)</li> +</ul> +<p>I am often accused of romanticizing past, but I am far from that. +Software of the golden age had lots of problems, it was far from perfect. +I am critical of the path we took - as it was aimed not at <em>better software</em>, but at <em>better return of investment</em>. +We could have had much better working computers, but here we are. +Everything is barely working but dollar pours. +Some call it enshittification, others distribution. +All I know is this is not going to stop. +It is never enough.</p> +<p>This brings me to ChatGPT, LLMs and all that crap. +I have to admit, that the way it works is extremely cool. +Some vector math is able to fool us into thinking we are interacting with a human being? +How cool! +I&rsquo;d love bo be amazed by it, but if you we look at it critically, it a is terrible peace of software. +It is slow, expensive, and non-deterministic. +If I released a code to production with has <em>some chance</em> to work or not, I would need to fix it. +If the same software yielded different returns <em>by design</em>, I&rsquo;d need to rewrite it.</p> +<p>I am fully convinced that LLMs are not a path forward at best, and a huge step backward at worst. +A lot of people are looking at this tech with scared eyes, but there&rsquo;s no chance LLM will be better than they are.</p> +<p>However, as in the above examples, better doesn&rsquo;t always win. +I am afraid that too much money was invested in this dead-end technology for it to fall. +The entire computing world is the hands of a few gigantic companies, and each of them has fully risked their future on it. +Google, Microsoft, Amazon, NVIDIA, AMD, Apple - by the end of 2024 there is no big computer company left that is not &ldquo;AI first&rdquo;. +Will they let their investments go to waste?</p> +<p>Google search is useless; Windows is a clown show; Facebook/Twitter are not be touched by humans. +Yet they own <em>billions</em> of dollars. +They are able to throw piles of dollars in the data center furnace and wait. +The fact that they also benefit from those dollars doesn&rsquo;t make it any harder.</p> +<p>I know people who already can&rsquo;t work without asking ChatGPT and they lived through better times. +But I also know teens who never had a fast computer; for whom slow a web app is the only status-quo they have experienced. +For them the current crap software is simply <em>software</em>. +I am really afraid that the next generations may never know deterministic software. +Companies can simply continue to add &ldquo;AI&rdquo; features (since AI is now a synonym for GenAI), and raise the kids with it. +Will the kids care that it sucks? +Will they even know?</p> +<p>Will they give a rat&rsquo;s ass that the GenAI has only two goals: first, to become abstraction over all interactions with computer; second - to make people obsolete? +I think the first one is the goal, while the other is what GenAI dealers sell to investors. +Microsoft and Google want to be between everything we do with out computers; that was their strategy for a long time. +It&rsquo;s a self-propelling nightmare: the worse the vision, the bigger is the money river, which fuels making computers unusable. +We have already lost so many alternatives - Google is trying to fix itself with GenAI after it destroyed itself with ads, after it destroyed all competition. +The web was already great. +Microsoft Windows ate all other x86 OSes except of Unix - and we had dozens of great ones. +Apple iOS or Google Android are mandatory - but this was not the case a few short years ago.</p> +<p>Progress is not linear and <em>better</em> doesn&rsquo;t always win. +In most cases whatever gives more return to the investors does. +And no other technology has more investor risk attached to it than LLMs. +AI has a lot of usecases, but it is thrown away to make way for GenAI. +This steamroller may break computers, the economy, and the environment. +But there is nothing we can about it, as none of us is a billionaire. +All we can do is to dance how it pleases them.</p> +<p>Unless something <strong>big</strong> happens. +With infinite pockets, the giants can just <a href="https://indiadispatch.com/2024/12/22/big-techs-292-billion-ai-spending-spree-meets-the-revenue-desert/">burn the money</a> - literally.</p> +<hr> +<p>I will keep this site althole-free, and I will personally run software that has zero LLM. +I don&rsquo;t use copilot, I had only a dozen chats with GPT. +I will try to continue keeping LLM subjects here to a minimum. +This is my life and this is where I have any control. +This is the only rebellion I am capable of.</p> +<hr> +<p>In unrelated news - SystemD now tries to convince people that having file-based logs is deprecated. +And in few short years we will have Linux &ldquo;administrators&rdquo; who don&rsquo;t know how to use grep(1).</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Mon, 23 Dec 2024 21:53:00 +0100</pubDate> + <guid>a07c8a39af494e803fab6fd1741a23e5</guid> + </item> + <item> + <title>New license plate frame</title> + <link>https://crys.site/blog/2024/frame/</link> + <description> + <p>My car&rsquo;s license plate frame broke, so I had to get new one. +I could get a boring, all-black one&hellip; or add a few <em>PLN</em> and have it personalized.</p> + + + + + + + + +<figure + class="centered" +> + <a href="https://crys.site/blog/images/license-frame_hu9942410596856573130.JPEG"> + <img + alt="A black license plate frame. On the left a white &amp;quot;FreeBSD&amp;quot; text can be seen, and on the right &amp;quot;RunBSD&amp;quot;" + src="https://crys.site/blog/images/license-frame_hu7901744941458084521.png" + srcset=" + https://crys.site/blog/images/license-frame_hu7901744941458084521.png 1x, + https://crys.site/blog/images/license-frame_hu304296380706668907.png 2x + " + width="600" + height="159" + loading="lazy" + > + </a> + + <figcaption> + +My new frame + </figcaption> + +</figure> + +<p>You can now easily spot me on the road and say hello (or curse me)!</p> +<p>If my back one breaks as well, I&rsquo;ll need something Emacs-themed.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Sat, 21 Dec 2024 21:08:00 +0100</pubDate> + <guid>a155e14df5f72e56175997a093b76f1f</guid> + </item> + <item> + <title>Hiatus due to Advent of Code</title> + <link>https://crys.site/blog/2024/aoc-hiatus/</link> + <description> + <p>I was tricked into participating into Advent of Code. +I had no idea much time it would take! +Therefore, don&rsquo;t expect many updates here till the end of the year outside of fresh batches of the <a href="/more/bookmarks/">hottest bookmarks</a> out there. +I&rsquo;ll try to spend all the little free time I have on those assignments. +See you!</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Mon, 09 Dec 2024 00:01:00 +0100</pubDate> + <guid>a0f611729afcbd45492fa2aed2822f48</guid> + </item> + <item> + <title>Things I care about: documentation</title> + <link>https://crys.site/blog/2024/good-documentation/</link> + <description> + <p>This is a new passion for me. +For <em>ages</em> I was googling-first, and only then looking into documentation. +And it was one of the worst mistakes I&rsquo;ve ever made. +It&rsquo;s the standard way to start things, but it makes it impossible to be good at them.</p> +<p>I know how this changed: I moved to FreeBSD. +Say what you will about Linux/Mac/and so on - their documentation is terrible. +BSDs however threat their docs with love and care they deserve.</p> +<p>There is, however, another reason. +And thisone makes me sad. +So many of my colleagues limit themselves to asking ChatGPT &ldquo;how to I reverse a string&rdquo;. +That&rsquo;s no way to learn, to grow. +The only thing you are achieving by that is making themselves more reliant on some new gadget and the destruction the planet. +There should a world for people like me, who judge others based on their use of GenAI. +Something positive, of course.</p> +<p>But back to documentation. +I participate in Advent of Code, which requires me to find APIs I may have used 10 years ago. +But all I really need is to know if I&rsquo;m thinking about string, enumerable, or integer. +Everything else is simply there, waitin, happy to share it&rsquo;s knowledge. +It&rsquo;s available for free and written in languge I understand.</p> +<p>At this point, the first place I go to when encountering a problem are man-pages, then online docs. +Stack Overflow, Reddit, and so on are simply terrible. +Outdated, full of hate, done for some internet points. +Having your documentation be Github or Discord is a slap in the face - I can&rsquo;t search or <em>even access</em> it without giving my data to a malicious agent.</p> +<p>I now understand why <em>gurus</em><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> in their 50s, 60s and so on are so good at whey did. +They had to look up documentation, so they had to know what they were looking for. +And in the process they most likely learned a lot of random things. +They didn&rsquo;t waste their time with &ldquo;Learn SQL in 20 minutes. Complete Course from begginer to expert&rdquo; on YouTube by &ldquo;TechChan2000&rdquo;.</p> +<p>I&rsquo;ve mentioned that I use Vim(1) quite a lot now. +And while yes, sometimes I hit a wall and ask on IRC, most of my problems can be simply solved by a quick <code>:h</code>. +There is nothing better than having documentation distributed with programs or operating systems. +Good documentation is the goal, but <em>having it</em> is the first step.</p> +<p>A lot of modern software doesn&rsquo;t come with manual. +Some of it even doesn&rsquo;t have online documentation. +And while I get that one may sometimes need to pay for it (is it still the case?), it needs to exist.</p> +<p>At this point I want my docs to:</p> +<ol> +<li>Be easily accessible, preferably from shell. Browser depletes my small reserves of focus.</li> +<li>Have general introduction (think <code>man man</code>). I want to know what we are talking about.</li> +<li>Have details. Yeah, this is most likely what I am looking for.</li> +<li>Have EXAMPLES. BSDs have this perfected.</li> +</ol> +<p>Pretty soon I will refuse to use software without proper documentation. +And I find this as a surprise, as it wasn&rsquo;t the case, but having <em>good</em> documentation at hand is additive. +Not having to rely on mediocre search engine is the stuff dreams are made of.</p> +<hr> +<p><code>Man pages</code> have a bad rap, as they tend to be long and difficult to comprehend. +But if one dedicates enough time to learn how to use them, it will pay significant dividends.</p> +<p>People also tend to have a hard time finding things in there. +Luckily there is <code>apropos(1)</code> and <code>whatis(1)</code>, which, in tandem, let us search for manpages related to what we are looking for. +Of couse, we can <code>man apropos</code> and <code>man man</code>.</p> +<div class="footnotes" role="doc-endnotes"> +<hr> +<ol> +<li id="fn:1"> +<p>n. [UNIX] An expert. Implies not only wizard skill but +also a history of being a knowledge resource for others. Less +often, used (with a qualifier) for other experts on other systems, +as in `VMS guru&rsquo; (via <a href="https://latel.upf.edu/morgana/altres/cibres/hackers/Hacker_G.html#entr_089">The Hacker&rsquo;s Dictionary</a>)&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p> +</li> +</ol> +</div> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Wed, 04 Dec 2024 22:08:00 +0100</pubDate> + <guid>91dcc2afc29744130b19876b93f41108</guid> + </item> + <item> + <title>Things I care about: stable APIs</title> + <link>https://crys.site/blog/2024/stable-api/</link> + <description> + <p>I&rsquo;m a FreeBSD guy, not a Linux person. +I use Emacs(1), plain HTML, jpg/gifs. +I love Irssi, notmuch, xmpp. +I code in Ruby, not in Python. +I&rsquo;m using more and more vim, but not neovim.</p> +<p>What is the pattern here? +Stable APIs. +I&rsquo;m too old to chase the current trend just to chase it. +I want to lay down and have a nice time. +I want to tinker with the software because I want to tinker it, not because the API changed. +I don&rsquo;t even auto-update apps on my phone! +But it seems that things are changing just to be changed. +Nothing can be good <em>enough</em>, there is always this new crazy idea we simply have to chase.</p> +<p>Case in point: Hugo. +I used to love Hugo. +Hugo is amazing! when you first start to use it. +But then your site grows; I now have over 6000 sub pages. +So, what does Hugo do? +Break things. +I am afraid to update this damn thing, as there is a significant chance there will be some breaking change. +Sure, it may be a warning here and there, but then it will stop working. +Don&rsquo;t like where I put my name for RSS? +It was OK a month ago. +Hate my use of HTML in markdown? +We had a deal! +I was to do it when markdown shows its huge limits.</p> +<p>I used to run neovim(1). +It was shiny, it was fast, it was multi-threaded. +But the community doesn&rsquo;t care for old farts like me, and each update of packages was a lottery - what will break <!-- raw HTML omitted -->this time<!-- raw HTML omitted -->? +Neovim broke vim, so why the hell not, right? +(btw, hating of neovim community is a subject for a different time).</p> +<p>Yeah, no. +Thank you. +Since I&rsquo;m using tmux(1) more and more, I&rsquo;ll stick to good, old vim(1). +My Emacs(1) config will most likely work for at least a few years before something breaks. +I don&rsquo;t expect FreeBSD to adapt SystemD/the-whatitsname-ifconfig-replacement.</p> +<p>And yes, they can rip Xorg from my cold, dead hands.</p> +<p>I&rsquo;m not against progress, I love my multi threading, I love my fast internet. +What I hate is progress at all cost. +Sometimes it&rsquo;s nothing at all cost, as GPT doesn&rsquo;t offer anything new. +But the cost it always there in the form of something that was there, working, having a great time.</p> +<p>Do you know that there are people solving Advent of Code using awk(1)? +Yes, this old rusty thing. +Somehow, after all those years, it is still <em>good enough</em> for the task.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Tue, 03 Dec 2024 22:23:00 +0100</pubDate> + <guid>c28a17de5fd47d01e8524506be26d5de</guid> + </item> + <item> + <title>Bookmark dump for November 2024</title> + <link>https://crys.site/blog/2024/bookmarks-nov/</link> + <description> + + +<p>Here are some cool webpages I've found recently:</p> +<ul> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <li> + 2024-11-28 + - + <a href="https://news.slashdot.org/story/24/11/28/1831249/coffee-at-highest-price-in-47-years">Coffee at Highest Price in 47 years</a> + (news.slashdot.org) + + + + + <li> + 2024-11-26 + - + <a href="https://arstechnica.com/tech-policy/2024/11/doj-wraps-up-ad-tech-trial-google-is-three-times-a-monopolist/">DOJ wraps up ad tech trial: Google is “three times” a monopolist</a> + (arstechnica.com) + + + + + <li> + 2024-11-26 + - + <a href="https://9to5google.com/2024/11/25/google-ios-app-link-annotations-search/">Google app for iOS now injects links back to Search on websites</a> + (9to5google.com) + + + + + <li> + 2024-11-26 + - + <a href="http://textfiles.com/underconstruction/88x31/">The 88x31 GIF Collection</a> + (textfiles.com) + + + + + <li> + 2024-11-25 + - + <a href="https://tumfatig.net/2024/running-web-browsers-in-freebsd-jail/">Running Web Browsers in FreeBSD Jail</a> + (tumfatig.net) + + + + + <li> + 2024-11-25 + - + <a href="https://fabionatali.com/posts/make-your-gnupg-key-discoverable-via-web-key-directory/">Make your GnuPG key discoverable via Web Key Directory</a> + (fabionatali.com) + + + + + <li> + 2024-11-24 + - + <a href="https://www.youtube.com/watch?v=XA2WjJbmmoM">How to Do 90% of What Plugins Do (With Just Vim)</a> + (youtube.com) + + + + + <li> + 2024-11-24 + - + <a href="https://dustycloud.org/blog/how-decentralized-is-bluesky/">How decentralized is Bluesky really?</a> + (dustycloud.org) + + + + + <li> + 2024-11-24 + - + <a href="https://dataswamp.org/~solene/2024-11-15-why-i-stopped-using-openbsd.html">Why I stopped using OpenBSD&#39;</a> + (dataswamp.org) + + + + + <li> + 2024-11-24 + - + <a href="https://www.youtube.com/watch?v=YCjNT9qGjh4">Half-Life 2: 20th Anniversary Documentary</a> + (youtube.com) + + + + + <li> + 2024-11-24 + - + <a href="https://vermaden.wordpress.com/2024/11/22/new-jless-freebsd-jails-list-manage-tool/">New jmore(8) FreeBSD Jails List/Manage Tool</a> + (vermaden.wordpress.com) + + + + + <li> + 2024-11-24 + - + <a href="https://brainbaking.com/post/2024/11/when-texting-destroyed-social-investment/">When Texting Destroyed Social Investment</a> + (brainbaking.com) + + + + + <li> + 2024-11-24 + - + <a href="https://blog.thechases.com/posts/planning-the-day-on-the-cli-with-tsort/">Planning the day on the CLI with tsort |</a> + (blog.thechases.com) + + + + + <li> + 2024-11-24 + - + <a href="https://arstechnica.com/tech-policy/2024/11/welcome-to-googles-nightmare-us-reveals-plan-to-destroy-search-monopoly/">Welcome to Google’s nightmare: US reveals plan to destroy search monopoly</a> + (arstechnica.com) + + + + + <li> + 2024-11-24 + - + <a href="https://danluu.com/input-lag/">Computer latency: 1977-2017</a> + (danluu.com) + + + + + <li> + 2024-11-24 + - + <a href="https://datatracker.ietf.org/doc/html/rfc1288">RFC 1288 - The Finger User Information Protocol</a> + (datatracker.ietf.org) + + + +</ul> +<p>You can find more on <a href="/more/bookmarks">Bookmarks</a></p> + + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Mon, 02 Dec 2024 22:00:00 +0100</pubDate> + <guid>6b874a250594f819bfede77a365c87f0</guid> + </item> + <item> + <title>GenAI dealers and self awareness</title> + <link>https://crys.site/blog/2024/gen-ai-awerness/</link> + <description> + <p>I watched a very long promo movie for <a href="https://www.youtube.com/watch?v=C25g53PC5QQ">an AI browser.</a> +At first I was afraid on what kind of new nightmares are they planning, but luckily it&rsquo;s nothing like that. +Yes, it&rsquo;s close to useless and takes too much energy, but nothing for me to be worried about.</p> +<p>What coughed my eye however was how they made the movie. +It&rsquo;s full of soft lighting, kind chat, drawing on paper. +It&rsquo;s a nice, comfy, warm scene. +It&rsquo;s everything the product is not. +Remember when oil companies bought ads to show them as the nice guys? +Now the most vile of technology is pretending to be this nice, older fella.</p> +<p>While creating the final straw in the tech bubble, they are pretending to use a <em>real</em> video tape. +And while I get it (I also wouln&rsquo;t like to be connected to any of GenAI), it&rsquo;s fake. +It&rsquo;s as a fake as the grain we see in the movie. +It leaves me wondering, how much of this is good advertising, and how much is self-awareness. +The are the bad guys, but do they know it? +The third chapter of the movie tells how GenAI are still useless, so maybe they are starting to see the bigger context?</p> +<p>Guess it&rsquo;s time to start blocking not only AI Bots, but also AI browsers.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Mon, 02 Dec 2024 14:49:00 +0100</pubDate> + <guid>a5d0291b6b4d2eaaf73403fa3173ce82</guid> + </item> + <item> + <title>Moscow 2042 (Vladimir Voinovich, 1986)</title> + <link>https://crys.site/reviews/books/moscow-2042-1986/</link> + <description> + <p>Up till recently, I have not heard of Vladimir Voinovich. +As you may have noticed, my knowledge of Russian SF literature is quite shallow. +Everyone has read at leat a few novels from Strugatsky brothers, and I am only now doing it. +But as it turns out (thanks Mastodon!), Voinovich was a prolific writer. +At least enough prolific and critical to be forced into exile from Russia! +Somehow, it seems that only a few years Russian literature was considered to be up there, right among the final bosses of literature! +But I&rsquo;m too shallow for that. +I will finish Solzhenitsyn&rsquo;s <em>Gulag Archipelago</em> one day (the third book is wainting for me for some 15 years), but right now I NEED some fantastic elements in my critique of Communists regime. +Luckily, Voinovich has me covered.</p> +<p><em>Moscow 2042</em> is satirical novel where the author describes his fantastical time travel into the future, where he is sent to learn about and report on the Communism to come. +You may have already guessed, that the painted picture is not pretty at all.</p> +<p>It doesn&rsquo;t start like that. +At first, Voinovich gets enticed with what he is presented with. +It seem that the Communists of 2042 have learned from the past. +They removed all the evil parts that <em>we</em> have seem (and there were lots of them), but kept the spirit of communism: brothership, unity, and happiness.</p> +<p>I will not spoil anything for the Curious Reader, but we spend the rest of the novel destroying that picture. +Now, I am a bit too young to fully appreciate that (being born only 4 years before Poland regained it&rsquo;s independence from USSR), and I am sure to have missed a lot nuances, but I laughed and I cried. +Author dissects all the horrors of communism then exaggerates them to absurd. +It&rsquo;s kept light in tone, the atrocities seem distant and therefore funny. +No chance in hell a system like that could ever be conceived. +No one is cynical enough to establish it (but they did!) +Fictionalized Voinoich is not a <em>member</em> of this society. +He is a VIP guest. +He is able to get all the benefits it can give to the chosen few. +And boy, if he doesn&rsquo;t! +He takes all he can, not caring where it came from - as he starts to see behind the cracks. +It&rsquo;s very hard to feel any sympathy for him. +But then the bill comes&hellip; and I&rsquo;ll stop here. +The story is masterfully crafted.</p> +<p>I was, however, surprised by the SF elements. +For most of the text, they are reduced to a MacGuffin, a non important tool to tell the story. +If it stayed like this, <em>Moscow 2042</em> (I keep writing it as 2024&hellip;) would be an excellent story. +However, this changes significantly. +Again, I won&rsquo;t go into spoiler territory (it came as a huge surprise!) but it is a time travel story with all of it&rsquo;s possibilities and paradoxes. +Up till it is revealed, the time travel story make the book make very little sense (still great), but as a complete package it does. +It may not go as hard into it like, let&rsquo;s say <em>All You Zombies</em>, but it goes hard enough to go into my personal &ldquo;top time travel stories&rdquo;, together with the aforementioned short story, <em>Time Crimes</em>, <em>Looper</em> and <em>Primer</em>. +I have a type it seems.</p> +<p><em>Moscow 2024</em> is one of the greatest SF books I&rsquo;ve ever read. +It&rsquo;s fantastical in it&rsquo;s nature, but the story is humanist. +A true marvel you owe yourself to experience.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Sun, 01 Dec 2024 21:28:00 +0100</pubDate> + <guid>497b2bc533716cc3bc65d974071fd297</guid> + </item> + <item> + <title>Chotto 0.1.1 Released</title> + <link>https://crys.site/projects/chotto/0-1-1/</link> + <description> + <p><a href="/projects/chotto/">Chotto</a> 0.1.1 has been released:</p> +<ul> +<li>fix exec config in gemspec. You should be now able to run &ldquo;gem exec chotto&rdquo;</li> +</ul> +<p>Git tag: <a href="https://cgit.crys.site/chotto/tag/?h=0.1.1">0.1.1</a> +Sha256: <code>adaa7bcc0ce817bcc148f8a7d0554fca5d4644133c22d396081318a3f0506681</code></p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Thu, 28 Nov 2024 15:24:00 +0100</pubDate> + <guid>6bdd89fcde2d3a5ed16a683dc8ab69a3</guid> + </item> + <item> + <title>Chotto 0.1.0 Released</title> + <link>https://crys.site/projects/chotto/0-1-0/</link> + <description> + <p><a href="/projects/chotto/">Chotto</a> 0.1.0 has been released:</p> +<ul> +<li>Improve filtering DSL (it works now)</li> +<li>Allow to select order of messages in filter</li> +<li>Allow for processing other messages in thread</li> +<li>Allow to process only new messages</li> +<li>Add mailing list default filter</li> +<li>Add spam default filter</li> +<li>Lazy fetch tags in message</li> +<li>Distribute as gem (not yet in rubygems. This is planned for 0.3.0)</li> +</ul> +<p>I use this version on my systems. +New ideas are yet to be documented, but you can learn how to use it from provided filters. +Full documentation will follow soon.</p> +<p>Git tag: <a href="https://cgit.crys.site/chotto/tag/?h=0.1.0">0.1.0</a> +Sha256: <code>88864df97129486435af0d0c6281a2187213d926066f91e973503ffc0c9b3243</code></p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Wed, 27 Nov 2024 20:58:00 +0100</pubDate> + <guid>fa96bb075fc1b15ca117bced2ec0da3d</guid> + </item> + <item> + <title> Useless things you may want to know: on the origin of "vi" + </title> + <link>https://crys.site/blog/2024/origins-of-vi/</link> + <description> + <p>We all know, that <code>vim(1)</code> stands for &ldquo;vi improved&rdquo;, but what the buttocks is &ldquo;vi&rdquo;?</p> +<p>Well, in the ancient times, a great editor was born - <code>ex(1)</code>. +While <code>ed(1)</code> still is <em>the</em> standard editor, it&rsquo;s lineage is not that simple. +The <code>ex(1)</code> editor expanded on <code>ed(1)</code>&rsquo;s line-oriented text editing. +In short: <code>ed(1)</code> was designed before computer displays were common, but <code>ex(1)</code> came out later.</p> +<p>Therefore, <code>ex(1)</code> added a visual mode, where changes were displayed on the display. +Like in Star Trek! +This mode was enabled by calling the <code>:visual</code> command, or (in short) <code>:vi</code>.</p> +<p>There you go, cyberpalls. +You&rsquo;re now armed with a bulletproof story for the upcoming X-Mass parties!</p> +<p><code>vim(1)</code> stands for <code>visual mode of ex, the improved standard text editor, improved</code>. +(and, yup. <code>vi(1)</code> is a standalone program as well. +But we&rsquo;re talking about naming here).</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Mon, 25 Nov 2024 23:44:00 +0100</pubDate> + <guid>c23abbbc35538c2b8cb69523a73a8f10</guid> + </item> + <item> + <title>RE: Self-Hosting Isn't a Solution; It's A Patch</title> + <link>https://crys.site/blog/2024/re-self-hosting/</link> + <description> + <p>Recently, an article written by Mathew Duggan titled <a href="https://matduggan.com/self-hosting-isnt-a-solution-its-a-patch/">Self-Hosting Isn&rsquo;t a Solution; It&rsquo;s A Patch</a> has been shared everywhere. +Frankly, I disagree with it quite deeply. +It&rsquo;s not even about giving terrible examples of Apple and Fastmail as <em>private</em> services (with servers in Australia and US, governments have a open line to get the data. Also, Apple is an ad company now as well), but more on the definition of <em>decentralization</em>.</p> +<p>Mathew argues that &ldquo;Self-hosting platforms are fragile.&rdquo; +Well, this where I can not agree, as this not the type of services I advocate for.</p> +<p>Self-hosting platforms are, for the most part, ultra resilient because they don&rsquo;t rely on any single provider. +My Mastodon instance can be shut down by a lunatic (again), but then I can simply move to any other server. +This it root of <em>decentralization</em> as it&rsquo;s based on <em>interoperability</em>. +You can&rsquo;t change Twitter provider, it doesn&rsquo;t work like this. +When Musk gets bored with ruining it, he may very well turn of the lights and all of Twitter will never to be seen again.</p> +<p>Self-hosting is not the goal in itself, as it would make no sense. +You can&rsquo;t self-host for self-hosting sake, as no one will be able to use it. +Only by allowing interoperability, you give it a raison d&rsquo;etre. +WWW is decentralized, Email is decentralized, IRC is decentralized and so on. +And while I love the idea of self-hosting all of it, unless people who won&rsquo;t, can access it, it makes non sense. +This site could have been hidden behind a firewall, never to be exposed to a random visitor. +But while it is self-hosted in my living room, I allowed it to be accessed from the wild, open net. +It may go down any minute (and it will; I have no UPS), it will not matter in the grand scheme of things and millions of other sites will be there, unmoved by my sheer lack of better things to do.</p> +<p>Imagine world where all of the web relies on a single provider. +It&rsquo;s a VC&rsquo;s wet dream. +We are close to that (please, don&rsquo;t use AWS), but we are not there yet. +The web is decentralized, interoperable and you <em>may</em> self host how much of it as you want.</p> +<p>What&rsquo;s more, Mathew also assumes that it&rsquo;s free labor. +Is it? +Some of if it, yes. +But people (like me) earn a living from developing and maintaining the open-web. +Threads, while still being Meta, is available from the Fediverse. +It&rsquo;s not self-hosted, but your self-hosted instance can be accessed from it. +And Zuck sure earns a lot from it.</p> +<p>In fact, a lot of <em>centralized</em> services stared as <em>decentralized</em>. +Remember when Slack was accessible from IRC clients? +When Google Talk was just an XMPP? +It worked much better than it does now. +And this is exactly what I advocate for. +It never was a Utopian idea, it was a reality and a normal thing. +It&rsquo;s the centralization of the web which is the outlier.</p> +<p>Privacy is a side-product of decentralization, of self-hosting. +While it the essential, it&rsquo;s not the whole picture. +GDRP is a bare minimum, it&rsquo;s tax <em>we</em> pay for the web of today. +We should have never needed it.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Mon, 25 Nov 2024 21:14:00 +0100</pubDate> + <guid>e24f076ee9342b761324aaaf7e7d42cf</guid> + </item> + <item> + <title>Updated pages</title> + <link>https://crys.site/blog/2024/updated-pages/</link> + <description> + <p>Recently, I have updated some pages:</p> +<ul> +<li><a href="/more/now/">Now</a> - which shows my current interest in <code>finger(1)</code></li> +<li><a href="/more/links/">Links</a> - which are finally manageable</li> +<li><a href="/more/contact/">Contact</a> - which look like they look now thank to envy of <a href="https://jcs.org/contact">joshua&rsquo;s site</a>.</li> +</ul> +<p>Most likely I&rsquo;ll recreate more in the coming weeks, but for now I am focusing on bringing <a href="/projects/chotto/">Chotto</a> to version 0.1, which will have enough features to be usable.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Sat, 23 Nov 2024 22:39:00 +0100</pubDate> + <guid>d7a0574718f279eb03e4434637514da9</guid> + </item> + <item> + <title>Lost keys</title> + <link>https://crys.site/blog/2024/lost-keys/</link> + <description> + <p>Remember my recent <a href="https://crys.site/blog/2024/broken-system/">post</a> where I came out as the stupid one? +Well, lack of backup strikes again!</p> +<p>Turns out that one of the things I&rsquo;ve lost were my GPG keys and I can&rsquo;t seem to find my revoke key. +At least I didn&rsquo;t upload any of those to any keyserver&hellip;</p> +<p>So, as a result I am not using any GPG key at the time being. +I&rsquo;ll re-upload a new one, but only after I come it with a fool-proof backup plan.</p> +<p>Good thing that my migration to pass(1) didn&rsquo;t even start.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Fri, 22 Nov 2024 20:23:00 +0100</pubDate> + <guid>e5553c4d0a77ee6bd67522c5d5cc1730</guid> + </item> + <item> + <title>Sir! We reinvent the wheel here!</title> + <link>https://crys.site/blog/2024/reinventint-the-weel/</link> + <description> + <p>I spend the last few days at $DAYJOB trying to create metrics monitor. +A Sidekiq services may (or may not) have emitted some stats which may (or may not) have been received by DataDog agent which may (or may not) have been received by data dog which may (or may not have) processed it and they may (or may not) be queried. +Turns out, that on step 831 of this pipeline <strong>my</strong> logs were rejected to save costs. +I cursed more than I will ever admit and I named everyone in proximity of this hellscape while cursing. +Screw you, Mr. Observability!</p> +<p>Now, analyzing logs and metrics is kinda in the epicenter of of being a software engineer. +They may say it&rsquo;s building software, but sometimes we build software just to maintain it. +It&rsquo;s not a new concept. +Ever since we became able to curve numbers on rock plates, someone had to analyze it.</p> +<p>Remember grep? +Tail? +Cat? +Our good old pals? +They served us pretty well over the years, didn&rsquo;t they? +And then we took them the the shed, shot them, and decorated our editors with their carcasses. +They are not adequate for <em>cloud scale</em>.</p> +<p>Well, we at $DAYJOB produce close to 20Tb of logs a day. +Is this a lot? +Certainly not enough to make Alhtole salivate, but much too much for a laptop to <em>grep</em> over.</p> +<p>We, as an industry, did what we always do: reinvent it. +Somehow the &ldquo;disruption&rdquo; idea is so etched into our very selves, that we do it to ourselves. +When we had a small problem of performance, we solved it by covering in layers upon layers of complexity.</p> + + + + + + + + + +<figure + class="pull-right" +> + <a href="https://crys.site/blog/images/how-youju-get-genai_hu4100722733616915020.jpg"> + <img + alt="A drawing of a man in a suit. top text: Do you want to get GenAI? bottom text: Because this is how you get GenAI" + src="https://crys.site/blog/images/how-youju-get-genai_hu479730418129302249.png" + srcset=" + https://crys.site/blog/images/how-youju-get-genai_hu479730418129302249.png 1x, + https://crys.site/blog/images/how-youju-get-genai_hu17387822763370681905.png 2x + " + width="200" + height="183" + loading="lazy" + > + </a> + +</figure> + +<p>Now, I hate DataDog mostly because their UX is abysmal. +It&rsquo;s a constant flood of popovers over hovers. +If you know how to use it with keyboard alone, please let me know. +My Vimium is not flexible enough.</p> +<p>But sucking is at the core of DataDog. +It&rsquo;s contrary to their best interest to reuse skills we already had. +Grep? +Forget it! +It&rsquo;s colorful blobs of structured data. +You just click on things which allow you to click on other things. +No need to worry your pretty little head with it. +If they build it, we will come. +And then we will not know anything else.</p> +<p>They could have <em>built</em> upon what was there, but this would not put them on a VC happy path. +They could have created a simple system, but instead a company needs to have people fluent in DataDog to operate DataDog.</p> +<p>And even with that, it&rsquo;s not <em>good</em> and certainly not great. +It&rsquo;s slow, clunky, takes horrendous amount of horse power to use their web interface. +The data is significantly delayed, and you need to sample it, as you can not afford not to. +But don&rsquo;t worry, if your have a blind spot as a result, you will never find the charts ever again! +Problem solved! +It&rsquo;s one in one of your 77622145201 dashboards.</p> +<p>I&rsquo;m currently angry at Data Dog, but it&rsquo;s not only them. +Our entire industry hates improving. +It&rsquo;s not enough to fix a problem, you should aim at changing the paradigm (and I have no idea what it even means!). +A coworker once joked that Google created Kubernetes to ensure that spinning new product is complex enough, for them to never have a competition.</p> +<p>This mindset results in us, not even being out of current tech bubble, looking for the next tech bubble. +Just let me grep logs!</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Thu, 21 Nov 2024 20:00:00 +0100</pubDate> + <guid>d2ca4acb5e914ba9f4a268b5439bde2d</guid> + </item> + <item> + <title>This site now has an IRC channel</title> + <link>https://crys.site/blog/2024/cryschan/</link> + <description> + <p>My IP was unbanned from libera.chat (I wasn&rsquo;t the one who got banned!), so I want to use it more. +After all, where else am I meet with my cyberpals? +Discord? +Let&rsquo;s have some self respect!</p> +<p>One of ways to achieve that is to have an IRC channel for this site.</p> +<p><strong>The official IRC channel for crys.site is <!-- raw HTML omitted -->##cryschan<!-- raw HTML omitted --> on libera.chat</strong></p> +<hr> +<p>IRC sure has changed since I used it. +I had a brief period of using it earlier this year, but it ended when my ISP changed my IP to a banned one. +But I&rsquo;ve learned that now:</p> +<ul> +<li>You can register a nick on a server. It&rsquo;s done via &ldquo;nameserver&rdquo;</li> +<li>You can register a channel, so no hostile takeover is possible. It&rsquo;s done via &ldquo;chanserv&rdquo;</li> +<li>You can have persistent connection with multiple clients attached. It&rsquo;s done via proxy service called &ldquo;bouncer&rdquo;</li> +<li>All the good, old clients still work</li> +<li>There&rsquo;s still a couple of hundred thousand people using IRC at any given moment</li> +</ul> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Wed, 20 Nov 2024 20:22:00 +0100</pubDate> + <guid>38311500b6928c8a3f4e01ed0afcca7a</guid> + </item> + <item> + <title>The Rock Paper Shotgun 100 and PC gaming</title> + <link>https://crys.site/blog/2024/rps-100/</link> + <description> + <p>Recently, the web page Rock Paper Shotgun published <a href="https://www.rockpapershotgun.com/the-rps-100-2024">a list of best 100 PC games.</a> +And what a list that is. +100 games from close to 45 years of PC history.</p> +<p>However, I consider it to be a complete misunderstanding of what made PC gaming different.</p> +<p>Currently, the biggest differentiating factor is the presence of thriving indie scene. +Ignoring it, all the mainstream games, are released everywhere. +And they are the same games, running on the same engines, having the same boring designs, having the same control scheme. +Yes, you can use keyboard with a PC, but you can pretend that it doesn&rsquo;t exist - gamepad <em>will</em> be supported. +What I&rsquo;m saying is that there is no difference between PC and console gaming in 2024.</p> +<p>20, 30, 40 years ago, it wasn&rsquo;t the case. +Not only were there a lot more systems (<a href="http://retro.ruben.com">Amiga! Commodore 64! Saturn! BBC Micro!</a>) than survived till today, but they all had their strengths and weaknesses. +Consoles were action-focused. +NES games were fast. +PC, for a long time, was catching up. +It was far behind of what Amiga was capable of.</p> +<p>However, at some point in the 90s, those gray boxes exploded as gaming machines. +This is where imagination ran wild, where a game from a year before looked ancient. +But most importantly, different genres rules the PC marked.</p> +<p>First, it was the adventure game. +We had Sierra, with it&rsquo;s Quest series, Phantasmagorias, Gabriel Knights and son. +We had Lucasarts, Tex Murphy, 3 Skulls of the Toltec, Flight of the Amazon Queen, or Discworlds. +PC inherited those genres from older computers, where text-based adventures were <em>the thing</em>. +This is where the children of Zork found their new homes.</p> +<p>Then we moved to RPGs, a genre for which I was too young for. +Gold box games, Dungeon Master, Wizardy, Might and Magic, and so on - just to limit ourselves the early ones. +Later, there was no competition of Fallouts, Baldurs, or Diablos.</p> +<p>Then RTS were everywhere. +C&amp;C, Warcraft, KKND, Polanie, Total Annihilation, Age of Empires&hellip;</p> +<p>Yes, most of those games moved to consoles, or came from other <em>computers</em> but they were designed with a computer person in mind. +Someone sitting in a dark room with a notepad, ready to draw a map. +Someone who was ready to click all things on other things for the entire evening. +Someone ready to do the same thing, all over again - build base, exterminate enemies, build another base.</p> +<p>Those games are almost absent from RPS&rsquo;s list. +Those were not action-oriented games. +They evolved into such, but action was not at their core.</p> +<p>But things changed dramatically. +No other company changed the gaming landscape as much as ID Software. +There were 3d games before, but none were Wolfenstein. +Duke was great, but it never got the never-ending popularity of Quake. +It may have been a better game, but it was not as fast.</p> +<p>For a long time, PC became the FPS machines. +There was no better platform for it, and there was not better input device than keyboard. +Console may have had better platformers, but it was the PC where angry, stinky teens shot rockets up each other&rsquo;s asses. +This changed, as I stated at the begging.</p> +<p>Meanwhile, RPS list names mostly games which DNA is rooted in modern unification of gaming as best PC games. +Yakuza? +Witcher? +Resident Evil? +Nier? +God of War? +Those are as different from what PC gaming was it gets. +They may be great, but they are action oriented spins on the old ideas. +They don&rsquo;t represent what PC gaming was and can be.</p> +<p>In fact, the only few games from the list that are <em>trully</em> PC are Crusader Kings, Factorio, Dwarf Fortess, Monkey Island, Fallout, and Deus Ex. +They were designed for PC, they are complex and slow - up to fault. +They not only <em>allow</em> playing on keyboard and mouse, but mandate it.</p> +<p>Yes, Doom and Quake were a PC games primary, but only because consoles of the time were unable to process data fast enough. +If they were, they would be a great place for them.</p> +<p>And where the hell is Nethack!?</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Sun, 17 Nov 2024 22:14:00 +0100</pubDate> + <guid>700db788557f670d8ab53270882a972d</guid> + </item> + <item> + <title>Hackers (1995)</title> + <link>https://crys.site/reviews/movies/hacker-1995/</link> + <description> + <p>There are movies which I absolutely despised when I first saw them. +They were loud, obnoxious, made little sense. +Some of them, with passing time, grew on me.</p> +<p>Hackers is a 1995 movie about, well, hackers. +We start with Dade, an 11 year old geek, being arrested for hacking and crashing over 1,5k computer systems. +He is sentenced to the worst imaginable sentence - an judge imposed mandated ban on using computer system till he reaches 18 years of age. +Somehow we don&rsquo;t care what happened during those years, as we jump 7 years in the future (which seem to be undefined &ldquo;now&rdquo; of 1990s). +Dade is hacking once again, and as a result he joins a group of hackers and becomes part of an conspiracy.</p> +<p>Say what you will, <em>Hackers</em> takes the hacker ethos pretty seriously and this is what escaped my teenage understanding. +All of the main characters (who are using simply amazing handles, like Zero Cool or Cereal Killer) break into system for the fun of it. +They are prosecuted by the government and media portrays them as dangerous individuals, but they are anything but maleficent.</p> +<p>Now, there is a plot where the entire group is messing with an FBI agent by hacking IT systems and modifying data related to him. +That&rsquo;s the closest where they come to having bad intentions, but it&rsquo;s presented as a cool game. +They don&rsquo;t want to destroy him, just to mess with him.</p> +<p>The hacking scenes make close to zero sense - but that&rsquo;s Hollywood for you. +We haven&rsquo;t seen serious attempt at showing it before <em>Mr Robot</em>. +Therefore, we can see past it.</p> +<p>The authors did made some research. +In one scene, Dade is tested from hacker knowledge. +A series of famous (and existing!) books is presented to him, and he names them with cure (also real!) nicknames like &ldquo;Orange Book&rdquo;.</p> + + + + + + + + +<figure + class="centered" +> + <a href="https://crys.site/reviews/screenshots/hackers-1_hu17246721049555444689.jpg"> + <img + alt="Group of youg man sitting at a table, covered in coloroful ligting. They are talking and holding and orange book." + src="https://crys.site/reviews/screenshots/hackers-1_hu3804141175295036484.png" + srcset=" + https://crys.site/reviews/screenshots/hackers-1_hu3804141175295036484.png 1x, + https://crys.site/reviews/screenshots/hackers-1_hu17887416857160986498.png 2x + " + width="720" + height="310" + loading="lazy" + > + </a> + + <figcaption> + +Orange book in person + <a href="https://medium.com/@atroche/my-favourite-visuals-in-hackers-1995-79b3292d7475" target="_blank" title="source">[source]</a> + + </figcaption> + +</figure> + +<p>But we can&rsquo;t see past the fashion. +I have no idea <em>how</em> anyone came with what we see here, but it&rsquo;s simply glorious. +Just look! +I refuse to believe, that this was not the official fashion of New York in the 90s.</p> +<p>Also, the quotes. +If there is a infinitely quotable movie, it is Hackers. +<em>Hack the Planet</em> or <em>&ldquo;There is no right and wrong. There&rsquo;s only fun and boring</em> should be recognized by anyone working in IT. +I may be wrong, but I think there are questions about <em>Hackers</em> on CompTIA Security+</p> +<p>What the movies makes in its heart, it lacks in brains. +The main villain is trying to get rich and put the blame on our hackers. +The plan makes very little sense, as the <em>twist</em> (which I will not reveal) would be very quickly discovered. +This removes some of the tension, as it&rsquo;s not stopping the evil guy, but about who will go jail.</p> + + + + + + + + +<figure + class="centered" +> + <a href="https://crys.site/reviews/screenshots/hackers-2_hu14743483835221931353.jpg"> + <img + alt="An white man is sitting in the center, back to us. In front of him is a huge screen with blue city-scape is in front of him." + src="https://crys.site/reviews/screenshots/hackers-2_hu13875702352800290153.png" + srcset=" + https://crys.site/reviews/screenshots/hackers-2_hu13875702352800290153.png 1x, + https://crys.site/reviews/screenshots/hackers-2_hu2545831334866828960.png 2x + " + width="765" + height="329" + loading="lazy" + > + </a> + + <figcaption> + +A typical data center + <a href="https://medium.com/@atroche/my-favourite-visuals-in-hackers-1995-79b3292d7475" target="_blank" title="source">[source]</a> + + </figcaption> + +</figure> + +<p>The antagonist character is also weak. +He has the most over the top quotes and reactions - even if he has the only hacker-worthy keyboard to be seen here. +The acting is great, as no one busted out laughing, but no points here.</p> +<p><em>Hackers</em> is a fun little movie, with a huge soul. +It&rsquo;s dumb, loud and over-stylized. +By any means I would not call it &ldquo;good&rdquo;. +But it&rsquo;s also one the few movies which show the soul of a hacker. +I think everyone should see it at least once. +It&rsquo;s not longer a bad thriller, it&rsquo;s a now a fun and cool cult movie.</p> +<blockquote> +<p>You wage wars, murder, cheat, lie to us and try to make us believe it&rsquo;s for our own good, yet we&rsquo;re the criminals. Yes, I am a criminal. My crime is that of curiosity.</p> +</blockquote> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Sun, 17 Nov 2024 20:26:00 +0100</pubDate> + <guid>a94a7add1a1217ff4c0d65f1a8fe4319</guid> + </item> + <item> + <title>Migration complete</title> + <link>https://crys.site/blog/2024/migration-complete/</link> + <description> + <p>I finally finished migrating <code>brain-rot</code> back here. +Now, the <a href="/reviews/">reviews</a> section contains all of that, which is nice. +This also marks the first moment, when I am content with its structure.</p> +<p>I have crossed this task on the <a href="/now">Now|Finger</a> page.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Fri, 15 Nov 2024 23:13:00 +0100</pubDate> + <guid>f5ed008b27bc4ccd491e3ef31339c6ce</guid> + </item> + <item> + <title>My old computer books</title> + <link>https://crys.site/blog/2024/my-old-comp-books/</link> + <description> + <p>Recently, I&rsquo;ve been to my family home and there, behind other books, were them: +my old computer books. +I read them on repeat when I was a little kid, just learning about <code>nc</code> and how to break my machine via <code>autoexec.bat</code>.</p> + + + + + + + + +<figure + class="centered" +> + <a href="https://crys.site/blog/images/sam-na-sam-z-jezykiem-c_hu17421297023129144655.jpg"> + <img + alt="an two color book. Most of it&#39;s white, with some black accents." + src="https://crys.site/blog/images/sam-na-sam-z-jezykiem-c_hu2657164179822278116.png" + srcset=" + https://crys.site/blog/images/sam-na-sam-z-jezykiem-c_hu2657164179822278116.png 1x, + https://crys.site/blog/images/sam-na-sam-z-jezykiem-c_hu6990897562552442550.png 2x + " + width="600" + height="820" + loading="lazy" + > + </a> + + <figcaption> + +Jan Bielicki's "Alone with the C language". +This one's actually belonged to my mother. + </figcaption> + +</figure> + + + + + + + + + +<figure + class="centered" +> + <a href="https://crys.site/blog/images/z-dosem-w-domu_hu7431265151434675509.jpg"> + <img + alt="Cover of an horizontal book. A big title in red occupies most of it. A clipart-style house is on the left." + src="https://crys.site/blog/images/z-dosem-w-domu_hu13852537065065031601.png" + srcset=" + https://crys.site/blog/images/z-dosem-w-domu_hu13852537065065031601.png 1x, + https://crys.site/blog/images/z-dosem-w-domu_hu14692783081613460512.png 2x + " + width="600" + height="458" + loading="lazy" + > + </a> + + <figcaption> + +Paul McFedries' "At home with MS-DOS" + </figcaption> + +</figure> + + + + + + + + + +<figure + class="centered" +> + <a href="https://crys.site/blog/images/norton-commander-wiecznie-mlody_hu7167011442086856796.jpg"> + <img + alt="a yellow book cover. An old CRT sceen with Norton Commander can be seen on it" + src="https://crys.site/blog/images/norton-commander-wiecznie-mlody_hu13845109250310577002.png" + srcset=" + https://crys.site/blog/images/norton-commander-wiecznie-mlody_hu13845109250310577002.png 1x, + https://crys.site/blog/images/norton-commander-wiecznie-mlody_hu2126782855573238201.png 2x + " + width="600" + height="777" + loading="lazy" + > + </a> + + <figcaption> + +Piotr Kustra's "Norton Commander 4.0: Forever young" + </figcaption> + +</figure> + +<p>None of them are advanced, as they were to introduce me <em>into</em> computers. +My mother was the only adult person with any computer literacy around me, if we don&rsquo;t count my &ldquo;Informatics&rdquo; teacher. +They sure did their job pretty well if you ask me.</p> +<p>The first one was too advanced for little me, but the other two were very welcoming. +Authors aimed at Poles in the 90s, who lived in post-USSR country, and were finally able to experience freedom. +One of it&rsquo;s aspect were the first PC computers which, though crazy expensive, started to be present in most homes.</p> +<p>That&rsquo;s one the reasons I&rsquo;ve never seen a Macintosh. +Most of us had either, a PC or Commodore. +Lucky ones had Amigas. +And with them, a new wave of computer related press and books flooded the market.</p> +<p><em>Member when your knowledge didn&rsquo;t become outdated even before you finished learning anything?</em></p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Thu, 14 Nov 2024 23:09:00 +0100</pubDate> + <guid>27651e5f687d666978b598efa382725f</guid> + </item> + <item> + <title>Joshua Stein's website</title> + <link>https://crys.site/blog/2024/jcs-org/</link> + <description> + <p>Recently, I&rsquo;ve re-stumbled upon <a href="https://jcs.org">Joshua Stein&rsquo;s website</a> and I simply had to share it.</p> +<p>Joshua&rsquo;s hobbies include:</p> +<ul> +<li>running OpenBSD on everything (which is very cool)</li> +<li>writing software for classic Macintoshes (which is extremely cool).</li> +</ul> +<p>I&rsquo;ve never used an old Macintosh, as the first Mac I was able to afford was a 2013 MacBook Air (currently in use by my mother). +But even not having those pink-stained glasses, I marveled at his programs &amp; vlogs.</p> +<p>Vlogs, yes. +And they come with a great twist - not being hosted on Google Youtube. +Well, you see, Joshua (like me) host his entire website from his house (which is absolutely cool).</p> +<p>Don&rsquo;t miss his other <a href="https://jcs.org/projects">other projects</a>, as as lot of them is - at the very least - interesting.</p> + + + + + + + + +<figure + class="centered" +> + <a href="https://crys.site/blog/images/joshua-stein_hu959500810778078255.jpg"> + <img + alt="a webpage with an image covering most of the screen. On it an email compose window from Macintosh is presented. On top-right, a white male is shown." + src="https://crys.site/blog/images/joshua-stein_hu5756605707660882459.png" + srcset=" + https://crys.site/blog/images/joshua-stein_hu5756605707660882459.png 1x, + https://crys.site/blog/images/joshua-stein_hu11615370080932111190.png 2x + " + width="600" + height="498" + loading="lazy" + > + </a> + +</figure> + + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Wed, 13 Nov 2024 22:10:00 +0100</pubDate> + <guid>101e49ebb95e39f964b770e0b97523dd</guid> + </item> + <item> + <title>Digipacks</title> + <link>https://crys.site/blog/2024/digipacks/</link> + <description> + <p>With the resurgence of CDs, something had to break. +We could not simply get a <strong>great</strong> format, they had to break it. +My guess it went like this:</p> +<blockquote> +<p>You know what people loved about vinyl? +Paper sleeves. +Let&rsquo;s put them everywhere</p> +<p>&ndash; some random CEO</p> +</blockquote> +<p>And so we got the digipack. +They are not new, we had them back in the day. +But now they are <em>in</em>. +New CD releases seems to abandon that old, boring jewel-case in favor of paper. +But even that was not enough! +Yes, they may shred any minute but wait. +What if, and this is very important, the would damagey the disc? +Brilliant!</p> +<p>Case in point, a <em>good</em> digipack (as much as a digipack can be good):</p> + + + + + + + + +<figure + class="Centered" +> + <a href="https://crys.site/blog/images/jazz-sabbath_hu7117697115930712516.jpg"> + <img + alt="Orange paper case for CD. The CD is locked in a plastic container." + src="https://crys.site/blog/images/jazz-sabbath_hu1367959681968504186.png" + srcset=" + https://crys.site/blog/images/jazz-sabbath_hu1367959681968504186.png 1x, + https://crys.site/blog/images/jazz-sabbath_hu13946205593797558920.png 2x + " + width="600" + height="304" + loading="lazy" + > + </a> + + <figcaption> + +Jazz Sabath - Vol I + </figcaption> + +</figure> + +<p>CD cases were designed to protect the disc. +And the one containing <em>Jazz Sabbath</em> does this. +We&rsquo;ve got a plastic inlay making sure the disc:</p> +<ul> +<li>can be removed easily, without touching the bottom</li> +<li>never touches the case with their backs, even if rotated like crazy.</li> +</ul> +<p>But here have we have a terrible one:</p> + + + + + + + + +<figure + class="Centered" +> + <a href="https://crys.site/blog/images/the-cure-songs-odw_hu7533876547538265571.jpg"> + <img + alt="A blurry image of a long, paper envelope on cds. The discs are hidden inside the envelope." + src="https://crys.site/blog/images/the-cure-songs-odw_hu4162661619166432611.png" + srcset=" + https://crys.site/blog/images/the-cure-songs-odw_hu4162661619166432611.png 1x, + https://crys.site/blog/images/the-cure-songs-odw_hu7774392596873212843.png 2x + " + width="600" + height="172" + loading="lazy" + > + </a> + + <figcaption> + +The Cure - Songs of a Lost World +(yes, it is blurry. I have noticed) + </figcaption> + +</figure> + +<p>You will notice, that the disc needs to be picked with two fingers even after pushing it to eject from the envelope. +Not only is any dust in the envelope scratching the disc, right after it escapes the (much to narrow) case, it needs to be cleaned as there is no way not to grease its bottom. +And the bottom is what is important! +That&rsquo;s where the laser goes lalalala! +That&rsquo;s also where the finger grease and sand scratches will go.</p> +<p>Argh.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Wed, 13 Nov 2024 21:15:00 +0100</pubDate> + <guid>b4275d03fcdd7272ad5c96e2cba5eafe</guid> + </item> + <item> + <title>Chotto 0.0.1 Released</title> + <link>https://crys.site/projects/chotto/0_0_1/</link> + <description> + <p><a href="/projects/chotto/">Chotto</a> 0.0.1 has been released:</p> +<ul> +<li>Basic filtering DSL</li> +<li>Tags management for messages</li> +</ul> +<p>Git tag: <a href="https://cgit.crys.site/chotto/tag/?h=0.0.1">0.0.1</a></p> +<p>I would wait for later release before using it where it matters.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Wed, 13 Nov 2024 00:13:00 +0100</pubDate> + <guid>379c4279436b81386e3e8c53aaa44f36</guid> + </item> + <item> + <title>Back to Evil Mode</title> + <link>https://crys.site/blog/2024/back-to-evil/</link> + <description> + <p>It&rsquo;s been half a year on <a href="http://xahlee.info/emacs/misc/xah-fly-keys.html">Xah&rsquo;s Fly Keys</a> and it&rsquo;s a wonderful bindings system. +A lot of the ideas there are amazing: shortcuts for inserting all the brackets, great case change, bookmark support, to name just a few. +It was also very <em>comfy</em> to use with <code>jkli</code> instead of <code>hjkl</code>.</p> + + + + + + + + + +<figure + class="pull-right" +> + <a href="https://crys.site/blog/images/evilmode_hu14044110276892439856.jpg"> + <img + alt="Black and white logo &amp;quot;evil&amp;quot;" + src="https://crys.site/blog/images/evilmode_hu1850146357252259741.png" + srcset=" + https://crys.site/blog/images/evilmode_hu1850146357252259741.png 1x, + https://crys.site/blog/images/evilmode_hu2779763027040894514.png 2x + " + width="150" + height="59" + loading="lazy" + > + </a> + +</figure> + +<p>But now I&rsquo;m back at Evil. +First of all, I am (once again) watching old Luke Smith&rsquo;s videos and became very nostalgic for the keys I&rsquo;ve spent years learning. +Secondly, I got what I wanted out of Fly Keys - Emacs mindset. +It kinda like BSD - for the untrained eye it&rsquo;s Linux, but the differences go deep.</p> +<p>The biggest problem with FK however is that I needed to adjust every freaking thing to it, as I am not smart enough to use two similar key bindings at the same time. +Ed is everywhere - terminal, browser, remote connection and so on. +I was fighting with my muscle memory all the time, while <code>hjkl</code> were just <em>there</em>. +At the same time, Fly Keys are open-sourced Xah&rsquo;s workflow. +It&rsquo;s not a general use case, and I didn&rsquo;t use most od the provided functionality. +But those which I used, I <em>loved</em>. +Guess I&rsquo;ll need to port them to my new Evil setup.</p> +<p>Currently, my brain is readjsuting and I can barely control the cursor :-) +I sure missed some of Vim quality of life improvements, like <code>:sort</code> or the amazing macro system.</p> + + <hr><p style="font-style:italic">Reply via <a href="https://michal.sapka.me/me/contact/">email</a></p> + </description> + <author>mms</author> + <pubDate>Mon, 04 Nov 2024 20:53:00 +0100</pubDate> + <guid>30f2e7af21b073f383161fa4d6679917</guid> + </item> + <generator>Hugo -- gohugo.io</generator> + </channel> +</rss>
\ No newline at end of file diff --git a/new/splash/output/logo.png b/new/splash/output/logo.png Binary files differnew file mode 100644 index 0000000..8242224 --- /dev/null +++ b/new/splash/output/logo.png diff --git a/new/splash/output/org.brainmade.png b/new/splash/output/org.brainmade.png Binary files differnew file mode 100644 index 0000000..9f40b68 --- /dev/null +++ b/new/splash/output/org.brainmade.png diff --git a/new/splash/output/updated.gif b/new/splash/output/updated.gif Binary files differnew file mode 100644 index 0000000..15d6ff6 --- /dev/null +++ b/new/splash/output/updated.gif diff --git a/new/splash/pages/index.html.erb b/new/splash/pages/index.html.erb index e5ee6f6..a23c8ff 100644 --- a/new/splash/pages/index.html.erb +++ b/new/splash/pages/index.html.erb @@ -1,4 +1,5 @@ <!DOCTYPE html> + <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> @@ -10,12 +11,12 @@ <meta property="og:type" content="website"> <meta property="og:url" content="https://crys.site"> <meta property="og:description" content="Michal's personal website"> - <meta name="fediverse:creator" content="@mms@bsd.cafe"> <link rel="me" href="https://mastodon.bsd.cafe/@mms" title="@mms on bsd.cafe"> - <style> body { + margin-top: 20px; + margin-bottom: 20px; text-align: center; background-color: #c2c2c2; background-image: url("<%= process_image(file: "background.png").relative_path %>"); @@ -26,30 +27,30 @@ color: #000; } ol { - padding: 0; + padding: 0; } ol li{ - list-style-type: none; + list-style-type: none; } img.webutton { - border: 0; - text-decoration: none; - color: #c2c2c2; - margin: 10px; + border: 0; + text-decoration: none; + color: #c2c2c2; + padding: 10px; } - + @media (min-resolution: 192dpi) { * { image-rendering: pixelated; } } </style> </head> <body> - <h1>Crys SITE</h1> + <img alt="Crys Site" src="<%= process_image(file: "logo.png").relative_path %>"> <p> Hi! - I'm Michal and this is my personal webpage. + I'm Michal and this is my personal website. </p> <p> @@ -57,7 +58,17 @@ </p> <p> - <b>NOTE: I am not a real <%= not_real %>, and I can be wrong sometimes</b>. + <b>NOTE: I am not a real <span id="notreal"><%= not_real.sample %></span>, and I can be wrong sometimes</b>. + + <script> + let reals = <%= not_real %>; + let real_span = document.getElementById("notreal"); + function newReal() { + let real = reals[Math.floor( Math.random() * reals.length )]; + real_span.innerHTML = real; + } + newReal(); + </script> </p> @@ -72,7 +83,6 @@ <h3>Main sections</h3> - <nav> <ol> <li><a href="/blog">My personal blog</a> @@ -93,7 +103,7 @@ <h3>Projects</h3> <ol> - <li><a href="/projects/chotto">Chotto</a> - a initial tagging system for Notmuch + <li><a href="/projects/chotto">Chotto</a> - an initial tagging system for Notmuch <%= update_badge("chotto")%> </ol> @@ -106,18 +116,18 @@ <h3>Even more</h3> - <ol> - <li><a href="/more/bookmarks/">Bookmarks</a> to cool things on the web - <%= more_update_badge(name: :bookmarks)%> - <li><a href="/more/links/">Links</a> to other sites - <%= more_update_badge(name: :links)%> - <li><a href="/more/irc/">IRC Channel</a> of this site - <li><a href="/more/contact/">Contact</a> - <li><a href="/more/now/">Now</a> - <li><a href="/more/uses/">Uses</a> - </ol> + <ol> + <li><a href="/more/bookmarks/">Bookmarks</a> to cool things on the web + <%= more_update_badge(name: :bookmarks)%> + <li><a href="/more/links/">Links</a> to other sites + <%= more_update_badge(name: :links)%> + <li><a href="/more/irc/">IRC Channel</a> of this site + <li><a href="/more/contact/">Contact</a> + <li><a href="/more/now/">Now</a> + <li><a href="/more/uses/">Uses</a> + </ol> -</nav> + </nav> <hr> @@ -135,12 +145,14 @@ <hr> <p> This is self-hosted site. - You are connected live to my living room. + You are connected live to my living room.<br> + The bytes must flow. </p> <div> <%= webbutton(file: "org.freebsd.gif", url: "https://www.freebsd.org/", alt: "Powered by FreeBSD") %> <%= webbutton(file: "org.dillo.gif", url: "https://www.dillo.org/", alt: "Optimized for Dillo") %> + <%= webbutton(file: "org.brainmade.png", url: "https://www.brainmade.org/", alt: "Made with brain, not LLM") %> </div> </body> </html> diff --git a/new/splash/pages/index.xml.rb b/new/splash/pages/index.xml.rb new file mode 100644 index 0000000..01edf78 --- /dev/null +++ b/new/splash/pages/index.xml.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Crys + module Splash + module Page + class IndexRss + include CommonFunctions + def initialize(processor:) + @main_rss = fetch_rss(name: :main) + @processor = processor + end + + def content + main_rss + end + + def filename + 'index.xml' + end + + private + + attr_reader :main_rss + end + end + end +end + +@rss = Crys::Splash::Page::IndexRss.new(processor: self) |