<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Walker Harrison</title>
    <description>The latest articles on DEV Community by Walker Harrison (@walker).</description>
    <link>https://dev.to/walker</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F510%2F5617c08f-8595-4367-8020-c951594bfdc3.jpg</url>
      <title>DEV Community: Walker Harrison</title>
      <link>https://dev.to/walker</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/walker"/>
    <language>en</language>
    <item>
      <title>Using Data Science for EdTech and Public Policy, with Alicia Powers</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Mon, 31 Jul 2017 18:07:22 +0000</pubDate>
      <link>https://dev.to/walker/using-data-science-for-edtech-and-public-policy-with-alicia-powers</link>
      <guid>https://dev.to/walker/using-data-science-for-edtech-and-public-policy-with-alicia-powers</guid>
      <description>

&lt;p&gt;&lt;em&gt;&lt;a href="https://twitter.com/apowers411"&gt;Alicia Powers&lt;/a&gt; is the Senior Vice President of Research at the ‎New York City Economic Development Corporation. She has a degree in Statistics and Cognitive Science from Rice University and a PhD in Public Policy and Management from Carnegie Mellon University.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What impresses you most about modern artificial intelligence, which is often modeled after cognitive processes, your field of study?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;There have been great strides in the area of AI since I was first studied it a few decades ago when it was mostly a set of algorithms in a textbook. That being said, I think we may not be as far along as we think we are when it comes to artificial intelligence. There’s a level of potentiality and plasticity to the brain—an ability to react to fresh information—that I think computers are yet to replicate. &lt;/p&gt;

&lt;p&gt;Sometimes I find myself in a scenario where I’m impressed with one form of machine learning but underwhelmed by another. I was listening to music the other day on a streaming service and thought that the music recommendations were curated wisely, but that the targeted ads in between songs had nothing to do with me.&lt;/p&gt;

&lt;p&gt;So there’s room for improvement in AI. I’d say I’m most impressed by the advances in sensory and spatial awareness in machines. It wasn’t so long ago that we were unable to build a robot that could take a few steps without falling over, but they’ve since gotten much more sophisticated.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What software does your team use for its analysis?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We use R. But most of my colleagues come in with degrees in economics or policy and not computer science, so they often don’t have much programming experience. So we utilize resources like DataCamp, and the team also holds R learning sessions. I teach base R but also tidyverse packages like &lt;code&gt;dplyr&lt;/code&gt; — I find using the &lt;code&gt;%&amp;gt;%&lt;/code&gt; pipe in your syntax makes it easier to follow the analysis.&lt;/p&gt;

&lt;p&gt;I’ve been using R since I was a grad student in the early 2000s. But for personal projects I prefer Python—Jupyter notebooks have made it much easier to use libraries like &lt;code&gt;numpy&lt;/code&gt; and &lt;code&gt;pandas&lt;/code&gt; for data analysis. Plus it makes me feel more like a software engineer! I can tell my programmer friends that I’ve been coding in Python.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;After getting your doctorate, what was your first role in tech?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I was at an edtech hackathon when an acquaintance introduced me to Noodle Education, founded by John Katzman of the Princeton Review, which was a young company trying to serve as a knowledge base for individuals trying to get into school at all levels. A few months later I joined their team.&lt;/p&gt;

&lt;p&gt;I worked mostly on what could be considered a search engine for education. We wanted you to be able to search for schools and courses and degrees from kindergarten all the way through to the university level. We had moms searching for local preschools, 8th graders in New York City trying to find the right high school, and students in China trying to inform their college apps.&lt;/p&gt;

&lt;p&gt;Much of my job was combining disparate data sources, often in the form of excel spreadsheets with pretty complex schema, into a single database. This role skewed more toward aggregation than analysis, so it was more of a data engineering position than a data science one. We went with MongoDB for our database needs, which at the time was just getting started.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;As someone who’s experienced in edtech and worked in academia, would you recommend traditional education or modern techniques, like bootcamps, to aspiring data scientists?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I’m still in favor of the more traditional route if you can find a way to afford it. Everyone thought that MOOCs were going to completely disrupt academia and change the world…but no one ever finishes them! So I still think that the structure and network that in-person learning at a university can provide is worthwhile.&lt;/p&gt;


</description>
      <category>datascience</category>
      <category>r</category>
      <category>career</category>
    </item>
    <item>
      <title>Working as a Data Scientist at Stack Overflow, with Julia Silge</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Wed, 26 Jul 2017 16:15:52 +0000</pubDate>
      <link>https://dev.to/walker/working-as-a-data-scientist-at-stack-overflow-with-julia-silge</link>
      <guid>https://dev.to/walker/working-as-a-data-scientist-at-stack-overflow-with-julia-silge</guid>
      <description>&lt;p&gt;&lt;em&gt;Julia Silge is a data scientist at Stack Overflow. She studied physics and astronomy, finishing her PhD in 2005. She worked in academia (teaching and doing research) and ed tech before moving into data science and discovering R. Her O'Reilly book &lt;a href="http://tidytextmining.com/" rel="noopener noreferrer"&gt;&lt;em&gt;Text Mining With R&lt;/em&gt;&lt;/a&gt;, written with coauthor David Robinson, is now available.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What kind of data problems do you encounter at Stack Overflow?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The data I get to work with at Stack Overflow is amazing! Stack Overflow is where people who code come to learn, share knowledge with each other, and build their careers, so our data is all about that. It's data about who developers are, how they build communities together, how technologies interact and are changing, and how technologies are impacting the world we live in. &lt;/p&gt;

&lt;p&gt;We use this rich data in a lot of different ways at Stack Overflow. My team works on machine learning to match developers with relevant jobs, text mining to understand what makes a developer more likely to respond to a company, and of course understanding the technology ecosystems themselves. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.blog/2017/07/06/text-mining-stack-overflow-questions/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjrhiefgh8jtv5syq3r53.png" alt="Text mining of Stack Overflow questions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One specific issue I've worked on understanding is the geographic distribution of our users worldwide and comparing that to the geographic distribution of the jobs available on Stack Overflow. This project did not involve particularly fancy AI or anything, but it did involve integrating diverse, messy datasets and building an internally facing tool that shareholders from executives to sales people can engage with and use to make decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What lessons can data scientists take from data journalism?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;My own work as a data scientist is influenced by data journalists, and communication and storytelling in general. This doesn't mean I am less technical, but it does mean that I care a lot about what someone takes away from the analysis I did, or the model I built. &lt;/p&gt;

&lt;p&gt;Andrew Flowers gave a talk at &lt;a href="https://www.rstudio.com/resources/videos/finding-and-telling-stories-with-r/" rel="noopener noreferrer"&gt;&lt;code&gt;rstudio::conf&lt;/code&gt;&lt;/a&gt; last year about how to find and tell stories, and it resonated so much with how I approach my work. I pay attention to what's going on in data journalism, and I find that when something is really compelling, whether it's &lt;a href="https://pudding.cool/2017/02/vocabulary/" rel="noopener noreferrer"&gt;The Pudding's work on hip hop&lt;/a&gt; or &lt;a href="https://pudding.cool/2017/06/best-sellers/" rel="noopener noreferrer"&gt;bestselling books&lt;/a&gt; or &lt;a href="https://www.nytimes.com/interactive/2015/05/28/upshot/you-draw-it-how-family-income-affects-childrens-college-chances.html" rel="noopener noreferrer"&gt;the Upshot’s "you draw it" graphs&lt;/a&gt;, I consider why and how those principles can be integrated into my own work. I communicate with people like software developers, product managers, and salespeople in my job, and I want them to both understand and be delighted with the work that I do.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How did you transition from academia to data science?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I wrote lots of code during my research years, using programming as a tool for scientific computing and analyzing real-world complex data. After grad school, I worked in research as a postdoc and then in education as a professor. After that, I took several years away from the paid workforce when my children were tiny and was home full-time with them.&lt;/p&gt;

&lt;p&gt;In 2012, I transitioned back into the workforce with a job at an ed tech start-up where I developed interactive content for higher ed STEM courses, but through a series of circumstances (including a layoff) I decided the time was right for me professionally and personally to move toward a more technical, analytical role. I hadn’t been coding full-time since my postdoc days, so I jumped into a whole slew of opportunities for learning, from MOOCs to books to eventually getting involved in open source. &lt;/p&gt;

&lt;p&gt;I discovered the statistical programming language R, which I have taken to like a fish to water, and worked to update and develop my skills. The open-source R community provided me with amazing opportunities to improve as an R developer and to build relationships with people who have helped me along the way. I eventually started applying for data science jobs with a portfolio of analysis projects demonstrating my skills on &lt;a href="https://juliasilge.com/" rel="noopener noreferrer"&gt;my blog&lt;/a&gt;. My first job as a data scientist was at an amazing statistics/data science consulting firm called Datassist that does important, interesting work. I work now as a data scientist at Stack Overflow; it's my second job where my title is data scientist.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What are the common career paths that lead to data science?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I usually see people from two backgrounds who are interested in moving into data science. The first set are people from really academic backgrounds in physics or ecology or the code-heavy sides of the social sciences, with PhDs like me, who have strong quantitative skills. Usually what these people need to move into data science is to adopt some important practices from software engineering like version control, unit testing, and continuous integration. Basically, they need to become more fluent coders. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://juliasilge.com/blog/non-academic-careers/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgflip.com%2F1t097p.jpg" alt="Leaving academia"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second set are software engineers who are already great at writing code and have data-oriented mindsets, but less statistical training. Usually what this group needs to move into data science is to hone their modeling and machine learning chops.&lt;/p&gt;

&lt;p&gt;Another cohort of people I am super interested to follow are the students who are right now in the new academic programs training people to do data science. These are students getting master's or bachelor's degrees with explicit training in data science as a major or minor. I've gone to speak at some of these programs here where I live in Salt Lake City and I am very interested to see how this space evolves in the near future. &lt;/p&gt;

&lt;p&gt;I predict that in 5 or 7 years there will be more data scientists who have less education (fewer PhDs, more bachelors') but more specialized education (fewer astronomers and biostatisticians, more people with masters' degrees in data science). I don't think the field will be worse off, but it will be different!&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>r</category>
      <category>career</category>
    </item>
    <item>
      <title>Flash is dead 💀 (kind of)</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Tue, 25 Jul 2017 19:21:11 +0000</pubDate>
      <link>https://dev.to/walker/flash-is-dead--actually-kind-of</link>
      <guid>https://dev.to/walker/flash-is-dead--actually-kind-of</guid>
      <description>&lt;p&gt;Earlier today, Adobe &lt;a href="https://blogs.adobe.com/conversations/2017/07/adobe-flash-update.html" rel="noopener noreferrer"&gt;published a blogpost&lt;/a&gt; announcing that they would be gradually sunsetting their well known plugin, Flash. The company will continue "issuing regular security patches, maintaining OS and browser compatibility and adding features and capabilities as needed," according to the post, but the plan is to stop updating and distributing Flash by the end of 2020.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwww.techcult.com%2Fwp-content%2Fuploads%2F2008%2F09%2Findestructotankgame.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwww.techcult.com%2Fwp-content%2Fuploads%2F2008%2F09%2Findestructotankgame.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nostalgic users might shed a tear for Flash's death—who amongst us didn't rely on Flash to serve us an early viral video or whimsical browser game?—but the general consensus is that Flash's wind-down is overdue if anything. With near universal agreement, web developers consider Flash a potential source of security vulnerabilities, sluggish performance, and wasted battery. Major browsers like Chrome and Safari automatically block the plugin—you may recall being asked to allow it to run on various websites.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FLz_8IWHPgQP3-r3yBPMIxwy6G1F0FH2kcet0sfUZarc4luSisLmPcvilZvp3mYqTLUDX%3Dw390" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Flh3.googleusercontent.com%2FLz_8IWHPgQP3-r3yBPMIxwy6G1F0FH2kcet0sfUZarc4luSisLmPcvilZvp3mYqTLUDX%3Dw390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Originally rolled out in the 1990s, Flash was the standard for online audio and video playback for over a decade. But eventually superior technologies like HTML5 supplanted the plugin, and Flash's persistent bugginess and poor security attracted scores of critics, most notably Steve Jobs who penned &lt;a href="https://www.apple.com/hotnews/thoughts-on-flash/" rel="noopener noreferrer"&gt;a long essay denouncing Flash&lt;/a&gt; in 2010.&lt;/p&gt;

&lt;p&gt;But Flash's erstwhile prominence means that it's still all over the web, which is why Adobe is relying on its powerful partners, Apple, Facebook, Google, Microsoft, and Mozilla, to ease the transition by encouraging developers to migrate current Flash content to modern formats. The three years until the official end-date makes such conversions easier, but Flash was instrumental in the digital emergence of industries like education and gaming, so it's likely that this change will break more than a few old and untended websites.&lt;/p&gt;

&lt;p&gt;Many &lt;a href="https://dev.to/"&gt;dev.to&lt;/a&gt; users surely have experiences, both positive and negative, working with Flash over the years. Feel free to share them in the comments below!&lt;/p&gt;

</description>
      <category>news</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Turning a side interest in programming into a data engineering career, with Josh Laurito</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Thu, 13 Jul 2017 14:37:02 +0000</pubDate>
      <link>https://dev.to/walker/talkin-data-with-josh-laurito-head-of-data-engineering-at-fusion-media-group</link>
      <guid>https://dev.to/walker/talkin-data-with-josh-laurito-head-of-data-engineering-at-fusion-media-group</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;a href="https://twitter.com/joshlaurito" rel="noopener noreferrer"&gt;Josh Laurito&lt;/a&gt; is the head of data engineering at Fusion Media Group, the publisher of the web’s most widely read media brands, reaching over 90MM unique visitors a month. His team occasionally blogs at &lt;a href="http://fmgdata.kinja.com/" rel="noopener noreferrer"&gt;fmgdata.kinja.com&lt;/a&gt;. He also runs a newsletter for the NYC data community that you can subscribe to &lt;a href="http://tinyletter.com/nycdatajobs/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What's a recent data problem that your team had to solve?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Most of our work is dedicated to our publishing platform, Kinja. Kinja used to only allow homepages organized like blogs, with stories listed newest-to-oldest. About a year ago, we started supporting stories being 'pinned' to the top of the homepage. This was a great change that was applauded throughout the company, giving our editors a chance to highlight each publication's best work. &lt;/p&gt;

&lt;p&gt;The flip side of manual curation, though, was that we as an organization hadn’t ever really picked out stories for special coverage this way before. While it was generally pretty clear to the editors what stories should be pinned, we had no experience with how long they should stay pinned. Is a big story from 8 hours ago more engaging to our audience than a smaller story that’s just breaking now? &lt;/p&gt;

&lt;p&gt;At first my team did some analysis, thinking we could automatically promote stories to the top of the page, or at least recommend what stories should go there. &lt;/p&gt;

&lt;p&gt;However it was pretty clear that the editors needed to have a lot of control here. Editorial organizations have their own sensibilities that are really difficult to articulate in a model. Additionally, there were lots of planned event coverage, like the Apple WWDC for Gizmodo or E3 for Kotaku, where we’d need to have posts queued up to override anything automated. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;So how did you find the right level of automation?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the end, we built a lightweight alerting system. The math is pretty straightforward: we calculate expected click rates for stories on each site that we support, then see how stories are performing against that. We integrated the alerts into each publication’s Slack room, and added a glyph system so editors knew exactly what the numbers meant. Here’s an example from Lifehacker:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F8dkfym05bdm2eo8bt3jk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F8dkfym05bdm2eo8bt3jk.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So instead of building something that was completely automated around pinning stories, we used the data to educate and support our editorial team. It’s been successful in that it drives changes to the homepage, but doesn’t dictate terms: if editors want to keep up a post despite lower objective performance, maybe because the reporting is excellent, or they just think a piece is really fun, they have that option.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Beyond curation, does the data team also make suggestions about the actual headlines or content of articles?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We've talked about this a lot, and we've shied away from it so far. Occasionally for sponsored content or the sales team we'll help research a strategy, but not for editorial so far. &lt;/p&gt;

&lt;p&gt;There are two main data-oriented reasons we've stayed away (our editorial staff could probably give you a few more). One is that we're worried that we'll dilute what makes our publications special, which is their voice. When lots of people are testing headlines or content, there's going to be convergent evolution, which means sites will be harder to differentiate between. While I have not doubt that leads to short-term improvements in metrics, I am certain it will dilute what makes us a destination for our readers.&lt;/p&gt;

&lt;p&gt;The second reason is that the implicit assumption behind testing is that the audience you're training on (today's traffic) looks a lot like your test set (future traffic). But the fact is that most of our traffic is filtered through someone else's algorithm first, be in Facebook, Google, Twitter, or someone else. I don't have a lot of confidence in the stability of those algorithms, and I think over-optimizing for them could make us susceptible to changes. I'd rather let the editorial and audience teams try what they want and have a more diverse set of headlines and content. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;When and how did you learn to program?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I actually graduated from college with a degree in chemistry, and moved into finance, figuring that even if I didn't know what I wanted to do, at least I could make some money and meet some smart people. It was right during the housing boom, and I had a friend who worked in a mortgage derivatives group at a big bank who helped me get a job as a structurer, which is basically someone who does scenario modeling.&lt;/p&gt;

&lt;p&gt;The work was interesting and challenging, but the workload was overwhelming if you couldn't manage it. I learned how to program in order to keep up with all the requests for my time. Most of these lessons happened thanks to the guy who sat next to me, who had a master's in computer science and took pity on me manually entering scenario parameters over and over again at 1AM. &lt;/p&gt;

&lt;p&gt;The bottom fell out of the market a few years later and all of us got laid off. It was a tough lesson in the limits of what our models could do. I actually worked with a few people who ended up as characters in &lt;em&gt;The Big Short&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How did you turn your side interest in programming into a data engineering job?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I ended up at an insurance company and one day, the CEO of the company walked by my desk and complained to me how he had no way to match his data with government data. So if he wanted to see how many of his insurance policies were written in areas that have, for example, high unemployment rates, he was stuck. &lt;/p&gt;

&lt;p&gt;It sounded like a really interesting problem, so between Christmas and New Year's when nobody else was around I prototyped an app that took information from internal and government sources, and put together &lt;a href="https://en.wikipedia.org/wiki/Choropleth_map" rel="noopener noreferrer"&gt;choropleth maps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwww.axismaps.com%2Fmedia%2Fguides%2Funclassed_choropleth_map.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fwww.axismaps.com%2Fmedia%2Fguides%2Funclassed_choropleth_map.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When people came back in January, I showed off my app and everyone was pretty excited about it. We built small team around the idea. What I didn't know at the time was that the insurance company had invested too much in mortgages, just like the bank, and was going to be effectively going bankrupt soon. &lt;/p&gt;

&lt;p&gt;Fortunately, two of the executives I worked with were interested in spinning off a startup based on my app. That became my first startup, &lt;a href="http://lumesis.com/" rel="noopener noreferrer"&gt;Lumesis&lt;/a&gt;. The two founders wanted to move the company up to Connecticut, which didn't really appeal to me, but I was excited about the tech world after getting a taste, and started looking for other jobs in tech that used math and statistics to solve problems. &lt;/p&gt;

&lt;p&gt;I bounced around a few startups before a friend of mine who I had work with at CrowdTwist, a Techstars company in Flatiron, recruited me over to Gawker. I started working there in 2014, and have stayed here through the bankruptcy and acquisition by Univision.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How has your job changed since you were first brought on?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Oh wow, it's like night and day. When I started, I was effectively the only data scientist/analyst (we had a data engineer though). I spent almost all my time coding, testing, and writing up results.&lt;/p&gt;

&lt;p&gt;Now that the team is bigger and we work for a large corporation, I spend a lot of time managing, doing strategy work, and hiring. Speaking of which, we're hiring for product, engineering, and data roles, as well as elsewhere in the organization. Your readers should &lt;a href="http://gizmodo.com/careers" rel="noopener noreferrer"&gt;take a look&lt;/a&gt;!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What do you look for in a new hire and what advice would you give to aspiring data scientists?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The advice I give to everyone is to complete a project and make it public. When I taught data visualization, &lt;a href="http://jlaurito.github.io/CUNY_IS608/" rel="noopener noreferrer"&gt;I forced my students to make their final projects public&lt;/a&gt;. It doesn’t really matter what it is: tied to work or not, a visualization or an open-source library, whether it’s polished or not, you need to get it out there. &lt;/p&gt;

&lt;p&gt;All of us who work with numbers or code for a living know that most project include some ugly parts, whether you think of them as kludges or technical debt or hand-waving through assumptions/theory. Just being able to ship something that delivers what it promises puts you ahead of most people who would like to work in data science.&lt;/p&gt;

&lt;p&gt;When I got started I did all sorts of dumb fun projects around things I was interested in, just to learn. I made a &lt;a href="http://bl.ocks.org/jlaurito/raw/d2f172c58b6ee07cf3d4/" rel="noopener noreferrer"&gt;Mouse Speedometer&lt;/a&gt;, a &lt;a href="http://jlaurito.github.io/us_bank_map/mapping_us_banks.html" rel="noopener noreferrer"&gt;map of the US banking system&lt;/a&gt;, a &lt;a href="http://joshlaurito.com/blog/languages.html" rel="noopener noreferrer"&gt;comparison of European Languages&lt;/a&gt;, a bunch of stuff. None of these are going to win any awards, but they helped my build a portfolio, and generally were a lot of fun to play around with as I was learning new tech.&lt;/p&gt;

&lt;p&gt;When I’m hiring, I love seeing what people have done before, either at work or on their own. I think the number one complaint about data-oriented people in industry is that we aren’t always good at shipping products out the door, so knowing that someone actually gets stuff done means a lot to me.&lt;/p&gt;

</description>
      <category>data</category>
      <category>datascience</category>
      <category>career</category>
      <category>learning</category>
    </item>
    <item>
      <title>Pseudo-Random Numbers in Python: From Arithmetic to Probability Distributions</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Fri, 23 Jun 2017 18:21:25 +0000</pubDate>
      <link>https://dev.to/walker/pseudo-random-numbers-in-python-from-arithmetic-to-probability-distributions</link>
      <guid>https://dev.to/walker/pseudo-random-numbers-in-python-from-arithmetic-to-probability-distributions</guid>
      <description>&lt;p&gt;Randomness is something that we tend to take for granted in our daily lives. "That's so random!" we'll say, when someone does something abnormal or unexpected, even though there's &lt;a href="https://www.ncbi.nlm.nih.gov/pubmed/17888582" rel="noopener noreferrer"&gt;evidence that humans can't consciously achieve randomness&lt;/a&gt;. For truly stochastic processes, we turn to nature: the growth of bacteria, the timing of radioactive decay, and the thermal noise created by electric currents all lay claim to a true random sequence.&lt;/p&gt;

&lt;p&gt;There's not always some Plutonium-239 lying around every time we need to use true randomness though, so computer scientists developed close approximations called pseudo-random number generators, or PRNGs. Today these algorithms are ubiquitous in software development. &lt;a href="https://en.wikipedia.org/wiki/Pseudorandom_number_generator" rel="noopener noreferrer"&gt;As Wikipedia notes&lt;/a&gt;, "PRNGs are central in applications such as simulations (e.g. for the Monte Carlo method), electronic games (e.g. for procedural generation), and cryptography."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2F7%2F79%2FAlpha_Decay.svg%2F2000px-Alpha_Decay.svg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2F7%2F79%2FAlpha_Decay.svg%2F2000px-Alpha_Decay.svg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; Radioactive decay is considered a truly random process. &lt;/p&gt;

&lt;p&gt;Today I'm going to walk through a relatively simple kind of PRNG called a Linear Congruential Generator (LCG). In modern implementation, most random numbers rely on more sophisticated PRNGs, but the LCG gives us a solid foundation and will be sufficiently random for our modest intentions.&lt;/p&gt;

&lt;p&gt;As a pre-req, you should be familiar with modular arithmetic, which is essentially just representing numbers as remainders once divided by a "modulus." In other words, numbers can increase until they reach a set modulus and start wrapping around: 5 modulo 3 is equal to 2, 25 modulo 2 is equal to 1. Most clocks are on a modulo-12 system.&lt;/p&gt;

&lt;p&gt;For an LCG we need a modulus, &lt;em&gt;m&lt;/em&gt;, an initial value (or "seed"), X0, a multiplier, &lt;em&gt;a&lt;/em&gt;, and an increment, &lt;em&gt;c&lt;/em&gt;. From there, to get from one number Xn to the next Xn+1, you simply execute the following algorithm:&lt;/p&gt;

&lt;p&gt;&lt;b&gt; Xn+1 = (aXn + c) mod m &lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Let's write this as a function in Python and then assign some simple values: a modulus of 10, a multiplier of 3, an increment of 1, and a seed value of 5.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lcg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;sequence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="n"&gt;Xn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;seed&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;Xn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Xn&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;
        &lt;span class="n"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Xn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;lcg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; [6, 9, 8, 5, 6, 9, 8, 5, 6, 9]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, we asked for ten random numbers and were given the sequence &lt;code&gt;[6, 9, 8, 5, 6, 9, 8, 5, 6, 9]&lt;/code&gt;. Now while this passes the requirements of an LCG, this is a truly horrible PRNG. First of all, in modulo 10 there are only ten possible values a number can take on, and further more there is an unbreakable 6-9-8-5 loop in our case that further reduces our state space to just four numbers. &lt;/p&gt;

&lt;p&gt;What we need is a much larger modulus and the assurance that every possible number will be produced once by any seed value that's input, or what's known as having "full period." Enter advanced number theory. By the Hull and Dobell Theorem, an LCG will have full period if:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;c&lt;/em&gt; and &lt;em&gt;m&lt;/em&gt; are relatively prime (i.e., the only positive integer that divides both &lt;em&gt;c&lt;/em&gt; and &lt;em&gt;m&lt;/em&gt; is 1).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If &lt;em&gt;q&lt;/em&gt; is any prime number that divides &lt;em&gt;m&lt;/em&gt;, then &lt;em&gt;q&lt;/em&gt; also divides &lt;em&gt;a – 1&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If 4 divides &lt;em&gt;m&lt;/em&gt;, then 4 also divides &lt;em&gt;a – 1&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can read the &lt;a href="http://chagall.med.cornell.edu/BioinfoCourse/PDFs/Lecture4/random_number_generator.pdf" rel="noopener noreferrer"&gt;original 1962 paper proving this theorem here&lt;/a&gt;. Instead of trying to come up with some numbers that work, we'll steal the ones that are actually used for random number generation in some languages, including C++: &lt;em&gt;m&lt;/em&gt; = 2&lt;sup&gt;32&lt;/sup&gt;, &lt;em&gt;a&lt;/em&gt; = 22695477, &lt;em&gt;c&lt;/em&gt; = 1. &lt;/p&gt;

&lt;p&gt;But before trying out these new inputs, we need to address the deterministic nature of our LCG: plug in the same seed and you will get the same output, which sort of invalidates any sense of randomness that we'd claimed. This is a fundamental flaw in PRNGs in general. &lt;/p&gt;

&lt;p&gt;However, there is an upside to their predictability — namely that by setting and sharing a seed, one can create reproducible results, which are critical in the sciences — and also a few ways around it. By tying the seed to something unseen and ever-changing, like the current number of microseconds past the second, we can reintroduce some faux-randomness. So along with our new inputs, we'll use the built-in Python &lt;code&gt;datetime&lt;/code&gt; library for our seed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;
&lt;span class="nf"&gt;lcg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11695477&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;microsecond&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# =&amp;gt; [1090430687, 498347756, 2363706845, 1780651778, 1345777131,
#        826090344, 275756681, 2092763550, 396794679,3763540772]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That looks a lot better. Usually, however, we're not so much interested in a random number between 0 and 2&lt;sup&gt;32&lt;/sup&gt;, but rather a random number between 0 and 1 — the standard uniform distribution &lt;em&gt;U(0,1)&lt;/em&gt;. Since this distribution is bounded at 0 and 1, it can be multiplied by larger numbers to create larger uniform distributions and also maps smoothly to probability spaces, which will come in handy later.&lt;/p&gt;

&lt;p&gt;By dividing our output by the modulus (or, to be precise, the modulus minus 1), we can transfer our random numbers onto the line between 0 and 1. Technically, only a finite group of numbers can be outputted so we haven't achieved a true uniform distribution, where every conceivable real number between 0 and 1 is possible and there's no point mass anywhere. But this distinction is negligible with a large number like 2&lt;sup&gt;32&lt;/sup&gt;. Let's rewrite our LCG to spit out numbers between 0 and 1, and then graph a sequence of a thousand random numbers compared to a thousand random numbers generated by Python's built-in &lt;code&gt;random()&lt;/code&gt; function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;uni&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;sequence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="n"&gt;Xn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;seed&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;Xn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Xn&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Xn&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="nf"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;y_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;uni&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11695477&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;microsecond&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;y_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;blue&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y_2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;red&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fxnlz8wlxqobv5hidts26.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fxnlz8wlxqobv5hidts26.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; Two pseudo-random outputs: our LCG on the left and Python's built-in PRNG on the right. &lt;/p&gt;

&lt;p&gt;On the left are the thousand random numbers graphed in the sequence we produced them, and on the right are the thousand emitted by Python's built-in &lt;code&gt;random()&lt;/code&gt; function, which, for the record, relies on the &lt;a href="https://en.wikipedia.org/wiki/Mersenne_Twister" rel="noopener noreferrer"&gt;Mersenne Twister&lt;/a&gt;, a relatively modern algorithm that today is the gold standard for PRNGs. While any computer scientist would tell you the second algorithm is much more robust, to the naked eye they appear comparable.&lt;/p&gt;

&lt;p&gt;Moreover, the standard uniform distribution acts as a gateway to all sorts of other, more sophisticated distributions because it operates on the probability space from 0 to 1 (everything has somewhere between a 0% and 100% probability of happening). So as long as we can find a way to map our events to the uniform distribution, we can randomly sample from them.&lt;/p&gt;

&lt;p&gt;As a simple example, we can simulate flipping a coin from the uniform distribution by calling any random number greater than 0.5 a heads and anything less a tails. Here's a function that takes a number of flips and returns how many heads turned up (formally, a binomial distribution with &lt;em&gt;n&lt;/em&gt; trials and &lt;em&gt;p&lt;/em&gt; of 0.5). We'll run a thousand trials of hundreds flips each and build a histogram with the results:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;coin_flips&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;flips&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;uni&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11695477&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;microsecond&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;heads&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;flips&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;heads&lt;/span&gt;

&lt;span class="n"&gt;trials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;coin_flips&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trials&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trials&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;trials&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ff3znly2c1x0dgm5dsq38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ff3znly2c1x0dgm5dsq38.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; A histogram of thousand trials of our PRNG flipping a coin a hundred times and counting the heads. &lt;/p&gt;

&lt;p&gt;As you can see, our trial data is unimodal and nearly symmetrical, which we'd expect from a binomial random variable.&lt;/p&gt;

&lt;p&gt;Now, as we've mentioned, these PRNGs are indisputably flawed. They are deterministic and not truly uniform. Famed mathematician and computer scientist John von Neumann once said that "anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin."&lt;/p&gt;

&lt;p&gt;Still though, I find it pretty remarkable that with addition and multiplication, the most basic mathematic building blocks, we can approximate a sample from a random variable like the binomial distribution.&lt;/p&gt;

</description>
      <category>python</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Github releases results from its 2017 Open Source Survey</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Fri, 02 Jun 2017 20:09:30 +0000</pubDate>
      <link>https://dev.to/walker/github-releases-results-from-its-2017-open-source-survey</link>
      <guid>https://dev.to/walker/github-releases-results-from-its-2017-open-source-survey</guid>
      <description>&lt;p&gt;If you're reading this page on Firefox or even using a Linux operating system, you're the beneficiary of open source software. On a broader level, open source tools likely facilitate all sorts of everyday actions of yours, which makes &lt;a href="http://opensourcesurvey.org/2017/"&gt;Github's yearly open source software survey&lt;/a&gt;, released today, an important assessment of a major concept within the technical universe.&lt;/p&gt;

&lt;p&gt;By surveying over 5,000 respondents from open source repos on their site, Github has put together a "open data set about the attitudes, experiences, and backgrounds of those who use, build, and maintain open source software." &lt;/p&gt;

&lt;p&gt;There's a lot to mine here — and Github provides the raw data for those who want to analyze it themselves — so we'll be releasing a series of posts over the coming weeks that examine individual topics. Some of the insights are less than encouraging, as the issues that plague the tech world in general, such as harassment and gender diversity, are present if not exaggerated in open source projects.&lt;/p&gt;

&lt;p&gt;For today though, we'll focus on a positive finding: the ever-growing pervasiveness and acceptance of open source software. As indicated by the below graph, the vast majority of respondents reported that they use open source software at work. Moreover, "most report that their employers accept or encourage use of open source applications (82%) and dependencies in their code base (84%)."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U5ZclX7g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d1ax1i5f2y3x71.cloudfront.net/items/2B2O3T3d3h0J2N2l1s13/Image%25202017-06-02%2520at%25201.18.07%2520PM.png%3FX-CloudApp-Visitor-Id%3D2119651%26v%3D0c4a093d" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U5ZclX7g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d1ax1i5f2y3x71.cloudfront.net/items/2B2O3T3d3h0J2N2l1s13/Image%25202017-06-02%2520at%25201.18.07%2520PM.png%3FX-CloudApp-Visitor-Id%3D2119651%26v%3D0c4a093d" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These figures speak to the journey open source software has taken in the past two decades from a questionable standard to something that's widely tolerated if not preferred today. As the &lt;a href="https://bits.blogs.nytimes.com/2015/06/15/ibm-invests-to-help-open-source-big-data-software-and-itself/"&gt;New York Times reports&lt;/a&gt;, "in 2000, the open-source operating system Linux was viewed askance in many corporations as an oddball creation and even legally risky to use, since the open-source ethos prefers sharing ideas rather than owning them." &lt;/p&gt;

&lt;p&gt;The collective corporate tune has changed though. These days, "where free, collaborative software projects were once the flags flown by indie developers bucking corporate computing, today even companies like Exxon Mobil, Wal-Mart, and Wells Fargo are releasing their own open source tools," &lt;a href="https://www.wired.com/2017/06/diversity-open-source-even-worse-tech-overall/"&gt;via Wired&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There's much more to discuss from the survey's results, so keep an eye out for more posts on &lt;a href="https://dev.to/"&gt;dev.to&lt;/a&gt;, or better yet, write them yourselves. I'll be diving into the data under the &lt;a href="https://dev.to/t/data"&gt;data&lt;/a&gt; and &lt;a href="https://dev.to/t/ossurvey"&gt;ossurvey&lt;/a&gt; tags. Let's keep the conversation going.&lt;/p&gt;

</description>
      <category>data</category>
      <category>ossurvey</category>
    </item>
    <item>
      <title>What's the best software for creating flowcharts and other visuals to document application logic?</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Wed, 24 May 2017 21:54:37 +0000</pubDate>
      <link>https://dev.to/walker/whats-the-best-software-for-creating-flowcharts-and-other-visuals-to-document-application-logic</link>
      <guid>https://dev.to/walker/whats-the-best-software-for-creating-flowcharts-and-other-visuals-to-document-application-logic</guid>
      <description>&lt;p&gt;I'm looking to create some flowcharts, but I'm only aware of the obvious solutions like PowerPoint or Keynote. Does anyone have any suggestions?&lt;/p&gt;

&lt;p&gt;Here's an example of a decently complex flowchart, via Slack:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp3u4qeheu9of0e4f7njj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp3u4qeheu9of0e4f7njj.jpg" width="800" height="762"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Google announces support for Kotlin on Android, now what?</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Wed, 17 May 2017 19:50:55 +0000</pubDate>
      <link>https://dev.to/walker/google-announces-support-for-kotlin-on-android-now-what</link>
      <guid>https://dev.to/walker/google-announces-support-for-kotlin-on-android-now-what</guid>
      <description>&lt;p&gt;At their annual I/O conference in the Bay Area, Google announced this afternoon that Android would now support the Kotlin language. Kotlin, released by the software company JetBrains in 2011, is a relatively new language with growing popularity among developers.&lt;/p&gt;

&lt;p&gt;Liquid error: internal&lt;/p&gt;

&lt;p&gt;Supporting Kotlin was viewed as a logical next step for Google by many in the tech space. The language is interoperable with Java, allowing developers to mix the languages when writing code, and already has legions of loyal users who appreciate its modern features and clean syntax. A quick peak at the rising incidence of "Kotlin" tags on Stack Overflow provides further evidence of the language's upswing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Pl1XPCcA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/xyf0igj1fn4r40fap73a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Pl1XPCcA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/xyf0igj1fn4r40fap73a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, Java still dwarfs Kotlin in absolute popularity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--etJBaEla--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/gwbmf5vf7lc5sz5rpj6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--etJBaEla--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/gwbmf5vf7lc5sz5rpj6c.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.jetbrains.com/kotlin/2017/05/kotlin-on-android-now-official/"&gt;On their own blog&lt;/a&gt;, JetBrains announced the news as "a chance to use a modern and powerful language, helping solve common headaches such as runtime exceptions and source code verbosity."&lt;/p&gt;

&lt;p&gt;The announcement has been well received so far. Commenters in the Hacker News thread anticipated "a good Kotlin native experience" thread expressed excitement over the opportunity to use "Java's ecosystem without actually having to write Java."&lt;/p&gt;

&lt;p&gt;The move to support Kotlin natively has a lot of parallels with Apple's release of the Swift programming language to give the Apple development experience a boost. While the move has different repercussions because Kotlin was not developed by Google, it should nonetheless provide a big breath of fresh air to their developer community.&lt;/p&gt;

&lt;p&gt;One has to wonder about Google's &lt;a href="https://en.wikipedia.org/wiki/Oracle_America,_Inc._v._Google,_Inc."&gt;legal battle with Oracle&lt;/a&gt; over their use of certain Java APIs.&lt;/p&gt;


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

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--E9kbjJz4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/633982902901043201/D2lPJBQn_normal.jpg" alt="K. 👓 profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        K. 👓
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @k4y1s
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      &lt;a href="https://twitter.com/ThePracticalDev"&gt;@ThePracticalDev&lt;/a&gt; lol, is this because oft the beef with Oracle? :D
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      18:40 PM - 17 May 2017
    &lt;/div&gt;


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


&lt;h2&gt;
  
  
  So what now?
&lt;/h2&gt;

&lt;p&gt;There are a lot of great reasons to make Kotlin the next programming language you learn, but where to start? Naturally, this isn't the first &lt;a href="https://dev.to/"&gt;dev.to&lt;/a&gt; has heard of Kotlin. Graham Cox vouched for the language in the beginning of the year:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/grahamcox82" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ooOsmuPN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--esTa11e7--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/937/6Cz4rVt2.jpg" alt="grahamcox82 image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/grahamcox82/why-i-prefer-kotlin" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Why I prefer Kotlin&lt;/h2&gt;
      &lt;h3&gt;Graham Cox ・ Jan  2 '17 ・ 2 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#100daysofcode&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kotlin&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#java&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Later, Daniele Botillo took us through some basic examples:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/dbottillo" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kf8zKwXg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--fReKo29N--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/3026/uadOkZCL.jpg" alt="dbottillo image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/dbottillo/kotlin-by-examples-class-and-properties" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Kotlin by examples: Class and Properties&lt;/h2&gt;
      &lt;h3&gt;Daniele Bottillo ・ Feb 21 '17 ・ 3 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#android&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kotlin&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#java&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Hadi Hari appeared on a great episode of &lt;a href="https://dev.to/sedaily"&gt;Software Engineering Daily&lt;/a&gt; to discuss Kotlin. I highly recommend it to get a deep dive into the origins of Kotlin and why a company would develop a new language in the first place.&lt;/p&gt;


&lt;div class="podcastliquidtag"&gt;
  &lt;div class="podcastliquidtag__info"&gt;
    &lt;a href="/sedaily/kotlin-with-hadi-hariri"&gt;
      &lt;h1 class="podcastliquidtag__info__episodetitle"&gt;Kotlin with Hadi Hariri&lt;/h1&gt;
    &lt;/a&gt;
    &lt;a href="/sedaily"&gt;
      &lt;h2 class="podcastliquidtag__info__podcasttitle"&gt;
        Software Engineering Daily  

      &lt;/h2&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;div id="record-kotlin-with-hadi-hariri" class="podcastliquidtag__record"&gt;
    &lt;img class="button play-butt" id="play-butt-kotlin-with-hadi-hariri" src="https://res.cloudinary.com/practicaldev/image/fetch/s--1SirfZpJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/playbutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png" alt="play"&gt;
    &lt;img class="button pause-butt" id="pause-butt-kotlin-with-hadi-hariri" src="https://res.cloudinary.com/practicaldev/image/fetch/s--8YU2a2mP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/pausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png" alt="pause"&gt;
    &lt;img class="podcastliquidtag__podcastimage" id="podcastimage-kotlin-with-hadi-hariri" alt="Software Engineering Daily" src="https://res.cloudinary.com/practicaldev/image/fetch/s--y4AqXlcr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--ix_1Dehw--/c_fill%2Cf_auto%2Cfl_progressive%2Cq_auto/https://dev-to-uploads.s3.amazonaws.com/uploads/podcast/image/1/lM7fSW24.jpg"&gt;
  &lt;/div&gt;

  &lt;div class="hidden-audio" id="hidden-audio-kotlin-with-hadi-hariri"&gt;
  
    
    Your browser does not support the audio element.
  
  &lt;div id="progressBar" class="audio-player-display"&gt;
    &lt;a href="/sedaily/kotlin-with-hadi-hariri"&gt;
      &lt;img id="episode-profile-image" alt="Kotlin with Hadi Hariri" width="420" height="420" src="https://res.cloudinary.com/practicaldev/image/fetch/s--qYOvdQJY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--liq3v5bi--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_420%2Cq_auto%2Cw_420/https://dev-to-uploads.s3.amazonaws.com/uploads/podcast/image/1/lM7fSW24.jpg"&gt;
      &lt;img id="animated-bars" src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZzrPEFmt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev.to/assets/animated-bars-4e8c57c8b58285fcf7d123680ad8af034cd5cd43b4d9209fe3aab49d1e9d77b3.gif" alt="animated volume bars"&gt;
    &lt;/a&gt;
    &lt;span id="barPlayPause"&gt;
      &lt;img class="butt play-butt" alt="play" src="https://res.cloudinary.com/practicaldev/image/fetch/s--1SirfZpJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/playbutt-5e444a2eae28832efea0dec3342ccf28a228b326c47f46700d771801f75d6b88.png"&gt;
      &lt;img class="butt pause-butt" alt="pause" src="https://res.cloudinary.com/practicaldev/image/fetch/s--8YU2a2mP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/pausebutt-bba7cb5f432cfb16510e78835378fa22f45fa6ae52a624f7c9794fefa765c384.png"&gt;
    &lt;/span&gt;
    &lt;span id="volume"&gt;
      &lt;span id="volumeindicator" class="volume-icon-wrapper showing"&gt;
        &lt;span id="volbutt"&gt;
          &lt;img alt="volume" class="icon-img" height="16" width="16" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vTou7JP3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/volume-cd20707230ae3fc117b02de53c72af742cf7d666007e16e12f7ac11ebd8130a7.png"&gt;
        &lt;/span&gt;
        &lt;span class="range-wrapper"&gt;
          
        &lt;/span&gt;
      &lt;/span&gt;
      &lt;span id="mutebutt" class="volume-icon-wrapper hidden"&gt;
        &lt;img alt="volume-mute" class="icon-img" height="16" width="16" src="https://res.cloudinary.com/practicaldev/image/fetch/s--OX5NjT0t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/volume-mute-8f08ec668105565af8f8394eb18ab63acb386adbe0703afe3748eca8f2ecbf3b.png"&gt;
      &lt;/span&gt;
      &lt;span class="speed" id="speed"&gt;1x&lt;/span&gt;
    &lt;/span&gt;
    &lt;span class="buffer-wrapper" id="bufferwrapper"&gt;
      &lt;span id="buffer"&gt;&lt;/span&gt;
      &lt;span id="progress"&gt;&lt;/span&gt;
      &lt;span id="time"&gt;initializing...&lt;/span&gt;
      &lt;span id="closebutt"&gt;×&lt;/span&gt;
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;Any devs out there with experience in Kotlin? Leave your thoughts in the comments!&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>android</category>
      <category>news</category>
    </item>
    <item>
      <title>Stack Overflow released a new mobile app</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Tue, 16 May 2017 15:58:45 +0000</pubDate>
      <link>https://dev.to/walker/stack-overflow-released-a-mobile-app</link>
      <guid>https://dev.to/walker/stack-overflow-released-a-mobile-app</guid>
      <description>&lt;p&gt;Stack Overflow released a mobile app today for iOS and Android:&lt;/p&gt;


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

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--O0Wuzeh---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/643819371656294405/F-pVCbHg_normal.png" alt="Stack Overflow profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Stack Overflow
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @stackoverflow
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Q&amp;amp;A on the go with the new Stack Overflow mobile app. 🍎  iOS → &lt;a href="https://t.co/iNuFRhJd1N"&gt;buff.ly/2qo5cma&lt;/a&gt; 🤖  Android →… &lt;a href="https://t.co/JwUND7EmAJ"&gt;twitter.com/i/web/status/8…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      15:07 PM - 16 May 2017
    &lt;/div&gt;


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


&lt;p&gt;The website's &lt;a href="https://stackoverflow.blog/2017/05/16/stack-overflow-official-app-launches-ios-android/"&gt;blogpost about the release&lt;/a&gt; notes that Stack Exchange has had an app available for several years that included access to Stack Overflow, but this app is designed solely for access to the company's flagship site. &lt;/p&gt;

&lt;p&gt;My first impulse would be to question the utility of a Stack Overflow app, since I'm confident that the vast majority of programmers that rely on the question-answer website do so while they write code on a personal computer and not their phones. Plus, asking a question on Stack Overflow requires users to adhere to somewhat strict protocol and often to use code blocks, special characters, or other non-traditional text that doesn't seem easy to thumb from a phone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tafckiPb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wffe8iccuwkgj4s8b1om.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tafckiPb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/wffe8iccuwkgj4s8b1om.PNG" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That being said, there are plenty of less complicated actions important to the Stack Overflow experience. "Meta" posts about the actual product are popular and often prominently featured—in fact the site devoted &lt;a href="https://meta.stackoverflow.com/questions/349255/stack-overflow-now-has-its-own-app-on-ios-and-android?cb=1"&gt;one to the app's release this morning&lt;/a&gt;. Plus there's plenty of back-and-forth in a question's commentary that could be done easily from a phone.&lt;/p&gt;

&lt;p&gt;It's also important to remember that the lifeblood of Stack Overflow is the class of power users who spend hours a day assisting communities, and not people like me who ask the occasional question. A mobile app might be more useful for such users, and anything that expands the experience for them is likely worth it for Stack Overflow.&lt;/p&gt;

&lt;p&gt;What do you guys think?&lt;/p&gt;

</description>
      <category>stackoverflow</category>
      <category>news</category>
    </item>
    <item>
      <title>Stack Overflow just released a tool called "Trends" that tracks the popularity of programming terms over time.</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Thu, 11 May 2017 15:47:17 +0000</pubDate>
      <link>https://dev.to/walker/stack-overflow-just-released-a-tool-called-trends-which-tracks-the-popularity-of-programming-terms-over-time</link>
      <guid>https://dev.to/walker/stack-overflow-just-released-a-tool-called-trends-which-tracks-the-popularity-of-programming-terms-over-time</guid>
      <description>&lt;p&gt;It can be frustrating to post a question on Stack Overflow while worrying if the library or language you're asking about is popular enough to get the quality response you're looking for. And it can be reassuring to put up a question about widely used tools that is likely to get answered.&lt;/p&gt;

&lt;p&gt;You can now capture those sentiments graphically with the &lt;a href="https://insights.stackoverflow.com/trends"&gt;Stack Overflow Trends&lt;/a&gt; tool, which, given a set of tags, will whip up a chart that shows their popularity over time going back to 2009. Here's one of their suggested searches, which shows the trends for Javascript frameworks:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ns6aRT8W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/kne4gu5rmqxl1sqhy6o7.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ns6aRT8W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/kne4gu5rmqxl1sqhy6o7.svg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, Angular and React have been increasingly asked about in Stack Overflow questions since about 2015, while jQuery's relevance has steadily declined in the same time period.&lt;/p&gt;

&lt;p&gt;Another pre-made chart shows the emergence of technologies in the data science realm:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mt9cDUMA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/imte6xt1j5bto5s7cw30.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mt9cDUMA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/imte6xt1j5bto5s7cw30.svg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The statistical programming language R has become much more prevalent on Stack Overflow, as has the Python package pandas, while MATLAB has struggled to stay above water. More recently, questions surrounding machine learning library TensorFlow have heated up.&lt;/p&gt;

&lt;p&gt;Of course, it's more fun to come up with your own queries. Here's one showing every iOS release since iOS 7 along with a general iOS tag:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8j2weG3M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6pjtrbvilnr2ju91nbf8.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8j2weG3M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6pjtrbvilnr2ju91nbf8.svg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each iteration has a personal peak around its release in the fall, only to be replaced in the next calendar year. Meanwhile, the general iOS tag is relatively stable.&lt;/p&gt;

&lt;p&gt;Keeping an eye on emerging technologies is an important part of being a developer, no matter what language you're working in. It's also a worthwhile intellectual exercise to wonder why certain tools decline and others replace them. So give the Stack Overflow Trends tool a try and let us know what you can dig up—I'm sure there are findings worth blogging about!&lt;/p&gt;

</description>
      <category>stackoverflow</category>
      <category>data</category>
      <category>languages</category>
    </item>
    <item>
      <title>The 500-foot Cab Ride: Using BigQuery to find out how dirty (sinister?) NYC's cab ride data is</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Fri, 28 Apr 2017 18:53:47 +0000</pubDate>
      <link>https://dev.to/walker/the-500-foot-cab-ride-using-bigquery-to-find-out-how-dirty-sinister-nycs-cab-ride-data-is</link>
      <guid>https://dev.to/walker/the-500-foot-cab-ride-using-bigquery-to-find-out-how-dirty-sinister-nycs-cab-ride-data-is</guid>
      <description>

&lt;p&gt;I may be a few years late to this, but Google's BigQuery is freakin' awesome. The data warehouse is the home to a bunch of really neat datasets which users can traverse shockingly quickly (and for free, up to the first terabyte). In the past few weeks, I've explored the GitHub dataset to &lt;a href="https://dev.to/walker/using-googles-bigquery-to-better-understand-the-python-ecosystem"&gt;find popular Python packages&lt;/a&gt; and the &lt;a href="https://dev.to/walker/-this-combing-through-183-million-commits-to-find-out-when-and-how-developers-us-the-f-bomb"&gt;frequency of cussing programmers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Today, I'm going to recreate &lt;a href="https://perplex.city/the-500-foot-cab-ride-d68bd708b39a"&gt;a blogpost I wrote last year&lt;/a&gt; about cab rides in New York City. When I realized the Taxi &amp;amp; Limousine Commission published their ride data, including starting and ending geographic coordinates, I figured there were some interesting patterns waiting to be discovered.&lt;/p&gt;

&lt;p&gt;In particular, I wondered how often people took cab rides for ludicrously short distances (less than a tenth of a mile) and how those rides might differ from more conventional rides. I mostly expected geographic and timing discrepancies: surely only drunken late-night patrons or residents of wealthy neighborhoods could justify taking a cab a few hundred feet, right?&lt;/p&gt;

&lt;p&gt;While there wasn't much evidence of that hypothesis, I did find something else that was peculiar. Let's split every yellow cab ride since 2009 into those that were longer than a tenth of a mile ("normal") and those that weren't ("micro-rides"), and also into those that have complete geolocational info (pick-up and drop-off both present) and those that don't.&lt;/p&gt;

&lt;p&gt;Within those four cohorts, we'll count how often the ride is paid for in cash, how often the fare is $50 or more, and how often that fare is negotiated.&lt;/p&gt;

&lt;p&gt;(For the record, this command queried over a billion rows in under six seconds.)&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT 
  CASE WHEN trip_distance &amp;gt; 0.1 THEN "normal" ELSE "micro-ride" END AS type,
  CASE WHEN pickup_longitude = 0 OR pickup_latitude = 0 
        OR dropoff_longitude = 0 OR dropoff_latitude = 0 
        THEN 'yes' ELSE 'no' END AS missing_geo,
  COUNT(*) AS count,
  STRING(ROUND(SUM(CASE WHEN payment_type = 'CSH' THEN 1 ELSE 0 END)/count*100, 0)) + '%' AS cash,
  STRING(ROUND(SUM(CASE WHEN total_amount  &amp;gt;= 50 THEN 1 ELSE 0 END)/count*100, 2)) + '%' AS fifty_plus,
  STRING(ROUND(SUM(CASE WHEN rate_code = '5' THEN 1 ELSE 0 END)/count*100,2)) + '%' AS negotiated
FROM [nyc-tlc:yellow.trips]
GROUP BY type, missing_geo
ORDER BY type DESC, missing_geo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;type&lt;/th&gt;
&lt;th&gt;missing_geo&lt;/th&gt;
&lt;th&gt;count&lt;/th&gt;
&lt;th&gt;cash&lt;/th&gt;
&lt;th&gt;fifty_plus&lt;/th&gt;
&lt;th&gt;negotiated&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;normal&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;1,076,851,430&lt;/td&gt;
&lt;td&gt;49.00%&lt;/td&gt;
&lt;td&gt;2.11%&lt;/td&gt;
&lt;td&gt;0.10%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;normal&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;20,417,733&lt;/td&gt;
&lt;td&gt;48.00%&lt;/td&gt;
&lt;td&gt;2.21%&lt;/td&gt;
&lt;td&gt;0.19%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;micro-ride&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;9,828,272&lt;/td&gt;
&lt;td&gt;56.00%&lt;/td&gt;
&lt;td&gt;15.07%&lt;/td&gt;
&lt;td&gt;8.32%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;micro-ride&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;1,682,028&lt;/td&gt;
&lt;td&gt;55.00%&lt;/td&gt;
&lt;td&gt;25.53%&lt;/td&gt;
&lt;td&gt;26.63%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Some of these trends are predictable. There are about 100 normal rides for every micro-ride, in which cash is used about half the time. But some of them are a bit odd. Why are there so many instances of micro-rides costing more than $50 when they by definition should be much cheaper? And why is that trend exaggerated for micro-rides missing their geo-locational data? And why does missing geo data  increase negotiation frequency so much more for micro-rides than for normal rides?&lt;/p&gt;

&lt;p&gt;There might be reasonable explanations for all this. But at first sight, I convinced myself that something sinister was behind this data: In the dark and complex world of New York City, there are a certain class of trips where either the driver or the passenger does not want their exact location logged, and these are the same rides that are paid for in cash at a negotiated price. Feel free to fill in the details with tales of crooked cabbies, brick-shaped packages, and loaded firearms.&lt;/p&gt;

&lt;p&gt;Or maybe the rows with missing coordinates or unlikely distances have just been corrupted,in which case our question becomes: is the data dirty in a conventional sense or in a criminal manner?&lt;/p&gt;


</description>
      <category>bigquery</category>
      <category>datascience</category>
      <category>nyc</category>
      <category>sql</category>
    </item>
    <item>
      <title>Working Smart: What performance metrics do developers value and when do they feel most productive?</title>
      <dc:creator>Walker Harrison</dc:creator>
      <pubDate>Fri, 14 Apr 2017 18:24:20 +0000</pubDate>
      <link>https://dev.to/walker/working-smart-what-performance-metrics-do-developers-value-and-when-do-they-feel-most-productive</link>
      <guid>https://dev.to/walker/working-smart-what-performance-metrics-do-developers-value-and-when-do-they-feel-most-productive</guid>
      <description>&lt;p&gt;If you are reading this article, you probably care about becoming a better developer and producing at a more efficient rate. It is not always clear, however, what the best means of measuring performance in this field are. Unfortunately, number of dev.to articles consulted hasn't (yet) caught much speed as a reliable performance metric — but there are some existing measurements that can be explored. &lt;/p&gt;

&lt;p&gt;As part of their &lt;a href="https://stackoverflow.com/insights/survey/2017#evaluating-developers" rel="noopener noreferrer"&gt;2017 Developer Survey&lt;/a&gt;, Stack Overflow asked users to pick the most important ways to evaluate a project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd1ax1i5f2y3x71.cloudfront.net%2Fitems%2F2d0d1P3Z3G3j2d3Z3Z0G%2FScreen%2520Shot%25202017-04-14%2520at%252012.54.44%2520PM.png%3FX-CloudApp-Visitor-Id%3D2119651" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd1ax1i5f2y3x71.cloudfront.net%2Fitems%2F2d0d1P3Z3G3j2d3Z3Z0G%2FScreen%2520Shot%25202017-04-14%2520at%252012.54.44%2520PM.png%3FX-CloudApp-Visitor-Id%3D2119651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While these results aren't groundbreaking, there are still some neat trends. Developers serve the customer (72%) and the product (41%) before sales numbers (28%), perhaps with the understanding that perfectly good products can underperform financially and vice versa. &lt;/p&gt;

&lt;p&gt;They also value efficiency, and for that reason questionable counting statistics like "Lines of code" (6%), "Commit frequency" (9%), and "Hours worked" (16%) aren't that highly valued. In terms of impressing the right people, devs trust their immediate peers (55%) more than their superiors (36%) or even themselves (35%).&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-837749167049031681-186" src="https://platform.twitter.com/embed/Tweet.html?id=837749167049031681"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-837749167049031681-186');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=837749167049031681&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;So how do you make sure to hire people that will execute on these priorities? The survey also asked how employers should recruit and evaluate potential hires:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd1ax1i5f2y3x71.cloudfront.net%2Fitems%2F001J0y2i3H3i271b3V45%2FScreen%2520Shot%25202017-04-14%2520at%25201.05.31%2520PM.png%3FX-CloudApp-Visitor-Id%3D2119651" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd1ax1i5f2y3x71.cloudfront.net%2Fitems%2F001J0y2i3H3i271b3V45%2FScreen%2520Shot%25202017-04-14%2520at%25201.05.31%2520PM.png%3FX-CloudApp-Visitor-Id%3D2119651"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Interestingly, the top two answers, "Communication skills" (4.10 on a five-point scale) and "Track record of getting things done" (4.09), aren't usually explicitly quantifiable criteria. They're also things you can get across before even getting an interview using a strong resume or cover letter, respectively. Of course, hard skills are also very important, as we see knowledge of algorithms, data, and frameworks filling out the next two top spots.&lt;/p&gt;

&lt;p&gt;Once you've picked the right people, you need to ensure they're collaborating effectively, which is why Stack Overflow also asked about favored development practices: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcl.ly%2F2l0r1k0k330R%2FScreen%2520Shot%25202017-04-14%2520at%25201.15.02%2520PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcl.ly%2F2l0r1k0k330R%2FScreen%2520Shot%25202017-04-14%2520at%25201.15.02%2520PM.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of the three questions, there's the least parity in this graph. The majority of programmers appreciate the speed and flexibility offered by agile methods (77%) and scrums (65%) over older school approaches like waterfall (27%) that can feel slow-footed and unresponsive in today's accelerated environment.&lt;/p&gt;

&lt;p&gt;In total, this section of the survey serves as a drive-by blueprint for getting things done. Hire programmers that communicate well and have documented successes with the right tools; allow them to iterate often and adapt quickly; and worship the customer or user's experience while understanding time and budget restraints.&lt;/p&gt;

&lt;p&gt;It's almost as simple as...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fcs483mkag9pbdiiv557g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fcs483mkag9pbdiiv557g.png"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>management</category>
      <category>data</category>
      <category>stacksurvey17</category>
    </item>
  </channel>
</rss>
