<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aloïs Micard</title>
    <description>The latest articles on DEV Community by Aloïs Micard (@creekorful).</description>
    <link>https://dev.to/creekorful</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F9371%2Fa88beefd-8905-4618-b909-1ef18e028eea.jpg</url>
      <title>DEV Community: Aloïs Micard</title>
      <link>https://dev.to/creekorful</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/creekorful"/>
    <language>en</language>
    <item>
      <title>Debian maintainer from zero to hero</title>
      <dc:creator>Aloïs Micard</dc:creator>
      <pubDate>Mon, 25 Jan 2021 07:45:23 +0000</pubDate>
      <link>https://dev.to/creekorful/debian-maintainer-from-zero-to-hero-53l6</link>
      <guid>https://dev.to/creekorful/debian-maintainer-from-zero-to-hero-53l6</guid>
      <description>&lt;p&gt;I have been using &lt;a href="https://www.debian.org/"&gt;Debian&lt;/a&gt; intensively for more than 4years, mainly on the servers I administrate. It's a really powerful &amp;amp; stable (one of the most) OS, with a &lt;em&gt;TONS&lt;/em&gt; of package available trough &lt;a href="https://en.wikipedia.org/wiki/APT_(software)"&gt;APT&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Debian has helped me in a lot of ways, and I wanted to bring something in return, even the little help I could offer. So, one year ago I have emailed a friend who is also a &lt;a href="https://wiki.debian.org/DebianDeveloper"&gt;DD&lt;/a&gt;, to ask him if he's  willing to become my mentor to help me contribute to Debian.&lt;/p&gt;

&lt;p&gt;One year ago, I've started, with his help, the &lt;a href="https://www.debian.org/doc/manuals/maint-guide/"&gt;new maintainer process&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Please note that this isn't a technical guide at ALL, it's more my opinions &amp;amp; impressions on the Debian maintainer experience.&lt;/p&gt;

&lt;h1&gt;
  
  
  1. What kind of contributions?
&lt;/h1&gt;

&lt;p&gt;You can contribute to Debian in a lot of ways: from translating, submitting bug reports / patches (bugfixes), help newcomers on forums, help package &amp;amp; maintain software, etc (&lt;a href="https://www.debian.org/intro/help"&gt;full list of wanted contributions&lt;/a&gt;).&lt;br&gt;
It only depends on your skills, your free time &amp;amp; what you like to do.&lt;/p&gt;

&lt;p&gt;I personally wanted to get involved into packaging (TL;DR: help get software into the Debian archive, so that end-users can install them with apt).&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Packaging
&lt;/h1&gt;

&lt;h2&gt;
  
  
  2.1. Learn how to make a package from scratch
&lt;/h2&gt;

&lt;p&gt;The first step is to learn how to make a package from scratch, so that you can understand exactly how it works, and therefore be able to investigate future errors. I have used the &lt;a href="https://wiki.debian.org/Packaging/Intro?action=show&amp;amp;redirect=IntroDebianPackaging"&gt;following documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I personally have spent 2 weeks reading the documentation, setting up a VM, and trial by errors. I have learned a lot of things that would help me a lot in the future.&lt;/p&gt;

&lt;p&gt;For me, learning to make a package from scratch is a &lt;em&gt;really&lt;/em&gt; important step, since it will be the core of your work as a maintainer. Nowadays, a lot of the package process is automated, especially with the &lt;em&gt;dh-make&lt;/em&gt; tools. Therefore, a lot of stuff is going on under the hood, and not knowing how packaging work will make you struggle when encountering errors / fixing packaging related bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  2.2. Learn what to package
&lt;/h2&gt;

&lt;p&gt;Once you know how to package stuff, you have to choose what you're gonna do with this new skill.&lt;/p&gt;

&lt;p&gt;Once again, several options are available:&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2.1. Create a new package
&lt;/h3&gt;

&lt;p&gt;This option may be the most interesting, especially if you already have a&lt;br&gt;
software in mind, but you're gonna ask you a some questions first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this package will fit in the archive? (copyright, usefulness, etc...)&lt;/li&gt;
&lt;li&gt;Do I have enough skills to package this software?&lt;/li&gt;
&lt;li&gt;Do I have enough free time?&lt;/li&gt;
&lt;li&gt;Doesn't this package already exist?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In case of doubt, always ask somewhere for help. You can use &lt;a href="https://wiki.debian.org/IRC"&gt;IRC&lt;/a&gt;, &lt;a href="https://www.debian.org/MailingLists/"&gt;mailing list&lt;/a&gt;, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2.2. Help maintain existing package
&lt;/h3&gt;

&lt;p&gt;There's a lot of package in &lt;a href="https://www.debian.org/devel/wnpp/rfh"&gt;RFH&lt;/a&gt; (request for help).&lt;/p&gt;

&lt;p&gt;These packages already have a maintainer, but seeking for help, meaning that he may be willing to help you update / fix bugs on the package, as well as upload it on the archive for you (sponsoring).&lt;/p&gt;

&lt;p&gt;RFH packages are really great since you'll help an existing maintainer, learn from him, be able to ask questions, and the maintainer may be willing to advocate you to become a Debian maintainer in the future (see below for more details).&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2.3. Take over abandoned package
&lt;/h3&gt;

&lt;p&gt;Sometimes, maintainer may not have enough time for their packages, and will mark a package &lt;a href="https://www.debian.org/devel/wnpp/rfa"&gt;RFA&lt;/a&gt; (request for adoption).&lt;br&gt;
These package are basically abandoned, looking for adoption. The maintainer may help you in taking over the maintenance.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Becoming a Sponsored maintainer
&lt;/h1&gt;

&lt;p&gt;When your package is finished (successfully built + tested) you can't just upload it on the Debian archive. Only DD &amp;amp; &lt;a href="https://wiki.debian.org/DebianMaintainer"&gt;DM&lt;/a&gt; can do that.&lt;/p&gt;

&lt;p&gt;You'll have to ask someone with upload rights to review it &amp;amp; upload it for you (this is called sponsoring).&lt;/p&gt;

&lt;p&gt;To ease package reviewing you can use &lt;a href="https://mentors.debian.net/"&gt;mentors&lt;/a&gt; website and/or email the &lt;a href="https://lists.debian.org/debian-mentors/"&gt;debian-mentors&lt;/a&gt; mailing list.&lt;/p&gt;

&lt;p&gt;Once your first package is on uploaded on &lt;a href="https://wiki.debian.org/DebianUnstable"&gt;unstable&lt;/a&gt;, you will be a &lt;a href="https://wiki.debian.org/SponsoredMaintainer"&gt;Sponsored maintainer&lt;/a&gt;!&lt;/p&gt;

&lt;h1&gt;
  
  
  4. Becoming a Debian maintainer
&lt;/h1&gt;

&lt;p&gt;Once you start mastering the art of packaging, you may candidate to become a Debian Maintainer (DM).&lt;/p&gt;

&lt;p&gt;DM are people with a restricted upload rights on the archive. DD can grant them upload rights for specific packages, so that they will be able to upload without sponsoring.&lt;/p&gt;

&lt;p&gt;To become a DM you must go through the &lt;a href="https://nm.debian.org/"&gt;new-member process&lt;/a&gt;, there's several steps required such as getting your PGP uid signed by a DD (to enable trust), being advocated by a DD, agreeing to the &lt;a href="https://www.debian.org/social_contract"&gt;SC&lt;/a&gt;/&lt;a href="https://www.debian.org/social_contract#guidelines"&gt;DFSG&lt;/a&gt;/&lt;a href="https://www.debian.org/devel/dmup"&gt;DMUP&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After completing all steps, your application will stay pending for 4days+ (to allow any objections to be made) and finally the keyring maintainers will add your key to the Debian keyring, making you officially a Debian maintainer.&lt;/p&gt;

&lt;h1&gt;
  
  
  5. Conclusion
&lt;/h1&gt;

&lt;p&gt;Contributing to such a big &amp;amp; distributed open source project taught me a lot of things, from technical skills such as packaging, reviewing / submitting patches, arguing about them, reporting bugs, ...&lt;/p&gt;

&lt;p&gt;To social skills such as asynchronous communication (only email &amp;amp; IRC based) all around the world, working with a lot of different mindset, culture, &lt;strong&gt;being patient&lt;/strong&gt;, humble, etc...&lt;/p&gt;

&lt;p&gt;This experience helped me to be a better software developer &amp;amp; human being.&lt;/p&gt;

&lt;p&gt;I'd like to thank the whole Debian community who is always really helpful &amp;amp; especially Alexandre Viau, my mentor, who has greatly helped me &amp;amp; pushed me to become a Debian maintainer.&lt;/p&gt;

&lt;p&gt;Happy hacking!&lt;/p&gt;

</description>
      <category>debian</category>
      <category>packaging</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Building a fast modern web crawler for the dark web</title>
      <dc:creator>Aloïs Micard</dc:creator>
      <pubDate>Mon, 23 Sep 2019 08:37:39 +0000</pubDate>
      <link>https://dev.to/creekorful/building-a-fast-modern-web-crawler-for-the-dark-web-l1</link>
      <guid>https://dev.to/creekorful/building-a-fast-modern-web-crawler-for-the-dark-web-l1</guid>
      <description>&lt;p&gt;I have been passionated by web crawler for a long time. I have written several one in many languages such as C++, JavaScript (Node.JS), Python, ... and I love the theory behind them. &lt;br&gt;
But first of all, what is a web crawler ?&lt;/p&gt;
&lt;h1&gt;
  
  
  What is a web crawler ?
&lt;/h1&gt;

&lt;p&gt;A web crawler is a computer program that browse the internet to index existing pages, images, PDF, ... and allow user to search them using a search engine. It's basically the technology behind the famous google search engine.&lt;/p&gt;

&lt;p&gt;Typically a efficient web crawler is designed to be distributed: instead of a single program that runs on a dedicated server, it's multiples instances of several programs that run on several servers (eg: on the cloud) that allows better task repartition, increased performances and increased bandwidth.&lt;/p&gt;

&lt;p&gt;But distributed softwares does not come without drawbacks: there is factors that may add extra latency to your program and may decrease performances such as network latency, synchronization problems, poorly designed communication protocol, etc...&lt;/p&gt;

&lt;p&gt;To be efficient, a distributed web crawler has to be well designed: it is important to eliminate as many bottlenecks as possible: as french admiral Olivier Lajous has said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The weakest link determines the strength of the whole chain.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;
  
  
  Trandoshan: a dark web crawler
&lt;/h1&gt;

&lt;p&gt;You may know that there is several successful web crawler running on the web such as google bot. So I didn't wanted to make a new one again. What I wanted to do this time was to build a web crawler for the dark web.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's the dark web ?
&lt;/h2&gt;

&lt;p&gt;I won't be too technical to describe what the dark web is, since it may need is own article.&lt;/p&gt;

&lt;p&gt;The web is designed is composed of 3 layers and we can think of it like an iceberg:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Surface Web, or Clear Web is the part that we browse everyday. It's indexed by popular web crawler such as Google, Qwant, Duckduckgo, etc...&lt;/li&gt;
&lt;li&gt;The Deep Web is a part of the web non indexed, It means that you cannot find these websites using a search engine but you'll need to access them by knowing the associated URL / IP address.&lt;/li&gt;
&lt;li&gt;The Dark Web is a part of the web that  you't cannot access using a regular browser. You'll need to use a particular application or a special proxy. The most famous dark web is the hidden services built on the tor network. They can be accessed using special URL who ends with .onion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0xzsbclhutcchddse7fx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0xzsbclhutcchddse7fx.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How is Trandoshan designed ?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fe1p8c16bypi4od2ip50a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fe1p8c16bypi4od2ip50a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before talking about the responsibility of each process it is important to understand how they talk to each others.&lt;/p&gt;

&lt;p&gt;The inter process communication (IPC) is mainly done using a messaging protocol known as NATS (yellow line in the diagram) based on the producers / consumers pattern. Each message in NATS has a subject  (like an email) that allow other process to identify it and therefore to read only messages they want to read. NATS allowing scaling: for example they can be 10 crawler processes reading URL from the messaging server. Each of these process will receive an unique URL to crawl. This allow process concurrency (many instances can run at the same time without any bugs) and therefore increase performances.  &lt;/p&gt;

&lt;p&gt;Trandoshan is divided in 4 principal processes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crawler&lt;/strong&gt;: The process responsible of crawling pages: it read URLs to crawl from NATS (message identified by subject "todoUrls"), crawl the page, and extract all URLs present in the page. These extracted URLs are sent to NATS with subject "crawledUrls", and the page body (the whole content) is sent to NATS with subject "content".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduler&lt;/strong&gt;: The process responsible of URL approval: this process read the "crawledUrls" messages, check if the URL is to be crawled (if the URL has not been already crawled) and If so, send the URL to NATS with subject "todoUrls"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persister&lt;/strong&gt;: The process responsible of content archiving: it read page content (message identified by subject "content") and store them into a NoSQL database (MongoDB).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: The process used by other processes to gather informations. For example it is used by the Scheduler to determinate if a page has been already crawled. Instead of directly calling the database to check if an URL exist (which would add extra coupling to the database technology) the scheduler use to &lt;strong&gt;API&lt;/strong&gt;: this allow sort of abstraction between database / processes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The different processes are written using Go: because it offer a lot of performance (since it's compiled as native binary) and has a lot of library support. Go is perfectly designed to build high performance distributed systems.&lt;/p&gt;

&lt;p&gt;The source code of Trandoshan is available on github here: &lt;a href="https://github.com/trandoshan-io" rel="noopener noreferrer"&gt;https://github.com/trandoshan-io&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to run Trandoshan ?
&lt;/h2&gt;

&lt;p&gt;As said before Trandoshan is designed to run on distributed systems and is available as docker image which make it a great candidate for the cloud. In fact there is a repository which hold all configurations files needed to deploy a production instance of Trandoshan on a Kubernetes cluster. The files are available here: &lt;a href="https://github.com/trandoshan-io/k8s" rel="noopener noreferrer"&gt;https://github.com/trandoshan-io/k8s&lt;/a&gt; and the containers images are available on docker hub.&lt;/p&gt;

&lt;p&gt;If you have a kubectl configured correctly, you can deploy Trandoshan in a simple command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./bootstrap.sh&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Otherwise you can run Trandoshan locally using docker and docker-compose. In the trandoshan-parent repository there is a compose file and a shell script that allow the application to run using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;./deploy.sh&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use Trandosan ?
&lt;/h2&gt;

&lt;p&gt;At the moment there is a little Angular application to search for indexed content. The page use the API process to perform search on the database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fltrk8fdmto5ncdfmzvgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fltrk8fdmto5ncdfmzvgp.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;That's all for the moment. Trandoshan is production ready but there's a lot of optimization to be done and features to be merged. Since it's an open source project everyone can contribute to it by doing a pull request on the corresponding project.&lt;/p&gt;

&lt;p&gt;Happy hacking !&lt;/p&gt;

</description>
      <category>go</category>
      <category>webcrawler</category>
      <category>kubernetes</category>
      <category>darkweb</category>
    </item>
  </channel>
</rss>
