<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://mike-ward.net" xml:lang="en">
 <title>Mike-Ward.Net</title>
 <link href="https://mike-ward.net/atom.xml" rel="self"/>
 <updated>2026-04-04T12:28:54+00:00</updated>
 <id>https://mike-ward.net/</id>
 <author>
   <name></name>
   <email></email>
 </author>

 
 <entry>
   <title>go-gui: A New GUI Framework for Go</title>
   <link href="https://mike-ward.net/2026/04/04/go-gui-beta/"/>
   <updated>2026-04-04T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2026/04/04/go-gui-beta</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;&lt;a href=&quot;https://github.com/mike-ward/go-gui&quot;&gt;go-gui&lt;/a&gt; is now in beta and ready for use.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/mike-ward/go-gui/main/assets/showcase.png&quot; alt=&quot;go-gui showcase&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;what-it-is&quot;&gt;What it is&lt;/h2&gt;

&lt;p&gt;An immediate-mode GUI framework for Go. Every frame, a plain Go function returns a layout tree that gets sized, positioned, and rendered directly to the GPU. No virtual DOM. No diffing. No hidden magic. State lives in a single typed slot per window.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;View fn → Layout tree → layoutArrange() → renderLayout() → []RenderCmd → GPU
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;why-its-fast&quot;&gt;Why it’s fast&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;GPU-accelerated via SDL2 + Metal (macOS) and OpenGL (Linux/Windows)&lt;/li&gt;
  &lt;li&gt;Web/WASM backend with WebGL shaders — runs in any browser&lt;/li&gt;
  &lt;li&gt;iOS (Metal) and Android backends included&lt;/li&gt;
  &lt;li&gt;No allocations per frame in the hot path&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;whats-included&quot;&gt;What’s included&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;50+ widgets&lt;/strong&gt; — buttons, inputs, sliders, tables, trees, tabs, menus, dialogs, toasts, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DataGrid&lt;/strong&gt; with virtualization, sorting, grouping, inline editing, and CSV/TSV/XLSX/PDF export.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dock layout&lt;/strong&gt; with drag-and-drop panel rearrangement and tab groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rich text&lt;/strong&gt; — multiline input, Markdown and RTF views, syntax highlighting, SVG, bidirectional text via &lt;a href=&quot;https://github.com/mike-ward/go-glyph&quot;&gt;go-glyph&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Animation&lt;/strong&gt; — keyframe, spring, tween, hero transitions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Touch gestures&lt;/strong&gt; — tap, double-tap, long-press, pan, swipe, pinch, rotate with automatic mouse synthesis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio&lt;/strong&gt; — opt-in via SDL_mixer; WAV, OGG, MP3, FLAC, MOD.&lt;/p&gt;

&lt;h2 id=&quot;why-its-easy-to-use&quot;&gt;Why it’s easy to use&lt;/h2&gt;

&lt;p&gt;No callbacks, no bindings, no reactive machinery. The view function is called every frame. If your state changed, the UI reflects it. That’s it.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;view&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;win&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Window&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;State&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Widget&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Column&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;gui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Sprintf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Count: %d&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)),&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;gui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Button&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Increment&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}),&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;beta-status&quot;&gt;Beta status&lt;/h2&gt;

&lt;p&gt;The API is stabilizing. Core widgets and layout are solid. Expect minor breaking changes before 1.0.&lt;/p&gt;

&lt;p&gt;Cross-platform support: &lt;strong&gt;macOS, Windows, Linux, iOS, Android, Web (WASM)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Requires Go 1.24+.&lt;/p&gt;

&lt;p&gt;Source and examples: &lt;a href=&quot;https://github.com/mike-ward/go-gui&quot;&gt;github.com/mike-ward/go-gui&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Checklist Buddy Available for Testing</title>
   <link href="https://mike-ward.net/2024/01/10/checklist-buddy-available-for-testing/"/>
   <updated>2024-01-10T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2024/01/10/checklist-buddy-available-for-testing</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;Hey friends,&lt;/p&gt;

&lt;p&gt;With the sudden death of Tweetz, my Twitter app, (thanks Elon), I’ve moved on to a new project.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;cdn/images/blog/checklist-buddy-feature-image.png&quot; alt=&quot;Checklist Buddy feature image&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I know what you’re thinking; Gee Mike another checklist application. Bear with me a moment and I think you’ll see why I wrote Checklist Buddy.&lt;/p&gt;

&lt;p&gt;Back in the day, I flew single-engine aircraft for pleasure. Most aircraft have a laminated checklist with items to check before takeoff. When I was flying with a passenger, I would give them the checklist and have them read the items aloud. In a sense, they became my “Checklist Buddies”.&lt;/p&gt;

&lt;p&gt;Fast forward 20 years and I now own a diesel motorhome. Like aircraft, you just don’t jump into one of these things and turn the key. There’s a procedure that should (must?) be followed. And as you likely surmised, I use a checklist.&lt;/p&gt;

&lt;p&gt;So why not use one of the bazillion checklists already out there? Several reasons, but mostly I wanted an app that didn’t require me to carefully aim my finger to press a checkbox and then clear them all the next time I used it.&lt;/p&gt;

&lt;p&gt;In fact, what I really wanted was an app that read the items back to me, one at a time, like my checklist buddies did. To confirm, simply touch anywhere on the screen.&lt;/p&gt;

&lt;p&gt;As simple as that sounds, there’s nothing like it in the App Store.&lt;/p&gt;

&lt;p&gt;So there you have it. Of course, you can create, edit, and order your lists.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Google has implemented mandatory closed testing requirements before allowing an app to be listed in the Play Store. So if you have an Android phone and live in the US or Canada, send me an email with your Google email address so I can add you to the closed testing group. After that, you’ll receive a link to the Google Play Store listing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And yes, I promise not to sell your email, or track you or any of the other stupid shit people do with private info. - &lt;a href=&quot;mailto:mike@mike-ward.net&quot;&gt;mike@mike-ward.net&lt;/a&gt;&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Tweetz 2.0.0 Released</title>
   <link href="https://mike-ward.net/2020/01/18/tweetz-v2-0-0-released/"/>
   <updated>2020-01-18T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2020/01/18/tweetz-v2-0-0-released</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;Stick a fork in it, it’s done! Tweetz 2.0 is a rewrite in Microsoft’s latest technology, .Net Core 3.1. Long-time users should not fret however because the new version is very much in keeping in style and form with the 1.x version.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Stop talking fool and let me &lt;a href=&quot;https://github.com/mike-ward/tweetz/releases/latest&quot;&gt;download it&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So why the rewrite? Well, a number of things.&lt;/p&gt;

&lt;p&gt;The old code was crap. It started as a weekend hack and kind of got away from me. Also, I was itching for a chance to test-drive the new technology. The new code is still crap but less so.&lt;/p&gt;

&lt;p&gt;Some changes in the Twitter API were about to render parts of 1.x unusable. This already happened with Direct Messages.&lt;/p&gt;

&lt;p&gt;I was curious as to the effort required to write a Windows application in what is now the 2nd decade of the 21st century. To my surprise, it is still really hard. There are so many services and features in desktop applications that are not addressed in Microsoft’s application framework. Simple things like remembering a window position or styling a title bar require hundreds of lines of low-level code to implement. Seriously Microsoft? We can’t have an application model that handles the basics?&lt;/p&gt;

&lt;p&gt;WPF, the technology used to generate user interfaces, while quite powerful has a steep learning curve and more than a few gotchas. It takes hard work to get an application that looks good and doesn’t consume all the system’s resources.&lt;/p&gt;

&lt;p&gt;Ok, enough of the rant. I still like writing Windows programs more than any other platform I’ve worked in. I just wish Microsoft had an application service that took care of the busy work and looked good.&lt;/p&gt;

&lt;p&gt;Thanks to everyone who helped with beta testing. Testing is hard and requires insight and motivation. If it were up to me, I would have released this a month ago and that would have been a mistake.&lt;/p&gt;

&lt;p&gt;If and when you find issues, please report them on &lt;a href=&quot;https://github.com/mike-ward/tweetz/issues&quot;&gt;GitHub&lt;/a&gt;. Discuss comments are Ok but it’s much easier to track and verify in GitHub.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Tweetz 2.0 Beta</title>
   <link href="https://mike-ward.net/2020/01/04/tweetz-2-beta/"/>
   <updated>2020-01-04T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2020/01/04/tweetz-2-beta</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;Tweetz is a windows desktop client for twitter. It started out as a Windows Gadget application and migrated to a desktop application when Microsoft discontinued gadgets. Tweetz is intentionally minimal and meant to sit near the edge of your monitor. I use it to monitor news events and follow other developers.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mike-ward/tweetz/releases/latest&quot;&gt;Stop talking and let me download it fool!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Version 2.0 is a rewrite using the newest version of .NET, .NET Core 3.1. The main benefit is that there is no longer a need to have the .NET runtime installed. Tweetz is open source on GitHub at &lt;a href=&quot;https://github.com/mike-ward/tweetz&quot;&gt;https://github.com/mike-ward/tweetz&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There a many enhancements and fixes in this version. The interface has been refined to address some of the requests users have asked for. Perhaps the the most notable difference is the inclusion of embedded content. Tweetz scrapes the content of embedded links and displays a summary of the content in a fashion similar to twitter.&lt;/p&gt;

&lt;p&gt;Other enhancements include:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Upload up to 4 images per tweet&lt;/li&gt;
  &lt;li&gt;Reweets with comments&lt;/li&gt;
  &lt;li&gt;Image viewer improvements&lt;/li&gt;
  &lt;li&gt;Inline Retweet, Like and Follower counts&lt;/li&gt;
  &lt;li&gt;Hide profile images option&lt;/li&gt;
  &lt;li&gt;Pause timeline updates when scrolled&lt;/li&gt;
  &lt;li&gt;Scrolling improvements&lt;/li&gt;
  &lt;li&gt;Mouse over user information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Several users have been testing the program since the first alpha. They have uncovered what I hope are most of the bugs. Tweetz should be stable and ready for daily use.&lt;/p&gt;

&lt;p&gt;Obligatory screen shot:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/stuId59.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>VSColorOutput 2.7 - Time Stamps</title>
   <link href="https://mike-ward.net/2019/12/08/vscoloroutput-time-stamps/"/>
   <updated>2019-12-08T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2019/12/08/vscoloroutput-time-stamps</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;Thanks to a pull request, the long standing problem of losing sytnax highlighting after saving the output buffer to a file is fixed (&lt;a href=&quot;https://github.com/mike-ward/VSColorOutput/pull/103&quot;&gt;#103&lt;/a&gt;). This took some presistence to fix because the issue involved a bug (maybe) in Visual Studio. Thanks go out to &lt;a href=&quot;https://github.com/Dmitry-Me&quot;&gt;https://github.com/Dmitry-Me&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I added a new feature; User specified time stamp specifiers. Issue &lt;a href=&quot;https://github.com/mike-ward/VSColorOutput/issues/47&quot;&gt;#47&lt;/a&gt; complained about VSColorOutput not working with another plugin that added time stamps to the output. But reading between the lines, what was wanted was a way to specify the format the timestamps in VSColorOutput.&lt;/p&gt;

&lt;p&gt;Since I was already in the code adding the pull request I figured, why not? It won’t take long to implement (it did).&lt;/p&gt;

&lt;p&gt;There are two parts to the time stamp. The first part is the elapsed time from the beginning of the debugging session. The second part is the incremental time from the previous time stamp. Both are configurable.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/IZLIcs3.png&quot; alt=&quot;Clipboard&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Do keep in mind the time formatting specifiers are .Net &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;TimeSpan&lt;/code&gt; specifiers, not &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DateTime&lt;/code&gt;. They’re different (which was news to me). Here’s an example:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mm&apos;:&apos;ss&apos;:&apos;fff&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Issue &lt;a href=&quot;https://github.com/mike-ward/VSColorOutput/issues/100&quot;&gt;#100&lt;/a&gt; removes the  &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(hh:mm:ss.fff)&lt;/code&gt; portion of the time stamp.&lt;/p&gt;

&lt;p&gt;Added a new pattern to handle Azure build/publish output (&lt;a href=&quot;https://github.com/mike-ward/VSColorOutput/issues/60&quot;&gt;#60&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Get it at &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=MikeWard-AnnArbor.VSColorOutput&quot;&gt;Visual Studio Marketplace&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Fixed Focal-Length Eyeglasses, a Programmer's Best Friend</title>
   <link href="https://mike-ward.net/2018/12/21/fixed-focal-length-eyeglasses-a-programmers-best-friend/"/>
   <updated>2018-12-21T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2018/12/21/fixed-focal-length-eyeglasses-a-programmers-best-friend</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;There was a time when my visual acuity was, “off the charts”. I could
read signs from further away than anyone I knew in my youth. Alas, as I
aged, my vision changed and now I wear eyeglasses. In fact, I wear
bifocals (progressives).&lt;/p&gt;

&lt;p&gt;While bifocals are OK for laptops (barely), they cause me to tilt my
head up to an uncomfortable angle for desktops. Also, there’s a weird
spherical effect on wider screens when using bifocals.&lt;/p&gt;

&lt;p&gt;In a word, bifocals suck for programming.&lt;/p&gt;

&lt;p&gt;I tried reading glasses which are really fixed focal-length glasses.
Said another way, they’re designed to focus at a specific distance. I’ve
found the reader glasses available at pharmacies and other stores work
fine for laptops, but not for desktops. So what’s a programmer to do?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/GHjYSCT.jpg&quot; alt=&quot;eyeglasses&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I went to my optometrist and asked for, “reading glasses” with a longer
focal length. How long? I used the length of my arm. I simply held out
my arm and said that’s the length I need my reading glasses to focus at.
A few measurements and a hundred dollars later and I now have eyeglasses
that allow me to program all day long without eye strain.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>How to Choose the Right VPN Service</title>
   <link href="https://mike-ward.net/2018/12/02/how-to-choose-the-right-vpn-service/"/>
   <updated>2018-12-02T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2018/12/02/how-to-choose-the-right-vpn-service</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;&lt;em&gt;Dear Reader: This is a guest post by &lt;a href=&quot;mailto:jack@vpngeeks.com&quot;&gt;jack@vpngeeks.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Before you start searching for the right VPN Service, you should first
make a checklist of your requirements. What’s the use of investing in a
VPN which won’t match your needs?&lt;/p&gt;

&lt;p&gt;So, to help you, we’ve put together a brief on the common mistakes
people make when &lt;a href=&quot;https://medium.com/digiprivacy/how-to-choose-the-right-vpn-for-you-your-needs-8add425315d2&quot;&gt;they’re shopping for a
VPN&lt;/a&gt;
and the main steps on how to choose the right one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Mistakes for First Time Buyers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usually, people don’t ask the right questions when they’re searching for
a VPN and tend to focus on getting the cheapest price, as many servers
and as many features as possible.&lt;/p&gt;

&lt;p&gt;Also, looking at how the VPN provider ranks in Google searches is the
wrong approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What should you be looking at?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you’re searching for the right VPN you should consider location,
privacy &amp;amp; anonymity, speed, security, technical features, ability to
integrate on mobile devices, limitations and customer support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Location&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usually, you buy a VPN to connect to a specific location or region. So,
make sure the VPN provider allows connections to that particular
location/ region.&lt;/p&gt;

&lt;p&gt;Do some research and &lt;a href=&quot;https://www.wired.com/2017/03/want-use-vpn-protect-privacy-start/&quot;&gt;check how many
IPs&lt;/a&gt;
and servers are in that region or location. It’s best if you look for a
VPN which covers a large geographical area so you don’t have to worry
about any restrictions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy and Anonymity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most users are aiming for online privacy when they use a VPN.&lt;/p&gt;

&lt;p&gt;Your best approach is to check if the service doesn’t record logs. It’s
known as a &lt;em&gt;log-less service&lt;/em&gt; or &lt;em&gt;zero-log&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Although &lt;a href=&quot;https://www.vpngeeks.com/&quot;&gt;some VPN providers&lt;/a&gt; claim that they
guarantee zero logs, they still record data such as bandwidth usage,
connection times or the IP info of the sites you visit. If you combine
that information with your ISP’s records of your online activity you’d
be stunned of what you can find out.&lt;/p&gt;

&lt;p&gt;You should also check what personal details you’re required to disclose
to the VPN provider. Keep things as simple as possible and aim for VPN’s
which only ask for your email address and a password.&lt;/p&gt;

&lt;p&gt;Consider the location where the VPN provider is headquartered so you
don’t run into bad surprises such as having your personal details
disclosed to authorities. Aim for jurisdictions such as Panama where the
regulatory framework is permissive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Speed is vital to your use of the VPN. If the connection is too slow,
it’ll damage your entire online experience. When it comes to speed, you
should consider three metrics including ping time, upload and download
speeds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ping time&lt;/em&gt; refers to the time it takes for the packet (one unit of
data) to pass from your laptop/ computer through the VPN server, reach
the destination and return. The lower the ping time, the better off you
are. Real-time apps such as voice over IP or online messaging are
drastically affected by ping time.&lt;/p&gt;

&lt;p&gt;The upload &amp;amp; download speeds refer to how rapidly data is sent and
received by your laptop/ computer when you’re connected to the VPN. For
large volumes of data transfers, you should choose high download speeds.
Upload speeds matter if you’re usually uploading large packages of data.
Which metrics are important depends on your needs. Once you’ve narrowed
it down, check for a VPN which offers the best numbers in the country
which you’re interested in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In terms of security, you should look for providers which offer
L2TP/IPsec or OpenVPN. Although OpenVPN is your best option, it’s not
supported by mobile devices.&lt;/p&gt;

&lt;p&gt;So, choose OpenVPN to connect via your PC and L2TP/IP if you want to use
your smartphone or tablet. However, the top VPN providers include both
options.&lt;/p&gt;

&lt;p&gt;The connections provided by the VPN should be reliable and consistent.
You shouldn’t need to check if you’re connected to the VPN server. It
should be running non-stop.&lt;/p&gt;

&lt;p&gt;Because hackers can trick your system to reveal the IP address when DNS
lookups are performed, make sure that your VPN uses its own DNS servers
to guarantee that your privacy isn’t breached. The VPN should have
built-in DNS leak protection systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The technical features you should look for depend on whether you have
protocol preferences such as &lt;a href=&quot;https://openvpn.net/&quot;&gt;OpenVPN&lt;/a&gt;, PPTP, or
L2TP. The most secure of the options is Open VPN.&lt;/p&gt;

&lt;p&gt;Concerning encryption, check if the VPN provider supports AES-256
cipher, SHA-512 has authentication or an RSA-4096 handshake.&lt;/p&gt;

&lt;p&gt;In terms of cross-platform compatibility, some VPN’s strip down features
of the main software to fit Android/ iOS operating systems. If you plan
on using the VPN on your smartphone, double check that the mobile
version integrates the same features as the main program.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Limitations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You’ll find that VPN providers limit the number of simultaneous
connections allowed from a low of 2 to a maximum of 6. If you plan to
use the VPN for peer-to-peer services or file sharing, check the number
of connections allowed. Other limitations may relate to amounts of
download/ upload data packets or speed at various times during the day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customer Support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even if you’re a technical expert, you can always run into issues which
you can’t resolve. Aim for a 24/7 customer support service with multiple
contact options. Live chat always prevails in terms of efficiency. To
get help on more general issues you can also look up the social media
account of the VPN provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, what is The Best VPN Provider for 2018?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Express VPN&lt;/em&gt; tops the charts as the best VPN of 2018. It offers
incredible speed, unblocks websites and guarantees unmatchable privacy.
The second-best VPN is &lt;em&gt;IPVanish&lt;/em&gt;, followed by &lt;em&gt;VyprVPN&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So why is Express VPN the No. 1 provider? Because of its incredible
performance, large geographical coverage, mobile usability, and
excellent customer support. This VPN has around 2,000 servers in more
than 148 locations and offers 30,000 IP addresses while supporting 3
simultaneous connections. It’s also very efficient at unblocking DNS
content for a wide range of streaming devices.&lt;/p&gt;

&lt;p&gt;The customer service through live chat guarantees that you can ask for
help anytime by reaching out to a professional team available 24/7.
You’ll also benefit from a kill switch (which is helpful in hiding your
IP address in case of network failure) and P2P support.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Two Handy Command Line Scripts</title>
   <link href="https://mike-ward.net/2018/10/24/two-handy-command-line-scripts/"/>
   <updated>2018-10-24T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2018/10/24/two-handy-command-line-scripts</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;I use these two command line utilities every day. There’s not much to
them but they do save me keystrokes and time.&lt;/p&gt;

&lt;h3 id=&quot;ecmd&quot;&gt;e.cmd&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;@start notepad.exe %*
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Open an editor and save this a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;e.cmd&lt;/code&gt;. Substitute your favorite editor
for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nodepad.exe&lt;/code&gt;. This saves me a few hundred keystrokes a day.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Example:

e mytextfile.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;cpcmd&quot;&gt;cp.cmd&lt;/h3&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;@echo|set /p=&quot;&quot;%cd%\%*&quot;&quot; | clip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Save this to a file called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cp.cmd&lt;/code&gt;. It copies the full file path of the
given file to the clipboard. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;set /p=&lt;/code&gt; part is needed to suppress
the newline from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@echo&lt;/code&gt; command.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Example:

cp index.html
=&amp;gt; clipboard=&quot;C:\Users\mike\Documents\GitHub\mike-ward.github.io\index.html&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Not life changing, just handy.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Tweetz 1.3.2</title>
   <link href="https://mike-ward.net/2018/09/15/tweetz-1-3-2/"/>
   <updated>2018-09-15T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2018/09/15/tweetz-1-3-2</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;Couple of new features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Multiple images are tiled to reduce vertical space&lt;/li&gt;
  &lt;li&gt;Video automatically loops&lt;/li&gt;
  &lt;li&gt;Images are copied to the clipboard when viewed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/HEOhqgX.png&quot; alt=&quot;screen shot with multiple images&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mike-ward/tweetz-desktop/releases/latest&quot;&gt;https://github.com/mike-ward/tweetz-desktop/releases/latest&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Tweetz 1.3 Release</title>
   <link href="https://mike-ward.net/2018/09/03/tweetz-1-3-release/"/>
   <updated>2018-09-03T00:00:00+00:00</updated>
   <id>https://mike-ward.net/2018/09/03/tweetz-1-3-release</id>
   <content type="html" xml:base="https://mike-ward.net/">&lt;p&gt;In brief: Removed streaming API because twitter killed it. Added multiple
image and video playback support.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/mike-ward/tweetz-desktop/releases/latest&quot;&gt;Download&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Twitter continues its quest to destroy third-party clients by once again
crippling their API. This time the streaming interface has been
eliminated. There are also changes to the direct-message API.&lt;/p&gt;

&lt;p&gt;I’ve removed the streaming API. The client now polls for new tweets.
Since the polling is throttled, the updates will be are limited to about
one per minute.&lt;/p&gt;

&lt;p&gt;This release does not use the new direct-message API.&lt;/p&gt;

&lt;p&gt;Since I was in there I added a couple of new features.&lt;/p&gt;

&lt;h3 id=&quot;multiple-image-support&quot;&gt;Multiple Image Support&lt;/h3&gt;

&lt;p&gt;If a tweet has multiple images, they are displayed. Click on each one to
see a full-size image.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/cot1fja.png&quot; alt=&quot;center&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;video-playback&quot;&gt;Video Playback&lt;/h3&gt;

&lt;p&gt;If a video is present, it will play when you click on it.&lt;/p&gt;

&lt;p&gt;I think several of you have sent in translations. I’ll add those when I
update the direct-message API.&lt;/p&gt;

</content>
 </entry>
 

</feed>
