What if the big 5 are perceived as "magazines." That is, if you look at what the big 5 are doing it is little more than gaining an audience by offering remarkable content. When you buy a magazine you don't think about the conveyance, the staples or glue bound, high-resolution images on paper. The same will happen with tablets and other hardware. You pickup the "Vogue tablet" to read its curated content. And "Maker tablet" to read its. I am sure there will be national and international standards shaping a convergence of software and hardware as these "magazines" accumulate. Just as there is, today, an international standard for shower-curtain rings.
Comment on David Ascher's posting "Am I reading these trends right?"
What if the big 5 are perceived as "magazines." That is, if you look at what the big 5 are doing it is little more than gaining an audience by offering remarkable content. When you buy a magazine you don't think about the conveyance, the staples or glue bound, high-resolution images on paper. The same will happen with tablets and other hardware. You pickup the "Vogue tablet" to read its curated content. And "Maker tablet" to read its. I am sure there will be national and international standards shaping a convergence of software and hardware as these "magazines" accumulate. Just as there is, today, an international standard for shower-curtain rings.
Animag Photo Stands
Manual duplex printing with OSX presets
I have wanted to be able to manually print duplex for sometime but never scratched the itch until today. With a quick Google search and I discovered
http://www.maclovin.de/2009/03/manual-duplex-printing-with-osx-presets/The basic plan is to print the document twice. The first print prints only the odd pages. The second print prints only the even pages and (very importantly) with a reverse page orientation. So, print the document using the first settings. Next, take the stack of pages from the output tray and place them in the input tray as is, that is, don't flip them or turn them in anyway. Lastly, print the again document using the second settings. The result is a duplex document with the pages in the correct order in the output tray.
Max OS X allows for creating printing presets and so I have created a "Duplex Pass 1" and a "Duplex Pass 2" presets. The only bug is that the "Reverse page orientation" setting (aka checkbox) seems to be independent of the preset so be sure to make sure it is unchecked for pass 1 and checked for pass 2.
HP has a very useful application for manual, duplex printing but it has stopped working since OS X 10.8.4.
Sidewalk Graffiti Provides Navigational Assistance For Subway Commuters
http://nyctheblog.blogspot.com/2010/06/sidewalk-graffiti-provides-navigational.html
I love simple, unobtrusive signage. It can be used in physical space and virtual space. Brainstorming on this example from NYC that painted a compare rose at the exit of subway stations you could use the same technique too
* point to bathrooms near parking
* point to information booths
* point to insert-your-favoriate-coffee-franchise-here
What would you point too?
JConsole and JMXMP
java \ -classpath $JAVA_HOME/lib/jconsole.jar:$JAVA_LOCAL_LIBS/jmxremote_optional.jar \ sun.tools.jconsole.JConsole \ "service:jmx:jmxmp://$JMXMP_HOST:$JMXMP_PORT"
Other incantations just don't work. Define JAVA_HOME, JAVA_LOCAL_LIBS, JMXMP_HOST and JMXMP_PORT appropriately. Now, back to work.
Network activity records and the common good
At one time most decent roadways were private enterprises. They supported commerce and so tolls were used to support them. At some point, roads were seen as too valuable to be held in private hands and government took over the task of building and maintaining decent roadways. The same story can be told about potable water. But why did this not happen to the electric grid or the telephone infrastructure? I don't have an answer today but I do want to find out. I think the answer will lead to a better understanding as to our rights as citizens to having the activity records available for the common good.
[1] http://en.wikipedia.org/wiki/Common_good
[2] The Origins of Knowledge and Imagination. Jacob Bronowski. http://bit.ly/akd0gR
Varanasi has an almost perfect web site
The food, by the way, is fantastic. I really enjoyed the Punjabi Eggplant with spice level 4.
Ranks and snap lines in Instaviz
[1] http://www.graphviz.org/pdf/dotguide.pdf
[2] http://itunes.apple.com/us/app/instaviz/id299022481?mt=8
UpdateFor example, I want a graph to have have three ranks: The first rank contains the nodes A, C, and E; The second contains B, D, F; And the third contains X. Without ranks the following definition
digraph rankexample {
A -> B -> X;
C -> D -> X;
E -> F -> X;
C -> X;
X -> C;
}Creates this graph: 
However, adding ranks (i.e. the "snap lines") to the definition
digraph rankexample {
{ rank = same; A; C; E; }
{ rank = same; B; D; F; }
{ rank = same; X; }
A -> B -> X;
C -> D -> X;
E -> F -> X;
C -> X;
X -> C;
}I get the layout I was looking for:
Always include a telephone number
Atul Gawande: The Checklist Manifesto | Free Lecture | Forum Network from PBS and NPR
Looking for webapp suitable for community garden hub
* Wiki
* Issue Tracking
* CRM
All of these can be -- and, perhaps, should be -- feature-light. This will be used by members of a community garden. Anyone know of a turn-key solution for this?
Using a proxy & reflection to access a JMX Standard MBean
public interface HugsMBean {
boolean isHappy();
int getHugs();
void addHugs( int hugCount );
}
To use the isHappy() method requires the code
MBeanServerConnection mbeanServerConnection = ...
ObjectName happyMBeanName = new ObjectName( "com.andrewgilmartin.hugs:name=hugs");
Boolean isHappy = (Boolean) mbeanServerConnection.invoke( happyMBeanName, "isHappy", null, null );
if ( isHappy ) {
...
}
If you are using Standard MBeans to publish data it would be great for your client to also use the Standard MBean to access the data. For example,
MBeanServerConnection mbeanServerConnection = ...
HugsMBean hugs = ... // i.e. associate with com.andrewgilmartin.hugs:name=hugs
if ( hugs.isHappy() ) {
...
}
To this end, below is a little set of helper classes that use Java's reflection and proxy facilities to do just this. The first code we need is an invocation handler that will send attribute and invocation mbean requests between the proxy and the mbean server:
package com.andrewgilmartin.common.management;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import javax.management.Attribute;
import javax.management.JMException;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
public class MBeanClient implements InvocationHandler {
private MBeanServerConnection mbeanServerConnection;
private ObjectName mbeanName;
public MBeanClient( MBeanServerConnection mbeanServerConnection, String mbeanName ) throws JMException {
this.mbeanServerConnection = mbeanServerConnection;
this.mbeanName = new ObjectName( mbeanName );
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if ( method.getName().startsWith("get") && method.getParameterTypes().length == 0) {
String attributeName = method.getName().substring(3);
return mbeanServerConnection.getAttribute( mbeanName, attributeName);
}
else if ( method.getName().startsWith("set") && method.getParameterTypes().length == 1) {
String attributeName = method.getName().substring(3);
Attribute attribute = new Attribute( attributeName, args[0] );
mbeanServerConnection.setAttribute(mbeanName, attribute);
return null;
}
else {
return mbeanServerConnection.invoke(mbeanName, method.getName(), args, null);
}
}
}
And now we need a factory (or perhaps just a static creator method somewhere) to tie together the Standard MBean interface, the MBeanClient helper, and the proxy:
package com.andrewgilmartin.common.management;
import java.lang.reflect.Proxy;
import javax.management.JMException;
import javax.management.MBeanServerConnection;
public class MBeanClientFactory {
private MBeanServerConnection mbeanServerConnection;
public MBeanClientFactory( MBeanServerConnection mbeanServerConnection ) {
this.mbeanServerConnection = mbeanServerConnection;
}
public T create( String objectName, Class... mbeanInterfaces ) throws JMException {
T mbeanClient = (T) Proxy.newProxyInstance(
this.getClass().getClassLoader(),
mbeanInterfaces,
new MBeanClient( mbeanServerConnection, objectName ) );
return mbeanClient;
}
}
Now, connect the client and create the proxy
// connect to the mbean server
MBeanServerConnection mbeanServerConnection = ... // create the mbean client factory
MBeanClientFactory clientFactory = new MBeanClientFactory(mbeanServerConnection); // create the mbean client for the server's mbean
HugsMBean hugs = clientFactory.create("com.andrewgilmartin.hugs:name=hugs",HugsMBean.class);
// use the mbean client
while ( ! hugs.isHappy() ) {
hugs.addHugs( 27 );
}
System.out.println( "happy with " + hugs.getHugs() + " hugs");
Post script: Here is how to connect to a JMX server running on localhost at port 9999 using RMI:
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbeanServerConnection = jmxc.getMBeanServerConnection();
A vi command line helper
vif IndexerTool.javaeffectively is the same command line as
vi ./java/org/crossref/qs/citationdocument/index/IndexerTool.java(for a current project.) The script is
#!/bin/bashYou can use wild cards too. For example, this will edit ALL your java files
[ -z "$1" ] || vi $(find . -name $1 -type f)
vif \*.java
Blogger and Twitter link
<!-- TWITTER -->
<a expr:href='"http://bit.ly/?u=" + data:post.url + "&s=" + data:post.title + " (via @YOUR-TWITTER-USERNAME)"' target='_new' title='Tweet via bit.ly'>Tweet This</a>
somewhere within the DIV element
<div class='post-footer-line post-footer-line-1'>
Replace YOUR-TWITTER-USERNAME with your Twitter user name. See the original tip for more details.
Blogger and conditional widgets
<b:widget id='HTML1' locked='false' title='' type='HTML'>
<b:includable id='main'>
<b:if cond='data:blog.pageType == "index"'>
<!-- only display title if it's non-empty -->
<b:if cond='data:title != ""'>
<h2 class='title'><data:title/></h2>
</b:if>
<div class='widget-content'>
<data:content/>
</div>
<b:include name='quickedit'/>
</b:if>
</b:includable>
</b:widget>
This can be useful if you want some introductory content to be displayed to the viewers of the home page but not to viewers of of the specific posting pages.
Also, a new feature of Blogger is "Pages". Pages are named postings that can be listed and accessed by direct links. There is also a widget for showing the pages as a list or as tabs.
Shell enhancement to round-robin through list of directories
Re: What the iPad Means for the Future of Computing
What the iPhone did (and iPad will do) is to bring back sanity to interface design. For decades UI vendors — Microsoft, Apple, HP, Sun, etc — brought to tool/application front-end development well considered and consistent structural and visual interface elements. The tool’s new users needed only to learn how these elements were applied to the business function to use the tool. The value of this UI work was, some how, lost during the rise of the web.
The other element of the iPhone’s success is single user focus. The iPhone becomes the tool/application in use. User multi-tasking is not a requirement to productivity. Switcher was one of Apple’s greatest productivity successes. It was ahead of its time and ahead of the capabilities of the hardware. The hardware in the iPhone and the iPad make switching to another application fast and into the same context you were when you left.
