added screenshots, cleaned up
This commit is contained in:
parent
ec4bf3564e
commit
e46dad20b9
|
@ -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="mailto:yann@esposito.host">Yann Esposito <yann@esposito.host></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]]
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
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
|
||||
|
|
BIN
src/posts/0006-modern-irc/znc-add-network.png
Normal file
BIN
src/posts/0006-modern-irc/znc-add-network.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
BIN
src/posts/0006-modern-irc/znc-global-settings.png
Normal file
BIN
src/posts/0006-modern-irc/znc-global-settings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
src/posts/0006-modern-irc/znc-login.png
Normal file
BIN
src/posts/0006-modern-irc/znc-login.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 411 KiB |
BIN
src/posts/0006-modern-irc/znc-modules.png
Normal file
BIN
src/posts/0006-modern-irc/znc-modules.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 50 KiB |
BIN
src/posts/0006-modern-irc/znc-user-settings-flags.png
Normal file
BIN
src/posts/0006-modern-irc/znc-user-settings-flags.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 54 KiB |
|
@ -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]]
|
||||
|
|
Loading…
Reference in a new issue