<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Graham Wheeler's Random Forest</title><link>https://www.grahamwheeler.com/</link><description>Recent content on Graham Wheeler's Random Forest</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Wed, 19 Apr 2023 23:39:00 +0000</lastBuildDate><atom:link href="https://www.grahamwheeler.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Siriusly?</title><link>https://www.grahamwheeler.com/post/siriusly/</link><pubDate>Wed, 19 Apr 2023 23:39:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/siriusly/</guid><description>My wife has SiriusXM in her car, and I really like their channel 53, SiriusXM Chill. I have struggled to find something similar; the closest I have found is Chilltrax, which was apparently started by the same people who originally created the Sirius channel. Chilltrax is available on TuneIn, to which I have a premium subscription, but for some reason it almost never works on TuneIn in my Tesla.
I finally caved and figured I would subscribe to SiriusXM, just for this channel.</description></item><item><title>Creating Type Stubs for Scientific Python (Part 4)</title><link>https://www.grahamwheeler.com/post/creating-type-stubs-for-scientific-python-part-4/</link><pubDate>Sat, 03 Dec 2022 11:36:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/creating-type-stubs-for-scientific-python-part-4/</guid><description>The Story Thus Far Its been a while since the last post, mainly because I hit a speed bump along the way, which I have since addressed. It&amp;rsquo;s worth recapping what was covered before.
Scientific Python pacckages like matplotlib don&amp;rsquo;t have much in the way of inline type annotations, nor do they have good type stubs available, but those would be very useful to improve the experience using them in code editors they do have a standard form of docstrings, numpydoc format, and that includes parameter and return value descriptions that most of the time include descriptions of the types (albeit in an informal way) I decided to build a tool to extract these and try to convert them to formal type annotations and generate stubs the extraction part, and the &amp;lsquo;insert converted annotations in to make stubs&amp;rsquo; part, are reasonably straightforward, thanks in particular to Instagram&amp;rsquo;s libCST library for concrete syntax tree visiting and transforming I write the extracted descriptions plus my best effort at turning these into formal types into &amp;lsquo;.</description></item><item><title>Creating Type Stubs for Scientific Python (Part 3)</title><link>https://www.grahamwheeler.com/post/creating-type-stubs-for-scientific-python-part-3/</link><pubDate>Tue, 06 Sep 2022 15:36:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/creating-type-stubs-for-scientific-python-part-3/</guid><description>Generating Output for a Whole Package The approach we took in the last post to finding the files for a package is not strictly correct. We imported the package, then looked at the file associated with the package, and if it was an __init__.py file, added all the other .py files in the same directory. This works in many cases but not all. It specifically did work for matplotlib.axes which is the example I have used until now.</description></item><item><title>Creating Type Stubs for Scientific Python (Part 2)</title><link>https://www.grahamwheeler.com/post/creating-type-stubs-for-scientific-python-part-2/</link><pubDate>Mon, 29 Aug 2022 16:47:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/creating-type-stubs-for-scientific-python-part-2/</guid><description>Welcome back to this series on creating type stubs for scientific Python. In the last post we looked at using LibCST to generate skeleton type stubs, with a little bit of inference from value assignments. In this post we will dive into the process of using numpydoc-format docstrings.
An Intro to numpydoc The easiest way to get a feel for numpydoc-format docstrings is to look at an example:
def legend_elements(self, prop=&amp;#34;colors&amp;#34;, num=&amp;#34;auto&amp;#34;, fmt=None, func=lambda x: x, **kwargs): &amp;#34;&amp;#34;&amp;#34; Create legend handles and labels for a PathCollection.</description></item><item><title>Creating Type Stubs for Scientific Python (Part 1)</title><link>https://www.grahamwheeler.com/post/creating-type-stubs-for-scientific-python-1/</link><pubDate>Thu, 25 Aug 2022 21:23:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/creating-type-stubs-for-scientific-python-1/</guid><description>This is part 1 of what will be two or three posts. In this post, I cover building a basic type stub generator; in the next post, I&amp;rsquo;ll get into handling scientific Python packages specifically.
Why I Care About Python Type Stubs One of the teams I manage in my day job is the Pylance team, who build the Python language server for Visual Studio and Visual Studio Code. Pylance is built on top of the static type checker pyright, but where pyright focuses on finding errors, Pylance is focused on providing a great editor experience (as well as finding errors, but the editor experience is paramount).</description></item><item><title>Github reports for backlog management</title><link>https://www.grahamwheeler.com/post/github-reports/</link><pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/github-reports/</guid><description>A couple of years ago we decided we wanted to make sure that we were responding promptly to issues that users created on our GitHub repos. In particular, a 3-business day SLA was what we thought would be appropriate. Making sure that we did that day after day could be a bit tedious, so I thought it made sense to automate it.
We had a vast trove of GitHub data in our Kusto data warehouse for every repository owned by Microsoft.</description></item><item><title>Moving my blog to Hugo</title><link>https://www.grahamwheeler.com/post/moving-to-hugo/</link><pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/moving-to-hugo/</guid><description>I have been using Nikola for about the past 8 years for my blog, but have been eyeing the development of Hugo and thinking I might want to migrate, and have finally done it. There&amp;rsquo;s nothing wrong with Nikola; I think it&amp;rsquo;s actually less work than Hugo because it handles .ipynb Jupyter notebooks very seamlessly, but Hugo is super-fast so you can work in a &amp;rsquo;live-releoad&amp;rsquo; mode which I like. So this weekend I finally did it.</description></item><item><title>Tests that Don't Suck</title><link>https://www.grahamwheeler.com/post/tests-that-dont-suck/</link><pubDate>Sat, 26 Jun 2021 16:19:57 +0000</pubDate><guid>https://www.grahamwheeler.com/post/tests-that-dont-suck/</guid><description>tl;dr This is a long post. I think its valuable reading, but I can also sum up my recommendations as:
Build good but narrow APIs that are the public contracts for your code. Focus your tests on these. Don&amp;rsquo;t focus on testing at the level of methods, classes, etc, except insofar as these represent the public APIs, with the exception of complex algorithms that may need particular attention.
Introduction This post is based on a talk I gave to my team in an effort to establish a common approach to thinking about automated tests: specifically those we would have labeled as &amp;lsquo;unit tests&amp;rsquo;.</description></item><item><title>Prioritization, Estimating and Planning</title><link>https://www.grahamwheeler.com/post/prioritization-estimating-and-planning/</link><pubDate>Wed, 20 May 2020 15:56:05 +0000</pubDate><guid>https://www.grahamwheeler.com/post/prioritization-estimating-and-planning/</guid><description>This post came out of a talk I gave to a group of mentees, prompted by questions they had around how to do estimation and how to know they were working on the right priorities. These are complex questions to which there are no single answers, but I aimed to give them some tools that could help.
Prioritizing “If it’s a priority you’ll find a way. If it isn’t, you’ll find an excuse.</description></item><item><title>Flow</title><link>https://www.grahamwheeler.com/post/flow/</link><pubDate>Wed, 02 Jan 2019 21:50:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/flow/</guid><description>&amp;ldquo;A bad system will beat a good person every time&amp;rdquo; - Edwards Deming
This post is based on a tech talk I gave at eBay in early 2018. eBay had gone through a company-wide transformation to agile processes (where before this had been team-specific) and the main points I wanted to make where that it was important to make the hidden things the consumed people&amp;rsquo;s time visible, explicit, and properly prioritized, if we want to improve throughput or flow.</description></item><item><title>Personality Patterns</title><link>https://www.grahamwheeler.com/post/personality-and-relationships2/</link><pubDate>Sat, 14 Jul 2018 15:15:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/personality-and-relationships2/</guid><description>The last post in this series covered the Five Factor Model of personality. In this post we&amp;rsquo;ll dig into personality patterns that people can exhibit. Everyone has some combination of the five factors, but how does that combination manifest as a personality type?
There are many different models of personality types, but one used in psychology and psychoanalysis is the categorization in the DSM - the Diagnostic and Statistical Manual of Mental Disorders.</description></item><item><title>The "Tyranny" of Metrics</title><link>https://www.grahamwheeler.com/post/tyranny-of-metrics/</link><pubDate>Thu, 12 Jul 2018 18:04:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/tyranny-of-metrics/</guid><description>Jerry Muller recently wrote a popular book titled &amp;ldquo;The Tyranny of Metrics&amp;rdquo;. He makes a number of good arguments for why metrics, if not used properly, can have unintended consequences. For example, the body count metric that the US military optimized for in the Vietnam war caused enormous damage while losing the hearts and minds of the populace and resulting in an ignominious defeat. Muller argues that metrics are too often used as a substitute for good judgment.</description></item><item><title>Managing Engineering and Data Science Agile Teams</title><link>https://www.grahamwheeler.com/post/managing-data-science-and-engineering/</link><pubDate>Tue, 03 Jul 2018 21:53:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/managing-data-science-and-engineering/</guid><description>It is very common in modern software engineering organizations to use agile approaches to managing teamwork. At both Microsoft and eBay teams I have managed have used Scrum, which is a reasonably simple and effective approach that offers a number of benefits, such as timeboxing, regular deployments (not necessarily continuous but at least periodic), a buffer between the team and unplanned work, an iterative continuous improvement process through retrospectives, and metrics that can quickly show whether the team is on track or not.</description></item><item><title>Basic Machine Learning with SciKit-Learn</title><link>https://www.grahamwheeler.com/post/basic-machine-learning/</link><pubDate>Sun, 29 Apr 2018 16:40:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/basic-machine-learning/</guid><description>This is the fourth post in a series based off my [Python for Data Science bootcamp]((https://github.com/gramster/pythonbootcamp) I run at eBay occasionally. The other posts are:
a Python crash course using Jupyter exploratory data analysis. In this post we will look into the basics of building ML models with Scikit-Learn. Scikit-Learn is the most widely used Python library for ML, especially outside of deep learning (where there are several contenders and I recommend using Keras, which is a package that provides a simple API on top of several underlying contenders like TensorFlow and PyTorch).</description></item><item><title>Exploratory Data Analysis with NumPy and Pandas</title><link>https://www.grahamwheeler.com/post/exploratory-data-analysis-with-numpy-and-pandas/</link><pubDate>Sat, 28 Apr 2018 12:40:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/exploratory-data-analysis-with-numpy-and-pandas/</guid><description>This is the third post in a series based off my Python for Data Science bootcamp I run at eBay occasionally. The other posts are:
a Python crash course using Jupyter introductory machine learning. This is an introduction to the NumPy and Pandas libraries that form the foundation of data science in Python. These libraries, especially Pandas, have a large API surface and many powerful features. There is now way in a short amount of time to cover every topic; in many cases we will just scratch the surface.</description></item><item><title>Using Jupyter</title><link>https://www.grahamwheeler.com/post/using-jupyter/</link><pubDate>Tue, 17 Apr 2018 21:35:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/using-jupyter/</guid><description>This is the second post in a series based off my Python for Data Science bootcamp I run at eBay occasionally. The other posts are:
a Python crash course exploratory data analysis. introductory machine learning. Jupyter is an interactive computing environment that allows users to create heterogeneous documents called notebooks that can mix executable code, markdown text with MathJax, multimedia, static and interactive charts, and more. A notebook is typically a complete and self-contained record of a computation, and can be converted to various formats and shared with others.</description></item><item><title>The 5-Factor Model of Personality</title><link>https://www.grahamwheeler.com/post/personality-and-relationships1/</link><pubDate>Sun, 15 Apr 2018 21:35:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/personality-and-relationships1/</guid><description>Shankar Vedantam has a great NPR show/podcast, &amp;ldquo;The Hidden Brain&amp;rdquo;, and occasional appearances on NPR&amp;rsquo;s All Things Considered. In December he had a show on Evaluating Personality Tests. It was enjoyable, especially the Harry Potter Sorting Hat references, but I felt it was a missed opportunity because of the focus on Myers-Briggs, and the fact that he mentioned the Big-5 model only in passing.
In fact, Myers-Briggs is not taken very seriously in the psychology world, and Vedantam surprised me with spending so much time on it, given his show&amp;rsquo;s focus on research in psychology.</description></item><item><title>A Python Crash Course</title><link>https://www.grahamwheeler.com/post/python-crash-course/</link><pubDate>Thu, 12 Apr 2018 20:10:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/python-crash-course/</guid><description>I&amp;rsquo;ve been teaching a crash course in data science with Python, which starts off with learning Python itself. The target audience is Java programmers (generally senior level) so its assumed that things like classes and methods are well understood. The focus is mostly on what is different with Python. I teach it using Jupyter notebooks but the content is useful as a blog post too so here we go.
The other parts are:</description></item><item><title>Blogging again</title><link>https://www.grahamwheeler.com/post/blogagain/</link><pubDate>Wed, 11 Apr 2018 21:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/blogagain/</guid><description>Well, it&amp;rsquo;s been quite a while since I last blogged. My Zite project is not dead; it&amp;rsquo;s actually up and running well as a personal aggregator but not ready for multi-user access, and I&amp;rsquo;m not sure when it might be. But I&amp;rsquo;ve been feeling a bit of an itch to start blogging again so here goes.
I have some material already lined up: I&amp;rsquo;ve been teaching an introductory data science bootcamp at work and thought the notebooks from that could be useful blog posts in and of themselves.</description></item><item><title>Building a Zite Replacement (Part 11)</title><link>https://www.grahamwheeler.com/post/zite-replacement-11/</link><pubDate>Sat, 23 Apr 2016 09:15:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-11/</guid><description>It&amp;rsquo;s been a while since I worked on this but it is still on my mind a lot. I&amp;rsquo;ve been mulling over ways to improve categorization without the semi-supervised tweaking I&amp;rsquo;ve had to do.
Just to recap, currently this is what I am doing:
I have a bunch of &amp;lsquo;category exemplars&amp;rsquo;, which are sets of key terms associated with a category. These are the things which currently require some manual work; for each article, I extract the plain text, normalize capitalization, remove stop words, then use tf-idf to extract the set of most significant terms (I&amp;rsquo;m not yet doing stemming although I&amp;rsquo;ll probably start); I then use a distance metric from the exemplars to assign category scores to the articles.</description></item><item><title>Using Jupyter as a Music Notebook</title><link>https://www.grahamwheeler.com/post/using-jupyter-as-a-music-notebook/</link><pubDate>Sat, 27 Feb 2016 20:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/using-jupyter-as-a-music-notebook/</guid><description>I recently started playing guitar again after a long absence and wanted to start making some notes in a digital form. Unfortunately, I didn&amp;rsquo;t find any good tools. There is TeX of course, which can do anything, but I was hoping for something a bit more WYSIWYGy. There are some very good tools available for musical scores (MuseScore, Frescobaldi), but I want something that is more like a traditional notebook with lots of notes interspersed with occasional musical notation (in both traditional and tablature forms).</description></item><item><title>Building a Zite Replacement (Part 10)</title><link>https://www.grahamwheeler.com/post/zite-replacement-10/</link><pubDate>Sat, 07 Nov 2015 08:30:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-10/</guid><description>I&amp;rsquo;ve spent the past few days refining the web server, largely for diagnostic purposes, so it can replace the old TkInter app. I can seen articles for categories or feeds, their rank, and detailed information on why they received particular categories and ranks. This has enabled me to improve the categorization and ranking algorithms. I&amp;rsquo;m at a point now where I feel I need a lot more sources than the ~4000 I have right now, as well as more categories.</description></item><item><title>Building a Zite Replacement (Part 9)</title><link>https://www.grahamwheeler.com/post/zite-replacement-9/</link><pubDate>Sun, 01 Nov 2015 22:07:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-9/</guid><description>Well, I hope you&amp;rsquo;ve all brushed your teeth after all that Halloween candy.
Today I&amp;rsquo;m going to show how I build a simple web server to view my feed articles using node.js and Express, along with MongoDB. I have a simple category classifier which finds the best Jacard similarity (described earlier) to a set of category exemplars (i.e. &amp;lsquo;pseudo-articles&amp;rsquo; for a category containing just key words that are typical for that category).</description></item><item><title>Building a Zite Replacement (Part 8)</title><link>https://www.grahamwheeler.com/post/zite-replacement-8/</link><pubDate>Sat, 31 Oct 2015 20:21:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-8/</guid><description>Happy Halloween, all!
I&amp;rsquo;m sitting here handing out candy and glow necklaces to all comers so its a good time to write a new post.
It&amp;rsquo;s been a while since much happened as I&amp;rsquo;ve been really busy with the beta release of Google Cloud Datalab, which is my day job. But now that is out and it&amp;rsquo;s the weekend and lousy weather here in the Pacific Northwest it&amp;rsquo;s been a good day t get back to things.</description></item><item><title>Node, npm and Express</title><link>https://www.grahamwheeler.com/post/node-npm-express/</link><pubDate>Mon, 26 Oct 2015 21:53:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/node-npm-express/</guid><description>Things have been slow on the blogging front but there has been progress on the Zite replacement. I&amp;rsquo;ll write more about that soon but part of what I have been doing is looking into what server-side technology to use.
As far as a database goes, this seems like a no-brainer. I&amp;rsquo;m dealing with JSON documents that I can either spend some effort on normalizing to put into a SQL database, or simply keep them as is and put them in a database that supports that form, and the obvious choice then is MongoDB, which uses a binary form of JSON.</description></item><item><title>Building a Zite Replacement (Part 7)</title><link>https://www.grahamwheeler.com/post/zite-replacement-7/</link><pubDate>Sun, 04 Oct 2015 21:31:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-7/</guid><description>It&amp;rsquo;s been a while since the last post but I haven&amp;rsquo;t been idle. Here are some of the things I&amp;rsquo;ve been up to:
tweaking the code to parse content better moving from IPython notebook to a library that I can use to do batch operations as well as interactive exploration modifying the code do do parallel fetches - or more precisely, to operate asynchronously; because of the Python GIL I still have just one thread for now.</description></item><item><title>Building a Zite Replacement (Part 6)</title><link>https://www.grahamwheeler.com/post/zite-replacement-6/</link><pubDate>Thu, 24 Sep 2015 20:31:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-6/</guid><description>Following on from last episode, I took some of the clusters that had clear cohesion and made some initial category exemplars. Here are the first few:
#!python {&amp;quot;title&amp;quot;: &amp;quot;Art&amp;quot;, &amp;quot;terms&amp;quot;: [&amp;quot;canvas&amp;quot;, &amp;quot;painting&amp;quot;, &amp;quot;pastels&amp;quot;, &amp;quot;sculpture&amp;quot;, &amp;quot;gallery&amp;quot;, &amp;quot;photography&amp;quot;, &amp;quot;landscape&amp;quot;, &amp;quot;portrait&amp;quot;, &amp;quot;still-life&amp;quot;, &amp;quot;exhibition&amp;quot;, &amp;quot;sketch&amp;quot;]} {&amp;quot;title&amp;quot;: &amp;quot;Literature&amp;quot;, &amp;quot;terms&amp;quot;: [&amp;quot;novel&amp;quot;, &amp;quot;writer&amp;quot;, &amp;quot;plot&amp;quot;, &amp;quot;character&amp;quot;, &amp;quot;author&amp;quot;]} {&amp;quot;title&amp;quot;: &amp;quot;Religion&amp;quot;, &amp;quot;terms&amp;quot;: [&amp;quot;Jesus&amp;quot;, &amp;quot;Christianity&amp;quot;, &amp;quot;Allah&amp;quot;, &amp;quot;Islam&amp;quot;, &amp;quot;Judaism&amp;quot;, &amp;quot;Sufi&amp;quot;, &amp;quot;Hindu&amp;quot;, &amp;quot;karma&amp;quot;, &amp;quot;sprituality&amp;quot;, &amp;quot;faith&amp;quot;, &amp;quot;belief&amp;quot;, &amp;quot;priest&amp;quot;, &amp;quot;pastor&amp;quot;, &amp;quot;prayer&amp;quot;]} {&amp;quot;title&amp;quot;: &amp;quot;Cooking&amp;quot;, &amp;quot;terms&amp;quot;: [&amp;quot;ingredients&amp;quot;, &amp;quot;bake&amp;quot;, &amp;quot;roast&amp;quot;, &amp;quot;fry&amp;quot;, &amp;quot;stir&amp;quot;, &amp;quot;cook&amp;quot;, &amp;quot;cooking&amp;quot;, &amp;quot;recipe&amp;quot;, &amp;quot;flour&amp;quot;, &amp;quot;sugar&amp;quot;, &amp;quot;butter&amp;quot;, &amp;quot;cups&amp;quot;, &amp;quot;cup&amp;quot;, &amp;quot;teaspoon&amp;quot;, &amp;quot;tablespoons&amp;quot;, &amp;quot;vanilla&amp;quot;]} Note that these are deliberately in the same format as the articles in articles.</description></item><item><title>Building a Zite Replacement (Part 5)</title><link>https://www.grahamwheeler.com/post/zite-replacement-5/</link><pubDate>Wed, 23 Sep 2015 22:21:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-5/</guid><description>My initial experience with clustering was somewhat disappointing. Its clear I need to do some tuning of the approach. The first thing I did was to rerun the article download process, but instead of just keeping the top ten terms and dropping their TF-IDF values, I kept them all. I think there are better ways to select the terms to use for Jacard similarity.
For starters, using a fixed number of terms could lead to keeping a wildly different range of TF-IDF values for different articles.</description></item><item><title>Building a Zite Replacement (Part 4)</title><link>https://www.grahamwheeler.com/post/zite-replacement-4/</link><pubDate>Tue, 22 Sep 2015 21:01:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-4/</guid><description>Following my last post, I started gathering URLs of feeds to use for sample data. First I scraped the links that I had saved in Pocket (a scarily large number). It didn&amp;rsquo;t seem like Pocket had an easy way to export this, so I loaded up Pocket in Chrome, scrolled and scrolled and scrolled until I could scroll no more, then saved the resulting web page once it was done loading.</description></item><item><title>Building a Zite Replacement (Part 3)</title><link>https://www.grahamwheeler.com/post/zite-replacement-3/</link><pubDate>Sun, 20 Sep 2015 08:12:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-3/</guid><description>Since yesterdays post on term extraction, I&amp;rsquo;ve made a few tweaks. In particular I only adjust capitalization on the first words of sentences, I&amp;rsquo;m keeping numbers and hyphenation, and if there are consecutive capitalized words I turn them into single terms.
For example, the terms for the Donald Trump on vaccines article have changed from:
vaccines Donald Trump children doses effective vaccinations diseases Carson debate to:
vaccines children Donald Trump doses effective vaccinations diseases smaller vaccination debate babies autism cause schedule studies I&amp;rsquo;m not sure why &amp;lsquo;Carson&amp;rsquo; was dropped; it&amp;rsquo;s possible that the text of the article changed between the two runs.</description></item><item><title>Building a Zite Replacement (Part 2)</title><link>https://www.grahamwheeler.com/post/zite-replacement-2/</link><pubDate>Sat, 19 Sep 2015 16:18:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-2/</guid><description>In the previous post I gave an overview of what needs to be built for our Zite replacement. In this post we will look at how to load an RSS feed and generate key terms for each article. In order to fetch the feed we will make use of the feedparser package, so make sure to install that first with pip, conda, or whatever you use.
Another thing we&amp;rsquo;re going to want is to strip HTML tags from the articles.</description></item><item><title>Building a Zite Replacement (Part 1)</title><link>https://www.grahamwheeler.com/post/zite-replacement-1/</link><pubDate>Sat, 19 Sep 2015 14:12:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zite-replacement-1/</guid><description>The two most used apps on my phone are Zite and Pocket. Unfortunately last year Zite was bought by Flipboard and has slowly been getting worse. Recently the top sticky article on Zite has been a post on migrating your preferences to Flipboard, but suggests Zite is not much longer for this world.
This would be okay if Flipboard was a suitable replacement, but it isn&amp;rsquo;t. It&amp;rsquo;s very flashy (which I don&amp;rsquo;t like), and just doesn&amp;rsquo;t seem to get things right when it comes to serendipitous discovery of interesting content.</description></item><item><title>A Clean Sweep</title><link>https://www.grahamwheeler.com/post/mine/</link><pubDate>Wed, 16 Sep 2015 20:49:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/mine/</guid><description>A long time ago when dinosaurs roamed the earth I was following an academic career. That got subverted but I enjoyed it while it lasted. Apart from graduate courses in compilers, I got to teach everything from computer architecture to assembly language programming to an introductory computing course for social science students.
When teaching assembly language (in which I was lucky enough to be able to use the M68000, a dream of a processor), one of the samples I used to illustrate a number of topics like multi-dimensional arrays, recursion and function pointers, was a Mine Sweeper game.</description></item><item><title>Maslow's Hierarchy and your Team</title><link>https://www.grahamwheeler.com/post/maslow-team/</link><pubDate>Tue, 15 Sep 2015 07:38:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/maslow-team/</guid><description>I mentioned in a previous post that I would talk about Maslow&amp;rsquo;s Hierarchy of Needs in relation to team health.
Maslow described a set of layers of needs with respect to human motivation:
physiological - the basic needs for survival (food, water, shelter, air, etc) safety - health, well-being, security love/belonging - friends and family esteem - respect of others and (more importantly) self-respect self-actualization - becoming the most you can be self-transcendence - altruism and given of yourself to others Maslow considered the first four to be necessary for mental health and a pre-requisite for self-actualization and transcendence.</description></item><item><title>1-on-1s can take a hike!</title><link>https://www.grahamwheeler.com/post/1-1s-hike/</link><pubDate>Sat, 12 Sep 2015 21:09:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/1-1s-hike/</guid><description>Are you a people manager? Do you enjoy doing 1-1s with your reports? No? Then you&amp;rsquo;re doing them wrong!
1-1s are a valuable and important part of both managing your team and becoming a better manager. You should see them as as much for your benefit as for your reports - arguably more so! Not only are you getting the opportunity to keep your reports on track and on a growth path, but it&amp;rsquo;s a great opportunity to get feedback yourself.</description></item><item><title>Simply Solving Sudoku</title><link>https://www.grahamwheeler.com/post/sudoku/</link><pubDate>Thu, 10 Sep 2015 22:03:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/sudoku/</guid><description>It&amp;rsquo;s been a long time since I last blogged. I&amp;rsquo;ve been meaning to for oh so long but you know what they say about the road to hell. For a while I maintained my math blog but even that has been fallow for some time.
Fortunately, I stumbled upon Peter Norvig&amp;rsquo;s article about solving Sudoku, and that has provided the impetus. His approach is probably the most sensible I have seen for a while; there seem to be some really bad solvers out there.</description></item><item><title>Some Math Magazines</title><link>https://www.grahamwheeler.com/post/math-magazines/</link><pubDate>Sat, 25 Apr 2015 00:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/math-magazines/</guid><description>Quanta is really a science magazine but has good articles of interest to math fans. Mathematical Digest is a magazine that has been produced for nearly 50 years now by Professor John Webb of the University of Cape Town. I grew up on these in high school and along with Martin Gardner&amp;rsquo;s columns they fuelled my love of math. I was privileged to be instructed by Prof. Webb as an undergraduate math student as well; he was regularly awarded honors as a distinguished teacher and these were well-deserved.</description></item><item><title>A Christmas Carroll</title><link>https://www.grahamwheeler.com/post/a-christmas-carroll/</link><pubDate>Tue, 29 Mar 2011 22:11:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/a-christmas-carroll/</guid><description>On Christmas day, 1877, Lewis Carroll, author of the Alice books, entertained two bored young girls by inventing a new game that he called Word Links: given two words, change one word to the other by changing a single letter at a time with the intermediate steps all being valid words themselves. For example, to change &amp;ldquo;cold&amp;rdquo; to &amp;ldquo;warm&amp;rdquo;, one can use the steps &amp;ldquo;cord&amp;rdquo;, &amp;ldquo;card&amp;rdquo;, &amp;ldquo;ward&amp;rdquo;. Carroll later popularised this form of puzzle in a series of articles in Vanity Fair magazine, changing the name to Doublets - from the &amp;ldquo;double, double, toil and trouble&amp;rdquo; witches' incantation in Shakespeare&amp;rsquo;s Macbeth.</description></item><item><title>The Gym Locker Paradox</title><link>https://www.grahamwheeler.com/post/the-gym-locker-paradox/</link><pubDate>Thu, 20 Jan 2011 06:02:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/the-gym-locker-paradox/</guid><description>It happens so often - you go to your section of the gym change room, and there is just one other person there, and they are using the locker next to yours and blocking the way. I noticed this a long time ago, and noticed that others noticed it too, referring to Murphy’s law, or “just my luck”, or some such explanation. Why does it happen so often?
I call this the Gym Locker Paradox.</description></item><item><title>The Calculus of Democracy</title><link>https://www.grahamwheeler.com/post/the-calculus-of-democracy/</link><pubDate>Tue, 20 Jul 2010 05:03:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/the-calculus-of-democracy/</guid><description>Earlier this year I went to a “guys movie night” at a friends house. Before the movie we sat around drinking Croatian Schnapps and eating Chinese food, and the conversation turned to politics. There was general agreement that our various political systems were highly suspect and not very democratic, but Ray, the Texan lawyer with the Croatian wife who had provided the schnapps, explained the Australian system of instant runoffs and asserted that this was at last a fair system.</description></item><item><title>Fibonacci ties it all together</title><link>https://www.grahamwheeler.com/post/fibonacci-ties-it-all-together/</link><pubDate>Wed, 20 Jan 2010 05:37:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/fibonacci-ties-it-all-together/</guid><description>In the past few posts I have discussed a diverse set of topics, from number representation to recurrence relations, Pythagorean triples.
All of these topics are related, and this is particularly illustrated when we consider the work of Leonardo of Pisa, better known as Fibonacci (from the Latin “de filiis Bonacci”, or “of the family of Bonacci”). Fibonacci was born in 1175, in Pisa, Italy, shortly after the start of the construction of the famous leaning tower.</description></item><item><title>The Horn of Gabriel</title><link>https://www.grahamwheeler.com/post/the-horn-of-gabriel/</link><pubDate>Mon, 18 Jan 2010 06:48:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/the-horn-of-gabriel/</guid><description>“And the seventh angel sounded [his horn]; and there were great voices in heaven, saying, The kingdoms of this world are become the kingdoms of our Lord, and of his Christ; and he shall reign for ever and ever.” (Revelations 11.15, King James Edition)
In Christian and Islamic folklore, it is the angel Gabriel who is considered to be the seventh angel, who announced the coming of judgement day. An angel with such a huge responsibility clearly needs an instrument worthy of the task, and indeed there is one: Gabriel’s horn, also known as Torricelli’s trumpet, after its discoverer, Evangelista Torricelli, a student of Galileo.</description></item><item><title>More on Pythagoras</title><link>https://www.grahamwheeler.com/post/more-on-pythagoras/</link><pubDate>Sun, 17 Jan 2010 03:12:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/more-on-pythagoras/</guid><description>Pythagoras is known for two great contributions to mathematics – he established the need for formal proofs instead of just conjecture and rules of thumb, and he established the existence of the irrationals. In popular culture of course, Pythagoras is more well known for the Pythagorean theorem – that the square of the hypotenuse of a right angled triangle is the sum of the squares of the other two sides – but this was one of the oldest known results in mathematics and in fact predates Pythagoras by as much as a thousand years.</description></item><item><title>Much Ado about Nothing</title><link>https://www.grahamwheeler.com/post/much-ado-about-nothing/</link><pubDate>Wed, 13 Jan 2010 05:53:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/much-ado-about-nothing/</guid><description>Many people have heard that the number zero was introduced later than the other digits. Upon hearing this it seems fantastical - how could people have managed even elementary arithmetic without zero? However, it is not the concept of “nothing” that was missing, but rather the use of a zero in other places when representing or recording numbers. For example, in the number 101, zero is used as a separator, and it is this concept that was lacking in early number systems.</description></item><item><title>Primal Soup</title><link>https://www.grahamwheeler.com/post/primal-soup/</link><pubDate>Wed, 06 Jan 2010 06:54:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/primal-soup/</guid><description>Number theory really began with Euclid, around 300BC, in books 7 through 9 of his masterwork, The Elements. It is here that we find the original definitions of odd and even numbers, prime and composite numbers, perfect numbers (numbers which are the sum of their factors, e.g. 6 = 3 + 2 + 1), and more. But the greatest achievements of all were his proofs that composite numbers are the products of primes, that this factorization is unique, and that there are an infinity of primes.</description></item><item><title>Archimedes counts the sand</title><link>https://www.grahamwheeler.com/post/archimedes-counts-the-sand/</link><pubDate>Tue, 05 Jan 2010 06:48:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/archimedes-counts-the-sand/</guid><description>In a previous post I described the Babylonian/Sumerian sexagesimal (base 60) counting system. Unlike this system, most cultures adopted a base 10 counting system due to the natural inclination to count with the fingers (leading to the term digits). Less common were quinary (base 5) systems, but vigesimal (base 20) were not unusual - for example, this was widespread in native American culture, including (with a novel variation) the Mayans. Duodecimal (base 12) has also played a role; we still have remnants in the groupings of dozens and gross.</description></item><item><title>More on Diophantus and Fermat</title><link>https://www.grahamwheeler.com/post/more-on-diophantus-and-fermat/</link><pubDate>Sun, 03 Jan 2010 20:06:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/more-on-diophantus-and-fermat/</guid><description>In a previous post I wrote about how Fermat scribbled his famous “last theorem” in the margin of Diophantus’ Arithmetica. This is called Fermat’s last theorem not because it was the last thing Fermat wrote but because of all the incomplete theorem’s we know were left by Fermat it was the last to be proved, taking about 350 years.
The section of the book where Fermat wrote his comment was on finding Pythagorean triples: square numbers whose sums also form squares.</description></item><item><title>The Wandering Ant</title><link>https://www.grahamwheeler.com/post/the-wandering-ant/</link><pubDate>Sun, 03 Jan 2010 19:29:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/the-wandering-ant/</guid><description>Imagine an infinite grid filled where each square is initially either black or white. On this grid is an ant, which can face either north, south, east or west. The ant moves over the grid according to the following rules:
it it lands on a black cell it turns left 90 degrees; if it lands on a white cell it turns right 90 degrees in each case the cell it just left changes color to its opposite (white to black or vice-versa) Running a computer simulation of this system, which was invented by Christopher Langton in 1986, shows that after a while the ant gets stuck in a cycle of 104 moves which move it two squares diagonally, after which point it continues building this diagonal “highway”.</description></item><item><title>The Mathematics of Toilet Rolls</title><link>https://www.grahamwheeler.com/post/the-mathematics-of-toilet-rolls/</link><pubDate>Sun, 27 Dec 2009 06:36:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/the-mathematics-of-toilet-rolls/</guid><description>In the late 1980s I was contracted to write some software for a company that produced video-based educational systems. They had video cassette machines that had been modified to interface with a PC, which could send instructions to the VCRs such as play, stop, fast forward, and rewind. The educational programs consisted of short recorded segments which typically ended with a question, and based on the answer the user provided they wanted to continue play at different portions of the tape.</description></item><item><title>Babylonian numbers in 60 seconds</title><link>https://www.grahamwheeler.com/post/babylonian-numbers-in-60-seconds/</link><pubDate>Sun, 27 Dec 2009 06:09:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/babylonian-numbers-in-60-seconds/</guid><description>My 5 year old daughter wanted to heat something up in the microwave. I suggested she use a minute, and she asked me how to enter that. I said enter 1, 0, 0, Start. “But when mom tells me to do a minute she says 6, 0, Start”, she responded. I wasn’t sure how to explain to her that 1:00 minute is the same as 60 seconds; microwaves are confusing enough to her as is.</description></item><item><title>Monkeying Around</title><link>https://www.grahamwheeler.com/post/monkeying-around/</link><pubDate>Sun, 13 Dec 2009 19:03:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/monkeying-around/</guid><description>After a huge storm blew up, the ship foundered. Dawn’s light found just six survivors washed up on a desert island – five men and one monkey. The men spent the day gathering all the food they could find – which was just a pile of coconuts. After a dinner of coconut milk and flesh, the exhausted men decided to they would divide the remaining coconuts up the following day, before splitting up and exploring the remainder of the island.</description></item><item><title>The End of the Universe</title><link>https://www.grahamwheeler.com/post/the-end-of-the-universe/</link><pubDate>Sun, 13 Dec 2009 06:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/the-end-of-the-universe/</guid><description>In the Indian city of Benares, beneath a dome that marks the center of the world, is a brass plate in which are set three diamond needles, each as thick as a bee and a cubit high. At the time of creation Brahma placed on one of these needles 64 disks of pure gold, each a different size, each resting only on plates of a larger size (so the largest disk was at the bottom and the smallest at the top).</description></item><item><title>Fixing Grub after installing Windows 7</title><link>https://www.grahamwheeler.com/post/fixing-grub-after-installing-windows-7/</link><pubDate>Sat, 16 May 2009 05:25:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/fixing-grub-after-installing-windows-7/</guid><description>I have an MSI Wind on which I run both Windows 7 and Ubuntu. I rarely use the latter but I like to keep it around and with a 320GB hard drive its affordable. I have used both the Windows BCD loader and GRUB as my bootloader at various times (and for those using BCD I highly recommend EasyBCD as the way to configure it). Most recently I&amp;rsquo;ve been using GRUB.</description></item><item><title>GeoRSS and Live Search for Mobile</title><link>https://www.grahamwheeler.com/post/georss-and-live-search-for-mobile/</link><pubDate>Fri, 06 Jun 2008 05:26:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/georss-and-live-search-for-mobile/</guid><description>Hopefully by now you all have v3.0 of the Live Search client, and are enjoying the new features (web search, weather, and collections). I&amp;rsquo;d like to talk about collections in this post, but first it is worth mentioning a couple of changes in this version that are less obvious, and overcome limitations I have blogged about in the past:
we now have Outlook contact integration. From Outlook contacts you can select the &amp;ldquo;Show on Map&amp;rdquo; menu option to map a contact.</description></item><item><title>Cute Math Curiosity</title><link>https://www.grahamwheeler.com/post/cute-math-curiosity/</link><pubDate>Tue, 06 May 2008 05:27:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/cute-math-curiosity/</guid><description>I heard this proof a couple of days back and thought it was fun and elegant. If you draw a circle anywhere on the surface of the earth there will be at least two opposite points that have the same temperature.
The proof relies on Bolzano&amp;rsquo;s theorem, which is an instance of the Intermediate Value Theorem. Bolzano&amp;rsquo;s theorem says that if a continuous function defined on an interval is sometimes positive and sometimes negative, it must be 0 at some point.</description></item><item><title>The Art of Assert</title><link>https://www.grahamwheeler.com/post/the-art-of-assert/</link><pubDate>Fri, 02 May 2008 05:28:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/the-art-of-assert/</guid><description>&amp;ldquo;Assertions are the only reliable form of program documentation&amp;rdquo; (Charles Hoare)
While I wait for the next release of Live Search for Mobile, I will fill in the time with some posts on tricks I have used in the dim and distant past, before I became a mostly C# programmer. I love C#, but I really don&amp;rsquo;t like the way the C/C++ preprocessor was not included. While preprocessors can be abused, they are also extremely useful (think of __FILE__ and __LINE__, just for starters).</description></item><item><title>Last Day on Live Search for Mobile</title><link>https://www.grahamwheeler.com/post/last-day-on-live-search-for-mobile/</link><pubDate>Sun, 20 Apr 2008 05:42:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/last-day-on-live-search-for-mobile/</guid><description>Today is my last official day on the Live Search for Mobile team. I am moving over to a new team working on some incubating new mobile initiatives in emerging markets (as a South African ex-pat I can relate to this). It has been a fun ride and it is hard to let go of the Windows Mobile client which I think of as &amp;lsquo;my baby&amp;rsquo; (with co-parent Ashley). There is still so much to do.</description></item><item><title>Why There Are no ARCO Gas Prices</title><link>https://www.grahamwheeler.com/post/why-there-are-no-arco-gas-prices/</link><pubDate>Sat, 12 Apr 2008 05:29:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/why-there-are-no-arco-gas-prices/</guid><description>We get gas price data from a 3rd party provider. They in turn get the data from credit card companies. ARCO does not accept credit cards.
This is a great example of where user-contributed data would be valuable, and I hope that one day we will be able to extend the feature to include that.</description></item><item><title>We're Hiring!</title><link>https://www.grahamwheeler.com/post/were-hiring/</link><pubDate>Thu, 10 Apr 2008 05:30:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/were-hiring/</guid><description>My team is hiring. The job descriptions are below. PM me if you&amp;rsquo;re interested:
Windows Live Mobile Search team is focused on delivering outstanding search and local navigation experience on mobile devices. Our goal is to put the power of Windows Live Services right in your pocket. We own creating addictively useful experiences for folks trying to search from their cell phones. Our mission is to get every one of the mobile queries.</description></item><item><title>The Windows XP "Upgrade"</title><link>https://www.grahamwheeler.com/post/the-windows-xp-upgrade/</link><pubDate>Tue, 25 Mar 2008 05:32:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/the-windows-xp-upgrade/</guid><description>I have had all the PCs in our house on Vista since Vista RTMed. This includes my kids computers, and I like the Vista parental controls (although I wish they were more comprehensive, combining not only allowed hours of use but quotas as well). I recently wanted to run my old copy of the game Creatures, and could not get it to install on Vista. This was sufficiently frustrating that I decided to switch one PC back to XP.</description></item><item><title>Channel 10 Video coming soon!</title><link>https://www.grahamwheeler.com/post/channel-10-video-coming-soon/</link><pubDate>Tue, 25 Mar 2008 05:31:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/channel-10-video-coming-soon/</guid><description>Last week the Channel 10 team visited us and shot some video of us demoing the Live Search for Mobile client, including some of the features of our upcoming release (real soon now!) I&amp;rsquo;m not sure when the edited video will be available - I guess after the release - but will update this posting with a link when it is.</description></item><item><title>Live Search for Mobile Saves the Day</title><link>https://www.grahamwheeler.com/post/live-search-for-mobile-saves-the-day/</link><pubDate>Wed, 05 Mar 2008 05:31:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/live-search-for-mobile-saves-the-day/</guid><description>I love stories like this&amp;hellip;</description></item><item><title>Connectivity problems with Live Search on Blackberry</title><link>https://www.grahamwheeler.com/post/connectivity-problems-with-live-search-on-blackberry/</link><pubDate>Sun, 24 Feb 2008 05:33:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/connectivity-problems-with-live-search-on-blackberry/</guid><description>I just wanted to share this information that one of our Blackberry devs, Didier, sent to a customer who was having problems as it may be useful to others:
Since Live Search for BlackBerry is distributed as an independent third party application, it works only if such applications are allowed to do network requests, which may depend on both your carrier network policies and your subscription type.
We support three connection modes in Live Search for BlackBerry: Direct HTTP, BES/MDS and WAP Gateway, but for CDMA devices only Direct HTTP and BES/MDS are possible (WAP is specific to GPRS/Edge carriers).</description></item><item><title>Webkinz Are Evil</title><link>https://www.grahamwheeler.com/post/webkinz-are-evil/</link><pubDate>Sat, 02 Feb 2008 05:34:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/webkinz-are-evil/</guid><description>My daughter bought a Webkinz today. These are cheap stuffed animals that sell at a premium because they have a &amp;lsquo;secret code&amp;rsquo; that allow you to access the Webkinz website and play games, etc. So of course she wanted me to set her up to access the site (her PC was locked down to only allow access to PBS Kids).
We go to the site, sign her up, and then sign in.</description></item><item><title>Scanner + Printer == Photocopier (eventually)</title><link>https://www.grahamwheeler.com/post/scanner-printer-photocopier-eventually/</link><pubDate>Fri, 01 Feb 2008 05:35:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/scanner-printer-photocopier-eventually/</guid><description>My wife has been bugging me to make it easier for her to use our scanner and printer to make copies. I could buy a cheap all-in-one but she actually needs laser copies, not inkjet, for her hobby of stamp carving (she can iron a laser-printed image to make a basic transfer). The scanner and printer are attached to my PC but she wants to make copies without having to log on to my PC or bother me.</description></item><item><title>Why There Is No Integration With Outlook Mobile Contacts</title><link>https://www.grahamwheeler.com/post/why-there-is-no-integration-with-outlook-mobile-contacts/</link><pubDate>Fri, 01 Feb 2008 05:34:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/why-there-is-no-integration-with-outlook-mobile-contacts/</guid><description>We often get asked why we don&amp;rsquo;t have a menu item in the Contacts app on the phone to map a contact, but Google does. The comments can sometimes be quite disparaging (like what&amp;rsquo;s wrong with you people in Redmond, anyway?). So here is the tale, told by an idiot, without much sound or fury.
Early in 2006 I wrote the code to hook into Contacts. It worked pretty well, and we planned to ship this in our v2 release in July &amp;lsquo;07.</description></item><item><title>Why Can't I Enter An Address In The Search Box</title><link>https://www.grahamwheeler.com/post/why-cant-i-enter-an-address-in-the-search-box/</link><pubDate>Sat, 19 Jan 2008 05:36:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/why-cant-i-enter-an-address-in-the-search-box/</guid><description>A common source of confusion for our users is the distinction we make between &amp;lsquo;what&amp;rsquo; and &amp;lsquo;where&amp;rsquo;. We generally search for &amp;lsquo;what&amp;rsquo; (which is the text you can enter on the main form), centering the results on the &amp;lsquo;where&amp;rsquo; (which is the location shown just below). If you want to change the location, or if you want to search for an address, you need to click on &amp;lsquo;Choose a new location&amp;rsquo;; you can then enter the address on the Location screen and click &amp;lsquo;Find&amp;rsquo; (note: the screen shots shown below come from a test version of the app we run on the desktop; the menus at the top will be on the bottom on your phone, accessible via the two softkeys; I just used the desktop version here as it was quicker for me):</description></item><item><title>My Leopard Has Lost Its Spots</title><link>https://www.grahamwheeler.com/post/my-leopard-has-lost-its-spots/</link><pubDate>Wed, 16 Jan 2008 05:37:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/my-leopard-has-lost-its-spots/</guid><description>I run a mostly Windows-only setup at home these days. My home setup consists of:
an SBS2003 server mostly for Exchange mail, which also runs FreeBSD in a virtual machine to keep some older services running on Apache (primarily the redirector from my domain to Live Spaces and my subversion repository). a Windows Home Server, which has taken over the file server functionality from SBS2003, as I like its more flexible file replication a media center PC running Vista Ultimate a kitchen internet appliance running Windows CE Vista Ultimate PCs for each of my kids (and a laptop for the wife) a desktop PC and a Tablet PC for me with Vista Ultimate an oldish Mac Mini G4 which was running Leopard I&amp;rsquo;m mostly pretty happy with Vista.</description></item><item><title>Help! My Keyboard Doesn't Work!</title><link>https://www.grahamwheeler.com/post/help-my-keyboard-doesnt-work/</link><pubDate>Sat, 12 Jan 2008 05:39:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/help-my-keyboard-doesnt-work/</guid><description>We get a lot of people reporting problems with their hardware keyboards on phones like the VX6800. When they press the letter keys instead of letters they get numbers and symbols.
Unfortunately this is a problem with the IME (input method editor) in the phone. IMEs are often customized by the phone OEM or the mobile operator to add functionality like predictive text input. For a number of phones, an IME was added that breaks text input from the keyboard with all .</description></item><item><title>Zooming the map with Live Search Mobile</title><link>https://www.grahamwheeler.com/post/zooming-the-map-with-live-search-mobile/</link><pubDate>Fri, 11 Jan 2008 05:41:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/zooming-the-map-with-live-search-mobile/</guid><description>One thing we have found is that our zoom UI is not very discoverable. It&amp;rsquo;ll probably change in the future as a result; it seems we over-engineered it in the current app. But until we come up with a replacement, here are some tips:
obviously you can use the menu Zoom In/Zoom Out to change the zoom by one level if you hit the D-Pad center button you will go into &amp;lsquo;zoom mode&amp;rsquo;.</description></item><item><title>Searching for Residential Results Only</title><link>https://www.grahamwheeler.com/post/searching-for-residential-results-only/</link><pubDate>Fri, 11 Jan 2008 05:40:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/searching-for-residential-results-only/</guid><description>A few people have asked how to limit search results to residential addresses.
When you&amp;rsquo;re in the list of search results, if you click &amp;ldquo;Menu&amp;rdquo; then select &amp;ldquo;View&amp;rdquo;, you will see checkboxes for business and residential. By checking or unchecking these you can restrict results to just business, just residential, or both.</description></item><item><title>Fixing the Live Search home screen launcher on Sprint devices</title><link>https://www.grahamwheeler.com/post/fixing-the-live-search-home-screen-launcher-on-sprint-devices/</link><pubDate>Sat, 29 Dec 2007 05:38:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/fixing-the-live-search-home-screen-launcher-on-sprint-devices/</guid><description>Several new Sprint phones come with Live Search for Mobile already installed, with a launch icon on the home page. Unfortunately if you update the application then this icon stops working. We changed where the app gets installed whereas the icon Sprint added has a hard-coded path.
There is a simple fix, however. Install this CAB file on your Sprint phone and the icon should work again.</description></item><item><title>Changing the order of home screen icons in Live Search for Mobile</title><link>https://www.grahamwheeler.com/post/changing-the-order-of-home-screen-icons-in-live-search-for-mobile/</link><pubDate>Sun, 23 Dec 2007 05:38:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/changing-the-order-of-home-screen-icons-in-live-search-for-mobile/</guid><description>If you live in an area where there is no traffic coverage, you may not want to have the Traffic icon taking up precious real estate on your home screen. There is a way to re-order the icons, although it is not for the faint of heart. You need to edit the preferences.xml file in the \Programs\Live Search directory.
In this XML file there is a section with tags &amp;lt;il&amp;gt;, and within this are entries with tags &amp;lt;it&amp;gt; and &amp;lt;ip&amp;gt;.</description></item><item><title>Using Live Search for Mobile with GPS on AT&amp;T Tilt, Blackjack II and Motorola Q9H</title><link>https://www.grahamwheeler.com/post/using-live-search-for-mobile-with-gps-on-att-tilt-blackjack-ii-and-motorola-q9h/</link><pubDate>Fri, 21 Dec 2007 05:24:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/using-live-search-for-mobile-with-gps-on-att-tilt-blackjack-ii-and-motorola-q9h/</guid><description>Windows Mobile 6 phones are out and about, and several of them have built-in GPS. Some people find that the GPS doesn&amp;rsquo;t work well with Live Search for Mobile, so I hope this post will help explain why GPS can be tricky. Note that you should make sure you are running the latest version of Live Search (from December &amp;lsquo;07) as this has some improvements in the timeout handling which will help.</description></item><item><title>Live Search for Mobile 2.5 Released!</title><link>https://www.grahamwheeler.com/post/live-search-for-mobile-2-5-released/</link><pubDate>Wed, 17 Oct 2007 05:13:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/live-search-for-mobile-2-5-released/</guid><description>After 3 months we have finally released the latest version of Live Search for Mobile. The Windows Mobile client now features speech input, better location handling, hours of operation on search results, better movie poster sizing. and gas prices. We spent about half the time on bug fixes and stability improvements. It&amp;rsquo;s a great release; get it at http://wls.live.com on your phone (download direct via your phone&amp;rsquo;s browser).</description></item><item><title>How Did I Get Here?</title><link>https://www.grahamwheeler.com/post/how-did-i-get-here/</link><pubDate>Sat, 02 Jun 2007 05:17:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/how-did-i-get-here/</guid><description>Assertions can be great for detecting unexpected state in your code. But when a state violation is caught in an assert, the next question is usually &amp;ldquo;How did I get here?&amp;rdquo;.
A simple but effective way to track down this kind of issue is the following: in each class instance allocate a StringBuilder member (called, for example, stateLog). Then, at each point in the class code where the state changes, log the change with an appropriate message (usually a helper method that takes a string message is appropriate here - it should append the message plus a snapshot of the relevant member variables to the stateLog).</description></item><item><title>Presenting at MEDC</title><link>https://www.grahamwheeler.com/post/presenting-at-medc/</link><pubDate>Mon, 30 Apr 2007 05:18:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/presenting-at-medc/</guid><description>Ashley, Steve and I are giving a talk at MEDC on our baby, Live Search for Mobile. Ash will talk about interaction design for mobile, I&amp;rsquo;ll talk about lessons learned and useful tips for developing on Compact Framework (Live Search is built on CF 1.0 SP3), and Steve will talk about our uber-agile process. Stop by and say hi!
Update: you can see the video here - although it seems to bomb out before I started talking.</description></item><item><title>Monkeyin’ Around</title><link>https://www.grahamwheeler.com/post/monkeyin-around/</link><pubDate>Thu, 19 Apr 2007 05:20:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/monkeyin-around/</guid><description>My partner in crime on Live Search for Mobile, Ashley, has started a coding blog, which is much more interesting than mine. He&amp;rsquo;s currently very into functional programming but with a C# bent - basically a C# schemer - and there&amp;rsquo;s some cool stuff he&amp;rsquo;s been playing around with in .Net 2.0 and 3.0. Check it out!</description></item><item><title>Easy Architecture Improvements</title><link>https://www.grahamwheeler.com/post/easy-architecture-improvements/</link><pubDate>Mon, 16 Apr 2007 05:23:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/easy-architecture-improvements/</guid><description>I was searching a couple of days back for a tool that would generate dependency matrices for C# code. I didn&amp;rsquo;t find free ones, but I did find a plugin for Lutz Roeder&amp;rsquo;s Reflector that will do this for compiled assemblies, which is just as good. I haven&amp;rsquo;t done a fresh install of reflector for quite some time and didn&amp;rsquo;t know it supported add-ins, but it does and there are a few good ones.</description></item><item><title>Capturing the Elusive Form</title><link>https://www.grahamwheeler.com/post/capturing-the-elusive-form/</link><pubDate>Mon, 29 Jan 2007 03:50:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/capturing-the-elusive-form/</guid><description>Last night I decided to try write a web browser that has the ability to take screen captures. I have an rss2book program that I wrote for my Sony Reader which has been great at producing PDF content from the web (mostly RSS but it is not limited to that). However, I figured that for some content, especially that which is largely Javascript driven, it might be better to capture the full content of a web page as an image and then turn that into a DJVu document (the Sony Reader doesn&amp;rsquo;t actually support DJVu, but I imagine that there will be e-book readers soon that do - or at the least there&amp;rsquo;s always the Nokia N800).</description></item><item><title>Functional Synchronicity</title><link>https://www.grahamwheeler.com/post/functional-synchronicity/</link><pubDate>Wed, 23 Aug 2006 03:51:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/functional-synchronicity/</guid><description>There&amp;rsquo;s been some weird synchronicity going on recently. It started a few weeks back at work. Earlier this year I wrote a compiler for Javascript, and this resulted in a conversation with a workmate about virtual machines. I mentioned the SECD machine and Henderson&amp;rsquo;s seminal book from 1980 on functional programming. My workmate was interested enough to order a copy, and we&amp;rsquo;ve had a number of conversations about functional programming (which I haven&amp;rsquo;t done in 20 years).</description></item><item><title>.Net async calls may run on the calling thread</title><link>https://www.grahamwheeler.com/post/net-async-calls-may-run-on-the-calling-thread/</link><pubDate>Tue, 22 Aug 2006 03:52:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/net-async-calls-may-run-on-the-calling-thread/</guid><description>I got bitten today with a nasty deadlock in my code. It took a while to unravel as this particular code involves large numbers of threads making parallel web service requests. I thought I&amp;rsquo;d share the particular gotcha that tripped me up.
For performance reasons, all my calls are aynchronous. I have a callback for reading HTTP response data, which included the following (grossly simplified here to just show enough to illustrate the problem):</description></item><item><title>Accelerated Planning Technique</title><link>https://www.grahamwheeler.com/post/accelerated-planning-technique/</link><pubDate>Mon, 21 Aug 2006 03:53:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/accelerated-planning-technique/</guid><description>Bob Walsh has just discussed an interesting approach to planning called Accelerated Planning Technique from a New Zealand management consultant. Its worth going through the mini online seminar. It seems pretty woolly and wordy at first, but the example at the end of the business plan for a restaurant is pretty good.</description></item><item><title>Organizing Life</title><link>https://www.grahamwheeler.com/post/organizing-life/</link><pubDate>Sun, 20 Aug 2006 03:54:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/organizing-life/</guid><description>I tend to be one of those people who accumulates vast amounts of clutter on my desk, in my room, and in my life, and then every couple of months has a big cleanout, vowing to maintain the new uncluttered state, but the cycle just begins again (I blame the laws of thermodynamics). In an effort to break that cycle I&amp;rsquo;ve recently started paying some attention to David Allen&amp;rsquo;s Getting Things Done approach.</description></item><item><title>This is s-o-o-o true!</title><link>https://www.grahamwheeler.com/post/this-is-s-o-o-o-true/</link><pubDate>Tue, 28 Feb 2006 03:55:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/this-is-s-o-o-o-true/</guid><description>Check out this spoof video about if Microsoft designed the iPod packaging.
It is very funny, particularly as it is so spot on! Probably because it comes from Microsoft marketing people. Even though I personally wouldn&amp;rsquo;t buy an iPod (I have an 8Gb Zen Micro, and can&amp;rsquo;t wait for the 12Gb version - I want small on the outside but big on the inside).</description></item><item><title>Digital Reflection</title><link>https://www.grahamwheeler.com/post/digital-reflection/</link><pubDate>Fri, 11 Feb 2005 03:57:00 +0000</pubDate><guid>https://www.grahamwheeler.com/post/digital-reflection/</guid><description>I&amp;rsquo;ve been going through old CD-R discs of mine with a view to reburning them on DVD-R to safe some space and generally clean them up. It&amp;rsquo;s amazing what I&amp;rsquo;m finding - things that I had totally forgotten having written. For example, I found a SNMPv1/v2 MIB compiler and browser that I wrote back in 1995. Until I saw it I had no recollection that I even did that! After some reflection it all came back.</description></item><item><title/><link>https://www.grahamwheeler.com/search/placeholder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/search/placeholder/</guid><description/></item><item><title/><link>https://www.grahamwheeler.com/top/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/top/about/</guid><description>Graham Wheeler is a software engineering leader at Microsoft. He has worked as a software engineer and engineering leader and data science director at companies like Microsoft, Google, and eBay, as well as his own startup in the 1990&amp;rsquo;s producing one of the earliest Internet firewall and VPN products.
Originally from South Africa, Graham has a Ph.D. in computer science and a bachelor&amp;rsquo;s degree in mathematics and computer science from the University of Cape Town.</description></item><item><title/><link>https://www.grahamwheeler.com/top/books/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/top/books/</guid><description>TODO</description></item><item><title>Posts Archive</title><link>https://www.grahamwheeler.com/top/archive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.grahamwheeler.com/top/archive/</guid><description/></item></channel></rss>