- rename sample.epub to sample.zip
- unzip sample.zip
- update OEBPS/toc.ncx
- in the folder which include "OEBPS", "META-INF" and "mimetype". not the folder which include folder sample
- zip -D -rX9 sample.epub * -x mimetype
Simple Life
Keep It Simple!
Sunday, December 07, 2025
epub bookmark update
Tuesday, November 18, 2025
Dovecot upgrade from 2.3 to 2.4
- see link for detail guideline, Archlinux provide dovecot23 as alternative
- add two new configuration, see link
- dovecot_config_version = 2.4.2
- dovecot_storage_version = 2.4.2
- delete empy dict
#quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
#expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
#}
- change "disable_plaintext_auth = yes" to "auth_allow_cleartext = no", see link
- rename userdb and passdb.
#driver = passwd
}
passdb pam {
#driver = pam
passdb_driver=pam
}
- update mail location, see example on link.
#mail_location = mbox:~/mail:INBOX=/var/mail/%{user}
mail_driver = mbox
mail_path = ~/mail
mail_inbox_path = /var/mail/%{user}
- update ssl, see linklink.
#ssl_key = </etc/letsencrypt/live/hongy19.net/privkey.pem
#ssl_dh = </etc/dovecot/dh.pem
ssl_server_cert_file = /etc/letsencrypt/live/hongy19.net/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/hongy19.net/privkey.pem
ssl_server_dh_file = /etc/dovecot/dh.pem
- rename "service_count = 1" to "service_restart_request_count = 1", see link.
/var/permission
from link, /var/mail should have correct permissions 2775 root:mail
The first digit "2" represents the setgid (Set Group ID) special permission:
- 2 = setgid bit enabled
- When set on a directory, new files created within inherit the directory's group ownership
- This ensures all mail files created in
/var/mailautomatically belong to themailgroup
- Normal group permissions: rwx (read, write, execute)
- With setgid: rws (read, write, setgid)
- With setgid but no execute: rwS (capital S)
Sunday, July 20, 2025
pdflatex + ctex support Chinese font
- Xelatex could support Chinese with ctex + Truetype/OpenType font. you could search web for detail.
- latex could support Chinese with ctex + tfm/pk font.
- pdflatex need type1 font, so tfm/pk and Truetype/OpenType font doesn't work. But there are three ways to support Chinese for pdflatex
- ctex + simsum.ttc
- \documentclass[fontset=windows]{ctexart}
- zhmetrics provide tfm file for simsun.
- zhmetrics provide mapping file to map tfm back to simsun.ttf (Truetype), but not for other Chinese ttf font, see /usr/share/texmf-dist/tex/generic/zhmetrics/zhwinfonts.tex
- it embedded Trutype font into pdf.
- ctex + CJKutf8 + gbsn.
- it embedded type1 font into pdf, you could use "pdffonts" to check.
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{gbsn}
你好,世界!
\end{CJK*}
\end{document}
- CJK + gbsn
\usepackage{CJK}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
这是一个CJKutf8的例子,使用的字体是gbsn。
\end{CJK}
\end{document}
Friday, September 20, 2024
wifi error for raspberry: brcmfmac: brcmf_set_channel: set chanspec 0x100e fail, reason -52
I couldn't connect to my raspberry pi for several days. Today I conducted a trouble shooting.
At beginning, I think system is down due to flashcard broken but later I found raspyberry still has ipv4/ipv6 address from home router. I tried to ssh but not successful. I ping the server first, ping is Ok. Then I could ssh server successfully.
it seems i am not the only guy who has this issue, see
Thursday, August 01, 2024
python typing check
- Docstring Linter
- pydocstyle
- Style Linter
- pylint
- pycodestyle
- Error Linter:
- pyflake
- pylint
- Complexity Analysis
- mccabe
- flake8
- flake8 = Pyflakes + pycodestyle + mccabe
- type checker:
- mypy
- run it on command line
- run it with language server, for example: pylsp
- run it with Jupyter
- nb-mypy: configure it with ipython configuration or run it with command in jupyter
- jupyter-lsp + pylsp
- Language server
- pyls and pylsp
- prefer to use pylsp instead of pyls, see link for detail.
- difference between different linter tools
Sunday, March 17, 2024
racket
racket is one of scheme dialect and I want to use racket to learn "the litte schemer". One of problem I meet is how to load file with scheme code (not racket code) into REPL and run relate function. In guile, it is very simple: guile -l my_function.scm. but in racket, it is little complex.
- with load (traditional scheme file, no #lang)
- with module (racket file, with #lang)
First, like import in python, you could use (require my_function.scm) in source code and "-t " in command line to import a module, but you need to list which function is export by (provide function) in my_function.scm, or (provide (all-defined-out)) to export all functions.
-t <file>, --require <file> Like -e '(require (file "<file>"))' [*]
Another trick point is you need "racket -i -t my_function.scm" instead of "racket -t my_function.scm -i". I don't know why but I guess it is related to "If -t/-l/-p/-u appears before the first -i/-e/-f/-r, -n is added".
Second, you could config initial-module in command line with "racket -I typed/racket" (#lang typed/racket in source code). The magic of of initial-module-path is you could define a new language with different syntax.
Third, you could always start "racket -i" and use ",enter my_function.scm" or "racket -i -e '(enter! "my_function.scm")'" to go to my_function namespace.
Friday, December 01, 2023
git remote repository with bare
if you want a remote repository and put local source into remote, you need to set up remote repository with "git init bare . ", not "git init ."