added screenshots, cleaned up

This commit is contained in:
Yann Esposito (Yogsototh) 2019-10-20 13:44:42 +02:00
parent ec4bf3564e
commit e46dad20b9
Signed by untrusted user who does not match committer: yogsototh
GPG key ID: 7B19A4C650D59646
10 changed files with 178 additions and 93 deletions

View file

@ -8,6 +8,10 @@
#+OPTIONS: H:5 auto-id:t
#+STARTUP: showeverything
#+ATTR_HTML: :style width:120px;display:block;margin-left:auto;margin-right:auto
[[../img/FlatAvatar.png]]
#+begin_notes
*Sorry for the late reply*
@ -24,7 +28,6 @@ So I'll answer, it can just take a lot of time.
[fn:dm] http://www.calnewport.com/books/digital-minimalism/
* Contact
:PROPERTIES:
:CUSTOM_ID: contact
@ -33,22 +36,22 @@ So I'll answer, it can just take a lot of time.
- *email*: @@html: <a href="&#109;&#97;&#105;&#x6C;&#116;&#111;&#x3A;&#x79;&#x61;&#x6E;&#x6E;&#64;&#x65;&#x73;&#112;&#x6F;&#x73;&#105;&#x74;&#x6F;&#x2E;&#x68;&#x6F;&#x73;&#x74;">&#x59;&#x61;&#x6E;&#x6E;&#x20;&#x45;&#x73;&#x70;&#x6F;&#115;&#x69;&#116;&#x6F; &lt;&#x79;&#x61;&#x6E;&#x6E;&#64;&#x65;&#x73;&#112;&#x6F;&#x73;&#105;&#x74;&#x6F;&#x2E;&#x68;&#x6F;&#x73;&#x74;&gt;</a>@@
Self hosted services:
- [[https://gitlab.esy.fun/yogsototh][programming]]
- [[https://espial.esy.fun/u:yogsototh][bookmarks]]
- [[https://espial.esy.fun/u:yogsototh/notes][notes / micro-blog]]
| programs | [[https://gitlab.esy.fun/yogsototh][gitlab]] |
| bookmarks | [[https://espial.esy.fun/u:yogsototh][espial public bookmarks]] |
| notes/microblog | [[https://espial.esy.fun/u:yogsototh/notes][espial public notes]] |
** Social Platforms
:PROPERTIES:
:CUSTOM_ID: social-platforms
:END:
- keybase: [[https://keybase.io/yogsototh][yogsototh]]
- bookmarks: [[https://pinboard.in/u:yogsototh][u:yogsototh]]
- lobste.rs: [[https://lobste.rs/u/yogsototh][/u/yogsototh]]
- github: [[https://github.com/yogsototh][yogsototh]]
- twitter: [[https://twitter.com/yogsototh][@yogsototh]]
- reddit: [[https://reddit.com/u/yogsototh][/u/yogsototh]]
- stack overflow: [[https://stackoverflow.com/users/40569/yogsototh][yogsototh]]
| keybase | [[https://keybase.io/yogsototh][yogsototh]] |
| bookmarks | [[https://pinboard.in/u:yogsototh][u:yogsototh]] |
| lobste.rs | [[https://lobste.rs/u/yogsototh][/u/yogsototh]] |
| github | [[https://github.com/yogsototh][yogsototh]] |
| twitter | [[https://twitter.com/yogsototh][@yogsototh]] |
| reddit | [[https://reddit.com/u/yogsototh][/u/yogsototh]] |
| stack overflow | [[https://stackoverflow.com/users/40569/yogsototh][yogsototh]] |
** old websites
:PROPERTIES:
@ -57,3 +60,16 @@ Self hosted services:
- https://yannesposito.com ✞ 2016
- http://yann.esposito.free.fr ✞ 2007
* Who am I
:PROPERTIES:
:CUSTOM_ID: who-am-i
:END:
I am mostly known for some of my older blog post.
In particular:
- [[http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/][Learn Vim Progressively]]
- [[http://yannesposito.com/Scratch/en/blog/Haskell-the-Hard-Way/][Learn Haskell Fast and Hard]]
- [[http://yannesposito.com/Scratch/en/blog/Yesod-tutorial-for-newbies/][Haskell Web Programming]]
- [[http://yannesposito.com/Scratch/en/blog/Category-Theory-Presentation/][Category Theory Presentation]]

View file

@ -286,8 +286,7 @@ navigation > a {
--green: #859900;
--transparent: ; rgba(255,255,255,0);
/* --main-background: #00151b; /* 0.5 darker than #002b36; */
--main-background: var(--base03); /* 0.5 darker than #002b36; */
--main-background: var(--base03);
--main-foreground: var(--base0);
--second-foreground: var(--base01);
--reveal-foreground: var(--base1);
@ -307,9 +306,9 @@ navigation > a {
/* org colors */
@media (prefers-color-scheme: light) {
:root {
--main-background: #fefaf0; /* 0.5 lighter than #fdf6e3 */
--main-foreground: var(--base00);
--second-foreground: var(--base1);
--main-background: var(--base3);
--main-foreground: var(--base01);
--second-foreground: var(--base00);
--reveal-foreground: var(--base01);
--reveal-background: var(--base2);
--soft-foreground: var(--base1);
@ -334,6 +333,26 @@ navigation > a {
font-style: italic;
}
/* Dark theme selected */
input#dark:checked ~ .main ,
input#dark:target ~ .main {
--main-background: var(--base03);
--main-foreground: var(--base0);
--second-foreground: var(--base01);
--reveal-foreground: var(--base1);
--reveal-background: var(--base02);
--soft-foreground: var(--base01);
--border-color: var(--base02);
--todo-txt: #000;
--color-h1: var(--reveal-foreground);
--color-h2: var(--reveal-foreground);
--color-h3: var(--reveal-foreground);
--color-h4: var(--reveal-foreground);
--color-h5: var(--reveal-foreground);
--color-h6: var(--reveal-foreground);
--color-link: var(--green);
}
/* Light theme selected */
input#light:checked ~ .main ,
input#light:target ~ .main {
@ -394,7 +413,7 @@ input#simple:target ~ .main {
--color-h4: #333;
--color-h5: #333;
--color-h6: #333;
--color-link: var(--magenta);
--color-link: var(--orange);
font-family: "Helvetica Neue";
font-size: 14px;
line-height: 1.5em;
@ -595,7 +614,7 @@ input#darksimple:target ~ .main {
--color-h4: #ccc;
--color-h5: #ccc;
--color-h6: #ccc;
--color-link: var(--yellow);
--color-link: var(--green);
font-family: "Helvetica Neue", sans-serif;
font-weight: 300;
font-size: 14px;
@ -644,7 +663,7 @@ input#matrix:target ~ .main {
--color-h4: #0b0;
--color-h5: #0b0;
--color-h6: #0b0;
--color-link: white;
--color-link: #080;
font-family: monospace;
}
input#matrix:checked ~ #labels ,
@ -695,6 +714,7 @@ pre::after,pre::before,hr:after,
.main pre::after,.main pre::before,.main hr:after {
color: var(--soft-foreground);
}
#labels label:hover,
a:hover, a:active, a:focus,
.main a:hover,.main a:active,.main a:focus {
color: white;
@ -718,6 +738,10 @@ tr:hover,
.main tr:hover {
background-color: var(--reveal-background);
}
.description {
color: var(--second-foreground);
}
h1, .main h1 {
color: var(--color-h1);
}

View file

@ -8,35 +8,39 @@
#+OPTIONS: H:5
#+STARTUP: showeverything
#+ATTR_HTML: :style width:120px;display:block;margin-left:auto;margin-right:auto
[[../img/FlatAvatar.png]]
Welcome to my personal website.
I generally talk about programming, maybe movies, or miscellaneous topics.
You can follow new articles via [[https://her.esy.fun/rss.xml][RSS]].
I also expose some of my presentations here.
- [[file:archive.org][articles]]
- [[file:slides.org][presentations]]
Here I will talk mostly about the life of a software developer.
So programming, functional programming in particular.
That website was created with the following constraints in mind by order of
priority:
1. *Respect Privacy*; no tracker of any sort (no ads, no google analytics, no
referrer for all external links, etc...)
2. *almost javascript free*; no js at all except for a single exception,
pages containing Math formula are displayed using mathjax. That means
that event the CSS theme switcher does not use javascript.
3. *disability friendly*; should be easy to read on a text browser so people
with disabilities could easily consume it
4. *nerdy*; should feel mostly like markdown text in a terminal and source code
2. *Almost javascript free*; no js at all except for a single exception,
pages containing Math formulae are displayed using mathjax. That means
that even the CSS theme switcher does not use javascript.
3. *Accessibility*; should be easy to read on a text browser so people with
disabilities could easily consume it.
4. *Nerdy*; should feel mostly like markdown text in a terminal and source code
should be syntax highlighted.
5. *user friendly*; support your preferred light/dark theme by default but you
5. *User friendly*; support your preferred light/dark theme by default but you
can change it if you want.
6. *rss*; you should be able to get informed when I add a new blog post.
7. *frugal*; try to minimize the resources needed to visit my website; no
6. *RSS*; you should be able to get informed when I add a new blog post.
7. *Frugal*; try to minimize the resources needed to visit my website; no
javascript, no web-font, not too much CSS magic, not much images or really
compressed one.
I talk about more details [[file:./posts/new-blog.org][here]].
#+begin_export html
<a href="https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Fher.esy.fun%2Frss.xml">[Valid RSS]</a>
#+end_export

View file

@ -11,12 +11,12 @@
tl;dr: Why and how to have modern and respectful chat system with IRC.
After reviewing and testing many different chat solutions the clear winner
is IRC. More precisely a group of different softwares togethers:
is IRC. More precisely via those softwares:
- IRC
- ZNC (with replay module and palaver module)
- weechat (with replay script)
- thelounge
- Palaver (for iOS mobile).
- ZNC (with playback and palaver module)
- weechat with replay script (terminal client)
- thelounge (web client)
- Palaver (iOS client).
#+end_notes
How to chat in 2019? Certainly with slack, or via a social media app in the
@ -77,38 +77,13 @@ Their major problems are:
+ get a "top messages you missed",
+ etc...
- *Prepare to EEE[fn:eee]*:
Most of those "modern" solution are a all-in-one solution, server +
clients with generic + specific features.
That way, some feature will be only possible in their client or that will
push concurrent app developers to follow the pace of new features.
** Digression
:PROPERTIES:
:CUSTOM_ID: digression
:END:
The /manipulative/ part is quite important to me.
Many users appeart to ask for those "features".
I think this is beacause most of those people should take the time to
reflect about the real plus value of those features vs their price.
As it is stated in Digital Minimalism[fn:dm], those feature are not the
real reason you use it.
I think this is an instance of the recent software development:
The idea that software MUST evolve and change.
Add as much new features as possible, instead of striving for simplicity,
stability and security.
We pass too much time asking about the how and forgetting about the why?
I would rather prefer a system that does not evolve much but study the real
full impact of adding a new feature to it.
And I think some software should be considered *finished* (like TeX).
Would that feature be a full total net positive for everyone?
Or is there a price to pay? The price is generally the size and complexity
of the project, that will make it bigger, slower, harder to manipulate,
install, interact-with.
Most of those "modern" solution are all-in-one solutions.
Server API + Clients with specific features.
Doing it that way make it possible to provide specific features only via
this "all in one" solution.
If you want to use another client, or if they deprecate some (like slack
did by removing their IRC bridge) then you will have no choice to use
their entire closed ecosystem.
[fn:eee] [[https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish][Embrace, extend, and extinguish]].
[fn:dm] http://www.calnewport.com/books/digital-minimalism/
@ -140,11 +115,9 @@ It was the easiest and best solution.
1. it works
2. it is Free Software
3. it is frugal
4. it is old
5. it is minimalist
6. it is feature complete for a small team chat.
2. it is frugal
3. it is old and stable
4. it is both minimalist and feature complete
[fn:FOMO] Fear Of Missing Out
[fn:tries] Here is a list of the chatting solutions I used for some time
@ -379,36 +352,88 @@ To use znc web interface behind an nginx reverse proxy:
</Listener>
#+end_src
Now you can put your ZNC behind a reverse proxy.
Now you can put your znc behind a reverse proxy.
In order not to miss any message in your clients you should keep a bouncer
running for you that will keep all IRC messages.
But in order to sync this history correctly among all your different IRC
clients you should install the playback module.
And if you wish to receive push notification you should also add a module
for your application (in my case palaver).
*** Playback module
:PROPERTIES:
:CUSTOM_ID: playback-module
:END:
In order not to miss any messages in all your clients you should add this
[[https://wiki.znc.in/Playback][ZNC playback module]].
#+begin_src
> cd ~/.znc/modules
> wget ...../playback.cpp
> wget https://raw.githubusercontent.com/jpnurmi/znc-playback/master/playback.cpp
> znc-buildmod playback.cpp
#+end_src
Should create a =playback.so=.
Should create a =playback.so= in =~/.znc/modules=.
*** Palaver push module
:PROPERTIES:
:CUSTOM_ID: palaver-push-module
:END:
You should find the ZNC push palaver module here:
https://github.com/cocodelabs/znc-palaver
#+begin_src
> git clone ... znc-palaver
> git clone https://github.com/cocodelabs/znc-palaver znc-palaver
> cd znc-palaver
> znc-buildmod palaver.cpp
> cp palaver.so ~/.znc/modules/
#+end_src
That's it.
The major modernizer of IRC are here in ZNC.
*** Configure your IRC servers
:PROPERTIES:
:CUSTOM_ID: configure-your-irc-servers
:END:
Now you should be able to reach =znc.my.domain=.
You should see something like
#+NAME: ZNC Login Page
[[./znc-login.png]]
Login with your admin user (set during the configuration or znc).
Then go to your Global settings
#+NAME: ZNC Global Settings
[[./znc-global-settings.png]]
And if you scroll down you should see a list of modules. Select the
playback and palaver modules and save your preferences.
#+NAME: ZNC Modules
[[./znc-modules.png]]
Then under the global settings, go to your User settings and scroll down to
see the Flags:
#+NAME: ZNC User Settings Flags
[[./znc-user-settings-flags.png]]
Take care to unselect the "Auto Clear Chan Buffer", "Auto Clear Query
Buffer" and to select "Multi Clients".
If you forget to do that, the playback plugin will not work as expected.
Finally add your IRC server to via the Network block (in your User Settings):
#+NAME: ZNC Add Network
[[./znc-add-network.png]]
From now on, you should always appear as a connected user to your IRC server.
This is your ZNC bouncer reading all the messages for you even when you are
not here.
** Install/configure clients
:PROPERTIES:
@ -418,16 +443,22 @@ The major modernizer of IRC are here in ZNC.
:PROPERTIES:
:CUSTOM_ID: weechat
:END:
Weechat the IRC client I use the most.
It is terminal based, use very few resources, it is fast, dense and very nice
to use.
1. add the [[https://weechat.org/scripts/source/zncplayback.py.html/][weechat znc playback script]]
2. add the default server capabilities
2. in weechat, set server capabilities
#+begin_src irc
/set irc.server_default.capabilities "account-notify,away-notify,cap-notify,multi-prefix,server-time,znc.in/server-time-iso,znc.in/self-message,znc.in/playback
#+end_src
3. add the server for your networks:
3. add your server
#+begin_src irc
/server add zncnetwork znc.my.domain/6697 -ssl -username=username/zncnetwork -password=password -autoconnect
/connect zncnetwork
#+end_src
4. save your confi with =/save=
More details here: https://wiki.znc.in/Weechat
*** thelounge
@ -439,18 +470,21 @@ Here are the infos for installing it.
https://thelounge.chat/docs/install-and-upgrade
You can use my reverse proxy scripts to put the lounge behind a reverse
proxy from your host. So you'll be able to reach =thelounge.my.domain=.
Of course, connect the lounge via ZNC not directly to your IRC server.
*** Palaver
:PROPERTIES:
:CUSTOM_ID: palaver
:END:
Using palaver should be straightfoward.
There is a very clear ZNC configuration choice.
Here is its website: https://palaverapp.com
I previously used the app mutter, but it appears to be deprecated and has a lot of
bugs since the iOS 13 update.
I previously used the app mutter, but it stopped to work after the iOS 13
update.
* Bonus
:PROPERTIES:
:CUSTOM_ID: bonus
@ -459,14 +493,21 @@ bugs since the iOS 13 update.
:PROPERTIES:
:CUSTOM_ID: no-brainer-upload-file
:END:
I made an image uploader inspired by the image uploader example of the
Yesod web framework.
It is only one single self-executable file + one css and jquery.
The only dependency is [[https://docs.haskellstack.org/en/stable/README/][stack]].
Quite often you want to share images/files in your chat.
Instead of using a public channel, I preferred to create a minimalist (223
lines of haskell) private server for this purpose only.
It is highly inspired from the image uploader example of the Yesod web
framework.
It is a single self-executable file + one css and jquery.
The only dependency is [[https://docs.haskellstack.org/en/stable/README/][stack]].
So to install it:
1. install [[https://docs.haskellstack.org/en/stable/README/][stack]]
2. create an nginx reverse proxy protected with basic-auth
3. share the creds to your team mates
4. start the script, and enjoy
2. =git clone https://gitlab.esy.fun/yogsototh/ymgur .=
3. follow the README instructions to launch it
4. create an nginx reverse proxy protected with basic-auth
5. share the creds to your group members
6. enjoy

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View file

@ -8,14 +8,14 @@
#+OPTIONS: H:5
#+STARTUP: showeverything
* Slides
* English
- [2018-10-25 Thu] [[file:slides/git-project-manager.org][Git Project Manager]] is a talk I made for the "Commission Open Source"
about how to gain back autonomy with git by providing most features
Github propose just with a few conventions. I even written a tool to help
manage issues, code review, git hosting, etc...
** French talks
* French
- [2018-03-15 Thu]
[[file:slides/Intro-to-FP-with-Haskell.org][Introduction à la programmation fonctionnelle avec Haskell]]