<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Learning IOT blog]]></title><description><![CDATA[Latest news about Internet of things. In depth articles about this  up and coming industry. Learn about the technologies that is shaping this ecosystem.]]></description><link>http://www.learningiot.com/</link><image><url>http://www.learningiot.com/favicon.png</url><title>Learning IOT blog</title><link>http://www.learningiot.com/</link></image><generator>Ghost 1.18</generator><lastBuildDate>Fri, 01 May 2026 22:50:11 GMT</lastBuildDate><atom:link href="http://www.learningiot.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Mechanical Ventilators (COVID-19)]]></title><description><![CDATA[<div class="kg-card-markdown"><p>This post is not about IOT technologies.</p>
<p>As the COVID-19 pandemic is unfolding, I have been researching into mechanical ventilators and trying to understand what makes them so difficult and expensive to produce. We undoubtly build more complex consumer products (iPhone, Semiconductors, Electric Cars, etc...) that we sell for much</p></div>]]></description><link>http://www.learningiot.com/covidventilators/</link><guid isPermaLink="false">5e7f846935b12e0694d39503</guid><category><![CDATA[COVID19]]></category><category><![CDATA[Ventilators]]></category><category><![CDATA[mechanical]]></category><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Sat, 28 Mar 2020 17:42:18 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1516549655169-df83a0774514?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1516549655169-df83a0774514?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Mechanical Ventilators (COVID-19)"><p>This post is not about IOT technologies.</p>
<p>As the COVID-19 pandemic is unfolding, I have been researching into mechanical ventilators and trying to understand what makes them so difficult and expensive to produce. We undoubtly build more complex consumer products (iPhone, Semiconductors, Electric Cars, etc...) that we sell for much cheaper. The high price of ventilators does not seem to be because they are hard or expensive to build. But first, let's understand how they work.</p>
<p>Good video about biology of COVID-19:<br>
<a href="https://www.youtube.com/watch?v=PWzbArPgo-o&amp;feature=youtu.be">Epidemiology, Pathophysiology, Diagnostics</a></p>
<h2 id="basicsofmechanicalventilators">Basics of mechanical ventilators</h2>
<p>Here are a few videos to go over the basic of mechanical ventilators:</p>
<iframe width="180" height="100" src="https://www.youtube.com/embed/gk_Qf-JAL84" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p><a href="https://www.youtube.com/watch?v=gk_Qf-JAL84">Mechanical Ventilation Explained Clearly</a></p>
<iframe width="180" height="100" src="https://www.youtube.com/embed/40Shfx1QqTc" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
[What is Mechanical Ventilation?](https://www.youtube.com/watch?v=40Shfx1QqTc)
<h2 id="typeofmechanicalventilators">Type of mechanical ventilators</h2>
<p>Typically, mechanical ventilators can control the pressure and volume automatically.<br>
A mechanical ventilator has multiple settings based on the condition of the patient.</p>
<p>Here's a good summary about the modes of mechanical ventilation. For example SIMV is a typical setting (Synchronized Intermittent-Mandatory Ventilation).<br>
<a href="https://www.openanesthesia.org/modes_of_mechanical_ventilation/">Modes of mechanical ventilation</a></p>
<h3 id="ardsnetprotocol">ARDS NET protocol</h3>
<p>For COVID-19, a potential useful ventilation setting is the ARDS NET protocol.<br>
<a href="http://www.ardsnet.org/files/ventilator_protocol_2008-07.pdf">ARDS NET Protocol: Ventilator Protocol card</a></p>
<h1 id="scalingforcovid19">Scaling for COVID-19</h1>
<p>The question is can we mass produce ventilator to brind down the cost of those devices. Medical devices are highly regulated so this keeps the cost of those devices high (and it has also a small market). But if we open source the design, can bring the cost down and allow more people to benefit from these machines?</p>
<p>Here are a few on-going projects related to ventilators:<br>
<a href="https://hackernoon.com/open-source-ventilator-projects-status-challenges-how-you-can-help-j3sw3wy1">https://hackernoon.com/open-source-ventilator-projects-status-challenges-how-you-can-help-j3sw3wy1</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Bluetooth protocol cheat sheet]]></title><description><![CDATA[<div class="kg-card-markdown"><p>This is a very simplified summary of the bluetooth protocol. Useful for quick reference.</p>
<h1 id="physicallayer">Physical layer:</h1>
<h2 id="modes">Modes</h2>
<p>There are 4 modes for Bluetooth. Mainly :</p>
<ul>
<li>BR 1Mbps (Basic Rate) :
<ul>
<li>GFSK</li>
<li>Peak to average : 0dB</li>
<li>Can support saturation (since FSK can be received with saturation detectors).</li>
</ul>
</li>
<li>EDR 2Mbps (pi/4 DQPSK)
<ul>
<li>DQPSK</li></ul></li></ul></div>]]></description><link>http://www.learningiot.com/bluetooth-protocol/</link><guid isPermaLink="false">5ab1254f22595f08e96fe955</guid><category><![CDATA[Bluetooth]]></category><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Wed, 21 Mar 2018 06:15:19 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1518671678551-911467efe539?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=127ce3f63459a37555b5c9ac91c78876" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1518671678551-911467efe539?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=127ce3f63459a37555b5c9ac91c78876" alt="Bluetooth protocol cheat sheet"><p>This is a very simplified summary of the bluetooth protocol. Useful for quick reference.</p>
<h1 id="physicallayer">Physical layer:</h1>
<h2 id="modes">Modes</h2>
<p>There are 4 modes for Bluetooth. Mainly :</p>
<ul>
<li>BR 1Mbps (Basic Rate) :
<ul>
<li>GFSK</li>
<li>Peak to average : 0dB</li>
<li>Can support saturation (since FSK can be received with saturation detectors).</li>
</ul>
</li>
<li>EDR 2Mbps (pi/4 DQPSK)
<ul>
<li>DQPSK</li>
</ul>
</li>
<li>EDR 3Mbps (pi/8 D8PSK)
<ul>
<li>Peak to average : ~3.5dB</li>
</ul>
</li>
<li>LE 1Mbps:
<ul>
<li>GFSK</li>
</ul>
</li>
<li>LE 2Mbps:
<ul>
<li>GFSK</li>
</ul>
</li>
<li>LE Long-Range: Achieved by using strong FEC.</li>
</ul>
<h3 id="channelbandwitdh">Channel Bandwitdh:</h3>
<ul>
<li>1MHz channels (2402 to 2480 MHz):
<ul>
<li>BR (GFSK)</li>
<li>EDR (DQPSK, D8PSK)</li>
</ul>
</li>
<li>2MHz channels. Total of 40 2MHz channels.
<ul>
<li>LE</li>
</ul>
</li>
</ul>
<h2 id="timefrequencycharacteristics">Time/frequency characteristics:</h2>
<ul>
<li>
<p>Bluetooth is a TDMA system. It has predetermined time when a packet will be sent.</p>
</li>
<li>
<p>There are 1600 slots per seconds (1 slot = 625us). A data packet can be either 1 slot or 5 slots.</p>
</li>
<li>
<p>Symbol rate is 1Msps (Mega symbol per seconds). Irrespective of the modulation rate. For example D8PSK has 3 bits per symbol.</p>
</li>
<li>
<p>Bluetooth hops over 78 frequencies.</p>
</li>
<li>
<p>Bandwitdh is 1MHz.</p>
</li>
</ul>
<h1 id="linkmanager">Link manager:</h1>
<h2 id="connection">Connection:</h2>
<ul>
<li>Inquiry = Discovery.
<ul>
<li>Master finds other device with Inquiry.</li>
</ul>
</li>
<li>Paging = Connection
<ul>
<li>Master then connects to device with Paging.</li>
</ul>
</li>
<li>Piconet :
<ul>
<li>1 Master</li>
<li>Up to 7 active slaves</li>
<li>Up to 255 parked devices</li>
</ul>
</li>
</ul>
<h2 id="btaddresses">BT Addresses:</h2>
<p>Each bluetooth address contains 48 bits.</p>
<ul>
<li>NAP
<ul>
<li>16 bits</li>
</ul>
</li>
<li>UAP
<ul>
<li>8 bits</li>
</ul>
</li>
<li>LAP
<ul>
<li>24 bits</li>
</ul>
</li>
<li>NAP &amp; UAP are assigned by IEEE</li>
<li>LAP is assigned by the manufacturer</li>
</ul>
<h2 id="bluetoothstack">Bluetooth Stack:</h2>
<p><img src="http://www.learningiot.com/content/images/2018/03/BTStack.png" alt="Bluetooth protocol cheat sheet"></p>
<h2 id="bluetoothmesh">Bluetooth Mesh:</h2>
<p>A new feature is Bluetooth Mesh. It allows many-to-many device communication.  It will allow up to 32767 Nodes in a single mesh.<br>
Here is more details on the <a href="https://www.bluetooth.com/specifications/mesh-specifications">mesh specification</a>.</p>
<p>References:<br>
[1] : <a href="http://www.dziwior.org/Bluetooth/Inquiry.html">http://www.dziwior.org</a><br>
[2] : <a href="https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=421043">Bluetooth Specification Core 5</a><br>
[3] : <a href="http://www.electronicdesign.com/blog/5-things-you-must-know-about-new-bluetooth-5">Bluetooth Long Range</a><br>
[4] : <a href="https://www.bluetooth.com/~/media/files/marketing/mesh%20technology%20overview.ashx?la=en">Bluetooth mesh</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[IOT news]]></title><description><![CDATA[<div class="kg-card-markdown"><p>A good article on the limitation and what is missing in 802.11ax:<br>
<a href="http://divdyn.com/802-11ax-not/">802.11ax is not </a></p>
<p>Great in-depth post by Dean Bubley's updated post on Cryptocurrencies and Telecom:<br>
<a href="http://disruptivewireless.blogspot.com/2018/01/update-telecom-network-cryptocurrencies.html">Update: Telecom &amp; Network Cryptocurrencies, Tokens &amp; ICOs</a></p>
<p><a href="https://www.wired.com/story/proposal-for-federal-wireless-network-shows-fear-of-china/">Proposal for federal Wireless shows fear of China (Wired)</a></p>
<p>Nodio : Blockchain based router:</p></div>]]></description><link>http://www.learningiot.com/iot-news-august-1st/</link><guid isPermaLink="false">59d306f766bef156db1df935</guid><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Sun, 04 Feb 2018 02:50:47 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1503694978374-8a2fa686963a?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ&amp;s=c9f6961df92011d45dd938954b155756" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1503694978374-8a2fa686963a?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ&s=c9f6961df92011d45dd938954b155756" alt="IOT news"><p>A good article on the limitation and what is missing in 802.11ax:<br>
<a href="http://divdyn.com/802-11ax-not/">802.11ax is not </a></p>
<p>Great in-depth post by Dean Bubley's updated post on Cryptocurrencies and Telecom:<br>
<a href="http://disruptivewireless.blogspot.com/2018/01/update-telecom-network-cryptocurrencies.html">Update: Telecom &amp; Network Cryptocurrencies, Tokens &amp; ICOs</a></p>
<p><a href="https://www.wired.com/story/proposal-for-federal-wireless-network-shows-fear-of-china/">Proposal for federal Wireless shows fear of China (Wired)</a></p>
<p>Nodio : Blockchain based router:</p>
<ul>
<li><a href="https://medium.com/@nodioproject/a-deeper-dive-into-nodio-dcc93ca1621a">https://medium.com/@nodioproject/a-deeper-dive-into-nodio-dcc93ca1621a</a></li>
</ul>
<p>Bluetooth Beacon without batteries:<br>
<a href="https://spectrum.ieee.org/tech-talk/telecom/wireless/startup-wiliot-promises-nobattery-bluetooth-beacons-in-2019">https://spectrum.ieee.org/tech-talk/telecom/wireless/startup-wiliot-promises-nobattery-bluetooth-beacons-in-2019</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Create a rails app on Ubuntu 14.04]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Get the pre-requisite:</p>
<pre><code>sudo apt-get update
sudo apt-get install -y build-essential libssl-dev libyaml-dev libreadline-dev openssl curl git-core zlib1g-dev bison libxml2-dev libxslt1-dev libcurl4-openssl-dev nodejs libsqlite3-dev sqlite3
mkdir ~/ruby
cd ~/ruby
wget http://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
tar -xzf ruby-2.4.1.tar.gz</code></pre></div>]]></description><link>http://www.learningiot.com/create-a-rails-app/</link><guid isPermaLink="false">5a59b5f922595f08e96fe946</guid><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Sat, 13 Jan 2018 15:34:12 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1429497419816-9ca5cfb4571a?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=d76a44edbf349378740012b7d80b22e4" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1429497419816-9ca5cfb4571a?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=d76a44edbf349378740012b7d80b22e4" alt="Create a rails app on Ubuntu 14.04"><p>Get the pre-requisite:</p>
<pre><code>sudo apt-get update
sudo apt-get install -y build-essential libssl-dev libyaml-dev libreadline-dev openssl curl git-core zlib1g-dev bison libxml2-dev libxslt1-dev libcurl4-openssl-dev nodejs libsqlite3-dev sqlite3
mkdir ~/ruby
cd ~/ruby
wget http://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
tar -xzf ruby-2.4.1.tar.gz
cd ruby-2.4.1
./configure
make
sudo make install


</code></pre>
<h2 id="installpassengerandnginx">Install Passenger and Nginx:</h2>
<pre><code>sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7
sudo nano /etc/apt/sources.list.d/passenger.list
</code></pre>
<p>OLD: TO REMOVE:<br>
Insert the line :<br>
<code>deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main</code><br>
END OLD</p>
<pre><code>sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list
sudo apt-get update
sudo apt-get install -y nginx-extras passenger
</code></pre>
<p>OLD:</p>
<pre><code>sudo apt-get install ruby-dev
sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev
</code></pre>
<pre><code>sudo gem install railties -v 5.1.4.rc1
sudo gem install bundler
sudo gem install --no-rdoc --no-ri rails
rails new testapp --skip-bundle

</code></pre>
<p>Uncomment in Gemfile:<br>
<code>gem 'therubyracer', platforms: :ruby</code></p>
<pre><code>bundle install
</code></pre>
<h2 id="configurenginx">Configure Nginx:</h2>
<p>REmove default configuration:</p>
<pre><code>sudo nano /etc/nginx/sites-available/default
</code></pre>
<p>Comment the lines:</p>
<pre><code>listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
</code></pre>
<p>Create the configuration</p>
<pre><code>sudo nano /etc/nginx/sites-available/testapp
</code></pre>
<pre><code>server {
  listen 80 default_server;
  server_name www.mydomain.com;
  passenger_enabled on;
  passenger_app_env development;
  root /root/testapp/public;
}

</code></pre>
<pre><code>sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled/testapp
</code></pre>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-passenger-and-nginx-on-ubuntu-14-04">How To Deploy a Rails App with Passenger and Nginx on Ubuntu 14.04</a></p>
<p><a href="https://www.phusionpassenger.com/library/install/nginx/install/oss/xenial/">Installing Passenger + Nginx</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Install a rails app on Digital Ocean in 15minutes with passenger-install-nginx-module]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Learn how to migrate your ruby-on-rails app from Heroku to  Digital Ocean.</p>
<p>Even thought this post is not directly related to IOT technologies, running a webserver/webapplication is often required. Running on Heroku can be quite expensive especially if the app is not getting as much traffic/revenues as expected.</p></div>]]></description><link>http://www.learningiot.com/install-a-rails-app-new-version/</link><guid isPermaLink="false">5a599bfd22595f08e96fe93c</guid><category><![CDATA[rails]]></category><category><![CDATA[rubyonrails]]></category><category><![CDATA[server]]></category><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Sat, 13 Jan 2018 05:41:52 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1501720089986-e232be48a464?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=5f3fcb61166fb563408b4bbe52d2ee6b" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1501720089986-e232be48a464?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=5f3fcb61166fb563408b4bbe52d2ee6b" alt="Install a rails app on Digital Ocean in 15minutes with passenger-install-nginx-module"><p>Learn how to migrate your ruby-on-rails app from Heroku to  Digital Ocean.</p>
<p>Even thought this post is not directly related to IOT technologies, running a webserver/webapplication is often required. Running on Heroku can be quite expensive especially if the app is not getting as much traffic/revenues as expected.</p>
<h2 id="simpleway">Simple way:</h2>
<h3 id="firstweneedtoaddmoreswapmemory">First we need to add more swap memory:</h3>
<pre><code>sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile

sudo mkswap /swapfile
sudo swapon /swapfile


echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

</code></pre>
<p>You can check the swap space now (Optional):<br>
<code>free -h</code></p>
<h3 id="nowletsinstalleverything">Now let's install everything:</h3>
<pre><code>sudo apt-get update
command curl -sSL https://rvm.io/mpapis.asc | gpg --import -
curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh


rvm requirements
rvm install 2.4.1
sudo apt-get install -y libcurl4-openssl-dev nodejs libpq-dev
rvm rubygems current
gem install rails
gem install passenger
rvmsudo passenger-install-nginx-module

</code></pre>
<h3 id="creatingyourrailsapp">Creating your rails app:</h3>
<pre><code>rails new testapp -d postgresql
cd testapp
bundle install
RAILS_ENV=production rails server 
</code></pre>
<h3 id="configurepostgres">Configure PostGres :</h3>
<pre><code>  sudo -u postgres psql
  createuser --interactive
</code></pre>
<p>Here you should follow the questions. You will have the following questions :</p>
<ul>
<li>Enter name of role to add: user1</li>
<li>Shall the new role be a superuser? (y/n) y</li>
</ul>
<p>Update the password for your user:</p>
<pre><code>sudo -u postgres psql
</code></pre>
<p>Then in Postgres do :</p>
<pre><code>postgres=# \password user1
postgres=# \q
</code></pre>
<p>Make sure you create your database:</p>
<pre><code>createdb appname_production
</code></pre>
<p>Then you need to update the file config/database.yml:</p>
<pre><code>production:
  adapter: postgresql
  encoding: unicode
  database: appname_development
  host: localhost
  pool: 5
  username: user1
  password: user1_password
</code></pre>
<h3 id="setyoursecretkey">Set your secret key :</h3>
<p>Get the secret key:</p>
<pre><code>rake secret
</code></pre>
<p>Then get this secret key and copy it into your : ~/.bashrc</p>
<p>export SECRET_KEY_BASE=  MY SECRET KEY</p>
<p>References:</p>
<ul>
<li><a href="https://www.digitalocean.com/community/tutorials/how-to-install-rails-and-nginx-with-passenger-on-ubuntu">How To Install Rails and nginx with Passenger on Ubuntu</a></li>
<li><a href="https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-passenger-and-nginx-on-ubuntu-14-04">How To Deploy a Rails App with Passenger and Nginx on Ubuntu 14.04</a></li>
</ul>
</div>]]></content:encoded></item><item><title><![CDATA[Computing trends: Are we moving away from the Cloud?]]></title><description><![CDATA[<div class="kg-card-markdown"><p>With the crypto craze going on this is a good opportunity to reflect on the computing trends in the last 30 years.</p>
<h2 id="atthebeginningwascloudcomputing">At the beginning was cloud computing:</h2>
<p>It started with cloud computing back in the 70s. We would connect to main frame with dummy terminal.</p>
<p>Then the 80s saw</p></div>]]></description><link>http://www.learningiot.com/trends-in-computing/</link><guid isPermaLink="false">5a55aae022595f08e96fe934</guid><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Wed, 10 Jan 2018 06:04:53 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1506399558188-acca6f8cbf41?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ%3D%3D%0A&amp;s=d9028d0b28a90b9eaa29d5e9e628f460" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1506399558188-acca6f8cbf41?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ%3D%3D%0A&s=d9028d0b28a90b9eaa29d5e9e628f460" alt="Computing trends: Are we moving away from the Cloud?"><p>With the crypto craze going on this is a good opportunity to reflect on the computing trends in the last 30 years.</p>
<h2 id="atthebeginningwascloudcomputing">At the beginning was cloud computing:</h2>
<p>It started with cloud computing back in the 70s. We would connect to main frame with dummy terminal.</p>
<p>Then the 80s saw the rise of the personal computer. It was the democratization of the computing power. Apple would claim &quot;power to the people&quot; with a brand new computer.</p>
<p>Slowly from 2005 to today, the big shift in computing has been going to the cloud. It was the idea that you need to centralize everything and you can provide better and cheaper services. You could also more effectively scale up resources based on the your need without having to invest huge sums. THe downside is that the computing resources are now centralized with a few key players (Amazon being the dominant one).</p>
<h2 id="areweatthedawnofanewera">Are we at the dawn of a new era?</h2>
<p>Could it be possible that the next trend be to re-democratization (yet again) of the computing resources away from the centralized cloud? If so, then blockchain technologies could help us achieve this.</p>
<p>One of the most recent example is FileCoin. FileCoin is decentralized storage application (think Dropbox decentralized). So everyone can run a filecoin node on their computers. Whether this application has merit or not, it is worth nothing that they raise ~200M$ during their initial coin offering. So, it is arguable that some people do believe in this idea. The simplest use case I can think of is for &quot;copyrighted&quot; material, where if stored in a decentralized server, then it would nearly impossible to any autority to remove it.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Creating a rails app on Digital Ocean in 15minutes]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Learn how to migrate your ruby-on-rails app from Heroku to  Digital Ocean.</p>
<h3 id="updatedversionishere">UPDATED <a href="http://www.learningiot.com/install-a-rails-app-new-version/">VERSION IS HERE </a></h3>
<p>Even thought this post is not directly related to IOT technologies, running a webserver/webapplication is often required. Running on Heroku can be quite expensive especially if the app is not getting as much</p></div>]]></description><link>http://www.learningiot.com/creating-a-rails-app/</link><guid isPermaLink="false">59d306f766bef156db1df932</guid><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Wed, 27 Dec 2017 16:56:14 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1454357000070-7ce0a6beb0a1?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=086e560c9b9001bb32f8fbed2bd33193" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1454357000070-7ce0a6beb0a1?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=086e560c9b9001bb32f8fbed2bd33193" alt="Creating a rails app on Digital Ocean in 15minutes"><p>Learn how to migrate your ruby-on-rails app from Heroku to  Digital Ocean.</p>
<h3 id="updatedversionishere">UPDATED <a href="http://www.learningiot.com/install-a-rails-app-new-version/">VERSION IS HERE </a></h3>
<p>Even thought this post is not directly related to IOT technologies, running a webserver/webapplication is often required. Running on Heroku can be quite expensive especially if the app is not getting as much traffic/revenues as expected.</p>
<h2 id="simpleway">Simple way:</h2>
<h3 id="firstweneedtoaddmoreswapmemory">First we need to add more swap memory:</h3>
<pre><code>sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile

sudo mkswap /swapfile
sudo swapon /swapfile


echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab


</code></pre>
<p>You can check the swap space now (Optional):<br>
<code>free -h</code></p>
<h3 id="nowletsinstalleverything">Now let's install everything:</h3>
<pre><code>sudo apt-get update
command curl -sSL https://rvm.io/mpapis.asc | gpg --import -
curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh


rvm requirements
rvm install 2.4.1
sudo apt-get install -y libcurl4-openssl-dev nodejs
rvm rubygems current
gem install rails
gem install passenger
rvmsudo passenger-install-nginx-module


</code></pre>
<h2 id="installrvm">Install RVM:</h2>
<p>From this  <a href="https://github.com/rvm/ubuntu_rvm">tutorial</a></p>
<pre><code>sudo apt-get install -y software-properties-common

sudo apt-add-repository -y ppa:rael-gc/rvm
sudo apt-get update
sudo apt-get install -y rvm 
</code></pre>
<h2 id="createauser">Create a user :</h2>
<p>You can follow this <a href="https://www.digitalocean.com/community/tutorials/how-to-create-a-sudo-user-on-ubuntu-quickstart">tutorial</a></p>
<ul>
<li><code>useradd appname_production</code></li>
</ul>
<p>Add user to sudoers:</p>
<ul>
<li><code>usermod -aG sudo appname_production</code></li>
</ul>
<h1 id="installpostgresql">Install postgresql:</h1>
<p>From these notes : <a href="https://medium.com/coding-blocks/creating-user-database-and-adding-access-on-postgresql-8bfcd2f4a91e">Creating user and adding access in Postgresql </a></p>
<ul>
<li><code>sudo apt-get -y install postgresql postgresql-contrib</code></li>
</ul>
<h2 id="startpostgres">Start postgres:</h2>
<ul>
<li><code>sudo -u postgres psql</code></li>
</ul>
<p>And run the following command</p>
<ul>
<li><code>createuser owning_user</code></li>
<li>Exit postgres (CTRL-D)</li>
</ul>
<h2 id="settingupthedatabase">Setting up the database:</h2>
<p>SSH into your machine<br>
From shell do :</p>
<ul>
<li>
<p><code>sudo -i -u postgres</code></p>
</li>
<li>
<p><code>createuser --interactive</code><br>
Here you should follow the questions. You will have the following questions :</p>
<ul>
<li>Enter name of role to add: user1</li>
<li>Shall the new role be a superuser? (y/n) y</li>
</ul>
</li>
<li>
<p><code>createdb appname_production</code></p>
</li>
</ul>
<p>More info here:<br>
<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-14-04">Install PSQL for digital ocean</a></p>
<h2 id="copydatabaseifyouhaveonealready">Copy database (if you have one already)</h2>
<p>If you're migrating and have an existing database, here are the instructions. If not, then skip to next section.</p>
<p>Update the database with scp (from your mac):</p>
<ul>
<li><code>scp budata.sql root@serverip:/</code></li>
</ul>
<p>Log into your user name :</p>
<ul>
<li><code>psql databasename &lt; data_base_dump</code></li>
</ul>
<p>Now we can access the database this way:<br>
<code>sudo -u appname_production psql</code></p>
<p>Change the password:<br>
<code>sudo -u appname_production psql</code></p>
<p><code>appname_production-# \password appname_production</code></p>
<p>Update the config/database.yml</p>
<h2 id="installruby241">Install RUBY 2.4.1:</h2>
<pre><code>rvm install ruby-2.4.1
rvm --default use ruby-2.4.1
gem install bundler --no-rdoc --no-ri
sudo apt-get install -y nodejs &amp;&amp; sudo ln -sf /usr/bin/nodejs /usr/local/bin/node

</code></pre>
<h2 id="installrails">Install rails :</h2>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-with-rvm-on-ubuntu-16-04">Reference</a></p>
<pre><code>gem search '^rails$' --all
gem install rails -v 5.1.4 

</code></pre>
<h2 id="installmoretools">Install more tools:</h2>
<p>Make sure you exit POSTGRESQL with CTRL-D.</p>
<pre><code>sudo apt-get -y install rake curl gnupg build-essential  libreadline-dev libxslt-dev libxml2-dev python 

gem install libv8 -v '3.11.8.12'


sudo apt-get install -y libv8-dev libmagick++-dev webp imagemagick libpq-dev ruby-railties

</code></pre>
<h3 id="installpassengerpackages">Install passenger packages:</h3>
<p>FOr installing passenger and rails, we are following this <a href="https://www.digitalocean.com/community/tutorials/how-to-install-rails-and-nginx-with-passenger-on-ubuntu">guide</a>:</p>
<pre><code>sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt-get install -y apt-transport-https ca-certificates
 
</code></pre>
<p>Add our APT repository</p>
<pre><code> sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main &gt; /etc/apt/sources.list.d/passenger.list'  
 sudo apt-get update 
</code></pre>
<p>Install Passenger + Nginx</p>
<pre><code> sudo apt-get install -y nginx-extras passenger 
</code></pre>
<h2 id="enablepassengerinnginxconf">Enable passenger in nginx conf:</h2>
<p>In file :  /etc/nginx/nginx.conf<br>
Uncomment the following line :<br>
<code># include /etc/nginx/passenger.conf;</code></p>
<p>Now go into your user:<br>
Change the password for user :<br>
<code>passwd appname_production</code></p>
<p>Then log into it:<br>
<code>su - appname_production</code></p>
<p>old :</p>
<pre><code> rvm install ruby-2.4.1 
 sudo apt-get install ruby

 sudo gem install libv8 -v '3.11.8.12' -- --with-system-v8 
 sudo gem install libv8 -v 3.11.8.17 -- --with-system-v8 

* `rvm install ruby-2.4.1`
* `gem install bundler`
* `gem install nokogiri -v '1.5.11'`
* `gem install libv8 -v '3.11.8.12' -- --with-system-v8`
* `gem install libv8 -v 3.11.8.17 -- --with-system-v8`

* `gem install passenger`
* `sudo apt-get install libcurl4-openssl-dev`
* `sudo apt-get install nodejs`

</code></pre>
<p>new:</p>
<pre><code> sudo apt-get install -y build-essential patch ruby-dev zlib1g-dev liblzma-dev

 sudo gem install nokogiri -v '1.5.11' 

 export rvmsudo_secure_path=1

 sudo gem install passenger 
 sudo apt-get install -y libcurl4-openssl-dev nodejs



</code></pre>
<p>NOw install nginx:</p>
<pre><code>rvmsudo passenger-install-nginx-module
</code></pre>
<p>If you have issues with ruby racer:</p>
<p><code>gem uninstall libv8 gem install therubyracer -v '0.11.3' gem install libv8 -v '3.11.8.12' -- --with-system-v8</code></p>
<p>Installing rbenv:<br>
<a href="https://gorails.com/setup/ubuntu/14.04"></a></p>
<ul>
<li><code>rbenv install 2.1.1</code></li>
<li><code>rbenv global 2.1.1</code></li>
</ul>
<p>Install RVM:</p>
<p>Extra Notes:</p>
<ul>
<li>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-with-rvm-on-ubuntu-16-04">Notes about installing RVM</a></p>
</li>
<li>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-ruby-on-rails-application-on-ubuntu-14-04">How to tuse PostGresql with your Ruby on Rails app</a></p>
</li>
</ul>
<h2 id="runningyourapp">Running your app:</h2>
<p>Setting up your db:<br>
<code>RAILS_ENV=production rake db:create</code></p>
<p>Testing you app in production:<br>
<code>RAILS_ENV=production rails server</code></p>
<p>App is located in : /var/www</p>
<p>restarting app:<br>
<code>sudo service nginx restart</code></p>
<p>Logs for app are in :<br>
/var/log/nginx/access.log</p>
<h2 id="createauserforpgsql">Create a user for PG SQL:</h2>
<p><a href="http://stackoverflow.com/questions/10861260/how-to-create-user-for-a-db-in-postgresql">Create a user (stackoverflow:</a></p>
<h2 id="loadinganotherdatabase">Loading another database:</h2>
<p>I have another database on heroku. I can get it this way :</p>
<p><code>heroku config:get DATABASE_URL --app appname</code></p>
<p>The output has the format:</p>
<p><code>postgres://&lt;username&gt;:&lt;password&gt;@&lt;host_name&gt;:&lt;port&gt;/&lt;dbname&gt;.</code></p>
<p>You can save the content this way :</p>
<p><code>pg_dump --host=&lt;host_name&gt; --port=&lt;port&gt; --username=&lt;username&gt; --password --dbname=&lt;dbname&gt; &gt; output.sql</code></p>
<p>And load it up again :</p>
<p>Loading into database:<br>
<code>psql databasename &lt; data_base_dump</code></p>
<p>Change permission of user:</p>
<ul>
<li><code>sudo -u postgres -i</code></li>
<li><code>psql</code></li>
<li><code>ALTER USER new_user CREATEDB;</code></li>
</ul>
<h2 id="addingswapspacetoyourapp">Adding swap space to your app:</h2>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04">https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04</a></p>
<p>Install Jenkins:<br>
<a href="https://www.digitalocean.com/community/tutorials/how-to-install-jenkins-on-ubuntu-16-04">Installing jenkins on digital ocean:</a></p>
<h2 id="securingtheapp">Securing the app:</h2>
<p><a href="https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-on-ubuntu-14-04">how-to-secure-nginx-on-ubuntu-14-04<br>
</a></p>
<p>References:</p>
<ul>
<li><a href="https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/digital_ocean/nginx/oss/install_language_runtime.html">Walkthrough for installing passenger</a></li>
<li><a href="https://www.phusionpassenger.com/library/deploy/nginx/deploy/ruby/#determine_ruby_command">Deploying a ruby application with Phusion</a></li>
<li><a href="https://blog.openshift.com/converting-an-existing-rails-app-to-run-on-openshift/">Converting an existing rails app for openshift</a></li>
<li><a href="https://www.digitalocean.com/community/tutorials/how-to-install-rails-and-nginx-with-passenger-on-ubuntu">How To Install Rails and nginx with Passenger on Ubuntu</a></li>
</ul>
</div>]]></content:encoded></item><item><title><![CDATA[Creating 2 ghost blogs on a single droplet]]></title><description><![CDATA[<div class="kg-card-markdown"><p>In this post you will learn :</p>
<ul>
<li>How to configure 2 blogs running on the same droplet</li>
<li>How to configure a ghost blog on Digital Ocean</li>
</ul>
<p>This blog now runs on Digital Ocean. In this post I will explain how I manage to configure 2 blogs running on the same droplet.</p></div>]]></description><link>http://www.learningiot.com/creating-2-ghost-blog-on-single-droplet/</link><guid isPermaLink="false">59d3b14f66bef156db1df94e</guid><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Mon, 27 Nov 2017 04:09:48 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1502951682449-e5b93545d46e?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=c5e4c6a01bac3fffe5d2f92953a5fba8" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1502951682449-e5b93545d46e?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=c5e4c6a01bac3fffe5d2f92953a5fba8" alt="Creating 2 ghost blogs on a single droplet"><p>In this post you will learn :</p>
<ul>
<li>How to configure 2 blogs running on the same droplet</li>
<li>How to configure a ghost blog on Digital Ocean</li>
</ul>
<p>This blog now runs on Digital Ocean. In this post I will explain how I manage to configure 2 blogs running on the same droplet. Digital Ocean is a great alternative to AWS and it's pretty economical.<br>
Here is a simple tutorial to get this going fast.</p>
<p>Steps:</p>
<ul>
<li>Create a new droplet</li>
<li>Increase swap</li>
<li>Install Ghost (first blog)
<ul>
<li>Change the server port</li>
</ul>
</li>
<li>Install Ghost (second blog)
<ul>
<li>Change the server port</li>
</ul>
</li>
<li>Configure localhost</li>
<li>Configure cloudfare</li>
</ul>
<h2 id="createanewdroplet">Create a new droplet</h2>
<p>This step is pretty self-explanatory. You can follow Digital Ocean guide on [this.] (<a href="https://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-droplet">https://www.digitalocean.com/community/tutorials/how-to-create-your-first-digitalocean-droplet</a>)</p>
<h2 id="increaseswap">Increase swap</h2>
<p>Here's a quick simple tutorial to increase to 4G <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
<pre><code>sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile


</code></pre>
<p>You can verify that the swap is properly install by :</p>
<pre><code>sudo swapon --show
</code></pre>
<p>**Make it permanent: **</p>
<pre><code>sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
</code></pre>
<h2 id="installghost">Install Ghost:</h2>
<p>Following the instruction from the website, we have :<br>
<a href="https://docs.ghost.org/v1/docs/install">the website</a></p>
<pre><code>sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo ufw allow 'Nginx Full'
sudo apt-get install mysql-server
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash 
sudo apt-get install -y nodejs
sudo npm i -g ghost-cli
sudo mkdir -p /var/www/ghost1
sudo mkdir -p /var/www/ghost2
sudo chown yann:yann /var/www/ghost1
sudo chown yann:yann /var/www/ghost2
cd /var/www/ghost1
ghost install

</code></pre>
<p>Here note that there are 2 installations of the Ghost blog. One in ghost1 and the other in ghost2.</p>
<h3 id="configurethenewlybuiltghostserver">Configure the newly built ghost server</h3>
<p>There are 2 things you want to configure:</p>
<ul>
<li>Localhost and port (so outside server can access it)</li>
<li>Nginx port</li>
</ul>
<p>In file <code>config.production.json</code>, we have:</p>
<pre><code>  &quot;url&quot;: &quot;http://www.mywebsite.com&quot;,
  &quot;server&quot;: {
    &quot;port&quot;: 2370,
    &quot;host&quot;: &quot;0.0.0.0&quot;
  },

</code></pre>
<p>For Nginx configuration, based on your website name, you should update this file :<br>
<code>/etc/nginx/sites-enabled/www.learningiot.com.conf</code></p>
<pre><code>server {
    listen 80;
    listen [::]:80;

    server_name www.learningiot.com;
    root /var/www/learningiot/system/nginx-root;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2370;

    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}

</code></pre>
<p>make sure you edit the line <code>proxy_pass http://127.0.0.1:2370;</code> to the right port id.</p>
<p>Now restart ghost and Nginx:</p>
<pre><code> sudo service nginx restart
 ghost restart
</code></pre>
<h2 id="configurecloudfare">Configure cloudfare:</h2>
<p><a href="https://www.digitalocean.com/community/questions/can-i-use-domain-on-cloudflare-with-digital-ocean">This article</a> will show you how to configure Cloudfare. I used the following method:</p>
<p>Using A and CNAME Entries</p>
<pre><code>A          @          DROPLET_IP
CNAME      www        domain.com
</code></pre>
<p>References:</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p><a href="https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-16-04">Tutorial on how to add swap space on Ubuntu</a> . <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
</div>]]></content:encoded></item><item><title><![CDATA[Krack Attack. The first major WPA2 flaw]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Today was the release a major WPA2 flaw. It's the first a flaw in the protocol is found (as opposed to flaws due to weak passwords). The flaw was discovered in July this year and was under embargo so most vendor could fix their FW with a backyard compatible fix.</p></div>]]></description><link>http://www.learningiot.com/krack-attack-the-first-major-wpa2-flaw/</link><guid isPermaLink="false">59e5a518d61d6a06338e8cca</guid><category><![CDATA[security]]></category><category><![CDATA[krack attack]]></category><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Tue, 17 Oct 2017 06:48:42 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1501808723803-f10b401a67a1?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=cadc9ed70009cef98f9906095698ce54" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1501808723803-f10b401a67a1?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=cadc9ed70009cef98f9906095698ce54" alt="Krack Attack. The first major WPA2 flaw"><p>Today was the release a major WPA2 flaw. It's the first a flaw in the protocol is found (as opposed to flaws due to weak passwords). The flaw was discovered in July this year and was under embargo so most vendor could fix their FW with a backyard compatible fix.</p>
<p>First of all, the &quot;Krack attack&quot; found a major vulnerability in how WPA2 protocol exchanges the key. The good news is that we don't need to create a WPA3, since there exists a backyard compatible fix for WPA2.</p>
<p>The main is idea :</p>
<blockquote>
<p>During the WPA2 handshake, it is possible to replay a particular message (message 3 of the 4-way handshake). This forces the victim to reinstall the key and thus resetting the receive packet number and nounce.</p>
</blockquote>
<p>Here's a diagram of the 4-way handshake (from <a href="https://en.wikipedia.org/wiki/IEEE_802.11i-2004">wikipedia</a>)<br>
<img src="http://www.learningiot.com/content/images/2017/10/4-way-handshake.svg" alt="Krack Attack. The first major WPA2 flaw"></p>
<p>You can read more details on the paper of the researcher who discovered it:<br>
<a href="https://www.krackattacks.com/">https://www.krackattacks.com/</a></p>
<p>You should double check your wifi AP and update the FW. Some vendor (like my Netgear R8000 I currently use at home) still don't have a fix, but it should be coming soon. Also, you will need to update your client as well (keeping your iOS, windows up to date).</p>
<p>But the more troubling are all the IOT devices that probably don't have any FW updates. Security for IOT is quickly becoming a disavantage for connecting things around. This shouldn't be the case as long as the device manufacturer put the resources at it.</p>
</div>]]></content:encoded></item><item><title><![CDATA[5 Startups for September 2017]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Here's a few IOT startup I came</p>
<h2 id="beepnetwork">Beep Network :</h2>
<p>Headquarters : San Francisco<br>
<a href="https://www.beepnetworks.com/">Beep Networks</a></p>
<p>Cloud connected wireless sensors using LoRa radios. They are selling the hardware devices and providing complete solutions.</p>
<h2 id="mode">Mode:</h2>
<p><a href="http://www.tinkermode.com/">www.tinkermode.com</a><br>
Headquarter : San Mateo<br>
Hardware as a Service</p>
<p>B2B: IOT cloud platform for connecting devices.</p>
<h2 id="evrythng">EVRYTHNG:</h2></div>]]></description><link>http://www.learningiot.com/startup-list-for-september-2017/</link><guid isPermaLink="false">59d306f766bef156db1df936</guid><category><![CDATA[Iot]]></category><category><![CDATA[startup list]]></category><category><![CDATA[startup]]></category><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Sun, 17 Sep 2017 05:34:47 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1487077397280-8b0a6734cf8b?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=7d27bc024bcbb1f751a985bdce46cbbc" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1487077397280-8b0a6734cf8b?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=7d27bc024bcbb1f751a985bdce46cbbc" alt="5 Startups for September 2017"><p>Here's a few IOT startup I came</p>
<h2 id="beepnetwork">Beep Network :</h2>
<p>Headquarters : San Francisco<br>
<a href="https://www.beepnetworks.com/">Beep Networks</a></p>
<p>Cloud connected wireless sensors using LoRa radios. They are selling the hardware devices and providing complete solutions.</p>
<h2 id="mode">Mode:</h2>
<p><a href="http://www.tinkermode.com/">www.tinkermode.com</a><br>
Headquarter : San Mateo<br>
Hardware as a Service</p>
<p>B2B: IOT cloud platform for connecting devices.</p>
<h2 id="evrythng">EVRYTHNG:</h2>
<p>Headquarter : New York<br>
<a href="https://evrythng.com/">www.evrythng.com</a><br>
Providing data layer to connect all different technologies (QR smart tags, NFC, BLE, RFID).</p>
<h2 id="vergesenseycs17">VergeSense: (YC S17)</h2>
<p><a href="http://www.vergesense.com/">www.vergesense.com</a><br>
Image sensor. Current application is for commercial building targeting space utilization.</p>
<h2 id="assemblyaiycs17">AssemblyAI (YC S17):</h2>
<p><a href="https://assemblyai.com/">www.assemblyai.com</a></p>
<p>Voice to speech API. This is an interesting problem although it is less related to IOT (but it will eventually be required for most IOT devices). It's probably been tried over and over but if they execute well, this could be a great opportunity.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Weekly news (Aug 1st 2017)]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Here are some news article related to IoT.<br>
These links are a bit old, but some are still very relevant.</p>
<ul>
<li>
<p><a href="https://www.bluetooth.com/news/pressreleases/2017/07/bluetooth-sig-announces-mesh-networking-capability">Bluetooth mesh release</a>*</p>
</li>
<li>
<p><a href="https://www.wired.com/2017/04/chip-revolution-will-bring-better-vr-sooner-think/">Chip revolution will bring better VR sooner you think/</a></p>
</li>
<li>
<p><a href="https://www.rfglobalnet.com/doc/anritsu-wireless-test-set-mt-a-with-bluetooth-low-energy-phy-bluetooth-long-range-support-0001">New bluetooth features added to tester. BLR and 2Mpbs</a></p>
</li>
<li>
<p><a href="https://www.forbes.com/sites/leemathews/2017/04/10/a-malware-outbreak-is-bricking-insecure-iot-devices/#3afe93f629a3">Malware outbreak is bricking insecure IoT devices</a></p>
</li>
<li>
<p><a href="https://apple.news/Agv4SXTvTQSq9Pe4mEjsOaQ">All the</a></p></li></ul></div>]]></description><link>http://www.learningiot.com/weekly-news/</link><guid isPermaLink="false">59d306f766bef156db1df92f</guid><category><![CDATA[news]]></category><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Sat, 29 Apr 2017 18:13:17 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1498644035638-2c3357894b10?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=165e8d29aa644abc066e6d0aab4d7a7e" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1498644035638-2c3357894b10?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=165e8d29aa644abc066e6d0aab4d7a7e" alt="Weekly news (Aug 1st 2017)"><p>Here are some news article related to IoT.<br>
These links are a bit old, but some are still very relevant.</p>
<ul>
<li>
<p><a href="https://www.bluetooth.com/news/pressreleases/2017/07/bluetooth-sig-announces-mesh-networking-capability">Bluetooth mesh release</a>*</p>
</li>
<li>
<p><a href="https://www.wired.com/2017/04/chip-revolution-will-bring-better-vr-sooner-think/">Chip revolution will bring better VR sooner you think/</a></p>
</li>
<li>
<p><a href="https://www.rfglobalnet.com/doc/anritsu-wireless-test-set-mt-a-with-bluetooth-low-energy-phy-bluetooth-long-range-support-0001">New bluetooth features added to tester. BLR and 2Mpbs</a></p>
</li>
<li>
<p><a href="https://www.forbes.com/sites/leemathews/2017/04/10/a-malware-outbreak-is-bricking-insecure-iot-devices/#3afe93f629a3">Malware outbreak is bricking insecure IoT devices</a></p>
</li>
<li>
<p><a href="https://apple.news/Agv4SXTvTQSq9Pe4mEjsOaQ">All the news from Facebook conference F8 </a></p>
</li>
</ul>
</div>]]></content:encoded></item><item><title><![CDATA[Wifi data rates]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Here are the data rates for 802.11n and 802.11ac for a single spatial stream for 20MHz. 20Mhz BW has 52 subcarriers.</p>
<table class="table table-bordered table-hover table-condensed">
<thead><tr><th title="Field #1"></th>
<th title="Field #2"></th>
<th title="Field #3">MCS</th>
<th title="Field #4">Nb subcarriers</th>
<th title="Field #5">NBits</th>
<th title="Field #6">Coding rate</th>
<th title="Field #7">Symbol duration</th>
<th title="Field #8">Mbps</th>
<th title="Field #9">Symbol duration</th>
<th title="Field #10">Mbps</th>
</tr></thead>
<tbody><tr>
<td>802.11ac/802.11n</td>
<td>BPSK</td>
<td align="right">0</td>
<td align="right">52</td>
<td align="right">1</td>
<td>1/2</td>
<td align="right">4</td>
<td align="right">6.5</td>
<td align="right">3.6</td></tr></tbody></table></div>]]></description><link>http://www.learningiot.com/wifi-data-rates/</link><guid isPermaLink="false">59d306f766bef156db1df930</guid><category><![CDATA[wifi data rates]]></category><category><![CDATA[wifi rates]]></category><category><![CDATA[wifi speed]]></category><category><![CDATA[wifi single spatial stream]]></category><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Tue, 18 Apr 2017 18:21:33 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1500656078142-0134c7523b29?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=ece305014cf4d8d522abaa55f0d1c2bf" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1500656078142-0134c7523b29?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=ece305014cf4d8d522abaa55f0d1c2bf" alt="Wifi data rates"><p>Here are the data rates for 802.11n and 802.11ac for a single spatial stream for 20MHz. 20Mhz BW has 52 subcarriers.</p>
<table class="table table-bordered table-hover table-condensed">
<thead><tr><th title="Field #1"></th>
<th title="Field #2"></th>
<th title="Field #3">MCS</th>
<th title="Field #4">Nb subcarriers</th>
<th title="Field #5">NBits</th>
<th title="Field #6">Coding rate</th>
<th title="Field #7">Symbol duration</th>
<th title="Field #8">Mbps</th>
<th title="Field #9">Symbol duration</th>
<th title="Field #10">Mbps</th>
</tr></thead>
<tbody><tr>
<td>802.11ac/802.11n</td>
<td>BPSK</td>
<td align="right">0</td>
<td align="right">52</td>
<td align="right">1</td>
<td>1/2</td>
<td align="right">4</td>
<td align="right">6.5</td>
<td align="right">3.6</td>
<td align="right">7.2</td>
</tr>
<tr>
<td> </td>
<td>QPSK</td>
<td align="right">1</td>
<td align="right">52</td>
<td align="right">2</td>
<td>1/2</td>
<td align="right">4</td>
<td align="right">13.0</td>
<td align="right">3.6</td>
<td align="right">14.4</td>
</tr>
<tr>
<td> </td>
<td>QPSK</td>
<td align="right">2</td>
<td align="right">52</td>
<td align="right">2</td>
<td>3/4</td>
<td align="right">4</td>
<td align="right">19.5</td>
<td align="right">3.6</td>
<td align="right">21.7</td>
</tr>
<tr>
<td> </td>
<td>16-QAM</td>
<td align="right">3</td>
<td align="right">52</td>
<td align="right">4</td>
<td>1/2</td>
<td align="right">4</td>
<td align="right">26.0</td>
<td align="right">3.6</td>
<td align="right">28.9</td>
</tr>
<tr>
<td> </td>
<td>16-QAM</td>
<td align="right">4</td>
<td align="right">52</td>
<td align="right">4</td>
<td>3/4</td>
<td align="right">4</td>
<td align="right">39.0</td>
<td align="right">3.6</td>
<td align="right">43.3</td>
</tr>
<tr>
<td> </td>
<td>64-QAM</td>
<td align="right">5</td>
<td align="right">52</td>
<td align="right">6</td>
<td>2/3</td>
<td align="right">4</td>
<td align="right">52.0</td>
<td align="right">3.6</td>
<td align="right">57.8</td>
</tr>
<tr>
<td> </td>
<td>64-QAM</td>
<td align="right">6</td>
<td align="right">52</td>
<td align="right">6</td>
<td>3/4</td>
<td align="right">4</td>
<td align="right">58.5</td>
<td align="right">3.6</td>
<td align="right">65.0</td>
</tr>
<tr>
<td> </td>
<td>64-QAM</td>
<td align="right">7</td>
<td align="right">52</td>
<td align="right">6</td>
<td>5/6</td>
<td align="right">4</td>
<td align="right">65.0</td>
<td align="right">3.6</td>
<td align="right">72.2</td>
</tr>
<tr>
<td>802.11ac</td>
<td>256-QAM</td>
<td align="right">8</td>
<td align="right">52</td>
<td align="right">8</td>
<td>3/4</td>
<td align="right">4</td>
<td align="right">78.0</td>
<td align="right">3.6</td>
<td align="right">86.7</td>
</tr>
<tr>
<td> </td>
<td>256-QAM</td>
<td align="right">9</td>
<td align="right">52</td>
<td align="right">8</td>
<td>5/6</td>
<td align="right">4</td>
<td align="right">86.7</td>
<td align="right">3.6</td>
<td align="right">96.3</td>
</tr>
</tbody></table>
<h2 id="maxdataratesfor80211ac">Max data rates for 802.11ac:</h2>
<p>Here's the max data rate based on the different BW.</p>
<table class="table table-bordered table-hover table-condensed">
<thead><tr><th title="Field #1"></th>
<th title="Field #2">MCS</th>
<th title="Field #3">Nb subcarriers</th>
<th title="Field #4">NBits</th>
<th title="Field #5">Coding rate</th>
<th title="Field #6">Symbol duration</th>
<th title="Field #7">Mbps (Nss=1)</th>
<th title="Field #8">Max Mpbs</th>
<th title="Field #9">Nss</th>
</tr></thead>
<tbody><tr>
<td>256-QAM</td>
<td align="right">8</td>
<td align="right">52</td>
<td align="right">8</td>
<td>3/4</td>
<td align="right">3.6</td>
<td align="right">86.7</td>
<td align="right">393.3</td>
<td align="right">8</td>
</tr>
<tr>
<td>256-QAM</td>
<td align="right">9</td>
<td align="right">108</td>
<td align="right">8</td>
<td>5/6</td>
<td align="right">3.6</td>
<td align="right">200.0</td>
<td align="right">1600.0</td>
<td align="right">8</td>
</tr>
<tr>
<td>256-QAM</td>
<td align="right">9</td>
<td align="right">234</td>
<td align="right">8</td>
<td>5/6</td>
<td align="right">3.6</td>
<td align="right">433.3</td>
<td align="right">3466.7</td>
<td align="right">8</td>
</tr>
<tr>
<td>256-QAM</td>
<td align="right">9</td>
<td align="right">468</td>
<td align="right">8</td>
<td>5/6</td>
<td align="right">3.6</td>
<td align="right">866.7</td>
<td align="right">6933.3</td>
<td align="right">8</td>
</tr>
</tbody></table>
<p><a href="http://80211notes.blogspot.com/2013/08/wi-fi-80211-phy-data-rates.html">80211notes blogspot</a></p>
<p><a href="http://chimera.labs.oreilly.com/books/1234000001739/ch02.html#modulation_and_coding_set_mcs">Oreilly 802.11ac Survival Guide</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[Good e-books on wifi]]></title><description><![CDATA[<div class="kg-card-markdown"><p>The IEEE 802.11 specification can be hard to read (since it is very detailed). If you are new to wifi or even if you want to deepen your expertise, here are a few books that will be useful for you.</p>
<h2 id="nextgenerationwireless80211ac">Next generation wireless: 802.11ac</h2>
<p>By no doubt, this</p></div>]]></description><link>http://www.learningiot.com/good-wifi-ebooks/</link><guid isPermaLink="false">59d306f766bef156db1df931</guid><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Tue, 18 Apr 2017 06:48:33 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1470549638415-0a0755be0619?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=05f3f174f1f30bace94199d45d7dd64f" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1470549638415-0a0755be0619?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=05f3f174f1f30bace94199d45d7dd64f" alt="Good e-books on wifi"><p>The IEEE 802.11 specification can be hard to read (since it is very detailed). If you are new to wifi or even if you want to deepen your expertise, here are a few books that will be useful for you.</p>
<h2 id="nextgenerationwireless80211ac">Next generation wireless: 802.11ac</h2>
<p>By no doubt, this is my favorite book on wifi. It is by far the most concise and detailed. The PHY section is very good as it the MAC section and advance features. The author made a good compromise of mixing lot's of details and basic communication theory.</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//ws-na.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=US&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=yumget-20&marketplace=amazon&region=US&placement=1107016762&asins=1107016762&linkId=1beb9297e3ff9d9be7244bb872d241ef&show_border=true&link_opens_in_new_window=true&price_color=333333&title_color=0066c0&bg_color=ffffff">
    </iframe>
<p><a href="http://amzn.to/2pcmB1c">Click here for ebook</a></p>
<h2 id="80211acasurvivalguide">802.11ac : a survival guide</h2>
<p>This is another great resource for wifi. It is a bit more accessible than &quot;Next Generation wireless LANs&quot;. It is geared toward users and network engineers with strong CS background (and less network background).</p>
<iframe style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" src="//ws-na.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=US&source=ac&ref=qf_sp_asin_til&ad_type=product_link&tracking_id=yumget-20&marketplace=amazon&region=US&placement=1449343147&asins=1449343147&linkId=9d53b7600ad82e0c7374de8a8746e71f&show_border=true&link_opens_in_new_window=true&price_color=333333&title_color=0066c0&bg_color=ffffff">
    </iframe>
<p><a href="http://amzn.to/2ptQNVl">Click here for ebook</a></p>
<p><a href="http://chimera.labs.oreilly.com/books/1234000001739/ch02.html#id449471">802.11ac: A survival guide</a></p>
<h2 id="highperformancebrowsernetworking">High performance browser networking</h2>
<p><a href="https://hpbn.co/wifi/">High performance browser networking</a><br>
This book is more about networking than anything else. It has 1 chapter on Wifi and the book is available online.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Best wireless technology for virtual reality (VR)?]]></title><description><![CDATA[<div class="kg-card-markdown"><p>In this post, we will review the different technologies for VR.</p>
<h3 id="vrrequirements">VR Requirements:</h3>
<p>For VR there are 2 key requirements:</p>
<ul>
<li>Latency</li>
<li>Bandwidth</li>
</ul>
<p>Let's look at each of those requirements and estimate which wireless technology makes most sense.</p>
<h2 id="whatisthekillerapp">What is the killer app?</h2>
<p>VR needs a killer app to reach a</p></div>]]></description><link>http://www.learningiot.com/wireless-vr/</link><guid isPermaLink="false">59d306f766bef156db1df92e</guid><category><![CDATA[virtual reality]]></category><category><![CDATA[wireless for VR]]></category><category><![CDATA[virtual reality latency]]></category><category><![CDATA[5G]]></category><category><![CDATA[Wifi]]></category><category><![CDATA[WLAN VR]]></category><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Sun, 16 Apr 2017 21:52:13 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1502185635613-0a5b2e78efea?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=a5f77d1dabf1cc24ab4715f482ecef2f" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1502185635613-0a5b2e78efea?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=a5f77d1dabf1cc24ab4715f482ecef2f" alt="Best wireless technology for virtual reality (VR)?"><p>In this post, we will review the different technologies for VR.</p>
<h3 id="vrrequirements">VR Requirements:</h3>
<p>For VR there are 2 key requirements:</p>
<ul>
<li>Latency</li>
<li>Bandwidth</li>
</ul>
<p>Let's look at each of those requirements and estimate which wireless technology makes most sense.</p>
<h2 id="whatisthekillerapp">What is the killer app?</h2>
<p>VR needs a killer app to reach a significant number of users. If we can have 10M daily user putting on a VR headsets, then we will see the investment in content. Solving the technical issues is crucial for VR to reach such mass-market volumes.</p>
<p>For example, let's say that the VR killer app is being able to share your experience in real-time through Facebook. Imagine you're going to burning man and want to share it to your friends. For such application to work the 2 key requirements will need to be met. Such an application is probably 5-10 years in the future. Most likely we will see an application where the user records the experience and shares it later.</p>
<h4 id="latency">Latency</h4>
<p>To be have a good user experience, VR needs to have low latency. We are talking in the single digit ms (5-10ms).<br>
With Wifi, one of the main issue is CSMA (carrier-sense multiple access). This means Wifi does not have any guarantee of on the latency and receiving a packet in a busy environment could means multiple ms (even up to 100ms)<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
<h4 id="bandwidthbw">Bandwidth (BW)</h4>
<p>The BW required for VR can be quite intensive. For example for 4K, you need about 15-20 Mbps to have a smooth streaming. For VR, this can be even more since you need to support multiple scene, since the user can look anywhere. Even if you use eye-tracking detection to reduce the BW by only rendering the where is user is looking at, you could need up to 50Mbps of streaming.</p>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- middlelearningiot -->
<p><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9897971779109160" data-ad-slot="8561984533" data-ad-format="auto"></ins></p>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<h2 id="wifiisnotidealforvr">Wifi is not ideal for VR</h2>
<p>With these 2 constraints (latency and BW), it looks like wifi is not ideal for VR. This is especially because of the latency constraint.</p>
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Test2 -->
<p><ins class="adsbygoogle" style="display:inline-block;width:336px;height:280px" data-ad-client="ca-pub-9897971779109160" data-ad-slot="2515450930"></ins></p>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<h2 id="herecomes5g">Here comes 5G:</h2>
<p>5G is claimed to be a 1Gbps streaming technology. It also</p>
<p>5G radio latency is supposed to be less than 1ms <sup class="footnote-ref"><a href="#fn1" id="fnref1:1">[1:1]</a></sup><sup class="footnote-ref"><a href="#fn1" id="fnref1:2">[1:2]</a></sup> for URLLC.<br>
<img src="http://www.learningiot.com/content/images/2017/04/Screen-Shot-2017-04-16-at-2-26-54-PM.png" alt="Best wireless technology for virtual reality (VR)?"><br>
This latency is required for tactile internet <sup class="footnote-ref"><a href="#fn1" id="fnref1:3">[1:3]</a></sup>. The real-world BW for 5G should be 100Mbps. This is close to EE LTE max rate, but keep in mind this rate is only achieve if all the stars are aligned.</p>
<p>Please note, that if the killer app is sharing the experience to multiple users, this BW of 100Mbps will likely not be enough.</p>
<h3 id="80211ad">802.11ad:</h3>
<p>Another technology that has potential is 60GHz (mm waves) technologies. The advantage is that the protocol is TDMA (instead of CSMA), so the latency issue can be solved. However, the issue with 60GHz is you need either line of sight or 1 reflection. After that, no luck, the waves are not able to through walls or through your pockets. This works for prototype, but for a fully commercial product with great user experience, this will be hard.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p><a href="https://www.ericsson.com/research-blog/5g/5g-radio-access-for-ultra-reliable-and-low-latency-communications/">Tactile Internet Ericsson </a> <a href="#fnref1" class="footnote-backref">↩︎</a> <a href="#fnref1:1" class="footnote-backref">↩︎</a> <a href="#fnref1:2" class="footnote-backref">↩︎</a> <a href="#fnref1:3" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
</div>]]></content:encoded></item><item><title><![CDATA[Max data rate for wifi]]></title><description><![CDATA[<div class="kg-card-markdown"><p>The short answer is the following :</p>
<p>802.11n : 600Mbps<br>
802.11ac : 6033 Mbps<br>
802.11ax : 9608 Mbps</p>
<p>Note that these are PHY speeds.</p>
<p>PHY speeds is only part of the story, since it can get slowed by the MAC. This is a whole topic in itself, and we will cover</p></div>]]></description><link>http://www.learningiot.com/max-data-rate-for-wifi/</link><guid isPermaLink="false">59d306f766bef156db1df92d</guid><dc:creator><![CDATA[Yann Gagnon]]></dc:creator><pubDate>Fri, 26 Aug 2016 07:21:59 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1495645260813-e4dc8f003a1e?ixlib=rb-0.3.5&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;s=4917f86916a4418e92c40c880e6613b5" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://images.unsplash.com/photo-1495645260813-e4dc8f003a1e?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&s=4917f86916a4418e92c40c880e6613b5" alt="Max data rate for wifi"><p>The short answer is the following :</p>
<p>802.11n : 600Mbps<br>
802.11ac : 6033 Mbps<br>
802.11ax : 9608 Mbps</p>
<p>Note that these are PHY speeds.</p>
<p>PHY speeds is only part of the story, since it can get slowed by the MAC. This is a whole topic in itself, and we will cover this in another blog post.</p>
<p>Also, note that to get the highest throughput, you need to use optional features. So this means even if your router is 802.11ac compliant, it doesn't mean it has all the key features implemented.</p>
<p>For example, in the calculations above, we include 8 spatial streams. We also use a channel bandwidth of 160MHz.</p>
</div>]]></content:encoded></item></channel></rss>