Annotation

Table of Contents

1. Annotation   project

1.1. Flujo de tomar notas de con pdf (org-noter, Android, …)

Lo que me gustaría es link a cada resaltado del documento con el texto que sea el contenido del propio texto, pero entonces los links se resaltan automáticamente y no tiene sentido bold (ya está)
Lo que tiene org-noter por defecto es en qué página está cada subrayado, y se puede ir juntando manualmente

1.1.1. Implementar un clustering de notas   project someday_20230330

Estrategia y diseño de archivar el repo ~/org
Rebasear el repo para crear commits más semánticos

  • Es un problema de clustering! Lo que me gustaría sería tener todas la notas que van juntas (en terminos de distancia entre resaltados) en el mismo grupo y hacer links a ese grupo sólamente, al principo
  • Parecido al problema se sessionization
    Sessionization is the act of turning event-based data into sessions, the ordered list of a user’s actions in completing a task
  • [ ] Coger todo el texto de un pdf
  • [ ] Coger el texto subrayado de un pdf
  • [ ] Comparar los dos y clasificar lo subrayado en clusters
    http://howto.philippkeller.com/2018/03/13/How-to-extract-text-from-pdf-in-python/ → cómo coger texto de pdf en python
1.1.1.1. Clustering de commits de git para org   idea

La idea es hacer un squash con sentido agrupando por intervalos de tiempo, quizás fijándose también en el nombre de los archivos que se han tocado y los números de línea
Clustering de commits
También en general ver en 2d un timeline de eventos y encontrar una manera de clusterizarlos. En este sentido, que serían archivos “próximos” unos a otros?
Lo puedo definir contando links de unos a otros, mirando cuándo se suelen editar cerca en el tiempo (aunque también puedo estar a 2 cosas a la vez)
https://pure.itu.dk/files/83304261/2018_icse_shurui_infox.pdf

1.1.1.2. pdf2txt Sacar el texto de un pdf

https://manpages.ubuntu.com/manpages/xenial/man1/pdf2txt.1.html Instalar → sudo apt install python3-pdfminer → Este saca todo

1.1.2. Anotaciones incrementales de pdfs   project someday_20230330

!Esto lo mismo es demasiado complicado y con ediff de emacs llega!
En esencia es un diff lo que pasa que tiene conocimiento sintáctico del árbol de org
Lo mismo hay algo útil por aquí: What if git parsed syntax? si consigo encontrar un parser de org mode que funcione con git
Mark exported notes to avoid exporting them again · Issue #86 · fuxialexander/org-pdftools
Un primer paso es marcar las notas como exportadas (o borrar las anotaciones cuando vuelves a empezar, pero es más lento)
Subrayo algo, tomo notas, y luego habría que mergear las dos cosas, por ID o algo así
De esa manera puedo exportar sólo las notas que no estén sincronizadas se sincronizan y así si comento cosas no las pierdo
La propiedad NOTER_PAGE se preserva (siempre y cuando tenga la misma ruta el archivo)
Lo que habría que hacer sería unir primero al nivel más alto los headlines por esta propiedad, y luego ir recursivamente fijándose en los hijos y añadiendo sólamente si no existe ya algo
Se puede hacer en elisp para que se integre mejor
Hago justo esto mismo para gestionar Lecture Notes, se puede reutilizar el código

1.1.2.1. Triple diff de anotaciones pdf

Para un export incremental:

  1. Guardar aparte el árbol original, sin editar.
    Quizás en un archivo .org distinto, porque sí que es verdad que si lo tienes en el mismo archivo se lía org-noter cuando pasas de página entre los dos árboles.
    No tiene por qué estar asociado al pdf con org-noter, lo puedes tener en la misma carpeta con otro nombre, para que te acuerdes cuando importas anotaciones
  2. Hacer el diff de un nuevo árbol con el árbol anterior. Las notas que ya se hayan importado no se vuelven a importar
  3. Mergear las anotaciones no importadas con el árbol principal, intentando anclarlo al nodo si existe, o si no a los padres de ese nodo, intentando respetar el orden de página
1.1.2.2. SOMEDAY Arreglar org-noter-pdftools para anotaciones incrementales

El código que hace esto en org-noter-pdftools es pdf-info-getannots, que hacer directamente un loop sobre toda la lista para todo el documento. Se le puede añadir un argumento adicional a la función, tengo que ver cómo sacar la página actual, o un rango de páginas o lo que sea, y añadirlo como argumento a la función
Hice un commit que funcionaba pero el problema ahora es crear una función que acepta rangos de páginas, o la página actual
pdf-info-normalize-page-range es la función que te pasa de número de página a porcentaje
pdf-view-current-pagelabel es la función que te da la página actual (pdf-view-current-page en realidad, la otra te devuelve cosas que pueden no ser números)
También puede estar interestante añadir un link a la página actual

 (dolist (item (pdf-info-getannots)) ...
  (pdf-view-current-page)
(defun lytex/import-notes-from-current (offset)
  (interactive "nEnter offset from current page: ")
(org-noter-pdftools-create-skeleton (cons (pdf-view-current-page) (+ offset (pdf-view-current-page)))))

Al final lo más cómodo:
(org-noter-pdftools-create-skeleton '(34 . 54))

1.1.2.3. SOMEDAY Exportar los headlines de determinado nivel (2, 3, 4, ..) a un pdf para añadirlo al ToC

Como org-noter-pdftools te importa el ToC puedes añadirle cosas y luego exportarlo

1.1.3. Ver cómo hacer mejor los atajos de teclado   project maybe_20230330

Si los pongo com SPC a, entonces sólo van a estar disponibles cuando esté leyendo un pdf, después de cargar pdf-tools

1.1.4. Implementar Progressive Summarization con org-noter

Ver cómo saca lo subrayado y si se puede coger y procesar lo subrayado 2 veces
(más complicado, a largo plazo)

Más fácil: primero subrayo todo lo que me interesa y luego lo voy procesando en org-mode (lo malo es que en android no vale)

1.1.5. https://github.com/malb/emacs.d/blob/master/malb.org#pdf-viewer

Sobre cómo sacar las anotaciones de los pdfs

1.1.6. Puede valer para resolver los conflictos cuando tengo errores de ese estilo, aunque de momento no he conseguido sacar las anotaciones

1.1.7. Meter una nota de org-noter a mano

Útil cuando tienes todas las notas copiadas y quieres meter una más
Copiar y pegar de otro: al annot-116-N es a la vez el id y el link
N va en orden en el que se crea la anotación, no en orden de la págin a

:NOTER_PAGE: [[pdf:~/org/roam/Atomic Habits.pdf::116++0.622013;;annot-116-1]]
:ID:       Atomic Habits.pdf-annot-116-1

1.1.8. Mantener un archivo sin tocar (original skeleton)

Si el original se lama My Book.org, lo llamo My Book - original skeleton.org

1.1.9. Script para mover ~/Documents a ~/org con links

read
find . -type f -iname "*.org" -not -path "./org/*.org" -not -iname "* - original skeleton.org" -not -path './Organización/framabag/1.org' -not -path './CV/Manfred.org' -exec zsh -c 'var="{}"; mv "$var" "/home/julian/org/roam/${var##*/}"; ln -sf  "/home/julian/org/roam/${var##*/}" "$var"' \;

# Listar todos los archivos que son links
find . -type l -iname "*.org" -not -path "./org/*.org" -not -iname "* - original skeleton.org" -not -path './Organización/framabag/1.org' -not -path './CV/Manfred.org' -exec bash -c 'ls -l "{}"' \;

# Idealmente esto debería sacar siempre que no se ha tocado nada
# Saca todos los links que ya existe como código
find . -type l -iname "*.org" -not -path "./org/*.org" -not -iname "* - original skeleton.org" -not -path './Organización/framabag/1.org' -not -path './CV/Manfred.org' -exec bash -c 'ls -l "{}"' \; | awk '{$1=$2=$3=$4=$5=$6=$7=$8=""; print $0}' | sed -E 's/\s*(.+) -> (.+)/\2 -> \1/' | sed -E -e 's/^/ln -sf "/' -e 's/ -> /" "/' -e 's/$/"/'

1.1.12. Cómo anotar PDF de una manera que sea independiente del número de página? Si va a estar cambiando mucho el pdf tiene sentido

Igual que en Anotar código fuente, podrías hacer una query a un pdf y anclar a ese componente, que sea estable

1.1.13. CANCELLED https://github.com/karlicoss/grasp → ESTO PROBAR no es lo que pensaba

1.1.14. DONE Quitar todos los Contents que no me interesan (demasiada indentación)

Al final hago una PR al código, mucho más interesante, si no tiro de la mía
https://github.com/fuxialexander/org-pdftools/pull/62
Empecé algo ya en my/clean-skeleton pero primero hay que zR el archivo → es
algo inestable Curiosamente en my/clean-xtra-newlines funciona perfectamente
después de capturar, sin zR ni nada Parece que si estoy al principio entonces sí
funciona Hace cosas extrañas a los ID y demás, no es muy estable

1.1.15. DONE Juntar dos headings org mode quitando las propiedades de uno de ellos

Una operación que voy a hacer mucho es J (Join, pero aplicado a notas de
org-pdftools)
mejor aplicado a Join de headings org-mode genéricos También
quiero la operación inversa, subir un headline manteniendo las propiedades del
de abajo

  • [X] Puede ser m, M para merge, como o, O? Mirar si conflicta con algo → Conflicta con (set) mark
  • [ ] Puede ser SPC a j, SPC a J, mejor

1.1.16. DONE El flujo de trabajo será ratón en la derecha, teclado en la izq

Entonces quiero configurarme los atajos para que sean del estilo SPC a (tecla de la mano izq)

1.2. Cosas que pueden ser links/recursos

Hacer una captura de org-roam por cada uno de estos

/snap/bin/spotify --uri=spotify:track:5sBYNQEuYn19C3cD9AfARi#1:43 (no funciona
en web link al segundo específico, habría que definir un spotify:// como el de
roam)

  • google maps/open street maps
  • links a emails de google maps / outlook
  • contactos de teléfono
  • fechas y horas : Fechas en los mensajes y demás -> Link a una nueva nota con esa fecha como scheduled
  • deep link a canciones en mp3 en archivos locales
    https://gitlab.com/jagrg/org-emms → en org mode, con timestamp
  • deep links a cosas de caustic

1.2.1. deep linking Wikipedia

1.2.1.1. Abrir los links en spotify android   project someday_20230330

https://community.spotify.com/t5/Social/How-to-use-Tasker-or-NFC-Task-Launcher-to-launch-Spotify-to-play/td-p/366224

  1. Create a new task.
  2. Add a Send Intent action. (System > Send Intent)
  3. In the Action box, paste the following: android.media.action.MEDIA_PLAY_FROM_SEARCH
  4. In the Data box, paste the Spotify URI for your playlist. (You can get this by right clicking the playlist in the desktop Spotify client and clicking on “Copy Spotify URI”
  5. Under Target, select Activity.

termux (both work)
am start -a android.intent.action.VIEW -d "spotify:track:5sBYNQEuYn19C3cD9AfARi#1:43"
termux-open "spotify:track:5sBYNQEuYn19C3cD9AfARi#1:43"

1.2.2. Lista de formatos para anotar

  • html → extraer tablas a org mode, subrayar texto, extraer imágenes / vídeos
  • pdf → extraer tablas, subrayar texto, extraer imágenes
  • imágenes → dibujar encima, edición básica
  • vídeos → anotaciones con timestamp (con captura de pantalla del vídeo para anotarlo como imagen)
  • terminal → exportar sesión a org mode
  • música → Partituras (anotable como img) ↔ MIDI/Multipista de Seq (Caustic) + Stems ↔ Master final (Sonido)

1.2.4. Cosas de terminal

https://github.com/tmux-plugins/tmux-copycat/blob/master/copycat.tmux Antes no estaba en tmux, desde la 3.1 ya sí pero se pueden seguir utilizando
paths, IPs, la parte de delante de los logs, … por expresión regular
link a una vista de un proyecto (archivos concretos abiertos, guardar una sesión, quickfix…)

1.3. Audio, imágenes, vídeo

1.3.2. Embedding webs on real time such as weather information

The real deal is to have it on mobile, but I already have apps that do it. It’d
be nice to have a shortcut to an app, though Allows you to define scheduled
times based on solar time, or define time such as “the first moment
when temperature goes below 15°C” Notion has it
https://www.notion.so/Embeds-6b7133323590447b9d8e963c136ebce5 Open links with eww, transclude them
chubin/wttr.in: The right way to check the weather

1.3.3. https://news.ycombinator.com/item?id=18108727

Cómo tomar notas multimedia en emacs
Cómo capturar mutimedia con emacs
https://lepisma.xyz/2017/10/28/ricing-org-mode/

1.3.5. The Advantages of Text-Based Information Versus Videos, Audio or Images

  • Information Lock-In (cloud-based storage)
  • digital dark age
    a lack of historical information in the digital age as a direct result of outdated file formats, software, or hardware that becomes corrupt, scarce, or inaccessible as technologies evolve and data decay


In contrast to video/audio/images, information in text-based form can be:

  • easily shared as a copy if necessary
  • easily indexed to its full extend
  • easily searched by multiple independent search services
  • easily copied and stored in a decentralized fashion
  • «easily updated incrementally (for example change a step in a tutorial because you change how you do that step)»

1.4. Vídeos

1.4.2. Anotar videos de Youtube y canciones de spotify   project someday_20230330

Hay alguna aplicación/addon de firefox que te deje anotarlas?
Lo ideal sería tomar notas en una aplicación y luego exportarlas
Mejor aún, que haya una interfaz bidireccional con org-mode para poder tomar notas sobre cosas que ya existen y demás

1.4.2.1. Opciones
  1. https://github.com/shuowu/yi-note

    Open Source, extensión para Firefox, exporta a markdown y a pdf con imágenes de la captura

  2. yuchen-lea/org-media-note: Taking notes when watching videos or listening to audios in org-mode.
  3. DONE Hacer un script que convierta de Markdown de YiNote a org mode
1.4.2.2. Utilizar Spotify como Inbox   project someday_20230330 someday_20230330

Canciones que me gustan puedo pasarlas a una playlist con C-a y click derecho
Luego hay que encontrar una manera de exportar estas playlist a listas de urls (idealmente con algún tipo de nombre de cancion/artista etc)
https://www.spotlistr.com/ → Esto funciona exportando el id, y en firefox a veces no funciona por los addons que tengo
Hay que ponerle luego https://open.spotify.com/track/

1.4.3. Embedding Youtube videos with org-mode links

1.5. The sad state of personal data and infrastructure | beepb00p

1.6. Interoperable Distributed Components

Basically they are a reduced subset of the web standards
Instead of implementing the whole web standards, whole DOM, whole styles…, a frontend would only have to implement “only” a few: this frontend can be emacs, Qt, Gnome, Unity, neovim, …

1.6.1. Block Protocol – an open standard for data-driven blocks

  • Making the web better. With blocks! – Joel on Software
    As a result of the non-standardization of blocks, our end-users suffer. If someone is using my blog engine, they can only use those blocks that I had time to implement
    «No interoperability
    Blocks can’t be shared or moved around very easily, and our users are limited to the features and capabilities that we had time to re-implement.
    To fix this, we’re going to create a protocol called the Block Protocol.
  • Progress on the Block Protocol – Joel on Software
  • Implications Of WordPress Joining The Block Protocol — Smashing Magazine
  • How to build Block Protocol blocks in any language – HASH for Developers
  • https://blockprotocol.org/docs/developing-blocks#choosing-your-approach
    • custom-element: create a block defined as a custom element (also known as Web Components).
    • html: create a block defined as an HTML file, with JavaScript added via <script> tags.
    • react: create a block defined as a React component.
  • The Block Protocol | Hacker News
    The Block Protocol is building on a pretty large history of similar ideas, but none have really succeeded. Joel’s interest in this project is some cause for hope as is the embrace of existing standards like react, webcomponents, and HTML.

    Historically, OpenDoc is pretty relevant. So is OLE. More recently Notion, Coda, Microsoft Loop [1], Anytype.io, etc lean on the same concepts to allow you to break documents into independent & reassemble-able components. There hasn’t been a large ecosystem here, although the componentized approach has more traction now as we move away from skeuomorphism.

    On the data side, Solid is the most relevant. The models are often the same, users give applications very granular data permissions and progressively authorize data access as required for additional functionality. Developers seem to dislike the model… You don’t really know what you’re going to be rendering and key features are not really used.

    From a pure schema perspective, you have schema.org. It’s a pretty comprehensive attempt to catalog structured data for most use cases. It’s nice that this project can kinda build on the semantic web, but most people ignore it! That being said, adoption would go a long way towards interoperability between OSS projects.

    I’d like to live in a world where everything works together? But I’m not so hopeful at this point because the ecosystem has very weird economics. Ultimately the “Block Developer” needs to be compensated, but the host is the one getting the SaaS or advertising payment. Obviously simple components can be free, but very complex ones may need micropayments, licensing fees, etc.

1.6.2. Hash

1.7. Posibles apps para utilizar

1.7.1. https://www.kiwix.org/en/

Kiwix lets you access free knowledge – even offline
Puede estar interesante para estandarizar todo los los artículos (en vez de procesar la web, procesas el artículo Kiwix)

1.7.2. Drag and Drop a document to annotate it

https://docdrop.org/
Coger el texto de Youtube o de pdf con ocr

1.8. Rich copy

Copiar mensajes de Whatsapp, Telegram, Slack, Teams, … que vengan con info extra en forma de links, para que te busque exactamente dónde se dijo eso para poder ir a la conversación y ver el contexto, etc
Puede ser un link a una página web de escritorio, o link a un intent
Otra idea de Joe Armstrong es que al copiar se copien también metadatos de de dónde viene lo que estás copiando: así el problema de citar tus fuentes se convierte en trivial

1.9. Anotar webs

Ahora mismo no tengo una manera superrápida de pasar de web a nota como sí la tengo con pdfs
Lo mismo no está tan bien, simplemente puedo descargar la web con org-web-tools y procesarla todo en org-mode, pero el problema es que a veces no
quieres toda la página web de una vez y así haces un primer filtro

1.9.1. Home : Hypothesis

1.9.1.1. Conectar Hypothesis con org-mode   project someday_20230330
1.9.1.2. Se podría hacer hypothesis más como org-mode?

Por ejemplo esconder todo salvo los headlines para poder copiarlos, o los headlines de nivel X
O todo salvo lo que hayas subrayado para de un vistazo ver todo
O sólamente tus anotaciones o lo que sea

1.11. Anotar código fuente

1.11.1. Draw.io Integration - Visual Studio Marketplace

Links a código y sincronización. También lo permite tener actualizado en tiempo real

1.12. Anotar datos (excel)

Esto es esencialmente lo que hace excel (pintar una columna en un cierto color). Si lo anotas en emacs con org-remark ya lo tienes
Podrías pillar atributos en pandas de un excel para hacer transformaciones? Por ejemplo pillame las celdas de tal color y cual
Probablemente la gente que trabaje con excel es una fuente de ideas para cosas de este estilo
También se puede ver como simplemente añadir una nueva columna a los datos
Anotar datos en jupyter notebook ? visualización de un dataframe
También lo puedo guardar en excel para visualizar, o cargar esos metadatos para trabajar con más gente, o para anotar automáticamente muchos datos y luego manualmente otros pocos
https://stackoverflow.com/questions/57665365/how-to-conditionally-format-pandas-row-groups-in-jupyter
https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html
https://pandas.pydata.org/docs/user_guide/style.html
https://towardsdatascience.com/a-quick-and-easy-guide-to-conditional-formatting-in-pandas-8783035071ee

def change_color_group(x):
    df = x.copy()
    df.loc[df['A'] == 1, :] = 'background-color: yellow'
    df.loc[df['A']==2,:] = 'background-color: red'
    df.loc[df['A']==3, :] ='background-color: blue'
    return df  

df.style.apply(change_color_group, axis=None)

https://github.com/Bloomberg/ipydatagrid

1.13. Diagramas

1.14. Diagramas ejecutables, DAGs, TTFT (Transformative Tools For Thought)

Confluyen un montón de cosas aquí
Construir unos nodos que sean a la vez conocimiento y nodos de un DAG, que sean ejecutables. Tratar las modificaciones de los propios nodos con cuidado porque hacen que no sean cíclicos e introducen estado

1.15. Spaced Repetition

Author: Julian Lopez Carballal

Created: 2024-12-14 sáb 20:18