Commit d86df4e6 authored by Arjen Wiersma's avatar Arjen Wiersma

Adding elfeeddb for easy sharing between sites

parent bc70173a

Too many changes to show.

To preserve performance only 805 of 805+ files are displayed.

<div id="rss-wrap">
<div><a name="page-1"></a></div>
<p><a href="http://player.cnevids.com/embed/59151ca0b57ac367f8000023/5511d76261646d5566020000">Resuming an activity in Windows Timeline (video link)</a></p>
<p>SEATTLE—At its annual Build developer conference, Microsoft took the wraps off the next major Windows 10 version, the <a href="https://arstechnica.com/information-technology/2017/05/and-the-name-of-the-next-windows-10-update-is-the-fall-creators-update/">Fall Creators Update</a>, and announced some of its new features.</p>
<p>One of these new features, Timeline, is going to be good when you're using Windows 10—but even better when you're not. Timeline tracks what you're doing—which documents you have in which apps, which e-mails you're writing, what Web pages you have open, that kind of thing—and lets you retrieve that information later.</p>
</div><p><a href="https://arstechnica.com/information-technology/2017/05/timeline-and-cortana-make-windows-better-even-when-youre-not-using-it/#p3">Read 10 remaining paragraphs</a> | <a href="https://arstechnica.com/information-technology/2017/05/timeline-and-cortana-make-windows-better-even-when-youre-not-using-it/?comments=1">Comments</a></p><div class="feedflare">
<a href="http://feeds.arstechnica.com/~ff/arstechnica/index?a=CxFPOCZFOLA:DLs7gEEdcQY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/arstechnica/index?i=CxFPOCZFOLA:DLs7gEEdcQY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.arstechnica.com/~ff/arstechnica/index?a=CxFPOCZFOLA:DLs7gEEdcQY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/arstechnica/index?i=CxFPOCZFOLA:DLs7gEEdcQY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.arstechnica.com/~ff/arstechnica/index?a=CxFPOCZFOLA:DLs7gEEdcQY:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/arstechnica/index?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.arstechnica.com/~ff/arstechnica/index?a=CxFPOCZFOLA:DLs7gEEdcQY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/arstechnica/index?d=yIl2AUoC8zA" border="0"></img></a>
</div>
\ No newline at end of file
In his session at @ThingsExpo, Sudarshan Krishnamurthi, a Senior Manager, Business Strategy, at Cisco Systems, will discuss how IT and operational technology (OT) work together, as opposed to being in separate siloes as once was traditional. Attendees will learn how to fully leverage the power of IoT in their organization by bringing the two sides together and bridging the communication gap. He will also look at what good leadership must entail in order to accomplish this, and how IT managers can be the drivers of change within their organizations. He also will discuss the skill sets needed to ensure that the full power of the IoT can be harnessed.<p><a href="http://java.sys-con.com/node/4009584" target="_blank">read more</a></p>
\ No newline at end of file
<div xmlns='http://www.w3.org/1999/xhtml'><p>Australia’s “Shadow Minister for Justice” is the <a href='https://en.wikipedia.org/wiki/David_Feeney'>representative</a> for the seat of Batman.</p></div>
\ No newline at end of file
<p>Oh hey, I&#8217;m back. Been a while. Today, I want to share with you how I&#8217;m using <strong><a href="https://en.wikipedia.org/wiki/Systemd">systemd</a></strong> to start my Clojure applications on <strong><a href="http://matthiasnehlsen.com">matthiasnehlsen.com</a></strong>, and keep them alive, in case anything should go wrong. These are the applications managed this way:</p>
<ul>
<li><strong><a href="http://birdwatch.matthiasnehlsen.com">BirdWatch</a></strong>, an application for tweet stream analysis, see on <strong><a href="https://github.com/matthiasn/BirdWatch">GitHub</a></strong></li>
<li><strong><a href="http://redux-style.matthiasnehlsen.com/">redux-counter example</a></strong>, a sample application for my Clojure <strong><a href="https://leanpub.com/building-a-system-in-clojure">book</a></strong></li>
<li><strong><a href="http://systems-toolbox.matthiasnehlsen.com/">trailing mouse pointer example</a></strong>, another sample application for the book</li>
<li><strong><a href="http://inspect.matthiasnehlsen.com/">inspect</a></strong>, a demo for my <strong><a href="https://github.com/matthiasn/inspect">inspect library</a></strong>. This is will soon be replaced by a new version making sense of messages passed around in <strong><a href="https://github.com/matthiasn/systems-toolbox">systems-toolbox</a></strong> applications.</li>
</ul>
<!-- more -->
<p>Also, I&#8217;m using systemd to start up <strong><a href="http://sse-chat.matthiasnehlsen.com/">sse-chat</a></strong>, a <strong><a href="">Scala</a></strong> demo application which you can also find on <strong><a href="https://github.com/matthiasn/sse-chat">GitHub</a></strong>. However, this application is only started by systemd, but not restarted when anything goes wrong.</p>
<p>The background for this post is that I recently ordered a new <strong><a href="http://ark.intel.com/products/codename/37572/Skylake#@All">Skylake Intel® Xeon® E3-1275 v5</a></strong> based server at <strong><a href="https://www.hetzner.de/en/">Hetzner</a></strong>, and I felt it was finally time to retire the manual process startup approach I had used before. Servers should be updated as often as possible, but who does that often enough when it takes 10-15 minutes to wait for a reboot and then manually restart the processes? Certainly not me. So instead, all process startup should be automatic. Initially, I considered using <strong><a href="https://www.docker.com/">Docker</a></strong>, but regarding monitoring that the application is alive, and restarting it if not, systemd has the better story to offer. Also, I wasted way too much time on a Docker environment in my last client project, so I&#8217;m a little cured of the snake oil.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>
<p>So what I wanted was restarting the machine and have all services come up automatically. Also, I wanted to use the <strong>watchdog</strong> functionality, which expects the monitored applications to call systemd with a <strong>heartbeat</strong> message and restarts the application if that heartbeat wasn&#8217;t encountered for say 20 seconds or whatever else you define there. You can read all about this mechanism in this <strong><a href="http://0pointer.de/blog/projects/watchdog.html">blog post</a></strong> by one of the original authors of systemd.</p>
<p>While my applications were running rock solid for months in a row until I finally managed to update the server and restart it, it is certainly appealing from an operations perspective to have a mechanism in place that listens for a heartbeat and restarts a process when the heartbeat does not come as expected. So I thought this might be a good opportunity to write a small library that takes care of emitting said heartbeat when an application is monitored by systemd. You can find this library on GitHub <strong><a href="https://github.com/matthiasn/systemd-watchdog">here</a></strong>.</p>
<p>This library also happens to be a sweet opportunity to write a minimal <strong><a href="https://github.com/matthiasn/systems-toolbox">systems-toolbox</a></strong> system, with a scheduler component that emits messages every so often, and then calls systemd via <strong><a href="https://github.com/java-native-access/jna">JNA</a></strong>.</p>
<p>This is the entire library:</p>
<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
</pre></td><td class='code'><pre><code class='clojure'><span class='line'><span class="p">(</span><span class="kd">ns </span><span class="nv">matthiasn.systemd-watchdog.core</span>
</span><span class='line'> <span class="p">(</span><span class="ss">:require</span> <span class="p">[</span><span class="nv">matthiasn.systems-toolbox.switchboard</span> <span class="ss">:as</span> <span class="nv">sb</span><span class="p">]</span>
</span><span class='line'> <span class="p">[</span><span class="nv">matthiasn.systems-toolbox.scheduler</span> <span class="ss">:as</span> <span class="nv">sched</span><span class="p">])</span>
</span><span class='line'> <span class="p">(</span><span class="ss">:import</span> <span class="p">[</span><span class="nv">info.faljse.SDNotify</span> <span class="nv">SDNotify</span><span class="p">]))</span>
</span><span class='line'>
</span><span class='line'><span class="p">(</span><span class="kd">defn </span><span class="nv">start-watchdog!</span>
</span><span class='line'> <span class="s">&quot;Call systemd&#39;s watchdog every so many milliseconds.</span>
</span><span class='line'><span class="s"> Requires the NOTIFY_SOCKET environment variable to be set, otherwise does</span>
</span><span class='line'><span class="s"> nothing. Fires up a minimal systems-toolbox system with two components:</span>
</span><span class='line'><span class="s"> * a scheduler component</span>
</span><span class='line'><span class="s"> * a component notifying systemd.</span>
</span><span class='line'><span class="s"> Then, the scheduler will emit messages every so often, and upon receiving,</span>
</span><span class='line'><span class="s"> the notifying component will call the sendWatchdog function.</span>
</span><span class='line'><span class="s"> Takes the timeout in milliseconds.&quot;</span>
</span><span class='line'> <span class="p">[</span><span class="nv">timeout</span><span class="p">]</span>
</span><span class='line'> <span class="p">(</span><span class="nb">when </span><span class="p">(</span><span class="nb">get </span><span class="p">(</span><span class="nf">System/getenv</span><span class="p">)</span> <span class="s">&quot;NOTIFY_SOCKET&quot;</span><span class="p">)</span>
</span><span class='line'> <span class="p">(</span><span class="nf">sb/send-mult-cmd</span>
</span><span class='line'> <span class="p">(</span><span class="nf">sb/component</span> <span class="ss">:wd/switchboard</span><span class="p">)</span>
</span><span class='line'> <span class="p">[[</span><span class="ss">:cmd/init-comp</span> <span class="p">(</span><span class="nf">sched/cmp-map</span> <span class="ss">:wd/scheduler-cmp</span><span class="p">)]</span>
</span><span class='line'> <span class="p">[</span><span class="ss">:cmd/init-comp</span>
</span><span class='line'> <span class="p">{</span><span class="ss">:cmp-id</span> <span class="ss">:wd/notify-cmp</span>
</span><span class='line'> <span class="ss">:handler-map</span> <span class="p">{</span><span class="ss">:wd/send</span> <span class="p">(</span><span class="k">fn </span><span class="p">[</span><span class="nv">_</span><span class="p">]</span> <span class="p">(</span><span class="nf">SDNotify/sendWatchdog</span><span class="p">))}}]</span>
</span><span class='line'> <span class="p">[</span><span class="ss">:cmd/send</span> <span class="p">{</span><span class="ss">:to</span> <span class="ss">:wd/scheduler-cmp</span>
</span><span class='line'> <span class="ss">:msg</span> <span class="p">[</span><span class="ss">:cmd/schedule-new</span>
</span><span class='line'> <span class="p">{</span><span class="ss">:timeout</span> <span class="nv">timeout</span>
</span><span class='line'> <span class="ss">:message</span> <span class="p">[</span><span class="ss">:wd/send</span><span class="p">]</span>
</span><span class='line'> <span class="ss">:repeat</span> <span class="nv">true</span><span class="p">}]}]</span>
</span></code></pre></td></tr></table></div></figure>
<p>It fires up a <strong>switchboard</strong>, which manages and wires systems, the <code>:wd/notify-cmp</code>, which calls <code>(SDNotify/sendWatchdog)</code> from the <strong><a href="https://github.com/faljse/SDNotify">SDNotify library</a></strong>, and a scheduler component, which emits <code>:wd/send</code> messages every <code>timeout</code> milliseconds. You can build much more complex applications with the <strong>systems-toolbox</strong>, e.g. <strong><a href="http://birdwatch.matthiasnehlsen.com">BirdWatch</a></strong>. The 14 lines above (plus comments and imports) however are about the minimum case when some scheduling is desired.</p>
<p>You can have a look at the mentioned examples if you&#8217;re interested in building systems with the systems-toolbox. In subsequent articles, I will introduce them in detail. For now, you can just use the library in your projects if you want to have your application monitored by systemd. It&#8217;s just a one-liner, as you can see for example in the <strong><a href="https://github.com/matthiasn/systems-toolbox/blob/master/examples/trailing-mouse-pointer/src/clj/example/core.clj#L41">trailing mouse pointer example</a></strong>:</p>
<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='clojure'><span class='line'> <span class="p">(</span><span class="nf">wd/start-watchdog!</span> <span class="mi">5000</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure>
<p>This simple command calls systemd every 5 seconds, but only if the <code>NOTIFY_SOCKET</code> environment variable is set, which would only be the case if systemd had started the application.</p>
<p>Here&#8217;s the service configuration:</p>
<figure class='code'> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class='text'><span class='line'>[Unit]
</span><span class='line'>Description=systems-toolbox websocket latency visualization example
</span><span class='line'>
</span><span class='line'>[Service]
</span><span class='line'>Type=simple
</span><span class='line'>User=bw
</span><span class='line'>Group=bw
</span><span class='line'>Environment=PORT=8010
</span><span class='line'>Environment=HOST=0.0.0.0
</span><span class='line'>WorkingDirectory=/home/bw/run
</span><span class='line'>ExecStart=/usr/bin/java -jar /home/bw/bin/trailing-mouse-pointer.jar
</span><span class='line'>WatchdogSec=20s
</span><span class='line'>Restart=on-failure
</span><span class='line'>
</span><span class='line'># Give a reasonable amount of time for the server to start up/shut down
</span><span class='line'>TimeoutSec=300
</span><span class='line'>
</span><span class='line'>[Install]
</span><span class='line'>WantedBy=multi-user.target
</span></code></pre></td></tr></table></div></figure>
<p>You can find all the service configurations for my server in my **<a href="https://github.com/matthiasn/conf">conf</a> project, together with some install scripts which allow me to set up a new server with little effort. I hope this helps you in your deployments. It certainly helps me with mine.</p>
<p>Would you like to know when there&#8217;s a new article? Subscribe to the <a href="http://eepurl.com/y0HWv" target="_blank"><strong>newsletter</strong></a> and I&#8217;ll let you know.</p>
<p>Cheers,
Matthias</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:1">
<p>There, the problem was that silly Docker service that frequently hung, which, for whatever reason, required a <strong>REBOOT</strong> of the whole machine. As you can imagine, this was very annoying, as that, of course, meant ALL services would become unavailable until the machine was back up.<a href="#fnref:1" rev="footnote">&#8617;</a></p></li>
</ol>
</div>
<p>
Package.el has gotten a series of improvements after the release of 24.4.
Since Ive found that people like to read about upcoming features, Im starting
a new series exclusively about our favorite package manager. Today, we talk
dependencies.
</p>
<p>
Package.els dependency management has always been just enough to do the job
its supposed to do. If you install a package that has dependencies, those
requirements get installed as well. End of story.
</p>
<p>
This leaves a little to be desired for two reasons. Firstly, if you later remove
the first package, the dependencies will be left on your computer. Secondly,
even if you notice those dependencies lying around and want to remove them, you
never know if thats safe because Package.el wont tell you if another package
depends on them and, whats worse, it will let you remove it even if another
installed package does depend on them (which will lead to breakage).
</p>
<p>
The situation is being improved on both accounts, thanks to <a href="https://github.com/thierryvolpiatto">Thierry Volpiatto</a>.
</p>
<ol class="org-ol">
<li>Package.el will differentiate between packages youve installed explicitly
and those which were just pulled along as dependencies. So you get a new
<code>package-autoremove</code> command to cleanup dependencies that are no longer
needed.
</li>
<li>Package.el will never let you remove a package if some other package depends
on it. So youre free to try to delete anything you dont want, and nothing
is going to break if it happens to be a dependency (youll just fail).
</li>
</ol>
<p>
And this led to some UI improvements to the package menu, thanks to yours truly.
</p>
<ol class="org-ol">
<li>Packages that were pulled in as dependencies are marked as such in the
package menu.
</li>
<li>The description buffer (the one you get when hitting <kbd>RET</kbd> on a package) is
now kind enough to list all packages that depend on this one.
</li>
</ol>
<p>
<a href="/images/package-menu-dependencies-1.png"><img src="/images/package-menu-dependencies-1.png" alt="package-menu-dependencies-1.png" /></a>
<a href="/images/package-menu-dependencies-2.png"><img src="/images/package-menu-dependencies-2.png" alt="package-menu-dependencies-2.png" /></a>
</p>
<p>
As a whole, this is a great user experience improvement. Instead of seeing
<code>installed</code> packages that they never actually installed, the user will see
<code>dependency</code> packages. Every once in a while, after removing some package, they
might get notified that <i>these dependencies are no longer necessary</i>, and can
easily clean them up with <code>package-autoremove</code>.
</p>
<p>
If you want more 25.1 news, theres also a <a href="/new-in-emacs-25-1-query-replace-history-is-enhanced-.html">whole series</a> just about that, and you
can always just check out the <a href="/tags-expanded.html#emacs-25">emacs-25</a> tag.</p>
<p><a href="http://endlessparentheses.com/new-in-package-el-in-emacs-25-1-better-dependency-management.html?source=rss#disqus_thread">Comment on this.</a></p>
\ No newline at end of file
<img width="680" height="251" src="https://tctechcrunch2011.files.wordpress.com/2016/12/screen-shot-2016-12-13-at-13-37-53.png?w=680" class="attachment-large size-large wp-post-image" alt="" srcset="https://tctechcrunch2011.files.wordpress.com/2016/12/screen-shot-2016-12-13-at-13-37-53.png?w=680 680w, https://tctechcrunch2011.files.wordpress.com/2016/12/screen-shot-2016-12-13-at-13-37-53.png?w=1358 1358w, https://tctechcrunch2011.files.wordpress.com/2016/12/screen-shot-2016-12-13-at-13-37-53.png?w=150 150w, https://tctechcrunch2011.files.wordpress.com/2016/12/screen-shot-2016-12-13-at-13-37-53.png?w=300 300w, https://tctechcrunch2011.files.wordpress.com/2016/12/screen-shot-2016-12-13-at-13-37-53.png?w=768 768w" sizes="(max-width: 680px) 100vw, 680px" />&nbsp;Improbable, the London startup that has developed a platform for third parties to build vast virtual and simulated worlds, has landed a stratospheric round of funding to double down on its product and expand its ecosystem of developers. The company, which also has offices in San Francisco, has raised $502 million in funding led by SoftBank, with previous investors Andreessen Horowitz and&hellip; <a href="https://techcrunch.com/2017/05/11/improbable-grabs-502m-led-by-softbank-at-a-1b-valuation-for-its-virtual-world-spatial-os/?ncid=rss">Read More</a><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Techcrunch?a=nOZqu5FbKsI:Y9pXuQiwCmg:2mJPEYqXBVI"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=2mJPEYqXBVI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=nOZqu5FbKsI:Y9pXuQiwCmg:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=nOZqu5FbKsI:Y9pXuQiwCmg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=nOZqu5FbKsI:Y9pXuQiwCmg:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Techcrunch?i=nOZqu5FbKsI:Y9pXuQiwCmg:-BTjWOF_DHI" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=nOZqu5FbKsI:Y9pXuQiwCmg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Techcrunch?i=nOZqu5FbKsI:Y9pXuQiwCmg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Techcrunch?a=nOZqu5FbKsI:Y9pXuQiwCmg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Techcrunch?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Techcrunch/~4/nOZqu5FbKsI" height="1" width="1" alt=""/>
\ No newline at end of file
<p>BlackBerry CEO John Chen insists that he has put in place much-needed changes that will help turn around the struggling phone maker.</p>
<p><a href="http://allthingsd.com/files/2013/12/john-chen-BlackBerry.jpeg"><img src="http://allthingsd.com/files/2013/12/john-chen-BlackBerry-380x253.jpeg" alt="john chen BlackBerry" width="380" height="253" class="alignright size-medium wp-image-382113" /></a></p>
<p>&#8220;It was important to make swift and impactful changes to ensure that our customers&#8217; investments in BlackBerry&#8217;s infrastructure and solutions are secure,&#8221; <a href="http://www.cnbc.com/id/101300396?CPID=SOC_B_WW_LI1388409448#">Chen wrote in an op-ed for CNBC</a> that posted on Monday. </p>
<p>Chen has made some key changes, most notably outsourcing a chunk of device manufacturing to Foxconn and reorganizing the company around a few key areas, including services for businesses, the BBM messaging product, the handset business and the world of non-phone devices that use the QNX operating system BlackBerry acquired a couple years back.</p>
<p>He&#8217;s also <a href="http://www.cnbc.com/id/101289411">committed the company to being profitable by fiscal 2016</a>, canceled some planned products and spiked plans for a major customer conference for 2014.</p>
<p>However, the bigger challenges remain those that BlackBerry has faced for several years now. While some BlackBerry-dependent businesses have remained loyal, many other corporations have opened up to iPhones and Android. Meanwhile, demand for new BlackBerry 10 phones has been anemic, leading BlackBerry to take huge charges reflecting the large volumes of unsold inventory for those products.</p>
<p>In his piece, Chen points out that BlackBerry remains the leader in the business of managing mobile devices, larger than upstarts Mobile Iron, Good and AirWatch combined.</p>
<p>&#8220;When it comes to enterprise, we&#8217;re still the leader,&#8221; Chen said. &#8220;Don&#8217;t be fooled by the competition&#8217;s rhetoric claiming to be more secure or having more experience than BlackBerry.&#8221;</p>
<p>Again, that&#8217;s true, but much of BlackBerry&#8217;s strength is tied to its past, with plenty of stock brokers and government workers carrying around devices running the older BlackBerry operating system (and many of those also carry an iPhone or Android for their personal stuff.)</p>
<p>BlackBerry has made some moves to transition its server software to manage those rival devices, in addition to BlackBerry phones. It has also, for the first time, allowed BBM to run on non-BlackBerry devices.</p>
<p>Chen also promised to continue to use QNX, which BlackBerry bought to form the basis of BB10, for non-phone devices.</p>
<p>&#8220;Already the dominant machine-to-machine technology of the automotive industry, new capabilities and cloud services are being unveiled at CES in January, and we&#8217;re looking toward adjacent verticals for expansion,&#8221; Chen said. There QNX is ahead of rivals, but faces increasing competition as Apple lands automakers for its <a href="http://allthingsd.com/20130610/live-apple-talks-the-future-of-ios-os-x-at-developer-conference/">iOS in the Car</a> initiative and <a href="http://online.wsj.com/news/articles/SB10001424052702304591604579288670734733740">Google is reportedly aiming to do something similar with Android</a>.</p>
<h2 id="v0440httpsgithubcomfacebookreactnativereleasestagv0440ongithubnpmhttpswwwnpmjscompackagereactnative"><a href="https://github.com/facebook/react-native/releases/tag/v0.44.0">v0.44.0</a> on GitHub (<a href="https://www.npmjs.com/package/react-native">npm</a>)</h2>
<hr>
<p>This is April 2017 release, also known as <code>v0.44.0</code>.</p>