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/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 ----------------------------------- 6 files changed, 909 deletions(-) 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 (limited to 'content/posts') 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/) -- cgit v1.2.3