<?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: IJustDev</title>
    <description>The latest articles on DEV Community by IJustDev (@ijustdev).</description>
    <link>https://dev.to/ijustdev</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%2F525260%2F6b2ae06d-8233-48f3-a9f6-dd625b6f0a57.jpg</url>
      <title>DEV Community: IJustDev</title>
      <link>https://dev.to/ijustdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ijustdev"/>
    <language>en</language>
    <item>
      <title>Is your terminal anti-social?</title>
      <dc:creator>IJustDev</dc:creator>
      <pubDate>Mon, 16 Aug 2021 14:08:52 +0000</pubDate>
      <link>https://dev.to/ijustdev/make-your-terminal-legendary-42fi</link>
      <guid>https://dev.to/ijustdev/make-your-terminal-legendary-42fi</guid>
      <description>&lt;p&gt;Using your terminal is the fastest way to engage with your operating system.&lt;br&gt;
So why do we still use programs that break out of this beautiful environment?&lt;/p&gt;

&lt;p&gt;In a recent Twitter publishment I showed of my tmux setup briefly with a short timelapse:&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__video-wrapper"&gt;
        &lt;div class="ltag__twitter-tweet__media--video-preview"&gt;
          &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MWXJl_R1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/ext_tw_video_thumb/1425900895053680643/pu/img/hgZiZQ3aMAjVASG9.jpg" alt="unknown tweet media content"&gt;
          &lt;img src="/assets/play-butt.svg" class="ltag__twitter-tweet__play-butt" alt="Play butt"&gt;
        &lt;/div&gt;
        &lt;div class="ltag__twitter-tweet__video"&gt;
          
            
          
        &lt;/div&gt;
      &lt;/div&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--e8S8Eo4l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1419351439697133568/6Whpinen_normal.jpg" alt="Alexander profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Alexander
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="mentioned-user" href="https://dev.to/ijustdev"&gt;@ijustdev&lt;/a&gt;

      &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;
      Check out this quick footage of my current setup.&lt;br&gt;&lt;a href="https://twitter.com/hashtag/tmux"&gt;#tmux&lt;/a&gt; allows me to store my &lt;a href="https://twitter.com/hashtag/spotify"&gt;#spotify&lt;/a&gt;-tui client (&lt;a href="https://twitter.com/Spotify"&gt;@Spotify&lt;/a&gt;), my &lt;a href="https://twitter.com/hashtag/email"&gt;#email&lt;/a&gt; client (&lt;a href="https://twitter.com/NeoMutt_Org"&gt;@NeoMutt_Org&lt;/a&gt;) and &lt;a href="https://twitter.com/hashtag/rainbowstream"&gt;#rainbowstream&lt;/a&gt; in one window.&lt;br&gt;I love it! 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      19:24 PM - 12 Aug 2021
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1425900961785126913" 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=1425900961785126913" 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=1425900961785126913" 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;h2&gt;
  
  
  Questions
&lt;/h2&gt;

&lt;p&gt;First of all, a few general questions which may come to your mind after reading this introduction.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why should I setup something similar?! I have my windows next to each other and I'm really happy with it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If so, then: no problem. Do it the way you're most productive and happy. I personally experienced a huge time saving since using the following setup.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How long did it take to setup?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It took me a few hours with the most time spent in setting up neomutt. Fortunately I came across [mutt-wizard][&lt;a href="https://github.com/LukeSmithxyz/mutt-wizard"&gt;https://github.com/LukeSmithxyz/mutt-wizard&lt;/a&gt;] from LukeSmith. It is a simple cli that auto-generates your mutt configuration files.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Was it worth it?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Definitely. I have never been faster in my environment than that.&lt;/p&gt;

&lt;h2&gt;
  
  
  LinuxPorn
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Social Tab
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  Dev Tab
&lt;/h3&gt;

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

&lt;h2&gt;
  
  
  What to expect?
&lt;/h2&gt;

&lt;p&gt;In this post I will grant a deep-dive into my setup with tmux, neovim, neomutt (email-client), spotify-tui (spotify-terminal-client) and rainbowstream (twitter-cli).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core
&lt;/h2&gt;

&lt;h3&gt;
  
  
  OS and Hardware
&lt;/h3&gt;

&lt;p&gt;I'm running &lt;strong&gt;Manjaro Linux&lt;/strong&gt; with &lt;a href="https://i3wm.org/"&gt;i3wm&lt;/a&gt; on a Huawei Matebook X Pro of 2019.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Software
&lt;/h3&gt;

&lt;p&gt;Starting off by the software that makes tabs and multiple terminal sessions possible: tmux. It's a software which even persists your terminal sessions once the your actual Xterm window dies.&lt;br&gt;
By default you can create a new tab by pressing (Control+B) + c.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Social Tab
&lt;/h2&gt;

&lt;p&gt;This is the heart of this post: Setting up a social tab where I (as a shy developer) can interact with the whole world.&lt;br&gt;
It consists of a &lt;code&gt;pane&lt;/code&gt; for Twitter (made possible by &lt;a href="https://github.com/orakaro/rainbowstream"&gt;rainbowstream&lt;/a&gt;, which automatically push new tweets to your timeline.&lt;/p&gt;

&lt;p&gt;Furthermore there is a email pane brought to me by &lt;a href="https://neomutt.org/"&gt;neomutt&lt;/a&gt;. A fork of the original &lt;code&gt;mutt&lt;/code&gt; software.&lt;/p&gt;

&lt;p&gt;Also for a little concentration boost I've setup my social tab to contain the &lt;a href="https://github.com/Rigellute/spotify-tui"&gt;spotify-tui&lt;/a&gt; client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; In order to properly set it up and use your computer as playback device, you need to install spotify-deamon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Share your thoughts
&lt;/h2&gt;

&lt;p&gt;If you're also thinking about how to improve your efficiency in your terminal, share your thoughts and how your current setup works in the comment section!&lt;br&gt;
Would love to hear about it!&lt;/p&gt;

</description>
      <category>vim</category>
      <category>terminal</category>
      <category>typescript</category>
    </item>
    <item>
      <title>The ultra secure chat</title>
      <dc:creator>IJustDev</dc:creator>
      <pubDate>Thu, 03 Dec 2020 16:54:07 +0000</pubDate>
      <link>https://dev.to/ijustdev/the-ultra-secure-chat-kmb</link>
      <guid>https://dev.to/ijustdev/the-ultra-secure-chat-kmb</guid>
      <description>&lt;h2&gt;
  
  
  I know what you're doing
&lt;/h2&gt;

&lt;p&gt;Have you ever wondered who else has got the ability to read through your chat messages? Who can see your naughty pictures and the unfunny memes you've sent to your friends?&lt;br&gt;
Well this shouldn't shock you that much since you're in the DEV community but you are not the only one.&lt;/p&gt;

&lt;p&gt;Especially if you use services like WhatsApp, Instagram or any other service powered by a company.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Although knowing all of this, I don't know anybody who ever dared switching to a more secure messenger (at least nobody who had nothing to hide). All these big messengers are way to comfortable. You just install any app, the contacts will be auto-imported to the messenger and you're good to go and you can send messages to your friends, family (including grand parents) so on and so forth.&lt;/p&gt;

&lt;p&gt;Almost everybody on this earth is using an messenger you can contact him over, this comfort just makes switching an disaster. And by this blog post nothing will change, since you give away much more comfort by using this than you're doing by using Signal or Telegram).&lt;/p&gt;
&lt;h2&gt;
  
  
  So... What is this?
&lt;/h2&gt;

&lt;p&gt;This is a brief overview of my &lt;a href="https://github.com/royalzsoftware/asfaleia"&gt;latest chat concept named asfaleia&lt;/a&gt; (Greek word for security). It does not store any data on the server and the clients only authenticate through public and their correlating private keys. The project itself (by RoyalZSoftware) isn't finished yet. I mean it's in the rapid development phase and just consists of two commits. So if you've understand these concepts and want to work on this project, feel free to do so&lt;br&gt;
&lt;a href="https://github.com/royalzsoftware/asfaleia"&gt;github.com/royalzsoftware/asfaleia&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article will cover the basic concept of my chat idea with some deeper specification concerning the packets. There are more than a few possible enhancements, especially on the network part (since I'm a noob at this topic), but let's dive in.&lt;/p&gt;
&lt;h2&gt;
  
  
  General
&lt;/h2&gt;

&lt;p&gt;The server used by asfaleia is a simple TCP server written in go. Just a few lines by now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;net&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tcp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"0.0.0.0:3308"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Accept&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;handleConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where the &lt;code&gt;handleConnection(c)&lt;/code&gt; function is invoked inside a new thread to handle each client simultaneously.&lt;/p&gt;

&lt;p&gt;Currently not developed but planned is an &lt;code&gt;Message&lt;/code&gt; struct containing an message, an receiver and an sender.&lt;/p&gt;

&lt;h2&gt;
  
  
  Communication itself and Contacts?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Authentication
&lt;/h3&gt;

&lt;p&gt;The protocol uses ssh keypairs to verify identities. In order to tell the server now that you are this "public Key" the client sends an AUTH-Packet with his public key to the server.&lt;/p&gt;

&lt;p&gt;The server then generates an random string which will then be encrypted with the sent public key.&lt;/p&gt;

&lt;p&gt;After this procedure the server sends back an ANSWER-Packet containing the encrypted message with an handle, which in plain would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Client sends following
0;MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1DGPUSPqPJdcWvdBNM5ymAQlKIXbLMa3X4D0JaBKKqv47w4ii3sLw2lckEHk+8LGyBNkbQN0aaVxWeuo4R7IsBMXVpJgvf/iQImRm5b9HIxkAYi5PqYGcHKBqiuzuHmpPlGYdGpM+hK5EeWiDj/sRVcP42KyYzGmd6ExbqaWMewIDAQAB
# Server sends back following
1;1238013;aMbZ55lweKk7+grkGQhzZHkl2Jt6cjKxzmnQ+gq6ydsYzs1830JqNgcZzbTsHI9hSOvuii6AXwF0WY6WnHnKsANDdC+mTDcvz51D2eiwt27xEK5N2toiJ0bE4SJcf25vtTi9hKH3D/xVpdEzXcH3vMNiB4UKl410eF33PijI4Ws=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where at the both packets &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt; stands for the &lt;code&gt;packet identifier&lt;/code&gt;. In the server-response example beginning with &lt;code&gt;1&lt;/code&gt; the second argument after a &lt;code&gt;;&lt;/code&gt; is the handle that the client needs to pass in the AuthVerifyPacket he will later send. The last field is the encrypted message (in this example it's just a plain &lt;code&gt;Hello World&lt;/code&gt;) base64 encoded.&lt;/p&gt;

&lt;p&gt;Upon receiving this information the client now sends an AuthVerifyPacket&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2;12380138;Hello World
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this works the client receives an jwt auth token verifying his identity which he will later needs to pass to every request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sender
&lt;/h3&gt;

&lt;p&gt;But how could senders and receivers be anonymous within a chatroom? Technically they can, but sure enough it depends on the way they are using these program. You can't be anonymous if you make yourself identifiable with any chat message.&lt;/p&gt;

&lt;p&gt;The protocol itself uses ssh keypairs to verify their identity. Conversation partners can now use the ssh public key of the receiver, encrypt their message with it and send a packet to the server containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The public key of the receiver&lt;/li&gt;
&lt;li&gt;The (with the public key) encrypted message&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Receiver
&lt;/h3&gt;

&lt;p&gt;The receiver can send an GET-Packet which returns all the &lt;code&gt;Message[]&lt;/code&gt; messages stored in an two-dimensional array. Once the server has finished sending the messages those are removed from the array so nobody ever can find out what was sent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Drawbacks
&lt;/h3&gt;

&lt;p&gt;Although it's safe that none data is save to the disk, this also means that there isn't a chat history you can scroll through or any other thing related.&lt;/p&gt;

&lt;p&gt;Furthermore you can't just write somebody with an contact, you need his full public key which you need to transfer.&lt;/p&gt;

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

&lt;p&gt;Well although this won't be used for mobile applications there may be a use for hidden services. If you like this approach and want to help developing this feel free to do so on &lt;a href="https://github.com/royalzsoftware/asfaleia"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How much do you value your privacy?&lt;/em&gt; &lt;strong&gt;Leave a comment!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>go</category>
      <category>security</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
