Jeff Sexton

Wednesday, November 26, 2008

Home Prices in Portland

City of PortlandImage via Wikipedia

http://www.bizjournals.com/portland/stories/2008/11/24/daily20.html

"The average price of a home sold in Portland dropped 8.6 percent by September 2008, compared with a year earlier, but that is still below the national average annual drop of 16.6 percent.

"According to the Standard & Poor’s/Case-Shiller Home Price Indices report released Tuesday, the price drop in the largest 20 U.S. cities between September 2007 and a year later was 17.4 percent. In the 10 largest cities, the drop was even bigger, at 18.6 percent."

Home prices in Portland continue to be somewhat of an exception to national trends. People just keep moving here...

Reblog this post [with Zemanta]

Saturday, November 22, 2008

House Music - PS3 and Mediatomb

Today in my continuing efforts to improve my music system at home, I tried Mediatomb. This yet another UPnP server that can serve up media to the PS3.

I download the Mediatomb source, did the usual configure, make and install with no problems. I made sure also that I had id3lib installed. Mediatomb uses id3lib to parse tags in MP3 files. Also, in it's XML configuration file, there is an entry to be added to get PS3 support, they say. I did that. These appear to be the only things needed.

When running, the Mediatomb web application is at port 49152. Using this you can add a folder which it will scan, adding tracks to its database. I started with my Miles Davis albums. And it seemed to work fine. After the scan I could browse though the tracks via the web page, by artist and album, or by the physical directories. It looked good. It had correctly extracted all the ID3 tag information and listed everything accordingly.

When over to the PS3, things looked good also, at first. The PS3 saw the Mediatomb server right away and browsing into it I saw the artist, album and track folders, all correct, physical folder also. My optimism was short lived however. When I got down to the level of individual tacks, it would pause for a second or two and say "
there are no titles". I retried the scans, tried some other files, the behavior was all the same. The organization was right, but no tracks on the PS3. The tracks show up perfectly through the Mediatomb administration web application, but never on the PS3.

Just for fun, I tried a directory full of digital photos. The behavior was the same. Correct directories, but "
there are no titles".

But I also noticed something that leads me to believe that this wouldn't work well anyway. When, on the PS3, I open all-tracks, it would take it a good minute or more to come back with "there are no titles". The larger the set (that would have been there if it was working), the longer this delay. If I had tried to browse all artists under "rock" or something, it would have taken it all day! What's it doing? The drive on the PS3 is going, it it coping the files locally? I also noticed that, unlike fuppes, if I select "copy" on the PS3 it again tells me that there's no files. I also did not see any clear way to tie Mediatomb into playlist support the way I need, but I really didn't get that far.

Mediatomb looks like a bust...

Update:
The trouble turned out to be that inotify wasn't working on my filesystem for some reason. I thought was... But that's a problem for another day. After doing a timed (and recursive) rescan I was able to access the media by both metadata and physical layout.

There is apparently no playlist support, but there is an add on called Gravedigger that does that. I'll try that next. At any rate, it looks like Mediatomb is using a mySQL database (?), so there's got to be some way to create what I'm look for.

Accessing music by the tags of course creates it's own problems. Although I have put a lot of effort into cleaning these up, it's still a mess.

Friday, November 21, 2008

House Music - UPnP and The PS3

A 60GB version of the PlayStation 3.Image via WikipediaThe Sony Play station 3 is a Digital Living Network Alliance (DLNA) compatible device. What this means, in theory, is that I can use Universal Plug and Play (UPnP) to allow my PS3 to discover a DLNA server in the other room and play MP3 files from that server.

I've been experimenting with various ways of getting this to work with the broader goal of building a better digital music system for the house than I have had in the past. Results have been mixed.

First up, fuppes.

Fuppes is a DLNA server that runs on Linux. Downloading, building and installing fuppes is easy - the usual "./configure", "make" and "make install". Running fuppes at the command once, and then quitting right away is an easy way to setup it's basic files. With that done the file ~/.fuppes/fuppes.cfg will exist. Edit this XML file:

1) Add a shared directory with a few MP3 files in it.

2) Enable the PS3 support.

3) Edit the network section, if needed, the port, to set the Ethernet device to use and the IP addresses allowed to connect (this can all be left to default if you have a simple environment).

Now run fuppes again. Hit 'r' to rebuild the database. This can also be done from the web interface. The web interface is at http://yourhost:5080, unless you changed the port.

The DLNA server is now running. Over at the PS3, I found it discovered the server right away without my having to do anything. The new server was listed under media servers in the menus. I was also able to successful browse into the server from the PS3. The directory structure on my server was reflected in the PS3 menu. It played a file fine also.

Although encouraging this setup isn't all that great. I need playlist support, for one thing. The PS3 has playlist support of its own, but only for files on it's hard drive.

Fuppes can share m3u and pls files. I downloaded fapg to make some quick playlist files (I don't typically use playlist files, my old system requested one song at a time from a server I wrote myself). To build fapg, I also needed to download and install uriparser. Both where the typical "./configure", "make" and "make install". But to run fapg I also had to add /usr/local/lib to LB_LIBRARY_PATH:

typeset -x LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

Remember that something like this has to go in the environment permanently somehow if you want to use the dependent tool all the time.

The good news is that fapg worked fine for making a quick version both types of playlists for all the files in my sample directory, recursively. Also, the fuppes status web page showed the playlist objects as correctly discovered.

The bad news is that the PS3 could not see the playlist files. In addition, the virtual folder system fuppes provides to access files by meta data simply doesn't work - the PS3 does not show the virtual folder (note that you have to copy the vfolder configuration file to ~/.fuppes manually (this is described in the fuppes wiki)). In fact, no meta data is available at the PS3 at all. It only browser by directory and file name.

At this time, further development of fuppes is apparently stalled.

Although it works as far as it goes, I have to try some other approaches.

Some other things I noticed... The PS3 menus can copy a directory of files off the fuppes server onto the local drive. Once there, a PS3 playlist could be created I suppose. Also, I noticed that although the PS3 will only start playing when I select a specific file, once that song has ended it does go on to play everything in that directory. I suppose I could, at the server, write scripts that made directories full of symbolic links to files, serve that directory and call it a playlist. Not a great solution...



Reblog this post [with Zemanta]

Thursday, November 20, 2008

Spider, Again

http://cgi.ebay.com/Original-drawing-of-a-7-legged-spider_W0QQitemZ190265903424QQcmdZViewItemQQptZLH_DefaultDomain_0?hash=item190265903424&_trksid=p3286.c0.m14&_trkparms=72:1205|66:2|65:12|39:1|240:1318

ebay item number 190265903424, with free shipping!

Customer Service

Annoy-O-TronImage by Trevor Manternach via FlickrI just ordered something from ThinkGeek.com. On checkout I used PayPal, but after leaving the PayPal site I was redirected back to the exact same ThinkGeek cart page, where there was no additional, "now I've paid, finalize the order" link. I opened a new tab and found the page on their site for order status and the order was "incomplete", as checkout was not finished. But I couldn't get off the cart page without a payment (again).

I found a support email address and sent an email. I got an automated response right away. But amazingly, with about two minutes, I got an email from a live person, saying that, yes, it wasn't working correctly and they had recieved payment and the order was on it's way. I went back to the order status page and sure enough, it showed the order as ready to go.

Nice to see customer service working out for a change, at one place at least...

Reblog this post [with Zemanta]

Google Shuts Down Lively

Image representing Google as depicted in Crunc...Image via CrunchBasehttp://googleblog.blogspot.com/2008/11/lively-no-more.html

"...despite all the virtual high fives and creative rooms everyone has enjoyed in the last four and a half months, we've decided to shut Lively down at the end of the year. It has been a tough decision, but we want to ensure that we prioritize our resources and focus more on our core search, ads and apps business. Lively.com will be discontinued at the end of December, and everyone who has worked on the project will then move on to other teams."

It continues to amaze me that business ignores the potential of this sort of virtual world, and the virtual worlds that exist, I find technologicly unimpressive. Google Lively is, was, particularly odd in that it was very primitive. It would have been a great thing, in 1998. But even stranger was the fact that Lively did nothing to add to Google's business; ads. Why was there no ad tie in with Lively? After deliberately avoiding making Lively a part of the business model, Google pulls the plug with the rather odd explanation that they wish to focus on "ads and apps."

As an interesting side-bar, for some reason I can't fathom, Google does not allow the use of either Google ads, nor Google Checkout with Google Sites. However I can (could) use Google Checkout on Google's other website builder, Google Page Creator. Google pulled the plug on Google Page Creator in August, replacing it with the appearently more limited Google Sites.

I sure hope there's a long term plan in all this someplace.

Reblog this post [with Zemanta]

Wednesday, November 19, 2008

Nissan Brings Japanese Minicars to the U.S.

Vehicles per thousand people.Image via Wikipediahttp://blog.wired.com/cars/2008/11/la-auto-show-ni.html

The Cube looks looks like a big marshmallow and brings Japan's love of small cars to America, where the 30-plus-mpg wonder rolls into showrooms next fall. As the name implies, the Cube is nothing more than a box on wheels that Nissan design chief Shiro Nakamura called "clever, witty and fun, with a unique blend of fashion and function."

Looks like an interesting car. I bet people will love these!

I don't see Nissan asking for $25 billion from the tax payer...

Reblog this post [with Zemanta]

Monday, November 17, 2008

Friday, November 14, 2008

iObama

Barack Obama vs. John McCain on YouTube 2 of 2Image by adultaddcoach via Flickrhttp://voices.washingtonpost.com/the-trail/2008/11/14/the_youtube_presidency.html

"Today, President-elect Obama will record the weekly Democratic address not just on radio but also on video -- a first. The address, typically four minutes long, will be turned into a YouTube video and posted on Obama's transition site, Change.gov, once the radio address is made public on Saturday morning."


Reblog this post [with Zemanta]

Worries

New York Stock ExchangeImage by Mister V via Flickrhttp://www.theusdaily.com/articles/viewarticle.jsp?id=582074&type=Business

"Stocks adds to losses on economic worries"

Are financial news outlets just reusing the same headlines over and over and over and over and over for months at a time?

Reblog this post [with Zemanta]

Thursday, November 13, 2008

Spider

SpiderImage via Wikipediahttp://www.twelvestone.com/forum_thread/view/40497

Dear Jane,

Are you sure this drawing of a spider is the one I sent you? The spider has only seven legs and I do not feel I would have made such an elementary mistake when I drew it.

Regards, David

Reblog this post [with Zemanta]

Hmmm, Bacon...

MARINA DEL REY, CA - JANUARY 12:  Television p...Image by Getty Images via Daylifehttp://www.baconnaise.com/

"Baconnaise"
...Making the world just a little more bacony.

Reblog this post [with Zemanta]

Wednesday, November 12, 2008

Calling a BPEL WSDL From an Object Outside an SA

Simple EJB ArchitectureImage via WikipediaNext up, calling an existing OpenESB BPEL from a plain Java class that has been included in a Netbeans "Web Application" project and deployed to Glassfish in an "Enterprise Application" project.

Firstly, the web service client can be added to the Web Application project by file only, not by URL. Adding the service client by URL fails to retrieve the imported XSDs for some reason. Adding the client by local file works fine and the required service and port classes are generated in the build directory, as normally.

So far so good. I can add the call of the web service to any Java class as usual, by dragging the port reference into the editor. However, at runtime, the call fails:

javax.xml.ws.WebServiceException: Unsupported endpoint address:
at com.sun.xml.ws.api.pipe.TransportTubeFactory.create(TransportTubeFactory.java:144)
at com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:112)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
...
A quick aside about adding the web service call... One should be able to do this by right-clicking in the editor and selecting "Web Service Client Resources" and "Call Web Service Operation". However this only lists WSDLs in EJB projects. You can cannot select a WSDL that leads to a BPEL in this way, for some reason.

Back to the unsupport endpoint problem, the issue has something to do with the port I'm guessing. I resolved this by editing the generated service class and replacing the file URI for the WSDL with a full URL, port and all. Now more needs to be done - the service class is in the build directory. It is recreated each time, and the edits are lost. So to do all this, you must create a new service class. This is easy.

1) Create a new Java package in the source folder.
2) Create a new (plain) Java class in there, with the same name as your service class.
3) Paste the source of the generated service class into the new class file.

The resulting new service class will not be rebiult with the project and can be edited, to change the WSDL location.

I had to make two other edits in this new class. The last "get port" method, at the bottom, in the generated class is somehow invalid in the newly created class. How it could be valid in one place and not the other is beyond me. It is not used, so I removed it. Secondly, the new service class will need imports for the other generated classes.

The Java class can then use this new service class, with the WSDL as an HTTP URL, to invoke the BPEL.


Reblog this post [with Zemanta]

More Glassfish and Netbeans Fun

two Libyan EE-9 Cascavel on paradeImage via WikipediaSometimes, and maybe always, Glassfish holds open a deployed jar file. When you do a clean build on a Netbeans "Enterprise Application" project, the build will fail saying that the jar file can not be deleted. The jar in question will have a path something like this:

{Netbeans Projects}\Project_EA\dist\gfdeploy\Project_SERVLET_war\WEB-INF\lib

Shutting down Glassfish (completely, you may have to use O/S tools to do this) will allow the jar to be deleted and rebuilt.

This is a big problem because it seems that if you do an ordinary build, rather than a clean build, on the EA project the jar file may not be updated. In one case this lead me to get a very strange runtime error claiming that a general Java class used in the EJB project belonging to the given EA assembly, had no constructor of a given form when clearly it did.

com.iwsinc.cms.jobs.PSStatusCheckJob.<init>(I)V
java.lang.NoSuchMethodError: com.iwsinc.cms.jobs.PSStatusCheckJob.<init>(I)V
at com.iwsinc.cms.ejb.CMSTimerEJB.cmsWatchEJBOperation(CMSTimerEJB.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
...
What was happening was that the build process was quietly failing to update the EJB part of the EA project - the jar in other words, because it was held open and could be be deleted.

This problem, I would guess, only happens on Windows.

Product Version: NetBeans IDE 6.1 (Build 200805300101)
Java: 1.6.0; Java HotSpot(TM) Client VM 1.6.0-b105
System: Windows XP version 5.1 running on x86; Cp1252; en_US (nb)
Userdir: E:\openesb\.netbeans\openesb



Reblog this post [with Zemanta]

Tuesday, November 11, 2008

Creating a Timer EJB for OpenESB/Glassfish

Bourrasque...!!!Image by denis collette via FlickrThis example shows the creation of a timer for an OpenESB application, created using Glassfish. A timed code fragment will execute every 30 seconds. This example uses an EJB implementing TimedObject as the timer itself. The timer is started from a lifecycle method in a servlet as the EJB timer can not be started from EJB lifecycle methods, in the current implementation.

Here's the tools:

Product Version: NetBeans IDE 6.1 (Build 200805300101)
Java: 1.6.0; Java HotSpot(TM) Client VM 1.6.0-b105
System: Windows XP version 5.1 running on x86; Cp1252; en_US (nb)
Userdir: E:\openesb\.netbeans\openesb

glassfish-v2-ur2-b04-patch-20080729
1) Create an EJB with a local interface in an EJB project. Call the EJB EJBTimer.
2) Create a servlet in a web application project. Call it Watch.
3) create an enterprise application project and add both of the above
4) In the servlet code, right-click and use the wizard to add a reference to the EJB. It will generate this:
@EJB
private EJBTimerBean eJBTimerBean;
5) Add to the servlet code an init() lifecycle method, and include there a call to the EJB to start ticking (see the source below).
6) Modify the servlet's deployment descriptor to create the servlet on deploy. In Glassfish, it's web.xml editor calls this "Startup Order". Fill in a one. Examine the "load-on-startup" tag in the web.xml, to see what this does.
7) Deploy the enterprise application. The servlet will be created and will start the timer.

Here is the timer EJB:
package com.me.ebj;

import java.util.Date;
import javax.annotation.Resource;
import javax.ejb.Timer;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.ejb.TimedObject;
import javax.ejb.TimerHandle;
import javax.ejb.TimerService;

@Stateless
public class EJBTimerBean implements EJBTimerLocal, TimedObject {
private SessionContext sc;
private TimerHandle timerHandle = null;

public void ejbTimeout(javax.ejb.Timer arg0) {
java.util.logging.Logger.getLogger(getClass().getName()).log(
java.util.logging.Level.INFO,
"CMS0000: EJBTimerBean: Tick");
}

public void ejbPostCreate() {
// This does not work:
Date now = new Date();
initializeTimer(now, 30000, "CMS_TIMER");
}

public void initializeTimer(Date firstDate, long timeout, String timerName) {
try {
TimerService ts = sc.getTimerService();
Timer timer = ts.createTimer(firstDate, timeout, timerName);
timerHandle = timer.getHandle();
java.util.logging.Logger.getLogger(getClass().getName()).log(
java.util.logging.Level.INFO,
"Timer started.");
} catch (Exception e) {
e.printStackTrace();
}
}

@Resource
public void setSessionContext(SessionContext ctx) {
sc = ctx;
}
}
Be sure the timer includes the setSessionContext() methods, with the @Resource annotation. Also, initializeTimer() must be declared in the bean's interface.

Here is the servlet, whose only purpose in life is to start the timer (note that some basic servlet code has been left out, it's not important for the example at hand).
package com.me.servlets;

import com.iwsinc.cms.ebj.EJBTimerBean;
import com.iwsinc.cms.ebj.EJBTimerLocal;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.ejb.EJB;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Watch extends HttpServlet {
@EJB
private EJBTimerLocal eJBTimerBean;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

public void init(ServletConfig config) throws ServletException {
super.init(config);
// Start the timer
// to-do: MAKE SURE only one timer is started!!
try {
eJBTimerBean.initializeTimer(new Date(), 30000, "CMS_TIMER");
}
catch (Exception e) {
java.util.logging.Logger.getLogger(getClass().getName()).log(
java.util.logging.Level.SEVERE,
"Exception", e);
e.printStackTrace();
}
}

public void contextInitialized(ServletContextEvent sce) {
}

public void contextDestroyed(ServletContextEvent sce) {
try {
// to-do: Stop the timer
} catch (Exception e) {
e.printStackTrace();
}
}
}
It took me awhile to figure out that to do this (this way), the EJB and the servlet must end up in the same ear file, that the annotation in the servlet for the EJB needs to be the interface, not the bean itself, and that the EJB needs to get its SessionContext using a @Resource annotated method, just as shown above.

On deployment of the web application, an exception is thrown by the EJB. The cause is not known at this time. i found a handful of questions on the various forums asking about this. This exception does not seem to impact the timer in anyway, as far as I can tell.
java.lang.IllegalArgumentException: "timers"
com.sun.enterprise.management.support.OldTypesBase.oldObjectNameToJ2EEType(OldTypesBase.java:153)
com.sun.enterprise.management.support.oldconfig.OldProps.(OldProps.java:187)
com.sun.enterprise.management.support.LoaderOfOldMonitor.oldToNewObjectName(LoaderOfOldMonitor.java:265)
com.sun.enterprise.management.support.LoaderOfOld.syncWithOld(LoaderOfOld.java:415)
com.sun.enterprise.management.support.Loader._sync(Loader.java:548)
com.sun.enterprise.management.support.Loader.sync(Loader.java:522)
com.sun.enterprise.management.support.Loader.handleMBeanRegistered(Loader.java:209)
com.sun.enterprise.management.support.LoaderRegThread.processRegistration(LoaderRegThread.java:204)
com.sun.enterprise.management.support.LoaderRegThread.process(LoaderRegThread.java:253)
com.sun.enterprise.management.support.LoaderRegThread.run(LoaderRegThread.java:154)



Reblog this post [with Zemanta]

Tuesday, November 04, 2008

Joe

http://www.toledoblade.com/apps/pbcs.dll/article?AID=/20081104/NEWS09/811040382/-1/NEWS

"In the written report, Officer Bailey cited an ongoing investigation of a Toledo police clerk's alleged improper check of Mr. Wurzelbacher's records in a state database as the reason a warning was issued.


"This unit gave warning because of ongoing investigation of the Toledo Police Department involving Mr. Wurzelbacher and felt issuing a citation could have negative repercussions to the department and the city as a whole," the officer wrote."

Reblog this post [with Zemanta]

FX

LOS ANGELES, CA - JANUARY 31:  Democratic pres...Image by Getty Images via Daylifehttp://www.politico.com/news/stories/1108/15213.html

"...when CNN’s Wolf Blitzer talks with Candy Crowley from the Obama headquarters in Chicago on Tuesday evening, the correspondent could simultaneously appear in the New York studio—at least as a 3-D hologram. Really.

Although CNN's takes the prize for most extravagant election-night bells and whistles, each network will pack studios with their entire stable of anchors, pundits, analyst and correspondents, while bringing out every gizmo in their arsenals to break down the results—including such primary night favorites as CNN’s “Magic Wall and Fox’s “Bill-board.”

I'll have a map with some push pins! Nah, maybe I'll just skip it...


Reblog this post [with Zemanta]

3D modeling Advertising Air Canada Airline Alfa Romeo Spider Touring Gran Sport Analog signal Android Anomalies and Alternative Science Apache Apollo Astoria Augmented reality Aurora Famous Fighters auto-awesome Automobile Autos Barack Obama Batman Beards Beer Bell System Berkshire Hathaway Bigfoot Bird Food Bird Toys Birds Birthdays Blogger Books Build Management Business and Economy Business Process Execution Language Byte-order mark Canadian Carrot Cats Christmas Civil Defense CNN Cockatiels Collections Crows Dear Jane Debian Diabetes Digital Living Network Alliance Digital television Disney Doll House Dow Jones Industrial Average Duesenburg SJ Roadster Durham University E-mail address ebauche Economics EJB Energy development Enterprise JavaBean ESP Facebook Fedora Filesharing Finance Ford Fossil fuel Garfield James Abram Garfield Minus Garfield Glassfish Global warming Golden Arches Goofy Google Google Buzz Google Docs Google Lively Google Photos Google Reader Google Wave Google+ Greenhouse gas Half-Life 2 Helbros High-definition television History Hybrid electric vehicle IBM Inner city Instagram Insulin Investing Irony J.C. Penny Jane Austen Java Java Architecture for XML Binding JDBC Jeff's! Jim Davis joe the plumber John McCain Karma Kay Thompson Kermit the Frog Kids and Teens LA Auto Show Larry King Laser Logging Lowry Sexton Mark Cuban Market trends McDonald Meier and Frank Microsoft Microsoft Windows Models Monkey monsters Moon MOUNT HOOD Music Music industry Muxtape MySQL NetBeans Netflix Nintendo Nissan Cube Norm Coleman Nuclear fallout Nuclear warfare Office Depot Open ESB Oracle Corporation Pacific Ocean Packard Boattail Pearl District Pearl District Portland Oregon Philip K Dick photography PlayStation 3 Pocher Pokémon HeartGold and SoulSilver Politics Portal Portland Portland Development Commission Presidents Pride and Prejudice Programming Projects Radio Recipes Recording Industry Association of America Renewable energy RIAA Robot Chicken Rock-paper-scissors Sarcasm Science fiction film Serbia Service-oriented architecture Shopping Slide Rule Social Security Social Studies Society6 Spirit of St. Louis SQL Stanford Hospital Star Wars Starbucks Stock market Strip search Sun Microsystems T-Mobile TechCrunch Technical ThinkGeek Toaster Total Recall Transportation Security Administration Unicode United States United States Department of Homeland Security Universal Plug and Play Unknown Primates Vegetable garden Video game Vintage Images Vintage Vintage! Virtual world Volvo C70 Wall Street Warren Buffett watches We Can Remember It for You Wholesale Web service Web Services Description Language Wii Windows 7 Windows Phone 7 Windows Vista Windows XP X-Files X-ray vision XML XML Schema YouTube Yugo Zima