Qua

Reader

Syndicated list of all public content of Qua users.

from panjilonji

Free Netflix Premium Accounts And Password — Lifetime Netflix Accounts For Free Are you looking for Free Netflix Account? If yes then you have come to the right place because in this article I’m going to share Netflix Free Account with Email and Password exclusively only for Gamesdynamo visitors. Go To >>> https://store.gamesdynamo.com/free-netflix-accounts-2019-with-username-and-password-premium/ In the previous article I have shared Netflix Cookies to use Netflix Premium for free if you haven’t checked that yet then check it out right now. Netflix is becoming day by day very popular because of its service and exclusive web series, movies, and TV Shows. Many Netflix Contents are not available on other sites that’s the one of the biggest reason behind its popularity. Everyone wants to have one Netflix Premium Account, but everyone can’t purchase that because of its non-affordable pricing. Go To >>> https://store.gamesdynamo.com/free-netflix-accounts-2019-with-username-and-password-premium/ That’s why they are searching for How to get Netflix Premium Account for free If you are also searching for Netflix Free Accounts and want to watch Netflix but not have enough budget to purchase Netflix subscription then don’t worry my friend now you have chance to Get Netflix Account Free, continue reading this article for further information. Nowadays Netflix is becoming very popular among every country because it offers many Shows, Web Series, and Movies to watch their premium members but because of its high pricing many peoples are looking for Free Netflix Accounts username and Password. If you are also looking for Free Netflix Account then you have come to the right place, Here I’m going to share every day new Netflix Account with email and Password. Go To >>> https://store.gamesdynamo.com/free-netflix-accounts-2019-with-username-and-password-premium/

 
Read more...

from Adriano Maini

Vento di mare

Vento di mare, vento di terra, libeccio, grecale e via dicendo. Qui, nell'estremo ponente della provincia di Imperia, affacciati come siamo sul mare, siamo portati a considerare il vento un ospite abituale. Io, dal canto mio, non sono mai riuscito a imparare i nomi precisi dei vari fenomeni. Tant'è!

Di solito, insiste un vento di mare.

Che mi fa tornare in mente tante immagini e tante situazioni.

Pensando alla vicina Provenza, un dicembre di diversi anni fa con una Marsiglia veramente flagellata: dal sagrato di Notre Dame de la Garde sembrava che l'isolotto d'If venisse, insieme a tutte le memorie del Conte di Montecristo, da un momento all'altro inghiottito dalla furia del mare. E per associazione d'idee penso ad un vento (dei venti) che ha (hanno) altre provenienze e che quasi sempre si accompagna (accompagnano) allo scorrere tumultuoso di torrenti e di fiumi montani, il vento (i venti) che spira (spirano) nelle Alpi di Bassa Provenza nelle pagine di Pierre Magnan, dense di omicidi gotici, di personaggi comunque indimenticabili anche perché quasi tutti avulsi dallo scorrere della storia, dei variopinti colori di cime, foreste, prati, rocce, forre, giardini segreti; della natura e di pietre, pregne di storia, insomma.

Nel Ponente Ligure quasi in ogni stagione, invece, la furia del vento spinge il mare a devastare litorali di difficile, anche per l'incuria dell'uomo, ripascimento, spesso con conseguenze devastanti per gli stabilimenti balneari e per le stesse opere di fabbrica delle passeggiate a mare. Sul piano letterario pagine sublimi sugli effetti cangianti, di luce, di colore, di forma, del vento sul nostro mare ha scritto un insigne autore di questa terra, Francesco Biamonti.

 
Continua...

from Adriano Maini

Via Due Camini

Certe mie emozioni acquisiscono dimensioni particolari nel caso di racconti o romanzi, che delineano anche sommariamente, quasi per inciso, affidandosi alla cifra della memoria, certi angoli o certo vissuto di Ventimiglia (IM) e del Ponente Ligure. Soprattutto se scritti da un amico finalmente ritrovato o da chi non incontro più praticamente dai tempi della scuola. E, forse, il mio coinvolgimento è ancora più forte, perché sono libri da me scoperti e, quindi, letti, come mio solito, quasi trasognato, in ritardo. Chi scrive di Ventimiglia di solito non può prescindere dal mare. Dalle piccole baie, dalle calette, dalle rocce, sempre più numerose verso la frontiera. E c'è, tra gli autori cui ho qui solo accennato, chi sottolinea che, a esplorare e vivere questi paesaggi, e questo ambiente, una vera barriera con la Francia non vi sia mai stata. Ho anche rinvenuto una intrigante scansione, alla quale si affida un personaggio, di nomi di monti ben visibili dalla costa del Ponente Ligure. Per varie associazioni di idee è riemersa viva nella mia mente una giovanile serata di fine estate, un'escursione dalla Margunaira di Ventimiglia a Via Due Camini, una zona, questa, in discreta altura, che consente un'ampia panoramica, soprattutto sul mare. Non ricordo se entrammo nell'omonima trattoria, meta tradizionale per tanti anni di gite fuori porta, rimaste nel vissuto popolare, anche perché quell'esercizio da tempo è chiuso. Una serata fatta quasi di niente, se non del discorrere allegramente in compagnia salendo e ridiscendendo, dopo una breve sosta lassù, in città: ero ancora inconsapevole che l'età della spensieratezza stava finendo.

 
Continua...

from Rolistologie

Le 15 avril 2019 au soir, la plupart de mes amis m'ont envoyé un message dont le propos était “Tu as vu, le QG des anges brûle ! Tu vas en faire un scenar ?” ce à quoi j'ai répondu narquoisement “Bande de naïfs, le QG est au sous-sol de Notre-Dame, pas dans la charpente...” avant de promettre qu'effectivement il y aurait un scénario. Et la conception de ce scénario est un bon exemple pour expliquer comment écrire un scénario d'#INSMVadlib en s'inspirant de l'actualité.

Le premier point important est de prendre du recul. Par exemple attendre que les différentes enquêtes aboutissent. Car si l'on souhaite coller aux événements (ce qui est un des objectifs d'INSMValib), il sera peut-être délicat d'accorder ce que vous aviez écrit aux dernières révélations. En attendant, formulez des hypothèses, notamment en impliquant plusieurs acteurs du Grand Jeu. Ici, on parle d'incendie, donc on pense à Belial, mais aussi à Gabriel. Daniel est évident, mais pourquoi pas Morax ou Dispater puisqu'on touche à un monument ? Didier et Nybbas pour la couverture et l'impact médiatique, Novalis et Jordi pour les conséquences sur les stocks de bois pour la reconstruction, mais aussi Mammon et Marc pour les retombées financières... Sans parler de la 3ème Force que vous ne devez surtout pas oublier, mais que je n'évoquerai pas ici pour des raisons de simplifications (et de culte du secret). Ces potentielles implications vous serviront plus tard.

Ensuite, pensez aux éventuelles conséquences côté spécifiquement Grand Jeu. Par exemple : non, le QG angélique n'a pas été affecté, à moins que ce ne soit une diversion ? Mais surtout, et c'est le plus intéressant, étudiez les conséquences sur la société mortelle. En reprenant l'exemple de Notre-Dame, pour l'instant on voit en résumant 3 axes :

  • l'excuse pratique et la récupération politique du gouvernement
  • les dons massifs pour une reconstruction
  • la pollution (notamment au plomb, qui a été d'ailleurs passée sous silence dans les premiers jours)

Pour chacune de ces conséquences, associez un acteur qui y trouverait son intérêt. Par exemple Malphas, Mammon et beaucoup d'anges, pour la première, Mammon et l'administration angélique qui va en profiter pour moderniser le bâtiment pour la deuxième, Uphir pour la troisième...

À partir de là, vous devrez avoir des acteurs pour les motivations, et d'autres (ou les mêmes) pour le modus operandi. C'est le moment d'imaginer le déroulé. Par exemple, Mathias, mandaté par le Conseil Angélique, manipule des Belial pour organiser l'incendie dans le but de se payer à moindre coup une nouvelle toiture bourrée d'appareils de surveillance. Mais les Belial en profitent pour contacter des Uphirs qui vont orienter l'opération vers une génération de pollution. Mais gardez bien en tête que la chaîne d'acteurs peut être complètement inversée. Par exemple : sur une demande d'Uphir des Belial manipulent un Daniel en faisant passer l'incendie pour une opération angélique (rénovation), dans le but de viser la pollution, mais les anges récupèrent la catastrophe tant politiquement que économiquement.

L'étape suivante est de se décider sur le propos et l'intention du scénario (ce sont les deux points les plus importants). Et en fonction, vous pourrez privilégier un petit nombre d'interprétations parmi toutes celles qui vous étaient venues en tête. Par exemple si vous voulez mettre en scène une modification des rapports de forces entre des acteurs du Grand Jeu, en y impliquant les joueurs, ou leur donner l'occasion de tisser des liens et de se positionner face aux autres protagonistes, une explication qui mets en scène des intérêts contraires au sein du même camp, et des magouilles est bien adaptée. Mais vous pouvez plutôt insister sur des aspects sociétaux. Par exemple pour dénoncer la dérive tout-surveillance, une intrigue où les omniprésentes caméras de sécurité révèlent une autre affaire très gênante pour le camp des PJs et qui n'aurait jamais due être remontée au public, alors que de l'autre côté, la facilité de piratage les rend inutiles pour l'enquête sur l'incendie. Pour critiquer l'évasion fiscale, un scenar centré sur les grosses fortunes qui se sont empressées de faire des dons, et dont les marionnettistes (genre des grades 3) pourraient être les commanditaires de l'incendie. Cet angle d'attaque est également propice à des problèmes type lutte des classes. Ou encore pour insister sur la stupidité de Trump, inventer des coulisses à sa déclaration sur les canadairs, et imaginer des conséquences à combattre si certains alignés prenaient son idée au pied de la lettre...

Dernier point, mais un des plus importants : si vous jouez en campagne / table ouverte, et que vous connaissez les persos de vos joueurs, impliquez leurs relations et leurs leviers de motivations. Cas hyper simple : le responsable caché est le supérieur d'un des persos, et le commendataire de l'enquête celui d'un autre.

Et bien sûr cette étude peut être effectuée pour tout type d’actualité, de l’événement majeur au fait divers. Les sources d’inspiration sont donc infinies !

#JdR #INSMV #INSMVadlib

 
En savoir plus...

from Adriano Maini

Jean Giono

La stima di Francesco Biamonti per questo grande scrittore della Provenza. Certe luci, certi colori, certe montagne di Manosque (dove dimorava stabilmente Giono, che però ambientava le sue opere di autentico grande livello in altre parti della Provenza e non solo) che ricordano il nostro entroterra in provincia di Imperia: e quella posizione geografica (solo per citare, la montagna della Lure, la Durance, la Bleone) trova a mio avviso in Pierre Magnan (forse per i più non eccelso autore, ma pur sempre amico di Giono) un sincero e convincente cantore. Di Giono dirò, infine, che con L'affare Dominici seppe condurre una coraggiosa inchiesta giornalistica dai toni elegiaci – purtroppo non coronata da successo – contro storture poliziesche e giudiziarie che si esercitavano proprio dalle sue parti. E mi preme ricordare ancora per contrappasso l'umanità di certi suoi gendarmi di metà Ottocento, che si muovevano a cavallo in notti di tregenda a ponente del Rodano...

 
Continua...

from sondahonda

Free Hulu Premium Accounts Get Free Access And Exclusive Hulu Plus Accounts 100% [WORKING] Welcome to the #1 Free Hulu Plus Accounts Provider on the Internet! This method for getting free Hulu Premium accounts is the best on the internet. It has been run on different sites, and many have received their account within a matter of minutes! All you have to do to get your free account is click the link below and you will be redirected back to the site within seconds, with your new Hulu username and password! Go to >>> https://store.gamesdynamo.com/free-working-hulu-premium-accounts-2019-no-scam-for-2-years/ Testimonies: “I tried this method thinking it wasn’t going to work and it was just another scam, but it really did work! I got my username and password within five minutes, and I have been watching all my favorite TV shows since! I haven’t had one problem with the account yet, and I got it in May 2013. Thanks!” ~ William Miller, Humboldt NE “My brother emailed me a link to this site and said that it actually worked and that he was watching the shows he needed to catch up on, so I tried getting 6 months free and it really worked!” ~ Patricia Papa, Milwaukee WI “This is legit and is not a scam, and to be honest I was surprised — I was expecting a scam. But this is the second month I have had the free account and there are no problems with it at all!” ~ Jason Hamilton, Albuquerque, NM Now try it for yourself!! Go to >>> https://store.gamesdynamo.com/free-working-hulu-premium-accounts-2019-no-scam-for-2-years/

 
Read more...

from Byte for your thoughts

Any software system will eventually experience a degradation, outage or a similar incident. Depending on the type of business you're in this can lead to a loss of revenue and clients or even have legal repercussions. That is why it's important to have a good incident management process for resolving incidents, reporting on their impact and preventing them from happening again.

In this blog post I'll describe my personal experience with some challenges of establishing the incident management process and why I built a tabletop role-playing game Deployments and Disasters to deal with them.

My perspective

I work at Infobip. We are a tech company with over 300 developers and additional 200 customer support engineers. Our developers are divided into teams of around 5 to 10 people. Teams own their services and are responsible for both building and maintaining them in production. Support engineers monitor key business metrics and maintain contact with clients. In total that's over 500 people and each one of them can be called upon to participate in resolving an ongoing incident.

One benefit of this approach is that people most familiar with a given code-base will directly work on resolving the incident. Additionally, trained support personnel are in contact with clients thus allowing developers to focus on fixing the issue.

On the other hand, there are drawbacks to this approach. Not everyone will work equally well under pressure, different people have different levels of experience, each team might develop their own procedures, use different tools, etc. Most of these can be addressed with a fine-tuned incident management procedure and a set of common tools to back it up. Some good ideas include chatops, centralized logging and metrics, premade dashboards and alerting. I will not go into details on these things here.

Challenges to tackle

What I'd like to focus on instead are the following three challenges that emerge after management procedure and all of the tools are in place:

  1. All involved with incident management should familiarize themselves with the procedure and available tools. The more people the bigger this issue is. At one point even awareness of the process can become a problem.
  2. Incident management process involves different roles: customer support, programmers, sysadmins, database administrators, devops engineers, etc. They all need to work together, despite having different objectives at any given time during the incident.
  3. Many roles involved in incident management are technical. They view resolving the incident as their objective and are focused on detecting and removing the immediate cause of the issue. As a result they may not think of affected customers and thus miss out on opportunities to notify them of the impact, or even alleviate parts of it sooner.

Awareness of the procedure

Educating people about procedures and tools can generally be achieved with incident management training. Roughly speaking, there are 2 approaches to it:

  1. Simulating the incident realistically, with participants using actual tools, interacting with high fidelity data and directly applying their real life skills.
  2. Keeping the training abstract and basing it on gaming techniques. I've found success with adopting the mechanics of tabletop role-playing games.

Picking a game based approach has several advantages. For one, it reduces the prohibitive cost of recreating the data required to realistically simulate the incident. It allows for addressing the other two challenges, namely the empathy towards other roles and customer centric mentality.

However, the killer feature of game based training is that it's fun. Especially when compared to reading procedure documentation and how-to guides, or attending seminars. The benefits of this are twofold. First it makes the exercise more memorable for the attendants. Secondly, it helps with organizing future sessions, as people are more interested in attending.

There's one additional benefit of role-playing based approach. It turns entire exercise into a structured storytelling experience. This structure provides a safe environment for all attendants to share their insights and knowledge with each other. The benefits are most noticeable with introverted players.

Empathy for other roles

At any one time during the incident, each different role might have a different objective. For example, support engineer needs to inform the clients of exact impact of the incident. On the other hand programmers need to identify the cause of the issue. In this situation support needs information on client facing API from the development team that is focused on debugging the backend. This can create tension between those two roles.

One thing that games excel at is placing players into other people's shoes. In Deployments and Disasters I facilitate this by defining specific roles with unique mechanical characteristics. When starting the game session I make sure that players shuffle the roles so that they don't play the same one they have in real world. For example, I encourage developers to play the role of customer support.

This has two benefits:

  1. Players get to experience what incident looks like from the perspective of other roles. This builds empathy by making players go through the tough choices and strive for hard to reach objectives that their colleagues usually experience.
  2. It also encourages players to share their knowledge and practices. It reverses the real world dependencies between the roles. For example, if developers usually depend on database administrators for optimizing their databases then inverting the roles will make admins more sympathetic towards the other role's needs.

Customer centric mindset

I'd like my developers to approach incident management with more of a customer centric mindset. Other teams, companies or situations may require some other adjustments. Fortunately, game mechanics are well suited for this.

In games, players regularly receive and accomplish arbitrary objectives. By carefully picking stated objectives and mechanical incentives game designers can impact player mindset.

In Deployments and Disasters I achieve this with a few rules:

  1. The main objective of the game session is to resolve the incident within a set number of turns, represented by an incident clock. At the beginning of the game players have 6 turns to resolve the issue. However, If they devote time to communicate the issues to the clients their time doubles to a total of 12 turns.
  2. Clients are active actors in the game (controlled by the DM) and they can impact the state of the system. For example, they can escalate the problem by attempting to fix it themselves. Alternatively they can be used to reveal valuable information and hints.
  3. During the course of the game some important (gold / platinum) clients can contact the players and ask for status updates or request special attention. This can be used to illustrate different types of clients.
  4. Incident scenario starts with only some clients impacted. Players can still escalate the situation and spread the impact to other clients. Or, they can proceed with caution and reduce the impact as they go along.

Work so far

So far I've set up basic set of rules and game mechanics for Deployments and Disasters which you can find on GitHub. The game presented there is early sample of a work in progress. One significant ommition is the lack of incident scenarios. I've created one of them for test runs I've played at work, however it is tightly coupled with our internal procedures and custom tools we use. My plan is to create an example scenario with open-source tooling that anyone can use as a base for their exercise.

I've held two test training sessions at work and feedback was generally good. Players found the game entertaining, but also reported learning about new tools and procedures. I'm yet to create additional scenarios, but there's interest in replaying the existing one with teams that haven't seen it yet. I'm also exploring ways of connecting the exercise with employee evaluation and professional development programs that we have.

Feel free to use the Deployments and Disasters to build your own incident scenarios on top of. Or stay tuned for future developments, as I will strive to publish example scenarios myself. You can watch the GitHub repo for updates, or follow this blog by:

If you have any feedback, comments or improvement ideas you can send me a pull request, or just contact me at:

 
Read more...

from Adriano Maini

Quella Ventimiglia pacifista!

Mi riguardavo una fotogafia relativa alla Marcia per la Pace in Vietnam Ventimiglia-Bordighera del gennaio 1973. Mi era stata mandata dal compianto N., cui ho già fatto più volte riferimento. Era a suo tempo comparsa nelle pagine locali di diversi giornali, ma non l'avevo più vista.

Credo, siano opportune alcune considerazioni di carattere sociale, morale e civile. Quella manifestazione – a noi e ad altri amici cara anche per l'impegno profuso per la sua buona riuscita –, come mi ricordava appunto N. (che poi in Vietnam c'era stato: e mi aveva anche inviato anche uno scatto che lo ritrae insieme al fratello su un carro armato americano, cimelio di quel conflitto), fu molto partecipata in termini quasi unici per la nostra zona.

Non fu di parte. I numeri stessi delle presenze lo attestano. Ma c'è di più, come cercherò di aggiungere tra breve. Intendo prima rammentare che la proposta venne fatta da esponenti di quel vecchio “Gruppo Sbarchi Vallecrosia” della Resistenza dalla grande apertura mentale. E venne subito caldeggiata da diverse associazioni, anche cattoliche: le ACLI, ad esempio.

Ventimiglia, e tanti suoi degni abitanti per meglio dire, anticipavo poc'anzi. Giorni prima, il volantinaggio della notte della vigilia di Natale per chiedere la cessazione dei bombardamenti aerei USA sulle popolazioni civili del Nord Vietnam destava palpabile – ed anche istituzionale – commozione soprattutto all'uscita della Messa dalla Cattedrale.

C'erano già stati diversi altri fatti di piena comprensione umana, non solo verso il dramma del Vietnam, quasi in ideale collegamento con insigni figure del passato, quali quelle dei pescatori della zona che contribuirono (come ha ben documentato Paolo Veziano in “Ombre di confine”) a salvare verso la Francia tanti ebrei.

Certo. Ci sono state, dopo l'infame guerra di Indocina, altre guerre ingiuste. E nel Sud-Est asiatico libertà e diritti sono conquiste ancora tutte da inverare.

Ma è anche scemata di molto, ritengo, l'attenzione verso i fatti del mondo, con il paradosso che ora il mondo è sempre più vicino a noi.

 
Continua...

from Adriano Maini

Un modesto contributo alla memoria di Francesco Biamonti

Ritrovandomi anni fa, anche casualmente, in intenso pertinente conversare con alcuni amici, emergeva dalle parole di una gentile signora la sottolineatura che non tutte le vicende degne delle nostre terre hanno ottenuto adeguato risalto. Solo lo schizzo rapido del contributo arrecato dai civili alla Resistenza riempirebbe pagine e pagine di volumi! Situazione, purtroppo, credo, omogenea in tutta la Nazione, con l'aggravante, rimarcata in quel nostro piccolo dibattito, di un progressivo generale disinteresse verso la storia, quelle storie in particolare. Si tratta di una zona non solo di paesaggi minacciati dal cemento, ma anche di fulgide intelligenze, il nostro Ponente di Liguria affacciato sul mare: una stridente contraddizione, dunque, con la situazione reale. Oggi, per lo meno, mi rimane la consolazione di avere ricavato da quel nostro dialogo un'ulteriore conferma della notevole sensibilità umana di quel nostro grande scrittore, Francesco Biamonti, prematuramente scomparso circa vent'anni orsono, che con la sua arte maestra aveva anche saputo, come ha evinto più di un illustre commentatore, anticipare molte delle nuvole scure sul nostro orizzonte.

 
Continua...

from El blog de Juan

La primer pregunta cuando que le pasa por la cabeza a las personas si les dicen que abandonen Google y sus servicios en su celular es “¿y cómo voy a hacer , si no podré usar ?“. Afortunadamente hay muchas alternativas libres, disponibles en F-droid o en repositorios individuales para las aplicaciones más comunes (y otras no tanto), así que a continuación dejaré una recopilación de las mejores aplicaciones que yo he probado con las cuales no se extrañará casi nada a Google.

Tienda de aplicaciones.

Reemplaza a Play Store

  • F-droid: La primer “tienda” que hay que descargar es F-droid, un repositorio de aplicaciones libres desde el cual podremos descargar y actualizar nuestras aplicaciones totalmente libres.

img

  • Aurora Droid: Una aplicación alternativa para conectarse a F-droid con una apariencia mucho más atractiva.

img

  • Aurora Store: Lo admito: no todas las alternativas libres disponibles valen la pena, algunas son malas, quedan a deber, o definitivamente no existen. Si hemos renunciado a Google en nuestro Android pero hay alguna aplicación a la que aún no podemos renunciar, la mejor manera de descargar aplicaciones de Play Store es con Aurora Store; además de tener una apariencia muy atractiva nos permite conectarnos sin necesidad de tener cuenta, además nos informa de los trackers que tengan las aplicaciones, protegiendo nuestra privacidad.

img

Reemplaza a Chrome

  • Fennec: Se trata de Firefox pero sin los complementos privativos de este último. Posee todas las características del navegador de Mozilla.

img

Correo

Reemplaza a Gmail

  • Fair email: Un cliente de correo, funciona con protocolos como IMAP por lo que puede usarse con una cuenta de gmail o de outlook. Tiene varias características centradas en la privacidad y está en constante desarrollo.

img

  • Tutanota: Tutanota es un servicio de correo enfocado en la privacidad y con sede en Alemania. Su servicio gratuito ofrece 1 Gb. de almacenamiento, varios dominios para elegir y encriptación punto a punto de todos los mensajes. Su cliente para android está disponible para su descarga en F-droid.

img

Calendario

Reemplaza a Google Calendar, el calendario propio de cada compañía

  • Simple Calendar: Una aplicación de calendario sencilla, personalizable en los colores y aspectos de la interfaz, además permite sincronización mediante CalDAV o archivos .ics.

img

Nube y sincronización

  • Nextcloud: Nextcloud es un servicio de almacenamiento en la nube selfhost donde uno mismo debe montar su propio servidor, de esta forma la privacidad está asegurada gracias a que la información está en nuestros propios ordenadores. La aplicación para Android está disponible en F-droid y ofrece lo común en este tipo de servicios. Para comenzar a usar Nexcloud sin tener que pasar por todo el proceso de montar un servidor en https://nextcloud.com/signup/ se pueden encontrar sugerencias de proveedores que usan Nextcloud.

img

  • Syncthing: Un servicio de sincronización p2p, donde los dispositivos se sincronizan entre sí en red local. No hay servidores remotos, cada dispositivo en un servidor, de esta forma, la información se mantiene en los dispositivos que deseamos sincronizar únicamente.

img

  • DAVx⁵: La mejor manera de sincronizar nuestros calendarios con algún servicio en la nube es CalDAV, un protocolo similar a WebDAV que permite sincronizar calendarios y listas de tareas. Muchos servicios de calendarios como Outlook, Google Calendar o Nextcloud permiten el uso de CalDAV, y la aplicación que se encarga de hacer la sincronización es DAVx⁵. De esta forma se puede tener calendarios sincronizados, sin importar el servicio de almacenamiento en la nube que usemos.

img

Cámara

Reemplaza a Google Camera, la aplicación de cámara de cada compañía

  • Open Camera: Una aplicación de cámara muy completa, con opciones avanzadas para tomar fotos y que da como resultado fotos de gran calidad. Su interfaz es algo (muy) anticuada pero funcional.

img

Galería

Reemplaza a Google fotos, la galería propia de la compañía

  • Simple Gallery: Una galería muy personalizable, me recuerda en momentos a QuickPic. Tiene muchas opciones para organizar y administrar las fotos y videos en la memoria del teléfono.

img

Toma de notas y listas de tareas

Reemplaza a Google Keep, Evernote, Todoist

  • Markor: Un editor Markdown que nos permite tomar notas y hacer listas de tareas en formato todo.txt. Una aplicación muy completa que puede ser utilizada tanto como aplicación de notas sueltas como un completo editor Markdown.

img

  • Orgzly: Una aplicación de lista de tareas que usa el formato org-mode para almacenarlas. Cuenta con varias de las características propias de org-mode como son las etiquetas, prioridades, agenda, la capacidad de “doblar” las notas de un encabezado, entre otras opciones.

  • SimpleTask: Otra aplicación de lista de tareas, esta vez usando el formato todo.txt, lo que la hace más sencilla para usarse con (y quizá enfocada a) el sistema GTD. Cuenta con la posibilidad de crear filtros complejos y añadir scripts en LUA para mejores filtrados.

  • Omni Notes: Si se busca una aplicación más parecida a Google Keep, Omni Notes es la alternativa perfecta. Permite hacer notas con dibujos, audios, imágenes, checklist y texto.

img

Lector de noticias

Reemplaza a Feedly, Flipboard, Google Kiosco

  • Feeder: Un lector RSS simple que añade el feed RSS de cualquier URL soportado, convierte la página web en texto plano para poder leerlo incluso sin conexión, permite activar notificaciones de aquellos canales que más nos interesen, entre otras opciones.

img

  • Flym: Un lector de noticias que permite añadir fácilmente nuevas fuentes de noticias. AL igual que Feeder descarga la página en texto plano para poder leerla cómodamente.

img

Música y videos

  • VLC: El reproductor de video por antonomasia es FLOSS y está disponible en F-droid. VLC reproduce prácticamente cualquier formato de audio o video y es totalmente configurable hasta en aspectos muy avanzados como son códecs y demás.

img

  • Phonograph: Además de una gran interfaz muy agradable, Phonograph posee un editor de etiquetas, editor de letras y varias configuraciones. Es un reproductor normal, pero su gran interfaz y lo redondo de sus opciones de configuración lo vuelven uno de mis favoritos.

img

  • Music Player GO: Un navegador muy minimalsta, cuya personalización se limita a elegir uno de los varios tonos pasteles con los que cuenta y poco más. Cuenta con una interfaz unificada así que no hay que moverse entre mil pantallas diferentes, todo está en una sola. Es un reproductor muy simple que se limita a reproducir música, pero hay una atracción en esa simpleza que me hace volver a él constantemente.

img

  • NewPipe: Newpipe permite reproducir videos desde YouTube sin enviar casi información a Google. Permite “suscribirse” a canales, ver videos (se puede en ventana flotante fuera de la app, y sin pagar), descargarlos tanto en audio como en video, crear listas de reproducción, importar y exportar nuestras suscripciones, entre otras características que envidian poco o nada a la app oficial de YouTube.

img

Redes sociales

Reemplaza a Facebook, twitter y demás

  • Frost for Facebook: Frost es un cliente para Facebook (en realidad, una forma más cómoda de acceder a la web de Facebook) con varias opciones interesantes como varios temas, multicuenta y un peso mucho, mucho menor al de la app de facebook.

img

  • Twidere: Un cliente para varios servicios de microblogging, entre ellos Twitter. Twidere ofrece todas las opciones que se pueden buscan en un cliente de Twitter, como ver post, comentarlos, ver y descargar imágenes, seguir usuarios, crear listas, ver tendencias y mucha personalización.

img

  • Slide: Un cliente para Reddit con muchas opciones de personalización y para hacer más cómoda la experiencia en reddit. Es posible ver post, comentar, suscribirse a subreddits, ver imágenes directamente aunque estén alojadas en servers externos y muchas opciones más.

img

Otros

  • Pocket Maps (reemplazo de Maps): Una app para ver y descargar mapas desde OpenStreetMaps

  • DuckDuckGo (reemplazo de Google Now): Un navegador simple con muchas opciones de privacidad enfocado en hacer búsquedas rápidas, justo como Google Now.

  • Pdf Viewer Plus (reemplazo de Adobe Reader): Un lector de Pdf sencillo que hace justo eso: abrir Pdf's

  • File Manager: Un navegador de archivos sencillo, con una interfaz muy agradable y moderna.

 
Leer más...

from El blog de Juan

Cómo usuario de Emacs he tratado de llevar su uso a la mayoría de los aspectos de mi vida, y uno donde no podía faltar era, por supuesto, en mi trabajo. Como profesor de matemáticas, una de las principales tareas que realizo es planear mis clases, así que dediqué un tiempo en construir un sistema que me permitiera planear mis clases, llevar control sobre ellas y presentar mis planeaciones en un formato legible para el humano promedio. A continuación comparto lo que he logrado hasta ahora.

¿Cómo planeaba antes?

Aprendí a planear clases durante formación como docente, en aquella época se me dio una plantilla de MS-Word y con ella trabajaba. El problema de esta plantilla es que MS Word (y Libre Office también en ocasiones) hacen una tortura manejar tablas; en incontables ocasiones la tabla se movía, se negaba a cambiar su tamaño, a añadir nuevas filas, y en más de una ocasión fue más sencillo reiniciar todo el trabajo que arreglar la tabla que ya tenía.

img

Por alguna misteriosa razón, todos los profesores que conozco utilizan un formato similar en tabla, pero colocan todo dentro de una sola celda, es decir, la tabla funciona más que nada como “marco” para la hoja. Dado que nada me obligaba a mantener ese formato tan enfadoso de escribir decidí eliminarlo, sin embargo, la información que contiene se mantiene prácticamente intacta.

Seleccionando las herramientas

El formato elegido para trabajar fue Org-mode, un formato que, curiosamente, uso para todo, menos para organizar mi día. Org-mode posee la sencillez de escritura de Markdown, el poder de LaTeX (especialmente para escribir fórmulas), la capacidad de exportar en varios formatos, capacidad de seguimiento de hábitos, entre otras muchas bondades que lo hacen sumamente poderoso y a la vez (casi siempre) fácil de usar.

Gracias a su capacidad de “doblar” los encabezados me permite ver solo la sección que me interesa en el momento y mantener “dobladas” el resto de forma que no interrumpan mi lectura, y su capacidad de exportar en PDF con LaTeX me permite generar un documento rápidamente para entregar a la dirección de la escuela.

Describiendo el sistema

Al abrir alguna de mis planeaciones lo primero que encontramos es un encabezado llamado “org-data” acompañado de una etiqueta :noexport:; este encabezado incluye todas las opciones de org-mode y LaTeX:

#+title: PLANEACIÓN DIDÁCTICA
#+author: Yo
#+options: toc:nil date:nil num:nil p:nil tags:nil todo:nil
#+seq_todo: COMENZADO(t!) | TERMINADO(d!)
#+startup: indent
#+startup: logdrawer
#+latex_class: koma-article
#+latex_header: \usepackage{lmodern}
#+latex_header: \fontfamily{lmss}\selectfont 
#+latex_header: \usepackage[margin=1in, letterpaper]{geometry}
#+latex_header: \usepackage[spanish]{babel}
#+latex_header: \usepackage{fancyhdr}
#+latex_header: \setlength{\headheight}{15.2pt}
#+latex_header: \pagestyle{fancy}
#+latex_header: \chead{\bfseries ESCUELA SECUNDARIA \\ "nombre de la escuela" \\ SECUENCIA DIDÁCTICA}
#+latex_header: \lhead{\includegraphics [width=2cm]{/path/to/escudo.png}}
#+latex_header: \rhead{\includegraphics [width=2cm]{/path/to/otro-escudo.png}}
#+latex_header: \cfoot{}
#+latex_header: \renewcommand{\headrulewidth}{0pt}
  • title y author: Incluyen el título y mi nombre, para que aparezcan al exportar a PDF
  • options: Las opciones de exportación de org-mode. Evitan que genere un índice, la fecha de creación, que numere cada encabezado, que exporte las etiquetas y las secuencias TODO
  • seq_todo: La secuencia de TODO, en lugar de mostrar TODO y DONE, mostrará COMENZADO y TERMINADO. El signo de admiración añade la fecha cada vez que se modifica el estado TODO del encabezado.
  • startup: indent: Añade un sangrado de manera que el contenido de los encabezados estén alineados con el subnivel al que pertenecen.
  • startup: logdrawer: Guarda las notas y las fechas cuando cambia el estado TODO en un drawer llamado LOGBOOK.
  • latex_header: Órdenes de LaTeX, necesarias para darle formato al PDF que se genere. Entre otras cosas, definen los márgenes, el tipo de papel y el encabezado de las páginas.

La mayoría de esas instrucciones las descubrí en el momento, googleando lo que quería lograr y encontrando la información en foros y en el manual de Org-mode.

El siguiente encabezado que vemos es uno llamado “DATOS GENERALES”, donde incluyo la misma información que en la sección del mismo nombre en el viejo formato de Word, con al diferencia que aquí he vertido la información como una lista.

Un tercer encabezado se llama “PRIMER TRIMESTRE” y aquí es donde comienza el verdadero trabajo.

Las secuencias y las sesiones

Cada trimestre de la clase de matemáticas está dividido en una serie de Secuencias (o contenidos), cada secuencia se divide en sesiones de 50 minutos, y estas a su vez, en 3 momentos: inicio, desarrollo y cierre.

Existen dos formas de planear una secuencia, cada una con sus ventajas y desventajas:

  • Planear por secuencia: Se planea el inicio, desarrollo y cierre de una secuencia didáctica de varios días. Es más sencillo de planear y más rápido, pero también más ambiguo y con mas oportunidad a la improvisación.
  • Planear por sesión: Se planea el inicio, desarrollo y cierre de cada una de las sesiones que componen la secuencia. Esta forma es más tardada y más compleja, pero añade más puntos de control y elimina mucha de la ambigüedad que hay en el otro método.

Personalmente soy partidario del segundo método, aunque he probado ambos y mucho tiempo preferí planear por secuencias, hoy encuentro más provechoso tener claro el trabajo en cada una de las sesiones de trabajo.

Todas las sesiones comienzan con los organizadores curriculares, que he vertido de la siguiente forma:

\dotfill
** Secuencia 1  (# de sesiones: fecha/inicio --> fecha/cierre)
Nombre del contenido o secuencia
- **Aprendizaje esperado:**
- **Eje temático:**
- **Tema:**
- **Consideraciones previas:** 

\dotfill

Como cada secuencia comienza con exactamente los mismos datos, he creado una plantilla de YASnippet, de manera que solo escribo sec + TAB y se despliega toda la plantilla, al presionar TAB al siguiente elemento y puedo llenarla sencillamente.

Dos elementos quizá llamen la atención. El primero, la orden \dotfill; esta es una función de LaTeX que añade una línea punteada, solo sirve para separar los organizadores curriculares del resto de la información. El segundo elemento que llama la atención lo hace por su ausencia, ¿por qué escribo las fechas de una forma tan informal en lugar de usar alguna de las muchas opciones que Org-mode ofrece? La razón es que el formato de org-mode (es decir, el estándar ISO) es bastante confuso para lo que estoy acostumbrado, y, aunque me permitiría usar la agenda, tuve algunos problemas que explicaré más adelante.

Ahora toca llenar cada una de las sesiones que componen la secuencia. Para esto, nuevamente he usado una plantilla de YASnippet:

*** Sesión 1

**** Inicio (  min.)
- 

**** Desarrollo (  min.)
- 

**** Cierre (  min.)
- 

**** Recursos
- 

**** Evaluación
- 

Esta plantilla me permite escribir rápidamente el número de la sesión de la que se trata, la cantidad de minutos dedicados a cada momento, y finalmente, redactar las actividades que se realizarán en cada momento, los recursos necesarios para la sesión y los métodos de evaluación. Nuevamente, los mismos datos que en el formato anterior.

Extras que solo Org-mode ofrece

Hasta aquí, salvo la automatización de YASnippet, no he alcanzado nada muy interesante. Pero las bondades de Org-mode comienzan a verse a partir de aquí.

Al comenzar cada secuencias y cada sesión, cambio el estado TODO a COMENZADO, automáticamente se añade la fecha dentro de un drawer llamado LOGBOOK, al terminar la sesión o secuencia cambio nuevamente el estado TODO a TERMINADO, esto me permite no solo llevar un control de qué clases ya impartí y donde voy, sino también el día en el que las comencé, esto con el fin de llevar un seguimiento de las fechas y ver si voy cumpliendo con las fechas que me propuse.

img

Un elemento que se puede ver en la plantilla de Word y que no he agregado aquí es el de “ADECUACIONES”, este apartado sirve para anotar aquellos cambios que he decidido hacer a mi clase. Con Org-mode logro esto presionando C-c C-z sobre el encabezado donde quiero hace mi adecuación (o una anotación) esto abre un buffer donde puedo escribir y guardo mi nota con C-c C-c. El resultado es un pequeño texto así:

        - Nota tomada el [2019-09-13 vie] \\
        Adecuación realizada

Esta nota se almacena dentro del LOGBOOK.

Una última característica a la que saco provecho es a Org-capture y la función Diario. Los profesores llevamos generalmente un Diario de Clase, aunque cada quien lo diseña de diferente forma, yo apunto en él los elementos o sucesos más relevantes de la sesión y que deseo registrar para futuras referencias. En mi init.el tengo la siguiente plantilla:

        (global-set-key (kbd "C-c c") 'org-capture)
        (setq org-capture-templates
              '(
        	("d" "Diario" entry
        	 (file+olp+datetree "/path/to/DIARIO.org")
        	 "* %?" :prepend t)))

Al presionar C-c c d un buffer aparece y me permite escribir una entrada normal. Esta entrada se almacena en un archivo llamado DIARIO.org y automáticamente llena los encabezados del año, mes y día, de manera que el diario luce algo así:

img

Las etiquetas las agregué yo presionando C-c C-q al momento de escribir los encabezados, de forma que me facilite un futuro filtrado.

Exportando a PDF

Si entrego al director el archivo .org y lo abre en el bloc de notas me lo va a devolver con la misma. Necesito entregarlo en un formato legible por una persona normal, y ese formato es PDF. Las órdenes de LaTeX establecidas al inicio ya le dan formato al documento, y el drawer LOGBOOK, por defecto, no se exporta, eso permite generar un documento limpio que puedan leer o imprimir para archivarlo. El resultado luce más o menos así (censuro el nombre de la escuela y los escudos por seguridad):

img

TODO

Quedan muchos aspectos en los que debo trabajar para que mi sistema sea más cercano a la perfección:

  • Uso de la agenda: No he encontrado la forma (si es que existe) de excluir los fines de semana de la agenda
  • Uso de enlaces a otros archivos: Tengo libros y demás materiales que uso diario, enlazarlos podría acelerar el proceso de buscarlos y abrirlos
  • Mejorar el PDF resultante: lo admito, se ve feo, la tabla de Word será todo lo que quieran, pero se ve bonita.

Pese a que quedan cosas por mejorar, considero que he logrado un sistema funcional, sencillo de seguir (una vez ya establecido) y que me permite centrarme en diseñar mis clases, y no en acomodar una horrible tabla. Claro que para alcanzar este sistema tardé varios días buscando e ideando como hacer lo que quería, y creo que justo ahora estoy cerca del formato perfecto para planear clases. Al menos para mi.

 
Leer más...

from Aus der "Berichterstattung über die Ergebnisse der mit wohnungslosen Menschen geführten Interviews"

Aus der Mitteilung auf die ich mich beziehe will ich zwei konkrete Punkte aufgreifen.

  • Dauerzuweisung einer Unterbringung...
  • Abschaffung der Taschengeld-Regelung bei Unterbringung in einer stationären Einrichtung

Dauerzuweisung in einer Unterbringung...

Berechtigt! Jedoch darf nicht vergessen werden, es muss in erster Linie darum gehen dass die Ursachen die zur Obdach- beziehungsweise Wohnungslosigkeit von Menschen führen beseitigt werden. Darüber hinaus muss natürlich auch mehr bezahlbarer Wohnraum für alle geschaffen werden.

In Köln, so unpassend diese Formulierung auch sein mag, erfolgt der Einstieg in das Hilfesystem in der Regel über eine der Notschlafstellen. Diese haben keine einheitlichen Verweildauern. Es gibt solche, wo man bis zum nächsten Tag, wo die Fachstelle Wohnen beim Wohnungsamt der Stadt Publikumsverkehr hat bleiben kann. Es gibt solche, wo man maximal fünf Nächte im Monat übernachten kann.

Wenn man bei der Fachstelle Wohnen vorspricht erfolgt die Zuweisung entweder in ein Hotel (einen gewerblichen OBG-Betrieb) oder in ein Wohnheim eines Freien Trägers. Bei einer Hotel-Zuweisung muss man alle zwei Monate zur Verlängerung zum Sozialamt. Im Vergleich zu einer Unterbringung in einem Wohnheim oder Betreutem Wohnheim verläuft die Verlängerung unbürokratisch. Man nimmt den Termin wahr, quittiert mit seiner Unterschrift dass man die Papiere für die Verlängerung bekommen hat und geht wieder, bis zum nächsten Termin in zwei Monaten. Bei Wohnheimen kann man in der Regel maximal zwei Jahre bleiben. Hier wird jedoch alle sechs Monate über einen sogenannten Hilfeplan entschieden ob weiter verlängert wird oder nicht. Diese Regelung gibt es auch im Betreuten Wohnen (BeWo).

Oft, nicht bei allen Bewohnern, kommt es vor dass man nach dem Wohnheim oder mittendrin ins BeWo kommt. Theoretisch gibt es dort keine Zeitbegrenzung wie lange man bleiben kann.

Abgesehen von der Unterbringung in einer Notschlafstelle, sollten alle Zwischenstationen und Verschiebebahnhöfe abgeschafft werden. Die Menschen müssen so lange in einer Unterkunft bleiben dürfen bis sie eine eigene Wohnung gefunden haben.

Abschaffung der Taschengeld-Regelung bei Unterbringung in einer stationären Einrichtung

Berechtigt! Man muss es sich, vereinfacht ausgedrückt, vorstellen wie wenn die Jobcenter beispielsweise das Arbeitslosengeld II an die eigenen Eltern überweist und man dann jedesmal wie ein kleines Kind als Bittsteller zu ihnen muss wenn man Geld haben will. Man unterstellt meiner Meinung nach sozusagen alle obdach- und wohnungslosen Menschen einem Generalverdacht, dass sie nicht mit ihrem Geld haushalten können. Zumindest in Köln ist das Hilfesystem hier so gestrickt, dass es eigentlichen bei allen Freien Trägern der stationären Einrichtungen so ist, dass man dem zustimmen muss, dass die Sozialleistungen (Hartz IV, Grundsicherung) an den Träger überwiesen werden und man von dort immer ein Taschengeld bekommt. Nur bei wenigen ist es wissentlich so, dass man die Leistungen auf ein eigenes Girokonto überweisen lassen kann.

Taschengeld-Regelung heißt jedoch nicht, dass man seine vollen Leistungen auch wieder zurückbekommt. Ein Teilbetrag wird für Verpflegung einbehalten, den man sich dann wieder als Verpflegungsgeld ausbezahlen lassen kann, wenn man sich selbst versorgen möchte. Zwei mal im Jahr kann man sich Kleidergeld auszahlen lassen. Die größte Summe geht jedoch für die Betreuung drauf. Das heißt sozusagen dass betroffene Menschen das System der Unterkünfte bei der Obdach- und Wohnungslosenhilfe selbst finanzieren. Eigentlich wird es doppelt finanziert. Abhängig davon auf Grund von welchem Paragraphen man in einer Unterkunft aufgenommen wird, springen in Köln die Stadt Köln beziehungsweise der Landschaftsverband Rheinland als Kostenträger ein. Das heißt die Betreiber der Einrichtungen bekommen zweimal Kohle.

Das die Menschen selbstbestimmt, frei und menschenwürdig leben können, damit einhergehend die Möglichkeit sich selbst versorgen zu können, muss absolute Priorität haben.

 
Weiterlesen...

from nandabanda

Zepeto Hack Cheats Get Unlimited Coins And Tips & Tricks For Zepeto Coins Zepeto Cheats are available for browser, Android and iOS! With its help, you will be able to get unlimited Coins! It’s extremly easy to use and there is no need to download anything. This Zepeto Online Cheat was just released and its purpose is to easily give you as many Coins as you need without spending your money. So if you’re looking for a way to get easy Coins, this is the best place for you. Our Zepeto Guide is the best, it contains detailed instructions, so everyone will be able to use it!

Go to – https://store.gamesdynamo.com/zepeto-hack-coins-generator-online-2/

Zepeto is a popular game recently released on iOS and Android. You can make yourself a cute 3-d character by using a wide variety of customized alternatives. You’re able to adjust many factors of the character such as hair shade, eye shape and so on. In case you aren’t satisfied along with your first made character, you may rebuild it until you are satisfied with it. There are plenty of things you need to learn about the game, our Zepeto cheats and suggestions will enable to do anything you want! It’s not that easy to create a working Zepeto Cheat that works perfect, but we managed to do it, so feel free to try it right away!

Go to – https://store.gamesdynamo.com/zepeto-hack-coins-generator-online-2/

If you love social video games, then you will love this! Our new Zepeto Cheats work on every device and we make sure to bring you new updates every week! We hope you will enjoy new features that are going to be released! For now, you can get unlimited Coins, but we plan to implement more stuff! Our Zepeto Cheats are safe to use, and we recommend you to try it right away! If you have any questions, feel free to leave a comment!

Go to – https://store.gamesdynamo.com/zepeto-hack-coins-generator-online-2/

Tags – Zepeto Hack android, Zepeto Cheat, Zepeto Cheats, Zepeto Hack no survey, Zepeto nedlasting, Zepeto hack herunterladen, Zepeto hacka ladda, Zepeto hackear baixar, Zepeto hackear descarga, Zepeto hakata ladata, Zepeto hacke laste ned, Zepeto cheat without taking any survey, Zepeto triche, Zepeto astuce, Zepeto trucchi, Zepeto astuces, Zepeto mod apk, mod for Zepeto, Zepeto money hack, Zepeto Glitch ios, Zepeto Money Glitches, how to hack Zepeto 2019, Zepeto Coins Hack No Human Verification, Zepeto Codes, Triche pour Zepeto, Zepeto codigo,

 
Read more...

from Byte for your thoughts

Advanced use cases

In this part of CLI development series I'll go over some of the more advanced use cases. I've previously discussed general tips for making command line apps nice to use. If you missed that blog post you can find it here.

As use cases grow more complex it makes more and more sense to look for existing solutions and reuse / incorporate them into our own applications. That's why I'll devote more space in this post to highlighting existing projects, as opposed to talking about my own experiences.

Source code generation

One use case where CLIs excel is project scaffolding and code generation. For example of such apps you can take a look at Yeoman and its list of generators. Yeoman itself is oriented towards web development, although its most popular generator JHipster outputs Spring Boot applications. As a side note, if you ever find yourself with some spare time, checking out JHipster is a wonderful way to spend few hours. One more old school example of project scaffolding in Java world are Maven archetypes.

If you look at those examples you will quickly find that they provide rich set of features and customizations. One thing that most dedicated code generation tools have in common is a plugin system that allows users to define their own templates. If code generation is your primary use case, developing a plugin for an existing tool is a good idea. That approach will save you a lot of time and you'll end up with a more polished product.

On the other hand, there are CLIs that offer code generation as an addition to their core features. For example think of init commands in tools like npm or git. Extracting scaffolding features out of these tools and delegating it to dedicated code generations apps would be detrimental to user experience. If you find yourself in a similar situation you should implement code generation within your CLI instead.

Most popular approach to code generation is to treat source files as plain text. In order to generate them you will need a good templating library. I've had to use some clumsy and cumbersome templating libs in legacy projects so I appreciate the importance of picking a library that works for you. One experiment I like to do when evaluating a templating library is to try to make a template for serializing some data structure into a pretty formatted json. Json format has a few tricky rules, like requiring comma after all but the last property, escaping quotes in string values, proper indentation for pretty format etc. If a templating library makes writing json templates enjoyable you'll probably have no problems with source code.

One last trick that can simplify source code generation is running output of your CLI through standard formatters for the language you are generating. This doesn't work if there are competing formatting standards, or if community uses widely different formats. Example of this would be Java world where no two code bases look the same. On the other hand, Go programming language comes with prescribed gofmt formatter that code generation tools use. Having properly formatted source code becomes important when it comes to pull requests and similar situation that require diffing 2 files / versions.

Introspection

Another advanced use case for CLIs is source code analysis. This one is more complicated that source code generation. While generation can be implemented using text manipulation, in order to analyze source code you will generally need to tokenize it and build a syntax tree out of it. This is getting away from templating and into compiler theory.

Fortunately, most modern languages provide tools for introspection of their own source code. So, if you know you'll need to analyze Java code it might be a good idea to write your CLI in Java. You can probably find a library for parsing your language of choice, which you can reuse in your tool.

Problems with this approach arise if you need your tool to analyze multiple languages. One example of this is code editors and IDEs. A common solution for that type of apps is to use Language Server protocol to communicate to dedicated language server implementations. That way the application code is decoupled from language servers which can be implemented for each language. A more advanced example is source{d} engine, an application for source code analysis. Under the hood it is using Babelfish, a universal code parser that can produce syntax trees for various languages. Like LSP, it too has dedicated language drivers executing in separate Docker containers that communicate with a single app server over gRPC.

If your CLI requires analysis of source code from multiple languages you should probably use one of existing solutions. If features of LSP are enough for you that seems like the most widely adopted solution. If you need full flexibility of abstract syntax trees, then Babelfish might be a bit more complex, but more powerful solution.

Text-based UI

You might find that a simple loop of reading the arguments, processing them and outputting results is no longer enough for your use case. Processing can be complex, so you may need to update users on it's progress. You may need extra input from your users. Workflow you are implementing might be complex and require continuous interaction from users. At this point you may need to build a Text-based User Interface (TUI).

Input prompts are the most basic use case. Example of this is how npm init (and may other scaffolding tools) guide users through process of setting up a project. When designing such interactions you should allow for all prompts to be customized with CLI flags, so that command can execute without any prompts. Common pattern for doing this is to add a -y / --yes flag that will automatically accept default options. In doing this you will make your command usable by larger scripts for which user interaction is impractical.

Next up, there's the use case of informing users of the progress of CLI command execution. Modern dependency management tools (again npm is a good example) will display a live progress bar while downloading dependencies. Another example is HTTP load testing tool vegeta. It can dynamically output the progress of a stress test while its running. It also does something interesting: it allows you to pipe its output through a formatter tool to a dedicated plotting terminal application jplot. Jplot then renders live charts in the terminal. This is a good pattern to follow if you need live plotting and don't feel like re-implementing it yourself.

Lastly, there are full-blown TUI applications, starting with “simple” ones like htop and on to the likes of vim and emacs. If you are thinking of building similar TUI apps you should be able to find a framework in your language of choice that can help with laying out your application's UI elements. However, if you are expecting other developers' contribution to your application, it might be a better idea to go with something like a web app UI. That way you will have a larger pool of contributors to attract to your project.

What I did

In the CLI I built for work I implemented some code generation features. For project scaffolding I actually reused an existing parent project that all subsequent ones fork off of. Because of this my init command basically does a shallow git clone of the parent repository.

I also implemented an add commands for generating config and code required to expose a new API endpoints. Since I picked Go for my language I went with standard library's template package. I found it expressive enough to write all my templates and generate properly formatted json, Groovy and Kotlin code. It has just enough features for all my use cases, and not too many as to make it complicated to use. Much like Go language itself, using it was a zen-like experience.

I did not have any use for code analysis or TUI in that particular project. However, I've recently been playing around with termui, a terminal dashboard library also written in Go. It's easy enough to work with, but my use cases are not all that advanced either.

In conclusion

This blog post concludes the series on CLI development. You can find first post that deals with picking the technology and distribution stack here, and general CLI usability tips here. While the series is done, I might have some more thought on CLI development in the future. In case you are interested in this type of content, you can:

 
Read more...