First commit
|
@ -0,0 +1 @@
|
||||||
|
public
|
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "themes/toastersrocks"]
|
||||||
|
path = themes/toastersrocks
|
||||||
|
url = https://github.com/juju2143/hugo-theme-toastersrocks.git
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
title: "{{ replace .Name "-" " " | title }}"
|
||||||
|
slug: {{ .Name }}
|
||||||
|
publishDate: {{ .Date }}
|
||||||
|
date: {{ .Date }}
|
||||||
|
lastmod: {{ .Date }}
|
||||||
|
tags:
|
||||||
|
description:
|
||||||
|
isPage: false
|
||||||
|
hideComments: false
|
||||||
|
draft: true
|
||||||
|
---
|
||||||
|
|
|
@ -0,0 +1,200 @@
|
||||||
|
baseURL = "http://toasters.rocks/"
|
||||||
|
title = "toasters rocks"
|
||||||
|
theme = "toastersrocks"
|
||||||
|
disqusShortname = "juju2143"
|
||||||
|
defaultContentLanguage = "en"
|
||||||
|
copyright = "Copyright © 2020 J.P. Savard"
|
||||||
|
paginate = 10
|
||||||
|
|
||||||
|
[languages]
|
||||||
|
[languages.en]
|
||||||
|
languageName = "English"
|
||||||
|
weight = 1
|
||||||
|
contentDir = "content/en"
|
||||||
|
[languages.fr]
|
||||||
|
languageName = "Français"
|
||||||
|
weight = 2
|
||||||
|
contentDir = "content/fr"
|
||||||
|
|
||||||
|
[[languages.en.menu.main]]
|
||||||
|
name = "Home"
|
||||||
|
pre = "fas fa-home"
|
||||||
|
url = "/"
|
||||||
|
weight = 1
|
||||||
|
[[languages.en.menu.main]]
|
||||||
|
name = "About"
|
||||||
|
pre = "fas fa-user"
|
||||||
|
url = "http://juju2143.ca/"
|
||||||
|
weight = 2
|
||||||
|
[[languages.en.menu.main]]
|
||||||
|
name = "Français"
|
||||||
|
pre = "fas fa-globe"
|
||||||
|
url = "/fr/"
|
||||||
|
weight = 3
|
||||||
|
[[languages.en.menu.main]]
|
||||||
|
name = "Comics"
|
||||||
|
pre = "far fa-comment"
|
||||||
|
url = "https://yukiis.moe/"
|
||||||
|
weight = 4
|
||||||
|
[[languages.en.menu.main]]
|
||||||
|
name = "Forums"
|
||||||
|
pre = "far fa-folder-open"
|
||||||
|
url = "https://codewalr.us/"
|
||||||
|
weight = 5
|
||||||
|
|
||||||
|
[[languages.fr.menu.main]]
|
||||||
|
name = "Accueil"
|
||||||
|
pre = "fas fa-home"
|
||||||
|
url = "/fr/"
|
||||||
|
weight = 1
|
||||||
|
[[languages.fr.menu.main]]
|
||||||
|
name = "À propos"
|
||||||
|
pre = "fas fa-user"
|
||||||
|
url = "http://juju2143.ca/"
|
||||||
|
weight = 2
|
||||||
|
[[languages.fr.menu.main]]
|
||||||
|
name = "English"
|
||||||
|
pre = "fas fa-globe"
|
||||||
|
url = "/"
|
||||||
|
weight = 3
|
||||||
|
[[languages.fr.menu.main]]
|
||||||
|
name = "Comics"
|
||||||
|
pre = "far fa-comment"
|
||||||
|
url = "https://yukiis.moe/"
|
||||||
|
weight = 4
|
||||||
|
[[languages.fr.menu.main]]
|
||||||
|
name = "Forums"
|
||||||
|
pre = "far fa-folder-open"
|
||||||
|
url = "https://codewalr.us/"
|
||||||
|
weight = 5
|
||||||
|
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "Twitter"
|
||||||
|
pre = "fab fa-twitter"
|
||||||
|
url = "https://twitter.com/juju2143"
|
||||||
|
post = "#4da7de"
|
||||||
|
weight = 1
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "Discord"
|
||||||
|
pre = "fab fa-discord"
|
||||||
|
url = "https://discord.gg/cuZcfcF"
|
||||||
|
post = "#7289da"
|
||||||
|
weight = 2
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "GitHub"
|
||||||
|
pre = "fab fa-github"
|
||||||
|
url = "https://github.com/juju2143"
|
||||||
|
post = "#221e1b"
|
||||||
|
weight = 3
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "Patreon"
|
||||||
|
pre = "fab fa-patreon"
|
||||||
|
url = "https://patreon.com/juju2143"
|
||||||
|
post = "#F96854"
|
||||||
|
weight = 4
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "YouTube"
|
||||||
|
pre = "fab fa-youtube"
|
||||||
|
url = "https://youtube.com/user/julosoft"
|
||||||
|
post = "#e02a20"
|
||||||
|
weight = 5
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "YouTube 2"
|
||||||
|
pre = "fab fa-youtube"
|
||||||
|
url = "https://youtube.com/c/juju2143"
|
||||||
|
post = "#e02a20"
|
||||||
|
weight = 6
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "Twitch"
|
||||||
|
pre = "fab fa-twitch"
|
||||||
|
url = "https://twitch.tv/juju2143"
|
||||||
|
post = "#6441a5"
|
||||||
|
weight = 7
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "Instagram"
|
||||||
|
pre = "fab fa-instagram"
|
||||||
|
url = "https://instagram.com/j.p.savard"
|
||||||
|
post = "#d6249f"
|
||||||
|
weight = 8
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "DeviantArt"
|
||||||
|
pre = "fab fa-deviantart"
|
||||||
|
url = "https://deviantart.com/juju2143"
|
||||||
|
post = "#c5d200"
|
||||||
|
weight = 9
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "SoundCloud"
|
||||||
|
pre = "fab fa-soundcloud"
|
||||||
|
url = "https://soundcloud.com/juju2143"
|
||||||
|
post = "#fe3801"
|
||||||
|
weight = 10
|
||||||
|
|
||||||
|
[[languages.fr.menu.social]]
|
||||||
|
name = "Twitter"
|
||||||
|
pre = "fab fa-twitter"
|
||||||
|
url = "https://twitter.com/juju2143"
|
||||||
|
post = "#4da7de"
|
||||||
|
weight = 1
|
||||||
|
[[languages.fr.menu.social]]
|
||||||
|
name = "Discord"
|
||||||
|
pre = "fab fa-discord"
|
||||||
|
url = "https://discord.gg/cuZcfcF"
|
||||||
|
post = "#7289da"
|
||||||
|
weight = 2
|
||||||
|
[[languages.fr.menu.social]]
|
||||||
|
name = "GitHub"
|
||||||
|
pre = "fab fa-github"
|
||||||
|
url = "https://github.com/juju2143"
|
||||||
|
post = "#221e1b"
|
||||||
|
weight = 3
|
||||||
|
[[languages.fr.menu.social]]
|
||||||
|
name = "Patreon"
|
||||||
|
pre = "fab fa-patreon"
|
||||||
|
url = "https://patreon.com/juju2143"
|
||||||
|
post = "#F96854"
|
||||||
|
weight = 4
|
||||||
|
[[languages.fr.menu.social]]
|
||||||
|
name = "YouTube"
|
||||||
|
pre = "fab fa-youtube"
|
||||||
|
url = "https://youtube.com/user/julosoft"
|
||||||
|
post = "#e02a20"
|
||||||
|
weight = 5
|
||||||
|
[[languages.fr.menu.social]]
|
||||||
|
name = "YouTube 2"
|
||||||
|
pre = "fab fa-youtube"
|
||||||
|
url = "https://youtube.com/c/juju2143"
|
||||||
|
post = "#e02a20"
|
||||||
|
weight = 6
|
||||||
|
[[languages.fr.menu.social]]
|
||||||
|
name = "Twitch"
|
||||||
|
pre = "fab fa-twitch"
|
||||||
|
url = "https://twitch.tv/juju2143"
|
||||||
|
post = "#6441a5"
|
||||||
|
weight = 7
|
||||||
|
[[languages.fr.menu.social]]
|
||||||
|
name = "Instagram"
|
||||||
|
pre = "fab fa-instagram"
|
||||||
|
url = "https://instagram.com/j.p.savard"
|
||||||
|
post = "#d6249f"
|
||||||
|
weight = 8
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "DeviantArt"
|
||||||
|
pre = "fab fa-deviantart"
|
||||||
|
url = "https://deviantart.com/juju2143"
|
||||||
|
post = "#c5d200"
|
||||||
|
weight = 9
|
||||||
|
[[languages.en.menu.social]]
|
||||||
|
name = "SoundCloud"
|
||||||
|
pre = "fab fa-soundcloud"
|
||||||
|
url = "https://soundcloud.com/juju2143"
|
||||||
|
post = "#fe3801"
|
||||||
|
weight = 10
|
||||||
|
|
||||||
|
[markup]
|
||||||
|
[markup.goldmark]
|
||||||
|
[markup.goldmark.renderer]
|
||||||
|
unsafe = true
|
||||||
|
[markup.highlight]
|
||||||
|
lineNos = true
|
||||||
|
lineNumbersInTable = true
|
||||||
|
noClasses = false
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
title: How to repost a video correctly on your social media page
|
||||||
|
slug: how-to-repost-a-video-correctly-on-your-social-media-page
|
||||||
|
publishDate: 2016-02-07T12:00:00.000Z
|
||||||
|
lastmod: 2019-11-25T06:58:37.000Z
|
||||||
|
tags: [Tech]
|
||||||
|
description: Well, I usually don’t give a damn about this, but after seeing my good friend Minty Root allegedly being butthurt over this and seeing a GIF of his work being (re)posted on Facebook without credit, it stroke me, and I figured I had a good argument about this.
|
||||||
|
---
|
||||||
|
|
||||||
|
*This article was originally published on Tumblr, reposting it here for completeness.*
|
||||||
|
|
||||||
|
Well, I usually don’t give a damn about this, but after seeing my good friend Minty Root allegedly being butthurt over this and seeing a GIF of his work being (re)posted on Facebook without credit, it stroke me, and I figured I had a good argument about this.
|
||||||
|
|
||||||
|
For this post, I’ll use Minty as an example here, because I know how he’s set up on YouTube, but it works for most, if not all content creators out there. If you don’t know, Minty has monetization enabled on his YouTube channel, and his network, Channel Frederator, is giving him a good unspecified wad of money for his work depending of the views on his monetization-enabled videos. (If you wanna know, I’m not sure he’s allowed to tell, so I’m not saying anything, but I do know it’s definitely helping him pay his bills.) So if you repost his videos on your Facebook page like many do (including full GIFs, although a GIF of only one scene can be debatable), for each view the video gets on your page, I don’t know the exact rate but it’s probably one less cent in his pockets. So if your video has a lot of views, we’re talking about quite a lot of money here. Personally, I wouldn’t care if there isn’t any money at stake (like the creator hasn’t monetized the video, it’s blocked in your country and/or it’s a big company such as Hasbro, in that case a credit would still be appreciated, if known), but in this case I think it’s probably what you can call piracy and/or stealing from a small content creator.
|
||||||
|
|
||||||
|
So here’s a few best practices I can suggest you if you’re the owner of one such page:
|
||||||
|
|
||||||
|
- **Don’t download the video off YouTube (or anything) and repost on your page.** Instead, link it directly from the source. In many cases, such as Facebook and Twitter, the video will still embed directly in your post when you click on it. In YouTube’s case, it have a lot of ways to put the video on your profile without outright reposting it, such as playlists.
|
||||||
|
- **At least credit the work you post with a link to the creator’s page, if you’re not already link to their work.** If people liked that work, people will click on that link because they want to see more of that artist. You should always link to their site anyway.
|
||||||
|
- **Don’t follow advices to get more views on your page.** It’s probably a conspiracy to make you steal videos as I explained, or at least a side effect of big companies’ marketing plans. It’s well-established Facebook wants to compete with YouTube and Twitter wants to do just like Facebook, so don’t let them.
|
||||||
|
- **Subscribe to your favourite creator’s Patreon or donate to them, if you like their work.** It will make their day. Seriously. Or just support them in any way they let you. As I stated, it might help them pay their rent.
|
||||||
|
- **Disable AdBlock on your favourite websites or creators.** It will also help them and give them some ad money, if they set up these ads. Beware, in some cases, it’s just the creator’s platform’s ads and it’s not actually going to them.
|
||||||
|
|
||||||
|
It’s a pretty long post, but I bolded the tl;dr parts for better reading. I don’t want to go in a crusade against those pages, I still love you, but we all do want a better world without all this bullshit. If I missed anything, please tell! I hope my point is understood and more people will follow those advices, so reblog this post wildly! (Of course, if you’re gonna reshare it on other sites than Tumblr, credit me with a link, I probably spent at least a full hour to write this…)
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
title: Those Create Your Taste Booths at McDonald’s
|
||||||
|
slug: those-create-your-taste-booths-at-mcdonalds
|
||||||
|
publishDate: 2016-07-17T12:00:00.000Z
|
||||||
|
lastmod: 2019-11-25T07:09:31.000Z
|
||||||
|
tags: [Rant]
|
||||||
|
---
|
||||||
|
|
||||||
|
*This article was originally published on Tumblr, reposting it here for completeness.*
|
||||||
|
|
||||||
|
You know what? I love those. They recently added some of them at the one in my town, pretty popular place after the summer festival taking place in Québec City each summer (we had the Red Hot Chili Peppers tonight, and tomorrow we’ll have Rammstein, so it’s pretty big). So yeah, after those shows the place is pretty crowded and no employee is getting a rest. So, since they added those booths, I do feel it’s helping them. I feel it’s helping the customers as well. You tap what you want, you pay there with your card or iPhone or whatever, you get a number, and you wait for your number. That’s it. Before (and guess you still can go that way), you had to yell at the cashier what you want, after checking the menu above them if there’s something interesting (and nowadays it’s TV screens so they put ads once every few seconds covering the whole menu it’s weird), and worse, if you’re a picky eater like me (shame on me I guess) you have to tell the cashier a list of condiments you don’t like (no pickles, no onion, etc.) and you’re never sure which condiments they put in what and they’ll forget to remove them half of the time it’s awkward and/or basically hell so I just ended up ordering chicken McNuggets all the time… And you don’t have a number so you just wait in a line your your order, not really a good thing if there’s a lot of people. But with the booths they tell you outright what you want in your sandwich plus whether you want like, 10 patties in your burger and numerous other options I should try someday. This opens up a ton of burger possibilities. And you get a number you wait for, so they can give the orders out in the order they want and process a lot at the same time pretty seamlessly, nothing that lines up endlessly, it’s pretty cool. Plus they can remove half of the cash registers (there’s still some for those who want to pay cash or order manually) without much hassle. 10/10 best move by McDo’s ever.
|
||||||
|
|
||||||
|
Anyway, I should write more rants like this on my blog that I hardly use anymore (Tumblr is beginning to get cancerous, guess I needed to get out of this for a while). And this one is not sponsored by McDonald’s Canada (although if you want to offer me this gold free meals forever card like Jérémy Demay got the other day I’d gladly accept lol). Join me tomorrow on another rant on SaGGeek, or how to get invited as a guest at a convention and cancel at the last minute. Not writing it now because I wonder if there will be more things to write about in the aftermath tomorrow (the con was today), but that was kinda sad. I’ll also have some project updates going soon, for those interested.
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
title: How to tell your AdBlock users to disable it like a boss
|
||||||
|
slug: how-to-tell-your-adblock-users-to-disable-it-like-a-boss
|
||||||
|
publishDate: 2017-01-28T12:00:00.000Z
|
||||||
|
lastmod: 2019-11-25T07:03:18.000Z
|
||||||
|
tags: [Tech]
|
||||||
|
---
|
||||||
|
|
||||||
|
*This article was originally published on Tumblr, reposting it here for completeness.*
|
||||||
|
|
||||||
|
Boy, I don’t use Tumblr very often nowadays. Well, I wanted to write this article because, first of all, I hate ads and I know everyone else hates ads, myself I have uBlock with the anti-AdBlock killer on, but I also know people depends on it to make some good internet money and they want to do everything so their users can see the ads, even going as far as blocking the site’s content unless AdBlock is disabled… I have reasons to believe you’d piss these users off instead. I want to help fellow webmasters into making a better Internet, so this article attempts to show a way to have ads on and keep your users the most diligent way possible. Here goes the long post…
|
||||||
|
|
||||||
|
## Choose a good ad network
|
||||||
|
|
||||||
|
First of all, one of the first reasons, if not the first, people install AdBlock or similar software is that ads are one of the easiest ways to carry viruses and other malware, with Flash/HTML5 ads and such. So you’ll want to make sure, with the right settings on whichever network you choose, to only serve images, no Flash, no foreign Javascript that could carry malware inserted into the ad. The popular one is Google AdSense, I personally use Project Wonderful, which also lets your users continually bid on your ad boxes instead of the standard CPM/CPC model and only accept image ads, as far as I know. I won’t show you how to place your ads, but it does help if you’re reasonable about them. Think like a normal user who don’t want ads in their way and find a good compromise. Actually, more on that in the next paragraph…
|
||||||
|
|
||||||
|
## Subscribe to AdBlock Plus’ Acceptable Ads Initiative
|
||||||
|
|
||||||
|
If you can convince your users your ads are not annoying and full of viruses, they are probably more likely to disable their AdBlock for you. The fine guys behind AdBlock Plus have published a set of guidelines to follow so your ad won’t be considered annoying. If you follow these guidelines to the letter and if you ask them nicely, they might whitelist your ad in their software, which would give you a bit of a boost in ad views and clicks! And it’s free! (That is, if your site is not a giant and make “more than 10 million additional ad impressions per month due to participation in the Acceptable Ads initiative”…) It’s a bit controversial, but hey, it works. If you contact them, it might take something like 2 weeks before they even get to your case and another 3-4 days before they add your ads to the whitelist, so be patient, it’s worth it.
|
||||||
|
|
||||||
|
Read more about it: [https://adblockplus.org/acceptable-ads](https://adblockplus.org/acceptable-ads)
|
||||||
|
|
||||||
|
## Don’t block your content and convince your users
|
||||||
|
|
||||||
|
What is more annoying than an intrusive popup telling you to disable AdBlock? Your visitors with AdBlock on might as well leave your site instead of actually disabling AdBlock and you might lose views. So just don’t do that, or you’d give the impression you’re a greedy person and your site exists for the money. You definitely don’t want that. So when you detect your user has AdBlock enabled, you’ll still want to write a nice message above the fold, but nothing intrusive, saying something along the lines, “the website wouldn’t exist without the ad money” (because, well, that’s often why you put ads in there and users will understand that) and/or “I promise the ads are not annoying and full of viruses” (because you did the above like a nice admin). Maybe even mention the Acceptable Ads Initiative, you’ll show them it’s true and you followed guidelines from AdBlock software.
|
||||||
|
|
||||||
|
## I mean, convince your users, and make as simple as possible
|
||||||
|
|
||||||
|
Another thing you can do, and I don’t think anyone did that yet, is to provide a subscription link to an AdBlock filter you made that unblocks your ads with the above message, like, “Click here to disable AdBlock/AdBlock Plus/uBlock for this site”. Your users will click on that link like if it was any other link to, for instance, close that message, it’s that simple for them. Again, I won’t show you how to do that (maybe in another blog post?), I believe there’s a bunch of tutorials on [how to write filter lists](https://adblockplus.org/filters) and [provide an abp: URL pointing to it](https://adblockplus.org/abp_linkfactory), but I do think it’s infinitely better than providing something like 4 different sets of instructions for each adblock software, browser and operating system out there. If you did the Acceptable Ads step above, they will provide you with a set of filter rules they will put in their list, you can definitely use that, you can also ask them for assistance for making a simple list with those rules to host on your server.
|
||||||
|
|
||||||
|
So there you go, I think I went around the subject, I hope these guidelines worked on your website and boosted your ads a bit! Of course, you can’t convince everyone, some people are convinced ads are bad no matter what (that’s why the Acceptable Ads Initiative is controversial), but you still can add some nice users with these guidelines. Obviously, I’m not your visitors, so I don’t guarantee this will work at all, but eh, at least you tried and made your site better.
|
||||||
|
|
||||||
|
Read it all? Have a walrus, you can thank me later. Don’t forget to share it with all your friends who have websites!
|
|
@ -0,0 +1,19 @@
|
||||||
|
---
|
||||||
|
title: Life update.
|
||||||
|
slug: life-update
|
||||||
|
publishDate: 2018-05-18T12:00:00.000Z
|
||||||
|
lastmod: 2019-11-25T07:04:31.000Z
|
||||||
|
tags: [Random]
|
||||||
|
---
|
||||||
|
|
||||||
|
*This article was originally published on Tumblr, reposting it here for completeness.*
|
||||||
|
|
||||||
|
Well. I didn’t blogged that much in the past year or two on this toasters dot rocks blog, for some reason. My Tumblr timeline was looking like a disaster. Kinda like Facebook, actually, but that’s another kind of disaster. Oh well. I probably should blog a bit more and publish some texts I usually just condense in 280 characters on Twitter. Kind of a diary.
|
||||||
|
|
||||||
|
So yeah. A ton of stuff happened since then, in the past year or two. Dropped school, got a job in web development and now I’m working on a rather big project with a bunch of friends related to podcasts and content creators. (BTW, I’ll let you know when it’s ready :)) So yeah, after being generally terrible in college and having stayed way too long there, thanks to a Youtuber, podcaster and entrepreneur friend, I’m now in a situation one could just dream of. You might want to get all of the diplomas to get far in life, but if you’re creative enough, you don’t need to… Anyway, I can’t wait to see this project taking off, cause it’s a pretty good concept overall, it just needs a lot of thinking and challenges to overcome.
|
||||||
|
|
||||||
|
I’ve also been thinking a lot of my pet project, Zarmina, it’s also a project I wanna see done, I worked quite a bit on it lately, I finished the script for a demo, but I prefer putting the time on this other project since, well, this pays my bills :)
|
||||||
|
|
||||||
|
Anyway, can’t wait what live is gonna give me next, who knows?
|
||||||
|
|
||||||
|
So yeah, stay tuned for more entries in my diary…
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
title: "Toasters Rocks: The Reboot"
|
||||||
|
slug: toasters-rocks-the-reboot
|
||||||
|
publishDate: 2018-11-22T12:00:00.000Z
|
||||||
|
lastmod: 2019-11-25T07:10:10.000Z
|
||||||
|
tags: [Meta]
|
||||||
|
---
|
||||||
|
|
||||||
|
Yeah, let's try this out, cause why not. It used to be Tumblr (which you can still follow [here](http://tumblr.toasters.rocks/)), but I recently switched to Write Freely, just to see how nicer it is. And looks like it works so far.
|
||||||
|
|
||||||
|
A while ago I realized I followed way too much people and it distracts me a lot from writing long texts, that and there was way too much NSFW to go there at school, so I kinda stopped going there. And I've been meaning to create a self-hosted blog in its stead for a long while, I wanted something real simple, so when I saw this, I was like, yeah why not, looks like the thing I wanted, easy to customize, not a ton of Javascript and PHP that comes with it, and as a bonus you can follow this blog on the Fediverse, gonna try this.
|
||||||
|
|
||||||
|
So there you go. First blog post and I hope to write more on random things.
|
||||||
|
|
||||||
|
Edit: I'm reposting my best blog posts from elsewhere here for completeness. Have fun.
|
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
title: Facebook sucks
|
||||||
|
slug: facebook-sucks
|
||||||
|
publishDate: 2018-11-23T12:00:00.000Z
|
||||||
|
lastmod: 2019-11-25T07:10:25.000Z
|
||||||
|
tags: [Rant, Tech]
|
||||||
|
---
|
||||||
|
|
||||||
|
Well, I guess this thing will be a really nice place to vent. Because, allow me to say this, and I think everyone here will agree: Facebook sucks.
|
||||||
|
|
||||||
|
I mean, if you ever need to talk to their tech support to either change the name of your page, there's a problem with it, or you even just want access to their API to integrate with your website (all true stories), let me get this straight, it's going to be a pain in the ass and take you months to get anywhere. What else, the timeline is not making sense anymore and it's showing more and more ads (actually, if you scroll too far it's going to give up, tell you you reached the end and just show you ads). Yet, it's still basically useful to reach your users and friends (even if it's going to cost you money to reach just half of your followers). I'd like to quit Facebook anytime, but that would mean moving all of my friends and their friends and their friends to something less terrible. And it's not going to happen anytime soon. Unless there's a new Facebook-killer out there... and that might probably be Instagram, and guess what? They got bought out by Facebook.
|
||||||
|
|
||||||
|
And that's just the tip of the iceberg, I'd tell you all night long about pretty much every social network out there. Talking about Twitter, YouTube, things like that. Thing is, these social networks have upwards of hundreds of millions of active users. Anything they'll do, someone is going to be angry. And they won't care if it's going to make the company stay afloat. It also makes it almost impossible to moderate because they're dealing with so much users daily. They're not going to sit with you and personally explain what's wrong with you and how you can improve (which is to me something any good moderator should do), they don't have time for that, instead pointing at their terms of service and make you try to figure it out, at best. They're too busy to code the perfect thing to make the copyright holders and governments happy, which is to me almost impossible without said good moderation or at least a decent rate of false alarms that would make the users happy. Which is probably also almost impossible without the AIs turning sentient, but eh, who knows?
|
||||||
|
|
||||||
|
In the end, it just makes your social network a terrible place to go. You long for the good ol' days where forums were still a nice place to build a community. It still kind of is, but Facebook groups are way easier to build and invite your friends on. Also easier to attract cancer, I guess. Discord is also a very nice one I'd actually recommend (and also Skype and IRC-killer), but it's a chat application and not very adapted to easily searchable long-form writing.
|
||||||
|
|
||||||
|
Enter the Fediverse. It's a set of applications that resembles Twitter, Tumblr, Instagram, YouTube and the like and have mostly the same functions as them, but they're broken down in thousands of servers that can talk to each other with a common protocol. And the best thing, you can have one of them! Of course, it'd need a bit of configuration and resources just like hosting a forum, but eh, worth it. That means millions of users you can talk to just like the big, centralized, for-profit ones, except it's broken down in units you can easily moderate yourself or with a small team. There's no central admin and you can just ban other people, but also other instances (that's what we call these units) if you don't like them. And it's very manageable.
|
||||||
|
|
||||||
|
In conclusion, well, there's no perfect solution, but it seems to go back to self-host everything. It's great if you know your way with Linux and you have a $10/month to spend on a VPS, or else you can always ask a friend. Just install the software you want and make your own rules. Even this blog, you can follow it on the fediverse. But yeah, if you're fed up with the rules, make your own. That's the internet for you. I really like the feel to be in control of everything, which is why I want to move to things like those, and if you're like that I really recommend you to do that, but I understand that some people are the complete opposite, they have no technical know-how and they'll like services that take their hands and do everything for them, so there is where general services like Facebook are useful, and even fediverse sites to a point (the biggest instances are half a million users already). But my point is, there will always be some place on the internet where you can be comfortable.
|
||||||
|
|
||||||
|
On that, I run things like [codewalr.us](https://codewalr.us/) (a forum for programmers), [calc.news](https://calc.news/) (a Mastodon instance) and this blog, feel free to join us if you want to be in a nice community :)
|
|
@ -0,0 +1,52 @@
|
||||||
|
---
|
||||||
|
title: How to thoroughly destroy spam accounts from Mastodon
|
||||||
|
slug: how-to-thoroughly-destroy-spam-accounts-from-mastodon
|
||||||
|
publishDate: 2018-11-26T12:00:00.000Z
|
||||||
|
lastmod: 2019-11-26T06:10:02.000Z
|
||||||
|
tags: [Tech]
|
||||||
|
---
|
||||||
|
|
||||||
|
Well, it seems Mastodon have a problem with a particular spambot. As an instance admin, I investigated and here's my findings.
|
||||||
|
|
||||||
|
Symptoms: Accounts keep singing up on your instance. The username are all random syllables (kind of sounds like Japanese), they have random full English/American-sounding names, their email address are all from random domains as if their owner have a pretty big budget on that and they all have different IPs.
|
||||||
|
|
||||||
|
First step: Pass all of those IPs through the Whois database and find something in common. And indeed, they all seem to come from the same ISP, for the most part, so it's trivial to craft a command to get their IP ranges.
|
||||||
|
|
||||||
|
(Note: The next commands have been tested at the time of writing on a Debian 9 server, on other OSes, your mileage may vary. I say this because the BSD implementation of the whois tool is very different from its GNU counterpart, from what I can see. This also assumes that you're on the account Mastodon runs and `cd`'d in its live directory and you know that you shouldn't type the `$` as it's your prompt. And you actually know what you're doing, make backups first, etc. Also install the `ipcalc` package first, it'll help.)
|
||||||
|
|
||||||
|
$ whois -i admin-c,tech-c GS19550-RIPE | grep inetnum | cut -f9- -d" " | sed "s/ //g" | xargs -n1 ipcalc -rn | grep -v deaggregate >> banlist.txt
|
||||||
|
|
||||||
|
|
||||||
|
(Actual command will vary from spambot to spambot, but it's the one the fediverse is currently plagued with and I have no doubt if there's another spammer it's going to be similar. Also from here, the instructions are for Mastodon 2.6, for any other software it's going to be something else, but yeah, you're basically going to kick IP ranges out.)
|
||||||
|
|
||||||
|
Now that you have a bunch of IPs to ban, enter the Rails console:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ RAILS_ENV=production bundle exec rails c
|
||||||
|
```
|
||||||
|
|
||||||
|
Now this bit of code will tell you their usernames, to make sure you have no false positives.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
File.open("banlist.txt","r").each_line { |ip| User.where("last_sign_in_ip << ?", ip.strip).each { |u| puts u.account.username } };0
|
||||||
|
```
|
||||||
|
|
||||||
|
And now, this is the fun part, destroy them!
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
File.open("banlist.txt","r").each_line { |ip| User.where("last_sign_in_ip << ?", ip.strip).each { |u| u.account.user.destroy; u.account.destroy } };0
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you can't see them anymore. If you missed a few, you can always put their IPs in `banlist.txt` and repeat the process. Now to make sure they're not going to come back, you can either put them in your iptables or your favourite firewall, or put a blacklist in your nginx. Run this as your normal admin user:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ cat banlist.txt | xargs -n1 -I'{}' echo deny '{}'\; | sudo tee /etc/nginx/blacklist
|
||||||
|
```
|
||||||
|
|
||||||
|
Then edit your nginx config and put an `include blacklist;` somewhere in your instance's server block. Don't forget to reload nginx!
|
||||||
|
|
||||||
|
And there you go. How to find out and destroy spambots for dummies. Have fun and don't forget to do this once in a while :)
|
||||||
|
|
||||||
|
Sources:
|
||||||
|
[https://mastodon.at/@pfigel/100076564629123760](https://mastodon.at/@pfigel/100076564629123760)
|
||||||
|
[https://github.com/tootsuite/mastodon/issues/109#issuecomment-298767655](https://github.com/tootsuite/mastodon/issues/109#issuecomment-298767655)
|
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
title: "Reflections on 2018, part 1: Writing a book"
|
||||||
|
slug: writing-a-book
|
||||||
|
publishDate: 2018-12-10T12:00:00.000Z
|
||||||
|
lastmod: 2019-11-25T07:12:51.000Z
|
||||||
|
tags: [Zarmina]
|
||||||
|
---
|
||||||
|
|
||||||
|
So yeah. I'm writing a book. It's called Zarmina. Pretty huge project I'm working on on and off for the last few years and it went through a bunch of iterations before what it is now... I do believe that if you sit on a project for long enough, it's going to evolve until it turns out pretty great. It's still a pretty big undertaking and a very ambitious project, I rewrote the first part I don't know how many times now under countless concepts and I procrastinated a lot of it, but I do think it's turning out great.
|
||||||
|
|
||||||
|
Think of it as what if Europeans discovered America today, in the 21st century. It's the story of Earth astronauts on a planet far, far away making first contact with its inhabitants. And they definitely know what this implies and what humanity have done in the past. Oh, and they're magic furries, because why not. (Actually, there's a reason for that, and it's so they're more adapted for the kind of cold climate they have and so they look more like a weird mix between a human and a cat.)
|
||||||
|
|
||||||
|
It's inspired a lot of *Dans une Galaxie près de chez vous*, a Canadian comedy/sci-fi show that aired in 1999-2002, with two movies in 2004 and 2008, right during my childhood. It follows Captain Patenaude and his crew trying to find in 2034 a new planet to move humanity on because they completely destroyed their old one beyond repair. Thorough the series, it's pretty clear that the Captain wants to do good: if humanity is given a new planet, maybe they'll take care of this one... He also take care to find a planet that isn't already inhabited by a civilisation, for fear the humans will completely destroy it. And in the last episode, they finally find the perfect planet to move humanity on, but of course the second the first settlers arrive, war is waged over the best grounds available and it's pretty clear they're going to destroy this one too. Even though the mission to find a new planet was a success, the Captain and his crew considers their own personal mission a failure.
|
||||||
|
|
||||||
|
Last month, I had the pleasure to be part of the team that organized a small convention about this show (think about these brony or trekkie cons, but we were a duggie con). Half of the actors were there, as well as the writers and creators. And what the creators said during their panel or video message stroke me. The message they sent 20 years ago about the fact we only have one planet and we should take care of it, well, it's still valid today. With the current geopolitical climate we have today and, um, (should I really name him) Trump, among others, it's more valid than it ever been before. And this is why they want to go back to this universe and write a third movie eventually. And a comic book. It's planned for 2019, from what I heard. And as a fan, I hope it's happening.
|
||||||
|
|
||||||
|
I think it's something like this that made this show great. One of a kind, even. It sends a message and it does it well while being funny and captivating people all around French-speaking Canada. It's kind of our own locally-produced *Doctor Who* or *Star Trek*.
|
||||||
|
|
||||||
|
So, obviously, if humanity would meet a race of magical cat people, what would they do with that? Who knows? This is an issue neither captain would want to go bad and get in a deadly war about that. This thing is about friendship, really. Friendship between people who are different and could potentially be abused because of said differences. And this is what Zarmina is about, two astronauts stranded on an inhabited planet with quite powerful beings who will need to overcome their differences in order to get back to Earth and hope these people on Earth will think like them when they'll get back to them.
|
||||||
|
|
||||||
|
So this is one of the things I want to do with Zarmina. We don't have a lot of good sci-fi over here that sends a good message and this is something I'd really like to do. And this is the kind of message I'd like to send with this. The other, it's kinda because of my experience as a web developer, I want to do something completely original, something that makes good use of the web as a media. Every chapter is going to have music, maybe even animations and other interactivity, if I can and when the story will need it. (Well, I'm not the best at drawing, but eh, gotta do my best...) Maybe also... learning? You're definitely going to learn something, won't say more :) Anyway, this is something I learned with the Internet, if you want to be successful, you gotta standout.
|
||||||
|
|
||||||
|
I've written 3 chapters and a half so far (under its current form, that is, I have a story under a previous form that covers the first 4 chapters or so I'm currently rewriting), the first one is online [on the website](http://zarmina.xyz/) and the others will be published soon once they're ready, in French and English. Meanwhile, you can have a sneak peek on [Patreon](https://patreon.com/juju2143) and help me financially while I'm working on this, but yeah, I really like how it's finally ending up. It's going to be quite an experience... and I hope to show you all of this real soon.
|
||||||
|
|
||||||
|
So this is one of the things I worked on in 2018 that I'm proud of it and will definitely keep doing in 2019. Stay tuned for more of these things... 2018 sure was a weird year.
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
title: April Fools 2019
|
||||||
|
slug: april-fools-2019
|
||||||
|
publishDate: 2019-04-02T12:00:00.000Z
|
||||||
|
lastmod: 2019-11-29T02:53:53.000Z
|
||||||
|
tags: [Random]
|
||||||
|
---
|
||||||
|
|
||||||
|
As usual, I like to prank people with good, original jokes on April 1st across my properties. Not these overused jokes everyone hates (for instance the local furry group deleted pranks because they were getting too much instances of the same overused, boring joke), but rather original and fun jokes. Or I try to, anyway. I didn't took much effort and time doing any of them this year as I didn't had any good ideas in advance, and I didn't had time to do an elaborate one, but here's a rundown of my pranks of this year.
|
||||||
|
|
||||||
|
## CodeWalrus
|
||||||
|
|
||||||
|
I took one of our nastiest and weirdest members we haven't banned yet and I gave him the role of “President of CodeWalrus” on our Discord server (no additional permissions that what he already had, don't worry) and told him he bought CodeWalrus while drunk. Kinda fun to see him getting confused by this. Could also had done a press release with that, but eh.
|
||||||
|
|
||||||
|
## Zarmina
|
||||||
|
|
||||||
|
For context, only the first chapter was online by then, and I was distributing some business cards of it at Nadeshicon this weekend. So I thought I could release Chapter 2 and just end it there with a downer ending where everyone dies? Didn't had a lot of feedback on it, though. I only released it in French for now but here's the ending for posterity:
|
||||||
|
|
||||||
|
> Soudain, le rubis s'illumine à une vitesse et une intensité folles, puis explose. Tous meurent sur le coup. Les corps ne sont retrouvés que quelques semaines plus tard et eurent droit à des funérailles de héros.
|
||||||
|
|
||||||
|
> Le vaisseau du précédent chapitre a également explosé en entrant dans l'atmosphère de la planète et personne s'en est rendu compte, seulement une pluie de débris dans un désert dans la partie chaude de la planète. Après quelques semaines sans nouvelles des astronautes, la Terre assument leur mort et leur firent des funérailles nationales.
|
||||||
|
|
||||||
|
## MLP Québec
|
||||||
|
|
||||||
|
Again for context, the site is pretty much dead and unmaintained, but I thought I could announce we discovered a portal to Equestria somewhere in my hometown of Québec City on the Twitter account. Kinda low quality, but the tweets got a bunch of retweets and likes, so thanks for that :)
|
||||||
|
|
||||||
|
> Bonjour, nous avons trouvé un portail vers Equestria dans le fond de Loretteville
|
||||||
|
>
|
||||||
|
> Nous envoyons des renforts
|
||||||
|
> — MLP Québec (@MLPQuebec) [April 1, 2019](https://twitter.com/MLPQuebec/status/1112608895053246465?ref_src=twsrc%5Etfw)
|
||||||
|
|
||||||
|
Click to see replies
|
||||||
|
Well, that was it for this year, I thought of all of those the same day and I wasn't really prepared for those, but eh, that was fun :)
|
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
title: "DevLog #1: Making the trailer"
|
||||||
|
slug: devlog-1-making-the-trailer
|
||||||
|
publishDate: 2019-11-07T03:15:00.000Z
|
||||||
|
lastmod: 2019-11-25T08:00:18.000Z
|
||||||
|
tags: [Zarmina]
|
||||||
|
---
|
||||||
|
|
||||||
|
***This article was originally published on *[Patreon](https://www.patreon.com/juju2143)*, reposting it here for completeness.***
|
||||||
|
|
||||||
|
I told you I'm keeping you updated, so I'm keeping a dev log here on Patreon. Everything you need to know, so it sounds like I'm actually active at doing something and you can learn from my errors. Don't want to decieve anyone who might want to throw money at me here.
|
||||||
|
|
||||||
|
First thing on my new plan is to post a trailer on YouTube, redirect people here and hope The Algorithm™ does its job somewhat soon.
|
||||||
|
|
||||||
|
Unfortunately, I work on Linux on a semi-ancient iMac (back when they were still somewhat good), the graphic card is crapping its life out and I don't have money to buy a semi-decent computer that could run my software of choice, Adobe After Effects. And all the alternatives, either they can't run on my weird setup or I don't like them.
|
||||||
|
|
||||||
|
So, what else could I do? Might do it directly in Ren'Py while I'm at it, that would be pretty cool as an intro in the game itself. Now trying to figure out the Ren'Py language. Which sounds like someone abused and mangled the Python engine during its sleep. Pretty cool language, though.
|
||||||
|
|
||||||
|
So yeah, coding a semi-decent intro, finding free images that goes with it (the NASA will be useful here), abusing the heck out of Ren'Py, posting everything everywhere once done and throw a bit of climate change and everything in there in hopes someone gets interested. Can't go wrong, right? Right.
|
||||||
|
|
||||||
|
Wish me luck.
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
title: "Zarmina 3.0: rewrite (again)"
|
||||||
|
slug: zarmina-3-0-rewrite-again
|
||||||
|
translationKey: zarmina-3-0-rewrite-again
|
||||||
|
publishDate: 2019-11-07T02:53:00.000Z
|
||||||
|
lastmod: 2019-11-26T02:03:11.000Z
|
||||||
|
tags: [Zarmina]
|
||||||
|
---
|
||||||
|
|
||||||
|
***This article was originally published on **[Patreon](https://www.patreon.com/juju2143)**, reposting it here for completeness.***
|
||||||
|
|
||||||
|
*This is a semi-Google Translation of the last post, for the English-speaking friends I might have here. I'm probably going to do this in both English and my native language that is French. Maybe also other languages too.*
|
||||||
|
|
||||||
|
And that's where I lost my motivation. Once again. I have not written anything since last winter, because, you see, I realized that it was not going anywhere in its current form. Blank page syndrome. Small panic. It's not the vision of the project that I had. I can not do this alone, with no funding. And I put it on pause, I focused on something else, other projects, waiting for things to happen.
|
||||||
|
|
||||||
|
Fast forward to the end of September. Inktober was coming. I wasn't too shabby at drawing. I went back to the idea and I thought, why not draw all my characters?
|
||||||
|
|
||||||
|
Unfortunately, no, it didn't happen. I did not have the time, nor the motivation, for several reasons out of, but also in my control. It's the 28th day and I made half of Miyuki's drawing. Yeah, that was a nice Inktober this year. But, I planned my idea. How was I going to do it this time? It will take more planning than that. This time, I go all in and do the project that I have always dreamed of doing. Go get funding to do this full time and set up a studio worthy of the name. Engage employees who are better than me on some things. Create jobs. Maybe even get help from the government, if it's possible. They like that, create jobs.
|
||||||
|
|
||||||
|
I have a vision, somewhat ambitious, certainly, but today is the day. Zarmina version 3.0: The Visual Novel. A 100% Quebec visual novel unlike anything else in Quebec, or anywhere else, probably. With art, music, programming, available on Steam and / or any other distribution platform. A masterpiece of fantasy and science fiction, nothing less. I'll keep you informed. In the meantime, I've posted the rest of what I wrote to date for Zarmina 2.0: The Regular Novel, before scraping it. For free. Because it's going to be bigger than just a novel with music on it.
|
||||||
|
|
||||||
|
There was a certain person who mentioned me the other time in a meetup in Old Quebec that she was eager to see more. This is for you. And for all those who have believed in me. Anyone who told me that my catgirl was cute when I posted my drawings on their Discord server. It's for you, guys. Your encouragement is precious.
|
||||||
|
|
||||||
|
I need you. Give generously. Or at least give all your encouragement. It's gonna be a bumpy ride. And I will try to update you when I can. It's going to be big. Hoping to finally see the end of this project. Who is with me?
|
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
title: Trailer is out
|
||||||
|
slug: trailer-is-out
|
||||||
|
translationKey: trailer-is-out
|
||||||
|
publishDate: 2019-11-23T06:36:00.000Z
|
||||||
|
lastmod: 2019-12-13T05:53:57.000Z
|
||||||
|
tags: [Zarmina]
|
||||||
|
---
|
||||||
|
|
||||||
|
*This article was originally published on [Itch.io](https://juju2143.itch.io/zarmina), reposting it here for completeness.*
|
||||||
|
|
||||||
|
{{< youtube y39JZ2c7YsA >}}
|
||||||
|
|
||||||
|
New trailer for the project, it's not the complete game but I hope you'll like it :) It's been done with Ren'Py cause it's gonna be the intro to the game and I wasn't able to get a good video editing software working on my computer... You can see it straight on the game's page or if it's buggy there's a YouTube video.
|
||||||
|
|
||||||
|
For you English speakers, don't worry, there will be an English version soon. Once I figure out how the translation module works. It's kinda weird.
|
||||||
|
|
||||||
|
Anyway. If you liked it, please throw me some money here or on Patreon, that'd be super appreciated. But in all, I hope you have fun!
|
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
title: about me
|
||||||
|
slug: about
|
||||||
|
publishDate: 2019-11-25T06:54:19.000Z
|
||||||
|
lastmod: 2020-02-07T00:12:34.000Z
|
||||||
|
isPage: true
|
||||||
|
---
|
||||||
|
|
||||||
|
Hi, I'm J. P. Savard. (Obviously a pen name. Or is it?) Also known as Juju or Yuki.
|
||||||
|
|
||||||
|
I'm just a random freelance programmer from Québec City, Canada. I write things sometimes. It feels good.
|
||||||
|
|
||||||
|
Here you will find random musings about life, development logs, code experiments, educational content, or anything I deem worth to put on this silly blog. Might write in French sometimes, if you don't understand, it might not concern you, look somewhere else.
|
||||||
|
|
||||||
|
None of my thoughts represent the opinion of my employers, clients, anyone I might know or even myself from next week. They often agree with me, but take nothing for granted.
|
||||||
|
|
||||||
|
If you like the content I put here, please tip me on [Patreon](http://www.patreon.com/juju2143)!
|
||||||
|
|
||||||
|
## legal stuff
|
||||||
|
|
||||||
|
Horse Life 98 strips uses art assets from Microsoft Chat and [Pony Town](https://pony.town), the latter are licensed under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/). Character designs and the jokes are mine, unless indicated otherwise. Yes, it's low-quality, that's part of the joke. We're in 1998.
|
||||||
|
|
||||||
|
The rest are mine, unless indicated otherwise. The pieces of code are usually licensed under [LiLiQ-P-1.1](https://forge.gouv.qc.ca/licence/liliq-v1-1/), unless indicated otherwise.
|
||||||
|
|
||||||
|
I'm clearly abusing this phrase, unless indicated otherwise.
|
||||||
|
|
||||||
|
## my stuff
|
||||||
|
|
||||||
|
[Zarmina](http://zarmina.xyz/) – My sci-fi fiction stuff.
|
||||||
|
[MLP Québec](http://mlp.quebec/) – My other blog about fandoms.
|
||||||
|
[CodeWalrus](https://codewalr.us/) – A nice community of programmers. We have walruses.
|
||||||
|
[julosoft](http://julosoft.net/) – Games I did, back when I was trying.
|
||||||
|
|
||||||
|
## me and my stuff, elsewhere
|
||||||
|
|
||||||
|
[GitHub](https://github.com/juju2143?tab=repositories) – Source code I wrote for random stuff.
|
||||||
|
[YouTube](https://www.youtube.com/user/julosoft) – Random videos I put together when I'm bored.
|
||||||
|
[YouTube](https://www.youtube.com/c/juju2143) – Animated stuff and other videos I actually give some of myself into.
|
||||||
|
[Vimeo](https://vimeo.com/juju2143) – Short films I did at school.
|
||||||
|
[deviantArt](http://juju2143.deviantart.com/) – Things I draw and characters I design.
|
||||||
|
[SoundCloud](http://soundcloud.com/juju2143) – Some music I do when I'm bored.
|
||||||
|
[Patreon](http://www.patreon.com/juju2143) – Send me some money!
|
||||||
|
|
||||||
|
## best ways to contact me
|
||||||
|
|
||||||
|
Discord: [CodeWalrus](https://discord.gg/cuZcfcF)
|
||||||
|
Twitter: [@juju2143](https://twitter.com/juju2143)
|
||||||
|
Mastodon: [@Yuki@im-in.space](https://im-in.space/@Yuki)
|
||||||
|
Email: juju at juju2143 dot ca
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
title: New blog, again
|
||||||
|
slug: new-blog-again
|
||||||
|
publishDate: 2019-11-25T07:57:22.000Z
|
||||||
|
lastmod: 2019-11-25T18:25:56.000Z
|
||||||
|
tags: [Meta]
|
||||||
|
---
|
||||||
|
|
||||||
|
Yeah, I complain a lot about the fact I don't write on my blog. I moved it again, this time on Ghost, after I found out I had free web hosting and it could run Node.js apps on it, so let's try this. It was a bitch to install, though, as if Murphy's law was playing against me. If it has a chance to fail, then it will fail. It took like 3 days, but I hope it's worth it. Of course WordPress is a huge power house I don't want to mess with anymore, and Write Freely is less of a power house than I thought it would be (I believed a lot in the Fediverse back then, and now the Mastodon instance I host broke), I found out about Ghost which is in Node.js, so yeah, hope it's going to be fast and simple. I moved all content to the new blog, and I'll probably copy content from other sites on here as well, I blogged a bit on Patreon and Itch.io this year, gonna repost those here as well.
|
||||||
|
|
||||||
|
Anyway. Expect new content soon. I'm now developing Zarmina as a visual novel, I'll try to post some devlogs here, that or random doodles I made with Processing or something.
|
||||||
|
|
||||||
|
Oh, also new domain that has my name in it, cause why not, it looks professionnal. Not that I don't like toasters.rocks, that's a good domain, but, eh, I dunno. Might go back to it. Anyway. Welcome to Juju's Stupid Random Crap v3 and have some fun.
|
|
@ -0,0 +1,80 @@
|
||||||
|
---
|
||||||
|
title: trippy perlin noise
|
||||||
|
slug: trippy-perlin-noise
|
||||||
|
publishDate: 2019-11-25T18:16:14.000Z
|
||||||
|
lastmod: 2019-11-29T01:06:04.000Z
|
||||||
|
tags: [Experiments, p5.js]
|
||||||
|
description: "Warning: contains some intensive JavaScript that might break your computer"
|
||||||
|
images:
|
||||||
|
- /images/2019/11/perlin.png
|
||||||
|
---
|
||||||
|
<script src="https://unpkg.com/p5@^0.10/lib/p5.min.js"></script>
|
||||||
|
<script>
|
||||||
|
function setup() {
|
||||||
|
var c = createCanvas(256, 256);
|
||||||
|
c.parent('sketch-holder');
|
||||||
|
background(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
var n = 0;
|
||||||
|
var z = 1;
|
||||||
|
var speed = 0.005;
|
||||||
|
|
||||||
|
noiseDetail(8, 0.65);
|
||||||
|
loadPixels();
|
||||||
|
for(a=0; a<3; a++)
|
||||||
|
{
|
||||||
|
noiseSeed(a+n);
|
||||||
|
for(i=0; i<width*height*4; i+=4)
|
||||||
|
{
|
||||||
|
x = ((i/4)%width)/width*z;
|
||||||
|
y = floor((i/4)/width)/height*z;
|
||||||
|
pixels[i+a] = noise(x,y,frameCount*speed)*255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updatePixels();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="sketch-holder"></div>
|
||||||
|
|
||||||
|
Now that I can easily embed JavaScript on this blog, I should put here some of my experiments and weird code that does nothing, cause why not. This one is some colored Perlin noise made using p5.js, it would be pretty cool as a background for something, isn't it?
|
||||||
|
|
||||||
|
It is quite simple using the `noise` function, one the simplest things you can do with it is `color = noise(x, y, time)` for each pixel on the canvas, usually you make it grayscale but this time I'm generating 3 of them for each color component (red, green, blue) with a different seed. It looks pretty cool, if you ask me.
|
||||||
|
|
||||||
|
```js
|
||||||
|
function setup() {
|
||||||
|
createCanvas(256, 256);
|
||||||
|
background(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
var n = 0;
|
||||||
|
var z = 1;
|
||||||
|
var speed = 0.005;
|
||||||
|
|
||||||
|
noiseDetail(8, 0.65);
|
||||||
|
loadPixels();
|
||||||
|
for(a=0; a<3; a++)
|
||||||
|
{
|
||||||
|
noiseSeed(a+n);
|
||||||
|
for(i=0; i<width*height*4; i+=4)
|
||||||
|
{
|
||||||
|
x = ((i/4)%width)/width*z;
|
||||||
|
y = floor((i/4)/width)/height*z;
|
||||||
|
pixels[i+a] = noise(x,y,frameCount*speed)*255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updatePixels();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
p5.js code for the above canvas.
|
||||||
|
|
||||||
|
On that, I recommend [p5.js](http://p5js.org), or its big sister [Processing](https://processing.org), if you want to learn code and do some cool artsy stuff with it, I've been recommending to a bunch of people lately :) If you want to learn and you're a complete beginner, there's a series about that on [The Coding Train](https://www.youtube.com/playlist?list=PLRqwX-V7Uu6Zy51Q-x9tMWIv9cueOFTFA) on YouTube.
|
||||||
|
|
||||||
|
(P.S.: Sorry if I break your computer by executing some intensive JavaScript on this post! The above image isn't an image but the actual code running in your browser, and the whole calculation is a bit intensive, so I kept the canvas size rather small so it's bearable on older computers like mine :))
|
||||||
|
|
||||||
|
Edit (26/11): Updated the post with code and some explanations.
|
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
title: commissions
|
||||||
|
slug: commissions
|
||||||
|
publishDate: 2019-11-27T07:32:50.000Z
|
||||||
|
lastmod: 2019-11-27T07:32:50.000Z
|
||||||
|
isPage: true
|
||||||
|
---
|
||||||
|
|
||||||
|
You like this website? You wish to get a website just like this one to advertise your stuff? Super simple, not a pain to manage, tailored to your needs? Look no further, I can help you!
|
||||||
|
|
||||||
|
Included in the package:
|
||||||
|
|
||||||
|
- Free hosting
|
||||||
|
- Custom theme
|
||||||
|
- You get control of everything
|
||||||
|
- Free training
|
||||||
|
- Domain name included
|
||||||
|
- Some guy with years of experience in internet things
|
||||||
|
|
||||||
|
[Contact me](/about) for a quote!
|
|
@ -0,0 +1,161 @@
|
||||||
|
---
|
||||||
|
title: ecco the dolphin
|
||||||
|
slug: ecco-the-dolphin
|
||||||
|
publishDate: 2019-11-29T02:47:27.000Z
|
||||||
|
lastmod: 2019-12-01T06:13:10.000Z
|
||||||
|
tags: [Experiments, p5.js]
|
||||||
|
description: Let's recreate this weird effect from Ecco the Dolphin.
|
||||||
|
images:
|
||||||
|
- /images/2019/11/background.png
|
||||||
|
---
|
||||||
|
<script src="https://unpkg.com/p5@^0.10/lib/p5.min.js"></script>
|
||||||
|
<script>
|
||||||
|
// Ecco effect v2 by juju2143
|
||||||
|
// based on original code by foone
|
||||||
|
// https://github.com/foone/ecco-distortion-effect
|
||||||
|
// Licenced under GPL3
|
||||||
|
|
||||||
|
var shifts = "gDkZcB510pQ:3pSf]>4oLh\>41pS;nWd_@lYcB5oT;nJ82pSfCkH7nV<3oL82pN9nV<31pNh\c_?lH7nKiE6210000pOg\cB5oL82pN931pOg\>mWe^aA5110pO9nKh\bAlYdCkG7oL8nVe^a`@5oL82pSf\>lXd^?lX=3oM9nV<31pNhEjF6oL8nJiEjF6oU;310pQ:3pSfC6oU;mW=41pN9nK8nJ8nV;nV<310000pPgD6oUe]>4oL9nVe^a`@";
|
||||||
|
|
||||||
|
function preload() {
|
||||||
|
img = loadImage('/images/2019/11/background.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
var c = createCanvas(320, 224);
|
||||||
|
c.parent('sketch-holder');
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
for (var i = 0; i < height; i++)
|
||||||
|
image(img, 0, i, width, 1, shifts.charCodeAt((i + frameCount) & 0xFF)-0x30, i, width, 1);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id="sketch-holder"></div>
|
||||||
|
|
||||||
|
Welcome to the second installment of my code experiments! This time we're gonna look into the weird effect used in the background of messages in Ecco the Dolphin for the Sega Genesis (or MegaDrive, if you're asking someone outside the Americas). I got the idea from Twitter user @Foone who helpfully reverse engineered the game ROM (with Twitter user @Reaper_man02) to figure out how it works and wrote an implementation in Python. Then I went ahead and adapted it in p5.js.
|
||||||
|
|
||||||
|
{{< twitter 1199590443538796549 >}}
|
||||||
|
Read the replies for some explanations.
|
||||||
|
|
||||||
|
Turns out it's pretty simple: there's a table in ROM, it's basically how much each line should be shifted in the x axis. Then for each frame we shift the values around so it looks like it's scrolling.
|
||||||
|
|
||||||
|
![](/images/2019/11/background.png)
|
||||||
|
Base image.
|
||||||
|
|
||||||
|
```js
|
||||||
|
function generate_for_offsets(offset) {
|
||||||
|
var SCREEN_SHIFTS = [
|
||||||
|
55, 20, 59, 42, 51, 18, 5, 1, 0, 64, 33, 10, 3, 64, 35, 54, 45, 14, 4, 63,
|
||||||
|
28, 56, 44, 14, 4, 1, 64, 35, 11, 62, 39, 52, 47, 16, 60, 41, 51, 18, 5,
|
||||||
|
63, 36, 11, 62, 26, 8, 2, 64, 35, 54, 19, 59, 24, 7, 62, 38, 12, 3, 63,
|
||||||
|
28, 8, 2, 64, 30, 9, 62, 38, 12, 3, 1, 64, 30, 56, 44, 51, 47, 15, 60, 24,
|
||||||
|
7, 62, 27, 57, 21, 6, 2, 1, 0, 0, 0, 0, 64, 31, 55, 44, 51, 18, 5, 63, 28,
|
||||||
|
8, 2, 64, 30, 9, 3, 1, 64, 31, 55, 44, 14, 61, 39, 53, 46, 49, 17, 5, 1, 1,
|
||||||
|
0, 64, 31, 9, 62, 27, 56, 44, 50, 17, 60, 41, 52, 19, 59, 23, 7, 63, 28, 8,
|
||||||
|
62, 38, 53, 46, 49, 48, 16, 5, 63, 28, 8, 2, 64, 35, 54, 44, 14, 60, 40,
|
||||||
|
52, 46, 15, 60, 40, 13, 3, 63, 29, 9, 62, 38, 12, 3, 1, 64, 30, 56, 21, 58,
|
||||||
|
22, 6, 63, 28, 8, 62, 26, 57, 21, 58, 22, 6, 63, 37, 11, 3, 1, 0, 64, 33,
|
||||||
|
10, 3, 64, 35, 54, 19, 6, 63, 37, 11, 61, 39, 13, 4, 1, 64, 30, 9, 62, 27,
|
||||||
|
8, 62, 26, 8, 62, 38, 11, 62, 38, 12, 3, 1, 0, 0, 0, 0, 64, 32, 55, 20, 6,
|
||||||
|
63, 37, 53, 45, 14, 4, 63, 28, 9, 62, 38, 53, 46, 49, 48, 16
|
||||||
|
]
|
||||||
|
var output_shifts = [];
|
||||||
|
|
||||||
|
for (var current_line = 0; current_line < height; current_line++) {
|
||||||
|
output_shifts[current_line] = SCREEN_SHIFTS[(current_line + offset) & 0xFF];
|
||||||
|
}
|
||||||
|
return output_shifts;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
p5.js code for the above canvas, part 1
|
||||||
|
|
||||||
|
This function basically computes a table of offsets for the current frame by adding the line number with the frame number, mod 256. Then a bit of initialization code:
|
||||||
|
|
||||||
|
```js
|
||||||
|
function preload() {
|
||||||
|
img = loadImage('https://toasters.rocks/images/2019/11/background.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
createCanvas(320, 224);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
p5.js code for the above canvas, part 2
|
||||||
|
|
||||||
|
And now this is where it gets interesting. For each line we call the `image` function which crops a 320x1 portion of the image with the appropriate x offset we calculated earlier. Note that the original image is 384x224.
|
||||||
|
|
||||||
|
```js
|
||||||
|
function draw() {
|
||||||
|
var adjusts = generate_for_offsets(frameCount);
|
||||||
|
for (var i = 0; i < height; i++)
|
||||||
|
image(img, 0, i, width, 1, adjusts[i], i, width, 1);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
p5.js code for the above canvas, part 3
|
||||||
|
|
||||||
|
We can also completely forego the `generate_for_offsets` function and make it simpler:
|
||||||
|
|
||||||
|
```js
|
||||||
|
var shifts = [
|
||||||
|
55, 20, 59, 42, 51, 18, 5, 1, 0, 64, 33, 10, 3, 64, 35, 54, 45, 14, 4, 63,
|
||||||
|
28, 56, 44, 14, 4, 1, 64, 35, 11, 62, 39, 52, 47, 16, 60, 41, 51, 18, 5,
|
||||||
|
63, 36, 11, 62, 26, 8, 2, 64, 35, 54, 19, 59, 24, 7, 62, 38, 12, 3, 63,
|
||||||
|
28, 8, 2, 64, 30, 9, 62, 38, 12, 3, 1, 64, 30, 56, 44, 51, 47, 15, 60, 24,
|
||||||
|
7, 62, 27, 57, 21, 6, 2, 1, 0, 0, 0, 0, 64, 31, 55, 44, 51, 18, 5, 63, 28,
|
||||||
|
8, 2, 64, 30, 9, 3, 1, 64, 31, 55, 44, 14, 61, 39, 53, 46, 49, 17, 5, 1, 1,
|
||||||
|
0, 64, 31, 9, 62, 27, 56, 44, 50, 17, 60, 41, 52, 19, 59, 23, 7, 63, 28, 8,
|
||||||
|
62, 38, 53, 46, 49, 48, 16, 5, 63, 28, 8, 2, 64, 35, 54, 44, 14, 60, 40,
|
||||||
|
52, 46, 15, 60, 40, 13, 3, 63, 29, 9, 62, 38, 12, 3, 1, 64, 30, 56, 21, 58,
|
||||||
|
22, 6, 63, 28, 8, 62, 26, 57, 21, 58, 22, 6, 63, 37, 11, 3, 1, 0, 64, 33,
|
||||||
|
10, 3, 64, 35, 54, 19, 6, 63, 37, 11, 61, 39, 13, 4, 1, 64, 30, 9, 62, 27,
|
||||||
|
8, 62, 26, 8, 62, 38, 11, 62, 38, 12, 3, 1, 0, 0, 0, 0, 64, 32, 55, 20, 6,
|
||||||
|
63, 37, 53, 45, 14, 4, 63, 28, 9, 62, 38, 53, 46, 49, 48, 16
|
||||||
|
]
|
||||||
|
|
||||||
|
function preload() {
|
||||||
|
img = loadImage('https://toasters.rocks/images/2019/11/background.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
createCanvas(320, 224);
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
for (var i = 0; i < height; i++)
|
||||||
|
image(img, 0, i, width, 1, shifts[(i + frameCount) & 0xFF], i, width, 1);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
p5.js code for the above canvas, version 2
|
||||||
|
|
||||||
|
Now that huge array is a bit unwieldy, maybe you can compress it? Sure thing.
|
||||||
|
|
||||||
|
```js
|
||||||
|
console.log(String.fromCharCode(...shifts.map(x => x + 0x30)));
|
||||||
|
```
|
||||||
|
Let's transform that stupid array into something better
|
||||||
|
|
||||||
|
```js
|
||||||
|
var shifts = "gDkZcB510pQ:3pSf]>4oLh\>41pS;nWd_@lYcB5oT;nJ82pSfCkH7nV<3oL82pN9nV<31pNh\c_?lH7nKiE6210000pOg\cB5oL82pN931pOg\>mWe^aA5110pO9nKh\bAlYdCkG7oL8nVe^a`@5oL82pSf\>lXd^?lX=3oM9nV<31pNhEjF6oL8nJiEjF6oU;310pQ:3pSfC6oU;mW=41pN9nK8nJ8nV;nV<310000pPgD6oUe]>4oL9nVe^a`@";
|
||||||
|
|
||||||
|
function preload() {
|
||||||
|
img = loadImage('https://toasters.rocks/images/2019/11/background.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
function setup() {
|
||||||
|
createCanvas(320, 224);
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
for (var i = 0; i < height; i++)
|
||||||
|
image(img, 0, i, width, 1, shifts.charCodeAt((i + frameCount) & 0xFF)-0x30, i, width, 1);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
p5.js code for the above canvas, version 3
|
||||||
|
|
||||||
|
From there, there's a lot of tricks to compress your code so it goes a bit faster. With that much code, we went from something that looks complex into something simple, which is pretty cool. Well, that's all for today, hope you learned a bit with that :)
|
||||||
|
|
||||||
|
All content owned by their respective owners: game, data and assets by [Novotrade International](https://en.wikipedia.org/wiki/Appaloosa_Interactive), code by Foone and adapted by myself licenced under GPL3.
|
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
title: Horse Life 98
|
||||||
|
slug: horse-life-98
|
||||||
|
publishDate: 2019-12-15T00:55:25.000Z
|
||||||
|
lastmod: 2019-12-15T00:56:43.000Z
|
||||||
|
tags: [Writing]
|
||||||
|
images:
|
||||||
|
- /images/2019/12/ponylife98-000-1.png
|
||||||
|
---
|
||||||
|
|
||||||
|
Been a while I wanted to make a webcomic, but I never got around at drawing one, and if I do I'm not that good at drawing, so...
|
||||||
|
|
||||||
|
I recently started messing up with a Windows 98 VM (for various reasons, including a future redesign of this website), I re-discovered Microsoft Comic Chat, I decided to import my [Pony Town](https://pony.town) avatars in it, and the rest is history. It's simple to make, it doesn't take too much of my attention span and it looks good, so yeah, winning formula.
|
||||||
|
|
||||||
|
It's going to be rather absurd, kinda like one of these comics that looks the same but with different punch lines. Hope you like it.
|
||||||
|
|
||||||
|
Check it out at [https://toasters.rocks/horselife](/horselife)
|
|
@ -0,0 +1,130 @@
|
||||||
|
---
|
||||||
|
title: Esoteric uses of CGI
|
||||||
|
slug: esoteric-uses-of-cgi
|
||||||
|
publishDate: 2019-12-21T04:41:19.000Z
|
||||||
|
lastmod: 2019-12-21T05:34:28.000Z
|
||||||
|
tags: [Tech]
|
||||||
|
description: Or how to program the back-end of your website using Commodore BASIC.
|
||||||
|
images:
|
||||||
|
- /images/2019/12/photo-1461749280684-dccba630e2f6.jpg
|
||||||
|
---
|
||||||
|
|
||||||
|
Well, you probably all heard of [esoteric programming languages](https://esolangs.org/) before, but the question today is, programming languages used outside its intended use, would that be esoteric?
|
||||||
|
|
||||||
|
If I tell you back-end web languages, you'd immediately think PHP, Node.js, Ruby, C maybe, but what if I tell you... Commodore BASIC? Sure, just get a Commodore 64 with a TCP/IP stack and write a web server for it you'd say, but I mean, actually using it on an actual, everyday web server on some Linux box? It's clearly not made for that.
|
||||||
|
|
||||||
|
Enter [CGI](https://en.wikipedia.org/wiki/Common_Gateway_Interface), which is a protocol that was basically made so your web server can run a Perl script that could do more than directly serving some static HTML file so your user could actually interact with your website. A standard setup would be PHP running as a FastCGI server on top of Nginx, that or running as a plugin on Apache. In the first case, PHP communicates with Nginx via a UNIX socket, the web server forwards a request, PHP processes it and sends it back, so it would be more efficient and not spawn a process every request, which might slow your site down if it's popular enough.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
We're going to use [fcgiwrap](https://github.com/gnosek/fcgiwrap), a little piece of software that plugs into Nginx just like PHP does, but it runs just about any software you can run on command line, be it a shell script, a program, or a script written using your favourite language interpreter. You just install it using your Linux distro's package manager, activate the socket with a `sudo systemctl start fcgiwrap.socket`, install it in your `nginx.conf` just like you did with PHP, that's it, just like in the good ol' days.
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
location ~* \.cgi {
|
||||||
|
root /srv/http;
|
||||||
|
fastcgi_pass unix:/run/fcgiwrap.sock;
|
||||||
|
fastcgi_index index.cgi;
|
||||||
|
include fastcgi.conf;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Example nginx config block.
|
||||||
|
|
||||||
|
So, as long as you have an interpreter, you can turn it into a web back-end server language, right? Theorically, yes. We'll take our good ol' Commodore 64 BASIC [that has been ported to C](https://github.com/mist64/cbmbasic) so it could work on your modern computer as a case study.
|
||||||
|
|
||||||
|
So basically, you need a console program that opens a file and interprets it:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ cat program.bas
|
||||||
|
#!/usr/bin/cbmbasic
|
||||||
|
10 PRINT"Hello, world!"
|
||||||
|
$ chmod +x program.bas
|
||||||
|
$ ./program.bas
|
||||||
|
Hello, world!
|
||||||
|
```
|
||||||
|
Example console session.
|
||||||
|
|
||||||
|
Mind the shebang (the `#!/usr/bin/cbmbasic` line), it basically turns `./program.bas` into the proper `cbmbasic program.bas`. You'll need to run `chmod +x` on it for it to work. It's going to be useful later as you have no way otherwise to tell your web server which interpreter you want to run that file with.
|
||||||
|
|
||||||
|
So now you can dump in your web directory a file like this:
|
||||||
|
|
||||||
|
```basic
|
||||||
|
#!/usr/bin/cbmbasic
|
||||||
|
10 PRINT"HTTP/1.1 200 OK
|
||||||
|
20 PRINT"Content-Type: text/html;charset=utf-8
|
||||||
|
30 PRINT
|
||||||
|
40 PRINT"<html><head><title>Hello</title></head><body>
|
||||||
|
50 PRINT"Hello, world!
|
||||||
|
60 PRINT"<br/>Time is: ";
|
||||||
|
70 PRINT TI$
|
||||||
|
1000 PRINT"</body></html>
|
||||||
|
```
|
||||||
|
index.cgi
|
||||||
|
|
||||||
|
Navigate to it with your browser and sure enough, you have a nice "Hello, world!" with the current time. So it's really easy to code something to show up in your browser. But of course, this ain't PHP, you have to send the HTTP headers yourself (lines 10-30, anything followed by two newlines should be sufficient, but for best results you should send the HTTP code and the content type), but still, quite easy. But the question here is, how is it useful?
|
||||||
|
|
||||||
|
## $_POST
|
||||||
|
|
||||||
|
Obviously, you'd need some kind of input, right? The HTTP protocol allows for GET and POST. POST allows you to send data in the body of the request, otherwise you can also get some data from the URL. In PHP that would be respectively the `$_POST` and `$_GET` arrays. But of course it won't automatically parse these, so let's do that.
|
||||||
|
|
||||||
|
For POST data, it's just as easy as reading keyboard input, or STDIN, depending of how it works. If it's a GET request, then you should get nothing (or a 0xFF byte in case of BASIC), otherwise you'd get the data your user sent in your POST form.
|
||||||
|
|
||||||
|
```basic
|
||||||
|
100 PRINT"<form method=POST action=''>
|
||||||
|
110 PRINT"<input name='input'></input>
|
||||||
|
120 PRINT"<input type=hidden name='hidden' value='value'></input>
|
||||||
|
130 PRINT"<button type=submit>Submit</button>
|
||||||
|
140 PRINT"</form><pre>
|
||||||
|
|
||||||
|
200 B$=""
|
||||||
|
210 GET A$
|
||||||
|
220 IF A$="&" GOTO 260
|
||||||
|
230 IF ASC(A$)>127 GOTO 260
|
||||||
|
240 B$=B$+A$
|
||||||
|
250 GOTO 210
|
||||||
|
260 PRINT B$
|
||||||
|
270 IF ASC(A$)<128 GOTO 200
|
||||||
|
280 PRINT"</pre>
|
||||||
|
```
|
||||||
|
|
||||||
|
Add this code to get and print POST variables. Good thing there's line numbers so I don't have to tell you where to add them.
|
||||||
|
It's safe to assume anything over 127 is the end of input, as anything above that will be percent-encoded. In particular, in BASIC, you get 199 if you're past the end (EOF) and 255 if there's nothing. Parsing the resulting string is left as an exercise to the reader. And now if you send some data in the form you'll get:
|
||||||
|
|
||||||
|
```
|
||||||
|
input=Something
|
||||||
|
hidden=value
|
||||||
|
```
|
||||||
|
|
||||||
|
You can even use brainfuck or something similar:
|
||||||
|
|
||||||
|
100 PRINT"<form method=POST action='bf.cgi'>
|
||||||
|
|
||||||
|
Replace line 100 from above...
|
||||||
|
```bf
|
||||||
|
#!/usr/bin/bfi
|
||||||
|
-[------->+<]>-.>-[--->+<]>-..----.[->+++++++<]>-.++.---.+++.-[--->++<]>.[-->+++<]>++.--..[--->++<]>.[-->+++++<]>-.----.>++++++++++..,+[-.,+]
|
||||||
|
```
|
||||||
|
...and create bf.cgi
|
||||||
|
## $_SERVER, $_GET, $_COOKIES, etc.
|
||||||
|
|
||||||
|
Now you'll want some of the sweet variables the server sends you that tells where the request came from and similar stuff, which is `$_SERVER` in PHP. If your language doesn't support environment variables from the OS, unfortunately (for brainfuck), you'll need to open files here. On Linux, it's `/proc/self/environ`, your mileage may vary on other OSes. It's mostly the same code, except the lines are separated by null bytes.
|
||||||
|
|
||||||
|
```basic
|
||||||
|
300 OPEN 1, 1, 0, "/proc/self/environ"
|
||||||
|
310 B$=""
|
||||||
|
320 GET#1, A$
|
||||||
|
330 IF A$="" GOTO 370
|
||||||
|
340 IF ASC(A$)>127 GOTO 370
|
||||||
|
350 B$=B$+A$
|
||||||
|
360 GOTO 320
|
||||||
|
370 PRINT B$
|
||||||
|
380 IF A$="" GOTO 210
|
||||||
|
390 IF ASC(A$)<128 GOTO 310
|
||||||
|
395 CLOSE 1
|
||||||
|
```
|
||||||
|
You know what to do at this point.
|
||||||
|
|
||||||
|
Again, parsing the results is left as an exercise to the reader. Notice that Commodore BASIC treats null bytes as an empty string here, which completely breaks the `ASC()` function and so should be handled separately.
|
||||||
|
|
||||||
|
Interesting variables are `QUERY_STRING` (PHP's `$_GET`, parses just like we did with POST), `HTTP_COOKIE` (cookies are here), `REQUEST_METHOD` (GET or POST), `REMOTE_ADDR` (your user's IP), `REQUEST_SCHEME` (https?), you can find a lot of them [just here](https://www.php.net/manual/reserved.variables.server.php) (at least those who aren't specific to PHP) or [here](https://www.rfc-editor.org/rfc/rfc3875.html#section-4.1).
|
||||||
|
|
||||||
|
On that, that's it for today, hope you have fun with this! I wonder what kind of weird stuff you'd make with this, please tell me if you code your website in an esoteric language :)
|
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
title: Miyuki 2019
|
||||||
|
slug: miyuki-2019
|
||||||
|
publishDate: 2020-01-01T01:13:43.000Z
|
||||||
|
lastmod: 2020-01-01T19:28:28.000Z
|
||||||
|
tags: [Zarmina]
|
||||||
|
---
|
||||||
|
|
||||||
|
![](/images/2020/01/miyuki3.png)
|
||||||
|
|
||||||
|
Now this is a lot closer to the style I'm shooting for on Zarmina, which is now going to be a visual novel made in an actual visual novel engine, if you don't know already. I love how it turned out: Minty Root suggested to make the lines thicker (that gives it a nice style), no shading (I think that adds to it), she now have a bow (although she isn't gonna wear it until later in the story), the jewel is a bit more detailed (it's a bitch to draw lol), her skirt is a bit shorter, boobs are a bit more, um, detailed (we're shooting anime style after all!) and her face is 20% cuter.
|
||||||
|
|
||||||
|
I hope to make the other characters in the beginning of 2020, Daisuke is definitely going to improve, then write the script and have a working game for, I dunno, eventually.
|
||||||
|
|
||||||
|
Anyway, I love how I'm improving art-wise since the last few years, I feel I'm finally closer to the point I can do both art and programming and it'll look at least half-good. I procrastinated quite a bit because of that, that feel I'm not super good at art (that and it took a while to make my good ol' computer cooperate). But eh, it's going to take the time it's going to take, even if it's gonna be released by 2030.
|
||||||
|
|
||||||
|
So yeah, stay tuned and happy new year 2020!
|
|
@ -0,0 +1,83 @@
|
||||||
|
---
|
||||||
|
title: "King James Bible: An Adventure in Compression"
|
||||||
|
slug: king-james-bible
|
||||||
|
publishDate: 2020-01-11T00:38:16.000Z
|
||||||
|
lastmod: 2020-01-11T00:59:58.000Z
|
||||||
|
tags: [Tech]
|
||||||
|
description: Figuring out how much space the Bible takes on a calculator or a Game Boy is fun
|
||||||
|
images:
|
||||||
|
- /images/2020/01/screenshot20200110191340.png
|
||||||
|
---
|
||||||
|
|
||||||
|
Well, time for another adventure, and with every adventure it begins with a very silly thought that isn't even mine this time:
|
||||||
|
|
||||||
|
![Discord screenshot of DJ Omnimaga who says "I wonder if one can fit the entire bible on a TI-Nspire CX with mViewer GX PDF converter"](/images/2020/01/screenshot20200110194154.png)
|
||||||
|
"I wonder if one can fit the entire bible on a TI-Nspire CX with mViewer GX PDF converter", says our friend DJ
|
||||||
|
|
||||||
|
And there you go, am I searching for the answer:
|
||||||
|
|
||||||
|
{{< twitter 1215378475277787137 >}}
|
||||||
|
That's the Wikipedia effect right there, you look for something and before you know you know everything there is to know about religion and now you're on some completely unrelated page about quantum theory.
|
||||||
|
|
||||||
|
So I downloaded the whole King James Version on [Project Gutenberg](http://www.gutenberg.org/), removed the header and footer they put there for better text processing, it's about 4.4 MB, converted to PDF, since the format support plain text directly it's not that much more (I got a 3 MB file), then converted to work on a TI-Nspire with the [mViewer GX PDF converter](https://tiplanet.org/forum/editgx.php) I... I think I broke TI-Planet. Well, from what it was able to generate (76 pages out of 1664, pretty much the book of Genesis?) each 10 pages is about 1.3 MB, so by extension the whole thing should be around 216 MB. We're dealing with images now, and not just plain text, so yeah. Could be lower if you set the resolution to something almost unreadable, but at this point you're better using a plain text reader on your calc.
|
||||||
|
|
||||||
|
So in conclusion, maybe. Maybe you can manage to do it. But it's gonna take most of your calc space, which is, with nothing installed, is about 100 MB.
|
||||||
|
|
||||||
|
But wait a minute, we have another contender...
|
||||||
|
|
||||||
|
{{< twitter 1215378787652833282 >}}
|
||||||
|
what are you talkin' about Minty
|
||||||
|
|
||||||
|
Oh God, we're gonna have some fun with that. Sure enough, there was an unlicensed King James Bible for the Game Boy published by Wisdom Tree in 1994, if you want to see it in action there was an [Angry Video Game Nerd episode about it](https://www.youtube.com/watch?v=Kz0TOQ1BF-M), but what's amazing about it is that is that the ROM is only one megabyte, including the entire text of the Bible, a search engine and two word search games.
|
||||||
|
|
||||||
|
(Note, if you're emulating it, use [BGB](http://bgb.bircd.org/). Any other emulator will introduce bugs due to its weird mapping no one will understand except BGB. Of course, I will not provide the ROM for the usual copyright reasons.)
|
||||||
|
|
||||||
|
![Screenshot of the hangman game running in an emulator that is not BGB featuring characters you can't normally input](/images/2020/01/screenshot20200109163510.png)
|
||||||
|
Here's what I mean. The reader will crash and the games will make you guess garbage you can't input.
|
||||||
|
|
||||||
|
So for fun, with the KJB text I have in hand, I tested some of the most common compression utilities, all set to their maximum/best/slowest settings:
|
||||||
|
|
||||||
|
|Compression|Size|Ratio|
|
||||||
|
|:----------|---:|----:|
|
||||||
|
|zpaq -m5|739407|16.682%|
|
||||||
|
|bzip2 -9|993406|22.412%|
|
||||||
|
|lzma -9|1048408|23.653%|
|
||||||
|
|xz -9|1048616|23.658%|
|
||||||
|
|7z -mx9|1048710|23.660%|
|
||||||
|
|zstd --ultra -22|1068137|24.099%|
|
||||||
|
|rar -m5|1142360|25.773%|
|
||||||
|
|gzip -9|1385457|31.258%|
|
||||||
|
|zip -9|1385595|31.261%|
|
||||||
|
|lz4 -9|1596418|36.017%|
|
||||||
|
|lzop -9|1611939|36.367%|
|
||||||
|
|Uncompressed|4432375|100%|
|
||||||
|
|
||||||
|
Note that some of these are different containers for the same algorithm, hence similar filesizes, and some of them are better suited for other uses, e.g. lz4 and lzop are better to decompress the Linux kernel at boot time because they're fast and use less memory, and zstd is starting to replace xz because it's 1300% faster despite producing slightly bigger files.
|
||||||
|
|
||||||
|
So, with our goal of a ROM size of 1048576 bytes with enough space left to fit some code for the decompressor that is fast enough to be playable on a Game Boy, a good-looking UI, a search engine and some games, only zpaq and bzip2 would fit the bill, and even then. (Special mention to lzma which fits a megabyte almost exactly.) Most of those algorithms were devised after 1994, bzip2 in particular was devised between 1996 and 2000, but even though it has the best compression ratio it's way slower than gzip.
|
||||||
|
|
||||||
|
Anyway, I'm not an expert, but yeah, there's more efficient compressors out there, but we don't usually use them because they're either experimental and/or very, very slow, the PAQ ones in particular. So I'd imagine a slow compressor with a fast decompressor that is tuned for English text.
|
||||||
|
|
||||||
|
So, now that we have our compression benchmark on file size, it's appropriate to make a decompression benchmark based on time, because that's what we need, right? So here's some tests under a normal load on my good ol' iMac 27" mid-2011 running Linux (don't laugh, it's old af but it's still my daily driver and it still works for me) using the above files decompressed to `/dev/null` and ran several times until it gives somewhat consistent approximate results. I didn't bothered to time the software during the compression phase because it's irrelevant to our use case (and I haven't thought of that when I tested), but all of them were quite fast except zpaq.
|
||||||
|
|
||||||
|
|Decompression|Time (s)|
|
||||||
|
|:------------|-------:|
|
||||||
|
|lz4|0.008|
|
||||||
|
|zstd|0.015|
|
||||||
|
|lzo|0.016|
|
||||||
|
|rar|0.035|
|
||||||
|
|gzip/zip|0.040|
|
||||||
|
|lzma/xz/7z|0.080|
|
||||||
|
|bzip|20.210|
|
||||||
|
|zpaq|16.203|
|
||||||
|
|
||||||
|
So you have a list that is rather backwards from the other list, with the notable exception of zpaq. Of course, it's going to be at least a thousand times slower on a Game Boy (could try to run these tests on a 486 or something to get better numbers), and it's kinda hard to quantify compessed bytes versus decompression time, but it's quite enough to draw conclusions about what kind of compression we're dealing with. The more compressed it is, the slower it will be, which is rather in contradiction with our "efficient compressor, fast decompressor" theory. One solution would be decompressing in chunks only when needed, and the Game Boy screen is rather small, so it could work. The search engine have the ability to search words fast and the games included deals with words too, so maybe there is something to do with whole words as well, such as mapping words to IDs or a similar technique.
|
||||||
|
|
||||||
|
Now time to actually figure out what the decompression is in that bible ROM. Sadly, I'm not well-versed in Z80 debugging to figure it out, but I can already imagine it's a very efficient algorithm even by today's standards and if you figure it out it could probably compete with gzip and zstd or something.
|
||||||
|
|
||||||
|
{{< twitter 1215496156526075910 >}}
|
||||||
|
I have ideas of grandeur here, as usual
|
||||||
|
|
||||||
|
So there you go, open-ended thoughts about obscure ways to read the Bible. If you have any information about it or you feel like doing the gruesome work of debugging the ROM, feel free to comment below or share it with me on [Twitter](https://twitter.com/juju2143), and I will make a follow-up eventually, a part 2 if you will, likewise if you have any suggestions such as adding a compression algorithm I can review for the tables above.
|
||||||
|
|
||||||
|
It's a pretty interesting project since, well, I'm not that religious and I'm definitely not the kind of idiot who quote the Bible out of context (please don't do that) but I still like to research about it, and I still consider myself as a nice Christian who believe in science. I always said that it's about what you personally believe and not what others believe, always read everything with a rational mind and uh, yeah I could rant a long time about that and it's not that much the point here, maybe for another time, but yeah. If you followed up until here and you want to look out for more about this, well for that quite interesting ROM that is, I wish you good luck, and I'll see you for another blog post :)
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
title: Emoji region flags
|
||||||
|
slug: emoji-region-flags
|
||||||
|
publishDate: 2020-01-21T20:36:56.000Z
|
||||||
|
lastmod: 2020-01-21T20:40:28.000Z
|
||||||
|
tags: [Experiments]
|
||||||
|
description: All of the emoji flags in one convenient font?
|
||||||
|
images:
|
||||||
|
- /images/2020/01/CA-QC-2.png
|
||||||
|
---
|
||||||
|
|
||||||
|
For this project, I've been inspired by the [#emojibzh](https://www.emoji.bzh) movement which attempts to include the flag of the Brittany region of France in the emoji repertoire. So, I've been looking at it and here's what I found.
|
||||||
|
<!--more-->
|
||||||
|
So far, Unicode does allow for regional flags: while for instance the United Kingdom would be represented as a combination of Regional Indicator Symbol Letter G (U+1F1EC) plus Regional Indicator Symbol Letter B (U+1F1E7) (which is its ISO 3166-1 alpha-2 code made out of Regional Indicator Symbol Letters), Scotland would be a Black Flag (U+1F3F4), its ISO 3166-2 code made out of Tag Latin Small Letters (?U+E0067, U+E0062, U+E0073, U+E0063, U+E0074, spelling out "GBSCT") and finally a Cancel Tag (U+E007F). That's fairly complicated, but it works. This way, every region, state or province of every country that has a flag would theorically be represented.
|
||||||
|
|
||||||
|
So if I want the flag of Québec, Canada, where I live, theorically the code would be U+1F3F4 (the black flag), U+E0063, U+E0061, U+E0071, U+E0063 (CAQC), U+E007F (the cancel tag), right? It is valid, yet it won't work. Yet, at the time I write those lines. That's because this sequence is not part of RGI (Recommended For General Interchange), which means vendors don't have to support it (and in practice unless the entire Internet is asking about it it's not supported at all). So far, only 3 subdivisions are part of RGI, namely England, Scotland, and Wales, all added in 2017. (Interestingly, Northern Ireland could also be part of that club, but their flag never was official.)
|
||||||
|
|
||||||
|
So what gives? There's some proposals for RGI, namely [L2/17-382](https://www.unicode.org/L2/L2017/17382-rgi-flag-omnibus.pdf) and others that aren't public yet but are [known to be forwarded to the UTC](https://www.unicode.org/emoji/emoji-requests.html), but looks like they're in limbo so far. I guess vendors (such as Google, Facebook, Twitter and other companies who made emoji fonts for their messaging apps) don't want to litter their fonts and emoji pickers with too much flags.
|
||||||
|
|
||||||
|
I believe we should at least have one emoji font with all (or most) of them, so I've been looking at it and I found out the Noto font is [open source](https://github.com/googlefonts/noto-emoji) and comes with Python scripts to make it very easy to add more emojis to it. And guess what, the repository includes all flags for the provinces of Canada, the US states, Mexico states, and Northern Ireland, but they're disabled by default! So I did the thing and I enabled them (very easy edit in the Makefile), added Catalonia and Bretagne for good measure and generated a new font with them. The scripts makes a beautiful stylization out of the flags they pulled from Wikipedia.
|
||||||
|
|
||||||
|
![](/images/2020/01/CA-QC.png)
|
||||||
|
|
||||||
|
![](/images/2020/01/FR-BRE-1.png)
|
||||||
|
|
||||||
|
![](/images/2020/01/ES-CT.png)
|
||||||
|
|
||||||
|
![](/images/2020/01/GB-NIR.png)
|
||||||
|
|
||||||
|
There you go, #emojibzh, here's your emoji in Google style. Clockwise from top left, Québec (CA-QC), Bretagne (FR-BRE), Northern Ireland (GB-NIR), Catalonia (ES-CT)
|
||||||
|
You can find the modified GitHub repository with new flags [right here](https://github.com/juju2143/noto-emoji) where you can comment on it and you can download the latest build of the font [here](https://github.com/juju2143/noto-emoji/raw/master/fonts/NotoColorEmoji.ttf) to install on your computer and get all of the flags if you need them. You can test them on Emojipedia on pages like [here](https://emojipedia.org/flag-for-bretagne-frbre/) and [here](https://emojipedia.org/flag-for-quebec-caqc/) (I still haven't figured out how to make a test page but I guess that will come later), but unfortunately, it's not going to work on most apps like Twitter, Facebook, Discord and the like, since tons of emojis are added to the Unicode standard every year, they can't guarantee the same emojis are supported on every computer and so they prefer coming up with their own font so they have a consistent look across their network. You still can view them on web pages, I guess that's a good start, but that's why it's still important to support RGI proposals and to keep tweeting about them :)
|
||||||
|
|
||||||
|
On that, have fun with them! ??????
|
|
@ -0,0 +1,39 @@
|
||||||
|
---
|
||||||
|
title: "My Arch Linux packages: how to create your own repo"
|
||||||
|
slug: arch-linux-packages
|
||||||
|
publishDate: 2020-02-22T07:41:21.000Z
|
||||||
|
lastmod: 2020-02-22T21:49:44.000Z
|
||||||
|
tags: [Tech]
|
||||||
|
---
|
||||||
|
|
||||||
|
As I use Arch Linux as my daily driver on my main machine now and I use a lot the AUR nowadays (most notably I maintain the packages for The 8-Bit Guy's Commander X16), figured I might create my own repository, right?
|
||||||
|
|
||||||
|
So there you go, after figuring it out on the Arch Wiki, here's a collection of software I maintain on the AUR, some of my own things I bothered to make a PKGBUILD for, or just software not found in other binary repos I know the users of my communities will like. So, as I write this, mostly Commander X16 stuff and TI-83 stuff.
|
||||||
|
|
||||||
|
[juju]
|
||||||
|
SigLevel = Never
|
||||||
|
Server = https://repo.juju2143.ca/archlinux/$repo/os/$arch
|
||||||
|
|
||||||
|
Add this to your pacman.conf
|
||||||
|
Then, you can see every package I added with `pacman -Sl juju`.
|
||||||
|
|
||||||
|
But why? Here's the gory details. A friend of mine told me about this service called [Netlify](https://www.netlify.com/), which is pretty much for those who made their website with a site generator, it automatically builds the website each time you push it to Git. From what I understand, anyway. Kinda like GitHub, I guess. The free plan comes with custom domains, HTTPS, 300 build minutes a month, 100 GB of bandwidth and... no storage limit? Well, that'd probably make for a good use case for this project.
|
||||||
|
|
||||||
|
So I follow [the instructions on the wiki](https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks#Custom_local_repository), I throw in some index.html generated from stuff I stole from the x16-emulator package, I do a manual deploy and there you go!
|
||||||
|
|
||||||
|
repo-add archlinux/juju/os/x86_64/juju.db.tar.gz archlinux/juju/os/x86_64/some-package.pkg.tar.xz
|
||||||
|
pandoc --from gfm --to html -c github-pandoc.css --standalone --metadata pagetitle="repo.juju2143.ca" README.md --output index.html
|
||||||
|
tree archlinux -P "*.pkg.tar.xz" -v -H "https://repo.juju2143.ca/archlinux" > archlinux/index.html
|
||||||
|
netlify deploy --prod --dir=.
|
||||||
|
|
||||||
|
To do everytime I update something
|
||||||
|
Symlinks don't work for some reason, so you'd need to add a file called `_redirects`:
|
||||||
|
|
||||||
|
/archlinux/:repo/os/:arch/:repo.db /archlinux/:repo/os/:arch/:repo.db.tar.gz
|
||||||
|
/archlinux/:repo/os/:arch/:repo.files /archlinux/:repo/os/:arch/:repo.files.tar.gz
|
||||||
|
/* /404.html 404
|
||||||
|
|
||||||
|
Mind the very long lines
|
||||||
|
So there you go. It's very much in line with the principle that drives Arch Linux, the famous "keep it simple, stupid" (KISS), so that was pretty easy. So if you want a package I should add and/or build, feel free to suggest away :)
|
||||||
|
|
||||||
|
[Check out the repo here!](https://repo.juju2143.ca)
|
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
title: Pandemic Story
|
||||||
|
slug: pandemic-story
|
||||||
|
publishDate: 2020-05-06T03:30:29.000Z
|
||||||
|
lastmod: 2020-05-06T03:33:55.000Z
|
||||||
|
tags: [Rant, Tech]
|
||||||
|
---
|
||||||
|
|
||||||
|
Here's a bit of my life story. For starters, I've always had trouble finding a proper job, probably because I'm on the autism spectrum (of course, not something I'd like to explicitely tell everyone, for reasons), and/or I've had a very pelicular story on my resumé (in short, you know, the whole you need to have experience to have experience thing, the classic catch-22), I don't know for sure. I've always worked freelance on some small projects with friends, friends of friends or for myself, comfortably at home, and I wanted to work in a big company that could provide me with a stable job and work in an office, for a change. We're around mid-March. I finally got a proper company that bothered hiring me. That took a while, but I was happy. I was in the last step of their hiring process. But unfortunately... The pandemic happened.
|
||||||
|
|
||||||
|
You know, my field is definitely one that isn't particularly essential and you can easily arrange for working from home, but this company being an IT consulting firm they have a lot of clients, mostly the government and major banks and insurance companies who nevertheless decided or had to take a break during the pandemic, and as such they also had to take a break on hiring new employees. So yeah, that means I'll have to wait out this COVID-19 crisis that is going on since the last month or so no one knows when this will end and start accepting these little freelance contracts, or look somewhere else which might take just as long given my situation.
|
||||||
|
|
||||||
|
Little note on working freelance: it's pretty great if you want to be more independent, and to do what you want, but unless you get very popular it comes at the cost of job security. I'm still at this point where friends come to me to fix their problems, or to help work on their project, and I'm still afraid to ask for too much cause I know they probably wouldn't afford it otherwise, and once they really get started (if they ever do) they might afford to hire me at a more reasonable rate. You might accuse me of thinking too much of others rather than myself, but eh. I'm a philantropist. But of course, I need money to pay my bills, my hosting and domain names needed to host my little projects, but also food and stuff. And my daily driver computer I had since 2011 also broke down recently, a little iMac 27" I bought with my student loans thinking I could program software for both Windows and Mac but over time I got to hate how Apple is locking down their OS while Microsoft seems to embrace the open-source software they despiced with all their might 20 years ago. It toughed for a solid 8 years, despite all of the problems with the hard drive, the power supply and the graphics card. (For the record, I recently installed Arch Linux on it. Which greatly increases the life of a system and is very, very customizable.) I might have to buy a better one. Which is not a very good timing right now. Anyway. I'm 28 and I still live with my mom and my brother, you might hear on the news that more and more young adults are doing the same because the economy is collapsing, I feel like I'm a prime example of this. I have never really worked enough to have any sort of benefit from the government, or if I did, I don't know, I'm not really getting it. Sure, I'm getting a bit more freelance contracts these days, or promises of contracts, but eh. I'm getting tired of that waiting game.
|
||||||
|
|
||||||
|
For a few years I had this story I want to adapt as a video game or something. Something epic I've always wanted to see being done. I've written the first few chapters as a novel, but I've always wanted it to be fully illustrated, maybe as some sort of Japanese-style visual novel. Programming it would be easy, but the graphics part is where the problem is. I've never been super good at this (and I tried!) and I'd rather pay artists for this. Ideally I'd set up a little visual novel development studio, working as a director with artists, musicians, and people helping me wherever I need. But I'd need funding to pay those people, and I hoped to get a job to get that funding, so meanwhile I work on some smaller projects with a smaller goal, or write a bit of that story once in a while. But these projects never really worked out; most end in failure, if they don't they don't get as popular as I'd have hoped, and none so far is making me a profit.
|
||||||
|
|
||||||
|
But I still have hope. Let's do this.
|
||||||
|
kofiwidget2.init('Support Me on Ko-fi', '#29abe0', 'H2H69D43');kofiwidget2.draw();[Become a Patron!](https://www.patreon.com/bePatron?u=130661)
|
||||||
|
I guess you can use Ko-Fi or Patreon (unless you have a better solution, GoFundMe?) to send some money, funds will be used to buy a new computer and to kickstart the studio. I don't really know what to offer in return just yet, but I could probably draw you something. And definitely offer you some goodies and/or the game in the future once it's done. Your name in the credits. Stuff like that. I kinda hate asking for money, usually, but eh, I tried. And follow this blog, I'm going to keep you updated.
|
||||||
|
|
||||||
|
In any case, thanks for reading and for supporting me :)
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
title: I left social networks
|
||||||
|
slug: i-left-social-networks
|
||||||
|
publishDate: 2020-06-01T20:13:04.000Z
|
||||||
|
lastmod: 2020-06-01T20:13:04.000Z
|
||||||
|
tags: [Experiments]
|
||||||
|
description: Some sort of virtual quarantine? How long will it last, this time?
|
||||||
|
images:
|
||||||
|
- /images/2020/06/Screenshot_20200601-150643.png
|
||||||
|
---
|
||||||
|
|
||||||
|
I have a love-hate relationship with Facebook and Twitter. On one hand, it's a big forum with millions of people, all my friends are there, I meet new friends, they say some funny stuff, some cute stuff, I get all of my news there. It's super useful to share my work, and to reach people who might like it. I love just saying randomly what's on my mind for comedy, at the attention to whoever might hear it and find this funny. It's probably the greatest invention humanity have ever made. And at the same time, it's also probably the worst invention ever. You see greatness at its best, yes, but also stupidity at its worst.
|
||||||
|
|
||||||
|
It's also very addictive, there's a wealth of information out there and they made it very easy to scroll all day for entertainment. After all that's how the companies behind them make money, I guess. The more people pay for ads, the more people see them on their feeds, and the more people stay on those feeds, the more Facebook makes money. But at what cost? Unproductivity? I work freelance, working on my projects in the comfort of my home, hoping one of them gets somewhat popular enough I could live from it. The huge problem with that is that those social media are very distractive and as you're your own boss, there's nothing from keeping you off them other than self-control.
|
||||||
|
|
||||||
|
So, yesterday, Sunday morning, after a heated debate about #BlackLivesMatter with one friend on Facebook (I won't detail what I think about it here as it's definitely out of scope for this article, but know that I'm with you), I decided this was enough. People getting beaten up in protests by police officers, people getting angry about it and acting irrationally, selecting what they want to hear, confusing terminology leading to miscommunications, officials who seemingly don't have time to react correctly with how fast everything goes on the social networks, among other things, that was too sad and depressing to watch. Something I could watch helplessly for hours, other than contributing my opinions in a sea of other opinions. Cute anime girls won't make up for it this time. Even meme and satire pages gave up making funny memes about it without looking out of place or straight up offensive.
|
||||||
|
|
||||||
|
That was the last straw for me. I realized I needed more of that self-control. I closed both the Facebook and Twitter tabs I usually have on all the time. I removed their respective icons from the launcher on my phone. I'm only going to check them for notifications, in case someone wants to talk to me, and to post updates such as this post. Just when I need it. I did a similar experiment a few weeks ago with only Facebook, while I reduced the amount of time the tab was open in my browser, this generally failed. I still found myself scrolling Facebook for hours, not knowing what to do with my life, just like I did for the past 10 years I've been there. But an earlier experiment years ago with Tumblr was a success, though. Been a while I've been there. I'm going more drastic this time, hoping to use this time better. I'm going to try to stick to more than 2 virtual metres from Mark Zuckerberg and Jack Dorsey's websites, hoping this is going to stick this time. This is probably not going to happen overnight, but eh.
|
||||||
|
|
||||||
|
Day 1. It kinda felt like the classic five stages of grief, except I actually wanted it gone. Kinda felt bad for everyone I might have hurt (which in reality it's probably no one as this debate ended nicely), then missed the good things about it. That was weird. Kind of like a good friend I don't want to leave. I still wasn't quite productive, but eh. We have to start somewhere. And it was Sunday, so I just took a break from everything, watching some YouTube, playing some games and dealing with random stuff. YouTube thankfully doesn't have the same problems as their algorithm is more fine-tuned to what I actually like and less what the people I follow like, since it's videos it's more for entertainment and less for weird thoughts everyone can immediately reply to without going out of your way to get a recording setup. Anyway. Attempted to start a project, but eh. It was late by now.
|
||||||
|
|
||||||
|
It is now Day 2 of virtual confinement. I feel pretty good today. I wrote this 890-word blog post. I like writing. Which is the point of this blog. I'm still haunted by a white page syndrome on Zarmina, hopefully writing about something else would work. Also kinda why I picked [Horse Life 98](/horselife/) back up. I had some new ideas for it. Maybe I'd do some programming again, been a while I did that. And I'm a programmer. Or something else entirely. I have so much ideas, and I can't do that much at the same time.
|
||||||
|
|
||||||
|
Anyway. Wish me luck, and see ya next time on this blog.
|
|
@ -0,0 +1,48 @@
|
||||||
|
---
|
||||||
|
title: Why is my OC a girl
|
||||||
|
slug: why-is-my-oc-a-girl
|
||||||
|
publishDate: 2020-10-10T21:00:00.000Z
|
||||||
|
lastmod: 2020-10-10T21:00:00.000Z
|
||||||
|
tags: [Rant]
|
||||||
|
description: An essay about gender and ponies.
|
||||||
|
images:
|
||||||
|
- /images/2020/10/tumblr_nf5ohq1Tn01qexvxeo2_1280.png
|
||||||
|
---
|
||||||
|
|
||||||
|
An OC, short for "original character", is often used, especially in the brony and furry fandoms, as an avatar of oneself, and in those fandoms you're encouraged to create one for yourself. And so is what I did as a brony around 2012, as a fan of *My Little Pony: Friendship is Magic*, this show that somehow went hugely popular outside its intended target audience due to being overly cute and wholesome, while not trying too much so the kids' parents could get behind as well.
|
||||||
|
|
||||||
|
So I fired up General Zoi's Pony Creator and started making something. Some people try to make their pony look like themselves, make it as colorful as they want, and honestly that's their choice, but I prefered something that could actually fit into the show.
|
||||||
|
|
||||||
|
![](/images/2020/10/yukikagayaki.png)This is the OG Yuki. Don't mind the low-quality cutie mark.
|
||||||
|
|
||||||
|
And so this is the pony I came up with. A mare named Yuki Kagayaki (roughly translates to Snow Sparkle because I was a huge weeb), themed around [snow](/fr/yuki/). And that character followed me ever since. Playing as her in roleplays and games at every opportunity helped me shape her world and her personality.
|
||||||
|
|
||||||
|
Of course, there's a lot of female representation in the show, but while stallions exist people generally take the female build as it looks better. But for me, Yuki was a representation of the ideal girl I had at the time, or at least a pretty nice character to play with. Or so I thought.
|
||||||
|
|
||||||
|
![](/images/2020/10/tumblr_nf5ohq1Tn01qexvxeo2_1280.png)
|
||||||
|
|
||||||
|
![](/images/2020/10/hl16p4.png)
|
||||||
|
|
||||||
|
![](/images/2020/10/Happyyuki.png)
|
||||||
|
|
||||||
|
![](/images/2020/10/dcmrn1h-f45b3e9c-3090-4e07-a62e-55f993b2e7c7.png)
|
||||||
|
|
||||||
|
![](/images/2020/10/hl14p3.png)
|
||||||
|
|
||||||
|
![](/images/2020/10/yuki2.png)
|
||||||
|
|
||||||
|
The evolution of a Yuki.
|
||||||
|
|
||||||
|
A note on bronies: I've been part of the local brony group from 2012 when I founded my website on the local brony fandom in the province of Québec (BroniesQC, later renamed MLP Québec when the .quebec TLD came out) until when it died down as most people moved on to something else, and with that I met a ton of amazing friends. I've also met a lot of good friends in Europe through a regroupment of French-language pony websites, as well as around the world, so thanks to all of you for being there. It's been 10 years to this day this show was around, time goes fast when you have fun, I guess.
|
||||||
|
|
||||||
|
Around the same time as watching a cartoon marketed for young girls became more accepted and people realized there's no shame anymore admitting you were watching The Powerpuff Girls when it came on TV back in 1998, so is exploring your sexuality and coming to terms one's gender might not match what's expected of them. Of course, I don't think there's a strong relation to those two concepts, but I do think the show certainly helped some people. Anyway, we're now in an era where putting your preferred pronouns in your bio became important because you can easily get the wrong one, or even something so wildly different from the usual gender norms you probably would never have guessed.
|
||||||
|
|
||||||
|
Looking at this, while I respected that idea, personally I felt those ideas weren't applying to me as strongly as you might expect. I felt the need to find a way to say I wouldn't be mad if you get the wrong pronoun on me, so I wasn't specifying them, or saying I use all of them when asked. And then it dawned on me: maybe the concept of non-binary was applying to me? Maybe even genderfluidity? I figured, maybe it'd be nice to be a woman, but at the same time I didn't mind being a man either. And anyway, that doesn't really matter, as the society is going toward entirely new gender norms. People are free to be what they want, and this is good. And thus I came out as non-binary.
|
||||||
|
|
||||||
|
That was a while ago, but one morning a few months ago I woke up, and it dawned on me yet again: maybe this representation of an ideal girl is actually who I want to be, hiding behind this persona of a bearded manly man I was building for myself in the real life? Maybe this is gender dysphoria I am experiencing? Maybe I am Yuki? A lot of stuff checked out to me.
|
||||||
|
|
||||||
|
I had this NSFW Twitter account I had laying around to practice drawing nudes but I barely got around drawing at all, so I decided to go full trans on it, just to test the waters. Sharing dysphoria thoughts felt kinda good. I also ended up coming out on my main account, and the response was amazing. Probably I had a lot supportive friends, it definitely depends of who you hang out with.
|
||||||
|
|
||||||
|
In the end, that was a pretty good experience that let me to know myself a bit better, it does feels pretty good when one refers to me as she or her on the internet, but I'm still not sure if I want to transition further than this for now, which is why you'll still can see mentions of "non-binary" and "genderfluid" in my bio, and my Facebook account is still the same with my IRL dead name which is still not really dead. You still can call me your bearded princess, after all (thanks Zoey!) ;) And of course, the experiment is definitely not done, but I guess we'll see what's going on next.
|
||||||
|
|
||||||
|
In conclusion, there was actually a few people who came out to me questioning about their own gender identity after I did so on Twitter and this is why I'm writing this piece. Of course, this is personal experience and your mileage may definitely vary, but I hope this blog post will help you.
|
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
title: "Zarmina updates"
|
||||||
|
slug: zarmina-updates
|
||||||
|
publishDate: 2020-10-17T18:23:00-04:00
|
||||||
|
lastmod: 2020-11-26T14:36:22-05:00
|
||||||
|
tags:
|
||||||
|
- Zarmina
|
||||||
|
---
|
||||||
|
|
||||||
|
*This article was originally published on **[Patreon](https://www.patreon.com/juju2143)**, reposting it here for completeness.*
|
||||||
|
|
||||||
|
Almost forgot I had a Patreon and someone is giving me a dollar a month, lol (thanks Pieman7373 :))
|
||||||
|
|
||||||
|
Anyway, here's some updates... It's been years I'm talking about Zarmina and not much came up out of it. I had some work done this summer, the outline of the story is now finally complete, and I now started writing a bible, organizing all my notes together so someone else can look at it and have a good idea of the whole picture. The story might change a bit from what I already published (consider that a beta, if we can say), but I already can say it's going to be way better.
|
||||||
|
|
||||||
|
The huge problem I had before is that I had no direction yet so I could hit walls pretty easily, so I decided to take a break and write the entire outline before going further. And I think it worked quite well, I can't wait to show you all of it :) I also realized that now that I have a job that pays well I could get artists involved to help out, which pretty much was my plan in the first place. So I guess it's gonna go quite fast from now, can't wait to show all of this.
|
||||||
|
|
||||||
|
Of course, the Patreon is gonna stay on if you want to get involved financially, I plan paying the artists is probably gonna take a small chunk of my paycheck so Patreon would definitely be a small relief. I'm going to show things here before it's going to be released to the public, small excerpts of my notes, devlogs, announcements, anything interesting pertaining to the project, so if you want to see cool stuff before anyone else this is here :)
|
||||||
|
|
||||||
|
I'm also working on a small absurd webcomic called Horse Life 98, but since I usually finish comics not long before they get published it's probably not worth it to put them here... But oh well. I'm also going to take a break from it while I work on Zarmina, finding the force to edit a panel a day for the whole month of October was harder than I thought...
|
||||||
|
|
||||||
|
Anyway, have fun :)
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
title: "November updates"
|
||||||
|
slug: november-updates
|
||||||
|
publishDate: 2020-11-17T18:35:00-05:00
|
||||||
|
lastmod: 2020-11-28T10:23:00-05:00
|
||||||
|
tags:
|
||||||
|
- Zarmina
|
||||||
|
---
|
||||||
|
|
||||||
|
*This article was originally published on **[Patreon](https://www.patreon.com/juju2143)**, reposting it here for completeness.*
|
||||||
|
|
||||||
|
First of all, thanks to our newest Patron, Terrence Wong, very appreciated :)
|
||||||
|
|
||||||
|
So I'm working on and off on this show bible for Zarmina, gathering pages of notes and failed scripts I wrote for myself into one concise document meant to show other people who dare help... As I probably said in every post so far, the worst thing is motivation, I have a 9 to 5 job in the way and I have a family to care of, but eh, I'd say I'm half through the synopsis so far. Maybe 5 pages of summaries so far. Which is a good thing, cause I see the story unfolding before my eyes, and I'm getting new and better ideas... This is going to be very interesting.
|
||||||
|
|
||||||
|
So, the plan so far:
|
||||||
|
|
||||||
|
- Write that bible
|
||||||
|
- Show it it to some artists
|
||||||
|
- Hope they like it
|
||||||
|
- ????
|
||||||
|
- PROFIT
|
||||||
|
|
||||||
|
Of course, while I have money to properly pay that artist, I'd love if this project would be entirely funded through Patreon. That would probably mean getting this page to at least $200 a month (and I'm lowballing here, assuming a twice a month release). Unfortunately, I don't have much to show other than crappy, made in 10 minutes Horse Life 98 jokes done in some software whose technology is due to die next month. (Yeah. Kisekae is made with Flash Player, while it seems to be still maintained I have no idea how the creator of that thing will deal with that. Which is one of the reasons why HL98 is on hiatus, but not the only one.) I'd love to show you my progress so far, but at the same time I don't really want to get you massively spoiled... But oh well, only time will tell. I'm also thinking of tinkering with Twitch and play some games, but I dunno, I still don't have the setup for that just yet. But I'm working on it!
|
||||||
|
|
||||||
|
Anyway. What would you like to see on this page? A Q&A? More old stuff from my archives? More rants like this one? Comment, subscribe, throw your money at me. Thanks for believing in me and have a good day!
|
|
@ -0,0 +1,64 @@
|
||||||
|
---
|
||||||
|
title: "Toasters Rocks 4.0"
|
||||||
|
slug: toasters-rocks-4
|
||||||
|
publishDate: 2020-11-28T11:16:57-05:00
|
||||||
|
date: 2020-11-28T11:16:57-05:00
|
||||||
|
lastmod: 2020-11-28T21:15:50-05:00
|
||||||
|
tags:
|
||||||
|
- Meta
|
||||||
|
description: Brand new blog, again.
|
||||||
|
draft: true
|
||||||
|
images:
|
||||||
|
- /images/2020/11/bg.png
|
||||||
|
---
|
||||||
|
|
||||||
|
Well, it seems to be a tradition around this time of the year, every 368 days or so. A brand new blog. But this time, the story is quite interesting.
|
||||||
|
|
||||||
|
### Genesis
|
||||||
|
|
||||||
|
The first iteration of this blog was basically my Tumblr blog. By November 2018, I became largely disinterested by Tumblr due to various reasons, and I found this blog engine called [WriteFreely](https://writefreely.org), written in Go, could do federation so the blog posts would show up in people's Mastodon feeds, effectively replicating some of Tumblr's social features. It looked pretty cool at first, but it was really beta software at best, didn't really work fantastically, and I had to run the binary in the background. But eh, I had a pretty nice minimalistic design.
|
||||||
|
|
||||||
|
Later in November 2019, I was messing with some Plesk-based web hosting account I got for free with a cheap VPS (which hosted the blog, and later died), I discovered it could do Node.js hosting, so I decided to install [Ghost](https://ghost.org), just to try out if it could work, and if it could be a nice solution if I ever run out of money for the VPS. Of course, being Node.js, it's a bit finicky and it expects you to run it on an actual VPS and not on some Plesk-based that barely could run `npm install`, but eh, it worked. Kind of. The server stopped when it's idle until there's a new request, so if it's been a while no one visited the site you'd be greeted with a "The blog is starting up" message, people are idiot enough to not get you'd have to come back later and then message me the blog is broken, in which I'll just tell them, just try again... Anyway, it worked for me, since it was free. Until they upgrade their version of Node.js or something, maybe.
|
||||||
|
|
||||||
|
### And this is where it breaks for good
|
||||||
|
|
||||||
|
Around November 2020, said hoster moved their servers closer to Paris, France where most of their clients are, apparently. (I'm not even anywhere near Paris, so eh, probably not going to be significantly faster for me.) Downtime expected, change your IPs, the usual for a small host. From what I see, the migration went quite well, and I hope they had a nice roadtrip since they had to physically move servers from about 4 hours drive away from Paris. But what they didn't say, unbeknownst to me, is that they axed the Node.js option in their Plesk... I complained to their Discord server and they said something along the line of it was only getting used by people uploading huge scripts and abusing the available resources. Well, bummer. At least the files and database are still there.
|
||||||
|
|
||||||
|
### Time for another engine?
|
||||||
|
|
||||||
|
Why, of course. My goal still was about building something better than WordPress. Something self-hosted, simple to maintain, very customizable, and faster than the humongous PHP script WordPress is. Which is not that hard, really. WriteFreely, while it embraces minimalism, was too minimalistic for my needs, Ghost, while it's 17x faster than WordPress and way closer to my needs, still wasn't cutting it, and Tumblr obviously shot themselves in the foot and is a prime example why you don't want to go self-hosted.
|
||||||
|
|
||||||
|
So, why not a static site generator? Back then I was also messing with Pandoc, which basically converts Markdown files to HTML and I thought I could use that. I quickly realized that would basically be reinventing the wheel, so I asked around. A friend of mine recommended [Hugo](https://gohugo.io), which is perfect for my needs.
|
||||||
|
|
||||||
|
Now the plan is:
|
||||||
|
|
||||||
|
1. Build a new theme for Hugo (because I can)
|
||||||
|
2. Export the posts from my Ghost install (which is ironically now only a ghost of itself)
|
||||||
|
3. Import them into Hugo
|
||||||
|
4. ????
|
||||||
|
5. PROFIT
|
||||||
|
|
||||||
|
### Build the theme
|
||||||
|
|
||||||
|
Ah, I didn't really do that since my Tumblr days. I did changed the font a bit on the WriteFreely default theme, and I started a theme for Ghost a while ago based on the Windows 95 UI, but it never went anywhere. But this time, didn't even looked at the default themes and starting porting that one I did for [my bio page](http://juju2143.ca). And, yeah, I really like Hugo. In all, it took me about a week of free time or so. Looks pretty cool, isn't it?
|
||||||
|
|
||||||
|
### Export the data
|
||||||
|
|
||||||
|
Now that's the hardest part. I kinda wish here they'd give at least a headstart before they took it down so I could export the data, but eh. If you know Node.js you'd probably know if you leave some code unmaintained for more than 6 months something will surely break in a later major version of Node.js. And sure enough, something wasn't compatible with Node 15. So I dusted off my old copy of Node 12, and now I had to figure out how the config file worked because I somehow configured it with environment variables like an idiot and now they're gone. I also attempted to import the database dump into SQLite, but it's too different from MySQL and I ended up installing a MariaDB server.
|
||||||
|
|
||||||
|
Now that everything is working somewhat, I could access the old blog from localhost and hit the export button.
|
||||||
|
|
||||||
|
### Import the data
|
||||||
|
|
||||||
|
Now you'll want to convert your backup file to a bunch of Markdown files. `ghost-to-md` is a tool that does exactly that:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install -g ghost-to-md
|
||||||
|
ghost-to-md yourwebsitebackup.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you'll want to dump the resulting Markdown files in the content folder, the images from the old Ghost install to the static folder, fix front matter variables to the correct name, fix image URLs (both of which can be done with search and replace), and there you go, a nice website.
|
||||||
|
|
||||||
|
### Aftermath
|
||||||
|
|
||||||
|
Now I need to fix the posts one by one, since the converter didn't do a very good job at converting stuff, in particular header images, embeds and tables, plus that script wasn't written specifically for Hugo, and there's a few bugs to squash here and there, but eh, since I don't have a ton of posts it's kinda doable. It's still gonna be wonky a bit at first but I hope you like it.
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
title: "Welcome."
|
||||||
|
---
|
||||||
|
Oh. I didn't see you there. My name is J. P. Savard - but you can call me Yuki - and welcome to my abode. This is a repository of silly things, poetry, rants, ideas and experiments I made on my free time, I hope you will like them, and that the information will be useful.
|
||||||
|
|
||||||
|
Here be dragons below, have fun.
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
title: "Zarmina 3.0: réécriture (encore)."
|
||||||
|
slug: zarmina-3-0-reecriture
|
||||||
|
translationKey: zarmina-3-0-rewrite-again
|
||||||
|
publishDate: 2019-10-28T22:34:00.000Z
|
||||||
|
lastmod: 2019-11-26T02:02:49.000Z
|
||||||
|
tags: [Zarmina]
|
||||||
|
---
|
||||||
|
|
||||||
|
*Cet article a originellement été publié sur[Patreon](https://www.patreon.com/juju2143).*
|
||||||
|
|
||||||
|
Et c'est à ce point que j'ai perdu ma motivation. Encore une fois. Je n'ai rien écrit depuis l'hiver passé, parce que, vous voyez, je me suis rendu compte que ça n'allait nulle part sous sa forme actuelle. Syndrome de la page blanche. Petite panique. C'est pas la vision du projet que j'avais. Je ne peux pas faire ça tout seul, pas de financement. Et j'ai mis ça en pause, je me suis concentré sur autre chose, d'autres projets, en attendant la suite des choses.
|
||||||
|
|
||||||
|
Fast forward à fin septembre. Inktober s'en venait. Je me trouvais pas pire en dessin. Je suis retourné sur l'idée et je me suis dit, pourquoi pas dessiner tous mes personnages?
|
||||||
|
|
||||||
|
Malhereusement, non, ça s'est pas fait. J'ai pas eu le temps, ni la motivation, pour plusieurs raisons hors de, mais aussi dans mon contrôle. On est le 28e jour et j'ai fait la moitié d'un dessin de Miyuki. Ouais, ça allait bien, Inktober, cette année. Mais, j'ai planifié mon idée. Comment j'allais m'y prendre cette fois-ci? Ça va prendre plus de planification que ça. Cette fois, j'y vais *all in* et faire le projet que j'ai toujours rêvé de faire. Aller chercher du financement pour pouvoir faire ça temps plein et monter un studio digne de ce nom. Engager des collaborateurs qui sont meilleurs que moi sur certaines choses. Créer des emplois. Peut-être même obtenir de l'aide du gouvernement, si c'est possible. Ils aiment ça, créer des emplois.
|
||||||
|
|
||||||
|
J'ai une vision, quelque peu ambitieuse, certes, mais c'est aujourd'hui que ça se passe. Zarmina version 3.0: Le Visual Novel. Un *visual novel* 100% québécois comme ça se fait pas vraiment au Québec, ni ailleurs, probablement. Avec de l'art, de la musique, de la programmation, disponible sur Steam et/ou toute autre plateforme de distribution. Un chef-d'oeuvre de fantasy et de science-fiction, rien de moins. Je vous tiens au courant. En attendant, je vous ai posté le reste de ce que j'ai d'écrit à date pour Zarmina 2.0: Le Roman, avant de *scrapper* ça. [Gratuitement.](https://www.patreon.com/posts/31097262) Parce que ça va être plus gros que juste un roman avec de la musique dessus.
|
||||||
|
|
||||||
|
Y'a une certaine personne qui m'avait mentionné l'autre fois dans un meetup dans le Vieux-Québec qu'elle avait hâte de voir la suite. Ceci est pour toi. Et pour tous ceux qui ont crû en moi. Tous ceux qui m'ont dit que ma catgirl était cute quand j'ai posté mes dessins sur leur serveur Discord. À la vôtre, gang. Votre encouragement est précieux.
|
||||||
|
|
||||||
|
J'ai besoin de vous. Donnez généreusement. Ou du moins, donnez tous vos encouragements. *It's gonna be a bumpy ride. *Et je vais essayer de vous mettre à jour quand je peux. Ça va être *****big*****. En espérant finalement voir la fin de ce projet. Qui est avec moi?
|
||||||
|
|
||||||
|
Sur ce, joyeuse St-Bernard-Legault, gang.
|
||||||
|
|
||||||
|
P.S.: Vous pouvez aussi me trouver sur [Picarto](http://picarto.tv/juju2143), [Facebook](http://fb.com/zarminaxyz), [Twitter](http://twitter.com/juju2143) ou [Discord](http://discord.gg/32sJN6g) si ça vous tente de jaser de ça avec moi ;)
|
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
title: Nouvelle bande-annonce
|
||||||
|
slug: nouvelle-bande-annonce
|
||||||
|
translationKey: trailer-is-out
|
||||||
|
publishDate: 2019-11-23T06:36:00.000Z
|
||||||
|
lastmod: 2019-11-26T02:10:10.000Z
|
||||||
|
tags: [Zarmina]
|
||||||
|
---
|
||||||
|
|
||||||
|
*Cet article a originellement été publié sur [Itch.io](https://juju2143.itch.io/zarmina).*
|
||||||
|
|
||||||
|
{{< youtube 988PCgDoUkw >}}
|
||||||
|
|
||||||
|
Nouvelle bande-annonce pour le projet, c'est pas le jeu complet mais j'espère que vous aimez :) Entièrement réalisé avec Ren'Py parce que de un, ça va servir comme intro au jeu, et de deux, y'avait aucun logiciel de montage vidéo qui marchait convenablement sur mon ordi... Vous pouvez le voir directement sur la page du jeu, sinon si ça bug je l'ai enregistré sur YouTube.
|
||||||
|
|
||||||
|
For you English speakers, don't worry, there will be an English version soon. Once I figure out how the translation module works. It's kinda weird.
|
||||||
|
|
||||||
|
Anyway. If you liked it, please throw me some money here or on Patreon, that'd be super appreciated. But in all, I hope you have fun!
|
|
@ -0,0 +1,36 @@
|
||||||
|
---
|
||||||
|
title: Machine de la mort
|
||||||
|
slug: machine-de-la-mort
|
||||||
|
publishDate: 2019-12-01T00:15:00.000Z
|
||||||
|
lastmod: 2019-12-01T00:15:17.000Z
|
||||||
|
tags: [Writing]
|
||||||
|
description: "Aujourd'hui, je suis un peu gore. TL: mort. Comme dit le titre. C'est pas kid-friendly."
|
||||||
|
images:
|
||||||
|
- /images/2019/12/photo-1515853191710-4db39aa5fe54.jpg
|
||||||
|
---
|
||||||
|
|
||||||
|
C'était Halloween le mois passé et j'ai demandé à mes amis Facebook de me donner un mot et je leur écris une fic [Machine of Death](https://en.wikipedia.org/wiki/Machine_of_Death) style. Y'a une personne qui a participé, alors, voilà. Je devrais en faire d'autres.
|
||||||
|
|
||||||
|
## Temps
|
||||||
|
|
||||||
|
> Ce n'est pas dans l'habitude de la Machine de la mort de donner une réponse aussi vague. Le temps. Ça peut être n'importe quoi. Mort de vieilesse? Par une horloge? Tu préfères ne pas trop y penser. Ton ami s'en vient te chercher avec sa nouvelle voiture.
|
||||||
|
|
||||||
|
> T'es en route avec lui. Tu remarques un fil qui pend sur le dash. "Coudonc, c'est quoi ça?" tu demandes à ton ami. "Ouais, j'ai pas fini le dash, touches-y pas..." Trop tard. Tu l'accroches accidentellement et tu t'électrocutes sur du 120V. C'était pas trop safe. Ton ami t'emmène à l'hôpital, mais trop tard, tu meurs dû à une condition préexistante que t'as pas eu le temps d'aller regarder. Le choc électrique n'a certainement pas aidé.
|
||||||
|
|
||||||
|
> Parce que, tu vois, c'était le fil pour une horloge. L'horloge dans une reproduction de la DeLorean dans Back to the Future. Tu es mort dans une machine à voyager dans le temps.
|
||||||
|
|
||||||
|
## Bonus: Fursuit
|
||||||
|
|
||||||
|
> Depuis que tu as ce fursuit, tu est devenu vraiment populaire, comme on dit dans le jargon, un popufur, parce que tséin, ça prend un fursuit pour être populaire, non? Tu as également réussi à capitaliser là-dessus avec une chaîne YouTube de vlogs et tu t'es bâti tout un empire médiatique autour de ce fursuit.
|
||||||
|
|
||||||
|
> Ce jour-là, tes suiveux te suggèrent d'essayer cette nouvelle "machine de la mort" qui vient de sortir dans ton quartier, et bien sûr, tu l'essaies parce que, pourquoi pas? Qu'est-ce qui pourrait mal tourner? C'est pas comme si ça pourrait affecter ta carrière, non?
|
||||||
|
|
||||||
|
> Tu insères le dollar dans la machine. On t'assure que la machine ne se trompe jamais. Une carte sort de la machine. Elle dit... Fursuit.
|
||||||
|
|
||||||
|
> Tu vas mourir dans ton fursuit, ou un truc du genre. Cool. Probablement comment un furry voudrait mourir, asphyxié par un fursuit. Ou pas... Et si tu mourrais demain à cause de ça? Tu préfères ne pas prendre de chances.
|
||||||
|
|
||||||
|
> Tu arrêtes ton vlog, tu vends ton fursuit, ta communauté le digère mal. Ça prend pas longtemps qu'on t'envoie des messages de haine, des menaces de mort. On trouve ton adresse. Rien ne va plus.
|
||||||
|
|
||||||
|
> Un illuminé en fursuit entre par effraction chez toi, tu appelles la police. Trop tard, il a sorti les grosses armes. Tu meurs assassiné chez toi par... un fursuit.
|
||||||
|
|
||||||
|
Si vous avez aimé ça, [abonnez-vous gratuitement](/signup/) pour avoir toutes les mises à jour par email, laissez un commentaire ci-dessous avec d'autres thèmes et je risque d'en faire d'autres si ça m'inspire :)
|
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
title: Mathieu Bock-Côté Simulator 2020
|
||||||
|
slug: mathieu-bot-cote
|
||||||
|
publishDate: 2019-12-24T04:05:50.000Z
|
||||||
|
lastmod: 2019-12-24T05:32:20.000Z
|
||||||
|
tags: [Experiments]
|
||||||
|
---
|
||||||
|
|
||||||
|
Mathieu Bock-Côté est l'un de ces chroniqueurs reconnu pour ses pavés qu'on retrouve presque quotidiennement dans le *Journal de Montréal*, donc je me suis dit qu'il serait un sujet parfait pour entraîner une intelligence artificielle sur ses textes. Donc si vous avez toujours rêvé de lui poser une question, ou lui suggérer un sujet, vous pouvez le faire ci-dessous avec un Bock-Côté virtuel! Ou sinon vous pouvez juste cliquer sur le bouton et il va quand même émettre un bout de chronique.
|
||||||
|
|
||||||
|
<p><textarea id="bot-query" style="width: 100%" placeholder="Posez une question ou mettez un sujet (optionnel)" maxlength="280"></textarea></p>
|
||||||
|
|
||||||
|
<p style="text-align: center"><button id="bot-generate">Générer une chronique</button></p>
|
||||||
|
|
||||||
|
<div id="bot-generated-text"><em>Le générateur n'est pas disponible pour l'instant. Il est probablement parti acheter des cigarettes au dépanneur.</em></div>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Disclaimer: Ce générateur ne reflète pas nécessairement l'opinion émise par le vrai Mathieu Bock-Côté ou le *Journal de Montréal.* Je compte sur vous pour ne pas en abuser (genre, copiez pas le texte généré en disant que c'est le vrai, ça se fait pas, ou n'envoyez-moi pas un DDoS, ça coûte cher de Google Cloud), et si vous êtes le susmentionné Bock-Côté ou le *Journal* et vous n'aimez pas ça, on peut toujours s'en parler :)
|
||||||
|
|
||||||
|
Et si vous vous demandez comment ça marche, il y a [ce billet ici](https://minimaxir.com/2019/09/howto-gpt2/) qui explique comment ça marche. J'ai suivi le tutorial avec un corpus de texte que j'ai pompé sur le site du Journal de Montréal, je l'ai entraîné durant 6 heures sur le petit modèle 124M, j'ai uploadé ça sur Google Cloud, écrit un petit script pour interagir avec le tout et voilà! Le modèle GPT-2 original utilisé ci-dessus a été conçu et entraîné en anglais, mais je trouve qu'il s'en sort pas trop mal en français. Je risque d'en faire un autre avec Richard Martineau, si vous avez aimé. Sur ce, [suivez mon blogue](/signin/) ou mon [Twitter](https://twitter.com/juju2143) pour d'autres expérimentations weird du genre, ou envoyez-moi un peu de cash sur [Patreon](https://patreon.com/juju2143) pour pouvoir me soutenir financièrement et financer ces expérimentations qui n'ont somme toute plus d'allure :)
|
||||||
|
|
||||||
|
Sur ce, joyeuses fêtes!
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$("#bot-generate").click(function(){
|
||||||
|
$("#bot-generated-text").html("<em>Je pense... (ça peut prendre une minute ou deux)</em>");
|
||||||
|
$.ajax({
|
||||||
|
url: "https://mathieubotcote-j4sh32wzea-ue.a.run.app",
|
||||||
|
data: {
|
||||||
|
length: 500,
|
||||||
|
prefix: "\n"+$("#bot-query").val()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.done(function(data){
|
||||||
|
$("#bot-generated-text").html("");
|
||||||
|
var text = data.text.split("\n");
|
||||||
|
console.log(text);
|
||||||
|
for(var i = 0; i < text.length; i++)
|
||||||
|
{
|
||||||
|
var $p = $("<p>").html(text[i]);
|
||||||
|
$("#bot-generated-text").append($p);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.fail(function(){
|
||||||
|
$("#bot-generated-text").html("<em>Le générateur n'est pas disponible pour l'instant. Il est probablement parti prendre un café.</em>");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
title: Yuki
|
||||||
|
slug: yuki
|
||||||
|
publishDate: 2020-01-15T04:43:03.000Z
|
||||||
|
lastmod: 2020-01-15T04:47:19.000Z
|
||||||
|
tags:
|
||||||
|
- Random
|
||||||
|
description: Lettre d'amour à la neige.
|
||||||
|
images:
|
||||||
|
- /images/2020/01/image.png
|
||||||
|
---
|
||||||
|
|
||||||
|
Yuki (雪). Ça veut dire neige en japonais.
|
||||||
|
|
||||||
|
C'est le soir, il neige à gros flocons, il vente pas trop, pas trop froid, c'est poudreux dans les petites rues du quartier Saint-Sauveur. Le déneigeur a pas encore eu le temps de passer, faut presque passer en raquette pour espérer avancer. C'est pas super sécuritaire sur les routes, mais il y a quand même quelque chose de magique. La neige qui réfléchit sous les lampadaires. Magnifique. Tu veux presque aller à la butte de neige la plus proche et juste glisser. Être plein de neige. Toute la journée. Ça sent la froide sensation de nostalgie.
|
||||||
|
|
||||||
|
T'as tous les problèmes du monde. Faut que tu grattes la neige sur ta voiture. Essayer de la conduire sans tuer quelqu'un ou toi-même. T'as toutes les raisons de détester la neige. Grosse marde blanche, comme l'on dit. Mais pour un moment, tu veux juste oublier tout ça et profiter du moment présent. Te lâcher lousse et juste glisser là ou le vent t'amène. Jouer avec, ne faire qu'un avec la neige. Loin de tout tracas et juste... être heureux. Comme dans le temps.
|
||||||
|
|
||||||
|
Yuki (幸). Ça veut dire bonheur en japonais.
|
||||||
|
|
||||||
|
*Source image: [La disparition de Haruhi Suzumiya](https://fr.wikipedia.org/wiki/La_Disparition_de_Haruhi_Suzumiya)*
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
title: "Bienvenue."
|
||||||
|
---
|
||||||
|
Oh. Je t'ai pas vu ici. Mon nom est J. P. Savard - mais tu peux m'appeler Yuki - et bienvenue dans ma demeure. Ceci est un répertoire de choses idiotes, de poésie, de diatribes, d'idées et d'expériences que j'ai faites pendant mon temps libre, j'espère que vous les aimerez et que les informations vous seront utiles.
|
||||||
|
|
||||||
|
Ci-bas sont les dragons, amusez-vous.
|
|
@ -0,0 +1 @@
|
||||||
|
toasters.rocks
|
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 319 KiB |
After Width: | Height: | Size: 372 KiB |
After Width: | Height: | Size: 215 KiB |
After Width: | Height: | Size: 215 KiB |
After Width: | Height: | Size: 335 KiB |
After Width: | Height: | Size: 388 KiB |
After Width: | Height: | Size: 442 KiB |
After Width: | Height: | Size: 558 KiB |
After Width: | Height: | Size: 455 KiB |
After Width: | Height: | Size: 466 KiB |
After Width: | Height: | Size: 312 KiB |
After Width: | Height: | Size: 314 KiB |
After Width: | Height: | Size: 312 KiB |
After Width: | Height: | Size: 360 KiB |
After Width: | Height: | Size: 361 KiB |
After Width: | Height: | Size: 360 KiB |
After Width: | Height: | Size: 330 KiB |
After Width: | Height: | Size: 384 KiB |
After Width: | Height: | Size: 395 KiB |
After Width: | Height: | Size: 456 KiB |
After Width: | Height: | Size: 267 KiB |
After Width: | Height: | Size: 267 KiB |
After Width: | Height: | Size: 311 KiB |
After Width: | Height: | Size: 311 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 8.3 KiB |
After Width: | Height: | Size: 9.4 KiB |
After Width: | Height: | Size: 9.4 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 328 KiB |
After Width: | Height: | Size: 380 KiB |
After Width: | Height: | Size: 333 KiB |
After Width: | Height: | Size: 378 KiB |
After Width: | Height: | Size: 269 KiB |
After Width: | Height: | Size: 657 KiB |
After Width: | Height: | Size: 657 KiB |