<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Programming on CyberSpy</title>
    <link>https://cyberspy.io/categories/programming/</link>
    <description>Recent content in Programming on CyberSpy</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sun, 05 Dec 2021 12:26:21 -0400</lastBuildDate>
    <atom:link href="https://cyberspy.io/categories/programming/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>NFC Tagboard - Using NFC Tags, Grafana, and Docker</title>
      <link>https://cyberspy.io/articles/nfctag/</link>
      <pubDate>Sun, 05 Dec 2021 12:26:21 -0400</pubDate>
      <guid>https://cyberspy.io/articles/nfctag/</guid>
      <description>&lt;h2 id=&#34;nfc-tags---tracking--tasks-last-completed&#34;&gt;NFC Tags - Tracking  tasks last completed&lt;/h2&gt;&#xA;&lt;p&gt;Trying to track when you last completed a long-dated task can be challenging. Writing them on a calendar makes for difficult searching. Heavy apps are overkill. So what&amp;rsquo;s a person to do? A simple soltution - use NFC tags which are pre-loaded with custom JSON, drop a little golang server, and Docker persistance with MySQL, along with a Grafana UI to easily manage tracking of tasks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I&#39;m Back!!! Diving into Rust!</title>
      <link>https://cyberspy.io/articles/imback/</link>
      <pubDate>Mon, 26 Apr 2021 12:26:21 -0400</pubDate>
      <guid>https://cyberspy.io/articles/imback/</guid>
      <description>&lt;h2 id=&#34;noobie-to-rust-lets-get-started&#34;&gt;Noobie to Rust? Let&amp;rsquo;s get started!!&lt;/h2&gt;&#xA;&lt;p&gt;So you want to get into &lt;a href=&#34;https://www.rust-lang.org&#34;&gt;rust&lt;/a&gt;? Sure, why not. Let&amp;rsquo;s do it.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-setup&#34;&gt;The setup&lt;/h3&gt;&#xA;&lt;p&gt;Assuming you&amp;rsquo;re on a &lt;a href=&#34;https://apple.com&#34;&gt;Mac&lt;/a&gt;, let&amp;rsquo;s get &lt;strong&gt;rust&lt;/strong&gt; up and running so you&amp;rsquo;re ready to rip into learning the language. We&amp;rsquo;ll use &lt;a href=&#34;https://rustup.rs&#34;&gt;rustup&lt;/a&gt; to install rust. This is the best way to manage your rust environment and toolchain. Not only can you manage toolchains using &lt;code&gt;rustup&lt;/code&gt;, but also add-in components to make the experience a lot more enjoyable. More on that later. Not only will &lt;code&gt;rustup&lt;/code&gt; install rust for you, but it will also be useful for maintaining the latest versions of rust. Rust has several toolchains, and using &lt;code&gt;rustup&lt;/code&gt; will make maintaining them a whole lot easier.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting func(y) with Channels</title>
      <link>https://cyberspy.io/code/channelfuncs/</link>
      <pubDate>Tue, 10 Dec 2019 09:55:44 -0500</pubDate>
      <guid>https://cyberspy.io/code/channelfuncs/</guid>
      <description>&lt;h2 id=&#34;heres-a-little-golang-puzzle&#34;&gt;Here&amp;rsquo;s a little golang puzzle&lt;/h2&gt;&#xA;&lt;p&gt;Take a look at the function below that computes a mystery value for the function $f(x)$. Any idea what the function is? Take a close look at the first line where we create a channel. Notice that the channel isn&amp;rsquo;t some boring &lt;code&gt;int&lt;/code&gt; or &lt;code&gt;string&lt;/code&gt; channel. No, this is a channel of type &lt;code&gt;func(int, chan int, chan bool)&lt;/code&gt;. Wait what??? That&amp;rsquo;s right, this channel takes a function that takes an integer and two channels as function parameters. We define such a function, &lt;code&gt;x&lt;/code&gt;, right aftewards.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Baby it&#39;s Cold Outside -- How Cold? Use an SHT31 and See!</title>
      <link>https://cyberspy.io/articles/babyitscold/</link>
      <pubDate>Tue, 29 Jan 2019 11:42:17 -0500</pubDate>
      <guid>https://cyberspy.io/articles/babyitscold/</guid>
      <description>&lt;h1 id=&#34;esp32-and-sht31-temperature-and-humidity-sensor-secure-web-server&#34;&gt;ESP32 and SHT31 Temperature and Humidity Sensor Secure Web Server&lt;/h1&gt;&#xA;&lt;p&gt;In this blog post, I follow-up on the ESP32-IDF development and demonstrate how to incorporate an &lt;a href=&#34;https://i2c.info&#34;&gt;i2c&lt;/a&gt; device to measure the temperature and humidity. Specifically the &lt;a href=&#34;http://www.mouser.com/ds/2/682/Sensirion_Humidity_Sensors_SHT3x_Datasheet_digital-971521.pdf&#34;&gt;SHT31&lt;/a&gt;.  First, let&amp;rsquo;s do it plain-jane vanilla. We&amp;rsquo;ll incorporate the i2c device and simply display the measurements to the serial terminal through the uart. Next, we&amp;rsquo;ll make it more practical and send the data over the wifi network to a service that makes it convenient to visualize the time-series data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Program the Esp32 with ESP-IDF on Mac OS X</title>
      <link>https://cyberspy.io/articles/esp32-on-osx/</link>
      <pubDate>Wed, 23 Jan 2019 22:11:25 -0500</pubDate>
      <guid>https://cyberspy.io/articles/esp32-on-osx/</guid>
      <description>&lt;h2 id=&#34;programming-the-esp32-on-your-mac&#34;&gt;Programming the ESP32 on your Mac!&lt;/h2&gt;&#xA;&lt;p&gt;Go out and buy yourself a cheap little &lt;a href=&#34;https://www.espressif.com/en&#34;&gt;ESP32 SoC&lt;/a&gt; and follow these basic instructions to setup your development environment on your Mac. If you want to do some advanced C-programming to control your ESP32, this is for you. If you&amp;rsquo;d rather use &lt;a href=&#34;https://www.arduino.cc&#34;&gt;Arduino&lt;/a&gt; and play with simple sketches then this is not for you &amp;ndash; google how to use Arduino and off you go!&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-you-will-need&#34;&gt;What you will need&lt;/h2&gt;&#xA;&lt;p&gt;So, of course you&amp;rsquo;ll need an ESP32 SoC development board. I recommend the &lt;a href=&#34;https://www.sparkfun.com/products/13907&#34;&gt;SparkFun Thing&lt;/a&gt;. Lots of other choices, but this blog post will address some of the specific configuration considerations that you&amp;rsquo;ll need to be aware of when you select this particular device.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Julia Intro</title>
      <link>https://cyberspy.io/articles/julia-intro/</link>
      <pubDate>Wed, 07 Nov 2018 15:11:45 -0500</pubDate>
      <guid>https://cyberspy.io/articles/julia-intro/</guid>
      <description>&lt;h1 id=&#34;juliaet-wherefore-art-thou&#34;&gt;Julia&lt;del&gt;et&lt;/del&gt;, Wherefore art thou?&lt;/h1&gt;&#xA;&lt;p&gt;As Yoda once said&amp;hellip;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt; YAPL - yet another programming language. Learn something new, you must.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;why-learn-julia&#34;&gt;Why Learn Julia?&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://julialang.org&#34;&gt;Julia&lt;/a&gt; was designed from the beginning for high performance. Julia programs compile to efficient native code for multiple platforms via &lt;a href=&#34;https://llvm.org&#34;&gt;LLVM&lt;/a&gt;. As such, it&amp;rsquo;s an interesting programming language to take a look at as it&amp;rsquo;s a serious contender for certain classes of programming problems; most notibly, scientific and data-centric analysis.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making some Noise - Teensy, TGA-Pro, and MIDI</title>
      <link>https://cyberspy.io/articles/teensy-tgapro-midi/</link>
      <pubDate>Fri, 04 May 2018 10:34:07 -0400</pubDate>
      <guid>https://cyberspy.io/articles/teensy-tgapro-midi/</guid>
      <description>&lt;h2 id=&#34;making-some-noise-and-maybe-even-music&#34;&gt;Making Some Noise (and maybe even Music)!&lt;/h2&gt;&#xA;&lt;p&gt;In this blog post, I&amp;rsquo;ll share my experiences using the &lt;a href=&#34;https://www.pjrc.com/store/teensy36.html&#34;&gt;Teensy&lt;/a&gt; and &lt;a href=&#34;https://www.tindie.com/products/Blackaddr/arduino-teensy-guitar-audio-shield/&#34;&gt;TGA-Pro Guitar Audio Shield&lt;/a&gt; to process audio - both using an audio processing codec as well as MIDI. I&amp;rsquo;ve also included the Yamaha UX16 USB-to-MIDI controller to aid in patching my MIDI channels into the inputs of the Guitar Audio shield.&lt;/p&gt;&#xA;&lt;h3 id=&#34;teensy---yet-antother-cheap-usb-ucontroller-board&#34;&gt;Teensy - Yet antother cheap USB uController board.&lt;/h3&gt;&#xA;&lt;p&gt;At the hear of this project is the Teensy 3.6 USB Microcontroller development board. This sub-$30 board is a feature-rich micro-controller using the Cortex M4, floating-point unit, digital and analog pins, and lots of communication protocols (USB, i2C, SPI, Serial, Ethernet). What makes this little USB-attached board so useful are the accompanying software elements:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pathocaml - Getting Wacky with Functions And Polymorphism</title>
      <link>https://cyberspy.io/code/pathocaml/</link>
      <pubDate>Mon, 19 Mar 2018 20:21:13 -0400</pubDate>
      <guid>https://cyberspy.io/code/pathocaml/</guid>
      <description>&lt;h3 id=&#34;ocaml-on-the-fringes---you-can-do-that&#34;&gt;OCaml on the Fringes - You &lt;em&gt;can&lt;/em&gt; do that??&lt;/h3&gt;&#xA;&lt;p&gt;So, I got bored this afternoon and was contemplating why I was enjoying diving into OCaml more than say Elixir/Erlang for functional programming. The quality of the language that&amp;rsquo;s most captured my attention is the type system.&lt;/p&gt;&#xA;&lt;p&gt;When you start playing around with the type system in OCaml you can go from some basic definitions of user-defined types to some pretty cool looking constructs. Let&amp;rsquo;s start of with something pretty transparent and move into something that might actually melt your brain.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OCaml OpenGL - Get into Gear!</title>
      <link>https://cyberspy.io/articles/ocamlopengl/</link>
      <pubDate>Tue, 13 Mar 2018 14:41:15 -0400</pubDate>
      <guid>https://cyberspy.io/articles/ocamlopengl/</guid>
      <description>&lt;h2 id=&#34;ocaml-and-opengl---getting-our-functional-programming-into-gear&#34;&gt;OCaml and OpenGL - Getting our Functional Programming into Gear!&lt;/h2&gt;&#xA;&lt;p&gt;In my blog post for this day, I thought I&amp;rsquo;d take a look at the OCaml OpenGL library, &lt;a href=&#34;https://opam.ocaml.org/packages/lablgl/lablgl.1.05/&#34;&gt;lablgl&lt;/a&gt;. If you&amp;rsquo;re not already familair with openGL, I strongly suggest that you take a look at one of the tutorials available online. One that I found to be very informative; although written in &lt;strong&gt;c++&lt;/strong&gt;, is &lt;a href=&#34;http://www.opengl-tutorial.org&#34;&gt;opengl-tutorial&lt;/a&gt;. Nonetheless, in this post, we&amp;rsquo;ll look at some simple, and not so simple examples written in OCaml. But before we can do that, we need to install the requisite &lt;strong&gt;opam&lt;/strong&gt; dependencies. To install &lt;code&gt;lablgl&lt;/code&gt;, simply:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exercism - Get your Code Deamons Out! Heal Your Body!</title>
      <link>https://cyberspy.io/code/exercism/</link>
      <pubDate>Wed, 28 Feb 2018 15:12:36 -0500</pubDate>
      <guid>https://cyberspy.io/code/exercism/</guid>
      <description>&lt;h2 id=&#34;exercism&#34;&gt;Exercis(m)&lt;/h2&gt;&#xA;&lt;p&gt;The best way to keep the mind, body, and soul sharp is to &lt;strong&gt;exercise&lt;/strong&gt;! No better way to learn new programming paradigms than following this same precept when learning new concepts in an unfamiliar programming language. There are several sites online that afford noobs practice problems - &lt;a href=&#34;https://www.hackerrank.com&#34;&gt;Hackerrank&lt;/a&gt;, &lt;a href=&#34;https://www.kaggle.com&#34;&gt;kaggle&lt;/a&gt; to name a few. But one that I recently  came across, &lt;a href=&#34;http://exercism.io&#34;&gt;exercism.io&lt;/a&gt;, aims to provide not just programming exercises, but a community of folks committed to commenting and sharing both code and criticism on implementations to problem sets across many languages.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Riding the Camel Deeper into the Desert of Code: Records and Variants</title>
      <link>https://cyberspy.io/articles/ocaml-rec-var/</link>
      <pubDate>Sun, 11 Feb 2018 12:41:10 -0500</pubDate>
      <guid>https://cyberspy.io/articles/ocaml-rec-var/</guid>
      <description>&lt;h3 id=&#34;extending-and-encapsulating-data---records-and-variants&#34;&gt;Extending and Encapsulating Data - Records and Variants&lt;/h3&gt;&#xA;&lt;p&gt;Up next on our tour of OCaml are &lt;strong&gt;records&lt;/strong&gt; and &lt;strong&gt;variants&lt;/strong&gt;. If you are familiar with &lt;code&gt;typedef&lt;/code&gt;, &lt;code&gt;struct&lt;/code&gt;, and &lt;code&gt;union&lt;/code&gt; in &lt;strong&gt;c/c++&lt;/strong&gt;, you&amp;rsquo;ll quickly come to understand how to use records and variants in OCaml. We&amp;rsquo;ll start off looking at records, how to define them, use them in functions, and automatically generate common functions from our type definitions. There&amp;rsquo;s more to the eye than what you get in a language like &lt;strong&gt;c&lt;/strong&gt;, so pay close attention as we move through the descriptions below. We&amp;rsquo;ll break it down one at a time so you&amp;rsquo;ll have no problems!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;s Get Funky with the Camel</title>
      <link>https://cyberspy.io/articles/ocaml-func/</link>
      <pubDate>Fri, 09 Feb 2018 16:17:20 -0500</pubDate>
      <guid>https://cyberspy.io/articles/ocaml-func/</guid>
      <description>&lt;h2 id=&#34;how-many-ways-can-we-get-funky&#34;&gt;How many ways can we get Fun(ky)&lt;/h2&gt;&#xA;&lt;p&gt;In any programming paradigm, it&amp;rsquo;s critical to understand how we write functions - be they traditional imperative , anonymous , recursive, or functional. In this post, I will break down the different types of functions that you can write in &lt;strong&gt;OCaml&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s start by examining the imperative function. Here&amp;rsquo;s a simple function that prints out the phrase &lt;em&gt;Hello World!&lt;/em&gt; $n$ times, once on each line, and returns the value $n$ as its result.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OCaml Hello World and more</title>
      <link>https://cyberspy.io/articles/ocaml-hw/</link>
      <pubDate>Tue, 06 Feb 2018 11:28:00 -0500</pubDate>
      <guid>https://cyberspy.io/articles/ocaml-hw/</guid>
      <description>&lt;h3 id=&#34;well-hello-there&#34;&gt;Well Hello There!&lt;/h3&gt;&#xA;&lt;p&gt;As tradition has it, every new programming language experience must begin with the basic &lt;em&gt;Hello World&lt;/em&gt;. Let&amp;rsquo;s walk the the basics of how to set up our development environment specifically for OCaml and demonstrate how to compile our basic program.&lt;/p&gt;&#xA;&lt;h3 id=&#34;warming-up-our-environment&#34;&gt;Warming up our Environment&lt;/h3&gt;&#xA;&lt;p&gt;Of course we could just use our vanilla editor to enter our OCaml programs, but a more efficient work environment leverages an extensible editor that is &lt;em&gt;aware&lt;/em&gt; of our programming language. Editors like &lt;a href=&#34;*&#34;&gt;sublime&lt;/a&gt;, &lt;a href=&#34;*&#34;&gt;Atom&lt;/a&gt;, and &lt;a href=&#34;*&#34;&gt;Visual Studio Code&lt;/a&gt; are some of the more popular selections. &lt;a href=&#34;*&#34;&gt;Vim&lt;/a&gt; and &lt;a href=&#34;*&#34;&gt;Emacs&lt;/a&gt; are also options, but the new tools tend to support vi/emacs style editing while offering more extensive and expansive features.&lt;/p&gt;</description>
    </item>
    <item>
      <title>OCaml Intro: You can have it all: Object-Oriented, Imperative, and Functional</title>
      <link>https://cyberspy.io/articles/ocaml-intro/</link>
      <pubDate>Thu, 01 Feb 2018 11:27:47 -0500</pubDate>
      <guid>https://cyberspy.io/articles/ocaml-intro/</guid>
      <description>&lt;h2 id=&#34;yapl&#34;&gt;YAPL&lt;/h2&gt;&#xA;&lt;p&gt;So why take the time to delve into yet another programming language? I find at worst, one can expands one&amp;rsquo;s knowledge of existing programming paradigms by studying the language design choices of other languages not used on a daily-basis. Best case, one discovers a new language that is rich in expression and productivity; thereby refining the productivity of the user.&lt;/p&gt;&#xA;&lt;h3 id=&#34;ocaml&#34;&gt;&lt;a href=&#34;https://OCaml.org&#34;&gt;OCaml&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;So, I tripped over this programming language in a rather random and circuitous path. I was watching a super-cool video visualizing how the &lt;a href=&#34;https://www.youtube.com/watch?v=spUNpyF58BY&#34;&gt;Fourier Transform integral&lt;/a&gt; is constructed (by &lt;a href=&#34;https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw&#34;&gt;3Blue1Brown&lt;/a&gt;). At the end of the video, the sponsor was a well-known, prestigious wall-street boutique, &lt;a href=&#34;https://OCaml.org/docs/cheat_sheets.html&#34;&gt;Jane Street&lt;/a&gt;, famous for hiring the best of the best in mathematics and computer science. So, naturally, I thought I&amp;rsquo;d take a closer peek at their website and discovered that they were big sponsors in OCaml as it underlies their trading and production environments. And down the rabbit hole I went.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pothos - A New Take on Data-Flow Frameworks</title>
      <link>https://cyberspy.io/articles/pothossdr/</link>
      <pubDate>Wed, 17 Jan 2018 11:13:11 -0500</pubDate>
      <guid>https://cyberspy.io/articles/pothossdr/</guid>
      <description>&lt;h3 id=&#34;data-flows-like-a-river&#34;&gt;Data-Flows&amp;hellip; &lt;em&gt;like a river&lt;/em&gt;&lt;/h3&gt;&#xA;&lt;p&gt;In today&amp;rsquo;s post, I thought I&amp;rsquo;d take a look at and discuss the &lt;a href=&#34;https://github.com/pothosware/PothosCore/wiki&#34;&gt;Pothos&lt;/a&gt; toolkit, a work-flow tool that improves upon the design principles of &lt;a href=&#34;https://www.gnuradio.org&#34;&gt;gnuradio&lt;/a&gt; and enables real-time data-flow processes for real-time applications.&lt;/p&gt;&#xA;&lt;p&gt;Using a MacBook Pro, an &lt;a href=&#34;https://www.ettus.com/product/details/UN210-KIT&#34;&gt;ettus N210&lt;/a&gt; SDR, and an FM-antenna, I&amp;rsquo;ll show how easy it is to build an FM Receiver to listen to your favorite radio stations on your laptop. While it&amp;rsquo;s an expensive way to tune in to your local DJ, it&amp;rsquo;s a great demonstration of how to use this great kit (written by &lt;a href=&#34;http://www.joshknows.com&#34;&gt;Josh Blum&lt;/a&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crypto 101: A Brief Tour of Practical Crypto in Golang</title>
      <link>https://cyberspy.io/articles/crypto101/</link>
      <pubDate>Thu, 14 Dec 2017 10:38:41 -0500</pubDate>
      <guid>https://cyberspy.io/articles/crypto101/</guid>
      <description>&lt;h2 id=&#34;crypto-101&#34;&gt;Crypto 101:&lt;/h2&gt;&#xA;&lt;p&gt;Golang offers a rich collection of packages supporting cryptographic operations. From a beginner&amp;rsquo;s perspective, maybe too many offerings! I offer up an overview of what&amp;rsquo;s available and an introduction to some practical uses of cryptography in Golang. Implementation details are always critical when discussing crypto. We&amp;rsquo;ll discuss some general implications of making poor choices and how such choices can completely undermine any uses of these tools.&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-in-the-box&#34;&gt;What&amp;rsquo; in the box?&lt;/h3&gt;&#xA;&lt;p&gt;The top-level &lt;code&gt;crypto&lt;/code&gt; package is comprised of a little over a dozen sub-packages that offer:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Channel Your Inner Gopher</title>
      <link>https://cyberspy.io/articles/channelyourgopher/</link>
      <pubDate>Wed, 13 Dec 2017 11:44:07 -0500</pubDate>
      <guid>https://cyberspy.io/articles/channelyourgopher/</guid>
      <description>&lt;h3 id=&#34;channeling-your-inner-gopher---literally-reflecting-upon-channels&#34;&gt;Channeling your Inner Gopher - (Literally) Reflecting upon Channels&lt;/h3&gt;&#xA;&lt;p&gt;Many gophers are likely familiar with the communication paradigm, &lt;em&gt;channels&lt;/em&gt;. An elegant solution to communicate (uni or bidirectionally) typed information among go-routines. In it&amp;rsquo;s simplest form, we declare as type-valued channel variable, &lt;strong&gt;make&lt;/strong&gt; it, and then send and receive data through it. Easy enough!&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;simpleChan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; = make(&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#75715e&#34;&gt;// send important data to the channel&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;42&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                close(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }(&lt;span style=&#34;color:#a6e22e&#34;&gt;simpleChan&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;// receive data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;num&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;simpleChan&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;got %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;num&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In our trivial example above, we create an &lt;code&gt;chan int&lt;/code&gt; typed-channel and initialize it using &lt;code&gt;make&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Once Upon a Reflection: Looking Deeper into Golang reflection</title>
      <link>https://cyberspy.io/articles/reflectinggo/</link>
      <pubDate>Mon, 04 Dec 2017 17:36:31 -0500</pubDate>
      <guid>https://cyberspy.io/articles/reflectinggo/</guid>
      <description>&lt;h3 id=&#34;i-often-reflect-upon-my-code&#34;&gt;I often &lt;em&gt;reflect&lt;/em&gt; upon my code&amp;hellip;&lt;/h3&gt;&#xA;&lt;p&gt;One of the coolest features of the Golang programming language is the &lt;a href=&#34;https://golang.org/pkg/reflect/&#34;&gt;reflect package&lt;/a&gt;. As the package documentation states at the onset of the package:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Package reflect implements run-time reflection, allowing a program to manipulate objects with arbitrary types. The typical use is to take a value with static type interface{} and extract its dynamic type information by calling TypeOf, which returns a Type.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;On the surface, that all sounds pretty straight-forward. But when you start to think about the types of objects (literally) that you might reflect upon, things can get interesting pretty quickly. It&amp;rsquo;s one thing to dynamically get the type of an object like an &lt;code&gt;Int&lt;/code&gt;, and then extract it&amp;rsquo;s value. But what about dynamically getting access to Methods inside a &lt;code&gt;struct&lt;/code&gt; and then calling it with values created dynamically from an a-priori signature, returning values and extracting those values programatically? Rather quickly, the power of reflection can become overwhelming and even confusion. Moreover, appropriate use-cases of reflection should be well thought out so that we aren&amp;rsquo;t simply&#xA;getting too clever for our own good.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Get Interfaced: Enums in Golang</title>
      <link>https://cyberspy.io/code/gogetinterfaces/</link>
      <pubDate>Sat, 02 Dec 2017 09:38:42 -0500</pubDate>
      <guid>https://cyberspy.io/code/gogetinterfaces/</guid>
      <description>&lt;h3 id=&#34;golang-interfaces-and-enums&#34;&gt;Golang, Interfaces, and Enums&lt;/h3&gt;&#xA;&lt;p&gt;So here&amp;rsquo;s a nice golang idiom that I ran across years ago that I found generally useful. Golang, unlike languages like &lt;strong&gt;c&lt;/strong&gt; doesn&amp;rsquo;t natively support enumerations. Instead, constants typically are used when creating a list of enumerations. But, go is a strongly-typed language, so we can do better than simply using constants - we can &lt;em&gt;type&lt;/em&gt; our enumeration with the use of a &lt;code&gt;type&lt;/code&gt; declaration.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DogState&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uint&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By defining a type for our enumeration, we can consistently pass and return typed-values among our functions operating on our enumeration. Okay, that&amp;rsquo;s all well and good, but what happens when we want to go between &lt;code&gt;uint&lt;/code&gt; values and &lt;code&gt;string&lt;/code&gt; representations of those values; a commonly used paradigm when working with enumerations. One approach would have us write mapping functions that might &lt;code&gt;switch&lt;/code&gt; among the values to return a &lt;code&gt;string&lt;/code&gt;. Or, when going from a &lt;code&gt;string&lt;/code&gt; name of an enumeration to the &lt;code&gt;uint&lt;/code&gt; value, we might use a &lt;code&gt;map[string]&lt;/code&gt;. That&amp;rsquo;s a doable implementation, but there&amp;rsquo;s an easier, and more idiomatic way.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gogo</title>
      <link>https://cyberspy.io/code/gogo/</link>
      <pubDate>Wed, 29 Nov 2017 20:57:33 -0500</pubDate>
      <guid>https://cyberspy.io/code/gogo/</guid>
      <description>&lt;h3 id=&#34;here-we-gogo&#34;&gt;Here we &lt;em&gt;gogo!&lt;/em&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Years ago, I wrote an interesting article that I thought might be worth re-posting (and revising) here on my blog. For a while&#xA;I got into programming in &lt;a href=&#34;https://golang.org&#34;&gt;golang&lt;/a&gt; and in the early going (pun-alert!), there were a lot of idioms that were not well understood by a &lt;em&gt;noob&lt;/em&gt;. One of those paradigms was &lt;em&gt;channels, go-routines, and signals&lt;/em&gt; used simultaneously. Taken separately, they are more easily understood. But when taken together, there can be some confusion. In this article, I address how to properly establish a signal-handler and a channel to terminate go-routines when the user interrupts the program with a signal such as &lt;code&gt;ctrl-c&lt;/code&gt; or &lt;code&gt;kill(1)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Recursion Revisited</title>
      <link>https://cyberspy.io/code/recursion/</link>
      <pubDate>Tue, 28 Nov 2017 15:23:02 -0500</pubDate>
      <guid>https://cyberspy.io/code/recursion/</guid>
      <description>&lt;h3 id=&#34;recursion-from-more-than-one-point-of-view&#34;&gt;Recursion, from more than one point-of-view.&lt;/h3&gt;&#xA;&lt;p&gt;A common programming idiom in computer science is solving a problem by self-reference, also known as recursion. In this post, we look at two different&#xA;implementations of the same problem.&lt;/p&gt;&#xA;&lt;h4 id=&#34;solve-a-recursive-problem-in-two-different-programming-language-paradigms&#34;&gt;Solve a recursive problem in two different programming language paradigms&lt;/h4&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s look at the solution to a simple problem, compute $f(x)=e^{x}$.&lt;/p&gt;&#xA;&lt;p&gt;We will illustrate two separate solutions - one in a procedural language (python), and the other in a functional language (elixir).&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s start off with the functional language. Were does recursion come into play?&lt;/p&gt;&#xA;&lt;p&gt;We define the function $f(x)=e^x$ as the infinite sum,  $\text{ }f(x) = \sum_{n=0}^\infty{\frac{x^n}{n!}}$&lt;/p&gt;&#xA;&lt;p&gt;In our solution below, we define two separate recursive functions, &lt;code&gt;exp/2&lt;/code&gt; and &lt;code&gt;fac/1&lt;/code&gt;. What&amp;rsquo;s interesting to note here is how each of these functions has two separate definitions. This is an aspect of programming in elixir that elegantly uses pattern-matching to return different results depending upon the input. Our two functions nicely dovetail into the base-case and recursive case of a recursive algorithm.&lt;/p&gt;&#xA;&lt;p&gt;For example, looking at &lt;code&gt;exp/2&lt;/code&gt;, the first function definition returns 1 for any value of x (as indicated by the &lt;code&gt;_&lt;/code&gt; preceding the variable) and returns 1. This is the mathematical equivalent of $x^0=1\text{ for any }x$.&lt;/p&gt;&#xA;&lt;p&gt;The second definition of &lt;code&gt;exp/2&lt;/code&gt; is the recursive case. for any value of $n\gt0$. Moreover, we define &lt;code&gt;exp(x, n)&lt;/code&gt; as $\frac{e^x}{n!}$ + &lt;code&gt;exp(x, n-1)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Similarly for the definition of &lt;code&gt;fac/1&lt;/code&gt; we see two definitions; one for $n=0$ and another for all values of $n\gt0$.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Brew up some Elixir recursion</title>
      <link>https://cyberspy.io/articles/2017-11-17t220309-0500--brew-up-some-elixir-recursion/</link>
      <pubDate>Fri, 17 Nov 2017 22:03:09 -0500</pubDate>
      <guid>https://cyberspy.io/articles/2017-11-17t220309-0500--brew-up-some-elixir-recursion/</guid>
      <description>&lt;h3 id=&#34;recursion-is-recursion-is-recursion-is-recursion&#34;&gt;Recursion is recursion is recursion is recursion&amp;hellip;.&lt;/h3&gt;&#xA;&lt;p&gt;So how hard is it to go back to a programming &lt;a href=&#34;https://elixir-lang.org/docs.html&#34;&gt;language&lt;/a&gt; that you haven&amp;rsquo;t used for months that you only used for less than a&#xA;year? Well, it took me a few more minutes than I anticipated, but in the end, I was succesful!&lt;/p&gt;&#xA;&lt;p&gt;Tonight, I thought I&amp;rsquo;d take the simple idea of creating &lt;a href=&#34;https://en.wikipedia.org/wiki/Pascal%27s_triangle&#34;&gt;Pascal&amp;rsquo;s Triangle&lt;/a&gt;. A simple construction that&#xA;creates a table of binomial coefficients for the binomial $(x+y)^n = x^4+4x^3y+6x^2y^2+4xy^3+y^4$. Notice the coefficients in our expanded binomial:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Visualizing the News: Grab your PILlow</title>
      <link>https://cyberspy.io/articles/2017-11-12t213223-0500--visualizing-the-news-grab-your-pillow/</link>
      <pubDate>Sun, 12 Nov 2017 21:32:23 -0500</pubDate>
      <guid>https://cyberspy.io/articles/2017-11-12t213223-0500--visualizing-the-news-grab-your-pillow/</guid>
      <description>&lt;h3 id=&#34;a-pictures-worth-a-gazillion-bits&#34;&gt;A Picture&amp;rsquo;s Worth a Gazillion Bits&lt;/h3&gt;&#xA;&lt;h2 id=&#34;newsapi&#34;&gt;newsapi&lt;/h2&gt;&#xA;&lt;p&gt;This weekend, I tripped over a neat news REST-ful api called &lt;a href=&#34;https://newsapi.org&#34;&gt;newsapi&lt;/a&gt;. Grab an API key and you&amp;rsquo;re off to the&#xA;races.&lt;/p&gt;&#xA;&lt;p&gt;There are tons of live headlines - &lt;strong&gt;News API can provide headlines from 70 worldwide sources.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are basically two api endpoints:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GET &lt;a href=&#34;https://newsapi.org/v1/articles&#34;&gt;https://newsapi.org/v1/articles&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;GET &lt;a href=&#34;https://newsapi.org/v1/sources&#34;&gt;https://newsapi.org/v1/sources&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Register for an &lt;a href=&#34;https://newsapi.org/register&#34;&gt;account&lt;/a&gt; and generate an api-key and let&amp;rsquo;s get started.&lt;/p&gt;&#xA;&lt;h2 id=&#34;accessing-the-api-with-python&#34;&gt;Accessing the API with Python&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;newsapi&lt;/strong&gt; can easily be accessed using a browser since the REST-ful method used is a &lt;strong&gt;GET&lt;/strong&gt; method. But, accessing the api&#xA;from the browser is limiting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making Heads or Tails out of Recursion and Combinatorial Math</title>
      <link>https://cyberspy.io/articles/2017-11-09t212705-0500--tail-recursion-and-combinatorial-math/</link>
      <pubDate>Thu, 09 Nov 2017 21:27:05 -0500</pubDate>
      <guid>https://cyberspy.io/articles/2017-11-09t212705-0500--tail-recursion-and-combinatorial-math/</guid>
      <description>&lt;h3 id=&#34;gnu--gnu&#34;&gt;GNU — &lt;a href=&#34;https://en.wikipedia.org/wiki/Recursive_acronym&#34;&gt;GNU&amp;rsquo;s Not Unix&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I thought I&amp;rsquo;d take a look at two topics at once and make some fun by mashing them together. Today&amp;rsquo;s topic&#xA;is &lt;a href=&#34;https://en.wikipedia.org/wiki/Recursion&#34;&gt;&lt;strong&gt;recursion&lt;/strong&gt;&lt;/a&gt;. In computer science (and in math, although we call the equation a&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Recurrence_relation&#34;&gt;recurrence relation&lt;/a&gt;) recursion is an often misunderstood concept causing lots of&#xA;panic and anxiety. In reality - it&amp;rsquo;s pretty easy once you wrap you head around the idiom.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-recursion&#34;&gt;What is recursion?&lt;/h2&gt;&#xA;&lt;p&gt;When we define a function in such a way that it calls itself, we&amp;rsquo;ve defined a recusive function. The most basic example is the&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Factorial&#34;&gt;Factorial&lt;/a&gt; function, $f(n)=n!$. We define the function &lt;em&gt;recursively&lt;/em&gt; by defining it&#xA;in reference to itself. So, recursively, we define $f(n)$ as:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting Visual With It</title>
      <link>https://cyberspy.io/articles/2017-11-08t102620-0500--getting-visual-with-it/</link>
      <pubDate>Wed, 08 Nov 2017 10:26:20 -0500</pubDate>
      <guid>https://cyberspy.io/articles/2017-11-08t102620-0500--getting-visual-with-it/</guid>
      <description>&lt;h3 id=&#34;time-to-get-vizzy-with-it&#34;&gt;Time to Get Vizzy With It!&lt;/h3&gt;&#xA;&lt;p&gt;Like Will says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Gettin vizzy wit it&#xA;Na na na na na na na nana&#xA;Na na na na nana&#xA;Gettin vizzy wit it…&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;plot-thickens&#34;&gt;Plot thickens&lt;/h3&gt;&#xA;&lt;p&gt;Time to turn on the lights and see what our data objects look like when we turn them&#xA;into visualized plots. Sure, we can use the &lt;code&gt;print&lt;/code&gt; function to see the &lt;em&gt;numbers&lt;/em&gt; within&#xA;our &lt;strong&gt;numpy&lt;/strong&gt; objects. Better yet, let&amp;rsquo;s turn our objects into pretty graphical images. To do so, we turn to&#xA;the &lt;a href=&#34;http://matplotlib.org/contents.html&#34;&gt;&lt;code&gt;matplotlib&lt;/code&gt;&lt;/a&gt; library. An extensive library of plotting routines that easily allows us to render&#xA;image plots into many different formats (png, jpg, pdf, etc&amp;hellip;) - both onto the screen for quick visual inspection, or written&#xA;to a file for general use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Do the Numpy</title>
      <link>https://cyberspy.io/articles/2017-11-07t153643-0500--do-the-numpy/</link>
      <pubDate>Tue, 07 Nov 2017 15:36:43 -0500</pubDate>
      <guid>https://cyberspy.io/articles/2017-11-07t153643-0500--do-the-numpy/</guid>
      <description>&lt;h3 id=&#34;do-the-numpy-dance-is-your-chance-to-do-the-nump&#34;&gt;Do the Numpy Dance, Is your Chance to do the Nump!&lt;/h3&gt;&#xA;&lt;p&gt;Sir Numpy says:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Numpy Dance is your chance to do the nump&#xA;Do the Numpy Nump, come on and do the Numpty Nump&#xA;Do the Numpy Nump, just watch me do the Numpty Nump&#xA;Do ya know what I&amp;rsquo;m doin&amp;rsquo;, doin&amp;rsquo; the Numpty Nump&#xA;Do the Numpy Nump, do the Numpty Nump&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;start-at-the-beginning-numpy&#34;&gt;Start at the beginning: &lt;a href=&#34;http://www.numpy.org&#34;&gt;&lt;em&gt;&lt;code&gt;NumPy&lt;/code&gt;&lt;/em&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The first library that we will investigate is &lt;code&gt;numpy&lt;/code&gt;. Simply put, &lt;code&gt;numpy&lt;/code&gt; allows us to represent&#xA;mathematical objects like arrays and matricies of different datatypes and performs operations on those objects thereby&#xA;easing the burden of writing the tedious code within your applications to do the mundane representations and operations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data Science with Python: Let there be Light</title>
      <link>https://cyberspy.io/articles/2017-11-05t174804-0500--data-science-with-python---start-here/</link>
      <pubDate>Sun, 05 Nov 2017 17:48:04 -0500</pubDate>
      <guid>https://cyberspy.io/articles/2017-11-05t174804-0500--data-science-with-python---start-here/</guid>
      <description>&lt;h2 id=&#34;data-science---clueless-no-prob-we-got-you-dude&#34;&gt;Data-Science - Clueless? No prob. We got you dude.&lt;/h2&gt;&#xA;&lt;p&gt;So you&amp;rsquo;ve likely heard all the hype about &lt;em&gt;&amp;ldquo;data-science&amp;rdquo;&lt;/em&gt; - and if you&amp;rsquo;re not among the cool kids, it might&#xA;be a wee-bit overwhelming to you. Where to even start? What does it all mean? How do you even begin to understand what you&#xA;need to know to begin learning more and making progress in the field.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s start off with a few definitions:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Conway&#39;s Game of Life</title>
      <link>https://cyberspy.io/articles/2017-11-03t220538-0400--conways-game-of-life/</link>
      <pubDate>Fri, 03 Nov 2017 22:05:38 -0400</pubDate>
      <guid>https://cyberspy.io/articles/2017-11-03t220538-0400--conways-game-of-life/</guid>
      <description>&lt;h2 id=&#34;conways-game-of-life&#34;&gt;Conway&amp;rsquo;s Game of Life&lt;/h2&gt;&#xA;&lt;p&gt;In 1970, British mathematician &lt;a href=&#34;https://en.wikipedia.org/wiki/John_Horton_Conway&#34;&gt;John Horton Conway&lt;/a&gt; invented&#xA;a &lt;a href=&#34;https://en.wikipedia.org/wiki/Cellular_automaton&#34;&gt;cellular automaton&lt;/a&gt; called &lt;strong&gt;The Game of Life&lt;/strong&gt;. This simple game is&#xA;governed by its initial cellular state and four simple rules:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Any live cell with fewer than two live neighbors dies, as if caused by underpopulation.&lt;/li&gt;&#xA;&lt;li&gt;Any live cell with two or three live neighbors lives on to the next generation.&lt;/li&gt;&#xA;&lt;li&gt;Any live cell with more than three live neighbors dies, as if by overpopulation.&lt;/li&gt;&#xA;&lt;li&gt;Any dead cell with exactly three live neighbors becomes a live cell, as if by reproduction.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The rules are applied to all the cells in the grid, starting with the initial grid populated with the starting &lt;strong&gt;live&lt;/strong&gt;&#xA;cells. After many iterations, the grid comes to an end-state which can be unexpected given the initial seed state.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Teaching Python to Beginners.</title>
      <link>https://cyberspy.io/articles/sat-oct-14-191245-edt-2017--teaching-python-to-beginners./</link>
      <pubDate>Sun, 15 Oct 2017 15:51:42 -0400</pubDate>
      <guid>https://cyberspy.io/articles/sat-oct-14-191245-edt-2017--teaching-python-to-beginners./</guid>
      <description>&lt;h2 id=&#34;teaching-python-to-a-total-noob&#34;&gt;Teaching Python to a total noob&lt;/h2&gt;&#xA;&lt;h3 id=&#34;how-hard-can-it-be&#34;&gt;How hard can it be!&lt;/h3&gt;&#xA;&lt;p&gt;Recently, I had the pleasure of becoming a tutor for someone needing to learn how to&#xA;program for the very first time. Having been a programmer for over four decades (OAF), I&#xA;was quickly reminded of how much accumulated knowledge we who are in the know take for&#xA;granted. Although my knowledge of computer science, and programming languages in general is&#xA;extensive, I used the occasion to revisit aspects of the python language that are less obvious to a&#xA;novice.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
