From f7794a1479a7879becc711c57aebdc84e769b9df Mon Sep 17 00:00:00 2001 From: Ekaitz Zárraga Date: Fri, 29 Mar 2019 13:59:38 +0100 Subject: Update many --- content/CREAM.md | 56 +++++++++++ content/call-me-maybe.md | 185 ++++++++++++++++++++++++++++++++++++ content/clopher/clopher01.md | 15 +++ content/desktop.md | 33 +++++++ content/first_time.md | 114 ++++++++++++++++++++++ content/genesis-es.md | 148 +++++++++++++++++++++++++++++ content/genesis-eu.md | 135 ++++++++++++++++++++++++++ content/genesis.md | 146 ++++++++++++++++++++++++++++ content/pages/about.md | 54 +++++++++++ content/posts/call-me-maybe.md | 185 ------------------------------------ content/posts/first_time.md | 114 ---------------------- content/posts/genesis-es.md | 148 ----------------------------- content/posts/genesis-eu.md | 135 -------------------------- content/posts/genesis.md | 146 ---------------------------- content/posts/templates-released.md | 181 ----------------------------------- content/static/images/ekaitz.jpg | Bin 0 -> 74914 bytes content/templates-released.md | 181 +++++++++++++++++++++++++++++++++++ 17 files changed, 1067 insertions(+), 909 deletions(-) create mode 100644 content/CREAM.md create mode 100644 content/call-me-maybe.md create mode 100644 content/clopher/clopher01.md create mode 100644 content/desktop.md create mode 100644 content/first_time.md create mode 100644 content/genesis-es.md create mode 100644 content/genesis-eu.md create mode 100644 content/genesis.md delete mode 100644 content/posts/call-me-maybe.md delete mode 100644 content/posts/first_time.md delete mode 100644 content/posts/genesis-es.md delete mode 100644 content/posts/genesis-eu.md delete mode 100644 content/posts/genesis.md delete mode 100644 content/posts/templates-released.md create mode 100644 content/static/images/ekaitz.jpg create mode 100644 content/templates-released.md (limited to 'content') diff --git a/content/CREAM.md b/content/CREAM.md new file mode 100644 index 0000000..f019ddb --- /dev/null +++ b/content/CREAM.md @@ -0,0 +1,56 @@ +Status: draft +Title: C.R.E.A.M. +Date: 2019-01-3 +Category: +Tags: +Slug: CREAM +Lang: en +Summary: + Ethics, philosophy and random thoughts. + + + +In this year I focused on the business part of ElenQ Technology and tried to +make it a profitable business. I'd like to share more about my actual job at +ElenQ Technology soon, but that's not probably going to happen in this post. + +Let me tell you what's not my job instead: Looking for profitability is not my +job, or it shouldn't be at least. Agree? + +It's being a lot of fun to see me struggle with that part of the business, +where my tech expertise or my engineering skills have nothing to do with the +result. It's true that, somehow, the rational thinking skills derived from +engineering, programming or so are useful, but there's not direct relationship. + +So, if you take the decision to run your own thing, be prepared to deal with +all this stuff. + +Don't get me wrong, I'm not complaining, I'm just thinking about it. + +That said, I'd also like to add the fact that ElenQ Technology has a not very +common component that makes this discussion much more interesting: we have +ethics. More than that, the most important point there is that we have **our +own** ethics so we need to align our goals with our clients' quite often and +that's a complex issue. + +Nothing really hard if you work for companies or people that have an ethical +component you'd think, right? + +Also, in the case they don't it sounds impossible to run this kind of business, huh? + +Ok, I'll try to answer from my (biased) perspective. But I need some context +before tackling such a complex topic. + +... + + +Wu-Tang said: + +> Cash rules everything around me +> C.R.E.A.M., get the money +> Dollar dollar bill, y'all + +I think they were right, even if they have been misinterpreted many times. + + + diff --git a/content/call-me-maybe.md b/content/call-me-maybe.md new file mode 100644 index 0000000..22aeece --- /dev/null +++ b/content/call-me-maybe.md @@ -0,0 +1,185 @@ +Title: Call me maybe +Date: 2019-01-09 +Category: +Tags: +Slug: call-me-maybe +Lang: en +Summary: Recursion, stacks and optimizations. + +Do you remember what happens when you call a function in your program? + +What happens when you make too many nested calls?[^1] + +When you call your functions, there some stuff going on in the memory, some +variables, the program counter and all that, that must be stored somewhere to +be able to come back to the place you called the function when the function +ends. Right? + +The place where all that is stored is the stack. You already know all this. +When you call many nested functions, the stack goes pushing more and more data, +and there's no chance to pop it, so it overflows. + +This can happen anytime but there's more risk for that when you call functions +recursively, because they call themselves many times by definition. In a +non-recursive program it can happen too, but devices can handle big levels of +nesting so it's more unlikely to happen (in small devices like microcontrollers +or so, you have to take care of this too). + +This doesn't mean recursive functions will result in a stack overflow always. +That will only happen when the nesting level is bigger than the stack size. + +> You are so stupid the recursive function that calculates your stupidity +> causes a stack overflow. +> — Heard in a computer science class + +But this is not always true. There are some optimizations that can change this +behaviour and allow you to create stack-safe recursions. Let's talk about +**tail-call optimization**. + +Some programming languages implement tail-call optimization, that, if used +correctly, avoids stack overflows in recursive calls and increase performance. +First of all, in order to be able to make a tail-call optimization, the +function **must** have a call as its last action (tail-call). This means **it +requires to be ordered in an specific way**. Let's see it with an +(oversimplified) example (in Python, but don't pay attention to the language): + + + ::python + def factorial (a): + """ This function does not provide a tail-call, because the last thing + to execute in it is a multiplication, not a call """ + if a == 1: + return 1 + return a * factorial(a-1) + + def factorial_tail (a, acc=1): + """ This function provides a tail-call, the last thing happening on it + it's a function call.""" + if a == 1: + return acc + return factorial_tail(a-1, acc=acc*a) + + +As the comments say, the first function is not performing a tail-recursion, but +the second is. But, what's the difference? + +The main point is the first function, `factorial`, needs to go back in the call +stack to retrieve previous step's `a` value, while the second function doesn't. +That's why the second can be optimized and the first not. + +The optimization exploits this behaviour in a really clever way to avoid the +stack overflows I told you before. Tail call optimization just changes the +input parameters of the function and calls it again, replacing the original +call with the new call with different input arguments. This can be made because +the function is written in a way that doesn't need anything from the previous +step. + +Imagine that we introduce a `3` in the first and the second function, let's +compare the execution. Let's check `factorial` first: + +- Call `factorial(3)` + - Call ` factorial(2)` + - Call `factorial(1)` + - Return `1` + - Return `2 * 1` +- Return `3 * 2` + +Now with the `factorial-tail` function but without any optimization: + +- Call `factorial-tail(3)` + - Call `factorial-tail(2, acc=3)` + - Call `factorial-tail(1, acc=6)` + - Return 6 + - Return 6 +- Return 6 + +See the difference? + +The `factorial-tail` call doesn't need anything from the previous step, the +last `factorial-tail(1, acc=6)` function call's result is the same as the +result of the `factorial-tail(3)` function. That changes everything! + +What tail call optimization does is just change the call arguments and keep +running the same code. There's no need to store anything on the stack, just +change the function call with the tail call. + +Let's optimize the second call now: + +- Call `factorial-tail(3)` +- Replace the call with `factorial-tail(2, acc=3)` +- Replace the call with `factorial-tail(1, acc=6)` +- Return 6 + +This can be stretched further! It can involve different functions! In any place +where a tail-call is made, even if the called function is a different function, +this kind of optimization can be done, reducing the stack size and increasing +the performance. + +If you want to read more about this, there's [a great wikipedia page on the +subject][wikipedia] and you there's [a really good explanation in the book +Programming in Lua][lua]. + + + +But how is all this handled by the programming languages? You may ask. + +The answer is there's not a clear answer, all of them have their own style of +dealing with this. Let me give you some examples. + +**Python**, just to point out the language I chose for the example is no the +best example of this, has no tail recursion elimination. Guido and the +Pythonists[^2] argue that tail call optimization alters the stack traces (which +is true) and that they don't like the recursion as a base for programming, so +they try to avoid it. In CPython there's no tail call optimization, but they +don't forbid (they can't!) any other Python implementation to implement that +particular optimization. There's a really [interesting post by Guido Van Rossum +about this][guido]. + +**Lua**, as you've seen in the [previous link][lua], implements proper tail +calls (as they call them there) and there's nothing the programmer needs to do +to make sure they are optimized. The only thing is to put the tail calls +correctly. + +**Scala** implements tail recursion optimization at compile time so the +compiler transforms the recursive call with a loop in compilation time. That's +interesting because there's a compile time check too. There's an annotation +called `@tailrec` that can be used to make sure that your function is going to +be optimized. If the compiler is not able to optimize it will throw an error if +it has the `@tailrec` annotation. If it doesn't have it, it will simply make a +standard recursion. In the [annotations tour of the Scala language][scala] has +some words about `@tailrec`. + +**Clojure** is a really interesting case too. Clojure doesn't implement +tail-call optimization, but it has one (and only one) special form for non +stack consuming looping: `recur`. This special form rebinds the recursion +point's bindings or arguments and jumps back to the recursion point. The +*recursion point* can be a `loop` special form or a function definition. So, +it's just an explicit call to the tail recursion optimization. Tail call must +be done correctly too, `recur` is only allowed in a tail call and the compiler +checks if it's located in the correct place. Also, it has some specific rules +that must be taken in consideration (multiple arity functions and so on), that +is better to [read in the documentation][clojure]. + + +> *Edited 2019-01-25*: Thanks to a discussion in the fediverse about the topic, +> I found the moment where **Emacs Lisp** got its tail call optimization +> everything explained [in the author's blog][emacs]. It's really interesting. + + + +[^1]: Some help: what's the name of the website you check when you don't know + how to solve your programming problem? + +[^2]: My next music band name. + +[wikipedia]: https://en.wikipedia.org/wiki/Tail_call + +[lua]: https://www.lua.org/pil/6.3.html + +[guido]: https://neopythonic.blogspot.com/2009/04/tail-recursion-elimination.html + +[scala]: https://docs.scala-lang.org/tour/annotations.html + +[clojure]: https://clojure.org/reference/special_forms#recur + +[emacs]: https://chrismgray.github.io/posts/emacs-tco/ diff --git a/content/clopher/clopher01.md b/content/clopher/clopher01.md new file mode 100644 index 0000000..de4972e --- /dev/null +++ b/content/clopher/clopher01.md @@ -0,0 +1,15 @@ +Title: Clopher01- Introducing Clopher +Date: 2019-03-23 +Categories: Series +Tags: clopher +Slug: clopher01 +Lang: en +Summary: The process, the reasons and the conclusions. + +> Read all the posts in [Clopher series here]({tag}clopher). + +When you do a hack (or even a dirty hack) you do it for some reason. You do it +because you can understand the complexity of the problem and you see it's a +complex problem to solve that needs a good enough solution for your case. + +You are facing the complexity. You are seeing it. diff --git a/content/desktop.md b/content/desktop.md new file mode 100644 index 0000000..7f0fa66 --- /dev/null +++ b/content/desktop.md @@ -0,0 +1,33 @@ +Status: draft +Title: Stand up! +Date: 2019-03-06 +Category: +Tags: +Slug: standing-desk +Lang: en +Summary: + Build a simple but useful standing desk by hacking some furniture. + +### Background + +My father is good at DIY stuff. He's really good. I've seen him drawing, +designing and making things since I was a child. + +Further than the dozens of tons of DIY books that can be found at my parent's +house, my father had no specific training on crafts. He's a lawyer, he finished +his studies at almost 60 and he never worked as a lawyer and he probably won't +because he's retired now. + +Maybe because of him my sister and I love making stuff and probably thanks to +my mother's math skills now we are both engineers. We both have been trained on +how to design and how to create stuff in a controlled way which is the part I +like the most and the part that conforms the biggest portion of my job at ElenQ +Technology. + +Since I moved out from my parent's I don't have tools to make a project like +this, neither the workspace to make it, so I needed my father's DIY skills and +his almost pathological tendency to collect tools and materials. I wanted to +make it by myself at the beginning but I was busy and he is retired so... +Perfect match. + + diff --git a/content/first_time.md b/content/first_time.md new file mode 100644 index 0000000..f7038a0 --- /dev/null +++ b/content/first_time.md @@ -0,0 +1,114 @@ +Title: My first time +Date: 2018-06-23 +Category: +Tags: +Slug: First-Time +Lang: en +Summary: Thoughts about my first contribution to free software + +The other day I remembered a very important day on my life, one of those early +beginnings that started to change my mind: **The first time I contributed to +free software**. + +My first contribution was in 2014, more specifically the 22nd of May of 2014. + +That's only 4 years ago. But, at the same time, they already passed 4 years +since then? OMG. + +You get the feeling, right? + +You may think I started coding when I was 10 or something like that. I didn't. +I learned programming in the university and not as well as a Computer Scientist +because I studied Telecommunication Engineering and computers are just a third +of the studies while the other two parts are electronics and signals related +things. + +I'm not a young hacker or a genius. My parents don't like computers. I didn't +live with a computer at home since I was a toddler. That didn't happen. + +Today I want to tell you my story. Not because it's awesome and you'll love it. +I want to tell you my story because it's **really** standard. I want you to see +that you can also contribute to Free Software. Anyone can. + +So, how did it all start? + +I started my university studies in 2009. The first year we had one semester of +C and the next one of C++. Not real programming classes, just introductory +stuff for the languages and computers. A couple of years later we had a +networking subject where I used Linux for the first time. The computers had +*Kubuntu* installed. At that time my laptop started to give me some trouble and +I installed *Kubuntu* in a dual boot and tested it. It was nice. + +Few time later the *Windows* partition failed again and I was comfortable +enough in *Kubuntu* to delete it and use only *Kubuntu*. It was easy. + +The second semester that year another subject had some focus on Linux because +it was a networks and tools subject and I really needed it. We learned to use a +terminal, some SQL and many things like that. Simple tools but they resulted to +be useful in the future. I was really surprised by the power of the terminal +and I studied a lot in my free time I finished the subject with honours just +because I was really interested on it. As I said, I'm not a genius, I was +interested. + +We had a subject about *Minix*, following Andrew Tannenbaum's *Operating +Systems: Desing and Implementation* book and *Minix* version 1, which gave us +the initial needed knowledge about Operating Systems at that time. That started +to give me some info about the ethical part of the free software and also +sparked more interest. + +Next year I had a couple of Operating Systems subjects (the theoretical one and +the practical one). The teacher was part of *KDE Spain*, and he talked about +free software in class. I was quite into it at that time. The practical part of +the subject was real software, we covered the contents of the book called +*Advanced Linux programming*[^1]. That was pure C development and we didn't +have a lot of knowledge on that. We just touched some C/C++ during the first +year and some assembly in a couple of subjects. It was really hard, but it was +really cool. + +We made a small shell. It was great! + +Final year[^2] of the university: I had to make the final project. + +I didn't know what to do so I contacted the teacher who was part of *KDE Spain* +and he mentored me. I installed a IRC client and started talking with the +people at *kde-telepathy* project. I wasn't used to that kind of collaborative +development. Heck, I wasn't used at any kind of development! But it was all +good, mostly thanks to the great people in the project (David, Diane, George, +Martin... *You* are awesome!). + +The project itself was a *KDE* application, *KDE-Telepathy*, a big one. Thanks +to heaven, my part of the project was quite separated so I could focus on my +piece. That taught me to search in a big codebase and focus on my part. Then I +had to code in C++ like in the real life, not like designed problems I've +worked on at the university, and I also had to read tons of documentation about +*Qt*, *KDE* and anything else. + +I started with the contribution that opened this post and I went on until I +renewed the whole interface. It wasn't great, but the code was finally merged +in the application some time later. + +Since then I could say I code almost everyday and I've been studying many +languages more but, at that time, I was relatively new to programming and +computers. + +With all this I mean: + +> If you are interested, try. Everything is going to be fine. You don't need to +> be a genius[^3]. + +[You can check the contribution +here](https://git.reviewboard.kde.org/r/118256/diff/2#index_header). + +Love. + +Ekaitz + +[^1]: It's a great book, by the way. You can find it + [online](https://mentorembedded.github.io/advancedlinuxprogramming/). + +[^2]: When I studied, right before the [Bolognia + Process](https://en.wikipedia.org/wiki/Bologna_Process), the university was 5 + years long for a Masters Degree and 3 for a Bachelor Degree. + +[^3]: But congratulations if you are, that way you'll learn faster and probably + have more reach if you want to. diff --git a/content/genesis-es.md b/content/genesis-es.md new file mode 100644 index 0000000..1d377ae --- /dev/null +++ b/content/genesis-es.md @@ -0,0 +1,148 @@ +Title: [ES] Génesis +Date: 2018-04-15 +Tags: +Slug: Genesis +Lang: es +Translation: true + +Como primer post en este blog *oficial-pero-no-muy-oficial* sólo quiero +presentarme y presentar *ElenQ Technology*. + +Me llamo Ekaitz Zárraga y nací en 1991. Suelo describir mi trabajo como +ingeniero de I+D pero en realidad estudié Ingeniería de Telecomunicaciones y +*sólo* trabajo en ese área. Mayormente me centro en actividades relacionadas +con los ordenadores como, por ejemplo, programar pero también puedo hacer +electrónica y otras cosas. Esa sería mi presentación formal. En la informal +diría que soy una persona bastante curiosa, lo que me ha hecho investigar y +profundizar en otras disciplinas como el arte en sus diferentes formas. Este +último punto explica mucho de lo que vendrá después en este texto. Y eso es +todo en lo que a mí respecta, ya escribiré un currículum vitae informal en el +futuro. + +*ElenQ Technology* es un nombre, una forma de llamar a como soy y a los +intereses que tengo. Además, también es un proyecto de I+D que estoy +desarrollando. Es una empresa distinta a las demás, en la que pretendo generar +conciencia acerca de la tecnología ética mediante el ejemplo, demostrando que +las compañías de tecnología ética pueden ser rentables. No es sólo mi trabajo +en el que hago ingeniería, también es una *performance* artística. Es como una +obra de arte. + +> *ElenQ Technology* es un proyecto artístico que te dice que otro modelo es +> posible. Te recuerda que tienes elección y que no tienes que trabajar en una +> corporación y seguir sus reglas. + +*ElenQ Technology* es, simplemente, el resultado de todas las cosas que he +sentido trabajando para otras compañías y el resultado de un análisis profundo +del estado de la tecnología en mi contexto cercano que, creo, puede ser +extrapolado al resto de lugares con una precisión aceptable. + +Para contextualizar, las grandes empresas del mundo IT en mi zona cercana +tienen un modelo de negocio similar, basado en el *body shopping* (muchas de +ellas haciendo cesiones ilegales en subcontratas). Pagan unos salarios +bajísimos y las condiciones laborales son lamentables. El resto de sectores +tampoco están mucho mejor, pero el caso de las empresas del mundo IT es +escalofriante. + +Los trabajos rara vez son de 8 horas diarias, las jornadas se están alargando +cada vez más y, en muchos, es normal trabajar 10 horas al día. La famosa +*Crisis Económica™* mezclada con una profunda corrupción ha sido el caldo de +cultivo perfecto para que las grandes empresas se aprovechen de los +trabajadores. + +Dicho esto, es muy fácil entender cómo funciona el mundo de la tecnología por +aquí. Grandes empresas ganando insultantes cantidades de dinero mientras que no +respetan a sus trabajadores o clientes, soluciones tecnológicas privativas para +atar a los clientes e impedirles ser independientes, etc. Todo para mantener su +modelo de negocio podrido y corrupto hasta la médula. + +Ese es el estado de las empresas de tecnología en mi entorno, el de las +grandes. Seguro que puede extrapolarse a otros lugares porque muchas de ellas +operan también en el extranjero. + +En mi caso tuve la suerte de acabar en una empresa que parecía un lugar mejor. +Las condiciones eran ligeramente mejores que las que he descrito, o al menos +así lo creía yo. Era un trabajo de Ingeniero de I+D en una empresa no demasiado +grande. Trabajaba en un departamento aislado de menos de 10 personas. Hacíamos +los juguetes nuevos de la empresa. Era divertido. + +Después de algún tiempo allí me di cuenta de cómo funcionaba. No era tan +diferente al resto. Hubo muchas cosas que no quiero compartir aquí pero empecé +a sentirme bastante mal y mi situación personal tampoco ayudó mucho. Siempre he +sido una persona curiosa a la que le gusta aprender cosas nuevas y ese trabajo +dejó de aportarme eso como lo hacía al principio. Empecé a necesitar llenar ese +hueco trabajando en mis proyectos personales en el poco tiempo que me quedaba +al día. La suma de un entorno de trabajo aburrido y deprimente más los +problemas organizativos que teníamos era difícil de gestionar. + +Sumergido en ese entorno deprimente, la empresa, con intención de salir a bolsa +próximamente, quiso exprimir al máximo sus recursos y plantear nuevos negocios. +Nuestro departamento, como encargado del I+D de la empresa, era el responsable +de plantear las nuevas *pruebas de concepto*. Nos pidieron que analizásemos los +datos de la compañía. Literalmente, nos pidieron que siguiésemos a la gente, +que los localizásemos. No les importaba que fuesen nuestros clientes o no. +Querían que localizásemos a *todos*. + +Eso fue la gota que colmó el vaso. Tenía que dejarlo porque eso superaba con +creces el límite de mi ética personal. No me gustan esas prácticas y no podía +ser parte de eso. + +Llevaba tiempo pensando en la forma en la que hacemos tecnología y siempre me +había apetecido probarlo por mi cuenta. Eso me dio el valor que me faltaba +para hacerlo. + +¿Por qué no simplemente cambiar de trabajo? + +Creo que era el momento para intentarlo. Como entusiasta del software y +hardware libre, siempre me ha interesado definir lo que es la tecnología ética +y llevaba tiempo con ganas de aplicarlo en mi campo: el I+D. Además, teniendo +en cuenta el estado de las empresas para las que podía trabajar, decidí cambiar +las cosas de raíz. Decidí intentar un modelo distinto. ¿Tenía alguna otra +alternativa en realidad? + +¿Es una alternativa real trabajar en un entorno deprimente que hace del mundo +un lugar peor? ¿Seguro? + +Piensa en ello. + +*ElenQ Technology* rompe entonces con ese modelo de negocio y hace tecnología +ética de una forma ética. Eso es bueno para mí porque me permite trabajar en +los campos que me gustan y hacer del mundo un lugar mejor lo que, egoístamente, +mejorará el futuro que le deje a mis hijos, si algún día los tengo. Al mismo +tiempo esto es bueno para los clientes de *ElenQ Technology* porque los +proyectos se gestionan de forma que *ellos* son los dueños de la tecnología que +se crea. Para esto último se siguen los principios del Software y el Hardware +Libre y el [Manifiesto del Diseño Ético](https://2017.ind.ie/ethical-design/) +junto con algunas ideas adicionales más específicas del campo al que me dedico +(puedes leer más [aquí][1]). + +Quiero cambiar el mundo. ¿Tú no? + +El problema es que yo no puedo hacerlo solo así que *ElenQ Technology* es una +forma de hacer que otros tomen la misma decisión que yo tomé (o fui forzado a +tomar) y ese es su objetivo principal. + +Cambiemos el mundo juntos. + +### Sobre este blog + +Ya te has dado cuenta que este blog no es el blog oficial de *ElenQ +Technology*. Esto es *mi* blog *oficial-pero-no-muy-oficial* como parte (o +"persona al frente", pero decirlo así no me gusta) de *ElenQ Technology*. + +Aquí escribiré sobre *ElenQ Technology*, sobre su filosofía, objetivos, logros +y ese tipo de temas *oficiales* que me parezcan relevantes pero sobre todo +tengo la intención de escribir sobre las **cosas que hacemos**. Eso es lo que +más me interesa. + +Este sitio será un lugar muy técnico en el que trataré de explicar conceptos +avanzados de forma sencilla para que aprendáis conmigo. Quiero compartir lo que +haga con vosotros. + +### Sobre los idiomas + +Este blog se escribe en inglés, pero algunas de las entradas (como esta misma) +podrán traducirse a otros idiomas. Como el blog soporta traducciones, prefiero +mantener las opción activa para, si es necesario, añadir traducciones +proporcionadas por la comunidad o hechas por mí mismo, como en este caso. + +[1]: https://elenq.tech/es/about.html#ethical-innovation diff --git a/content/genesis-eu.md b/content/genesis-eu.md new file mode 100644 index 0000000..34e89c8 --- /dev/null +++ b/content/genesis-eu.md @@ -0,0 +1,135 @@ +Title: [EU] Genesis +Date: 2018-04-15 +Category: +Tags: +Slug: Genesis +Lang: eu +Translation: true + + +Blog *ofizial-baina-ez-oso-ofizial* honen lehenengo post bezala, nor naizen eta +*ElenQ Technology* zer den aurkeztu nahi dut. + +Hasteko, Ekaitz Zárraga naiz eta 1991. urtean jaio nintzen. Nire burua I+G +ingeniari bezala deskribatzen dudan arren, Telekomunikazio Ingeniaritza ikasi +nuen eta arlo horretan *bakarrik* egiten dut lan. Bereziki ordenagailuekin +lotutako gauzak egiten ditut, programazioa eta horrelakoak, baina elektronika +eta bestelako gauzak jorratzeko ere gaitasuna daukat. Hori da nire sarrera +formala. Sarrera informalean jakin-min handia dudala esango nuke eta horrek +beste diziplina batzutan aritzeko aukera eman didala, haien artean artea. +Azkeneko puntu honek garrantzi handia dauka testu honetan idatzitakoarekin +erlazio zuzena izango duelako. Hauxe da nire aurkezpena, etorkizunean kurrikulum +informal bat egingo dut. + +*ElenQ Technology* izen bat da, nire interesak eta nire izaera adierazteko izen +bat baino ez. Hori esanda, aldi beran nire I+G proiektu independentea da. +Adibidearen bitartez, enpresa etikoak errentagarriak izan daitezkeela +erakutsiz, teknologia etikoari buruz kontzientzia eratzeko helburua duen +enpresa bat da. Ez da nire lana bakarrik, *performance* artistiko bat da. +Artelan baten antzera. + +> *ElenQ Technology* modelo ezberdin bat egin daitekeela esaten dizun artelan +> bat da. Aukerak badaudela eta ez zaudela korporazio baten arauekin lan +> egitera behartuta esaten dizu. + +*ElenQ Technology* beste enpresetan lan egitearen eta nire ingurunean +teknologiaren egoeraren analisi bat egitearen emaitza da, baina uste dut nahiko +modu zehatzean orokortu daitekeela. + +Hasteko, nire inguruko IT enpresek *body-shopping*-ean oinarritutako negozio +eredu antzekoa daukate. Askotan ilegalak diren praktikak egiteaz gain soldata +baxuak ordaintzen dituzte. Beste sektoreak ez dira askoz hobeak baina IT +munduaren kasua guztiz ankerra da. + +Ordutegiak luzatu egin dira azken urteotan. Egunean 10 ordu lan egitea normala +bihurtzen hasi da. *Krisi Ekonomiko™* famatuaren ondorioz, prekaritatea +normalizatu egin da, gehien bat, enpresek argi daukatelako jendeak lanaren +behar larria daukala. + +Hori esanda, erraz ulertu dezakezu teknologiaren mundua nola dagoen. IT +korporazioek haien bezeroak eta langileak errespetatu gabe dirutza egiten dute. +Bezeroak lotuta izateko produktu propietarioak saltzen dituzte. Haien helburu +nagusia daukaten negozio eredu ustelaren etorkizuna bermatzea da. + +Hau da bizi dugun egoera. Lehen esan bezala, erraz orokortu daiteke, aipatutako +enpresa gehienak atzerrikoak direlako eta beste herrialdeetan ere kokatuta +daudelako. + +Nire kasuan, leku hobe batean lan egiten nuela uste nuen. Lan baldintzak +hobeak ziren bertan. I+G ingeniari postu bat nuen enpresa moderno batean. +Hamar bat pertsonaz osatutako departamendu txiki isolatu bat zen. Enpresaren +jostailu berriak egiten genituen. Nahiko dibertigarria zen. + +Denbora pasa ahala, lan baldintzak hain onak ez zirela konturatzen hasi +nintzen. Aipatu nahi ez ditudan gauza asko gertatu zirenez, bertan txarto +sentitzen hasi nintzen eta, gainera, nire egoera pertsonalak ez zuen batere +lagundu. Oso pertsona kuriosoa naiz eta lanak nire jakin-mina asetzeko ematen +zidan aukera desagertzen hasi zen. Nire denbora librean gauza berriak ikasten +eta aztertzen hasi nintzen. Lan aspergarria barneko antolaketa arazoekin batu +zen eta nire bizitza kudeatzea oso zaila egin zitzaidan. + +Depresioan murgilduta, enpresak, burtsara ateratzea helburu zuela, bere +negozioa handitu nahi zuen. Gure departamenduak, enpresaren I+G-aren +erantzulea zenez, enpresaren kontzeptu-proba berrien garapena egin behar +zuen. Enpresak zituen datuak aztertzea eskatu ziguten. Pertsonen kokapena +jarraitzea eskatu ziguten, mundu osotik, edozein momentuan. Ez zuten bezero eta +ez-bezeroen arteko ezberdintasunik egin nahi. *Guztiak* jarraitzeko eskatu +ziguten. + +Hori gehiegi zen niretzat. Arrazoi etikoengatik utzi nuen lana. Ez dut horretan +parte hartu nahi. + +Teknologia eratzen den modua aldatu nahi izan dut beti. Nire kabuz teknologia +egitea eta besteak gauza bera egitera bultzatzea beti egon da nire buruan baina +orain arte ez dut salto hori emateko ausardirik izan. Gertatutakoak falta +zitzaidan bultzada eman zidan. + +Baina, zergatik ez mugitu beste lan bateara? + +Momentua zela uste dut. Denbora luzez ibili naiz teknologia etikoari buruz +pentsatzen eta nire esparruan, Ikerkuntza eta Garapenean, aplikatu nahi nuen. +Gainera, nire inguruko enpresetan izango nituen arazoak ikusita, zuzenean +sustraira joatea erabaki nuen. Beste modelo bat saiatzea erabaki nuen. Beste +aukerarik al nuen? + +Mundua txarrerantz aldatzen giro deprimagarri batean lan egitea benetako aukera +bat al da? + +Pentsatu ondo. + +Orduan, *ElenQ Technolgy*-k nire inguruko konpainien negozio modeloa apurtzen +du. Teknologia Etikoa garatzen du, modu etiko batean. Hori ona da niretzat, +zuzenean, niri gustatzen zaizkidan gauzetan lan egiteko aukera ematen didalako, +etorkizunean eduki ditzakedan umeentzat mundua hobetzen dudan bitartean. Eta +bezeroentzat, proiektuak garatutako teknologia *bezeroarena* izateko moduan +kudeatzen ditugulako, Software eta Hardware Librearean printzipioak eta +[Diseinu Etikoaren Manifestoa](https://2017.ind.ie/ethical-design/) (gure +esparrura moldatuta) jarraituz (gehiago irakurri dezakezu [hemen][1]). + +Mundua aldatu nahi dut, zuk ez? + +Nik bakarrik ezin dudala mundua aldatu konturatu naiz, beraz, *ElenQ +Technology*-k besteak nik (behartuta edo ez) hartu nuen erabakia hartzera +bultzatzea du helburu. + +Aldatu dezagun mundua guztiok batera. + +### Blog honi buruz + +Jada konturatu zara blog hau *ElenQ Technology*-ren blog ofiziala ez dela. +*Nire* blog *ofizial-baina-ez-oso-ofiziala* da, *ElenQ Teknology*-ren parte +(edo buru, baina ez dut hitz hori gustoko) bezala. + +Hemen *ElenQ Technology*-ri buruz idatziko dut, bere filosofia, helburu, +arrakasta, etab.-ei buruz. Baina gehien bat **egiten dugunari buruz** idatzi +nahi dut, hori baita niretzat interesgarriena. Prozesuaren parte egin nahi +zaituztet. + +### Hizkuntzei buruz + +Blog hau ingelesez idatziko da, baina aukera dago testuak (hau bezala) beste +hizkuntzetara itzultzeko. Blogak baimentzen duen bitartean nahiago dut aukera +prest uztea komunitateak itzulitako testuak gehitzeko edota, kasu honen moduan, +nik egindako itzulpenak igo ahal izateko. + +[1]: https://elenq.tech/eu/about.html#ethical-innovation diff --git a/content/genesis.md b/content/genesis.md new file mode 100644 index 0000000..07818ef --- /dev/null +++ b/content/genesis.md @@ -0,0 +1,146 @@ +Title: Genesis +Date: 2018-04-15 +Category: +Tags: +Slug: Genesis +Lang: en +Summary: + About this blog, ElenQ Technology, and myself + + +As a first post in this *official-but-not-very-official* blog I just want to +introduce myself and *ElenQ Technology*. + +First of all, my name is Ekaitz Zárraga and I was born in 1991. I describe my +job as R&D Engineer but actually I studied Telecommunications Engineering and I +*only* make my research and development in that area. I'm mostly focused in +programming or computer-related activities but I can also do some electronics +and other kind of things. That's my formal introduction. In the informal part +I'd say I've always been a really curious person and that made me try other +disciplines like arts in its different forms. This last point drives most of +what I'll write about later in this text. That's all from my part, I'll write +down an informal resume in the future. + + +*ElenQ Technology* is a name, it's a name to call the way I am and the +interests I have. That said, it's also the independent R&D project I'm running. +It's a different kind of company which aims to raise awareness about ethical +technology or [Ethical Innovation][1] by example, demonstrating ethical +companies can be profitable. It's not simply the way I make my living where I +make engineering, it's also a performance. Like an art piece. + +> *ElenQ Technology* is an art piece which tells you that a different model is +> possible. It tells you that you have a choice and you don't need to work in a +> corporation and be governed by its rules. + +*ElenQ Technology* is the result of many things I felt working for other +companies and it's also the result of a deep analysis of the status of the +technology in my context, which I think it can be generalized globally with a +decent accuracy. + +First, in my near context most of the IT companies have a similar business +model based on *body shopping* and they pay really low salaries. Other sectors +are not in a much better position, but the IT is outrageous. + +The jobs are not 9-to-5 jobs here. Working 10 hours per day is becoming the +norm. The famous *Economical Crisis™* mixed with a deep corruption made people +pray for jobs and the companies are being aware of that. + +That said, you can easily imagine how the tech world works here. IT +corporations get a ridiculous amount of money while they don't respect their +workers nor their clients. They make proprietary solutions because they don't +want to lose the projects and let the client be independent. They don't want +you to be free in any case because they need to maintain their rotten business +model. + +That is the general status of the IT world in my surroundings but I'm sure, as +I said, it can be generalized, maybe not totally but there are many points than +can be, mostly because the corporations I mention are present in other +countries. + +Personally, I had the luck to work in what I thought it was a better place. +The working conditions were not as bad as I described, or at least I +thought that. It was a R&D Engineer position in a not very big corporation. I +worked in a small department with less than ten co-workers. We made new stuff +for the company. It was fun. + +After some time there I realized how it worked. It wasn't really different to +other jobs. There were a lot of things I don't want to share here but I started +to feel bad there and my personal situation didn't help at all. I've always +been a really curious person, I love learning new things and the job simply +wasn't giving me that as it did at the beginning. I started to need to fill my +needs spending more time after the job doing tech related stuff in the few free +time I had. The mix between the boring job and the organizational problems we +had made it really depressing. + +While I was immerse in that depressing environment, our company wanted more +money and they started looking for new businesses with the resources they had. +Our team, as R&D team, was responsible of the development of the first +*proof-of-concept* of the new technology. We were asked to analyze the data +that the company had. Literally, we were asked to track people. The company +didn't care if they were our users or not, we were asked to track *everyone*. + +That was the straw that broke the camel's back. I left the job because my +ethics are not compatible with people tracking. I don't like it and I don't +want to be part of it. + +I always wanted to change the way the technology is created and I always +thought it was a great idea to make it by myself and encourage others to do so, +but I never had the courage to do it. What happened gave me the courage I +needed. + +But, why not simply move to another job? + +I think it was the moment to try it. I had been defining an idea of what +Ethical Technology is for a while and I always wanted to apply that idea in my +field: R&D. Also, taking in account that most of the companies where I could +work have the same structural problems I decided to change it from the root. I +decided to try a different model. Did I really have other options? + +Is living in a depressing environment making the world a worse place to live +in an option? Really? + +Think about it. + + +Now, *ElenQ Technology* breaks the business model of the companies of my +environment. It makes ethical technology and it makes it in an ethical way. +That's good for me because it lets me work on the fields I like and I can make +the world a better place to live in, which selfishly will improve the future I +leave for my children if I ever have them. But it's also good for the clients +*ElenQ Technology* has, because all the projects are handled in a way *they* +own them, following the principles of the Free Software and Hardware and +[Ethical Design manifesto](https://2017.ind.ie/ethical-design/) with some +extra ideas I added to be more specific to the innovation field (you can read +more [here][1]). + +I want to change the world. Don't you? + +The thing is I can't do it alone so *ElenQ Technology* wants to push other +people to take the same decision I took (or I was forced to take) and that's +its main goal. + +Let's change the world together. + +### About this website + +You already noticed this is not the official *ElenQ Technology* website. This +is *my* *official-but-not-very-official* blog as part (or head, but I don't +like that word) of *ElenQ Technology*. + +Here I'll write about *ElenQ Technology*'s philosophy, goals, achievements and +that kind of *official* things but mostly I'll write **about the things we +make**. That's what interests me the most. + +This is going to be a really technical place where I'll try to explain advanced +concepts in a simple way to let you learn stuff with me. I want to share what I +do with you all. + +### About languages + +I'll write all this post in English but some of the entries are going to be +translated. As the blog supports that, it's better for me to leave it like a +supported tool and keep the translation option always enabled so I can add +community translated posts or posts translated by myself. + +[1]: https://elenq.tech/en/about.html#ethical-innovation diff --git a/content/pages/about.md b/content/pages/about.md index 9803be5..2f987f2 100644 --- a/content/pages/about.md +++ b/content/pages/about.md @@ -1 +1,55 @@ Title: About + + +
+ +
Me in Astorga
+
+ + +This is Ekaitz Zárraga, a guy born in 1991[^1] who is based in Bilbao. + +I studied Telecommunication Engineering (2009-2014)[^2] in the Faculty of +Engineering in Bilbao at the University of the Basque Country. + +Since then I've been working for several companies until I [decided +to][genesis] found ElenQ Technology, what at the moment is a one-person company +where I work as a Research and Development engineer in my areas of knowledge. + +... + +This blog was born as a way to share what I do at my job at ElenQ Technology, +my thoughts and my decisions, but it's also a way to represent the way I work +and the things I like. Sometimes, I use this space to share stuff I learned +thanks to the R&D projects or as a backlog of what I do. + + + +[genesis]: https://elenq.tech/Genesis.html + +[^1]: Around the `663350400` Unix timestamp if you need a more reliable source. +[^2]: At that time Master's Degrees were 5 years long. diff --git a/content/posts/call-me-maybe.md b/content/posts/call-me-maybe.md deleted file mode 100644 index 22aeece..0000000 --- a/content/posts/call-me-maybe.md +++ /dev/null @@ -1,185 +0,0 @@ -Title: Call me maybe -Date: 2019-01-09 -Category: -Tags: -Slug: call-me-maybe -Lang: en -Summary: Recursion, stacks and optimizations. - -Do you remember what happens when you call a function in your program? - -What happens when you make too many nested calls?[^1] - -When you call your functions, there some stuff going on in the memory, some -variables, the program counter and all that, that must be stored somewhere to -be able to come back to the place you called the function when the function -ends. Right? - -The place where all that is stored is the stack. You already know all this. -When you call many nested functions, the stack goes pushing more and more data, -and there's no chance to pop it, so it overflows. - -This can happen anytime but there's more risk for that when you call functions -recursively, because they call themselves many times by definition. In a -non-recursive program it can happen too, but devices can handle big levels of -nesting so it's more unlikely to happen (in small devices like microcontrollers -or so, you have to take care of this too). - -This doesn't mean recursive functions will result in a stack overflow always. -That will only happen when the nesting level is bigger than the stack size. - -> You are so stupid the recursive function that calculates your stupidity -> causes a stack overflow. -> — Heard in a computer science class - -But this is not always true. There are some optimizations that can change this -behaviour and allow you to create stack-safe recursions. Let's talk about -**tail-call optimization**. - -Some programming languages implement tail-call optimization, that, if used -correctly, avoids stack overflows in recursive calls and increase performance. -First of all, in order to be able to make a tail-call optimization, the -function **must** have a call as its last action (tail-call). This means **it -requires to be ordered in an specific way**. Let's see it with an -(oversimplified) example (in Python, but don't pay attention to the language): - - - ::python - def factorial (a): - """ This function does not provide a tail-call, because the last thing - to execute in it is a multiplication, not a call """ - if a == 1: - return 1 - return a * factorial(a-1) - - def factorial_tail (a, acc=1): - """ This function provides a tail-call, the last thing happening on it - it's a function call.""" - if a == 1: - return acc - return factorial_tail(a-1, acc=acc*a) - - -As the comments say, the first function is not performing a tail-recursion, but -the second is. But, what's the difference? - -The main point is the first function, `factorial`, needs to go back in the call -stack to retrieve previous step's `a` value, while the second function doesn't. -That's why the second can be optimized and the first not. - -The optimization exploits this behaviour in a really clever way to avoid the -stack overflows I told you before. Tail call optimization just changes the -input parameters of the function and calls it again, replacing the original -call with the new call with different input arguments. This can be made because -the function is written in a way that doesn't need anything from the previous -step. - -Imagine that we introduce a `3` in the first and the second function, let's -compare the execution. Let's check `factorial` first: - -- Call `factorial(3)` - - Call ` factorial(2)` - - Call `factorial(1)` - - Return `1` - - Return `2 * 1` -- Return `3 * 2` - -Now with the `factorial-tail` function but without any optimization: - -- Call `factorial-tail(3)` - - Call `factorial-tail(2, acc=3)` - - Call `factorial-tail(1, acc=6)` - - Return 6 - - Return 6 -- Return 6 - -See the difference? - -The `factorial-tail` call doesn't need anything from the previous step, the -last `factorial-tail(1, acc=6)` function call's result is the same as the -result of the `factorial-tail(3)` function. That changes everything! - -What tail call optimization does is just change the call arguments and keep -running the same code. There's no need to store anything on the stack, just -change the function call with the tail call. - -Let's optimize the second call now: - -- Call `factorial-tail(3)` -- Replace the call with `factorial-tail(2, acc=3)` -- Replace the call with `factorial-tail(1, acc=6)` -- Return 6 - -This can be stretched further! It can involve different functions! In any place -where a tail-call is made, even if the called function is a different function, -this kind of optimization can be done, reducing the stack size and increasing -the performance. - -If you want to read more about this, there's [a great wikipedia page on the -subject][wikipedia] and you there's [a really good explanation in the book -Programming in Lua][lua]. - - - -But how is all this handled by the programming languages? You may ask. - -The answer is there's not a clear answer, all of them have their own style of -dealing with this. Let me give you some examples. - -**Python**, just to point out the language I chose for the example is no the -best example of this, has no tail recursion elimination. Guido and the -Pythonists[^2] argue that tail call optimization alters the stack traces (which -is true) and that they don't like the recursion as a base for programming, so -they try to avoid it. In CPython there's no tail call optimization, but they -don't forbid (they can't!) any other Python implementation to implement that -particular optimization. There's a really [interesting post by Guido Van Rossum -about this][guido]. - -**Lua**, as you've seen in the [previous link][lua], implements proper tail -calls (as they call them there) and there's nothing the programmer needs to do -to make sure they are optimized. The only thing is to put the tail calls -correctly. - -**Scala** implements tail recursion optimization at compile time so the -compiler transforms the recursive call with a loop in compilation time. That's -interesting because there's a compile time check too. There's an annotation -called `@tailrec` that can be used to make sure that your function is going to -be optimized. If the compiler is not able to optimize it will throw an error if -it has the `@tailrec` annotation. If it doesn't have it, it will simply make a -standard recursion. In the [annotations tour of the Scala language][scala] has -some words about `@tailrec`. - -**Clojure** is a really interesting case too. Clojure doesn't implement -tail-call optimization, but it has one (and only one) special form for non -stack consuming looping: `recur`. This special form rebinds the recursion -point's bindings or arguments and jumps back to the recursion point. The -*recursion point* can be a `loop` special form or a function definition. So, -it's just an explicit call to the tail recursion optimization. Tail call must -be done correctly too, `recur` is only allowed in a tail call and the compiler -checks if it's located in the correct place. Also, it has some specific rules -that must be taken in consideration (multiple arity functions and so on), that -is better to [read in the documentation][clojure]. - - -> *Edited 2019-01-25*: Thanks to a discussion in the fediverse about the topic, -> I found the moment where **Emacs Lisp** got its tail call optimization -> everything explained [in the author's blog][emacs]. It's really interesting. - - - -[^1]: Some help: what's the name of the website you check when you don't know - how to solve your programming problem? - -[^2]: My next music band name. - -[wikipedia]: https://en.wikipedia.org/wiki/Tail_call - -[lua]: https://www.lua.org/pil/6.3.html - -[guido]: https://neopythonic.blogspot.com/2009/04/tail-recursion-elimination.html - -[scala]: https://docs.scala-lang.org/tour/annotations.html - -[clojure]: https://clojure.org/reference/special_forms#recur - -[emacs]: https://chrismgray.github.io/posts/emacs-tco/ diff --git a/content/posts/first_time.md b/content/posts/first_time.md deleted file mode 100644 index f7038a0..0000000 --- a/content/posts/first_time.md +++ /dev/null @@ -1,114 +0,0 @@ -Title: My first time -Date: 2018-06-23 -Category: -Tags: -Slug: First-Time -Lang: en -Summary: Thoughts about my first contribution to free software - -The other day I remembered a very important day on my life, one of those early -beginnings that started to change my mind: **The first time I contributed to -free software**. - -My first contribution was in 2014, more specifically the 22nd of May of 2014. - -That's only 4 years ago. But, at the same time, they already passed 4 years -since then? OMG. - -You get the feeling, right? - -You may think I started coding when I was 10 or something like that. I didn't. -I learned programming in the university and not as well as a Computer Scientist -because I studied Telecommunication Engineering and computers are just a third -of the studies while the other two parts are electronics and signals related -things. - -I'm not a young hacker or a genius. My parents don't like computers. I didn't -live with a computer at home since I was a toddler. That didn't happen. - -Today I want to tell you my story. Not because it's awesome and you'll love it. -I want to tell you my story because it's **really** standard. I want you to see -that you can also contribute to Free Software. Anyone can. - -So, how did it all start? - -I started my university studies in 2009. The first year we had one semester of -C and the next one of C++. Not real programming classes, just introductory -stuff for the languages and computers. A couple of years later we had a -networking subject where I used Linux for the first time. The computers had -*Kubuntu* installed. At that time my laptop started to give me some trouble and -I installed *Kubuntu* in a dual boot and tested it. It was nice. - -Few time later the *Windows* partition failed again and I was comfortable -enough in *Kubuntu* to delete it and use only *Kubuntu*. It was easy. - -The second semester that year another subject had some focus on Linux because -it was a networks and tools subject and I really needed it. We learned to use a -terminal, some SQL and many things like that. Simple tools but they resulted to -be useful in the future. I was really surprised by the power of the terminal -and I studied a lot in my free time I finished the subject with honours just -because I was really interested on it. As I said, I'm not a genius, I was -interested. - -We had a subject about *Minix*, following Andrew Tannenbaum's *Operating -Systems: Desing and Implementation* book and *Minix* version 1, which gave us -the initial needed knowledge about Operating Systems at that time. That started -to give me some info about the ethical part of the free software and also -sparked more interest. - -Next year I had a couple of Operating Systems subjects (the theoretical one and -the practical one). The teacher was part of *KDE Spain*, and he talked about -free software in class. I was quite into it at that time. The practical part of -the subject was real software, we covered the contents of the book called -*Advanced Linux programming*[^1]. That was pure C development and we didn't -have a lot of knowledge on that. We just touched some C/C++ during the first -year and some assembly in a couple of subjects. It was really hard, but it was -really cool. - -We made a small shell. It was great! - -Final year[^2] of the university: I had to make the final project. - -I didn't know what to do so I contacted the teacher who was part of *KDE Spain* -and he mentored me. I installed a IRC client and started talking with the -people at *kde-telepathy* project. I wasn't used to that kind of collaborative -development. Heck, I wasn't used at any kind of development! But it was all -good, mostly thanks to the great people in the project (David, Diane, George, -Martin... *You* are awesome!). - -The project itself was a *KDE* application, *KDE-Telepathy*, a big one. Thanks -to heaven, my part of the project was quite separated so I could focus on my -piece. That taught me to search in a big codebase and focus on my part. Then I -had to code in C++ like in the real life, not like designed problems I've -worked on at the university, and I also had to read tons of documentation about -*Qt*, *KDE* and anything else. - -I started with the contribution that opened this post and I went on until I -renewed the whole interface. It wasn't great, but the code was finally merged -in the application some time later. - -Since then I could say I code almost everyday and I've been studying many -languages more but, at that time, I was relatively new to programming and -computers. - -With all this I mean: - -> If you are interested, try. Everything is going to be fine. You don't need to -> be a genius[^3]. - -[You can check the contribution -here](https://git.reviewboard.kde.org/r/118256/diff/2#index_header). - -Love. - -Ekaitz - -[^1]: It's a great book, by the way. You can find it - [online](https://mentorembedded.github.io/advancedlinuxprogramming/). - -[^2]: When I studied, right before the [Bolognia - Process](https://en.wikipedia.org/wiki/Bologna_Process), the university was 5 - years long for a Masters Degree and 3 for a Bachelor Degree. - -[^3]: But congratulations if you are, that way you'll learn faster and probably - have more reach if you want to. diff --git a/content/posts/genesis-es.md b/content/posts/genesis-es.md deleted file mode 100644 index 1d377ae..0000000 --- a/content/posts/genesis-es.md +++ /dev/null @@ -1,148 +0,0 @@ -Title: [ES] Génesis -Date: 2018-04-15 -Tags: -Slug: Genesis -Lang: es -Translation: true - -Como primer post en este blog *oficial-pero-no-muy-oficial* sólo quiero -presentarme y presentar *ElenQ Technology*. - -Me llamo Ekaitz Zárraga y nací en 1991. Suelo describir mi trabajo como -ingeniero de I+D pero en realidad estudié Ingeniería de Telecomunicaciones y -*sólo* trabajo en ese área. Mayormente me centro en actividades relacionadas -con los ordenadores como, por ejemplo, programar pero también puedo hacer -electrónica y otras cosas. Esa sería mi presentación formal. En la informal -diría que soy una persona bastante curiosa, lo que me ha hecho investigar y -profundizar en otras disciplinas como el arte en sus diferentes formas. Este -último punto explica mucho de lo que vendrá después en este texto. Y eso es -todo en lo que a mí respecta, ya escribiré un currículum vitae informal en el -futuro. - -*ElenQ Technology* es un nombre, una forma de llamar a como soy y a los -intereses que tengo. Además, también es un proyecto de I+D que estoy -desarrollando. Es una empresa distinta a las demás, en la que pretendo generar -conciencia acerca de la tecnología ética mediante el ejemplo, demostrando que -las compañías de tecnología ética pueden ser rentables. No es sólo mi trabajo -en el que hago ingeniería, también es una *performance* artística. Es como una -obra de arte. - -> *ElenQ Technology* es un proyecto artístico que te dice que otro modelo es -> posible. Te recuerda que tienes elección y que no tienes que trabajar en una -> corporación y seguir sus reglas. - -*ElenQ Technology* es, simplemente, el resultado de todas las cosas que he -sentido trabajando para otras compañías y el resultado de un análisis profundo -del estado de la tecnología en mi contexto cercano que, creo, puede ser -extrapolado al resto de lugares con una precisión aceptable. - -Para contextualizar, las grandes empresas del mundo IT en mi zona cercana -tienen un modelo de negocio similar, basado en el *body shopping* (muchas de -ellas haciendo cesiones ilegales en subcontratas). Pagan unos salarios -bajísimos y las condiciones laborales son lamentables. El resto de sectores -tampoco están mucho mejor, pero el caso de las empresas del mundo IT es -escalofriante. - -Los trabajos rara vez son de 8 horas diarias, las jornadas se están alargando -cada vez más y, en muchos, es normal trabajar 10 horas al día. La famosa -*Crisis Económica™* mezclada con una profunda corrupción ha sido el caldo de -cultivo perfecto para que las grandes empresas se aprovechen de los -trabajadores. - -Dicho esto, es muy fácil entender cómo funciona el mundo de la tecnología por -aquí. Grandes empresas ganando insultantes cantidades de dinero mientras que no -respetan a sus trabajadores o clientes, soluciones tecnológicas privativas para -atar a los clientes e impedirles ser independientes, etc. Todo para mantener su -modelo de negocio podrido y corrupto hasta la médula. - -Ese es el estado de las empresas de tecnología en mi entorno, el de las -grandes. Seguro que puede extrapolarse a otros lugares porque muchas de ellas -operan también en el extranjero. - -En mi caso tuve la suerte de acabar en una empresa que parecía un lugar mejor. -Las condiciones eran ligeramente mejores que las que he descrito, o al menos -así lo creía yo. Era un trabajo de Ingeniero de I+D en una empresa no demasiado -grande. Trabajaba en un departamento aislado de menos de 10 personas. Hacíamos -los juguetes nuevos de la empresa. Era divertido. - -Después de algún tiempo allí me di cuenta de cómo funcionaba. No era tan -diferente al resto. Hubo muchas cosas que no quiero compartir aquí pero empecé -a sentirme bastante mal y mi situación personal tampoco ayudó mucho. Siempre he -sido una persona curiosa a la que le gusta aprender cosas nuevas y ese trabajo -dejó de aportarme eso como lo hacía al principio. Empecé a necesitar llenar ese -hueco trabajando en mis proyectos personales en el poco tiempo que me quedaba -al día. La suma de un entorno de trabajo aburrido y deprimente más los -problemas organizativos que teníamos era difícil de gestionar. - -Sumergido en ese entorno deprimente, la empresa, con intención de salir a bolsa -próximamente, quiso exprimir al máximo sus recursos y plantear nuevos negocios. -Nuestro departamento, como encargado del I+D de la empresa, era el responsable -de plantear las nuevas *pruebas de concepto*. Nos pidieron que analizásemos los -datos de la compañía. Literalmente, nos pidieron que siguiésemos a la gente, -que los localizásemos. No les importaba que fuesen nuestros clientes o no. -Querían que localizásemos a *todos*. - -Eso fue la gota que colmó el vaso. Tenía que dejarlo porque eso superaba con -creces el límite de mi ética personal. No me gustan esas prácticas y no podía -ser parte de eso. - -Llevaba tiempo pensando en la forma en la que hacemos tecnología y siempre me -había apetecido probarlo por mi cuenta. Eso me dio el valor que me faltaba -para hacerlo. - -¿Por qué no simplemente cambiar de trabajo? - -Creo que era el momento para intentarlo. Como entusiasta del software y -hardware libre, siempre me ha interesado definir lo que es la tecnología ética -y llevaba tiempo con ganas de aplicarlo en mi campo: el I+D. Además, teniendo -en cuenta el estado de las empresas para las que podía trabajar, decidí cambiar -las cosas de raíz. Decidí intentar un modelo distinto. ¿Tenía alguna otra -alternativa en realidad? - -¿Es una alternativa real trabajar en un entorno deprimente que hace del mundo -un lugar peor? ¿Seguro? - -Piensa en ello. - -*ElenQ Technology* rompe entonces con ese modelo de negocio y hace tecnología -ética de una forma ética. Eso es bueno para mí porque me permite trabajar en -los campos que me gustan y hacer del mundo un lugar mejor lo que, egoístamente, -mejorará el futuro que le deje a mis hijos, si algún día los tengo. Al mismo -tiempo esto es bueno para los clientes de *ElenQ Technology* porque los -proyectos se gestionan de forma que *ellos* son los dueños de la tecnología que -se crea. Para esto último se siguen los principios del Software y el Hardware -Libre y el [Manifiesto del Diseño Ético](https://2017.ind.ie/ethical-design/) -junto con algunas ideas adicionales más específicas del campo al que me dedico -(puedes leer más [aquí][1]). - -Quiero cambiar el mundo. ¿Tú no? - -El problema es que yo no puedo hacerlo solo así que *ElenQ Technology* es una -forma de hacer que otros tomen la misma decisión que yo tomé (o fui forzado a -tomar) y ese es su objetivo principal. - -Cambiemos el mundo juntos. - -### Sobre este blog - -Ya te has dado cuenta que este blog no es el blog oficial de *ElenQ -Technology*. Esto es *mi* blog *oficial-pero-no-muy-oficial* como parte (o -"persona al frente", pero decirlo así no me gusta) de *ElenQ Technology*. - -Aquí escribiré sobre *ElenQ Technology*, sobre su filosofía, objetivos, logros -y ese tipo de temas *oficiales* que me parezcan relevantes pero sobre todo -tengo la intención de escribir sobre las **cosas que hacemos**. Eso es lo que -más me interesa. - -Este sitio será un lugar muy técnico en el que trataré de explicar conceptos -avanzados de forma sencilla para que aprendáis conmigo. Quiero compartir lo que -haga con vosotros. - -### Sobre los idiomas - -Este blog se escribe en inglés, pero algunas de las entradas (como esta misma) -podrán traducirse a otros idiomas. Como el blog soporta traducciones, prefiero -mantener las opción activa para, si es necesario, añadir traducciones -proporcionadas por la comunidad o hechas por mí mismo, como en este caso. - -[1]: https://elenq.tech/es/about.html#ethical-innovation diff --git a/content/posts/genesis-eu.md b/content/posts/genesis-eu.md deleted file mode 100644 index 34e89c8..0000000 --- a/content/posts/genesis-eu.md +++ /dev/null @@ -1,135 +0,0 @@ -Title: [EU] Genesis -Date: 2018-04-15 -Category: -Tags: -Slug: Genesis -Lang: eu -Translation: true - - -Blog *ofizial-baina-ez-oso-ofizial* honen lehenengo post bezala, nor naizen eta -*ElenQ Technology* zer den aurkeztu nahi dut. - -Hasteko, Ekaitz Zárraga naiz eta 1991. urtean jaio nintzen. Nire burua I+G -ingeniari bezala deskribatzen dudan arren, Telekomunikazio Ingeniaritza ikasi -nuen eta arlo horretan *bakarrik* egiten dut lan. Bereziki ordenagailuekin -lotutako gauzak egiten ditut, programazioa eta horrelakoak, baina elektronika -eta bestelako gauzak jorratzeko ere gaitasuna daukat. Hori da nire sarrera -formala. Sarrera informalean jakin-min handia dudala esango nuke eta horrek -beste diziplina batzutan aritzeko aukera eman didala, haien artean artea. -Azkeneko puntu honek garrantzi handia dauka testu honetan idatzitakoarekin -erlazio zuzena izango duelako. Hauxe da nire aurkezpena, etorkizunean kurrikulum -informal bat egingo dut. - -*ElenQ Technology* izen bat da, nire interesak eta nire izaera adierazteko izen -bat baino ez. Hori esanda, aldi beran nire I+G proiektu independentea da. -Adibidearen bitartez, enpresa etikoak errentagarriak izan daitezkeela -erakutsiz, teknologia etikoari buruz kontzientzia eratzeko helburua duen -enpresa bat da. Ez da nire lana bakarrik, *performance* artistiko bat da. -Artelan baten antzera. - -> *ElenQ Technology* modelo ezberdin bat egin daitekeela esaten dizun artelan -> bat da. Aukerak badaudela eta ez zaudela korporazio baten arauekin lan -> egitera behartuta esaten dizu. - -*ElenQ Technology* beste enpresetan lan egitearen eta nire ingurunean -teknologiaren egoeraren analisi bat egitearen emaitza da, baina uste dut nahiko -modu zehatzean orokortu daitekeela. - -Hasteko, nire inguruko IT enpresek *body-shopping*-ean oinarritutako negozio -eredu antzekoa daukate. Askotan ilegalak diren praktikak egiteaz gain soldata -baxuak ordaintzen dituzte. Beste sektoreak ez dira askoz hobeak baina IT -munduaren kasua guztiz ankerra da. - -Ordutegiak luzatu egin dira azken urteotan. Egunean 10 ordu lan egitea normala -bihurtzen hasi da. *Krisi Ekonomiko™* famatuaren ondorioz, prekaritatea -normalizatu egin da, gehien bat, enpresek argi daukatelako jendeak lanaren -behar larria daukala. - -Hori esanda, erraz ulertu dezakezu teknologiaren mundua nola dagoen. IT -korporazioek haien bezeroak eta langileak errespetatu gabe dirutza egiten dute. -Bezeroak lotuta izateko produktu propietarioak saltzen dituzte. Haien helburu -nagusia daukaten negozio eredu ustelaren etorkizuna bermatzea da. - -Hau da bizi dugun egoera. Lehen esan bezala, erraz orokortu daiteke, aipatutako -enpresa gehienak atzerrikoak direlako eta beste herrialdeetan ere kokatuta -daudelako. - -Nire kasuan, leku hobe batean lan egiten nuela uste nuen. Lan baldintzak -hobeak ziren bertan. I+G ingeniari postu bat nuen enpresa moderno batean. -Hamar bat pertsonaz osatutako departamendu txiki isolatu bat zen. Enpresaren -jostailu berriak egiten genituen. Nahiko dibertigarria zen. - -Denbora pasa ahala, lan baldintzak hain onak ez zirela konturatzen hasi -nintzen. Aipatu nahi ez ditudan gauza asko gertatu zirenez, bertan txarto -sentitzen hasi nintzen eta, gainera, nire egoera pertsonalak ez zuen batere -lagundu. Oso pertsona kuriosoa naiz eta lanak nire jakin-mina asetzeko ematen -zidan aukera desagertzen hasi zen. Nire denbora librean gauza berriak ikasten -eta aztertzen hasi nintzen. Lan aspergarria barneko antolaketa arazoekin batu -zen eta nire bizitza kudeatzea oso zaila egin zitzaidan. - -Depresioan murgilduta, enpresak, burtsara ateratzea helburu zuela, bere -negozioa handitu nahi zuen. Gure departamenduak, enpresaren I+G-aren -erantzulea zenez, enpresaren kontzeptu-proba berrien garapena egin behar -zuen. Enpresak zituen datuak aztertzea eskatu ziguten. Pertsonen kokapena -jarraitzea eskatu ziguten, mundu osotik, edozein momentuan. Ez zuten bezero eta -ez-bezeroen arteko ezberdintasunik egin nahi. *Guztiak* jarraitzeko eskatu -ziguten. - -Hori gehiegi zen niretzat. Arrazoi etikoengatik utzi nuen lana. Ez dut horretan -parte hartu nahi. - -Teknologia eratzen den modua aldatu nahi izan dut beti. Nire kabuz teknologia -egitea eta besteak gauza bera egitera bultzatzea beti egon da nire buruan baina -orain arte ez dut salto hori emateko ausardirik izan. Gertatutakoak falta -zitzaidan bultzada eman zidan. - -Baina, zergatik ez mugitu beste lan bateara? - -Momentua zela uste dut. Denbora luzez ibili naiz teknologia etikoari buruz -pentsatzen eta nire esparruan, Ikerkuntza eta Garapenean, aplikatu nahi nuen. -Gainera, nire inguruko enpresetan izango nituen arazoak ikusita, zuzenean -sustraira joatea erabaki nuen. Beste modelo bat saiatzea erabaki nuen. Beste -aukerarik al nuen? - -Mundua txarrerantz aldatzen giro deprimagarri batean lan egitea benetako aukera -bat al da? - -Pentsatu ondo. - -Orduan, *ElenQ Technolgy*-k nire inguruko konpainien negozio modeloa apurtzen -du. Teknologia Etikoa garatzen du, modu etiko batean. Hori ona da niretzat, -zuzenean, niri gustatzen zaizkidan gauzetan lan egiteko aukera ematen didalako, -etorkizunean eduki ditzakedan umeentzat mundua hobetzen dudan bitartean. Eta -bezeroentzat, proiektuak garatutako teknologia *bezeroarena* izateko moduan -kudeatzen ditugulako, Software eta Hardware Librearean printzipioak eta -[Diseinu Etikoaren Manifestoa](https://2017.ind.ie/ethical-design/) (gure -esparrura moldatuta) jarraituz (gehiago irakurri dezakezu [hemen][1]). - -Mundua aldatu nahi dut, zuk ez? - -Nik bakarrik ezin dudala mundua aldatu konturatu naiz, beraz, *ElenQ -Technology*-k besteak nik (behartuta edo ez) hartu nuen erabakia hartzera -bultzatzea du helburu. - -Aldatu dezagun mundua guztiok batera. - -### Blog honi buruz - -Jada konturatu zara blog hau *ElenQ Technology*-ren blog ofiziala ez dela. -*Nire* blog *ofizial-baina-ez-oso-ofiziala* da, *ElenQ Teknology*-ren parte -(edo buru, baina ez dut hitz hori gustoko) bezala. - -Hemen *ElenQ Technology*-ri buruz idatziko dut, bere filosofia, helburu, -arrakasta, etab.-ei buruz. Baina gehien bat **egiten dugunari buruz** idatzi -nahi dut, hori baita niretzat interesgarriena. Prozesuaren parte egin nahi -zaituztet. - -### Hizkuntzei buruz - -Blog hau ingelesez idatziko da, baina aukera dago testuak (hau bezala) beste -hizkuntzetara itzultzeko. Blogak baimentzen duen bitartean nahiago dut aukera -prest uztea komunitateak itzulitako testuak gehitzeko edota, kasu honen moduan, -nik egindako itzulpenak igo ahal izateko. - -[1]: https://elenq.tech/eu/about.html#ethical-innovation diff --git a/content/posts/genesis.md b/content/posts/genesis.md deleted file mode 100644 index 07818ef..0000000 --- a/content/posts/genesis.md +++ /dev/null @@ -1,146 +0,0 @@ -Title: Genesis -Date: 2018-04-15 -Category: -Tags: -Slug: Genesis -Lang: en -Summary: - About this blog, ElenQ Technology, and myself - - -As a first post in this *official-but-not-very-official* blog I just want to -introduce myself and *ElenQ Technology*. - -First of all, my name is Ekaitz Zárraga and I was born in 1991. I describe my -job as R&D Engineer but actually I studied Telecommunications Engineering and I -*only* make my research and development in that area. I'm mostly focused in -programming or computer-related activities but I can also do some electronics -and other kind of things. That's my formal introduction. In the informal part -I'd say I've always been a really curious person and that made me try other -disciplines like arts in its different forms. This last point drives most of -what I'll write about later in this text. That's all from my part, I'll write -down an informal resume in the future. - - -*ElenQ Technology* is a name, it's a name to call the way I am and the -interests I have. That said, it's also the independent R&D project I'm running. -It's a different kind of company which aims to raise awareness about ethical -technology or [Ethical Innovation][1] by example, demonstrating ethical -companies can be profitable. It's not simply the way I make my living where I -make engineering, it's also a performance. Like an art piece. - -> *ElenQ Technology* is an art piece which tells you that a different model is -> possible. It tells you that you have a choice and you don't need to work in a -> corporation and be governed by its rules. - -*ElenQ Technology* is the result of many things I felt working for other -companies and it's also the result of a deep analysis of the status of the -technology in my context, which I think it can be generalized globally with a -decent accuracy. - -First, in my near context most of the IT companies have a similar business -model based on *body shopping* and they pay really low salaries. Other sectors -are not in a much better position, but the IT is outrageous. - -The jobs are not 9-to-5 jobs here. Working 10 hours per day is becoming the -norm. The famous *Economical Crisis™* mixed with a deep corruption made people -pray for jobs and the companies are being aware of that. - -That said, you can easily imagine how the tech world works here. IT -corporations get a ridiculous amount of money while they don't respect their -workers nor their clients. They make proprietary solutions because they don't -want to lose the projects and let the client be independent. They don't want -you to be free in any case because they need to maintain their rotten business -model. - -That is the general status of the IT world in my surroundings but I'm sure, as -I said, it can be generalized, maybe not totally but there are many points than -can be, mostly because the corporations I mention are present in other -countries. - -Personally, I had the luck to work in what I thought it was a better place. -The working conditions were not as bad as I described, or at least I -thought that. It was a R&D Engineer position in a not very big corporation. I -worked in a small department with less than ten co-workers. We made new stuff -for the company. It was fun. - -After some time there I realized how it worked. It wasn't really different to -other jobs. There were a lot of things I don't want to share here but I started -to feel bad there and my personal situation didn't help at all. I've always -been a really curious person, I love learning new things and the job simply -wasn't giving me that as it did at the beginning. I started to need to fill my -needs spending more time after the job doing tech related stuff in the few free -time I had. The mix between the boring job and the organizational problems we -had made it really depressing. - -While I was immerse in that depressing environment, our company wanted more -money and they started looking for new businesses with the resources they had. -Our team, as R&D team, was responsible of the development of the first -*proof-of-concept* of the new technology. We were asked to analyze the data -that the company had. Literally, we were asked to track people. The company -didn't care if they were our users or not, we were asked to track *everyone*. - -That was the straw that broke the camel's back. I left the job because my -ethics are not compatible with people tracking. I don't like it and I don't -want to be part of it. - -I always wanted to change the way the technology is created and I always -thought it was a great idea to make it by myself and encourage others to do so, -but I never had the courage to do it. What happened gave me the courage I -needed. - -But, why not simply move to another job? - -I think it was the moment to try it. I had been defining an idea of what -Ethical Technology is for a while and I always wanted to apply that idea in my -field: R&D. Also, taking in account that most of the companies where I could -work have the same structural problems I decided to change it from the root. I -decided to try a different model. Did I really have other options? - -Is living in a depressing environment making the world a worse place to live -in an option? Really? - -Think about it. - - -Now, *ElenQ Technology* breaks the business model of the companies of my -environment. It makes ethical technology and it makes it in an ethical way. -That's good for me because it lets me work on the fields I like and I can make -the world a better place to live in, which selfishly will improve the future I -leave for my children if I ever have them. But it's also good for the clients -*ElenQ Technology* has, because all the projects are handled in a way *they* -own them, following the principles of the Free Software and Hardware and -[Ethical Design manifesto](https://2017.ind.ie/ethical-design/) with some -extra ideas I added to be more specific to the innovation field (you can read -more [here][1]). - -I want to change the world. Don't you? - -The thing is I can't do it alone so *ElenQ Technology* wants to push other -people to take the same decision I took (or I was forced to take) and that's -its main goal. - -Let's change the world together. - -### About this website - -You already noticed this is not the official *ElenQ Technology* website. This -is *my* *official-but-not-very-official* blog as part (or head, but I don't -like that word) of *ElenQ Technology*. - -Here I'll write about *ElenQ Technology*'s philosophy, goals, achievements and -that kind of *official* things but mostly I'll write **about the things we -make**. That's what interests me the most. - -This is going to be a really technical place where I'll try to explain advanced -concepts in a simple way to let you learn stuff with me. I want to share what I -do with you all. - -### About languages - -I'll write all this post in English but some of the entries are going to be -translated. As the blog supports that, it's better for me to leave it like a -supported tool and keep the translation option always enabled so I can add -community translated posts or posts translated by myself. - -[1]: https://elenq.tech/en/about.html#ethical-innovation diff --git a/content/posts/templates-released.md b/content/posts/templates-released.md deleted file mode 100644 index 02eb3d5..0000000 --- a/content/posts/templates-released.md +++ /dev/null @@ -1,181 +0,0 @@ -Title: Let's document -Date: 2019-02-01 -Category: -Tags: -Slug: templates-released -Lang: en -Summary: - ElenQ Technology document templates released, with a long writeup - about the workflow we use with them. - -At [ElenQ Technology][elenq] I just released my documentation templates tool. -You can find it in the link below: - -[https://gitlab.com/ElenQ/templates](https://gitlab.com/ElenQ/templates) - -I think that project, even if it's quite simple, it's a really good reason to -talk about document edition and my workflow. - -## The story - -As part of my job at ElenQ Technology I document a lot of things: I have to -make reports, proposals, documentation for projects, notes for courses... - -I have to write **a lot**. - -If I could decide, I'd share all my documentation and files in plain text. But -I don't decide, so I **need** to send PDF files and they need to have a nice -look so the clients understand I take care of my stuff. I also like to pay -attention to the aesthetics of what I do so I really like to keep everything in -order. - -That's really difficult to do. Even more if you work with tools like -LibreOffice that have tons of options and menus and are sometimes difficult to -understand or hard to make them do exactly what you want. I have nothing -against LibreOffice but some years ago I realized it's not a tool for me. -WYSIWYG[^1] tools like that have some characteristics that don't fit my -workflow well. Let me break them down: - -- They are designed to work with a mouse, and I avoid using the mouse because - it makes my wrist and arm hurt. That's why I often work with my wacom tablet - in mouse-intensive tasks like PCB routing and I use laptop's touchpad in - everyday tasks. - -- They have tons of menus where you can get lost while the most of the - documents you write don't have that kind of complexity. Often, that kind of - options just make the documents complex and hard to maintain. - -- They don't have a clear separation between the content and the view. When I - write I like to focus on the content and avoid to get distracted with how it - looks on the screen. I hate "Oh my god, the picture moved and now the whole - layout is broken"-like errors.[^2] - -- Their file formats are difficult to operate with even if they are open - standards. Mixing data with something that comes from a different process is - really complex, and it makes the user write everything by hand. - As an example of this: in the previous version of the [ElenQ Documentation - Templates][old-version], there was a tool to get all the git tags of the - project and insert them as a document changelog. This is really difficult to - make in LibreOffice. (This version doesn't support that *yet*). - - -Trying to solve all those issues, I've spent some time with LaTeX as a main -tool but, it also has a really thin separation between the content and the view -and its learning curve is crazy hard. - -## Enter pandoc - -Some day, while working on her PhD, my sister discovered **Pandoc** and our -life changed. - -[Pandoc][pandoc] is a great tool which is able to convert between a lot of -different document formats. That opens a world of possibilities where you can -write in a format you like and then convert it to different output formats. -It's huge. The main power of Pandoc is also related with the amount of output -formats it can handle. It is possible to write all the content of a document in -a common language like MarkDown, RST or AsciiDoc and then convert it to -different output formats like PDF, ePub or to a simple static website. - -All this tooling also lets you write files that are easy to write and read, -like MarkDown is, without the need to play with tons of tags and weird commands -like HTML or LaTeX do. - -Pandoc is a really powerful tool with tons of option that can be quite -overwhelming. It even lets you add filters that transform the AST it creates -during the conversion! - -At the moment we discovered Pandoc I was really obsessed with productivity and -the chronic pain my hands, wrists and arms were suffering and I didn't care -about anything else. If a tool could help me reduce the use of the mouse and -my keystroke count it was worth the time learning it. - -I was so crazy at that time that I made a Vim plugin called -[droWMark][droWMark] for posting in WordPress. Taking advantage of Pandoc -filters I also made it able to [upload images][droWMark-images] linked from the -MarkDown file. It was fun. - -## Choose the tools - -Some time later I founded ElenQ Technology and I decided we needed to integrate -Pandoc in our tooling. That's why with my sister's help we created the first -version of the [documentation templates][old-version]. - -I wanted any person working with the documents to be able to use the editor -they like the most. And I only wanted to care about the aspect of the document -once: during the template creation. - -It worked. I spent almost 2 years working with the old version of the templates -and they served me well. The only problem they had was that they needed many -files to work and they added some complexity to the folder where the -documents were edited. - -## Choose the tools: remastered - -This new version eliminates that complexity. We needed to sacrifice a couple of -features but now there's no need to add any extra file in the directory where -the document is. We removed the Makefiles and embedded the SVG logo of the -company inside the templates using TikZ. Now the tool is just a couple of -Pandoc LaTeX templates: `elenq-book` template for long documents and -`elenq-article` for short documents. - -Like in the previous version, both templates are designed to create output -LaTeX files that can be compiled to PDF using XeLaTeX (or let Pandoc do the -conversion for you). The input formats are not defined, the only limitation is -on the metadata they need (you can read the documentation included with the -project for that). - -All of this is installed *automagically* using [Stow][stow]. - -The project also explains in the `README.md` file how to create a couple of -command line aliases to simplify the calls to Pandoc. You really want to use -them because Pandoc needs *a lot* of input arguments. Using aliases, the -conversion as simple as running a command in the terminal: - - ::bash - elenqdoc-book document.md -o book.pdf # For books - elenqdoc-article document.md -o article.pdf # For articles - -With the new template system, the documents are just Markdown files and they -are easy to maintain under version control. Note that the same input file can -be used to create an article and a book, the input doesn't really affect the -output of the process. - -We decided to use MarkDown for some extra reasons too. Markdown is simple but -has everything that any simple document needs and it's easy to read in plain -text even for people who don't know it. But not only that, MarkDown is a widely -use format ([this blog][blog-md] is written in MarkDown too!) and it's really -extensible, letting the user insert HTML or LaTeX pieces to cover specific -cases like formulas or complex formatting. - -## Choose the tools: future chapters - -Next step is the creation of a invoice control system that is integrated with -the Pandoc templates. The template integration is really easy, we only need to -inject some variables to the templates and Pandoc already has a tool for that: -the metadata system. From that side the problem is solved, now we need to make -all the rest. - -On the other hand, as said before, in the future, if the conversion process -needs extra complexity, we'll just need to add some Pandoc filters to create -it. - -## Wrapping up - -In summary, we can say that the tool we made is just a consequence of the -workflow we follow. This is probably not for anyone, but any person used to -work with the terminal and software is a potential user for this kind of tool. - -It's powerful, simple and straight-to-the-point. I think that fit's our -workflow really well. - - -[elenq]: https://elenq.tech/ -[pandoc]: https://pandoc.org/ -[droWMark]: https://www.vim.org/scripts/script.php?script_id=5374 -[droWMark-images]: https://github.com/ekaitz-zarraga/droWMark/issues/2 -[old-version]: https://gitlab.com/ElenQ/documentation-templates -[stow]: https://www.gnu.org/software/stow/manual/stow.html -[blog-md]: https://gitlab.com/ekaitz-zarraga/personal_blog/raw/master/content/posts/templates-released.md - -[^1]: WYSIWYG: What You See Is What You Get -[^2]: Obligatory xkcd reference: [https://xkcd.com/2109/](https://xkcd.com/2109/) diff --git a/content/static/images/ekaitz.jpg b/content/static/images/ekaitz.jpg new file mode 100644 index 0000000..e768a2d Binary files /dev/null and b/content/static/images/ekaitz.jpg differ diff --git a/content/templates-released.md b/content/templates-released.md new file mode 100644 index 0000000..02eb3d5 --- /dev/null +++ b/content/templates-released.md @@ -0,0 +1,181 @@ +Title: Let's document +Date: 2019-02-01 +Category: +Tags: +Slug: templates-released +Lang: en +Summary: + ElenQ Technology document templates released, with a long writeup + about the workflow we use with them. + +At [ElenQ Technology][elenq] I just released my documentation templates tool. +You can find it in the link below: + +[https://gitlab.com/ElenQ/templates](https://gitlab.com/ElenQ/templates) + +I think that project, even if it's quite simple, it's a really good reason to +talk about document edition and my workflow. + +## The story + +As part of my job at ElenQ Technology I document a lot of things: I have to +make reports, proposals, documentation for projects, notes for courses... + +I have to write **a lot**. + +If I could decide, I'd share all my documentation and files in plain text. But +I don't decide, so I **need** to send PDF files and they need to have a nice +look so the clients understand I take care of my stuff. I also like to pay +attention to the aesthetics of what I do so I really like to keep everything in +order. + +That's really difficult to do. Even more if you work with tools like +LibreOffice that have tons of options and menus and are sometimes difficult to +understand or hard to make them do exactly what you want. I have nothing +against LibreOffice but some years ago I realized it's not a tool for me. +WYSIWYG[^1] tools like that have some characteristics that don't fit my +workflow well. Let me break them down: + +- They are designed to work with a mouse, and I avoid using the mouse because + it makes my wrist and arm hurt. That's why I often work with my wacom tablet + in mouse-intensive tasks like PCB routing and I use laptop's touchpad in + everyday tasks. + +- They have tons of menus where you can get lost while the most of the + documents you write don't have that kind of complexity. Often, that kind of + options just make the documents complex and hard to maintain. + +- They don't have a clear separation between the content and the view. When I + write I like to focus on the content and avoid to get distracted with how it + looks on the screen. I hate "Oh my god, the picture moved and now the whole + layout is broken"-like errors.[^2] + +- Their file formats are difficult to operate with even if they are open + standards. Mixing data with something that comes from a different process is + really complex, and it makes the user write everything by hand. + As an example of this: in the previous version of the [ElenQ Documentation + Templates][old-version], there was a tool to get all the git tags of the + project and insert them as a document changelog. This is really difficult to + make in LibreOffice. (This version doesn't support that *yet*). + + +Trying to solve all those issues, I've spent some time with LaTeX as a main +tool but, it also has a really thin separation between the content and the view +and its learning curve is crazy hard. + +## Enter pandoc + +Some day, while working on her PhD, my sister discovered **Pandoc** and our +life changed. + +[Pandoc][pandoc] is a great tool which is able to convert between a lot of +different document formats. That opens a world of possibilities where you can +write in a format you like and then convert it to different output formats. +It's huge. The main power of Pandoc is also related with the amount of output +formats it can handle. It is possible to write all the content of a document in +a common language like MarkDown, RST or AsciiDoc and then convert it to +different output formats like PDF, ePub or to a simple static website. + +All this tooling also lets you write files that are easy to write and read, +like MarkDown is, without the need to play with tons of tags and weird commands +like HTML or LaTeX do. + +Pandoc is a really powerful tool with tons of option that can be quite +overwhelming. It even lets you add filters that transform the AST it creates +during the conversion! + +At the moment we discovered Pandoc I was really obsessed with productivity and +the chronic pain my hands, wrists and arms were suffering and I didn't care +about anything else. If a tool could help me reduce the use of the mouse and +my keystroke count it was worth the time learning it. + +I was so crazy at that time that I made a Vim plugin called +[droWMark][droWMark] for posting in WordPress. Taking advantage of Pandoc +filters I also made it able to [upload images][droWMark-images] linked from the +MarkDown file. It was fun. + +## Choose the tools + +Some time later I founded ElenQ Technology and I decided we needed to integrate +Pandoc in our tooling. That's why with my sister's help we created the first +version of the [documentation templates][old-version]. + +I wanted any person working with the documents to be able to use the editor +they like the most. And I only wanted to care about the aspect of the document +once: during the template creation. + +It worked. I spent almost 2 years working with the old version of the templates +and they served me well. The only problem they had was that they needed many +files to work and they added some complexity to the folder where the +documents were edited. + +## Choose the tools: remastered + +This new version eliminates that complexity. We needed to sacrifice a couple of +features but now there's no need to add any extra file in the directory where +the document is. We removed the Makefiles and embedded the SVG logo of the +company inside the templates using TikZ. Now the tool is just a couple of +Pandoc LaTeX templates: `elenq-book` template for long documents and +`elenq-article` for short documents. + +Like in the previous version, both templates are designed to create output +LaTeX files that can be compiled to PDF using XeLaTeX (or let Pandoc do the +conversion for you). The input formats are not defined, the only limitation is +on the metadata they need (you can read the documentation included with the +project for that). + +All of this is installed *automagically* using [Stow][stow]. + +The project also explains in the `README.md` file how to create a couple of +command line aliases to simplify the calls to Pandoc. You really want to use +them because Pandoc needs *a lot* of input arguments. Using aliases, the +conversion as simple as running a command in the terminal: + + ::bash + elenqdoc-book document.md -o book.pdf # For books + elenqdoc-article document.md -o article.pdf # For articles + +With the new template system, the documents are just Markdown files and they +are easy to maintain under version control. Note that the same input file can +be used to create an article and a book, the input doesn't really affect the +output of the process. + +We decided to use MarkDown for some extra reasons too. Markdown is simple but +has everything that any simple document needs and it's easy to read in plain +text even for people who don't know it. But not only that, MarkDown is a widely +use format ([this blog][blog-md] is written in MarkDown too!) and it's really +extensible, letting the user insert HTML or LaTeX pieces to cover specific +cases like formulas or complex formatting. + +## Choose the tools: future chapters + +Next step is the creation of a invoice control system that is integrated with +the Pandoc templates. The template integration is really easy, we only need to +inject some variables to the templates and Pandoc already has a tool for that: +the metadata system. From that side the problem is solved, now we need to make +all the rest. + +On the other hand, as said before, in the future, if the conversion process +needs extra complexity, we'll just need to add some Pandoc filters to create +it. + +## Wrapping up + +In summary, we can say that the tool we made is just a consequence of the +workflow we follow. This is probably not for anyone, but any person used to +work with the terminal and software is a potential user for this kind of tool. + +It's powerful, simple and straight-to-the-point. I think that fit's our +workflow really well. + + +[elenq]: https://elenq.tech/ +[pandoc]: https://pandoc.org/ +[droWMark]: https://www.vim.org/scripts/script.php?script_id=5374 +[droWMark-images]: https://github.com/ekaitz-zarraga/droWMark/issues/2 +[old-version]: https://gitlab.com/ElenQ/documentation-templates +[stow]: https://www.gnu.org/software/stow/manual/stow.html +[blog-md]: https://gitlab.com/ekaitz-zarraga/personal_blog/raw/master/content/posts/templates-released.md + +[^1]: WYSIWYG: What You See Is What You Get +[^2]: Obligatory xkcd reference: [https://xkcd.com/2109/](https://xkcd.com/2109/) -- cgit v1.2.3