find ../ESP8266_RTOS_SDK/ -name '*.c' -exec grep -H whatever '{}' +
rm compile_commands.json; make clean; bear -- make -j
ldconfig
los char no utf8 válidos los convierte vim: :set fileencoding=utf-8 y salvar
man 3 fileno para file descriptor de un FILE *
:%s/.../.../g para sustituir en vi en todo el fixero
Según la spec:
We can think of a document as a sequence of blocks—structural elements like paragraphs, block quotations, lists, headings, rules, and code blocks. Some blocks (like block quotes and list items) contain other blocks; others (like headings and paragraphs) contain inline content—text, links, emphasized text, images, code spans, and so on.
Akí usamos cmark:
cmark -t xml {file}.md | tail -n +3 | xsltproc --stringparam csspath chuletas.css -o {file}.html cmark-html.xsl -
*cursiva*
**negrita**
[enlace](https://chafar.net/)
code, usar backticks: código
code_block, indentar con al menos 4 espacios o tab o enmarcar entre líneas con 3 backticks
blockquotes (citas), preceder cada línea con >
*, + o -
. o )
... se pueden incluir listas o párrafos dentro de listas, indentando los elementos con cuatro espacios
JAVADOC_AUTOBRIEF = YES
MULTILINE_CPP_IS_BRIEF = YES
sudo apt-get install g++ make pkgconf automake autoconf libtool sudo apt-get install libsqlite3-dev libpq-dev nettle-dev libxml2-dev libmariadb-dev sudo apt-get install libxslt1-dev libcairomm-1.0 libneon27-dev nlohmann-json3-dev
directory sin args olvida todas las sources y así fuerza la posterior recarga
print a=50 asigna valor a var a (ademas de pintarla ya con su nuevo valor)
set follow-fork-mode child|parent (default: parent)
... pero cuidado pq si es child abandona el parent: los breaks válidos seran los que haya en la ruta del child, si alguno, e igual a la inversa, al menos si no hay algún otro ajuste que afecte a esto, claro ;)
cd ~/src mkdir mariadb cd mariadb apt-get source libmariadb3 sudo apt-get install libmariadb3-dbgsym
... y en gdb:
directory ~/src/mariadb/mariadb-11.8.2/ symbol-file /usr/lib/x86_64-linux-gnu/libmariadb.so.3
(no vale solo ~/src/mariadb, no preguntes por qué)
... y con un poco de suerte, s en el lugar adecuado te adentra en el código de librería
Parece que en algún momento, lo conseguí incluso con paquetes que no tienen el -dbg correspondiente (sacado de http://wiki.debian.org/DebugPackage):
- apt-get source tal (descarga, crea el dir con el paquete y aplica parches debian)
- en debian/control (ejemplo para libpng):
Package: libpng12-dbg
Architecture: any
Section: debug
Priority: extra
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: PNG library - runtime
libpng is a library implementing an interface for reading and writing
PNG (Portable Network Graphics) format files.
.
This package contains the debugging symbols for libpng12
- en debian/rules (ejemplo para linpng):
añadir override_dh_strip override_dh_installdocs a .PHONY
definir esos dos targets:
override_dh_strip:
dh_strip --dbg-package=libpng12-dbg
(CUIDADO: ese override de dh_strip no ha funcionado con libpng, y he tenido que meterle
la opción en la llamada a dh_strip real, que por otra parte es como viene, p.e., libcairo-2-dbg)
override_dh_installdocs:
dh_installdocs --link-doc=libpng12-0
- construir con debuild -us -uc (deja los paquetes en el dir superior, donde estan los
que se descargaron con apt-get source)
- INSTALAR tanto el -dbg como el binario normal, solo con el -dbg no funciona
/etc/mysql/mariadb.cnf
/usr/share/doc/mariadb-server/README.Debian.gz) el usuario que gestiona el server es root, que no tiene pw y solo está autorizado a autenticarse via unix socket: has de ser root para tener todos los permisos. Tb está el usuario mysql, con los mismos permisos, que tiene correspondencia en sistema con /bin/false como shellGRANT ALL PRIVILEGES ON *.* TO 'pepito'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION; FLUSH PRIVELEGES;
-- Create the database CREATE DATABASE app_db;
-- Create the user 'app_user' with a secure password, allowing connections from any IP address CREATE USER 'app_user'@'%' IDENTIFIED BY 'your_secure_password';
-- Grant full privileges to the 'app_user' user on the 'app_db' database GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%';
-- Reload the privilege tables to apply changes FLUSH PRIVILEGES;
Se define el fragmento del doc fuente que se incluye en el doc destino mediante xpointer, cuya spec, como todas, resulta complicada de entender, pero con esto es suficiente:
<xi:include href="common.view.xml#view-header"/> ... y el elemento con xml:id = view-header en common.view.xml pasa a ocupar la ubicación del xi:include; tb se puede hacer <xi:include href="common.view.xml" xpointer="xpointer(/view/style)"/>.
El ns de xinclude: http://www.w3.org/2001/XInclude, pero cuidado pq hubo x ahí uno posterior que al final no cuajó y el que vale es éste.
Un ejemplillo aki: (ver su propia respuesta) https://stackoverflow.com/questions/16563106/how-to-use-xpointer-with-xinclude-to-reference-elementsy tb puede servir [este ejemplo](http://zvon.org/xxl/XIncludeTutorial/Output/example12.html)
No hace tanto que anoté cosas sobre esto a partir del contenido de un howto que encontré por ahí, pero ahora no lo encuentro, creo que fue a raíz de hacer fdS7 un módulo cargable, pero no lo encuentro ahí ni en los leeme ni el código de fdS7 (quizá era esto: https://dwheeler.com/program-library/Program-Library-HOWTO/index.html, el original, que tb está aki: https://tldp.org/HOWTO/Program-Library-HOWTO/index.html)
Bien, pues ahora he encontrado tb esto: https://www.akkadia.org/drepper/dsohowto.pdf y esto, que no aporta muxo mas de lo que ya sé, pero sí algunos detalles, como la razón de establecer tb una destructora dentro del módulo: https://tldp.org/HOWTO/pdf/C++-dlopen.pdf
njctl envía los procesos a bg y eso funciona pq a partir de cierto momento bash dejó de enviar señal SIGHUP a sus procesos hijos en background cuando él termina, por lo que éstos siguen su curso con init como parent y desligados del terminal al que estaban ligadas sus entrada y salida estándar como descendientes del bash que ejecuta el terminal; solo entonces el proceso queda desligado de ése, su líder de sesión y de su terminal. (man credentials y man setsid)
Para no depender de ese comportamiento de bash, se puede usar el comando setsid, que hace lo que habría que hacer en caso de implementar nosotros la desconexión en el propio programa mediante llamada a setsid(): un fork primero para evitar que falle setsid() por ser líder de un grupo para que sea el hijo (que ya no es lider) quien haga setsid() y se ejecute (podría incluso hacerse un segundo fork en ese hijo para evitar que sea lider de sesión, que es lo que ocurre cuando se llama a setsid() y ésta no falla.
repito: man credentials (primera parte, relativa a grupos y sesiones de procesos y controlling terminal), y man setsid, que es lo que hay que ejecutar.
Hay alguna cosilla mas que hacen en general los daemons, como cerrar 0, 1 y 2 (o quizá duplicando en 2 la salida de log), quizá cambiar el dir de trabajo ... ... de hexo, hay función daemon() en gnu c lib que sintetiza lo mas común y que explica en su man page tb p.e. https://biriukov.dev/docs/fd-pipe-session-terminal/3-process-groups-jobs-and-sessions/