Parqueadero

1 Bitácora   Personal

1.1 Primer Mes

1.1.1 Primera Semana

  1. <2019-07-08 lun>

    Comencé a aprender del software libre!, parece ser algo interesante pero, aún tengo un poco de preguntas ya que, en el software libre es como si regalaras tu trabajo, en fin, comenzaré a aprender de Joomla. ¿Joomla?¿Qué es eso?

  2. <2019-07-09 mar>

    Me adentré un poco más en el funcionamiento de Joomla, realizé un servidor local en la computadora, para realizar un servidor tiene diferentes componentes, como la base de datos, como el que brinda el servidor en sí, planeo entrar más a fondo en el funcionamiento de un servidor y una página de Joomla. ¿Otra vez Joomla?.

  3. <2019-07-10 mié>

    Estudié el funcionamiento de Apache, bastante interesante que es mundialmente usado, y es un proyecto bastante apoyado. Apache, sip.

  4. <2019-07-11 jue>

    Estudié PHP, lo básico, claro, para entender su funcionamiento, y que es lo que realmente hace al hacer una página web. PHP, ¿otro lenguaje?.

  5. <2019-07-12 vie>

    Revisé un poco MariaDB, para conocer el por qué es necesario tenerlo al intentar hacer una página web. Puedes ver lo que obtuve en mi investigación en mi manual. MariaDB, ¿Datos, guardar?

  6. <2019-07-13 sáb>

    Bueno, a pesar de estar terminando la semana, ¡Debo de seguir!, esté día, me lo tomé un poco con calma, pero estudíe un poco más el funcionamiento de Apache, y de una página Web… Apache, un poco más.

  7. <2019-07-14 dom>

    Bueno, este día de descanso, nada se mueve, ¡un día perfecto para descansar!, decidí revisar un poco más del software libre, leer un poco más que nada de GNU, y de la página de la FSF. Sinceramente, me parece muy bueno su movimiento, pero sigo teniendo varias dudas. Pienso continuar esta investigación otro día. Licenciamiento Libre, ¿Qué es eso?.

1.1.2 Segunda Semana

  1. <2019-07-15 lun>

    Me quedé con la anterior duda de la semana pasada, y estuve pensando en mil posibilidades de el que era MySQL, que era MariaDB, que hacían en la página, bueno, diferentes cosas de las que fue más que nada, divertido de pensar, teniendo una felicidad interna al pensar: "Quizá esté en lo correcto con este pensamiento, y si lo estoy, estoy aprendiendo ya que, con solo pensarlo con la lógica pude dar con la respuesta.". Bueno, la verdad que hoy me puse a investigar de eso. MySQL, ¿Cuánto falta?.

  2. <2019-07-16 mar>

    Apache, HTTP, servidor, ¿por qué son tantas cosas?, ¿por qué es tan divertido aprender de ellas?, realizé una investigación más a fondo de su funcionamiento, veamos que obtuve. ¿Apache, otra vez?.

  3. <2019-07-17 mié>

    Ok, PHP, ¿que te sucede?, ¿cómo que no eres un lenguaje de programación?, no eres un lenguaje de programación, ¿pero aún así eres mundialmente usado?, ok, verifiquemos esto. PHP………….

  4. <2019-07-18 jue>

    Un momento… ¿PHP es un lenguaje de guión cierto?, ¿ya lo sabemos cierto?, entonces, ¿cómo es que cada vez de aprendemos algo, surgen más preguntas?, HTML es también un lenguaje de marcado, pero entonces, ¿por qué se le añade PHP?, ¿O es que HTML no es suficiente por si solo?, eso intento responder hoy. PHP, HTML, ¿qué?.

  5. <2019-07-19 vie>

    Bueno, anteriormente verifiqué la relación entre MySQL y MariaDB, MySQL siendo un sistema de mantenimiento de datos, y MariaDB siendo el servidor de las bases de datos, claro, quedo hecho, ¿cierto?, entonces, ¿por qué lo revisaremos otra vez?, bueno, veamos que puedo obtener. MySQL y MariaDB, ¿hermanos?

  6. <2019-07-20 sáb>

    Pienso dedicarme toda esta semana a la investigación del software libre, realmente me parece un tema bastante interesante, y como programador, debo de conocerlo a fondo para estar al tanto de todo… Bueno, veamos como me vá. GPL… ¿Por qué es importante?.

  7. <2019-07-21 dom>

    Mhh, parece que tambien existen otro tipo de licencias, unas cerradas, unas que te permiten ver el código pero no modificarlo… ¿Qué es este mundo extenso el que me encontré?, la licencia más utiliada es la GPLv2, revisemos que es… Siendo GPLv3 una versión actualizada de la GPLv2, no debería de utilizarse?, que extraño. ¿GPLv2?, ¿ya no está la v3?.

1.1.3 Tercera Semana

  1. <2019-07-22 lun>

    ¿Qué???, ¿No eran lo mismo?, o ¿similares?, gran sorpresa de hecho, pense que estaban relacionados, pero ahora que sabemos que no, ahora surge una nueva pregunta… ¿Cuál es mejor?, ¿MariaDB o el más usado mundialmente, MySQL?. ¿MySQL vs MariaDB?.

  2. <2019-07-23 mar>

    Ok, volvamos a lo básico, me interesó hoy verificar un poco de Apache, para formalizar más los conocimientos sobre el… Veamos que pude encontrar!. Apache, eres un tema digno del que hablar.

  3. <2019-07-24 mié>

    Ok, hoy fue interesante. Pude verificar unas cuantas preguntas que tenía acerca del software libre… La verdad es que, en mi opinión, aún asi cuando antes tenía estas preguntas, sigo llendo por el software libre, me parece sinceramente mejor, por el simple hecho que esta hecho para respetar los derechos de las personas al usar tu código, pero para nada es regalar el trabajo, que es lo que temía. Licencias, algo de saber.

  4. <2019-07-25 jue>

    Veamos, HTML, lenguaje de marcado, mundialmente usado (aunque está siendo reemplazado un poco por el HTML5), veamos que tienes y que nos puedes enseñar… Como ya sabemos de nuestra hermosa investigación de , HTML también es un lenguaje de marcado. HTML, ¿qué eres?

  5. <2019-07-26 vie>

    Ayer vimos HTML, parece que es usado debido a lo sencillo que es para poder dar contenido o estructura a una página, pero creo estamos hablando de algo bastante básico, ¿no?. Hay otros elementos que noté que se le pueden añadir a una página para hacerla más presentable o profesional!. CSS, ¡un poco de diseño para tu página!

  6. <2019-07-27 sáb>

    Hace bastante tiempo que no veo este tema, aunque es importante, hoy en día redoble de tampores… Intento responder que es GNU/Linux, aunque pueda tener una idea, ¡es bueno volver a lo básico!. Dos proyectos en uno, para formar un increíble entorno.

  7. <2019-07-28 dom>

    ¿Qué?, ¿Qué es esta duda que me ha entrado desde ayer, ¿GNU/linux no es lo mismo?, parece que son diferentes, hoy planeo verificar que es Linux, y otro día planeo ver que es GNU, y sí, como ya dije, son dos proyectos diferentes, se unieron para hacer el sistema operativo, pero, ¡son diferentes!. diferentes!. ¿Y ahora notamos importante y lo que es Linux?, bueno, ahora sabemos que Linux no es el sistema operativo.

1.1.4 Cuarta Semana

  1. <2019-07-29 lun>

    ¡No puedo más!, me he quedado demasiado tiempo con la duda, ahora sabemos concretamente que es Linux, pero hay una parte que me molesta… Ese GNU, ¡veamos que es!, ¡no puedo esperar!. '''''''G'''''''NU, buena pronunciación.

  2. <2019-07-30 mar>

    Hablando de tanto GNU/Linux, parece que se manejan por medio de distribuciones, osea que, no hay 'un' GNU/Linux, si no que son varios con distintos propósitos y que se centran en diferentes cosas. Veamos esto más a fondo. Distribuciones, ¿se distribúyen?, ¿o qué son?

  3. <2019-07-31 mié>

    Ok, creo que ya estoy viendo demasiado de esto, ¡pero es que demasiado interesante!, de todas maneras, me quede con la duda, que es esto de los sistemas 'completamente libres', se supone que la mayoría si no todas las distribuciones de GNU/Linux poseen la GPLv3, por lo que están protegidas y de libre no pueden volverse no libre, bueno, veamos que pude encontrar. Ok… ¿Libre?, ¿y que eso de no libre?.

1.2 Segundo Mes

1.2.1 Cuarta Semana

  1. <2019-08-01 jue>

    Bueno, creo que donde ahora mismo estoy trabajando es importante saber de este tema, asi que, a pesar de que he estado investigando ya bastante, ¡haré aún más!, me quede con la duda de ayer… ¿Qué son p estos elementos no libres que puede tener linux?. ¿Cuáles distribuciones son libres?. Programas libres, entorno libre, ¡que maravilla!.

  2. <2019-08-02 vie>

    Bueno, eso de los blobs fue un tema algo extenso, ¡pero interesante!, de todas maneras, hoy veremos cuales son aquellas distribuciones de GNU/Linux que son completamente libres. ¿Qué?, ¿GNU/Linux ya no era libre?.

  3. <2019-08-03 sáb>

    Se que esta semana este ha sido el único tema pero, además de lo interesante que es, ¡me parece que debemos de conocer del tema!. Hasta ahora pensabamos que todas las distribuciones de GNU/Linux eran libres, pero ahora sabemos que por la parte de Linux, es posible hacerlas 'no libres', Ahora, me interesa como es que estos sistemas de no libres se convierten en libres. Blob, blob, blob, blob…

  4. <2019-08-04 dom>

    Esto genera un monton de preguntas, más preguntas de las que tenía al comenzar la investigación. ¿No es una investigación para resolver dudas?, ¿O lo que hace es generarla?. Hoy me di la tarea de investigar, ¿por qué se añadieron blobs a Linux, el cual era libre? ¿Es Linux libre?.

1.2.2 Quinta Semana

  1. <2019-08-05 lun>

    Ok, empezamos la semana fuerte, aquí está el tema. Distribución de GNU/Linux, completamente libre, funcional, y que no sufre de problemas con paquete… ¿Cómo es esto, me dirás?, tampoco me entiendo a mi, no estoy jugando, es enserio, ¡¡¡vean mi manual!!!, veamos de que sistema aprendí hoy… ¡GNU/Linux Guix!

  2. <2019-08-06 mar>

    Lo siento chicos, me he quedado con las ganas, a pesar de que es poco tiempo, no puedo dejar de pensar en este nuevo sistema que me mostraron… Les presento, Guix, la hermosa continuación. ¡Veamos que más tiene!. Guix, el manejador de paquetes funcional…

  3. <2019-08-07 mié>

    Ok, todo esto de guix me está emociona, está escrito en Guile, ¿no?, ¿qué es exactamente?, ¿de dónde viene?. Guile… ¿Qué tienes de especial?.

  4. <2019-08-08 jue>

    ¿Por qué será que aparecen más incognitas?, es un mundo muy grande claro, el de la programacioń, veamos que tenemos al verificar que ese tal, Lisp del que se habla, parece ser de muchos años, pero claro, si desean ver lo que consegui. Lisp, Scheme, Guile… ¿Qué?.

  5. <2019-08-09 vie>

    Ok, volvamos a las bases… ¿Qué puedo comentar de Joomla?, ¿Cuál es lo mejor que tiene?, ¿En que caso utilizarlo?. Joomla, tiempo sin verte.

  6. <2019-08-10 sáb>

    Aprendí con Quiliro a utilizar git, un sistema de versionamiento que depende a como lo utilize, puede ayudarme a mantener tanto el control, como tener más seguridad en mis paquetes, el hecho de tener el sistema de versionamiento, quiere decir que al tener errores, no va a ser tan crítico, ya que el sistema de versionamiento me permitirá volver, ya sea que cometa cualquier error crítico. Emacs posee una buena característica de que, cuando abres un archivo y lo guardas con cambios, emacs lo realiza, pero guarda la primera versión de el archivo en el mismo nombre, añadiendo "~" al final. Esto aumenta bastante la seguridad. Me pregunto como funcionará git a un nivel más bajo… Al iniciar git, se crea un carpeta oculta .git, planeo verificar su funcionamiento a futuro. Para ver los comandos que utilizé en orden de

    aprender git, refierance a mi manual: Git, que hermoso programa. A este mismo día. Termine unas cuantas Dudas de la bitácora con Quiliro, me senti bien ya que pienso que puedo mejorar la bitácora con lo que discutimos, darle más relevancia a algo que es relevante.

  7. <2019-08-11 dom>

    Decidí revisar un poco más los comandos de git, los cuales parecen interesantes, si aprendo a utilizar git, puedo añadir mis propios channels a guix… ¿Qué?, ¿Qué que es un channel?, bien, discutamoslo hoy. Git, aclaraciones.

1.2.3 Sexta Semana

  1. <2019-08-12 lun>

    Practiqué las plantillas de PHP, aprendí bastante!, estoy tomando una página de práctica, he intento hacer la mísma página, pero en PHP… Parece que no se puede hacer una página solo con PHP, si no que son elementos que añaden a una página de HTML, tambien se puede añadir CSS… Para ver cuál página estoy tomando como ejemplo, y que pasos estoy tomando, refierete a mi manual. PHP, plantillas, veamos de qué son útiles…

  2. <2019-08-13 mar>

    Bueno, parece que todavia me quedan muchas cosas por aprender!… Pero sigo en ello… Hable sobre la tarea con Quiliro, parece que faltan unos detalles, pero quedara mejor! Complete una instalacion de guix en mi máquina principal!, no estoy seguro como funcionó… Pero todo fue de maravilla!. Hoy decidí añadir en el manual un tema del cual no habíamos podido hablar hasta ahora, pero si lo he referido… ¡Link sorpresa!.

  3. <2019-08-14 mié>

    Hoy en dia, ¡seguiremos aprendiendo de guix!, y dado esto, Guile, y dado esto, Scheme, y dado esto… Ustedes me entienden. ¡Veamos que pude obtener!. Guile, un gran lenguaje de programación.

  4. <2019-08-15 jue>

    Hoy estaremos aprendiendo de un tema algo extenso, intentaré modificar el paquete de linux-libre, sip, es un paquete bastante extenso, pero al final de todo, es un paquete. Veamos lo que puedo lograr, estaré utilizando la ayuda de un blog, les dejare un link a el blog aquí: Link al conocimiento. Seguido de un link a mi hermoso manual: ¡Linux kernel modificado!

  5. <2019-08-16 vie>

    ¡Qué buen cierre de semana!. He avanzado bastante, podemos ver que de tener 10000 errores y 5000 cosas que arreglar, ahora tengo un 0 menos en cada una de ellas, y sin duda he mejorado la entrega de tareas, he aprendido bastantes cosas a lo largo de esta semana. Espero poder seguir avanzando aún más… ¡Les dejo un link a mi mejorado manual!: Hermoso Manual.

  6. <2019-08-17 sáb>

    Hoy tuve un problema con un archivo en , parece que accidentalmente borré algo importante de este archivo… ¡Pero no hay que entristecerce, ya que lo logre recuperar!. ¡Por supuesto que tenía ese hermoso y valioso archivo con control de git!. Veamos como lo recuperé: Pérdida de datos de algún archivo.

  7. <2019-08-18 dom>

    Hoy tuve un pequeño problema con guix… De versiones, aunque no lo crean. Intenté instalar openjdk8, ¡Y no pude!, parece que no tiene una definición. Intenté crear una, pero no fue del todo bien, sin embargo, planeo a futuro hacer un manual cuando lo logre, sería el tutorial de como hacer paquetes en guix 'avanzado'. Debido a que la definición de paquete de openjdk11 o el 9 (los que si tiene definición), son extremadamente complicados. Pero debido a esto, ¡debe de ser interesante revisarlos!.

1.2.4 Septima Semana

  1. <2019-08-19 lun>

    Un inicio de semana bastante, ¿lento?. Quizá yo lo hice así. Sin embargo, fue un buen día, compartí con mis amigos, y pude ayudar a mi compañero con unas tareas. Mañana estaré ayudandolo de la misma manera. A pesar de que no me pude conectar mucho, decidí revisar un poco más de PHP. Estoy haciendo un archivo aparte de PHP, con información relevante que estaré sacando de la documentación oficial. Puliré un poco el archivo y lo uniré a este. (debo aprender a unir con org, lo pondré en el manual)

    Muy pronto mejoraré aspectos de el manual, lo leí completo, y anoté que en varias partes utilizo terminos que no explico, cuando este hecho, les mostrare el nuevo y mejorado (otra vez), ¡hermoso manual!.

  2. <2019-08-20 mar>

    Hoy fue un día interesante, estuve revisando ciertas cosas de una distribución basada en Debian, de la cual estoy interesado. Planeo instalarla, y ponerle guix como instalador de paquetes. ¡Pero veamos que les puedo entregar este día!. Estuve revisando un tanto de lo que es Moodle, y claro, he seguido trabajando en el curso de PHP, el cual planeo expandir, les dejo un link de lo que estuve viendo hoy… Moodle, ¿Para educadores?.

  3. <2019-08-21 mié>

    Realizé arreglos a el manual, ahora debería estar más entendible a la vez que presentable, ¡Me encantaría que le dieran una ojeada!.

    Revisé nuevamente el manual de como realizar paquetese en guix, y le di una mejoría, y ¡más contenido por supuesto!. Un tutorial de como hacer paquetes en guix, 2.0, HD, remasterizado, mejorado, en 3D… Ustedes me entienden.

  4. <2019-08-22 jue>

    Les escribo con buenas noticias, finalmente decidí instalar completamente guix en mi máquina principal, mi laptop, mi alma… Esta llendo de maravilla, les escribo desde Guix System… ¡Y no puedo estar más feliz!. A pesar de eso, hoy le vengo a traer una gran enseñanza, hoy tuve un error en su instalación, y lo peor es que ese error se dio por mi… Pero bueno, así se aprende. Error en la instalación de GuixSystem

  5. <2019-08-23 vie>

    Ok ok, dejenme calmarme un poco, lo logré. LO LOGRÉ, fue genial, aprendí demasiado, me encantó, fue emocionante. No se que decirles.

    ¿Qué?, ¿No saben a que me refiero?. Ah, realize mi propio LINUX KERNEL MODIFICADO. Por supuesto con ayuda de el manual de como hacerlo en guix por supuesto, sin embargo. Dado que lo logré, obviamente lo documentaré, con el hermoso motivo de ayudar a la comunidad. Hagámoslo. linux-libre-minall

  6. <2019-08-24 sáb>

    Un buen día diria, trabajo en la mañana, trbajao imprevisto en tarde. Sin embargo, al terminar un gran día de trabajo, no puedes evitar sentirte cansado pero aliviado a la vez. Les dejare un link de un nuevo apartado de el manual, ¡una nueva joya que me presentaron!:

  7. <2019-08-25 dom>

    Buen día de descanso, sip, eso diria, sin duda, se debe de seguir aprendiendo… Hoy decidí añadir una nueva categoría en el manual, les dejaré un link, es algo que cada persona debería de aprender, ¡así tendremos el control de nuestros ingresos!: Realización de un programa de reporte de cuentas

1.2.5 Octava Semana

  1. <2019-08-26 lun>

    Hoy decidí hablar un poco de Emacs, parece que uno puede un entorno completo, algo así como, añadir funcionamientos a Emacs que la comunidad quiere, Bueno, sin más tiempo gastado, les presento mi hermoso manual: SpaceMacs, ¿Distribución?

  2. <2019-08-27 mar>

    Hoy me centré en aprender un poco más de Guix, encontre algo interesante, ¿un comando de guix centrado a desarrolladores?, ¡veamos si es posible que este sistema operativo pueda brindarme más de lo que ya lo ha hecho!, veamos una de las joyas de guix: guix environment, que joya.

  3. <2019-08-28 mié>

    Me adentré más en el el 'jugo' de ledger-cli, se puede ver más en sus reportes, el cual nos permiten mantener nuestra contabilidad. Bueno, sin más preambulo, ¡les dejo un link de mi manual!: ¿Payees, balance, que serán?.g

  4. <2019-08-29 jue>

    Decidí revisar un poco más de emacs, sin duda mi tiempo con spacemacs fue de lo más hermoso, pero aún así, por motivos de aprendizaje, estaré desde hoy utilizando emacs. Instalaré todo lo necesario, a futuro quizá, pueda añadir spacemacs a guix, pero eso es de verse, por supuesto. spacemacs es libreEmacs, hagamoslo hermoso con extensiones.

  5. <2019-08-30 vie>

    Hoy en día aprendí algo muy importante: 'las 3 características en la vida'… Bueno, no eso exactamente, pero son cosas extremadamente importantes a la hora de avanzar en la vida.

    Integridad
    Añade confianza en tí, y en tu palabra, y al tener confianza, ¡te vuelves más capaz!.
    Energía
    Debes demostrar que lo que haces lo haces con gusto, y haciendo las cosas con energía, ¡viene el conocimiento!.
    Creatividad
    Ya teniendo el conocimiento, eres alguien entendido en el tema, y puedes aportar ideas posibles, y si no lo son, ¡igual aprendes!.

    Bueno, viendo algo más de 'programación', ¡Sigamos viendo de Guix!, parece que el empaquetador que tiene, puede realizar varias operaciones al mismo tiempo, la pregunta es… ¿Por qué?, si la mayoriía de empaquetadores no pueden hacer esto… ¡Esto es un punto para guix!.

  6. <2019-08-31 sáb>

    ¡Las redes mueven a el mundo!, es muy importante tener un conocimiento básico de estos términos, ya que como dije antes, las redes mueven a el mundo, y lo harán más a futuro, ¡será un mundo de redes!. Redes e Internet, qué maravilla.

1.3 Tercer Mes

1.3.1 Octava Semana

  1. <2019-09-01 dom>

    Emacs, ¿por qué siempre vuelvo a tí?. ¿Será por lo bueno qué es trabajar contigo?, no lo se, pero el tema de hoy, será emacs de nuevo… Emacs, de nuevo, otra vez…

1.3.2 Novena Semana

  1. <2019-09-02 lun>

    PHP, vuelvo a tí, eres un buen lenguaje, necesario sin duda. ¡Vale le la pena aprender de ti!. Veamos que descubrí: PHP, ¡una nueva función!.

  2. <2019-09-03 mar>

    Hoy tuve la necesidad de generar algo, muy específico la verdad, pero necesario… ¡Una presentación en org!, no diré que no fue algo complicado, porque lo fue, pero bueno, veanlo en mi hermoso manual: Beamer, Imágen, Presentación, Diapositiva, complicado, fácil.

  3. <2019-09-04 mié>

    Señores, es importante, ¡debemos de saber los elementos del internet!. Por ende, he mejorado mi manual de redes, ¡Revisenlo!. Redes e Internet

  4. <2019-09-05 jue>

    Veamos, uso emacs, y quiero comenzar a tener mis cuentas claras… ¿Debería usar GNUCash?, se ve como una buena opción, pero no se implementa con emacs, ¿qué haré?… No lo sé aún, revisemos mi manual a ver si encontre algo. ¿Clear?, ¿Una cuénta limpia?

    Ok, si lo encontré, ¡estuve bastante confundido!, parece que en ledger-cli una cuenta puede tener diferentes estados, ¿por qué?, me pregunte, si yo hago el gasto y anoto. Esto es debido a que ledger-cli quiere representar algunos gastos específicos, por ejemplo, el deberle algo a alguien, o hacer una transferencia la cual solo caerá dentro de un tiempo. ¿Bastante interesante no?.

  5. <2019-09-06 vie>

    Ledger-Cli, muy interesante por supuesto de ver, por arriba solo es una herramienta de contabilidad, ver reportes y, eso nada más bueno… ¡Hasta que lees su manual!, tags, virtual postings, ¿qué?. No lo se, pero veamos que descubrí.

  6. <2019-09-07 sáb>

    Estuve investigando de diferentes cosas, ¡pronto se vienen nuevos manuales!. Fuera de los manuales, hoy fue un gran día, pude avanzar bastante en mis investigaciones, y me siento tranquilo ante todo. ¡Realizé varios arreglos a el manual de ledger-cli!, asegurense de verlo:

  7. <2019-09-08 dom>

    ¿Saben algo necesario de emacs, algo indispensable?, bueno, no realmente indispensable, pero sin duda ayudaría tenerlo, ¿interesados?… ¿Alguien?, bueno, no importa, lo investigué, y aquí está: flyspell,

1.3.3 Décima Semana

  1. <2019-09-09 lun>

    Ok ok, hemos avanzado bastante, pero sin duda podemos avanzar más, ¿que les parece más flyspell?, ¡hagamoslo!. ¿Diferentes diccionarios?, ¡no hay problema!.

  2. <2019-09-10 mar>

    Un dia bastante interesante, sin duda aprendi bastante, y mas que nada , reforze mis conocimientos.

  3. <2019-09-11 mié>

    Ok, sabemos que es importante saber lo basico de contabilidad a la hora de usar ledger-cli, la pregunta es… usar ledger-cli o no.

    Al usar ledger-cli, te permite tener tu contabilidad al maximo, y lo mas importante, siempre estaras aprendiendo!. Por esta misma razon, mejore el manual de ledger-cli, revisenlo! : Ledger-Cli-cli, y sigo aprendiendo.

  4. <2019-09-12 jue>

    ¿Por qué es importante contabilizar?, aunque no lo crean, yo apenas lo estoy aprendiendo, para compartirles un poco de lo que estoy aprendiendo, decidí trabajar un poco en el manual de ledger-cli, ¡seguro les gustará!. ¡Asegurense de ver las diferencias! : Ledger-cli, 2.0

  5. <2019-09-13 vie>

    Git, una herramienta increible sin duda, es usada mundialmente por los programados, ¡e incluso para otras cosas!… Veamos que me puedes ofrecer: Git, una maravilla.

  6. <2019-09-14 sáb>

    Sabían que se puede entrar a una computadora remótamente, extraer datos como si estuvieras en la computadora, ¿y más cosas?, esto es una hermosa tecnología llamada SSH, revisemosla!: Inicio Remoto, una buena herramienta.

2 Manual   How to

2.1 ¿Cómo Realizar una Página Web?   Servidor

Al querer realizar nuestra propia página web, teniendo en cuenta que será administrada por nosotros, se deben conocer los elementos que la conforman. Debemos de tener un entendimiento básico de lo que hace cada elemento. Primero, realizar un Servidor Local es necesario. Utilizaremos Joomla para hacer nuestra página web.

Servidor local
Los elementos más básicos que necesitaremos para hacer una página web presentable, son:
Apache
Nos provee de el Servidor Web.
PHP
Se pueden realizar operaciones necesarias para el funcionamiento de la página web, es un requisito de Joomla.
MariaDB o MySQL
Nos darán un buen guardado y manejo de datos.
Joomla
Nos permitirá modificar nuestra página web a nuestro gusto.

2.1.1 Apache   Apache Servidor

Apache
HTTP WEB Server, Permite acceso a nuestra página. Utilizando Hostnames, los cuales nos permiten acceder a nuestra página refiriendonos a su nombre.
Clientes, servidores y URLs
Cuando nos queremos conectar a una página, ponemos algo así como: https: -//- www. - gnu.org. Esto contiene diferentes elementos, en el siguiente orden:
El protocolo
Nos referimos a la parte 'http' o 'https' de una página, el protocolo que utiliza la página para enviarle archivos a su cliente.
Hostnames
Los hostnames, o nombres de host, se refieren a el nombre de una página, la cual esta estrictamente relacionado con donde reside la página en el internet. Y por estos nombres es la razón por la que no debemos de referirnos a un servidor por su ip, imaginate referirse a 123.423.12.13/32 (es un ejemplo), para conectarse a cualquier página. Para evitar este problema, se utilizan los nombres de host.
HTTP
HyperText Transfer Protocol, protocolo de transferencia de hiper textos. hiper textos se refiere a los archivos que contienen los lenguajes de programación, los cuales le dan la visión a la página web, yo al entrar a una página, estoy pidiendo que, por medio de http, me envíen archivos, ya puedan ser HTML u otros, que le dan forma a la página, HTTP solo es un protocolo por el cual se envían estos archivos de el servidor al cliente. Es cómo ftp, es solo el medio por el cual se envían los datos.

2.1.2 PHP   PHP

PHP
Lenguaje de Guión mundialmente usado en el diseño de páginas web, debido a su capacidad de unirse en el código de HTML de forma perfecta.
Lenguaje de Guión
Lenguaje especializado en la ejecución de guiones, o scripts, los cuales a su vez, contienen diferentes comandos que deberá ejecutar dicho lenguaje de guión
HTML, PHP, relación
PHP puede realizar todo lo que un programa CGI puede hacer, puede ejecutar scripts de el lado de el servidor, y mostrar solo el resultado, unido con HTML, se pueden hacer cosas bastante interesantes en una página web, por ende su unión y su necesidad en una página web.
Plantilla PHP
En PHP se pueden trabajar con plantillas, que no son más que nada un "cuerpo" básico de una página web, el que uno puede modificar como desee. No hay mucha diferencia en uno escribir la plantilla uno mismo, solo que al copiarla, se da tiempo (esta solo debe ser copiada si se entiende cada uno de los elementos), Al ser una plantilla, podemos añadirle lo que deseemos, tanto más funcionamiento con PHP, como contenido con HTML, como diseño con CSS.
Include y Require
Dos comandos muy utilizados en PHP, sirven para incluir archivos externos de PHP, muy útil a la hora de añadir alguna función que desees pero que esté en otro archivo. Por lo general, es utilizado a la hora de hacer páginas web, para poder dividir sus elementos en diferetnes archivos, los cuales pueden estar mejor organizados, es una gran manera de hacer una página web.

2.1.3 MariaDB   MariaDB

MARIADB
Básicamente, es un servidor de bases de datos, parece ser un poco más complicado que esto claro, tiene una relación cercana con MySQL, planeo estudiar más a fondo esa relación en el futuro. Y claro, el papel de una base de datos en una página.

2.1.4 MySQL   MySQL

MySQL
Es un sistema de mantenimiento de datos… Pueden ser tanto archivos simples, como fotos, video, etc. Pero cuando hablamos a un nivel corporativo, como, GNU, estamos hablando a que la cantidad de información es exorbitante, haciendo que MySQL entre en juego, para manejar la información de una manera más sencilla, que haga el trabajo de nosotros, los flojos programadores, un poco más sencilla.
MariaDB, MySQL, relación
Realmente, no tienen relación alguna más que de competidores, MariaDB podría considerarse una alternativa a MySQL con más características, pero, MySQL es la más utilizada. Pero MariaDB planea quitarle ese puesto claro.
MariaDB vs MySQL
MySQL, al pesar de ser mundialmente usado, tiene sus fallas, de entre estas está, el simple hecho de que no sea software libre, en cambio, MariaDB, es un reemplazo de MySQL que intenta cubrir varias fallas o añadir más características que pueda tener MySQL, esto no significa que MariaDB no tenga sus fallas., Me encantaría verlo más a fondo en otro momento, en que difieren y en que no… A pesar de esto, yo me iré más por MariaDB por el simple hecho de ser software libre.

2.1.5 Joomla   Joomla Web

Joomla
Es un muy famoso CMS, bastante bueno para crear una página web, ya que al ser libre, tu puedes decidir que deseas añadirle, joomla te permite crear una interfaz bastante presentable, pero lo que realmente es interesante de joomla, son los modulos, los cuales o puedes descargar en varios lados, como puedes hacerlos tu mismo, son, básicamente, extensiones, que por lo general son para aumentar la funcionalidad de joomla, u otro elemento, incluso menús u otros similares. Si se desea aprender como funciona una página web, sin duda se debe instalar joomla ante todas, ya que tu puedes verificar el código fuente.
CMS
Content Management System. Un sistema de mantenimiento de contenido, como sería su traducción literal, aunque es mejor llamarlo: Sistema de Administración de Obras es un programa que nos brinda una interfaz entendible, para que cualquier persona, tenga conocimientos o no de desarrollo web. Entonces, no es nada más que una herramiento en la que cualquiera puede hacer su página web.

2.1.6 CSS   CSS WEB

CSS
(Cascading Style Sheets) Es un elemento extra que se puede utilizar en un documento de HTML para darle más forma, siendo más específico, para customizar más la forma en la que se ve la página web, funciona mediante reglas, en las que uno puede definir como va a ser algo presentado. Se puede añadir en un documento de HTML, y es uno de los principaes do a que como ya definimos, se puede embeber en HTML perfectamente, como también PHP lo hace.

2.2 Licenciamiento Libre   SoftwareLibre

Licenciamiento Libre
Movimiento que busca promover el uso de la licencia 'GPLv3', el cual es definida como una 'Licencia Libre'.
GPLv3
Gnu general Public License. Licencia publica general de GNU, es una licencia copyleft principalmente para software. Es la licencia que pretende proteger la libertad del usuario', Esta diseñada para que cualquier código que se obtenga que tenga la GPLv3, deba de usarse solo con los mismos terminos, es decir, no se puede utilizar como código con otros términos que los que la GPLv3.
GPLv2
Esta licencia tambien es una licencia libre como la GPLv2, solo que con unas cuantas diferencias, parece que esta versión de la licencia, no permitía una libertad completa, ya que se podía usar ese código y ser utilizado en un programa propietario, a pesar de que el código dentro es libre, por ende, la GPLv3 arregla esto.
Libertades del software libre
El software libre contiene cuatro libertades fundamentales que debe de tener cualquier programa para ser considerado libre.
Libertad 0
La libertad de usar el programa para lo que te apetezca, sea o no sea su uso 'principal'.
Libertad 1
La libertad de estudiar como funciona el programa, y el poder modificarlo para poder mejorar el programa y haga lo que desees.
Libertad 2
La libertad de distribuir copias del programa para ayudar a otros.
Libertad 3
La libertad de distribuir copias modificadas del programa, incluyendo las tuyas, esto te da la oportunidad de ayudar a la comunidad y mejorar el programa.
GNU
Proyecto de realizar un sistema operativo conformado por programas que solo sean Licenciamiento Libre.
Linux
Núcleo, hace posible la interacción de el usuario con la computadora, al poder conectar el Hardware.
GNU/Linux
Unión de el proyecto GNU con el proyecto Linux, Para formar un sistema operativo completo, Linux actúa como el kernel que se comunica con el hardware de la computadora, y GNU provee las herramientas necesarias para realizar tareas en la computadora.
GNU/Linux, distribuciónes
Los sistemas operativos basados en GNU/Linux son diversos, unos brindan un fácil uso al usuario, otros brindan las últimas tecnologías, otros desean irse por lo 'estable', pero dando paquetes probados, pero no actualizados. El proyecto GNU se encarga e verificar Proyectos GNU que sean libres.
Sistema Libre GNU/Linux
Distribuciones de GNU/Linux que solo contengan programas y elementos de Licenciamiento Libre. Sistema Libre es un término necesario debido a que existen distribuciones de GNU/Linux, las cuales no son libres.
Blobs
Los blobs o elementos no libre que se pueden encontrar en Linux son nada más que paquetes no libres, como fue definido anteriormente, por lo general son drivers, los cuales nos dan la posibilidad de manejar un hardware en particular, pero dado que estos drivers no son libres, se debe de tener en cuenta que al eliminarlos, podríamos sufrir un desuso de alguno de nuestros componentes, pero si no lo hacemos, nuestra libertad sufre en ese tema, ya que no podemos estar completamente seguros de que es lo que se esté ejecutando en esos drivers no libres.
Sistemas Libres
Los que más me llamaron la atención fueron: Dragora GNU/Linux, GNewSense, Hyperbola, Trisquel y PureOS, todos estos son libres, y planean dar el control al usuario, brindandoles un sistema completo en el que trabajar.
Deblobing
Herramienta usada por sistemas que desean tener un sistema libre, al utilizar esta herramienta, elimina todos los blobs de Linux, haciendolo libre, y creando así un nuevo paquete, el que se utiliza como kernel en estas distribuciones. Linux-Libre.

2.3 GNU/Linux Guix   Guix

GNU/Linux Guix
Distribución de GNU/Linux basada en el administrador de paquetes guix. Es un sistema libre.
Guix
Sistema de mantenimiento de paquetes puramente funcional, no difiere en mucho con nix, pero si tiene ciertos detalles que en mi opinión, le hacen mejor. Primero que nada, utiliza un lenguaje de programación, Guile, nix, en cambio, utiliza un lenguaje de programación credo por nix. Lo cual puede tener sus inconvenientes.
Guix Channels
Manera que utiliza Guix para poder añadir más paquetes mediante un repositorio Git.

2.3.1 Un tutorial de como hacer paquetes en guix

Guix utiliza Guile como lenguaje de programación, esto le brinda la posibilidad de extenderse, incluso mediante el uso de funciones, estructuras y macros.

Cada paquete de Guix, está previamente definido mediante una 'definición de paquetes'. Esto se refiere a un archivo en el cual se define todo lo necesario para que Guix construya e instale un paquete.

Veamos un ejemplo de una definición de paquete, utilizaremos como ejemplo el paquete 'hello', el cual es sencillo debido a su función. E intentaremos crear un paquete modificado con la ayuda de el siguiente manual, disponible en inglés: Empaquetamiento de Guix.

  1. Definición de el paquete 'hello'
    (define-public hello
      (package
        (name "hello")
        (version "2.10")
        (source (origin
                  (method url-fetch)
                  (uri (string-append "mirror://gnu/hello/hello-" version
                                      ".tar.gz"))
                  (sha256
                   (base32
                    "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
        (build-system gnu-build-system)
        (synopsis "Hello, GNU world: An example GNU package")
        (description
         "GNU Hello prints the message \"Hello, world!\" and then exits.  It
    serves as an example of standard GNU coding practices.  As such, it supports
    command-line arguments, multiple languages, and so on.")
        (home-page "https://www.gnu.org/software/hello/")
        (license gpl3+)))
    
    

    En la definición de el paquete, se deben de definir diferentes elementos necesarios para poder construir e instalar el paquete, en está definición, se podrán ver elementos algo obvios, por ejemplo, el nombre de el paquete, su descripción y su versión.

    define-public
    Define una variable pública, esto nos permite referirnos a la definición por el nombre.
    name
    El nombre de el paquete, no debe de ser confundida con el nombre de variable con el que le es definido en define-public, son el mismo nombre debido a que así deben de ser referidos entre ellos. Sin embargo, el nombre de 'define-public' puede ser diferente.
    version
    La version de el paquete, debe concordar con el paquete descargado.
    source
    Aquí, comenzamos a definir el lugar de descargado de el paquete, puede ser tanto un página web, como un repositorio Git, por ejemplo.
    origin
    Definimos el origen del cual será descargado el paquete.
    method url-fetch
    Define que el método utilizado en la descarga de este paquete, será mediante una página web, un URL.
    string-append
    Aquí definimos que la página o URL por la cual será descargado el paquete, utilizando el metodo URL, será la unión de mirrot://gnu/hello/hello-", con 'version', y la '.tar.gz'. Esto quiere decir que. el URL será: mirror://gnu/hello/hello-2.10.tar.gz.
    sha256
    Comenzaremos a definir el hash de este paquete.
    base32
    Hash de el paquete, si el hash es diferente, guix no instalará el paquete.
    build-system gnu-build-system
    Procedimientos por los cuales el paquete será instalado.
    sinopsis
    Breve descripción de el paquete.
    description
    Descripción extendida de el paquete, por si se desea más información, o la sinopsis no fue lo suficientemente clara.
    home-page
    La página web en donde está alojada el proyecto.
    license
    La licencia a la cual el proyecto esta sujeto.

    Dando un vistazo a la definición del paquete 'hello', nos daremos cuenta de qué es lo que necesita una definición de paquete para ser válida para Guix. Crearemos nuestro propio paquete modificado, como una copia de la definición original de 'hello', le llamaremos 'my-hello'.

  2. Paquete my-hello
    (use-modules (guix packages)
                 (guix download)
                 (guix build-system gnu)
                 (guix licenses))
    
    (package
      (name "my-hello")
      (version "2.10")
      (source (origin
                (method url-fetch)
                (uri (string-append "mirror://gnu/hello/hello-" version
                                    ".tar.gz"))
                (sha256
                 (base32
                  "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
      (build-system gnu-build-system)
      (synopsis "Hello, Guix world: An example custom Guix package")
      (description
       "GNU Hello prints the message \"Hello, world!\" and then exits.  It
    serves as an example of standard GNU coding practices.  As such, it supports
    command-line arguments, multiple languages, and so on.")
      (home-page "https://www.gnu.org/software/hello/")
      (license gpl3+))
    
    

    Debido a que el paquete está en otro directorio, se le deben de añadir elementos necesarías para que sea una definición de paquete válida.

    use-modules
    Aquí definimos los módulos que son necesarios por el paquete, la razón por la cual la definición de paquete 'hello' no los tiene, es debido a que ya están añadidos.
    guix packages
    Al importar este módulo, nos da todo lo necesario para un paquete de guix.
    guix download
    Nos da la posibilidad de usar 'source'
    guix build-system gnu
    Nos brinda la posibilidad de llamar las variables "build-system gnu-build-system", con los cual construiremos los paquetes. Existen diferentes métodos de construcción, por ejemplo, para la construcción de un paquete de emacs, o de ruby, es diferente a un paquete normal.
    guix licenses
    Nos da la posibilidad de referirnos a las licencias, por ejemplo, gpl3+ es reconocido debido a este módulo. De otro modo, nos daría un error de: dpl3+ unbounded variable.

    Aquí no estamos utilizando (define-public), debido a que por ahora es innecesario, solo necesitamos instalar el paquete.

    Luego de tener una definición de paquete válida, es necesario verificar el HASH, ya que si este es incorrecto, Guix se rehusará a la construcción e instalación de el paquete. Guix brinda una herramienta que automatiza dicho trabajo.

    
    guix download mirror://gnu/hello/hello-2.10.tar.gz
    
    

    En este comando, guix nos descargará el paquete y nos generará un HASH, además de incluír el paquete en la tienda.

    Si el hash concuerda con el contenido en nuestra definición de paquete, no se debe de cambiar nada, de lo contrarió, si el hash difiere (quizá debido a una versión), se deberá de cambiar por la obtenida.

    Luego de verificar el Hash, y cambiarlo si es necesario, procedermos con la instalación de el paquete.

    guix package --install-from-file=my-hello.scm ;Estándo en el directorio que contenga la definición.
    
    

    También se puede utilizar guix package -f

    Se instalará nuestro paquete, con ello, tendremos listo nuestro primer paquete de Guix.

    Hasta ahora, para instalar o referirse a nuestro paquete, es necesario referirnos también al directorio en el cual está nuestra definición, si se desea evitar esto, existen dos opciones.

  3. Variable de Guix

    Guix nos permite una variable global, en la que podemos poner un directorio, o varios, en los cuales guix verificará definiciones de paquetes, y será posible referirse a ellos, mediante el comando "guix install", o "guix package -i".

    La variable es "GUIXPACKAGEPATH", esto quiere decir, que si tenemos un directorio en ~/Paquetes-de-Guix/, y lo ponemos en dicha variable, cualquier definición de paquete dentro de este directorio, podrá ser referida globalmente. Para hacer esto, podemos utilizar:

    export GUIX_PACKAGE_PATH=~/Paquetes-de-Guix/
    # Puede ser cualquier directorio, incluso dentro de documentos.
    # Ahora, al verificar que tiene la variable, nos dará nuestro directorio.
    # Podemos ver esto ejecutando lo siguiente:
    echo $GUIX_PACKAGE_PATH
    
    

    Luego de definir esta variable, deberemos de modificar un poco nuestro paquete, y añadirle "define-public" para que pueda ser referido públicamente. Quedará de esta manera:

    (define-module (my-hello)
      #:use-module (guix licenses)
      #:use-module (guix packages)
      #:use-module (guix build-system gnu)
      #:use-module (guix download))
    
    (define-public my-hello
      (package
        (name "my-hello")
        (version "2.10")
        (source (origin
                  (method url-fetch)
                  (uri (string-append "mirror://gnu/hello/hello-" version
                                      ".tar.gz"))
                  (sha256
                   (base32
                    "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
        (build-system gnu-build-system)
        (synopsis "Hello, Guix world: An example custom Guix package")
        (description
         "GNU Hello prints the message \"Hello, world!\" and then exits.  It
    serves as an example of standard GNU coding practices.  As such, it supports
    command-line arguments, multiple languages, and so on.")
        (home-page "https://www.gnu.org/software/hello/")
        (license gpl3+)))
    
    

    Lo único que añadimos fue "define-public", al añadir esto, ahora podremos instalar nuestro paquete mediante "guix install my-hello", o "guix package -i my-hello".

    Con esto, podremos referirnos a el paquete públicamente, sin embargo, no podrá ser instalada mediante 'guix package -f'. Si deseamos poder instalarlo de esta manera, se debe de referirse a el al final de el archivo, con su nombre público:

    ; ...
    (define-public my-hello
      ; ...
      )
    
    my-hello
    
    

    De esta manera, también podremos instalarlo referiendonos al archivo directamente.

  4. Utilizando Channels

    Primero que nada, necesitaremos git. Para esto podremos utilizar:

    guix install git
    
    

    Luego de instalarse, deberemos de ir al directorio que deseamos convertir en un repositorio git local, y ejecutar:

    git init
    Esto iniciara git, y creará una carpeta oculta de git.
    git add .
    Aquí añadimos todos los archivos de el directorio, en este caso deberían de estar nuestras definiciones de paquetes.
    git commit
    Esto habrá añadido todos los cambios, y con esto, nuestro repositorio de git local esta listo.

    Deberemos de crear un archivo scheme, en el cual se definirán los channels, y podremos añadir nuestro repositorio git local. Dicho archivo es: ~/.config/guix/channels.scm.

    Dentro de este archivo, podremos añadir más un repositorio:

    (list (channel
           (name 'guix)
           (url "https://example.org/my-guix.git")
           (branch "master")))
    
    

    Pero en este caso, dado que es un repositorio local, debemos de hacer algo diferente, algo parecido a esto:

    (list (channel
           (name 'guix)
           '(url "file:///home/$USER/donde-estan-tus-paquetes")
           (branch "master")))
    
    

    De esta manera, al ejecutar 'guix pull', se detectará el nuevo channel, y al ser añadido, podremos ver nuestros paquetes universalmente.

2.3.2 Crear y usar un Linux kernel modificado en un sistema Guix

Guix es un sistema en la que se utilizan sustitutos, estos son, servidores a los que te puedes conectar, que te proveen de paquetes pre-construidos, ya que, en guix es muy común al instalar un paquete el tener que instalarlo, se debe tomar en cuenta que los sustitutos fueron creados con el fín de no gastar tantos recursos en construir un npaquete. Los sustitutos solo deben de ser utilizados si se confía en el servidor, ya que una vez descargado algo de este, no se puede confirmar de que el archivo del que te provee, es el archivo que pediste sin modificaciones. Utilizaremos la siguiente guía: Kernel de Linux modificado en Guix, disponible en inglés.

Definión de paquete de Linux-Libre
Como ya sabemos de anteriores investigaciones, los paquetes de guix se manejan con definiciones de paquetes, estos pueden ser normalmente modificados, la definición de paquete de el kernel Linux-Libre no es una excepción a esto, a pesar de esto, es un tanto diferente, veamos que posee.
  1. Definición de paquete, kernel Linux-Libre
    (define* (make-linux-libre version hash supported-systems
                               #:key
                               ;; A function that takes an arch and a variant.
                               ;; See kernel-config for an example.
                               (extra-version #f)
                               (configuration-file #f)
                               (defconfig "defconfig")
                               (extra-options %default-extra-linux-options)
                               (patches (list %boot-logo-patch)))
      ...)
    
    Maneras de modificar el paquete
    Como se puede notar, la definición del paquete Linux-Libre es algo diferente a las demás. Veamos como esta constituído este paquete. Esta definición de paquete es de hecho, un procedimiento que crea un paquete.
    define*
    Comenzamos con la definición de una variable, para eso funciona define, el "*" extra que podemos encontrar, es único de Guile, y permite le uso de argumentos únicos y opcionales.
    make-linux-libre version hash supported systems
    Se refiere al nombre del paquete, siguiendo con las reglas que se ven en guix, significa que hay un archivo de esta manera: make-linux-libre/version/hash/supported-systems.
    #key
    argumento único.
    (extra-version #f)
    Se le añade un valor booleano de falso a extra-version
    (configuration-file #f)
    Se le añade un valor falso a configuration-file, que se refiera el archivo .config file que contiene parametros con los que se va a construír el paquete.
    (defconfig "defconfig")
    Se refiere a otro archivo de configuración.
    extra-options %default-extra-linux-options)
    Se refiere a parámetros que son añadidos a la hora de construir el paquete.
    (patches (list %boot-logo-patch))
    Se refiere a los parches que son añadidos, o lo 'extra' al paquete.
    1. Primera manera de modificación
  2. Declaración del paquete del kernel Linux-Libre 5.1.x
    (define-public linux-libre
      (make-linux-libre %linux-libre-version
                        %linux-libre-hash
                        '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux")
                        #:patches %linux-libre-5.1-patches
                        #:configuration-file kernel-config))
    
    
    define-public
    Define la variable y la hace pública, ahora puede ser referenciada en otras partes.
    make-linux-libre %linux-libre-version
    se refiere a la definición anterior presentada en Linux-Libre.
    %linux-libre-hash
    Otra referencia a la anterior definición de linux-libre
    '("x8664-linux" "i686-linux" "armhf-linux" "aarch64-linux")
    Podemos notar que todas son referiencias a la anterior definión, vemos que primero se refiere a la version, luego el hash, y luego añade las arquitecturas que son soportadas por linux, en el mismo orden de la anterior definición.
    #:patches %linux-libre-5.1-patches
    Parches añadidos al paquete.
    #:configuration-file kernel-config
    Se refiere al archivo .config utilizado.
  3. Fase de configuración Linux-Libre
    (define-public linux-libre-4.4-version "4.4.189")  
     (define-public linux-libre-4.4-pristine-source  
       (let ((version linux-libre-4.4-version)  
             (hash (base32 "0nc8v62gw89m3ykqg6nqf749fzm8y1n481ns8vny4gbinyikjhlp")))  
         (make-linux-libre-source version  
                                  (%upstream-linux-source version hash)  
                                  deblob-scripts-4.4)))  
    

    Como podemos ver, aquí se están definiendo dos variables públicas, que son exactamente lo que se necesita para la definición del paquete de linux-libre, o lo que faltaba, la versión y el hash, ya que las arquitecturas fueron añadidas anteriormente.

    De la misma manera, se definen las configuraciones que utilizará Linux-Libre, de esta manera:

    (let ((build  (assoc-ref %standard-phases 'build))
          (config (assoc-ref (or native-inputs inputs) "kconfig")))
    
      ;; Use a custom kernel configuration file or a default
      ;; configuration file.
      (if config
          (begin
            (copy-file config ".config")
            (chmod ".config" #o666))
          (invoke "make" ,defconfig))
    
    let
    es utilizado para definir varias variables en un solo procedimiento, aquí como vemos, se definen el modo en que se construirá el paquete, el archivo de configuración utilizado para esto, y entre otras cosas.
    build
    La variable build, es igual a (assoc-ref %standard-phases 'build).
    config
    La variable config ahora es igual a (assoc-ref (or native-inputs inputs) "kconfig")).
    if
    Condicional.
    begin
    Comienza procedimientos.
    copy-file
    Procedimiento de copia de archivos.
    chmod
    Cambia los permisos de un archivo
    invoke
    invoca un comando, en este caso, make.
  4. Ejemplo de configuración de paquete de Linux-Libre kernel
    (define-public linux-libre/E2140
      (package
        (inherit linux-libre)
        (native-inputs
         `(("kconfig" ,(local-file "E2140.config"))
          ,@(alist-delete "kconfig"
                          (package-native-inputs linux-libre))))))
    

    Definiendo una variable pública de esta manera, activa la anterior condición anterior, lo que nos permite hacer un paquete de Linux Libre modificado, simplemente al añadir un .config diferentes, verifiquemos este ejemplo.

    define-public
    La variable con el nombre 'linux-libre/E2140' ahora puede ser referenciada públicamente, por lo que no necesita estar en el mismo archivo en el que esta la condición que nos permitirá ingresar un .config diferente al default.
    package
    refierete a el paquete linux-libre.
    inherit
    obtiene el paquete linux-libre.
    native-inputs
    Añade como native inputs, especificamente cmabiando "kconfig", para que sea igual a un archivo local: (local-file "E2140.config").
    alist-delete
    Elimina "kconfig", refiriendose al anterior que estaba, el kconfig default, y lo reemplaza por el nuestro.
    package-native-inputs linux-libre
    Dice, los native inputs que acabo de definir, añadelos a el paquete linux-libre. Al añadir nuestros native-inputs a linux-libre, se activa el procedimiento en el que se añade nuestro .config como native input, reemplazando el anterior.

    ¿Qué acabos de hacer?, como vimos anteriormente, la definición de linux-libre es diferente a una definición normal, es una creación de una variable pública, entonces, lo que hicimos en todo esto fue: Crear una nueva variable pública agarrando todo lo que tiene el paquete de linux-libre, pero añadiendole ese hermoso procedimiento que se encarga de hacer lo que queremos.

    En el mismo archivo en el que definimos esta variable, está el archivo de configuración al que nos estamos refiriendo, E2140.config

  5. Segunda manera de modificación

    Otra manera de realizar una modificación este paquete, es por medio de %default-extra-linux-options, la cual esta presente tambien en el paquete de linux-libre

    Esté es el contenido dentro de %default-extra-linux-options:

    (define %default-extra-linux-options
      `(;; https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00039.html
       ("CONFIG_DEVPTS_MULTIPLE_INSTANCES" . #t)
       ;; Modules required for initrd:
       ("CONFIG_NET_9P" . m)
       ("CONFIG_NET_9P_VIRTIO" . m)
       ("CONFIG_VIRTIO_BLK" . m)
       ("CONFIG_VIRTIO_NET" . m)
       ("CONFIG_VIRTIO_PCI" . m)
       ("CONFIG_VIRTIO_BALLOON" . m)
       ("CONFIG_VIRTIO_MMIO" . m)
       ("CONFIG_FUSE_FS" . m)
       ("CONFIG_CIFS" . m)
       ("CONFIG_9P_FS" . m)))
    
    (define (config->string options)
      (string-join (map (match-lambda
                          ((option . 'm)
                           (string-append option "=m"))
                          ((option . #t)
                           (string-append option "=y"))
                          ((option . #f)
                           (string-append option "=n")))
                        options)
                   "\n"))
    

    Como podemos ver, todas estas son opciones que le añadirán al paquete de linux-libre a la hora de su construcción. En la configuración del script modificada de 'make-linux-libre' tenemos:

    ;; Appending works even when the option wasn't in the
    ;; file.  The last one prevails if duplicated.
    (let ((port (open-file ".config" "a"))
          (extra-configuration ,(config->string extra-options)))
      (display extra-configuration port)
      (close-port port))
    
    (invoke "make" "oldconfig"))))
    

    Lo que buscamos es, al no dar una configuración (.config), este es inexistente, y por lo tanto podemos escribir todas las opciones que deseemos, aquí está un ejemplo de configuración de el paquete de esta forma:

    (define %macbook41-full-config
      (append %macbook41-config-options
              %filesystems
              %efi-support
              %emulation
              (@@ (gnu packages linux) %default-extra-linux-options)))
    
    (define-public linux-libre-macbook41
      ;; XXX: Access the internal 'make-linux-libre' procedure, which is
      ;; private and unexported, and is liable to change in the future.
      ((@@ (gnu packages linux) make-linux-libre) (@@ (gnu packages linux) %linux-libre-version)
                          (@@ (gnu packages linux) %linux-libre-hash)
                          '("x86_64-linux")
                          #:extra-version "macbook41"
                          #:patches (@@ (gnu packages linux) %linux-libre-5.1-patches)
                          #:extra-options %macbook41-config-options))
    
    

    Verifiquemos esto:

    define
    Primero, se comienza definiendo una variable, la cual representará la configuración que se utilizará, está es: %macbook41-full-config
    append
    Le añade a la variable %macbook41-full-config lo siguiente:
    %macbook41-config-options
    Contiene opciones de configuración que son las que se presentarán a la hora de contruír el paquete.
    %filesystems
    Añade soporte a sistema de archivos, tales como ext4 o fat, por decir un ejemplo.
    %efi-support
    Añade soporte para sistemas EFI
    %emulation
    Añade opciones que nos permiten hacer emulaciones. Específicamente, deja actuar a la computadora de 64 bits, la cual luego definiremos la arquitectura en el paquete, para actuar tambien como si fuera de 32bits.
    (@@ (gnu packages linux) %default-extra-linux-options)))
    Esto dice: necesito que busques el paquete o archivo con el nombre de %default-extra-linux-options (el cual es el que utiliza por defecto linux-libre).

    @@ se refiere a un objeto privado en un módulo.

    Ahora mismo, definimos %macbook41-full-config, que es la unión de un archivo que contiene opciones normales, más añadiendo support a sistemas de archivos, a EFI, y a la emulación. Junto con las opciones que se puedan encontrar dentro de %default-extra-linux-options, osea, las opciones que ya se utilizan por defecto.

    A continuación comenzamos a definir nuestro paquete:

    define-public
    define una variable pública, con el nombre de 'linux-libre-macbook41"
    ((@@ (gnu packages linux) make-linux-libre) (@@ (gnu packages
    linux) %linux-libre-version)
    Aquí nos estamos refiriendo a 2 archivos privador y que no son exportados, dentro de gnu packages linux, obtenemos 'make-linux-libre', que es como el paquete es construído, y obtenemos de el mismo directorio o lugar la versión de linux-libre, mediante obtener la variable %linux-libre-version. Luego de esto, tambien nos referimos a la variable de linux con la que se obtiene la HASH de el paquete. Algo muy importante en Guix, lo que aumenta la seguridad.
    '("x8664-linux")
    Aquí estamos definiendo, en una simple string, cuál va a ser la arquitectura que utilizaremos.
    #:extra-version "macbook41"
    Aquí estamos definiendo una version 'extra', con el nombre de "macbook41".
    #:patches (@@ (gnu packages linux) %linux-libre-5.1-patches)
    Aquí estamos utilizando los mismos parches que se utilizan en %linux-libre-5.1-patches
    #:extra-options %macbook41-config-options))
    Esta es la joya y lo que hará esta versión del paquete de linux libre diferente, el uso de nuestra propia configuración, %macbook41-config-options

    Aquí, ya se pudo hacer la modificación del archivo del kernel, pero pasa algo más… ¿Cómo sabemos que debemos de añadir exactamente para nuestro sistema?, en el manual que estoy analizando, nos dice que los mejores lugares que se pueden usar como refencia son: El manual de Gentoo y la Documentación propia de kernel.

    Pudo encontrar un comando llamado 'make localmodconfig', el cual es el que podremos usar para este objetivo.

    Primero que nada, primero debemos de instalar el paquete para poder utilizarlo, usaremos los siguientes comandos:

    guix build linux-libre --source
    tar xf $paquete-de-linux-libre
    ; Nos situaremos en la carpeta generada al extraer el archivo de linux-libre
    touch .config ; Utilizamos este comando, para generar un archivo de configuración
    guix environment linux-libre -- make localmodconfig
    
    

    Luego de ejecutar el último comando, obtendremos diferentes mensajes, que estarán demostrando los módulos necesarios para nuestra computadora, obtendremos este tipo de mensajes:

    module pcspkr did not have configs CONFIGINPUTPCSPKR

    Pueden haber varios de estos mensajes, muchos de hecho, estos son los que tu computadora necesita. Para cada uno de esos mensajes, se debe de obtener el CONFIGXXXXXXXXX (todos los que sean mayúsculas y contengan CONFIG al principio), y se deben de Copiar en el archivo ".config", seguidos de "=m" al final de cada uno. Esto puede ser un poco tedioso, pero cuando se termine, deberemos de correr nuevamente 'guix environment linux-libre – make localmodconfig, y revisar si ya no salen mensajes seguidos de 'module'. Si ya no hay mensajes de este tipo, significa que se han añadido todos los módulos necesarios en nuestro archivo .config, el cual podremos nombrar a nuestro gusto.

  6. linux-libre-minall

    Siguiendo el manual que ya hemos analizado, decidí hacer mi propio custom kernel. Siguiendo por supuesto los pasos indicados.

    Primero se debe de aclarar, que en el manual se definen diferentes cosas que son necesarias en nuestro archivo para poder hacer nuestra definición.

    Utilizaremos como ejemplo, la definición de el manual, el cual modificaremos a nuestro gusto. Es la siguiente:

    (define-public linux-libre/E2140
      (package
        (inherit linux-libre)
        (native-inputs
         `(("kconfig" ,(local-file "E2140.config"))
          ,@(alist-delete "kconfig"
                          (package-native-inputs linux-libre))))))
    
    

    Como podemos ver, todo aquí ya está definido, solo decidí cambiarle el nombre a: linux-libre-minall, y el archivo de configuración a minall.config.

    Esto es una definición publica, así como lo es linux-libre-4.9, asi que lo podríamos llamar como un linux más, por ejemplo, la definición de linux-libre-4.9 es la siguiente:

    (define-public linux-libre-4.14
      (make-linux-libre* linux-libre-4.14-version
                         linux-libre-4.14-source
                         '("x86_64-linux" "i686-linux" "armhf-linux")
                         #:configuration-file kernel-config))
    
    

    La cual varía un poco de la que tenemos, sin embargo, las dos funcionan. Algo que notar, es que las dos definiciones utilizan variables, las cuales son establecidas o en módulos ya añadidos, o definidas en la misma definición de linux.

    Lo ideal para que nuestro paquete funciones, es añadirlo como la definición de un nuevo linux, dentro ya de el paquete en la que es definido linux-libre-4.9, ya que tendremos todas las variables ya definidas. Esto es posible, simplemente realizando un 'guix edit linux-libre', y copiando toda la definición obtenida a nuestra nueva definición.

    Para hacer esto, yo utilize emacs junto con emacs-guix, dentro de emacs, ejecuté: Alt+x, guix-edit y linux-libre. Esto me llevó directamente a la definición de paquete de linux libre, el cual es extensa, pero es necesario copiar todo, para no tener errores previos de 'falta un módulo' o 'variable no definida'.

    Luego de copiar toda la definición de linux-libre a nuestra propia definición, se debe de añadir nuestra definición pública de nuestro paquete linux-libre-minall, en este caso, quedó de esta manera:

    (define-public linux-libre-5.2
      (make-linux-libre* linux-libre-5.2-version
                         linux-libre-5.2-source
                         '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux")
                         #:configuration-file kernel-config))
    
    (define-public linux-libre-version         linux-libre-5.2-version)
    (define-public linux-libre-pristine-source linux-libre-5.2-pristine-source)
    (define-public linux-libre-source          linux-libre-5.2-source)
    (define-public linux-libre                 linux-libre-5.2)
    
    (define-public linux-libre-minall
      (package
        (inherit linux-libre)
        (native-inputs
         `(("kconfig" ,(local-file "minall.config"))
          ,@(alist-delete "kconfig"
                          (package-native-inputs linux-libre))))))
    
    (define-public linux-libre-4.19
      (make-linux-libre* linux-libre-4.19-version
                         linux-libre-4.19-source
                         '("x86_64-linux" "i686-linux" "armhf-linux" "aarch64-linux")
                         #:configuration-file kernel-config))
    
    
    

    El archivo minall.config debe de estar en el mismo directorio que nuestra defición de paquete.

    Si se desea verificar su válidez mediante una instalación, se puede instalar mediante el comando 'guix package -f linux-libre-minall.scm',

    sin embargo, para que sea válido, se debe de de añadir al final de el archivo dicho nombre para que nos devuelva el paquete.

    (...
        (license license:gpl2+))
    
    linux-libre/E2140
    
    

    Ahora podremos instalarlo normalmente,

    Al ejecutar guix package -f linux-libre-minall.scm, comenzará a instalar el paquete, y nuestro trabajo estará hecho. Luego podremos añadirlo como un channel o localmente, como ya expliqué anteriormente en mi manual.

2.3.3 Error en la instalación de GuixSystem

La instalación de Guix, no es perfecta, pero contiene lo básico para instalar Guix System en tu máquina, pero dado a que es una imagen de instalación muy pequeña, se debe de tomar en cuenta de que es necesario estar conectado a internet.

Un problema con la instalación de guix, es que al haber un problema, te da dos opciones, pero las dos te llevan a reinstalar todo de nuevo, debido a ello, cualquier error de internet, puede reiniciar todo el instalar, en este caso, si no se desea volver a realizar toda la instalación, y poner todas las configuraciones, se debe de realizar lo siguiente:

Reinicio de usb
Se debe, primero que nada, reiniciar la instalación de GuixSystem, esto es con el motivo de que las particiones ya montadas automaticamente se desmonten. La instalación de guix monta el sistema en la partición /tmp, y nosotros no queremos eso, por ende reiniciaremos la instalación, y podremos intentar la instalación manualmente, pero con las configuraciones ya establecidas. Luego de ingresar nuevamente a la instalación de GuixSystem, se debe de hacer lo siguiente:
ctrl + alt + f3
Utilizamos esta combinacion de teclas, para entrar en una terminal a parte, que es la que se utilizará para poder hacer la instalación manual, con las configuraciones ya establecidas.
ping -c 3 gnu.org
Verificar si se tiene el internet, si no, se deben tomar acciones, debido a que la instalación necesita de internet.
lsblk
Con este comando, podremos verificar cual es nuestra partición que contendrá todo el sistema, por ejemplo, ¿/dev/sda3 de 400 GB?, es posible que esa sea el sistema.
mount /dev/sda3 /mnt
Asumiendo que /dev/sda3 /mnt es el sistema, se debe de montar en /mnt preferiblemente, para poder realizar la instalación
mount /dev/sda1 /mnt/boot
Si el sistema es EFI, guix debió de generar una partición EFI, la cual debe de tener un peso aproximado de 500 MB, más o menos, esta se debe de montar en el punto de montaje dicho en la configuración que usaremos en nuestro sistema, por ejemplo, utilizaré /boot como punto de montaje, pero es posible que tu instalación tenga /efi. En ese caso, monta la partición en /mnt/efi.
herd start cow-store /mnt
Aquí estamos iniciando un servicio el cual nos permitirá copiar directamente los archivos en la partición, necesario para realizar la instalación.
guix system init /mnt/etc/config.scm /mnt
Finalmente, este es el comando que utilizaremos para realizar la instalación, antes de comenzarla por supuesto, puedes realizar cualquier cambio deseado a tu configuración, que esta ubicada en /mnt/etc/config.scm.

Con la utilización de estos comandos, se puede realizar una instalación manual de GuixSystem, con las mismas configuraciones ya previstas. Y así evitar tener que realizar de nuevo la instalación y configuración.

  1. Errores
    1. Mal montaje de la partición EFI

      Un error que se puede dar en estos casos, es realizar la instalación, pero que el sistema no inicie, y entre directamente a 'grub rescue'. En estos casos, lo más probable es que se haya montado la partición EFI en un lugar incorrecto, y que por ende, ni el sistema ni GRUB pueda ser iniciado. En este caso existen diferentes opciones.

      1. Reinstalación de el sistema completo

        Esto es lo más sencillo que puedes hacer, simplemente entra en el USB de Guix, ejecuta una terminal con ctrl + alt + f3, y procede a montar nuevamente todas las particiones, pero montando la partición EFI en donde le corresponde, inicia el servicioi cow-store, y procede con la instalación, mediante el comando 'guix system init /mnt/etc/config.scm /mnt'

        A pesar de que es lo más sencillo, estaríamos realizando la instalación completa de el sistema nuevamente, con esto me refiero, a que es una opción bastante lenta, debido a que deberemos de esperar la reinstalación completa.

      2. Arreglo de GRUB.

        Esta opción es más complicada, pero sin embargo, necesario entenderla. al estar en 'grub rescue', solo tenemos disponibles muy pocos comandos:

        "En el modo de recuperación, solo los comandos: 'insmod', 'ls', 'set' y 'unset' están disponibles." GNU GRUB manual

        Con estos comandos, debemos de arreglar GRUB, para que pueda detectar en cual es la partición EFI.

        ls
        Utilizamos este comando, para detectar cuales son las particiones que detecta grub, por supuesto, obtendremos algo similar a (hd0) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1). Estas se refieren a las particiones, siendo (hd0,gpl3) /dev/sda3, e igual con (hd0,gpl1), que es /dev/sda1, la cual es probablemente nuestra partición EFI.
        set
        Al utilizar nuestro comando, nos mostrará variables que utiliza GRUB para detectar y buscar lo que necesita, hay una variable exacta que es la que utilizaremos, prefix, que es donde grub sacará los archivos necesarios para su inicialización.
        set prefix=(hd0,gpl1)/boot
        Definimos que donde están los archivos, es dentro de la particion /dev/sda1 /boot.
        insmod normal
        Al ejecutar esto, le decimos a grub que 'inicie' nuevamente.
        Entrando al sistema
        Al ya estar en el sistema, tendremos nuestro sistema Guix, ahora deberemos de reconfigurar, pero obviamente arreglando nuestro problema de montaje. Pero no tardará tanto ya que no reinstalará todo el sistema.
      3. chmod

        Este método no funciono, aún así lo pondré por si acaso debí de hacer otros comandos que desconozco, y pude de haber funcionado.

        Mi idea de utilizar 'chmod', era entrar en nuestro sistema, sin la necesidad de arreglar GRUB, algo así como el comando 'arch-chroot', el cual te adentra en el sistema como si hubieras booteado en el. Sin embargo, fue un intento fallido, quizá con la utilización de otros comandos aparte de chmod, se pudo de haber entrado al sistema como si hubieramos booteado en el, y reconfigurar.

2.3.4 guix environment

Comando que nos brinda la capacidad de crear entornos reproducibles sin 'contaminar' su entorno de usuario, esto también nos ayuda a poder ver si un programa funciona correctamente sin todo el entorno, esto es bueno a la hora de probar el correcto funcionamiento de un programa, o si se desea, incluso revisar las dependencias de uno, su uso es:

guix environment guile

Esto creara un entorno en donde estará todo lo necesario para trabajar en guile, más no usarlo, si se quiere usar, debe de usarse el siguiente comando:

guix environment --ad-hoc guile

En donde abrirá un entorno en donde no se tendrá todo lo necesario para trabajar en guile, si no que sera posible usar guile dentro de el entorno.

2.3.5 guix package

Comando que nos permite instalar, desinstalar o manejar paquetes, lo interesante es que, se pueden hacer distintas operaciones simultáneamente, en vez de una a la vez, como muchos otros empaquetadores, primero tenemos el comando:

guix package -i
Nos permite instalar paquetes, es la que más estaremos utilizando, ya que con ella nos estaremos refiriendo a un paquete en general.
guix package -r
Remover paquetes de el sistema, en el caso de que dicho paquete ya no sea necesario.
guix package -u
Actualizar el o los paquetes especificados.
guix package –do-not-upgrade
Nos permite más control sobre qué se actualiza, por ejemplo, utilizando 'guix package -u' comienza una actualización de todos los paquetes, sin embargo, si no queremos que cierto o ciertos paquetes se actualizen, podemos utilizar este comando.
guix package –roll-back
Guix nos permite hacer roll-back de los diferentes paquetes, y este es realmente lo importante de un manejador de paquetes como guix.

2.4 Lisp   Lisp

Lisp
Cuando hablamos de Lisp, no estamos hablando solo de un 2 lenguaje de programación, si no múltiples, se les define, una familia, debido a que todos son basados en Lisp, entre los más famosos son: Clojure, Common Lisp y Scheme, está familia de lenguajes de programación son caracterizados por el uso de paréntesis más que nada.

2.4.1 Scheme   Scheme

Básico
Primero que nada, en scheme se utilizan mucho los paréntesis, en los que se difinirán absolutamente todo, tanto variables como funciones. Veamos unos cuantos ejemplos:
(display (string-append "Hello " "Guix" "\n"))
Si sabes algo de inglés, aquí puedes notar que simplemente estamos uniendo strings, para crear la palabra "Hello Guix".
Funciones anonimas
Son muy usadas a la hora de programar, son funciones que solo vas a tener que utilizar una vez, por lo que no tienes la necesidad de darle un nombre. Estas se definen utilizando 'lambda', por ejemplo:
(lambda (x) (* x x))
Este es un procedimiento normal, pero esta función no será guardada, debido a que es anonima, lo que hace esta función es multiplicar el número que se le de por si mismo, y dar el resultado. Lo podemos usar de esta manera: ((lambda (x) (* x x)) 3). De esta manera, la función si nos da un resultado, el cual obviamente va a ser 9.
Variables
Las variables se defien por medio de 'define'. por ejemplo, hagamos una prueba de obtener el doble del numero ingresado, pero con variables:
(define a 3)
Ahora, la 'a' se ha convertido una variable, y contiene dentro de si, el valor de 3.
(define square (lambda (x) (* x x)))
Ahora definimos una variable 'square' la cual contiene la función anonima con lambda que definimos, que nos ayuda a obtener el doble de un número.
(square a)
Al unir estos dos terminos, se puede entender que se va a obtener 9, ya que estamos diciendo, haz la función dentro de square, en a, el cual es 3. Obteniendo al final, el número 9
Listas
Una lista puede ser definida de la siguiente manera:
(list 2 a 5 7)
Esto nos da un resultado de: 2 3 5 7. Ya que como definimos antes con 'define', a = 3
Comilla
La comilla (') es muy importante en Scheme, ya que significa: "No evalues la expresión, por lo tanto, si deseamos que algo no sea evaluado, simplemente utilizamos la comilla. Por ejemplo:
'(list 2 a 5 7)
Nos da: (list 2 a 5 7), ahora, el a no fue modificado, dado que le dijimos a emacs que no lo cambie.
Quasiquote
Te habrás preguntado, y si deseo que se evalúe una expresión, ¿pero que una exactamente no sea evaluada?, para eso sirve la quasiquote, ya que al añadirla, decimos que, como con la comilla, no evalues la expresión, pero al añadir una coma antes de la expresión que deseamos que sea evaluada, se evaluará correctamente. Por ejemplo:
`(list 2 ,a 5 7)
Esto, evaluará la 'a', ya que le dije que lo hiciera al añadir la coma, y nos devolverá 3. El cual es su valor.
Definición de varias variables
Para definir varias variables, se debe de utilizar 'let'. O su hermano 'let*', el cual permite la utilización de keywords y argumentos opcionales. (let ((x 2) (y 3)) crea dos nuevas variables. Se puede utilizar let* para eferirse a ellos nuevamente.

2.4.2 Guile   Guile

Guile
Es un lenguaje de programación patrocinado por el proyecto GNU, es una implementación de Scheme, que a su vez esta basado en Lisp. Podemos decir que es un lenguaje de programación bastante 'maduro', ya que es la base de proyectos tan grandes como todo un sistema operativo, Guix.

2.5 Git   Git

The stupid content tracker
Sistema de versionamiento utilizado universalmente, git nos da una interfaz en la que podremos manejar nuestro proyecto de la mejor de las maneras, he incluso poder trabajar con diferentes personas a la vez. Incluso si una comunidad grande de gente está trabajando en el proyecto, git es perfecto para el manejo de proyectos, mediante el sistema de versionamiento que nos proporciona.

Es mundialmente usado, por la funcionalidad que da, la cual es muy buena a la hora de mantener todo el control de un proyecto, ya sea personal o ya sea un proyecto en el que trabajen muchas personas

2.5.1 Funcionamiento de Git

Utilizé los siguientes comandos para poder aprender un poco el funcionamiento de git. Iré explicando cada una, y porque la utilizé.

mkdir temporal
Git, al ser un sistema de versionamiento, funciona en el directorio en el que le dices que funcione, o que empieze su trabajo de versionamiento. Debido a esto, cree un nuevo directorio en el que estudiaremos el funcionamiento de Git.
cd temporal
Para iniciar git, nos moveremos dentro de el directorio en la línea de comandos, utilizando cd (change directory)
git init
Este es el comando más básico de git, se encarga de decirle a git: 'Comienza tu trabajo'. Al ejecutar este comando, se crea una nueva carpeta oculta con el nombre de .git, esta carpeta no se debe de tocar, ya que contiene todos los funcionamiento de git, no le añadiremos ni le quitaremos nada.
ls -a
Ahora, en la carpeta temporal (en la que estamos ingresados), solo tenemos una carpeta oculta, la carpeta .git, pero no tenemos ningun otro archivo o carpeta dentro de este directorio.
touch prueba0
Utilizamos el comando touch para crear un nuevo archivo vacío, el comando touch, para ser más específico, cambia la fecha de un archivo de acceso o modificación, puedes ver más información con el comando man touch, si touch no encuentra el archivo, no cambia ninguna fecha, si no que crea directamente el archivo.
ls
Al utilizar este comando list, nos muestra los archivos que pueden ser vistos, en este caso, el único archivo que tanto esta en el directorio y no es oculto, es que que acabamos de crear, prueba0.
git status
Al utilizar este comando, podemos ver que esta haciendo git en ese momento, al simplemente añadir un archivo, podemos ver que ahora, que creamos el archivo prueba0, todavía sale, no hay commits todavía, esto se refiere a que no hay ningún cambio a ningún archivo.
echo "prueba111" > prueba0
Este comando se encarga de añadir la string dicha, "prueba111", al archivo.
cat prueba0
Este comando nos muestra que contiene el archivo, es un comando similar a less, pero sirve con archivos pequeños, ya que solo nos da un output de lo que tiene el archivo, en cambio, un comando como less, sirve para archivos más grandes, ya que te la posibilidad de ver todo el archivo, en cambio, utilizndo cat, es más rápido, pero es mejor para archivos pequeños. En fin, este comando nos muestra la string que acabamos de añadir, prueba111.
git add prueba0
Esto le dice a git, comienza a realizar un versionamiento de un archivo, ahora git tiene el archivo en versionamiento, cualquier cambio que se realize del archivo, git de dará cuenta. Para aquellos archivos que no hayamos añadido, no se dará esto.
git commit
Luego de añadir el archivo de a git, realizar un git commit es necesario, ya que es decirle a git que actualize toda su información, haciendo que git funcione correctamente en los archivos añadidos.
echo "Segunda prueba" > prueba0
esto le añade una nueva string a el archivo prueba0, haciendo un cambio, veremos si git ve los cambios.
cat prueba0
Este comando lo hacemos para ver el cambio en el archivo, y de hecho, ya no está el anterior string de prueba111, si no que que ahora esta el nuevo string que añadirmos, "Segunda prueba".
git status
Ahora git capta los cambios, diciendo que hay cambios que debemos de añadir, ya que todavía hay que hacer el proceso de git add, y git commit, para hacer que git registre los cambios. Al utilizar este comando, podemos ver que esta pensando git en este momento, verifiquemos que mensajes nos muestran
En la rama Master
Git se maneja por medio de ramas, si por ejemplo, tu tienes un proyecto y deseas que el proyecto se divida, por ejemplo, si un proyecto de realizar audio quieres separarlo para que la base de tu proyecto se encamine en reproducción de música, pero que a parte se utilize tambien para edición de música profesional, puedes hacerlo, teniendo dos 'ramas', una que se enfocara en hacer el reproductor de música con la base de tu proyecto, y otro que hará lo mismo, pero se encaminará en la edición de audio profesional. Bueno, este mensaje nos indica que al solo tener una rama, estamos en ella, a rama 'Master', o la principal, como decidas llamarla, es la rama en la que estamos ahora, y nuestra única rama, por ahora.
No hay commits todavía
Un commit podría definirse como un cambio, o más exactamente, una revisión, aquí git literalmente esta diciendo: "No hay cambios todavía". Obviamente, cuando agreguemos un archivo o un cambio O los dos, git debe de detectar nuevos cambios commits.
No hay nada para confirmar
No hay cambios, no hay archivos, el directorio esta vacío.

Al utilizar estos comandos y investigarlos uno a uno, se puede ver cómo es el funcionamiento de git, y así, cumpliendo con nuestra tarea de aprender de el funcionamiento de este.

2.5.2 Pérdida de datos de algún archivo

En el caso de que se hayan perdido datos en un archivo, mientras este tenga control de git, se podrán recuperar con la utilización de los siguiente comandos:

git branch
Al utilizar este comando, git nos mostrará en que rama estamos, es decir, en que parte de el proyecto estamos, normalmente nos dirá que estamos en la rama 'master' u oficial.
git log
Este comando le dice a git: "muéstrame todos los cambios que he realizado a este archivo". Nos mostrará los diferentes commits que he hecho, y podremos volver de commit, para poder así sacar los datos que necesitamos que se han perdido en el archivo más reciente.
git checkout "hash"
Utilizaremos este comando para volver de comit, en la parte de "hash", se debe de utilizar la hash única que le es dada a cada commit.
Copia de archivos
Ahora que volvimos de commit, podemos ver que nuestro archivo 'volvio' de versión, ahora ya no tiene los más anteriores cambios. Ahora debemos de realizar una copia de el archivo, para poder encontrarlo y copiar los datos perdidos de el viejo archivo al nuevo.
git branch
Nos dirá que estamos en un anterior commit.
git log
Nos mostrará todos los commits, y que estamos en uno anterior, ahora simplemente debemos de pasarnos a el commit más reciente.
git checkout "hash"
Utilizando el hash de el commit más reciente, ahora notaremos que nuestro archivo volvio a su 'última versión', y podemos abrir normalmente los dos archivos, el nuevo y el viejo, y añadir lo que se a perdido de el viejo al nuevo.
git add .
Ahora que realizamos los cambios, es muy importante tenerlo todavía bajo el control de versión.
git commit
Tenemos una nueva commit con los cambios más recientes, y con los datos perdidos recuperados.

2.5.3 Crear un servidor Git

Crearemos un servidor de Git, en el cual podremos trabajar con diferentes personas y acceder a el mediante SSH, o mediante git clone. Para ello necesitaremos diferentes elementos:

Git
Servirá para hacer un repositorio Git, Para tener nuestro proyecto en control, dado que está orientado en grupos de trabajo, también es lo que nos permitirá trabajar en un grupo.
Servidor
Una computadora o una laptop, no necesita ser de último modelo, aunque depende de las necesidades. Le configuraremos de tal manera que podremos acceder de el mediante internet.
Cliente
Para probar el funcionamiento de nuestro servidor.

Primero configuraremos los tres elementos en un servidor local, en el probaremos su funcionamiento, luego de ello, lo configuraremos para que sea accesible desde internet. Utilizaremos GuixSD en las dos estaciones de trabajo. Comenzaremos ingresando en el Servidor, y ejecutando:

$ guix install git emacs ledger-cli emacs-ledger-mode emacs-magit openssh

/También se pueden instalar con emacs-guix con 'M-x guix p n' /

Aquí estaremos instalando todos los paquetes necesarios de el servidor. Openssh con el motivo de probar que nos podemos conectar nuestro repositiorio. Terminado el comando, procederemos a realizar nuestro repositorio git. Creamos una carpeta:

mkdir repositorio-git
cd repositorio-git

Creada la carpeta y situados en ella, utilizaremos git para crear nuestro repositorio:

git init 
touch prueba0
git add .
git commit

Con estos cuatro comandos tendremos creado nuestro repositorio, git, y en ella tendremos nuestro primero commit con un archivo, 'prueba0'.

Estando en una red local, (incluso mejor por LAN), verificaremos la IP de nuestro servidor, y la compararemos con la del cliente, esto para verificar que las dos estén en la misma red. Ejecutaremos el siguiente comando en cada una:

ip addr

Digamos que esto nos muestra que la IP de nuestro servidor es '192.168.100.7', y que la de nuestro cliente es '192.168.100.30', comparandolas, podremos darnos cuenta que están en la misma red, debido a que comienzan con '192.168.100'.

Ahora sabemos la IP de el servidor, probaremos conectarnos a el mediante ssh, instalando openssh también en el cliente, luego ejecutando:

ssh '$Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo..7' /usuario es el usuario de el servidor/

Si nos pide la contraseña y luego de esto podemos conectarnos sin problemas, tendremos nuestro servidor listo, ya que podremos ver que ya estando en la computadora podemos ver la carpeta 'repositorio-git', por ende, debemos también clonarla.

Para poder conectarnos a el servidor mediante internet, lo mejor es llamar a tu proveedor de internet, para asignar una IP pública a el servidor, probablemente el proveedor le preguntará el IP de el dispositivo, el cual puede ser visto por el comando 'ifconfig'

Digamos que la IP es '183.132.423.321', verifiquemos que podemos conectarnos al repositorio.

    /se puede verificar usando ssh/
    ssh '$Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.'
    /o directamente con git/
    git clone ssh://$USER@183.132.423.321:22/home/$USER/repositorio-git

nn    #+END_SRC

    De esta manera verificaremos que podemos ver el archivo, incluso
    mejor con git clone. Algo que tomar en cuenta es el puerto, por lo
    general el puerto asignado a SSH es 22, sin embargo, si se ha
    cambiado, se debe especificar y cambia en puerto en ssh usando -p,
    por ejemplo, suponiendo que el puerto es '2222':

    #+BEGIN_SRC bash

    ssh -p '2222' '$Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.'

Ya con la prueba completada, tendremos un servidor a el que nos podremos conectar por internet, con un repositorio de git.

2.6 Verificación de Paquetes   CódigoFuente

Verificaremos el contenido de diferentes paquetes, para entender su funcionamiento interno.

  1. TODO Verificar el paquete linux-libre
    1. .clang-format

      It starts with this description: 'clang-format configuration file. Intended for clang-format >= 4.' Followed by these two links that explain which is clang format: The clang compiler is a compiler for C programming languages and their families, open-source btw. ClangFormat Yep, it seems to be completely writed in clang, but still creates a good talk between the kernel and C.

    2. TODO .cocciconfig

      Only this: [spatch] options = –timeout 200 options = –use-gitgrep which I have to investigate what means x

  2. TODO Verificar el paquete xf86-video-openchrome   Openchrome Drivers Video CódigoFuente
    1. Contenido del Paquete
      1. install-sh

        Este es un archivo .bash, parece ser la instalación del paquete. se encarga de crear las carpetas y generar sus permisos.

      2. COPYING

        Dentro de este documento, se encuentra la licencia en la que se encuentra todo el programa.

      3. missing

        Esto es un script de BASH, básicamente, se encarga de encargarse de problemas que se puedan encontrar en el programa o en la instalación de este. Por ejemplo, algun error de version, o que algo de el paquete que no esta donde deberia, esta perdido.

      4. TODO src/viakms.c
        1. TODO Librerias incluidas
          • Note taken on [2019-08-07 mié 12:54]
            It seems that C, then 'Include' (Including) something in the file, when using <>, seems to import something like modules, or libraries, but when using "", C seems to Include Files, in this case, libraries too, but that are in the project.

          Se refiere a la parte del codigo donde se incluyen librerias:

          #ifdef HAVE_CONFIG_H
          #include "config.h"
          #endif
          
          #include <errno.h>
          #include <sys/ioctl.h>
          #include <sys/mman.h>
          #include "xf86str.h"
          #include "X11/Xatom.h"
          #include "micmap.h"
          #include "xf86cmap.h"
          #include "xf86DDC.h"
          
          #include <xf86drm.h>
          #include "xf86Crtc.h"
          #include "via_driver.h"
          
          config.h
          This is a library needed for Autoconf.
          errno.h
          Library for the detection of errors, and reporting them. refer to C Standard Library, errno.h
          sys/ioctl.h
          Library used tomake I/O low level operations, refer to: Generic I/O Control Operations
          sys/mman.h
          For memory management declarations, refer to: sys/mman.h library
          xf86str.h
          X11/Xatom.h
          Declares all predefined atoms, which are symbols with the prefix ´´XA_''. refer to: Standard Header Files
          micmap.h
          Map or unmap files or devices into memory (¿for moving registry perhaps?), refer to man7.org/linux/man-pages/man2/mmap.2.html
          xf86cmap.h
          xf86DDC.h
          xf86Crtc.h
          viadriver.h
          Seems to handle memory and operations of the driver, refer to viamemory.c-Source Code
          X11/extensions/dpmsconst.h
          X11/extensions/dpms.h
      5. src/viai2c.c

        Esto es un archivo C, obviamente, incluye config.h y viadriver.h, como lo hace viakms.cm. Lo primero que podemos ver es un codigo que dicta: 'Typically used for detecting a VGA monitor.', seguido del siguiente código:

        static void
        ViaI2C1PutBits(I2CBusPtr Bus, int clock, int data)
        {
            vgaHWPtr hwp = Bus->DriverPrivate.ptr;
            CARD8 value = 0x01; /* Enable */
        
            if (clock)
                value |= SCL_WRITE;
        
            if (data)
                value |= SDA_WRITE;
        
            ViaSeqMask(hwp, 0x26, value, 0x01 | SCL_WRITE | SDA_WRITE);
        }
        
        static void
        ViaI2C1GetBits(I2CBusPtr Bus, int *clock, int *data)
        {
            vgaHWPtr hwp = Bus->DriverPrivate.ptr;
            CARD8 value = hwp->readSeq(hwp, 0x26);
        
            *clock = (value & SCL_READ) != 0;
            *data = (value & SDA_READ) != 0;
        }
        
        static I2CBusPtr
        ViaI2CBus1Init(ScrnInfoPtr pScrn)
        {
            DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                                "Entered ViaI2CBus1Init.\n"));
        
            I2CBusPtr pI2CBus = xf86CreateI2CBusRec();
            vgaHWPtr hwp = VGAHWPTR(pScrn);
        
            if (!pI2CBus) {
                DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                                    "xf86CreateI2CBusRec failed.\n"));
                xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                                    "Initialization of I2C Bus 1 failed.\n");
           ppp     DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                                    "Exiting ViaI2CBus1Init.\n"));
                return NULL;
            }
        
            pI2CBus->BusName = "I2C Bus 1";
            pI2CBus->scrnIndex = pScrn->scrnIndex;
            pI2CBus->I2CPutBits = ViaI2C1PutBits;
            pI2CBus->I2CGetBits = ViaI2C1GetBits;
            pI2CBus->DriverPrivate.ptr = hwp;
            pI2CBus->ByteTimeout = 2200;
            pI2CBus->StartTimeout = 550;
            pI2CBus->HoldTime = 40;
            pI2CBus->BitTimeout = 40;
        
            if (!xf86I2CBusInit(pI2CBus)) {
                DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                                    "xf86I2CBusInit failed.\n"));
                xf86DestroyI2CBusRec(pI2CBus, TRUE, FALSE);
                xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                            "Initialization of I2C Bus 1 failed.\n");
                DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                                    "Exiting ViaI2CBus1Init.\n"));
                return NULL;
            }
        
            DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                                "Exiting ViaI2CBus1Init.\n"));
            return pI2CBus;
        }
        

        After this, the code to detect a DVI monitor, tv encoders, all these code just to detect a device!

      6. viavxpriv.ht includes the xf86xv.h library, as on viakms.c

        defines some variables and types, it hasn't very much code as viai2c.c

      7. TODO viaums.c

        This package at first, states the license which the code is in, and includes two already introded libraries, config.h, and viadriver.h And includes a new library, called:

        globals.h

        This file seems to work with registries, with mapping, and with engines such as 2D engine. This is an extremelly complicated but important file, it should be reviewed more profound.

      8. TODO viasii164.h

        Defines a lot of variables to work with some parts in the registry

2.7 Moodle   Moodle

¿Qué es Moodle?
Plataforma dedicada a ser utilizada a nivel educativo, es gratis y libre. Es el más recomendado si se piensa realizar un curso en línea, debido a su gran funcionalidad y las posibilidades de personalizarlo al gusto de el educador.
¿Qué puede hacer Moodle?
Viene por defecto con una interfaz fácil de usar y accesible. Tanto por computador, como por móvil.
Hecho para educadores
Esta hecho directamente para educadores, y les brinda herramientas para ello, es posible ver todo un informe con todos los cursos que se han hecho, los que se están haciendo, y los que se harán a futuro. He incluso se puede hacer una agenda de ellos.
Comunidad
Tiene una comunidad extensa en la que puedes preguntar cualquier duda, y te será respondida con exactitud, eso es muy importante para poder realizar diferentes cosas con el Moodle.
Calendario
Se puede añadir todo tipo de cosas en los calendario, por supuesto para tener siempre en control el aprendizaje, se pueden realizar reuniones, días de entrega, eventos personales, todo lo necesario para una educador.
Mantenimiento de Archivos
Para poder agregar en cualquier tipo de archivo, y ponerlo en tus cursos sin esfuerzo.
Editor de Textos
Con el que más se estará trabajando, ya que con este podremos añadir el contenido de nuestro curso, esta diseñado para que su uso sea sencillo, y que podrámos añadir archivos a los cursos.
Notificaciones
Para poder realizar alertas que pueden estar sincronizadas con el calendario, muy útil tanto para educadores, como para estudiantes.
Seguimiento de Proceso
En donde se pueden ver todo lo que ha hecho un estudiante, con lo que el estudiante puede ver lo que ha avanzado, y con lo que es educador puede medirlo. Muy útil y indispensable en la educación.
Customización
Se puede personalizar Moodle al gusto de el educador, o de la empresa que desee utilizar Moodle. Se puede diseñar todo un tema completo.
Seguro, multi-usuario
Un sistema en el que pueden estar más de 50 estudiantes, he incluso se puede configurara para que se pueda entrar al curso de manera gratuita.
Multilenguaje
Muy importante, ya que no solo se puede utilizar en un número de países, si no que en cualquier lado se puede adaptar Moodle.
Copia de Seguridad
Se puede realizar una copia de seguridad de todos los cursos e información, para que, a cualquier emergencia, se pueda recuperar la información.
Roles de usuario
Se puede definir en que usuario hace qué, si es un educador, un estudiante, o incluso tiene permiso para administrar la página.
Plugins
Creación de plugins, he incluso integración de elementos externos en Moodle.
Actualizaciones de seguridad
Constantes actualizaciones de seguridad, para mantener todo sitio de Moodle, seguro ante cualquier ataque.
Reportes
Extensos y útiles reportes para poder medir lo que se necesite de nuestra página de Moodle, y por consiguiente, nuestro curso.
Caminos de Aprendizaje
Es posible configurar Moodle, para que el usuario decida como desea si solo puede presentarse de manera Online, se puede presentar ante una clase, o los 2.

Como hemos visto, Moodle es la plataforma más escogida a la hora de realizar cursos online, debido a todas sus características. Veamos como funciona.

2.8 Realización de un programa de reporte de cuentas

Realizaremos un programa de reporte de cuentas, utilizando tres herramientas simples por si solas, pero que hacen su trabajo, y juntas, pueden darnos un funcionamiento excepcional.

2.8.1 Emacs

Editor de textos con múltiples funcionalidades, es software libre. Debido a esto, puede ser extensible por el usuario.

Mi uso de Emacs hasta ahora ha ido bien, pero a pesar de eso, siento que le faltan varios modos, que decido incluir, y ciertas funcionalidades que deseo añadir. Para ello, he buscado en los paquetes de guix, ya que en los repositorios existen diferentes paquetes bastante interesante, que me gustaría revisar.

all-the-icons-dired

Extensión que nos permite añadir íconos a el comando dired, sin duda, si te gusta la customización, debes instalar este paquete, ya que da un nuevo look a la hora de usar dired. Primero que nada, se debe de instalar all-the-icons, el cual puede ser instalado por tu manejador de paquetes o por elpa.

Luego debemos de ejecutar 'M-x all-the-icons-install-fonts', para que podamos tener todas las fonts, las cuales son necesarias para mostrar los íconos. Luego de esto, deberemos poner en nuestro .emacs, lo siguiente:

(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)

Reiniciaremos emacs, cuando ejecutemos dired, podremos ver los íconos ya mostrados, mostrando nuestro éxito.

bash-completion
Mejora la capacidad de la shell de emacs, sin duda algo de tener, para no perder funcionalidades de la shell, en emacs.
php-mode
Necesario a la hora de hacer código en PHP, le añade facilidad a el programador a la hora de hacer este arduo trabajo.
sudo-edit
Una de las cosas que no me gustaban de emacs, era que no podía modificar archivos que necesiten privilegios, esto esta bien por seguridad, pero es necesario en el caso de que yo sea el administrador, para ello, se puede utilizar sudo-edit, que nos permite editar archivos que necesiten privilegios, sin necesidad de cerrar emacs.
dired-hacks
Adiciones a dired.
htmlize
Nos permite volver texto simple a HTML.
lua-mode
Extensiones para hacer código en lua.
ace-window

Indispensable, nos permite movernos de manera más rápida y exacta por buffers de emacs. Al utilizarlo, enumerará los buffers en los que estemos, y al presionar dicho número (puedes configurar para que sea una letra), pasaremos directamente a ese buffer. Sin duda algo necesario, a la hora de trabajar con varios buffers.

Al instalarlo, añadir un hotkey para usarlo es buena idea, el recomendado es M-o, debido a que no es usdo para nada 'importante'. la configuración puede ser tan rápida como añadir a el archivo .emacs el siguiente código:

(global-set-key (kbd "M-o") 'ace-window)

Con esto podremos utilizar ace-window cada vez que utilizemos M-o.

pdf-tools
Nos da la posibilidad de ver, editar y manejar archivos pdf dentro de emacs.
youtube-dl
Extensión para poder utilizar el comando 'youtube-dl' dentro de emacs, en mi caso, utilizo mucho ese comando, por ende, esta extensión es maravillosa. También se podría usar youtube-dl-gui, pero emacs nos dá esa funcionalidad, y nos añade la rapidez de emacs.
all-the-icons
Nos añade distintos iconos a emacs, para la persona que le guste la personalización.
bongo

Nos permite manejar nuestra música dentro de emacs. Utiliza backends como por ejemplo, VLC, para ejecutar su música, al ser ejecutado por primera vez, te da un pequeño texto que explica el cómo añadir tu música, sin duda, muy bueno para principiantes que deseen tener su música en emacs al instante. En lo personal, asigné una tecla para poder pausar y resumir la música que esté escuchando en todo momento, pusé en mi .emacs lo siguiente:

(global-set-key (kbd "M-q") 'bongo-pause/resume)

erc-hl-nicks
Le da más vida a erc, haciendo hincapié a los nombres de usuario.
pulse-audio-control
Si vamos a tener música desde emacs, debemos de tener un control de volúmen, para eso y para más es esta extensión.
pretty-mode
Nos permite reemplazar elementos con UniCode, le dá una vista mucho mejor a nuestro código.
desktop-environment
Nos permite manejar nuestro entorno desde emacs, por ejemplo, el brillo, el volumen, etc.
geiser
Colección de major y minor modes, a la hora de codificar con Lisp, que se extiende a scheme y otras familias de lisp.
wget
Nos permite usar el comando wget dentro de emacs, similar a la funcionalidad de youtube-dl.
web-beautify
Nos permite movernos más comodamente a la hora de codificar paquetes de java, css y html.
helm
Necesario para auto completar en diferentes lenguajes.
Magit
Manejar git dentro de emacs.
centaur-tabs

Extensión que añade pestañas de acuerdo a los archivos que tengamos, le da un nuevo look a emacs, y sin duda, cualquiera debe de probar su funcionamiento. Luego de ser instalado, se debe aplicar la siguiente configuración:

(require 'centaur-tabs) (centaur-tabs-mode t)

De esta manera, siempre que iniciemos emacs, tendremos centaur-tabs activado, yo personalmente, utilize las siguientes dos opciones:

(centaur-tabs-headline-match) (setq centaur-tabs-style "wave")

Esto genera que el fondo de atras de las pestañas, y hace que las pestañas se muestren de una manera en específico, existen diferentes maneras, las cuales pueden ser encontradas en el github de el proyecto 'centaur-tabs'.

  1. SpaceMacs

    Distribución de Emacs, la cual provee al usuario un entorno completo configurado, su principal atractivo, la posibilidad de adentrar Vim dentro de el entorno de Emacs. su instalación es bastante sencilla, que consta de hacer un backup de los archivos de emacs, y copiar los archivos de Spacemacs, aquí el tutorial de como hacerlo: Spacemacs, instalación.

    Al ser emacs, es bastante extensible, y sin duda es recomendable la instalación de este tipo de distribuciones, ya que la comunidad añade bastantes cosas.

    1. TODO Paquete de Guix, Spacemacs
  2. flyspell
    ¿Qué es flyspell?
    Programa que se puede implementar en emacs para corrección de escritura en general, con esto me refiero a que, si se busca un corrector a la hora de programar, se debe usar en vez 'flymake', el cual está especializado en eso.
    ¿Cómo activarlo?

    La activación de flyspell no es fácil, no porque se deba escribir cualquier cantidad de líneas de codigo, si no porque hay que saber entender la funcionalidad de flyspell, sencillamente es la siguiente:

    flyspell -> ispell -> aspell

    Con esto me refiero a que flyspell utiliza ispell para sus correciones, el cual a su vez utilizar aspell. Teniendo esto entendido, sabemos que debemos tener los 3 instalados y configurados…

    Para ello utilizaremos la interfaz Emacs-Guix, una maravilla de el manejador de paquetes GNU/Guix (es incluso mejor si se usa con Guix System Distribution).

    M-x guix p N 'flyspell'

    Esto nos buscará un paquete utilizando la interfaz de emacs guix para la búsqueda de el paquete 'flyspell', si no está instalado, se debe de marcar con la tecla 'i', y posteriormente instalado con la tecla 'x' (para ejecutar los mandados). En el caso de que se esté viendo la descripción del paquete, con utilizar 'i' será suficiente para que un minibuffer te pregunte si deseas instalar el paquete, a lo que responderemos con 'y', para indicar 'si'.

    Este proceso lo haremos de nuevo solo con 'aspell' (ispell) ya estará instalado, buscaremos el paquete y instalaremos 'aspell' y 'aspell-dict-XX'. XX refiriendose a el dicconario que se quiera, se puede ver sus descripciones en la interfaz de emacs-guix, por ejemplo, 'Spanish dictionary …', por ahora, ese es el que instalaremos.

    Luego de instalar aspell, por lo general no se debe de hacer ninguna otra configuración, ya que flyspell y ispell se autoconfiguran a el idioma a utilizar en tu locale. En el caso de que tu locale sea diferente, deberemos de utilizar en emacs:

    'M-x flyspell-change-dictionary', en el pulsaremos <TAB> para ver las posibles completaciones, y veremos castellano, inglés, esperanto y otros.

    Luego de esto, simplemente sitúate en el archivo en el que quieras checkear las palabras, y ejecuta:

    'M-x flyspell-mode'

    Esto activara flyspell, luego, para comenzar el checkeo, ejecutar:

    'M-x flyspell-buffer'

    Esto comenzara el chequeo, y nuestro trabajo estará completado.

    Diferentes diccionarios

    En el caso de que se utilizen diferentes diccionarios, se puede añadir el siguiente código:

    #+BEGINSRC emacs-lisp (defun fd-switch-dictionary() (interactive) (let* ((dic ispell-current-dictionary) (change (if (string= dic "castellano") "english" "castellano"))) (ispell-change-dictionary change) (message "Dictionary switched from %s to %s" dic change) ))

    (global-set-key (kbd "<f8>") 'fd-switch-dictionary) #+ENDSRC

    Ahora, a la hora en que se necesite cambiar de idioma, simplemente pulsaremos f8.

2.8.2 Ledger-cli

Sistema de manejo de cuentas de doble-entrada, el cual es usado mediante la línea de comandos. Utilizado para manejar ingresos, utilizando el debe y el haber.

Sistema de manejo de cuentas de doble-entrada
Se refiere a un sistema de manejos de ingresos, en el cual en una transacción, deben de haber mínimo dos cuentas involucradas.

Es una herramienta de reporte que presenta su propio formato de textos, con el cual podremos presentar varios tipos de reportes. Es una herramienta simple, debido a que no tiene GUI, pero a pesar de eso, hace su trabajo, osea que es posible implementarlo en otras aplicaciones.

Podemos tener toda nuestra contabilidad en Ledger-Cli, ya sea inventario, transferencias, efectivo, personal o empresarial.

  1. Reportes

    Lo importante de ledger-cli, es la calidad de sus reportes. La mayoría de estos se pueden utilizar entrando en ledger-cli y mostrando el archivo, con el comando 'ledger-cli -f $archivo', con esto, entraremos a modo interactivo de ledger-cli. Aquí podremos utilizar diferentes comandos que generan diferentes reportes.

    Los reportes más frecuentes que necesitaremos de ledger-cli son:

    balance
    Comando que nos dará una vista de los estados de todas las cuentas que esten en un archivo. Con este comando también podremos filtrar información de qué cuenta queremos información. Quitandonos el trabajo de buscarlo.
    register
    Reporte detallado de las transacciones por fecha. Podremos ver una descripción detallada de nuestros movimientos.
    accounts
    Todas las cuentas que estén en el archivo.
    equity
    Reporte muy importante, ya que nos muestra un balance de cuentas, pero de otra manera, en la que es mas facil conocer el valor con el que se comenzo.
    cleared
    un comando que al ejecutarlo, nos dara dos balances, el primero de la izquierda, sera un balance normal de las cuentas, el de la derecha, el importante, nos mostrara un balance de solo las cuentas que esten terminadas, hablando de los estados que puede tener una cuenta en ledger-cli. Dicho esto, es una cuenta muy importante para saber que se ha gastado realmente, y que se esta por gastar.

    Recordando que los reportes son comandos, por ende, podemso añadirle argumentos, con los cuales filtraremos los resultados, obteniendo los resultados necesitados.

    Si necesitamos ver el estado de una cuenta en específico, basta con nombrarla luego de especificar nuestro reporte, por ejemplo:

    balance Activos

    Para ver el resultado de diferentes cuentas, se puede añadir sin problemas:

    register Activos Pasivos

    Esto nos mostrará todo de las dos cuentas especificadas.

    Payees
    Descripción de quién hizo una transacción, este comando nos mostrará todas las descripciones anteriormente dichas.
    xml
    Transacciones de registro en formato XML.
    lisp/emacs
    Nos muestra las transacciones en emacs-lisp. Esto puede ser utilizado a la hora de implementar ledger-cli a emacs.
    prices
    Nos muestra los precios que le añadimos a los productos. Muy importante si se desea tener un inventario y las equivalencias de dichos productos.

    Existen diferentes opciones que podemos usar para nuestros reportes, ya sean en el registro o en el balance de cuentas, estas opciones nos brindan con más control a la hora de revisar nuestros reportes.

    El sintaxis de un comando de ledger-cli es bastante sencillo:

    
    $ ledger [OPCIONES...] COMANDO [ARGUMENTOS...]
    
    

    Siguiendo esta simple sintaxis, podras usar todos los argumentos y opciones que te daré:

    –help/-h
    Si necesitamos recordar algo de ledger-cli, este comando nos mostrará el manual de ledger-cli, en el cual podremos buscar el comando que se quiere utilizar.
    -file/ -f
    Se utiliza para referirnos a el archivo de ledger-cli que tiene la información que necesitamos, si se usa sin ningún otro parámetro, entramos en un modo interactivo, en el que no tendremos que referirnos de nuevo a el archivo.
    –current/ -c
    Muestra solo las transacciones de la fecha de hoy o antes de ella. Utilizado para filtrar por fecha.
    –begin DATE
    Se usa para ver reportes solo de los días que deseemos ver, DATE tiene que ser una fecha de la que deseemos ver solo lo que siga de esa fecha. Se pude reemplazar –begin por -b.
    –end DATE
    Muestra los reportes antes de la fecha dada, -end puede ser reemplazado por -e.
    –cleared
    Muestra solo transacciones con estado de completados, –cleared puede ser reemplazado por -C.
    –dc
    Muestra el registro o el balance en un formato 'debito/crédito', este comando debe de ser revisado sin duda, ya que es otra buena manera de ver tus reportes.
    –uncleared
    Muestra transacciones no completadas, –uncleared puede ser reemplazado por -U
    –real
    Muestra solo las transacciones 'reales', ignora todas las virtual postings. –real puede ser reemplazado -R.
    –actual
    Muestra transacciones actuales, ignorando todas las transacciones automáticas. –actual puede ser reemplazado por -L.
    –budget
    Muestra las cuentas que entren en el 'presupuesto'.
    –add-budget
    Muestra las cuentas que no entren en el 'presupuesto'.
    –unbudgeted
    Muestra solo aquellas que no esten marcadas en el 'presupuesto'.
    –strict
    Da error en el caso de que en el archivo se encuentre cuentas, tags o productos previamente declarados.

    Las siguientes se le deben de prestar atención, ya que nos permitirán filtrar los reportes por los días que queramos:

    –weekly
    Filtra los resultados y los arregla por semana.
    –quaterly
    Se podría considerar como, un cuarto de año.
    –yearly
    Por año.
    –daily
    Transacciones por día, –daily puede ser reemplazado -D.

    Si te piden que filtres el reporte por año, por 15 días por mes, semana o diariamente, con la simple utilización de estos comandos es posible.

    Existe otro tipo especial de reporte, en el que podremos diferenciar nuestras obligaciones a nuestros gastos, primero debemos de entender los estados que puede tener una transacción en ledger-cli.

    Estado 'cleared' o terminado
    Este estado se refiere a que dicha

    transacción se realizó. Este estado se demuestra con un "*" luego de la fecha.

    Estado 'uncleared' o no completado
    También se le puede llamar

    como 'sin estado'. Se pone a cualquier cuenta que no tenga ningún indicativo de otro estado, es el defecto.

    Estado 'pending' o en progreso
    Muestra que la transacción está en

    progreso, es demostrado con un "!" luego de la fecha.

    Habiendo explicado esto, el reporte cleared muestra las cuentas que esten completadas y las que no, por lo que es muy buena para diferenciar nuestras transacciones. El comando es 'cleared'.

  2. ¿Qué se le puede añadir a una transacción?

    Con todo lo que hemos visto, podemos notar que en una transacción pueden estar varios elementos, los cuales podremos usar para guiarnos a la hora de filtrar nuestro reportes. Una transacción puede tener:

    las cuentas involucradas
    Aquellas que esten realizando la transacción.
    una fecha 'extra' al lado de la fecha principal
    Puede tener

    cualquier significado que desees, para ledger-cli, sin embargo, no significa nada.

    Diferentes estados de la transacción
    La transacción puede estar

    terminada, pendiente o sin terminar. Esto es hecho así para representar el hecho de que agunos gastos quizá no sean de inmediato.

    Una o multiples descripciones
    Que serán mostradas en un reporte,

    son usadas para describir en mejor detalle dicha transacción.

    Tags y diferentes valores en dichas tags
    Características que

    luego podremos filtrar, y ver solo ese tipo de transacciones.

    Cuentas virtuales incolucradas en la transacción
    Cuentas que no

    existen, pero pueden ser usadas para mejor entendimiento de las cuentas.

    Problemas matemáticos que resolverá ledger-cli
    Por ejemplo, si en una

    compra tenemos diferentes valores, no es necesario sumarlo, si no simplemente poner dicha suma en ledger-cli, y ledger-cli lo resolverá automáticamente.

    Verificación de valores
    Podremos verificar si cierto dinero es

    encontrado en dicha cuenta, o puede ser sacado, de lo contrario, tenemos un error de contabilidad.

    Cambio de productos o monedas
    Hacer el cambio de $50 por 1 pollo,

    por ejemplo, esto nos ayuda principalmente a tener un inventario.

    Precios específicos de productos
    Podemos añadir qué precio tiene

    un lote que estamos comprando de un producto.

    Precios por producto
    O en lugar de añadir el precio por lote,

    podremos añadir el precio por unidad.

    Precios por producto 'especiales'
    Si conseguimos por ejemplo, un

    descuento especial, es posible añadir el precio sin que sea luego referenciado como el precio de dicho producto.

    Arreglo de precio de producto
    Si por ejemplo, un producto ha

    cambiado de precio.

    Descripciones con fechas
    Dentro de una descripción, podremos

    añadir fechas que serán mostradas en el registro, estas no significan nada para ledger-cli, el usuario debe de entender su descripción.

    Diferentes 'payees' o personas involucradas en una transaccion

    Podremos especificar las personas involucras en una transacción.

  3. Cuentas virtuales

    Las cuentas virtuales no son cuentas 'reales', sin embargo, son cuentas que nos podemos crear como puntos de referencia, incluso el hecho de que no sean 'reales' hace que podamos hacer una buena separación.

    Las cuentas virtuales pueden ser usadas para diferentes cosas, pero principalmente para darle nombres 'secundarios' a tus cuentas. Un buen ejemplo de este es el siguiente:

    
    2012-03-10 * KFC
        Gastos:Comida                             $20.00
        Activs:Efectivo
       (Activos:Efectivo:Comida)                 -$20.00
    
    

    En este ejemplo, separamos nuestra cuenta de efectivo en una cuenta más, donde tenemos nuestra cuenta de cuánto gastamos en comida. Esto nos ayuda a tener un orden mayor, en el que tenemos 'budget' de cuánta comida podemos gastar en efectivo.

  4. Reconciliación

    Con el motivo de 'hacer transacciones más reales' en ledger-cli, debemos de emular todo el panorama, entre ellos, el hecho de que hay ciertas transacciones que puedan no completarse inmediatamente.

    Para esto, existen diferentes tipos de estados de una cuenta en ledger-cli:

    No Terminado
    Por defecto, la cuenta tiene este estado, que muestra que dicha transacción aún no ha sido completada.
    En Proceso
    Como dicta el nombre, muestra que dicha transacción está en proceso. Una cuenta en progreso contiene un "!".
    Terminada
    Una transacción en la que todos los movimientos fueron hechos, está representada con un "*".

    Por ejemplo, se deben considerar las siguientes transacciones:

    
    2019/09/11 * Cuenta De Apertura
        Activo:CuentaCorriente                   $236.22
        Patrimonio:BalanceDeApertura
    
    2019/09/12 ! Transferencia a otro banco
        Pasivo:DeudaEnOtroBanco                   $41.43
        Activo:CuentaCorriente
    
    
    2019/09/13 Compra en panadería
        Gastos:Comida:Pan                         $12.45
        Activo:CuentaCorriente
    
    

    Aquí podemos ver transacciones normales, en orden, declaro que comienzo con 236.22 dólares, el "*" luego de la fecha demuestra que dicha transacción está completada.

    Se hace una transacción a otro banco, la cual está en progreso, digamos que la transacción durará 3 días, luego podremos reemplazar el "!" por una "*", demostrando que ya se completaron los movimientos.

    Por último, tenemos la transacción de la compra en una panadería, la cual no está terminada, esto obviamente es incorrecto, a menos que le debamos ese dinero a esa panadería, en el caso de que no, se le debe de marcar como completado con un "*".

  5. Ledger-Cli mode

    Modo de Emacs que nos permite una navegación sencilla en textos de ledger-cli. Para poder instalarlo en guix, se debe de utilizar: guix install emacs-ledger-mode.

    Lo primero que podemos notar, es que en ledger-cli mode, se divide el texto en bloques, es una auto-separación que realiza emacs-ledger-mode, para facilitar su lectura y uso.

    Sin embargo, sigue siendo texto sin formato, o texto simple. La única diferencia es que están ordenados de una manera sencilla a la lectura, principalmente a la organización. Al utilizar tab, podemos organizar el texto de manera gerárgica, dividiendo la información por ejemplo, en fechas.

    Una manera más sencilla de movernos por los archivos, o para ser más exacto, entre las divisiones que genera emacs-ledger-mode, es utilizar M-n para la división próxima, y M-p para la anterior.

    Al presiona M-q se pueden 'ordenar' los elementos

    Para añadir transacciones, podemos utilizar C-c C-a, aquí podemos comenzar a generar una nueva transacción.

    Sin duda, podremos generar diferentes comandos que son la joya de ledger-cli dentro de emacs.

    1. Reportes dentro de emacs

      Sabemos que la luz de ledger-cli brilla más en sus reportes, debido a esto, con emacs-ledger-cli-mode podremos generar dichos reportes dentro de emacs, para así no tener que ir a una terminal y pedir el reporte a ledger-cli, para generar dicho reporte, deberemos de presionar 'C-c C-o C-r', esto nos mostrará un minibuffer que nos preguntara qué reporte queremos, con esta interfaz podremos escoger cualquier reporte de ledger-cli.

    2. Filtrando reportes

      Cuando hablamos de filtrar reportes, podrás recordar que en ledger-cli se puede filtrar por fechas y otros parámetros, emacs-ledger-mode no se queda corto de esto, y nos permite buscar un término el cual será buscado y mostrado en el buffer. Para realizar esto, debemos de presionar 'C-c C-f', aparecerá un minibuffer preguntándonos por las palabras que deseemos buscar, y luego de ser ingresadas, habrá terminado el filtrado.

    3. Añadiendo Transacciones

      Para añadir una transaccion el emacs-ledger-mode, existen dos maneras.

      manualmente
      Ingresar la información de una manera en que ledger-cli pueda leerla.
      automática
      Utilizando el atajo de emacs-ledger-mode 'C-c C-a' podremos añadir una transacción de la manera más rápida, ya que simplemente nos preguntará la fecha, y de acuerdo a ella, nos situará en donde debe de estar dicha fecha, y podemos proceder a hacer la transacción.

      Luego de añadir la transacción, se pueden añadir descripciones, tags o fechas de todo tipo, por ejemplo, para añair una descripción de una fecha, nos irémos hacia cualquier parte de la transacción a la que deseemos añadir la descripción, presionaremos 'C-c C-t', y nos aparecerá un minibuffer en el que podremos añadir fechas, lueg ode seleccińar la fecha que queramos añadir, se añadirá automáticamente.

    4. Balance rápido

      Un balance el estado de todas las cuentas, es un reporte bastante básico de ledger-cli, y para mostrarlo en emacs-ledger-mode debemos de hacer lo siguiente:

      Si deseamos ver un reporte de los estados de nuestras cuentas, simplemente debemos de presionar el atajo 'C-c C-p', nos aparecerá un minibuffer en el que nos preguntará a qué cuenta deseamos hacerle el reporte, en el caso de todas las cuentas, simplemente presionar RETURN sin especificar ninguna cuenta.

    5. Copiar transacciones

      Para copiar transacciones, por ejemplo, si tenemos las mismas cuentas involucradas pero con otra fecha, simplemente deberemos de presionar 'C-c C-k', un minibuffer nos preguntará una fecha, en la cual deberemos de añadir una fecha en la que queramos hacer la transacción, luego de que la transacción sea copiada, se puede cambiar lo que deseemos, dicciendo por ejemplo, que los números involucrados son diferentes.

    6. Calculando Cantidades

      En ledger-cli podremos calcular todas las cuentas que necesitemos, y luego ser copiado en ledger-cli, tomemos como ejemplo una compra en el supermercado, en la que debemos de separar cada producto por precio, podremos calcular cada uno de estos directamente en ledger-cli. Usando el atajo 'C-c C-b' nos mostrará una calculadora, en la que podremos nuevamente, calcular lo que necesitemos y posteriormente copiar el resultado final con 'y'.

    7. Estados de las Transacciones

      Sabemos que ledger-cli tiene 3 diferentes estado de las cuentas, una para transacciones terminadas, pendientes y no terminadas (no terminadas también puedes toarlas como sin estado).

      Lo importante es que con emacs-ledger-mode podremos de completar una transacción fácilmente, con la utilizacion de el atajo 'C-c C-c', esto 'completará' la línea en la que esté en ese momento el cursor, si se desea completar la transacción completamente, se puede usar el atajo: 'C-c C-e'

    8. Alineado de Líneas

      Para mantener el archivo agradable a la vista, con buenos espacios, se puede usar el atajo 'M-q', esto nos arreglará los espacios de la transacción de una manera más agradable. Algo muy importante para mantener el orden en nuestro archivo.

    9. Eliminar Transacciones

      Para eliminar transacciones, no hay que explicar nada más que el arajo 'C-c C-d'.

    10. Filtrado de transacciones

      Para filtrar el mostrado de las transacciones, utilizamos el atajo 'C-c C-f', esto nos permitirá añadir diferentes descripciones para el filtrado de transacciones. Se puede filtrar por fecha, tag o descripción.

    11. Transacciones automáticas

      Podemos añadir transacciones automáticas utilizando emacs-ledger-mode, e incluso serán más entendibles que hacerlos de la forma normal que nos brinda ledger-cli. Por ejemplo, para especificar que una transacción ocurre cada primero y cada quince de cada mes y año, considere el siguiente ejemplo:

      [*/*/1,15] Día de Paga Ingresos:Trabajo $1000.00 Activos:CuentaCorriente

      Este ejemplo debe de ser auto-explicativo, "*" se utiliza para referirse a un 'todo', en este caso, a cada fecha en el apartado de año y mes, entonces, cada año y cada mes, los días primero y quince, se realiza esta transacción.

  6. Ejemplos
    
    2019-02-12 Cuenta de el Pacífico
        Gastos:Utilidades:Teléfono                $23.00
        Activo:Efectivo
    
    

    Esto es un ejemplo muy sencillo, sin embargo, se pueden ver diferentes elementos en este simple archivo de ledger-cli.

    Primero que nada, para añadir una transacción válida a ledger-cli, se deben de tener tres importantes elementos:

    • La fecha
    • La cuenta a la que se le añadirá la cantidad dictada
    • La cuenta de donde viene dicha cantidad dictada

    No me refiero directamente a los dólares en 'cantidad dictada' debido a que en ledger-cli se pueden utilizar cuantas 'monedas' se necesite, incluso 'equivalencias', ya sean euros, yenes, manzanas o peras.

    Luego de tener las 3 necesidades básicas de una transacción en ledger-cli, se le pueden añadir más cosas, fechas, descripciones o más transacciónes. Todas con el fin de una mejor organización.

  7. Estructura Básica de las cuentas

    En ledger-cli se puede tener una contabilidad con cualquier cuenta que deseemos crear, sin embargo, para poder tener mejor consistencia y entendimiento de lo que sucede en nuestra contabilidad, es bueno entender las cuentas básicas de la contabilidad, y a las que es bueno referirse a la hora de hacer una contabilidad con ledger-cli.

    Gastos
    Hacia donde el dinero va o mandamos. Por ejemplo, a la hora de comprar algo como, cómida en un restaurante, este deberá ir a gastos, en lugar de una inversión, el cual iría a otra categoría.
    Activos
    Donde el dinero 'está', o se mantiene. También se le pueden llamar Bienes. Eete es dinero que se 'posee', por ejemplo, el de una cuenta de banco, o en efectivo. Como estos son dinero que posées, son activos.n
    Ingresos
    De donde viene el dinero. Por ejemplo, al yo cobrar dinero de mi trabajo, este sería de ingresos.
    Pasivo
    Dinero que se debe. Se debe diferenciar de Gastos ya que, gastos sería algo más 'inmediato'
    Equidad
    Dinero que se debe a los accionista y empresarios, aquellos que invirtieron a la empresa. Ese dinero es la equidad, también se le puede llamar patrimonio, ya que con ese dinero por lo general se compran muebles o mejoras para la empresa, pero es una deuda de la empresa.

    Por ejemplo, para hacer una cuenta de un restaurante al que visitas constantemente, se puede hacer la siguiente cuenta:

    Gastos:Comida:Restaurante:KFC

    Comentarios
    Los comentarios que 'detecta' ledger-cli son aquellos que empiezan por: |, ;, #, * y %.
  8. MetaDatos

    Se refiere a descripciones extras que se le pueden añadir a las transacciones de ledger-cli. Estas pueden ser Tags o simplemente descripciones. Por ejemplo:

    
    2012-03-10 * KFC
        Gastos:Comida                             $20.00
        Bienes:Efectivo
        ; :Comida:KFC:'Un ejemplo de una descripción'
    
    

    ':Comida:KFC: es el tag, descripciones pequeñas, incluso se pueden expandir, 'Un ejemplo …' es un ejemplo de una tag con una descripción mayor.

    Payee es una descripción muy importante, es aquella luego de la fecha, 'KFC'. Podrías pensar que es como 'Aquella persona que realizó la transacción', si se piensa de esta manera, se puede utilizar correctamente.

    Digamos que tu empresa vendió un producto a el cliente 'MaxiPapel', este se debe poner el en payee, para que al utilizar el comando 'payees', nos de una lista de clientes.

    Para referirnos a diferentes personas que esten realizando la transacción, se puede tomar como ejemplo la siguiente transacción:

    
    2019-06-17 Ejemplo de varios Payees
        Activos:Banco                            $400.00; 400 dólares al banco.
        Ingreso:Cheque1                          $100.00; Payee:Miguel
        Ingreso:Cheque2                          $100.00; Payee:Marcos
        Ingreso:Cheque3                          $200.00; Payee:José
    
    

    Al mostrar esto en el registro, aparecerán los nombres de las diferentes personas que participaron en la transacción. Incluyendo la pequeña descripción que añadi de '400 dólares al banco'.

  9. Productos y Equivalencias

    En ledger-cli manejaremos diferentes monedas, productos y inventarios completos. Añadir equivalencias para dichos productos, así manejando nuestra contabilidad de la manera más inteligente.

    
    2019/09/05 * Comienzo de Inventario
          Inventario:Manzanas                       MANZ34 @ $2.00
          Inventario:Computadoras                    COMP2 @@ $2000
          Inventario:Peras                           PER22 
          Patrimonio:ComienzoInventario
    
    2019/09/07 * Venta de cliente: Cliente 
          Activo:CuentaCorriente                    $12.00
          Inventario:Manzanas                        
    
    

    Añadimos en el inventario manzanas, computadoras y peras, desde la cuenta 'Patrimonio:ComienzoInventario', puedes pensar que dicha cuenta es como 'Patrimonio:CuentaDeApertura'.

    En las manzanas, "@" indica que el precio de cada manzana es de $2.00 dólares, ya sea en la que compramos, o en la que venderemos, en contraste, en computadoras, el doble "@@" indica el precio de total, las dos computadoras en $2000. También sería lo mismo poner solo un "@" e indicar que el precio por unidad es de $1000.

    Sin embargo, en Peras no pusimos equivalencia, solo sabemos que tenemos peras en el inventario.

    La transacción final es muy importante, aquí estamos diciendo que obtuvímos 12 dólares desde las cuenta de manzanas, (por una venta que nos dio dicha cantidad de dinero). Esto es posible debido a que podemos hacer un 'intercambio' de monedas, intercambiando los dólares por las manzanas. Sin embargo, debido a que especificamos que cada manzana valia '2' dólares, sabemos que vendimos en total 6 manzanas.

    Todo esto lo realiza ledger-cli por ti, ledger-cli guarda el hecho de que cada manzana cuesta '$2.00', así que ahora mismo tendríamos automáticamente 28 manzanas en el inventario.

    El siguiente ejemplo es de un viaje a Europa, en el que tuvimos que cambiar de moneda de dólar a euro, y fuimos a un restaurante y gastamos dichos euros:

    
    2019-09-23 Cambio de moneda en Europa
        Activos:Efectivo                          €50.00
        Activos:CuentaCorriente                  $-66.00
        ;Aquí estamos cambiando dólares por euros
    2019-09-24 Comida en Europa
        Gastos:Negocio:Viaje                      €35.00
        Activos:Efectivo
    
    

2.9 Redes e Internet

Es importante tener una idea clara de las redes, ya que son lo que mueven a el mundo, y lo que lo harán por bastante tiempo.

Dirección IP

Protocolo de direcciones de Internet. Es un número asignado a cada dispositivo, con motivo de poder referirse a dicho dispositivo, y no a otro, por ende, el IP asignado a dicho dispositivo, está ya 'ocupado'.

Hoy en día utilizamos el protocolo IPv4 (IP versión 4), el cual está hecho de 32 bits y cuatro grupos, o switches. El IPv4 genera IPs desde 0.0.0.0 hasta 255.255.255.255.

Clases de Direcciónes IP
Las direcciones IP han sido clasificadas de acuerdo a sus rangos, ya que pueden variar:
Clase A
0.0.0.0 - 127.255.255.255
Clase B
128.0.0.0 - 191.255.255.255
Clase C
192.0.0.0 - 223.255.255.255
Direcciónes IP Públicas y Privadas
Las direcciónes IP no son ilimitadas, como vimos, poseen un límite de 255 números, por decir algo. Por ende han sido diferenciadas en públicas y privadas.
IP Privada
Es aquel rango de IPs que está destinada a ser utilizada en conexiones locales, esté rango de direcciónes es: 192.168.0.0 - 192.168.255.255, 10.0.0.0 - 10.255.255.255 y 172.16.0.0 - 172.16.255.255. La más común siendo 192.168, si verifica su IP, está probablemente comienze por 192.168.
IP Pública
Aquellas destinadas a ser utilizadas públicamente, son todas aquellas que no entren en los rangos anteriormente presentados, estos son más diversos, por ende, podemos ver que nuestra IP pública puede variar, y no necesariamente debe comenzar por 192.168 o similares.
Puertos
Se podrían considerar algo dentro de una dirección IP, nosotros podemos conectarnos a un dispositivo mediante una dirección IP, pero debemos especificar exactamente en 'qué' parte nos conectaremos de el dispositivo. Por ejemplo, si nos queremos conectar con un servicio en específico, debe de ser refiriendonos a dicho servicio, por medio de su puerto.
SubnetMask
La mascara subnet es el elemento que separa los dos componentes que tiene una dirección IP, separando la dirección IP en la red y en los hosts. Esto es muy utilizado si es necesario dividir una red, dividiendo una red se pueden obtener mejor seguridad y mejor latencia en la red.

2.10 Presentación en Org

Para realizar una presentación en org, se debe tomar en cuenta diferentes cosas:

  1. Se debe de tener instalado 'Texlive'
  2. Debemos de saber que cada 'arbol' de org será considerado una diapositiva

Teniendo en cuenta estos tres elementos, lo que queda es comenzar a experimentar, ya que lo escrito en org, al ser exportado, se verá de una manera en las diapositivas 'por lo general buena', si nó, simplemente modificarlo.

El archivo org debe contener lo siguiente:

#+options: ':nil *:t -:t ::t 
#+options: <:t 
# #+options: H:3 # Este parámetro corrije Outline pero daña títulos y diap
#+options: \n:nil
#+options: ^:t
#+options: arch:headline 
#+options: author:t
#+options: broken-links:nil c:nil creator:nil d:(not "LOGBOOK") date:t e:t
#+options: email:t f:t inline:t num:t p:nil pri:nil prop:nil stat:t tags:t
#+options: tasks:t tex:f timestamp:t title:t toc:f todo:t |:t
#+title: Título de la presentación
#+subtitle: Descripción breve de la presentación
# ¡Al gusto del contador y del gerente!
#+author: Autor de la presentación
#+date: Fecha de la presentación
#+email: E-mail de el autor
#+language: es
#+select_tags: export
#+exclude_tags: noexport
#+creator: Emacs 26.2 (Org mode 9.2.5)
#+startup: beamer
#+LaTeX_CLASS: beamer
#+LaTeX_CLASS_OPTIONS: [bigger]

Luego de que se tenga esto, se podrá escribir normalmente en org-mode, cuando ya tengas una presentación la cual quieras ver su aspecto. deberemos de hacer un org-export.

C-c C-e l P

Esto generará un archivo PDF en Beamer, generando la separación de las diapositivas.

Para añadir una imágen, es tan sencillo como añadirla normalmente en org. La imágen debe de estar ubicada en el mismo directorio en la que está el archivo de org-mode, y se debe de referir a el por medio de:


[[./imagen.png]]

Lo último debe estar unido en la primera línea al final

De esta manera, nos estaremos refiriendo al archivo, sin importar si es .png o .jpg.

2.11 Inicio Remoto

Para poder controlar a una computadora remotamente, lo mejor es utilizar ssh, ya que nos permite incluso copiar archivos, usar comandos, es basciamente usar la computadora como si estuvieramos en ella, para ello es importante:

Generar un llave publica

Esto es importante debido a que nos da mas seguridad, que simplemente escribir la clave a la hroa de entrar a la maquina.

Para ello necesitaremos instalar openssh, con ella, ejecutaremos este comando:

ssh –gen-key

Esto nos permitara hacer una llave privada y una llave publica, la llave publica sera como el nombre dice, publica, en cambio pla privada no se la deberemos dar a nadie, bajo ninguna circunstancia, debido a que es la que utilziaremos para desencriptar lo que nos envien.

Con esto, luego podremos hacer que al esr verificada dicha llave, no deberamos de poner la clave para entrar.

Luego pondremos la llave en la maquina a la que nos queremos conectar.

Copiar archivos mediante ssh

Para lograr esto, se puede utilizar el comando scp, un comando especializado para copiar archivos mediante ssh, el uso es:

scp -P $puerto $archivo-a-copiar $destino://a-donde-se-desee-copiar

utilizando este sintaxis, podremos copiar cualquier archivo mediante ssh.

Author: Minall

Created: 2019-09-14 sáb 22:30

Validate