New (touching) blog post

This commit is contained in:
Jeff Parsons 2016-03-06 10:56:11 -08:00
commit 841fbfdd9e
8 changed files with 59 additions and 4 deletions

View file

@ -1,7 +1,15 @@
{% assign include_width = "" %}
{% assign include_height = "" %}
{% if include.width %}
{% capture include_width %} width="{{ include.width }}"{% endcapture %}
{% endif %}
{% if include.height %}
{% capture include_height %} height="{{ include.height }}"{% endcapture %}
{% endif %}
<div class="screenshot-frame">
<div class="screenshot-image">
<a href="{{ site.baseurl }}{{ include.link }}">
<img src="{{ site.baseurl }}{{ include.src }}" width="{{ include.width }}" height="{{ include.height }}" alt="{{ include.title }}"/>
<img src="{{ site.baseurl }}{{ include.src }}"{{ include_width }}{{ include_height }} alt="{{ include.title }}"/>
</a>
</div>
<span class="screenshot-label">{{ include.title }}</span>

View file

@ -48,7 +48,7 @@ would happily report:
but it would NEVER display anything but deployment information. Instead, I had to browse the log files using Azure's
"FTP DIAGNOSTIC LOGS" link on the web portal -- which presents the logs as one big, ugly, fragmented mess:
![Azure Logs](/blog/images/iisnode_logs.png)
![Azure Logs](/blog/images/iisnode-logs.jpg)
Sigh. But at least the site is up and fully operational now.

View file

@ -24,7 +24,7 @@ I've done what testing I can with the Android SDK and the "Android Virtual Devic
looks fine -- you click/tap on the PC's screen, the soft keyboard pops up, and typing works. So I guess Silk is just
an outlier. I'm not sure what I'll do about it yet (or even what I can do).
![PCjs in AVD](/blog/images/avd_tablet.png)
![PCjs in AVD](/blog/images/avd-tablet.jpg)
---

View file

@ -27,7 +27,7 @@ And centerpiece of this whole conceit -- the cloning of the IBM PC ROM BIOS. Wh
scene from Episode 2, where Brilliant Engineer looks at Hot Programmer's whiteboard in awe. Apparently, he
is easily awed, because he did the same thing when Sales Guy wrote "2x fast, 1/2 price" on an earlier whiteboard.
[<img src="/blog/images/halt-and-catch-liar-thumbnail.jpg" alt='"Halt and Catch Fire" Scene from Episode 2'/>](/blog/images/halt-and-catch-liar.jpg)
[<img src="/blog/images/halt-and-catch-liar-small.jpg" alt='"Halt and Catch Fire" Scene from Episode 2'/>](/blog/images/halt-and-catch-liar.jpg)
So if you deconstruct the code on this whiteboard, you quickly notice that while it IS assembly language, it is
NOT the sort of assembly language you would find in a ROM BIOS, let alone ANYTHING that would leave you in awe.

View file

@ -0,0 +1,47 @@
---
layout: post
title: Touching Windows
date: 2016-03-06 09:00:00
permalink: /blog/2016/03/06/
---
Yesterday, I fired up [Windows 3.1](/disks/pc/windows/3.10/) and played a complete game of
[Windows Solitaire](https://en.wikipedia.org/wiki/Microsoft_Solitaire) on my iPad. And I won!
{% comment %}[<img src="/blog/images/ipad-solitaire-small.jpg" alt="Windows Solitaire on iPad"/>](/blog/images/ipad-solitaire.jpg){% endcomment %}
{% include screenshot.html src="/blog/images/ipad-solitaire-small.jpg" title="iPad running Solitaire on Windows 3.10" link="/blog/images/ipad-solitaire.jpg" %}
Converting touch events to mouse events can be a bit, um, touchy. The basic touch events are:
- `touchstart`
- `touchmove`
- `touchend`
which roughly correspond to `mousedown`, `mousemove`, and `mouseup` events, except that your finger isn't
exactly like a mouse -- it doesn't have *buttons* for one thing -- so there are several usability problems
that must be solved.
One of the problems is how to deal with the *default behaviors* of touch events. For example, tapping on a
PCjs screen is normally how you trigger the iPad's soft keyboard, and dragging your finger across the screen
normally scrolls the page up and down. However, you don't want *either* of those behaviors when you're
trying to move the machine's mouse pointer around or click on things.
PCjs attempts to resolve the tapping problem by disabling default behaviors most of the time, except when
two taps occur more than 1/2 second apart. This allows a quick *double-tap* to be treated as a double-click,
while a pair of slower taps allows the soft keyboard to activate.
Another problem is how to differentiate between *moving the mouse* (ie, without any buttons pressed) and
*dragging the mouse* (ie, with the left button pressed). Newer devices offer the option of relying on "3D Touch"
(aka Force Touch), and using pressure to determine the user's intent, but most devices don't have that feature,
and I'm not sure I'd want to rely on that anyway.
The PCjs soution: if you *tap and hold* for more than 200ms, and then start moving, your movements become the
equivalent of a *mouse drag* operation.
This is my first stab at touch-to-mouse conversion, and it's not perfect, but it's already fairly usable,
as my Solitaire experiment demonstrates. And there are still some open questions, such as how to intuitively
support operations like *right drag*, since the current *mouse drag* operation is inherently *left drag*;
one solution would be to rely on multi-touch and use two fingers to trigger right-button operations.
*[@jeffpar](http://twitter.com/jeffpar)*
*March 6, 2016*

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

View file

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 315 KiB