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
La librería que usamos para poder incrustar imágenes svg en cairo pd
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* o _cursiva_
**negrita**
[enlace](https://chafar.net/)
<code>, usar backticks: soy código
<pre>, 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
:red[o] deshace último undo
:e# volver al fichero anterior
ctl+T, fantásticoINPUT = ....
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 librsvg2-dev fonts-unifont
libtoolize aclocal autoconf automake --add-missing autoheader ./configure
La extensión vscode que uso dice que se ocupa de configurar intellisensse para que utilice compile_commands.json del dir build de meson.
Flujo de trabajo ( Comandos, meson <comando> --help )
meson.buildmeson setup <builddir>,meson compile [ -v ] -C <builddir>, con -v muestra órdenes de compilaciónmeson configure <opts> <builddir>, reconfigura mediante las
meson install -C <builddir>Un port a c99 con pequeñas diferencias.
En debian el ejecutable se llama muon-meson; a día de hoy, la versión es 0.4.0-1, publicada (la 4.0) hace 15 meses; para usar esa versión casi que: ln -s /bin/muon-meson /usr/local/bin/muon. La 0.5.0 de repositorio git tiene 9 meses. A juzgar por la página de manual, la 0.4.0 está bastante atrasada respecto al estado actual, pero quizá no tanto respecto a la 0.5.0. Para utilizar el repositorio git viene bien el paquete debian, pq con el comando de éste se construye el del repositorio git sin tener que hacer bootstraping (que tampoco parece nada del otro mundo).
La impresión que da es que muon es mas estricto, con menos inconsistencias. Tb es mas rápido, pero eso hay que tomarlo con distancia, pq al final el build quien lo hace es ninja; solo en los pasos de setup y luego install se notará diferencia importante: muon ni siquiera interviene en la compilación.
.muon
default_library, en builtin core options en muon es static, mientras en meson es shared
muon setup <builddir>compile: ninja -C <builddir>, ninja -C <builddir> -t clean y, a veces, ninja -C <builddir> -t cleandead
muon build [ -D name=value ][ ... ] <builddir> es como muon setup [ -D name=value ][ ... ] <builddir> + ninja -C <builddir>
muon -C install [-nU ] [ -d <destdir> ], -n: dry run, -U: uninstall. O bien: ninja -C build install, -n: dry runmuon meson <cmd> ...
muon setup como muon build se olvidan de las opciones que se hayan cambiado. Es importante no usar build para compilar, sino ninja -C <dir> o muon meson compile
directory sin args olvida todas las sources y así fuerza la posterior recargap <var> con set print elements 0 (incluíble en .gdbinit.Linux Applications Debugging Techniques
Hay que indicarle el ejecutable mediante: file <path>. Y, no sé por qué, en algunos sistemas gdb no encuentra librerías compartidas en sitios estándar como /usr/local/lib. El resultado es, por ejemplo, que back no te proporciona nombres de funciones. Entonces hay que hacer: sharedlibrary <path>
Normalmente, gdb avisa cuando se inicia y termina una hebra adicional a la principal. Según el manual, cuando una hebra encuentra un punto de ruptura por defecto se paran todas y cuando se establecen puntos de ruptura también se hace para todas ellas. El comando info threads proporciona lista de las existentes. Siempre hay una activa, que se puede cambiar con thread , en la que se aplican los comandos ejecutados.
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 ;)
save breakpoints <filename>
y para restaurarlos:
source <filename>
gdb <programa> (gdb) r ... < input.txt o (gdb) set args ... < input.txt (gdb) r
omnidb, en debian, prácticamente se limita a permitirte hacer queries y presentarte resultados.
tb en debian, me gusta mas que omnidb, pq directamente te muestra lista de tablas de la db; hasta le perdono que sea php pq no parece que haya nada mejor en debian que incluya pg
trick: el login se hace directamente a la base de datos, y HAY que marcar la casilla de conex permanente
\l
SELECT setval('{seqname}', nnnn); (para verlas, solo select * from {seqname};)/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;
SELECT FLOOR(vmin + RAND() * rango ) o SELECT ROUND(vmin + RAND() * rango, 2) para 2 decimales-- 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;
esto es mejor que inkscape para experimentar
M x y Mover puntero a x y sin dibujar
L x y Línea recta a pos absoluta x y
l x y Línea recta a pos relativa x y
H x Línea recta horizontal a x absoluta
h [-]x Línea recta horizontal a x relativa
V y Línea recta horizontal a y absoluta
v [-]y Línea recta vertical a y relativa
z|Z Cierra sub-trayecto actual trazando línea hasta el punto inicial
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-elements y tb puede servir [este ejemplo](http://zvon.org/xxl/XIncludeTutorial/Output/example12.html)
Tenemos dos casos relativos a dyn loading:
Referencias:
Los parámetros mas útiles de la posible plantilla de nombre de fichero son:
%p: pid %s: signal causante %t: time in seconds from de epoch %e: exex name (no path)
... p.e. en un fichero terminado en .conf y ubicado en /etc/sysctl.d/:
kernel.core_pattern=%e-%t-%s.core
/usr/lib/systemd/systemd-sysctl --prefix kernel.core_pattern
comprobación: sysctl kernel.core_pattern
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/
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