mirror of
https://github.com/nicolabs/nicolabs.net.git
synced 2025-09-07 16:27:21 +02:00
3 lines
43 KiB
HTML
3 lines
43 KiB
HTML
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title> nicolabs | All articles </title> <meta name="description" content=" Work in progress... "> <meta name="keywords" content="android, development, java, javascript, python, web"> <meta name="HandheldFriendly" content="True"> <meta name="MobileOptimized" content="320"> <!-- Social: Facebook / Open Graph --> <meta property="og:type" content="website"> <meta property="og:url" content="https://www.nicolabs.net/articles"> <meta property="og:title" content=" nicolabs | All articles "> <meta property="og:image" content="https://www.nicolabs.net"> <meta property="og:description" content=" Work in progress... "> <meta property="og:site_name" content="nicobo"> <meta property="og:locale" content="en_US"> <!-- Social: Twitter --> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="nic0b0"> <meta name="twitter:title" content=" nicolabs | All articles "> <meta name="twitter:description" content=" Work in progress... "> <meta name="twitter:image:src" content="https://www.nicolabs.net"> <!-- Social: Google+ / Schema.org --> <meta itemprop="name" content=" nicolabs | All articles "> <meta itemprop="description" content=" Work in progress... "> <meta itemprop="image" content="https://www.nicolabs.net"> <!-- rel prev and next --> <link rel="stylesheet" href="/assets/css/main.css"> <!-- Canonical link tag --> <link rel="canonical" href="https://www.nicolabs.net/articles"> <link type="application/atom+xml" rel="alternate" href="https://www.nicolabs.net/feed.xml" title="nicolabs" /> <script type="text/javascript"> var disqus_shortname = 'nicolabs'; </script> <!-- Enable displaying pictures in full size using the Fullscreen API --> <!-- A polyfill that also simplifies the API. TODO maybe there are others closer to the norm and with more features. Still chances are this will not work on iPhone without using a full-fledged Js library. --> <script src="/assets/lib/screenfull.js/dist/screenfull.min.js"></script> <!-- This code selects which elements and how fullscreen is triggered --> <script> document.addEventListener("DOMContentLoaded", function(event) { var els = document.getElementsByClassName("plantuml"); for ( var e=0 ; e<els.length ; e++ ) { var el = els[e]; el.addEventListener('click', function() { if (screenfull.isEnabled) { screenfull.toggle(el); el.classList.toggle("fullscreen"); } else { console.log("Fullscreen not supported"); } }); } }); </script> <script> window.onscroll = function() { if (document.body.scrollTop > 0 || document.documentElement.scrollTop > 0) { document.querySelector('.site-header').classList.add('site-header-pinned'); } else { document.querySelector('.site-header').classList.remove('site-header-pinned'); } }; </script> </head> <body> <main class="wrapper"> <header class="site-header"> <nav class="nav"> <div class="container"> <h1 class="logo"><a href="/">nico<span>labs</span></a></h1> <ul class="navbar"> <li><a href="/about">about</a></li> <li><a href="/articles">articles</a></li> <li><a href="/feed.xml">feed</a></li> </ul> </div> </nav> </header> <article class="page container"> <header class="page-header"> <h1 class="page-title">All articles</h1> </header> <div class="page-content"> <h2 class="chapter-links"> <a href="/tags">by tag</a> </h2> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2024-12-21T00:00:00+01:00" itemprop="datePublished">Dec 21, 2024</time> — <a class="post-title post-link" href="/2024/LineageOS4microG-Upgrade">Install LineageOS with Google Services and root</a> <span class="maturity-label maturity-draft" title="Maturity of this article : draft < good < stable or deprecated">draft</span> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2024/LineageOS4microG-Upgrade"> <p>LineageOS does not ship with Google apps (“gapps”), which are unfortunately required for some usages (localization, push notifications, Maps API) and by few apps which depend directly on it (which is actually a bad practice). Although LineageOS provides [a procedure to install gapps]((https://wiki.lineageos.org/gapps/), they DO NOT support it.</p> <p><span href="https://lineage.microg.org/">LineageOS of microG</span> provides LineageOS images for your phone, <em>directly shipping with microG</em>, which is an implementation of gapps. shipping</p> <p>This short tutorial gives some details about the <strong>upgrade</strong> procedure, which... </p> </div> <a class="post-link readmore" href="/2024/LineageOS4microG-Upgrade">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2024-06-05T00:00:00+02:00" itemprop="datePublished">Jun 5, 2024</time> — <a class="post-title post-link" href="/2024/Intro-home-automation">Introduction to Home Automation</a> <span class="maturity-label maturity-draft" title="Maturity of this article : draft < good < stable or deprecated">draft</span> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2024/Intro-home-automation"> <p>Recently, I have been looking for a way to measure the typical energy consumption of the electric equipments I have at home. I only wanted to buy a simple plug-in energy monitor but I ended up spending several days to understand what were the possible options (and about 6 more hours to write this article…) !</p> <p>Here is what I’ve learned.</p> <h2 id="the-watt-meter-buying-guide">The watt-meter buying guide</h2> <p>What you need to measure electric power consumption is called a <em>watt-meter</em>. Depending on... </p> </div> <a class="post-link readmore" href="/2024/Intro-home-automation">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2023-06-23T00:00:00+02:00" itemprop="datePublished">Jun 23, 2023</time> — <a class="post-title post-link" href="/2023/An-email-domain-for-your-family">An email domain for your family</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2023/An-email-domain-for-your-family"> <p>Do you want your <em>tribe</em> to share the same <em>cool</em> email addresses suffix like <strong>@smith.org</strong>, <strong>@smith.family</strong>, <strong>@thesmithes.club</strong>… ?</p> <p>You have several choices : </div> <a class="post-link readmore" href="/2023/An-email-domain-for-your-family">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2023-06-06T00:00:00+02:00" itemprop="datePublished">Jun 6, 2023</time> — <a class="post-title post-link" href="/2023/protonmail-vs-mailfence">I got bored of Google reading my emails</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2023/protonmail-vs-mailfence"> <p><span href="https://proton.me/mail"><strong>Proton Mail</strong></span> and <span href="https://mailfence.com"><strong>Mailfence</strong></span> are two famous email service providers known for their privacy-friendly policies.</p> <p>You will find <span href="https://www.lifewire.com/best-secure-email-services-4136763">many</span> <span href="https://restoreprivacy.com/email/secure/">articles</span> <span href="https://www.makeuseof.com/mailfence-vs-protonmail-which-is-more-secure/">comparing</span> them as well as <span href="https://restoreprivacy.com/email/secure/">other</span> <span href="https://itsfoss.com/secure-private-email-services/">similar</span> providers, but most of them are just theoretical, so I decided to give them a <em>real world</em> test run.</p> <p>My use case was to exchange emails with <em>normal people</em> (i.e. without requiring them all to have state-of-the-art encrypted mailboxes).</p> <p>After reading enough of both providers documentation,... </p> </div> <a class="post-link readmore" href="/2023/protonmail-vs-mailfence">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2022-12-22T00:00:00+01:00" itemprop="datePublished">Dec 22, 2022</time> — <a class="post-title post-link" href="/2022/nice-MFA-setup-for-SSH">A nice multi-factor setup for SSH</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2022/nice-MFA-setup-for-SSH"> <p><img src="/assets/blog/3rdparty/pictures/solokeys.png" alt="SoloKeys" /></p> <figcaption>Illustration © 2022 SOLOKEYS - https://solokeys.com</figcaption> <p>This article shows how to set up an SSH server so that users can authenticate :</p> <ol> <li>either with a hardware token (FIDO-compatible actually)</li> <li>or with a two-factor authentication (2FA) process, using their password and a one-time password (OTP)</li> <li>from the intranet, with a standard SSH key</li> </ol> </div> <a class="post-link readmore" href="/2022/nice-MFA-setup-for-SSH">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2021-12-29T00:00:00+01:00" itemprop="datePublished">Dec 29, 2021</time> — <a class="post-title post-link" href="/2021/Tuxedo-InfinityBook-review">Tuxedo InfinityBook S 15 review</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2021/Tuxedo-InfinityBook-review"> <p><img src="/assets/blog/screenshots/tuxedo-infinity/tuxinfinity_kblight.jpg" alt="Tuxedo InfinityBook with keyboard lights" /></p> <p>After almost ten years of good and loyal services 🎖, I had to give up on my <span href="https://pcsupport.lenovo.com/us/en/products/laptops-and-netbooks/thinkpad-t-series-laptops/thinkpad-t520">Lenovo Thinkpad T520</span>, which was getting too slow for things like intensive Docker building…</p> <p>Althought I still trust Lenovo for providing excellent Linux laptops, I wanted to try one of the newcomers in the Linux laptop market.</p> <p>I made up my mind on <span href="https://www.tuxedocomputers.com/en/Linux-Hardware/Linux-Notebooks/15-16-inch/TUXEDO-InfinityBook-S-15-Gen6.tuxedo">InfinityBook S 15</span> from Tuxedo Computers (‘TC’).</p> <h2 id="whats-in-the-box">What’s in... </h2> </div> <a class="post-link readmore" href="/2021/Tuxedo-InfinityBook-review">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2021-03-23T00:00:00+01:00" itemprop="datePublished">Mar 23, 2021</time> — <a class="post-title post-link" href="/2021/Speed-up-automated-docker-build-with-github-actions">Speed up your automated Docker builds with GitHub Actions</a> <span class="maturity-label maturity-draft" title="Maturity of this article : draft < good < stable or deprecated">draft</span> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2021/Speed-up-automated-docker-build-with-github-actions"> <p><img src="/assets/blog/3rdparty/pictures/happy_international_cat_day___by_bloglaurel_dbjdmqm.jpg" alt="Docker & cats illustration by bloglaurel - https://www.deviantart.com/bloglaurel/art/Happy-International-Cat-Day-697676638" width="100%" /></p> <figcaption>Docker & cats illustration by bloglaurel - https://www.deviantart.com/bloglaurel/art/Happy-International-Cat-Day-697676638</figcaption> <h2 id="introduction">Introduction</h2> <p>The <span href="https://docs.docker.com/ci-cd/github-actions/">universally</span> <span href="https://www.docker.com/blog/docker-github-actions/">advertized</span> <span href="https://docs.github.com/en/actions/guides/publishing-docker-images">way</span> of building Docker images with GitHub is to set up a <span href="https://docs.github.com/en/actions"><strong>GitHub Actions</strong></span> workflow.</p> <p><em>Github Actions</em> (GA) is actually very easy to use but nonetheless still <span href="https://github.com/actions/cache/graphs/code-frequency">under heavy development</span>.</p> <p>Unfortunately, almost all tutorials out there are based on (the same) very simplistic use cases. I just couldn’t get it right by simply following them : I’ve literally spent hours to test and understand how to <em>leverage the cache action for Docker multi-stage builds</em>.</p> <p>I hope this post will be useful to anyone with a similar use case.</p> </div> <a class="post-link readmore" href="/2021/Speed-up-automated-docker-build-with-github-actions">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2020-05-04T00:00:00+02:00" itemprop="datePublished">May 4, 2020</time> — <a class="post-title post-link" href="/2020/Make-RPi-bluetooth-speaker-part-1">Make a Raspberry Pi a Bluetooth speaker (part 1)</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2020/Make-RPi-bluetooth-speaker-part-1"> <p><img src="/assets/blog/3rdparty/logos/Bluetooth_FM_Color.png" alt="Bluetooth logo" height="128px" /></p> <p>In this two-part article I describe the steps I had to take to make a <em>headless Raspberry Pi 4</em> a Bluetooth <span href="https://www.howtogeek.com/338750/whats-the-difference-between-bluetooth-a2dp-and-aptx/">A2DP</span> speaker.</p> <p>My goal was to offer a user-friendly way for anyone in the same room to <strong>pair its Bluetooth smartphone with the Raspberry Pi and play music through it</strong>, while making sure the <strong>neighbors won’t be able to connect without approval</strong>.</p> <p>To output music, you can <strong>connect a Hi-Fi system to... </strong></p> </div> <a class="post-link readmore" href="/2020/Make-RPi-bluetooth-speaker-part-1">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2020-04-13T00:00:00+02:00" itemprop="datePublished">Apr 13, 2020</time> — <a class="post-title post-link" href="/2020/Bypassing-GitHub-Jekyll-limitations">Bypassing GitHub's Jekyll limitations</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2020/Bypassing-GitHub-Jekyll-limitations"> <p><img src="https://github.com/jekyll/brand/raw/master/jekyll-logo-dark-solid.png" alt="Jekyll logo - CC-BY-4.0 License" width="100%" /></p> <figcaption>Jekyll logo - CC-BY-4.0 License - https://github.com/jekyll/brand</figcaption> <p>As I feared when I <span href="/2016/Migrating-from-Drupal-to-Jekyll">migrated to GitHub’s hosting</span>, it has become too complicated to overcome GitHub’s limitations on Jekyll plugins and features.</p> <p>I just needed to create a <span href="https://jekyllrb.com/docs/collections/"><em>collection</em></span> to put my <span href="/2016/Migrating-from-Drupal-to-Jekyll">“live drafts”</span> into it, but the deprecated <em>jekyll-paginate</em> plugin provided with GitHub pages didn’t support collections.</p> <p>I therefore switched to offline-building my site and pushing the generated static... </p> </div> <a class="post-link readmore" href="/2020/Bypassing-GitHub-Jekyll-limitations">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2020-03-26T00:00:00+01:00" itemprop="datePublished">Mar 26, 2020</time> — <a class="post-title post-link" href="/2020/Docker-on-raspberry-pi-3-4">Docker on Raspberry Pi 3 & 4</a> <span class="maturity-label maturity-draft" title="Maturity of this article : draft < good < stable or deprecated">draft</span> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2020/Docker-on-raspberry-pi-3-4"> <h2 id="why-docker-is-not-working-out-of-the-box-on-raspberry-pi-3--4">Why Docker is not working out-of-the-box on Raspberry Pi 3 & 4</h2> <p>Docker is a virtualization technology, made to allow applications to be independent from the underlying system. However because it is not a full-fledge virtual machine but rather a proxy to system resources leveraging on Linux kernel’s virtualization features, it does not provide a total independance from the system’s CPU architecture.</p> <p>This is a problem with Raspberry Pi because most of the Docker images around are built for... </p> </div> <a class="post-link readmore" href="/2020/Docker-on-raspberry-pi-3-4">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2019-04-27T00:00:00+02:00" itemprop="datePublished">Apr 27, 2019</time> — <a class="post-title post-link" href="/2019/My-favorite-tools-I-want-to-tell-the-world">My favorite tools I want to tell the world about</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2019/My-favorite-tools-I-want-to-tell-the-world"> <p>This page lists some tools I’ve been using with success for a while : they may fit your needs as well !</p> <h2 id="sweet-home-3d">Sweet Home 3D</h2> <p><img src="https://www.sweethome3d.com/images/SweetHome3DLogo.png" alt="Sweet Home 3D logo" /></p> <blockquote> <p><span href="https://www.sweethome3d.com">Sweet Home 3D</span> is a free interior design application which helps you draw the plan of your house, arrange furniture on it and visit the results in 3D.</p> </blockquote> <p>And it works. I’ve been using it for years and I can still open the models,... </p> </div> <a class="post-link readmore" href="/2019/My-favorite-tools-I-want-to-tell-the-world">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2016-11-13T00:00:00+01:00" itemprop="datePublished">Nov 13, 2016</time> — <a class="post-title post-link" href="/2016/Migrating-from-Drupal-to-Jekyll">Migrating from Drupal to Jekyll</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2016/Migrating-from-Drupal-to-Jekyll"> <p><img src="/assets/blog/nicobo-landscape.png" alt="Previous blog's banner background" /></p> <h2 id="new-blog-concept-">New blog concept ?</h2> <p>I write articles about things that required enough amount of work for them to be considered worth sharing. Writing, in turn, also require a fair amount of work to be comprehensive and accurate enough.</p> <p>I have to admit however that I don’t have time to write advanced articles as much as I would like to. Many of them just stay unfinished in a draft state, never published…</p> <p>Therefore... </p> </div> <a class="post-link readmore" href="/2016/Migrating-from-Drupal-to-Jekyll">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2015-11-08T14:24:13+01:00" itemprop="datePublished">Nov 8, 2015</time> — <a class="post-title post-link" href="/articles/python-versus-shell-scripting-experience">Python versus Shell scripting : from experience</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/python-versus-shell-scripting-experience"> <p><img src="/assets/blog/Selection_008.png" alt="Python vs Shell" /></p> <p>A quick “pros & cons” to choose between Python or Shell scripting, from what I’ve observed through the years.</p> <p>This could probably apply to other high level script languages* vs shell.</p> <p>* <em>Like Ruby, but not like Perl, as it shares more with shells from my point of view, like unreadable syntax and execution speed.</em></p> <h2 id="choose-python-for-">Choose Python for :</h2> <ul> <li><strong>its simple syntax</strong> : can be read even by non Python-speaking people. End... </li></ul> </div> <a class="post-link readmore" href="/articles/python-versus-shell-scripting-experience">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2015-03-28T17:18:57+01:00" itemprop="datePublished">Mar 28, 2015</time> — <a class="post-title post-link" href="/2015/Sass-is-a-CSS-compiler">Sass is a CSS compiler</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2015/Sass-is-a-CSS-compiler"> <p><img src="/assets/blog/sass-color-1c4aab2b.png" alt="Sass logo" /></p> <p>A year ago I was very excited to get my hands at <em>Sass</em>.</p> <p>I thought it could fill the gaps in coding with CSS : preventing variables duplications, automatic generation of multiple static stylesheets depending on the rendering device (vs using media queries which are not always supported and require downloading all versions of the code)…</p> <p>But it could not.</p> <h2 id="what-really-is-saas">What really is Saas</h2> <p><span href="http://sass-lang.com/">Sass-lang.com</span> states it is a “CSS extension language”, but... </p> </div> <a class="post-link readmore" href="/2015/Sass-is-a-CSS-compiler">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2015-01-29T23:52:38+01:00" itemprop="datePublished">Jan 29, 2015</time> — <a class="post-title post-link" href="/articles/scaffolding-web-20">Scaffolding the Web 2.0</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/scaffolding-web-20"> <h2 id="starting-up-with-web-20-development-">Starting up with Web 2.0 development ?</h2> <p>Let’s choose between three essentials tools to begin a new project !</p> <p><img src="/assets/blog/h5bp.png" alt="h5bp" class="inline" height="120px" width="120px" /> <img src="/assets/blog/html5-logo-165.png" alt="initializr" class="inline" height="120px" width="120px" /> <img src="/assets/blog/yeoman.png" alt="yeoman" class="inline" height="120px" width="120px" /></p> <h2 id="-html5-boilerplate"><img src="/assets/blog/h5bp-logo.png" alt="H5BP logo (star)" class="inline" style="vertical-align:middle;" /> HTML5 Boilerplate</h2> <p><strong>HTML5 Boilerplate</strong> (a.k.a. <em>H5BP</em>) is the original scaffolding tool by Paul Irish & Co (will have to search for the exact history…).</p> <p>It allows you to build a... </p> </div> <a class="post-link readmore" href="/articles/scaffolding-web-20">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2014-05-20T09:10:45+02:00" itemprop="datePublished">May 20, 2014</time> — <a class="post-title post-link" href="/articles/pinned-portableapps-windows-7">Pinned PortableApps on Windows 7</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/pinned-portableapps-windows-7"> <p>If you are using <em>PortableApps</em>, you might have noticed that some programs like <em>Firefox</em> or <em>PuTTY</em> launched from Windows 7’s task bar starts the system wide installation instead of the PortableApps’s one.</p> <p>This is because when you pin a program to the task bar, it uses the executable of the current process, and with <em>PortableApps</em> this executable is not the same as the launcher, which takes care of loading the portable configuration.</p> <p><img src="/assets/blog/win7_taskbar_pinned_putty.png" alt="Putty shortcut" /></p> <p>=> edit the... </p> </div> <a class="post-link readmore" href="/articles/pinned-portableapps-windows-7">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2013-06-15T13:44:22+02:00" itemprop="datePublished">Jun 15, 2013</time> — <a class="post-title post-link" href="/fr/articles/un-oeuf-avec-gimp">Comment préparer un oeuf avec Gimp</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/fr/articles/un-oeuf-avec-gimp"> <p><img src="/assets/blog/egg-evolution_0.png" alt="L'oeuf évolue !" /></p> <p>Voici un petit guide pour dessiner un oeuf avec <span href="http://www.gimp.org/">Gimp</span>.</p> <p>Les techniques décrites ici permettent à la fois de dessiner un oeuf réaliste pour les boulots sérieux <strong>(!)</strong> et un oeuf type “bande dessinée”, typiquement à usage de gamification <strong>;-)</strong></p> <p>Vous trouverez le fichier Gimp complet en pièce jointe, que je vous invite à réutiliser ou à prendre comme source d’inspiration.</p> <blockquote> <p>Etant un utilisateur occasionnel de Gimp, je ne garantis pas que... </p></blockquote> </div> <a class="post-link readmore" href="/fr/articles/un-oeuf-avec-gimp">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2013-06-15T13:44:22+02:00" itemprop="datePublished">Jun 15, 2013</time> — <a class="post-title post-link" href="/articles/how-cook-egg-gimp">How to cook an egg with a Gimp</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/how-cook-egg-gimp"> <p><img src="/assets/blog/egg-evolution_0.png" alt="The egg evolves !" /></p> <p>Here is a tutorial to draw an egg with <span href="http://www.gimp.org/">Gimp</span>.</p> <p>With the following techniques, you will be able to build a realistic egg for a serious business <strong>(!)</strong> as well as a cartoonish one typically for a gamification usage <strong>;-)</strong></p> <p>You will find the full Gimp source attached to this article, which I invite you to reuse at will.</p> <blockquote> <p>Being a casual user of Gimp, there might be better approaches to... </p></blockquote> </div> <a class="post-link readmore" href="/articles/how-cook-egg-gimp">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2013-02-25T13:33:16+01:00" itemprop="datePublished">Feb 25, 2013</time> — <a class="post-title post-link" href="/articles/unicode-essentials-java">Unicode essentials for Java</a> <span class="maturity-label maturity-draft" title="Maturity of this article : draft < good < stable or deprecated">draft</span> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/unicode-essentials-java"> <h2 id="draft-">Draft !</h2> <p><img src="/assets/blog/rosetta_unicode.jpg" alt="Rosetta Stone + Unicode logo" /></p> <p>Today, all developers have heard of Unicode : this character encoding allows all characters of any language in the world.</p> <p>This article outlines the basics of Unicode through some key points for <strong>Java developers</strong>.</p> <p>It also talks about the influence of Unicode on the JVM, like how characters are stored into a <code class="language-plaintext highlighter-rouge">String</code> and why you have to get cautious when using <code class="language-plaintext highlighter-rouge">char</code> and <code... </p> </div> <a class="post-link readmore" href="/articles/unicode-essentials-java">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-11-28T14:48:21+01:00" itemprop="datePublished">Nov 28, 2012</time> — <a class="post-title post-link" href="/2012/What-are-WebSockets">What Are Websockets</a> <span class="maturity-label maturity-draft" title="Maturity of this article : draft < good < stable or deprecated">draft</span> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2012/What-are-WebSockets"> <p>Why the need for WebSockets ?</p> <p>We already have sockets (C programmers know them well), XMLHttpRequest (core of AJAX techniques), Long polling (like comet, …). So why the need for WebSocket ?</p> <p>Here is an exerpt from the WebSocket RFC’s abstract :</p> <p>The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or <iframe>s and long polling).</p> <ul> <li>... </li></ul> </div> <a class="post-link readmore" href="/2012/What-are-WebSockets">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-10-24T18:47:21+02:00" itemprop="datePublished">Oct 24, 2012</time> — <a class="post-title post-link" href="/articles/simpledateformat-versus-xsddatetime">SimpleDateFormat versus xsd:dateTime</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/simpledateformat-versus-xsddatetime"> <h2 id="time-zones-in-xml-schema-and-java">Time zones in XML Schema and Java</h2> <p>For interoperability reasons, it often makes sense for applications to transmit dates and times as <strong>xsd:dateTime</strong> strings, as this standard should serve all common cases.</p> <p><em>XML Schema</em>’s <em>dateString</em> type was inspired by the extended syntax of <em>ISO 8601</em> : a sample string would be <code class="language-plaintext highlighter-rouge">2000-03-04T23:00:00.000+03:00</code> (March 4th, 2000, 11:00:00 PM in a time zone that’s 3 hours after UTC).</p> <blockquote> <p>ISO 8601 also defines another (more compact) syntax : <code... </p></blockquote> </div> <a class="post-link readmore" href="/articles/simpledateformat-versus-xsddatetime">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-09-22T14:28:15+02:00" itemprop="datePublished">Sep 22, 2012</time> — <a class="post-title post-link" href="/2012/Version-control-integration-for-Ubuntu-12.04">Version control integration for Ubuntu 12.04</a> <span class="maturity-label maturity-deprecated" title="Maturity of this article : draft < good < stable or deprecated">deprecated</span> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2012/Version-control-integration-for-Ubuntu-12.04"> <p>I’ve been used to great <em>Eclipse</em> plugins to deal with SVN-versionned projects for a long time.</p> <p>Nowadays I’m using <strong>Mercurial</strong> (a.k.a. <em>Hg</em>) a lot and it became more handy to me to use <em>Tortoise</em>-like products, which integrate directly into the OS’ file manager.</p> <p>I’ve come to use the following solutions for the different platforms I’m working with (on Ubuntu 12.04).</p> <h3 id="mercurial-for-nautilus">Mercurial for Nautilus</h3> <p><em>TortoiseHg</em> works fine, but I had to add a script to have the corresponding “Actions” menu... </p> </div> <a class="post-link readmore" href="/2012/Version-control-integration-for-Ubuntu-12.04">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-07-30T14:09:50+02:00" itemprop="datePublished">Jul 30, 2012</time> — <a class="post-title post-link" href="/articles/building-pycrypto-win32">Building PyCrypto for Win32</a> <span class="maturity-label maturity-deprecated" title="Maturity of this article : draft < good < stable or deprecated">deprecated</span> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/building-pycrypto-win32"> <blockquote> <p>This article contains instructions to build PyCrypto 2.6 for Windows XP (32 bits).</p> </blockquote> <p><img src="/assets/blog/python-logo-master-v3-TM-flattened-75.png" alt="Python logo" /></p> <p>The <span href="https://www.dlitz.net/software/pycrypto/">PyCrypto</span> library provides Python with implementation for a lot of algorithms for cryptography. It’s very useful.</p> <p>Ubuntu has it by default but if you want to have it for Python 3.2 on Windows, you must use <span href="http://www.activestate.com/activepython">Active Python</span>, as there is no other binary release for Python 3.2 on the web.</p> <p>In case you want to use... </p> </div> <a class="post-link readmore" href="/articles/building-pycrypto-win32">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-06-14T01:03:28+02:00" itemprop="datePublished">Jun 14, 2012</time> — <a class="post-title post-link" href="/articles/paper-backup-your-private-key">A paper backup for your private key</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/paper-backup-your-private-key"> <p><strong>This article focuses on Android and Java keystores, but it applies as well to any key that can be printed as plain text.</strong></p> <p><strong>Before printing a private key, make sure that it is what you need : for instance you would rather print a revocation certificate for an OpenPGP key since you can still sign content with a new key. This is not the case for Android, which requires the same key for every release of an application.</strong></p> <h2 id="securing-a-private-key">Securing... </h2> </div> <a class="post-link readmore" href="/articles/paper-backup-your-private-key">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-05-08T12:11:57+02:00" itemprop="datePublished">May 8, 2012</time> — <a class="post-title post-link" href="/articles/addthis-drupal">AddThis for Drupal</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/addthis-drupal"> <blockquote> <p>This small article might help you to figure out quickly how to work with the AddThis module for Drupal.</p> <p>It is not a substitute to <span href="http://drupal.org/node/418356">the original documentation</span> : it just provides a concrete view of the configuration process from my experience.</p> </blockquote> <h2 id="configure-it">Configure it</h2> <p>Here is an overview of the main steps to get <em>AddThis</em> working on Drupal :</p> <ol> <li>install the module : <span href="http://drupal.org/project/addthis">drupal.org/project/addthis</span></li> <li>choose in which nodes it appears : page, story, teasers,... </li></ol> </div> <a class="post-link readmore" href="/articles/addthis-drupal">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-05-06T18:22:47+02:00" itemprop="datePublished">May 6, 2012</time> — <a class="post-title post-link" href="/articles/displaying-your-tweets-your-drupal-blog">Displaying your tweets on your Drupal blog</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/displaying-your-tweets-your-drupal-blog"> <h2 id="twitter-module-for-drupal">Twitter module for Drupal</h2> <p>If you want to display your latest tweets on your Drupal blog, you will probably want to use the dedicated <span href="http://drupal.org/project/twitter">Twitter module</span>. Among other features, this module provides a new block type that lists a selection of tweets from an account. Tweets are retrieved via a cron job and stored in your website’s database, making them available even through corporate firewalls that banish twitter.com. Just-what-you-need !</p> <p>There are a few catches however : it... </p> </div> <a class="post-link readmore" href="/articles/displaying-your-tweets-your-drupal-blog">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-03-01T12:56:02+01:00" itemprop="datePublished">Mar 1, 2012</time> — <a class="post-title post-link" href="/2012/Remove-stock-apps">Remove the stock apps</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/2012/Remove-stock-apps"> <p><em>Stock apps</em> are the applications installed by default when you buy a branded phone. Most of them are <strong>useless</strong>, <strong>not optimized</strong> and have <strong>open source alternatives</strong> that can protect your privacy.</p> <p>JUST REMOVE THEM.</p> <p>Below, for instance, are listed ring files on my <em>Xperia X10 Mini</em>. Just look at which ones are the largest : Sony Ericsson and SFR (carrier)…</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># busybox ls --color=never -lS /system/media/audio/ringtones busybox ls --color=never -lS /system/media/audio/ringtones total 2977 -rw-r--r-- 1 0...
|
||
</code></pre></div></div> </div> <a class="post-link readmore" href="/2012/Remove-stock-apps">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-01-25T22:25:10+01:00" itemprop="datePublished">Jan 25, 2012</time> — <a class="post-title post-link" href="/articles/migrating-subversion-mercurial">Migrating from Subversion to Mercurial</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/migrating-subversion-mercurial"> <blockquote> <p>Instructions are aimed at Windows mainly (on Linux it should be easier).</p> </blockquote> <h2 id="need-to-migrate-from-subversion-to-mercurial-">Need to migrate from Subversion to Mercurial ?</h2> <p>This is a quick guide to migrating an existing <em>SVN</em> repository to a new <em>Hg</em> one.</p> <p>It takes 2 major steps :</p> <ol> <li>make a local copy of the existing SVN repository</li> <li>convert it to Hg</li> </ol> <h3 id="make-a-local-copy-of-the-existing-svn-repository">Make a local copy of the existing SVN repository</h3> <p>Oddly enough, this was the hardest part to figure out... </p> </div> <a class="post-link readmore" href="/articles/migrating-subversion-mercurial">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-01-18T22:13:36+01:00" itemprop="datePublished">Jan 18, 2012</time> — <a class="post-title post-link" href="/articles/httpclient-3x-portable-ssl-socket-factory-implementation">HttpClient 3.x : a portable SSL Socket Factory implementation</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/httpclient-3x-portable-ssl-socket-factory-implementation"> <h2 id="im-hell">I*M Hell</h2> <p>I was just trying to implement client and server authentication over SSL on IBM Websphere 6 (JRE 1.4.2)…</p> <p>Problems started to happen with a :</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>java.io.IOException: Error in loading the keystore: Private key decryption error: (java.lang.SecurityException: Unsupported keysize or algorithm parameters) at com.ibm.crypto.provider.PKCS12KeyStore.engineLoad(Unknown Source) at java.security.KeyStore.load(KeyStore.java:695) ... 30 more </code></pre></div></div> <p>… easily solved by replacing the JRE’s policy files (<code class="language-plaintext highlighter-rouge">local_policy.jar</code> and <code class="language-plaintext highlighter-rouge">US_export_policy.jar</code>) with an unlimited version of them (ah,... </p> </div> <a class="post-link readmore" href="/articles/httpclient-3x-portable-ssl-socket-factory-implementation">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2012-01-13T13:01:58+01:00" itemprop="datePublished">Jan 13, 2012</time> — <a class="post-title post-link" href="/articles/small-devices-are-ignored">Small devices are ignored</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/small-devices-are-ignored"> <p>This has been annoying me since the beginning : small screen devices are not taken into account by the vast majority of apps editors.</p> <p>Worse : despite Google’s pleading about size-caring (see <span href="http://developer.android.com/design">developer.android.com/design</span>), they recommend patterns that actually don’t fit the real small screens for which size-caring IS important. Example : the “<span href="http://developer.android.com/design/patterns/actionbar.html">action bar</span>” and other icon bars : there is no place for such bars on small screens…</p> <p>Of course the developer is able to adapt the... </p> </div> <a class="post-link readmore" href="/articles/small-devices-are-ignored">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2011-12-22T07:12:17+01:00" itemprop="datePublished">Dec 22, 2011</time> — <a class="post-title post-link" href="/articles/where-android-market-stores-downloaded-apk">Where Android Market stores the downloaded .apk</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/where-android-market-stores-downloaded-apk"> <p>Today I ran into a small problem that might happen sometimes : trying to benefit from a 2 day-only offer to download for free <span href="https://market.android.com/details?id=com.machineworksnorthwest.duke3d">Duke Nukem 3d</span> (just for fun, I don’t think it’s going to be the killer app this year ;-), I found out that my phone had not enough free memory to install it (Market told me : 56MB required).</p> <p>After having removed several apps from the memory to free enough space to install the game... </p> </div> <a class="post-link readmore" href="/articles/where-android-market-stores-downloaded-apk">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2011-12-16T20:24:21+01:00" itemprop="datePublished">Dec 16, 2011</time> — <a class="post-title post-link" href="/articles/how-organise-xml-resources">How to organise XML resources</a> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/how-organise-xml-resources"> <blockquote> <p>This is a technical article aimed at <strong>Android</strong> developers. It does not require a lot of background on Android XML resources, but if you don’t understand something just check out <span href="http://developer.android.com/guide/topics/resources/index.html">the official docs</span>.</p> </blockquote> <p>The first time I read Android developer docs, there was something that was unclear to me : <strong>what resource to put in which XML file</strong>.</p> <p>In this article, I will focus on resources in <code class="language-plaintext highlighter-rouge">res/values/</code> and give some hints about how to... </p> </div> <a class="post-link readmore" href="/articles/how-organise-xml-resources">Read more ...</a> </div> </p> </article> <article class="post-item"> <p> <div class="post-item-header"> <time class="post-meta datePublished" datetime="2011-08-11T23:11:59+02:00" itemprop="datePublished">Aug 11, 2011</time> — <a class="post-title post-link" href="/articles/tweaking-android-notifications">Tweaking Android Notifications</a> <span class="maturity-label maturity-deprecated" title="Maturity of this article : draft < good < stable or deprecated">deprecated</span> </div> <div class="excerpt"><div class="excerpt-text"><a href="/articles/tweaking-android-notifications"> <blockquote> <p>This is a technical article aimed at Android developers. It deals with <strong>undocumented features</strong> of the Android API and derives from experimental work.</p> <p>You can browse and download the sample code included in this article at <span href="http://bitbucket.org/nicobo/tweaking-android-notifications">bitbucket.org/nicobo/tweaking-android-notifications</span>.</p> </blockquote> <p>For <span href="http://bitbucket.org/nicobo/switchdataswitch">SwitchDataSwitch</span>, I wanted to provide users with a 1-click solution to enable and disable data traffic (2G/3G/…). I chose the notification bar since it is a very accessible place, visible almost all the time and that can be... </p> </div> <a class="post-link readmore" href="/articles/tweaking-android-notifications">Read more ...</a> </div> </p> </article> </div> </article> <footer class="site-footer"> <div class="container"> <small class="pull-left">©2024 All rights reserved. Graphic banner from https://showyourstripes.info</small> <small class="pull-right">by <a rel="me" href="/about#contact">@nicobo</a></small> </div> </footer> </main> </body> </html>
|