<?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: Alexandros Kornilakis</title>
    <description>The latest articles on DEV Community by Alexandros Kornilakis (@curiouzk0d3r).</description>
    <link>https://dev.to/curiouzk0d3r</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%2F470076%2F49a4d634-e21b-463e-ad92-f3e9eaca0d73.jpg</url>
      <title>DEV Community: Alexandros Kornilakis</title>
      <link>https://dev.to/curiouzk0d3r</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/curiouzk0d3r"/>
    <language>en</language>
    <item>
      <title>How to start with Deep Learning</title>
      <dc:creator>Alexandros Kornilakis</dc:creator>
      <pubDate>Sun, 11 Jul 2021 15:14:46 +0000</pubDate>
      <link>https://dev.to/curiouzk0d3r/how-to-start-with-deep-learning-3mmd</link>
      <guid>https://dev.to/curiouzk0d3r/how-to-start-with-deep-learning-3mmd</guid>
      <description>&lt;h2&gt;
  
  
  Embracing the hype
&lt;/h2&gt;

&lt;p&gt;Nowadays, everyone is talking about Artificial Intelligence. Whether understands it or not.&lt;br&gt;
This discussion essentially comes down to two terms: Machine Learning and Deep Learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Machine learning&lt;/strong&gt; (&lt;strong&gt;ML&lt;/strong&gt;) is the study of computer algorithms that improve automatically through experience and by the use of data.&lt;/p&gt;

&lt;p&gt;Deep Learning is a type of Machine Learning based on Artificial Neural Networks with multiple layers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Artificial neural networks&lt;/strong&gt; (&lt;strong&gt;ANNs&lt;/strong&gt;) are computing systems inspired by the biological neural networks that constitute animal brains.&lt;/p&gt;

&lt;p&gt;Deep Learning is gaining much popularity due to its supremacy in terms of accuracy when trained with a huge amount of data.&lt;/p&gt;

&lt;p&gt;I would say you should at least give a try to Deep Learning. It is a quite marketable skill these days.&lt;/p&gt;

&lt;h2&gt;
  
  
  A zoo of Deep Learning Frameworks
&lt;/h2&gt;

&lt;p&gt;Every beginner in Deep Learning has to choose the most suitable framework.&lt;br&gt;
Where should you invest your time though?&lt;/p&gt;

&lt;p&gt;This post is going to help you get started with DL frameworks.&lt;/p&gt;

&lt;p&gt;Frankly, you have many options. But you first need to choose your language.&lt;/p&gt;

&lt;p&gt;Most popular choices in this context: JavaScript, Python, and C++.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript
&lt;/h3&gt;

&lt;p&gt;This makes sense when you want to train or run your model in the browser.&lt;/p&gt;

&lt;p&gt;By far the most popular choice here is &lt;a href="https://www.tensorflow.org/js"&gt;TensorFlow.js&lt;/a&gt;.&lt;br&gt;
In the past, I have worked on a browser extension that uses Tersorflow.js to produce a verdict about an article’s credibility.&lt;br&gt;
The experience was really good. The main hardships with machine learning in the browser are mostly in the preprocessing libraries rather than in the algorithm itself.&lt;/p&gt;

&lt;p&gt;Another good one is &lt;a href="https://cs.stanford.edu/people/karpathy/convnetjs/"&gt;ConvNetJS&lt;/a&gt; - but I don’t have much experience using that.&lt;/p&gt;

&lt;h3&gt;
  
  
  C++
&lt;/h3&gt;

&lt;p&gt;Obvious benefit: performance.&lt;br&gt;
You will lose some of the convenience of scripting languages, but will also get rid of the overhead.&lt;/p&gt;

&lt;p&gt;3 Popular libraries: &lt;a href="https://caffe.berkeleyvision.org/"&gt;Caffe&lt;/a&gt;, &lt;a href="https://docs.microsoft.com/en-us/cognitive-toolkit/"&gt;The Microsoft Cognitive Toolkit&lt;/a&gt; and &lt;a href="http://leenissen.dk/fann/wp/"&gt;Fast Artificial Neural Network Library (FANN)&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Last but not least: Python
&lt;/h3&gt;

&lt;p&gt;Most Data Scientists are using either Python or Matlab and R.&lt;/p&gt;

&lt;p&gt;Python has become by far the most widely used language for DL.&lt;br&gt;
4 popular frameworks: &lt;a href="https://pytorch.org/"&gt;PyTorch&lt;/a&gt;, &lt;a href="https://www.tensorflow.org/"&gt;TensorFlow&lt;/a&gt;, &lt;a href="https://github.com/aesara-devs/aesara"&gt;Aesara&lt;/a&gt; and &lt;a href="https://keras.io/"&gt;Keras&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let’s compare them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PyTorch&lt;/strong&gt;: &lt;/p&gt;

&lt;p&gt;Developed by Facebook AI, it has a reputation for simplicity, ease of use, flexibility, efficient memory usage, and dynamic computational graphs.&lt;/p&gt;

&lt;p&gt;It is one of the easiest to get started with. And it is mostly being used for research.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tensorflow&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Developed by Google, it is known for documentation and training support, scalable production, multiple abstraction levels, and support for different platforms, such as Android.&lt;/p&gt;

&lt;p&gt;It has a steeper learning curve and is mostly being used in the industry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keras&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Keras is an effective high-level neural network API and the easiest for beginners.&lt;/p&gt;

&lt;p&gt;This open-source neural network library is designed to provide fast experimentation with deep neural networks, and it can run on top of CNTK, TensorFlow, and Theano.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aesara&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Former project name: Theano.&lt;br&gt;
Theano was developed by the Universite de Montreal and is a foundational library used for DL in Python.&lt;/p&gt;

&lt;p&gt;It’s considered the grandfather of deep learning frameworks and has fallen out of favor by most researchers outside academia.&lt;/p&gt;

&lt;p&gt;Now the project is abandoned, and the repo points to the Aesara project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Aesara is suitable for the rapid development of custom operators and symbolic optimizations.&lt;/p&gt;

&lt;p&gt;It implements an extensible graph transpilation framework that currently provides compilation via C,  &lt;a href="https://github.com/google/jax"&gt;JAX&lt;/a&gt; and  &lt;a href="https://github.com/numba/numba"&gt;Numba&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  BONUS - Julia
&lt;/h2&gt;

&lt;p&gt;Julia is a new language for data science that is increasing in popularity.&lt;br&gt;
It is built to provide flexibility and performance. I must say that Julia is optimized for heavy matrix operations.&lt;/p&gt;

&lt;p&gt;If you are interested in trying Machine Learning with Julia I would suggest trying &lt;a href="https://fluxml.ai/"&gt;Flux&lt;/a&gt;, a Machine Learning Stack.&lt;/p&gt;

&lt;p&gt;If you want to use Tensorflow there is a Julia wrapper for that, called &lt;strong&gt;TensorFlow.jl&lt;/strong&gt;.&lt;br&gt;
The experience will be quite smooth :).&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>deeplearning</category>
      <category>python</category>
    </item>
    <item>
      <title>The laws of UX</title>
      <dc:creator>Alexandros Kornilakis</dc:creator>
      <pubDate>Thu, 17 Jun 2021 09:15:56 +0000</pubDate>
      <link>https://dev.to/curiouzk0d3r/the-laws-of-ux-3ime</link>
      <guid>https://dev.to/curiouzk0d3r/the-laws-of-ux-3ime</guid>
      <description>&lt;p&gt;Hi friends!&lt;/p&gt;

&lt;p&gt;I have recently made a Twitter thread and felt I had to share it with our community here :)&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--7vyFVOd6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1399351812545822722/qQf4v-36_normal.jpg" alt="Alexis ⌨️ profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Alexis ⌨️
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @ck0d3r
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      I must admit that I am lacking UI/UX skills. So I decided to improve a bit.&lt;br&gt;&lt;br&gt;In the process I learned something useful that I want to share with you!&lt;br&gt;&lt;br&gt;It's called: "The Laws of UX"&lt;br&gt;&lt;br&gt;Thread 🧵👇
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      10:48 AM - 16 Jun 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1405115002403622917" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1405115002403622917" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1405115002403622917" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  The Laws of UX
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Fitts's Law:
&lt;/h2&gt;

&lt;p&gt;The time to acquire a target is a function of the distance to and size of the target.&lt;/p&gt;

&lt;p&gt;Meaning: make the most important objects more accessible&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dixDs2nM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rarjxp53il7xp5ykdftk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dixDs2nM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rarjxp53il7xp5ykdftk.png" alt="0*3OKM6ZhDrJMqLDWV"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hick’s Law:
&lt;/h2&gt;

&lt;p&gt;The time it takes to make a decision increases with the number and complexity of choices.&lt;/p&gt;

&lt;p&gt;Meaning: Simplify&lt;/p&gt;

&lt;h2&gt;
  
  
  Jakob's Law:
&lt;/h2&gt;

&lt;p&gt;Users spend most of their time on other sites. This means that users prefer your site to work the same way as all the other sites they already know.&lt;/p&gt;

&lt;p&gt;Meaning: don't reinvent the weel&lt;/p&gt;

&lt;h2&gt;
  
  
  Miller’s Law:
&lt;/h2&gt;

&lt;p&gt;The average person can only keep 7 (plus or minus 2) items in their working memory.&lt;/p&gt;

&lt;p&gt;Meaning: Don't bombard users with information!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--axjmRdkz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4mdzrbqg3elgcdn3wkxm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--axjmRdkz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4mdzrbqg3elgcdn3wkxm.png" alt="Example from the Samsung's page"&gt;&lt;/a&gt;&lt;br&gt;
Example from the Samsung's page&lt;/p&gt;

&lt;h2&gt;
  
  
  Occam’s Razor:
&lt;/h2&gt;

&lt;p&gt;A problem-solving principle that the simplest solution tends to be the right one. When presented with competing hypotheses to solve a problem, one should select the solution with the fewest assumptions.&lt;/p&gt;

&lt;p&gt;Meaning: when in dilemma, choose the simplest choice&lt;/p&gt;

&lt;h2&gt;
  
  
  Tesler’s Law:
&lt;/h2&gt;

&lt;p&gt;Also known as The Law of Conservation of Complexity, states that for any system there is a certain amount of complexity which cannot be reduced.&lt;/p&gt;

&lt;p&gt;Meaning: Do not over-engineer or over-refactor&lt;/p&gt;

&lt;h2&gt;
  
  
  Von Restorff Effect:
&lt;/h2&gt;

&lt;p&gt;Also known as The Isolation Effect, this effect predicts that when multiple similar objects are present, the one that differs from the rest is most likely to be remembered.&lt;/p&gt;

&lt;p&gt;Meaning: contrast is useful!&lt;/p&gt;

&lt;h2&gt;
  
  
  Zeigarnik Effect:
&lt;/h2&gt;

&lt;p&gt;People remember uncompleted or interrupted tasks better than completed tasks.&lt;/p&gt;

&lt;p&gt;Meaning: don't be intrusive&lt;/p&gt;

&lt;h2&gt;
  
  
  Doherty Threshold:
&lt;/h2&gt;

&lt;p&gt;Productivity soars when a computer and its users interact at a pace (&amp;lt;400ms) that ensures that neither has to wait on the other.&lt;/p&gt;

&lt;p&gt;Meaning: performance matters!&lt;/p&gt;

&lt;h2&gt;
  
  
  Pareto Principle:
&lt;/h2&gt;

&lt;p&gt;The Pareto principle states that, for many events, roughly 80% of the effects come from 20% of the causes.&lt;/p&gt;

&lt;p&gt;Meaning: Deal with the most important parts first!&lt;/p&gt;

&lt;h2&gt;
  
  
  Serial Position Effect:
&lt;/h2&gt;

&lt;p&gt;Users have a propensity to best remember the first and last items in a series.&lt;/p&gt;

&lt;p&gt;Meaning: Positioning matters! Position the most important objects first&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gAJe-i4L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6xu0zp64es48r1u3xu8q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gAJe-i4L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6xu0zp64es48r1u3xu8q.jpg" alt="Serial_Effect_5-728x372"&gt;&lt;/a&gt;&lt;br&gt;
Example from the Amazon web page.&lt;/p&gt;

&lt;p&gt;Hope you found that useful! &lt;/p&gt;

</description>
      <category>ux</category>
      <category>webdev</category>
      <category>design</category>
    </item>
    <item>
      <title>Why I occasionally go off the grid</title>
      <dc:creator>Alexandros Kornilakis</dc:creator>
      <pubDate>Mon, 31 May 2021 12:29:27 +0000</pubDate>
      <link>https://dev.to/curiouzk0d3r/why-i-occasionally-go-off-the-grid-277p</link>
      <guid>https://dev.to/curiouzk0d3r/why-i-occasionally-go-off-the-grid-277p</guid>
      <description>&lt;h2&gt;
  
  
  A great day for scrolling
&lt;/h2&gt;

&lt;p&gt;It’s a great day outside. The sun is up.&lt;/p&gt;

&lt;p&gt;The weather is good and you are enjoying this relaxing day.&lt;br&gt;
Suddenly, you hear a beeping sound. It’s your phone notifying you of a new message. You text back and you put your phone back in your pocket.&lt;/p&gt;

&lt;p&gt;Another sound. Yay! Someone new followed you on Twitter. “Let’s see who this is!” You tell yourself. You open the app and start scrolling. 30 minutes go by and the sun is starting to go down. You missed it.&lt;/p&gt;

&lt;p&gt;Now it is Wednesday morning and you are working from home. You open Instagram to check new messages very quickly. Someone commented on your photo! You start scrolling but you stop when you see an ad about those shoes. The shoes you were looking for online yesterday. You click.&lt;/p&gt;

&lt;p&gt;Your attention and focus have just been hijacked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Algorithmic slot machines
&lt;/h2&gt;

&lt;p&gt;If you have watched “The social dilemma” on Netflix, you already know what I am going to say.&lt;/p&gt;

&lt;p&gt;All the popular applications we are daily using (Instagram, Gmail, News websites) are built upon attention engineering.&lt;br&gt;
The main trick used is the following: every time you open the app, you may or may not find something interesting.&lt;br&gt;
It is the same reason slot machines are addicting. You never know when you are going to win. This is what keeps you trying and waiting for the next dopamine hit.&lt;/p&gt;

&lt;p&gt;There are studies practically proving that social media have all the characteristics which can lead to an addiction. So why are we using applications designed by these principles?&lt;/p&gt;

&lt;p&gt;Unfortunately, I am not the right person to answer that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The “Hyperactive Hive Mind”
&lt;/h2&gt;

&lt;p&gt;Although many studies are pointing to the harmful effects of social media on our mental health, I never had a big issue with that. I never fell into the spiral of comparing myself to other people’s perfectly portrayed online lives.&lt;/p&gt;

&lt;p&gt;However, since I started using them, my concentration and productivity took a big hit. One of today’s great thinkers on this topic - Cal Newport - explains this phenomenon with the term “Hyperactive Hive Mind”.&lt;/p&gt;

&lt;p&gt;Our minds are made to focus on one thing at a time. The back-and-forth messaging forced by these internet applications, and the constant interruptions lead to constant context switching.&lt;br&gt;
It is known that context switching requires a lot of energy and in further leads to a so-called attention residue.&lt;/p&gt;

&lt;p&gt;When you move to your next task you are still thinking of your previous one. This makes fully concentrating on your next task impossible for a few minutes. The state of mind, where you are constantly context switching and leaving mental residues is called “Hyperactive Hive Mind”.&lt;/p&gt;

&lt;p&gt;To simply put it, this state kills your ability to focus. It definitely destroyed mine. And this does not affect only work. It affects our personal lives as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  My detox process
&lt;/h2&gt;

&lt;p&gt;Over the last years, I am occasionally taking some time off social media, smartphones, and what we call “non-essential technologies”.&lt;/p&gt;

&lt;p&gt;Usually, this lasts for a week. Sometimes a month. I logout out of all social media account on every device I own. I replace my phone with a Nokia dumb phone I have for my detoxes. I am trying to avoid binge-watching YouTube and reading random or irrelevant stuff on the internet. I am trying to spend more time offline - read books, walk without my earbuds plugged in.&lt;br&gt;
In general, take some time to reflect, think and enjoy the real world.&lt;/p&gt;

&lt;p&gt;To be honest, not scrolling on social media is not a big challenge for me. What is challenging is not carrying a smartphone with me, since there is resistance from my environment. People are not willing to accept that in 2021 you will not be 24/7 available. That they cannot contact you on Facebook.&lt;br&gt;
That they may have to call you to reach you. It adds some additional friction.&lt;/p&gt;

&lt;p&gt;I know. People who care or are in an emergency will go all the way to reach you. They will call you or appear on your doorstep. But if you try this, do not expect people to be understandable and supportive. You may even miss socializing opportunities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it worth it?
&lt;/h2&gt;

&lt;p&gt;In short, yes. Social media and related technologies have their benefits. They can help you find a job, build your brand, find new friends, and have low-friction communication.&lt;/p&gt;

&lt;p&gt;But I have my doubts that -although their benefits- they are the best tools for these tasks. And they are not worth sacrificing the control of our attention or our mental health.&lt;/p&gt;

&lt;p&gt;I recommend you take some time off. You will get a feeling of freedom and will feel more focused and aligned with what is happening around you. You will also get some space to realize which of these technologies are useful to you, and ways you can use them more mindfully and purposefully.&lt;/p&gt;

&lt;h2&gt;
  
  
  BONUS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fTdtICcl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/30ahzxzocdkxz9bp3qlz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fTdtICcl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/30ahzxzocdkxz9bp3qlz.jpg" alt="image0"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How I am writing this piece. Real life can be good.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>twitter</category>
    </item>
    <item>
      <title>Why is Fake News Spread so Hard to Stop?</title>
      <dc:creator>Alexandros Kornilakis</dc:creator>
      <pubDate>Thu, 13 May 2021 10:54:02 +0000</pubDate>
      <link>https://dev.to/curiouzk0d3r/why-is-fake-news-spread-so-hard-to-stop-55kh</link>
      <guid>https://dev.to/curiouzk0d3r/why-is-fake-news-spread-so-hard-to-stop-55kh</guid>
      <description>&lt;h2&gt;
  
  
  Some History
&lt;/h2&gt;

&lt;p&gt;Disinformation is not a recent issue. As Guardian columnist Natalie Nougayr`ede has observed: ”The use of propaganda is ancient, but never before has there been the technology to so effectively disseminate it” [1].&lt;/p&gt;

&lt;p&gt;Misinformation, disinformation, and propaganda have been features of human communication since at least the Roman times [2]. However, the invention of the Gutenberg printing press in 1493 dramatically amplified the dissemination of disinformation and misinformation, and it ultimately delivered the first large-scale news hoax - ’The Great Moon Hoax’ of 1835.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HijwG96Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4pm3w4z2e8t2k0bwdx4m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HijwG96Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4pm3w4z2e8t2k0bwdx4m.jpg" alt="Great-Moon-Hoax-1835-New-York-Sun-lithograph-298px"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;As early as 1925, when news offices started to connect via wire, the authenticity of information became a concern. Editors did not know whether the news coming in through the wire was true or not. They could try to infer authenticity based on the source of the news, but still, the concern remained: is this piece of news that just came over the wire true or not?&lt;/p&gt;

&lt;p&gt;Although the concern was there, the editors usually managed to find ways to mitigate it and reduce the intentional misinformation to the minimum possible: after all, the amount of news that came over the wire and could potentially be misinformation was not that large.&lt;/p&gt;

&lt;p&gt;Unfortunately, the ”tsunami” of social media engagement that has swept our lives over the past decade practically exploded the proliferation of misinformation including the associated distribution of fake news [3].&lt;/p&gt;

&lt;h2&gt;
  
  
  Fake News Ecosystems
&lt;/h2&gt;

&lt;p&gt;Someone may consider fake news as false information. Yet, this viewpoint may not be precise.&lt;br&gt;
Instead, researchers usually define it as deliberately false information.&lt;/p&gt;

&lt;p&gt;The motivation behind the creation and spread of fake news content may vary. Trend Micro curently sees three major motivations behind fake news [4]: political, financial gain, and character assassination. More analytically, political propaganda is designed to get people to change their minds about their political beliefs or some other opinion. The most obvious financial motivation could be advertising, while character assassination by fake news could target politicians or even private individuals to cause harm.&lt;/p&gt;

&lt;p&gt;We now know from related studies, that false information spreads faster than real information [5]. These studies point to the human predisposition in being attracted by novelty - it is known that false news carries more novelty - to explain this. It is not bots that usually spread the misinformation; This is mainly done by humans. Yet the technological processes - social media, algorithmic news curation, bots, artificial intelligence, and big data analysis - are creating echo chambers that reinforce our biases, remove incidia of trustworthiness, and are overwhelming our capacity to make sense the world.&lt;/p&gt;

&lt;p&gt;The biggest threat of misinformation is the one that poses to our democracy. Echo chambers ringing with false news can make democracies ungovernable. We can imagine a pluralist democracy in which populations contested elections, without ever sharing a viewpoint on what is going on in the world. Whoever won would design policies to counter what they saw as the major policy question of our times. Since these viewpoints would be isolated and different, such pluralist democracy would be deeply unstable [6].&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big Data Problem
&lt;/h2&gt;

&lt;p&gt;Although linguistic methods for fake news detection have achieved a reasonable accuracy, I believe we have reached a barrier.&lt;br&gt;
And that this barrier, that creates a hardship in achieving a better accuracy, is related to the quality of data.&lt;/p&gt;

&lt;p&gt;The goal of the style-based (linguistic) methods is to capture the “deception style”, meaning the writing style of fake news writers. Yet, there are some pitfalls with these methods. They may end up capturing the writing style of specific authors instead of the deception style. This way, even if a trained model performs well in similar data, they do not generalize. The writing style of a document is defined by the author, the topic and the editor (if there is one). So, a dataset should contain many authors, news domains and topics.&lt;/p&gt;

&lt;p&gt;Finally, as stated in [7], Fake News is a big data problem. We need many data points, solid ground truth and balance over 4 axes: labels, topics, authors and news websites. For example, some datasets are created by downloading articles from websites in a flag-list. However, a website that is found to publish fake news, in order to maintain some credibility, it may also publish credible stories. Creating a dataset this way will add noise to the data and reduce accuracy.&lt;/p&gt;

&lt;p&gt;To sum up, to avoid this pitfall, a quality Fake News dataset should have the following properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ground truth should be solid.&lt;/li&gt;
&lt;li&gt;It should cover many topics.&lt;/li&gt;
&lt;li&gt;It should include different authors and domains that publish articles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I propose the creation of a fake news data evaluation framework. That framework can perform topic modeling and stylometric analysis to detect unbalanced datasets. A dataset with many data points that also gets a large score at this&lt;br&gt;
evaluation will better generalize in real-world (unseen) data.&lt;/p&gt;

&lt;h2&gt;
  
  
  A more Pragmatic Approach
&lt;/h2&gt;

&lt;p&gt;There is a reason why Fake News is so easy to spread. Because it is so close to the “Real” News. Because news (as Fake News does) usually tries to exploit the sentiment of the reader. Provide her with enough negativity and lack of perspective, so that she will be in a constant loop of receiving updates, and give purpose to the papers. The burning issue is not fake news. It’s the news itself.&lt;/p&gt;

&lt;p&gt;Fake news is usually a symptom of a deeper pathogen. It’s true that fake news is causing confusion. However, people who are confused end up embracing the fake news.&lt;/p&gt;

&lt;p&gt;And this confusion is caused by the lack of transparency, by political inconsistencies, by the lies that are spread and the anger rising on the people’s heart.&lt;/p&gt;

&lt;p&gt;Instead of using Artificial Intelligence just to find the “fake stories”, let’s use these tools to understand the underlying societal issues and the malfunctions of the news ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Natalie Nougayr’ede. In this age of propaganda, we must defend ourselves. here’s how — Natalie nougayr’ede, Jan 2018.&lt;/li&gt;
&lt;li&gt;A short guide to the history of ’fake news’ and disinformation, Jul 2018.&lt;/li&gt;
&lt;li&gt;Miriam Fernandez and Harith Alani. Online misinformation: Challenges and future directions.&lt;/li&gt;
&lt;li&gt;Fake news and cyber propaganda: The use and abuse of social media.&lt;/li&gt;
&lt;li&gt;Soroush Vosoughi, Deb Roy, and Sinan Aral. The spread of true and false news online. Science, 359(6380):1146–1151, 2018.&lt;/li&gt;
&lt;li&gt;Yochai Benkler, Robert Faris, and Hal Roberts. Network propaganda: Manipulation, disinformation, and radicalization in American politics. Oxford University Press, 2018&lt;/li&gt;
&lt;li&gt;Fatemeh Torabi Asr and Maite Taboada. Big data and quality data for fake news and misinformation detection. Big Data &amp;amp; Society, 6(1):2053951719843310, 2019.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>fakenews</category>
      <category>machinelearning</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Learn You a Functional Programming for Great Good!</title>
      <dc:creator>Alexandros Kornilakis</dc:creator>
      <pubDate>Sun, 02 May 2021 19:29:40 +0000</pubDate>
      <link>https://dev.to/curiouzk0d3r/learn-you-a-functional-programming-for-great-good-1koi</link>
      <guid>https://dev.to/curiouzk0d3r/learn-you-a-functional-programming-for-great-good-1koi</guid>
      <description>&lt;p&gt;Level of knowledge required: This article requires some programming background to be fully understood.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;I am sure you have noticed the silly syntax in this article's title. It is inspired by a popular introductory book for the Haskell language, called “Learn You a Haskell for Great Good!” [1].&lt;br&gt;
Which could probably be perceived as “Learn Haskell for great benefit”. Haskell is one of the so-called purely functional programming languages. Or more precisely, almost purely functional.&lt;/p&gt;

&lt;p&gt;But is there a benefit in learning Haskell or - even more - functional programming?&lt;br&gt;
Absolutely. I strongly believe that learning Functional Programming can make you a better developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting with some basics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Definitions
&lt;/h3&gt;

&lt;p&gt;Functional programming is a &lt;strong&gt;declarative&lt;/strong&gt; paradigm of building software by composing &lt;strong&gt;pure functions&lt;/strong&gt;, avoiding &lt;strong&gt;shared state&lt;/strong&gt;, &lt;strong&gt;mutable data&lt;/strong&gt; and &lt;strong&gt;side-effects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In short, functional programming is a catch-all term for a way of writing code that is focused on composing pure functions, actually using the innovations in type systems made in the last few decades, and overall being awesome [2].&lt;/p&gt;

&lt;p&gt;Functional languages emphasize expressions and declarations rather than the execution of statements. Therefore, unlike other procedures which depend on a local or global state, value output in FP depends only on the arguments passed to the function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pure Functions
&lt;/h3&gt;

&lt;p&gt;A pure function [3] is a function which:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Given the same input, always return the same output.&lt;/li&gt;
&lt;li&gt;Has no side-effects (immutable)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="/static/images/purefunctionrule.jpg" class="article-body-image-wrapper"&gt;&lt;img src="/static/images/purefunctionrule.jpg" alt="~pure functions~"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unfortunately, understanding FP in depth requires knowledge of math and computability theory. In the core of functional programming lies the lambda calculus. The first and purest functional programming language.&lt;/p&gt;

&lt;p&gt;For a fun introduction to Computability, watch this &lt;a href="https://www.youtube.com/watch?v=GnpcMCW0RUA"&gt;YouTube clip&lt;/a&gt; by the great Philip Wadler! About lambda calculus, there are numerous online &lt;a href="https://www.inf.fu-berlin.de/lehre/WS03/alpi/lambda.pdf"&gt;resources&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now let’s move to more practical aspects!&lt;/p&gt;

&lt;h2&gt;
  
  
  Pure and not so pure functional languages
&lt;/h2&gt;

&lt;p&gt;Let’s be clear. All languages have side effects. Even Haskell, which is considered the purest of the modern languages. Side-effects are necessary to interact with the filesystem and other parts of the OS.&lt;br&gt;
However, the way these effects are handled and structured can help us decide about the purity of the language. For example, Haskell has a unique way of handling side-effects, with an abstraction called Monad. Wondering what Monad (or a monoid) is? Hmm, maybe we will discuss this in a future post.&lt;/p&gt;

&lt;p&gt;Furthermore, some languages adopt functional features (like Java with lambdas) but are still mainly focused on a procedural/OOP programming style.&lt;br&gt;
While in others, pure functions are the main building block of the code. See Clojure, Scala, Elixir.&lt;/p&gt;

&lt;h2&gt;
  
  
  What languages shall I try?
&lt;/h2&gt;

&lt;p&gt;Well, it wildly depends on your domain of interest! For front-end web development, &lt;strong&gt;Elm&lt;/strong&gt;, &lt;strong&gt;Elixir&lt;/strong&gt;, &lt;strong&gt;ReasonML&lt;/strong&gt;, &lt;strong&gt;PureScript&lt;/strong&gt;, and maybe &lt;strong&gt;ClojureScript&lt;/strong&gt; are great options!&lt;/p&gt;

&lt;p&gt;For backend, I would strongly suggest checking &lt;strong&gt;Elixir&lt;/strong&gt;, &lt;strong&gt;F#&lt;/strong&gt;, and &lt;strong&gt;Racket&lt;/strong&gt;. &lt;strong&gt;Rust&lt;/strong&gt; and &lt;strong&gt;Haskell&lt;/strong&gt; are also options, although I generally had issues with the related Haskell modules I had tried in the past.&lt;/p&gt;

&lt;p&gt;For native mobile app development, I suggest &lt;strong&gt;Kotlin&lt;/strong&gt; and &lt;strong&gt;Swift&lt;/strong&gt;, for Android and iOS respectively.&lt;/p&gt;

&lt;p&gt;For lower-level programming like systems programming, &lt;strong&gt;Rust&lt;/strong&gt; is a no-brainer.&lt;/p&gt;

&lt;p&gt;For concurrency and distributed systems, I suggest &lt;strong&gt;Elixir&lt;/strong&gt;, &lt;strong&gt;Scala&lt;/strong&gt;, and &lt;strong&gt;Erlang&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For language writers, &lt;strong&gt;Haskell&lt;/strong&gt;, &lt;strong&gt;Rust&lt;/strong&gt; and &lt;strong&gt;OCaml&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of FP languages
&lt;/h2&gt;

&lt;p&gt;To be honest, I am not an expert in functional programming. However, experts suggest that pure functions are easier to test, lead to fewer bugs, and tend to have their state isolated, making it easier to comprehend. FP code is also more predictable.&lt;/p&gt;

&lt;p&gt;I will add that FP is great for concurrency. The lack of side effects and immutability guarantees deterministic execution. Distributed algorithms also heavily benefit from this architecture.&lt;/p&gt;

&lt;p&gt;In my opinion, functional code is also more elegant. Observe the following functional and imperative code examples in JavaScript:&lt;/p&gt;

&lt;p&gt;Imperative style:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const salaries = [10000, 20000, 30000, 40000];&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;let totalSalary = 0;&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;for (let I = 0; I &amp;lt; salaries.length; I++) {&lt;/code&gt;&lt;br&gt;&lt;br&gt;
          &lt;code&gt;totalSalary += salaries[I]&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Functional style:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const salaries = [10000, 20000, 30000, 40000];&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;const totalSalary = salaries.reduce((acc, value) =&amp;gt; acc + value, 0);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Isn’t it more elegant?&lt;/p&gt;

&lt;h2&gt;
  
  
  How is this going to help me?
&lt;/h2&gt;

&lt;p&gt;What if you are using a language we haven’t mentioned so far? Like C# or Java? Is learning Haskell or Clojure going to help you? Of course.&lt;/p&gt;

&lt;p&gt;Every experienced developer knows that programming is much more than the language syntax and the frameworks you are using. The difference is being made in the way you are approaching problems.&lt;/p&gt;

&lt;p&gt;However, working in a programming language affects how you think about problems. If your language gives you some features, you think in terms of those features. Learning new programming languages gives you a different feature set, and this suggests other ways to address a problem.&lt;/p&gt;

&lt;p&gt;Functional programming is closer to mathematical thinking, which a more natural way of thought for humans [4]. It makes the process of designing your system and code more effective.&lt;br&gt;
Practicing FP forces you to lean towards this style of thinking.&lt;br&gt;
And eventually makes you a better developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;So this is it! This article intended to provide a few arguments in favor of Functional Programming. I hope it achieved this goal.&lt;/p&gt;

&lt;p&gt;I strongly recommend giving it a try. If you don’t know where to start, pick Haskell. It will be an immersive experience in the world of pure functions.&lt;br&gt;
I cannot think of a better introduction to the magical space of mathematics, functional programming, and the theory of programming languages.&lt;/p&gt;

&lt;p&gt;Start with &lt;strong&gt;Learn You a Haskell for Great Good!&lt;/strong&gt; or &lt;a href="http://book.realworldhaskell.org/"&gt;Real World Haskell&lt;/a&gt; and you won’t regret it.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://learnyouahaskell.com/"&gt;Learn You a Haskell for Great Good!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://serokell.io/blog/introduction-to-functional-programming"&gt;What Is Functional Programming?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.codingame.com/playgrounds/24002/functional-programming-mindset/functional-programming-definition-"&gt;Functional (Programming) mindset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://justinmeiners.github.io/think-in-math"&gt;Think in Math&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>functional</category>
      <category>programming</category>
      <category>haskell</category>
    </item>
    <item>
      <title>Computer Science as a Medicine</title>
      <dc:creator>Alexandros Kornilakis</dc:creator>
      <pubDate>Sat, 24 Apr 2021 07:01:34 +0000</pubDate>
      <link>https://dev.to/curiouzk0d3r/computer-science-as-a-medicine-19kl</link>
      <guid>https://dev.to/curiouzk0d3r/computer-science-as-a-medicine-19kl</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;It was November 2019 and I was on the plane flying to another country. I was going to move there. This was something far outside my comfort zone, and I was a bit terrified.&lt;br&gt;
I knew that I would have to deal with a stream of new challenges, and this made me a bit anxious. &lt;/p&gt;

&lt;p&gt;I started reading a computer science book I had bought for my trip. The title was ”Algorithms to Live By”. I found it interesting, so I read the introduction.&lt;br&gt;
Suddenly it stroke me! What if Computer Science was the solution to dealing with unknown practical challenges? What if it could be a medicine for our everyday anxieties?&lt;/p&gt;

&lt;p&gt;Now that this idea has matured in my head, it is time to share the answer with you: it can.&lt;/p&gt;

&lt;h2&gt;
  
  
  These are solved problems
&lt;/h2&gt;

&lt;p&gt;Organize your life, finding a parking spot, your ideal job or your next date may sound like consuming tasks.  Struggling with some of these may lead you to a therapist, which will suggest you find a balance in your life. This advice helps, but an algorithm can even point to the exact numbers for this balance.&lt;/p&gt;

&lt;p&gt;Algorithms are heavily inspired by nature and the human brain, but here we suggest the opposite: let the algorithms inspire our decision frameworks. In this post, I will mostly be referring to examples from the aforementioned book. I will leave my findings for a future post.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to stop looking (or the 37% rule)
&lt;/h2&gt;

&lt;p&gt;Assume you live in a crowded city and constantly searching for a parking spot in the streets. Or looking to buy/rent a house in a bad real estate market. This can be rather stressful. &lt;br&gt;
However, we have the 37% rule (or optimal stopping theory). Decide the amount of time you are willing to spend/options to explore. Gather data for the first 37% of them, then make a decision (leap) as soon as you find an option better than the first 37%.&lt;/p&gt;

&lt;p&gt;A more timely example: investing in cryptocurrencies. And more specifically knowing when to sell. Spend 37% of your time to gather data and decide a minimum price threshold. Then sell whenever the price goes higher than that threshold.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to quit your job (or exploration vs exploitation)
&lt;/h2&gt;

&lt;p&gt;Have you wondered whether your job is the best you could get? Or your current relationship is the most suitable for you? Sometimes, this question forces us to look for better options. Sometimes, by fear or satisfaction, we choose to stay and support our current decisions. &lt;/p&gt;

&lt;p&gt;What do algorithms suggest though? Surprisingly, the algorithm that leads us in a better direction is traditionally used to help gamblers make better decisions. Upper Confidence Bound Algorithm has the following steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find an option that offers the best expected value. In the beginning, you may have to choose intuitively.&lt;/li&gt;
&lt;li&gt;Then you should compare the actual outcome with your expectations. Write down these comparisons over time.&lt;/li&gt;
&lt;li&gt;If the real outcome is consistently lower than your expected outcome, you should move onto another option. This option should be the one with the second-best expected outcome.&lt;/li&gt;
&lt;li&gt;Repeat the process.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Should you quit your job? Well, if your expectations are consistently crushed, maybe you should.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forget it or throw it away
&lt;/h2&gt;

&lt;p&gt;Our computer's memory is composed of different layers (usually  6 of them). Some of them are fast but small and others are big but slow. The quickest layer is called cache. Computers use a simple algorithm to decide what gets stored in the cache. It’s called Least Recently Used (LRU), and it stores whatever you used last on top, in the upper layer of the cache.&lt;/p&gt;

&lt;p&gt;Our brains work similarly as well: if some information goes unused for a long time, we have a hard time remembering it. The same goes for our stuff. We also tend to lose items that we are not frequently using.&lt;/p&gt;

&lt;p&gt;So if you have stuff you are not using, throw them away! Replace your desk with the most recent items. Or at least place those items closer to you. It will still be a mess, but an organized mess. It will make looking for them faster.&lt;/p&gt;

&lt;p&gt;Consequently, if you’re preparing for an exam in the morning, read your notes right before you go to bed. The information will be there when you wake up.&lt;br&gt;
You can forget the rest of your thoughts without regrets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don’t overthink
&lt;/h2&gt;

&lt;p&gt;I am confident you are aware of the hype surrounding AI and Machine Learning. A common use of these algorithms is to make predictions after getting trained using related data.&lt;/p&gt;

&lt;p&gt;There is a term though which gives Machine Learning engineers a chill. It is called overfitting. It means that in cases where the Algorithm is being fed a disproportionate amount of data, it loses the ability to generalize and make good predictions on yet unknown cases. The same holds for our brains.&lt;/p&gt;

&lt;p&gt;How to combat overfitting? Penalize complexity. If you can’t explain it simply, you don’t understand it well enough.&lt;/p&gt;

&lt;p&gt;When you have high uncertainty and limited data, you should stop thinking early. Allowing more time can create more complexity and be counterproductive.&lt;/p&gt;

&lt;p&gt;Or - in simple terms - don’t overthink!&lt;/p&gt;

&lt;h2&gt;
  
  
  Relax (don’t be a perfectionist)
&lt;/h2&gt;

&lt;p&gt;The real world is shockingly complex. We often desire to explain it fully. Adding more parameters to a problem may make it more realistic, but if we add a lot of complexity, the problem may become unsolvable.&lt;/p&gt;

&lt;p&gt;The traveling salesman problem is such an example: “Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?”&lt;br&gt;
If you expand this problem to a whole country or a continent, it gets immensely complex.&lt;/p&gt;

&lt;p&gt;In a situation like this, the solution is to relax your restrictions. Allow the salesman to visit different locations twice or more. You’ll end up with a good solution in a reasonable time, although not a perfect one.&lt;/p&gt;

&lt;p&gt;So, in many cases, you must relax your constraints, and not try to solve everything perfectly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finally: on actions and results
&lt;/h2&gt;

&lt;p&gt;I have to warn you: taking the best actions does not guarantee good results. We can never control the outcome.&lt;br&gt;
However, there is a great quote from the book to ease our frustration:&lt;/p&gt;

&lt;p&gt;“To try and fail is at least to learn;&lt;br&gt;
To fail to try is to suffer the inestimable&lt;br&gt;
loss of what might have been,”&lt;/p&gt;

&lt;p&gt;I hope this article helped you reconsider your views of computer science, and even provided a few helpful tips.&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>computerscience</category>
      <category>optimization</category>
    </item>
    <item>
      <title>How to be social in the terminal</title>
      <dc:creator>Alexandros Kornilakis</dc:creator>
      <pubDate>Tue, 20 Apr 2021 12:11:03 +0000</pubDate>
      <link>https://dev.to/curiouzk0d3r/how-to-be-social-in-the-terminal-41ep</link>
      <guid>https://dev.to/curiouzk0d3r/how-to-be-social-in-the-terminal-41ep</guid>
      <description>&lt;h2&gt;
  
  
  Online social networks
&lt;/h2&gt;

&lt;p&gt;Whoever knows me personally is aware that I am not the biggest fan of social networks. Don't get me wrong, I was always involved with them. Understanding social networks was also part of my research interests for a quite long time. But my relationship with them was always a love and hate one.&lt;br&gt;
In this blog, I'm going to talk a lot about this relationship. &lt;br&gt;
In this post, though I will diverge from this discussion.&lt;/p&gt;

&lt;p&gt;If you followed through with my last post, you may wonder what else is it possible to do from a command-line interface a.k.a. the terminal. &lt;/p&gt;

&lt;p&gt;Wouldn’t it be nice to maintain a normal online social life while embracing minimalistic digital habits? Let's assume that you are a user of Reddit, Twitter, Instagram, Facebook Messenger, LinkedIn, Telegram, Slack and Discord. Although this is not the most convenient way to access those services, we will explore tools that make chatting and browsing possible.&lt;/p&gt;

&lt;p&gt;Disclaimer: You shouldn’t normally trust your credentials to a third party service. I performed a manual check at the code of the suggested tools. They look legitimate. You should do your research though.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chatting with WeeChat
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://weechat.org/"&gt;WeeChat&lt;/a&gt; is an extensive chat client that includes an interesting list of plugins. Some plugins add features like proxy support, while others add support to social services, thus being worth mentioning. WeeChat can easily be combined with BitlBee, and bring support to additional services (Twitter/Discord/Steam). I used the Skype plugin in the past but now is outdated and not functional.&lt;/p&gt;

&lt;p&gt;As far as the aforementioned services are concerned, I suggest WeeChat for its Slack and Discord integrations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Slack
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/wee-slack/wee-slack"&gt;Wee-Slack&lt;/a&gt; is a WeeChat plugin that is based on python WebSockets and delivers most of the basic functionality of the Slack client. To use this, you need to receive a Slack API token. One way is - after installing - to run on WeeChat: &lt;br&gt;
&lt;code&gt;/slack register&lt;/code&gt; This command prints a link you should open in your browser to authorize WeeChat with Slack.&lt;br&gt;
Once you’ve accomplished this, you should run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;/slack register &amp;lt;code&amp;gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;/python reload slack&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now you can navigate through private messages and channels using the arrow keys.&lt;/p&gt;

&lt;h3&gt;
  
  
  Discord
&lt;/h3&gt;

&lt;p&gt;To be honest, I am a fan of the excellent &lt;a href="https://github.com/Bios-Marcel/cordless"&gt;cordless&lt;/a&gt; application. Unfortunately, the creator was banned from the service for violating the terms of service. So it is not recommended anymore.&lt;/p&gt;

&lt;p&gt;An alternative however to this is a &lt;a href="https://github.com/terminal-discord/weechat-discord"&gt;WeeChat plugin&lt;/a&gt;.&lt;br&gt;
Once more,  you will need to obtain a login token. You can either use a python script to find the tokens or try and grab them manually.&lt;/p&gt;

&lt;p&gt;Then, set your token: &lt;code&gt;/discord token 123456789ABCDEF&lt;/code&gt;&lt;br&gt;&lt;br&gt;
And connect: &lt;code&gt;/discord connect&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then you can browse your channels and chat normally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chatting with other tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Facebook Messenger
&lt;/h3&gt;

&lt;p&gt;While WeeChat is a powerful enough tool, it serves our purpose up to a certain extend. To use Facebook messenger, will have 2 options:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/fb-messenger-cli"&gt;fb-messenger-cli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/mjkaufer/Messer"&gt;Messer&lt;/a&gt;
I had some issues logging in with Messer, so I ended up using the first option.
I suggest installing the tool locally with npm.
To run this:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;&amp;gt; ./node_modules/fb-messenger-cli/cli.js # run the app&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; 0 # choose a conversation&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; this is a test message # text a message!&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Telegram
&lt;/h3&gt;

&lt;p&gt;In this case, we are lucky. We have a well-supported CLI application, &lt;a href="https://github.com/vysheng/tg"&gt;telegram-cli&lt;/a&gt;. &lt;br&gt;
To try this, after installing, run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;gt; telegram-cli # run the app!&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; help # see your options&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; msg username this is my test message # message user with the username handle!&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Instagram DMs
&lt;/h3&gt;

&lt;p&gt;Instagram is of course a tricky case because relies on images. However, we can still chat with &lt;a href="https://github.com/mathdroid/igdm-cli"&gt;igdm-cli&lt;/a&gt;.  To try this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;gt; igdm # enter username and password&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; # browse messages with arrows and enter&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; # In chatroom mode, exit by entering '/end'. Manually refresh the room by entering '/refresh'.&lt;/code&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  Browsing and posting
&lt;/h2&gt;

&lt;p&gt;As you can imagine, posting and browsing is a bit more problematic than messaging. Fortunately, there are some decent solutions, especially for Reddit and Twitter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Twitter
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/orakaro/rainbowstream"&gt;Rainbowstream&lt;/a&gt; is my favourite of the clients I have mentioned here. It is feature-rich, and enables a decent use of Twitter without being as distracting as the official clients. &lt;br&gt;
After installing Rainbowstream, run:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;gt; rainbowstream # supports tab autocompletion&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; h # for help&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; h discover # help for more specific commands&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; notification discover # shows notification&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; home discover # shows timeline&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; conversation [tweet id] # displays the full thread for tweet with the speicific id&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; t testing rainbowstream # will tweet "testing rainbowstream"&lt;/code&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  Reddit
&lt;/h3&gt;

&lt;p&gt;[Rtv] is a Reddit client that helps you to search and read posts and comments, while also gives you the ability to post and comment. Rtv also works as expected. To try this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;gt; rtv&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; /front # frontpage&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; /u/me # your info&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; /r/greece # visit the /r/greece subreddit&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  LinkedIn
&lt;/h3&gt;

&lt;p&gt;With &lt;a href="https://pypi.org/project/linkedin-cli/"&gt;linkedin-cli&lt;/a&gt;, you can post on your feed with a few easy steps. You have to register an application and retrieve a client id and secret. Then: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;gt; linkedin configure set application # provide your client id and secret of your linkedin application. Configuration will be saved to ~/.linkedin/config.json file&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; linkedin login # provide your credentials&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;&amp;gt; linkedin post -v public "Hello world!" # post with public visibility&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Instagram
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/instagrambot/instagram-terminal-news-feed"&gt;instagram-terminal-news-feed&lt;/a&gt; is a promising Instagram client, that even enables displaying pictures on the terminal. Unfortunately, due to some error, I wasn't able to log in. If you manage to use this, ping me :).&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: Google search
&lt;/h2&gt;

&lt;p&gt;Now I will admit that I cheated twice. First, because Google search is not a social network, and second because I wouldn't suggest using Google search even from the command line.&lt;br&gt;
I know, we all use it. But DuckDuckGo is a more private alternative. Thus, I will recommend a tool for performing duckduckgo searches from the terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jarun/ddgr"&gt;Ddgr&lt;/a&gt; is a cmd line utility to search DuckDuckGo (HTML version) from the terminal. Although there is a Google alternative (googler), It is unmaintained and does not work anymore.&lt;/p&gt;

&lt;p&gt;You can easily use ddgr and also specify the cmd line browser of your choice:&lt;br&gt;&lt;br&gt;
&lt;code&gt;BROWSER=w3m ddgr query&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This tool supports many options, and I think you will enjoy using it.&lt;/p&gt;

&lt;p&gt;This is a repost from &lt;a href="https://digital-lifestyle.tech"&gt;https://digital-lifestyle.tech&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>linux</category>
      <category>socialnetworks</category>
    </item>
    <item>
      <title>How to live your digital life in a terminal : Introduction</title>
      <dc:creator>Alexandros Kornilakis</dc:creator>
      <pubDate>Sat, 17 Apr 2021 17:16:03 +0000</pubDate>
      <link>https://dev.to/curiouzk0d3r/how-to-live-your-digital-life-in-a-terminal-introduction-2ae4</link>
      <guid>https://dev.to/curiouzk0d3r/how-to-live-your-digital-life-in-a-terminal-introduction-2ae4</guid>
      <description>&lt;h1&gt;
  
  
  The bloated web
&lt;/h1&gt;

&lt;p&gt;I recall a few years ago me sharing Mozilla’s dream for the web. The web was on its way to become the main platform for internet users. And that was supposed to be a good thing, due to its openness and the freedom that it was providing. But freedom and control are relative concepts.&lt;/p&gt;

&lt;p&gt;Web now has become bloated with unnecessary code, advertisements, pop-ups, comments and recommendation systems that are trying to mine our data and keep us hooked in their user interfaces by providing us with constants hits of dopamine.&lt;/p&gt;

&lt;p&gt;Is there a solution to this? Is there a way to get back our control and attention? Well, you could go off the grid. Or you could live your digital life in your computer's terminal. Living in the terminal means avoiding using applications with a graphical user interface (GUI). Or at least a good subset of them.&lt;br&gt;
In this article, we will discuss some first steps to entry this life-style.&lt;/p&gt;

&lt;h1&gt;
  
  
  RSS is still alive
&lt;/h1&gt;

&lt;p&gt;RSS (Really Simple Syndication) is a web feed that allows users and applications to access updates to websites. It was released in March 1999 for use on the My.Netscape.Com portal. For a significant period, I believed it was dead. Fortunately, it recently received some traction.&lt;/p&gt;

&lt;p&gt;My terminal workflow is based on RSS. RSS enables me to receive updates from blogs, news sites, Twitter, Reddit, YouTube channels and podcasts. My RSS client of choice is &lt;a href="https://newsboat.org/"&gt;newsboat&lt;/a&gt;. My OS of choice is Linux (Ubuntu or Arch Linux). The main thing you should know about configuring newsboat is you have to add your list of RSS feeds at &lt;code&gt;~/.newsboat/urls&lt;/code&gt;. You can find plenty of useful information at the &lt;a href="https://wiki.archlinux.org/index.php/Newsboat"&gt;Arch wiki&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To receive RSS updates from a YouTube channel, add to your list: &lt;code&gt;http://www.youtube.com/feeds/videos.xml?channel_id=$channel_id&lt;/code&gt;, where $channel_id is the id of the requested channel. Following Reddit updates is easy. In most cases, you can create an RSS feed by adding ".rss" to the end of an existing Reddit URL: &lt;a href="http://www.reddit.com/.rss"&gt;http://www.reddit.com/.rss&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Twitter does not support RSS feeds, but you can generate one with the help of nitter: &lt;a href="https://nitter.42l.fr/username/rss"&gt;https://nitter.42l.fr/username/rss&lt;/a&gt; (also, do follow &lt;a href="https://nitter.42l.fr/ck0d3r/rss"&gt;me&lt;/a&gt; please :P).&lt;/p&gt;

&lt;p&gt;Newsboat also allows specifying the application which will open the videos/articles in the feeds. For example, you can use VLC to view YouTube videos, and Firefox to open website links. You can add the following line to your ~/.newsboat/config file:&lt;br&gt;&lt;br&gt;
&lt;code&gt;macro y set browser "vlc %u" ; open-in-browser ; set browser "firefox %u"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Although you cannot avoid using a GUI to enjoy Youtube, this setup is a magnitude more minimal. You avoid the ads, the annoying comments, the JavaScript tracking and the recommended/related videos. You can also play podcast episodes with the excellent &lt;a href="http://moc.daper.net"&gt;moc player&lt;/a&gt;. Now let’s talk about the trickiest component of this setup: the Web Browser.&lt;/p&gt;

&lt;p&gt;There is a fair amount of command-line browsers out there. There is links, elinks, w3m, lynx and others. My personal favourite is w3m with image support. As you can guess, you can configure newsboat to open links with w3m. However, reading articles with w3m is not always piece of cake. A trick is to use &lt;a href="https://www.npmjs.com/package/readability-cli"&gt;readability-cli&lt;/a&gt; to remove the bloat and keep only text related to the article’s content. You can easily combine readability with W3M :&lt;br&gt;
&lt;code&gt;readable $url | w3m -T text/html&lt;/code&gt;&lt;br&gt;
For integration with newsboat, add this to the config file:&lt;br&gt;
&lt;code&gt;macro r set browser "readable %u | w3m -T text/html" ; open-in-browser ; set browser "firefox %u"&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  This is only the beginning
&lt;/h1&gt;

&lt;p&gt;Undoubtedly RSS is a powerful tool that serves a minimalistic digital life. However, choosing RSS is only the first step.&lt;br&gt;
There is a plethora of command-line tools that can empower us with more focused, private and productive digital lives.&lt;br&gt;
There is a movement (mostly in the open-source community) that argues that the web has lost its initial vision and purpose.&lt;br&gt;
Thus, the web protocol (HTTP) shall instead be replaced by a simpler/lighter alternative, with the main protagonist being &lt;a href="https://gemini.circumlunar.space/"&gt;Gemini&lt;/a&gt;; a protocol lighter than HTTP but heavier than the older &lt;a href="https://web.cortland.edu/flteach/methods/obj1/gopher.html"&gt;Gopher&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>productivity</category>
      <category>tools</category>
      <category>rss</category>
    </item>
  </channel>
</rss>
