At a recent town hall meeting, a State Department employee asked Hillary Clinton why employees were not allowed to use Firefox. When it was suggested by Pat Kennedy that the reason was likely cost, it was humorously pointed out that Firefox is free! Har har! Yeeeah daaawg! Hand slap!
In a rare moment for government, Kennedy actually went on to explain what he meant by cost, which may have nothing to do with the actual cost of licensing the software itself. Maybe he just got lucky, but he's absolutely correct.
I've been crybabying about Firefox's complete lack of enterprise support for many, many years. We all know just how entrenched Internet Explorer remains in the corporate world, and this is responsible for much of the market share it still clings to. If Mozilla would just start offering services for business users, I think it would dominate the market in short order.
What do I mean by "support" and "services?" I'm not talking about contracts or paid subscriptions or anything icky. Maybe I can shed some light on the issue by describing what it's like to manage Internet Explorer on corporate desktops.
1) Even the most basic Windows Server can run, at no additional "cost", a service called WSUS, or "Windows Server Update Service" or something goofy like that. Using WSUS with group policies, even the most inexperienced IT professional can gain complete control over updating and patching just about all Microsoft products, including Internet Explorer, on all of the machines he's responsible for.
When a security vulnerability is patched in Interenet Explorer, which happens every 2.74 minutes, I can push the update out to all of the machines in my domain. It doesn't matter that the user who uses the machine has no administrative rights, and the user has no control over whether the update is applied. Thus using WSUS I can easily see exactly what's up with every installation of Internet Explorer on my network. To my end users it's completely transparent.
2) When using Internet Explorer in a Windows domain, it is trivial via group policy to completely control the behavior of Internet Explorer for all users and / or machines. I can lock down security settings, configure default home pages, and all sorts of fun stuff. Mozilla does not directly support this for Firefox.
3) If machines in a business environment are running Windows, then it's very likely that any local browser-based services are using some form of Windows authentication. With Internet Explorer this is of course supported by default. When a user logs on to a machine and uses IE to hit the corporate intranet, he is automatically logged in to the site using his domain credentials. The user has absolutely no idea that he's logging in, it just works.
With Firefox NTLM authentication does exist and actually works. In fact, I can configure Firefox and actually use it to browse a local Sharepoint site, and from an authentication standpoint it works just the same as IE. However, I cannot easily push these settings out to Firefox installations using group policy.
Ok, so what does Mozilla need to do in order to get the enterprise online with Firefox?
1) Offer a simple way to control updates. We cannot simply hope that users update when prompted, and updates won't even work for locked down users, which is about 99% of them. Requiring that IT build and deploy an .MSI every time Firefox is updated is unreasonable and costly.
There are projects out there like FrontMotion that offer a Firefox package that takes away much of the burden, but this makes us rely on FrontMotion for timely updates. This is not something I want to leave to some independent third party. This is exactly what I want *from Mozilla* itself.
2) Offer administrative templates so that Firefox can be configured via group policy, including the ever-important NTLM authentication settings. Again, this has to come directly from Mozilla or it's probably just not going to fly.
That's it.
How much work would this be for Mozilla? I dunno, but gauging by what FrontMotion does, I don't think it's an insurmountable task. (I think FrontMotion might just be one person!) Considering the market share that Firefox would gain, I'm absolutely dumbfounded as to why they haven't even tried this yet. It's not like it hasn't been requested by users for years and years!
"Ok, well if it's really not that hard, then why not just do this yourself in-house?"
Because that would *cost something*. Just sticking with Internet Explorer doesn't cost anything more than what I'm already spending. Yes, it's an inferior browser, but it works and users are familiar with it. Its security shortcomings are mitigated by making sure that all users have restricted accounts. (It's not like Firefox doesn't have security problems from time to time)
Since Firefox is a better browser in many ways which we don't even need to get into, and a lot of people are now using it at home, I can matter-of-factly state: if Mozilla was able to give me what I want, I would immediately offer the option of Firefox on all desktops and over time switch all default browsers to it. Everybody wins, right? What's the holdup?
Thursday, July 16, 2009
Why the State Department Doesn't Use Firefox
Friday, May 22, 2009
Vista Multiple Monitors Bug with Terminal Services
If you're running multiple monitors on a Vista machine, and then login to that machine remotely, your remote view will only show the contents of the primary monitor (resized appropriately).
This isn't such a big deal, but if you do this regularly you'll certainly have run across a bug in which the secondary monitor will be reset to its lowest resolution when you log on to the dual monitor Vista machine locally. I think I've blogged about this problem before, but now I have a fix:
When the secondary monitor is stuck at its lowest resolution, do the following:
1) Right click on the desktop and choose Personalize.
2) Click on Display Settings.
3) Adjust the secondary monitor to maximum resolution and click apply.
4) Curse loudly because the monitor resets again to low resolution.
5) Adjust the secondary monitor to maximum resolution and click apply.
6) Goddammit.
7) Disable the secondary monitor and click apply.
8) Adjust the secondary monitor to maximum resolution and enable it.
9) Whatthehellisgoingon?
10) Adjust the secondary monitor to some value between its lowest resolution and maximum and click apply.
11) Eh? For some reason this resolution will stick.
12) Adjust the secondary monitor to its maximum resolution and click apply.
13) Goldarnitall! It'll be back to its lowest resolution.
14) Adjust the secondary monitor to its maximum resolution and click apply.
15) Repeat step 14 until the secondary monitor finally adjusts to maximum resolution.
16) Write blog post.
As you can see, this is a relatively simply procedure. I decompiled the Vista code for setting display resolution, and think I've found the bug (I prettied it up a bit for readability):
if ((userLastLoggedInFrom() == TERMINAL_SERVICES) {
if ((attemptsToChangeResolution() < 35)
&& (rand(100) == 42)) {
setDisplayResultion(requestedValue);
} else {
setDisplayResolution(
(requestedValue < MAXIMUM_RESOLUTION)
? requestedValue : LOWEST_RESOLUTION);
}
}
As you can see, the magic value "35" should probably be something more reasonable, like "23". Perhaps there is a registry hack.Oh well, this isn't quite as bad as keeping dual monitors working correctly on Ubuntu, for which the only proven solution consists of copying random xorg.conf files from Google searches until you find one that works.
Thursday, May 7, 2009
Server Fault Answers Your IT Questions!
The guys who gave us Stack Overflow have recently begun the private beta of their new site: Server Fault. If you've got an account on Stack Overflow with a reputation above 100 points, then you're eligible to try it out.
For those not in the know, Stack Overflow is a place for asking and answering computer programming questions. Unlike traditional web forums, the Stack Overflow community enforces a strict question and answer policy that allows very little room for back and forth discussion. Along with a very game-like reputation system and wiki-ethic, this results in fairly solid questions with very firm answers.
What makes Stack Overflow so special is that it's fun. Because it's fun, questions get answered fast. Very fast. Really, it's changed the way I think about interacting online when trying to solve a problem. In a traditional forum one might expect an answer to question in a few hours, maybe a few days, and maybe not at all. On Stack Overflow I'm typically seeing my questions answered within 15 minutes. If the question is particularly obscure, maybe an hour or two. The quality of the answers is excellent because your "thread" doesn't die out with people asking questions about your question or taking guesses at the solution.
Anyhow, the Stack Overflow people are bringing this resource to the IT community and man do we need it. The IT community is scattered all over the web with only a few horrible sites like Experts Exchange trying to serve as a catch-all. Hopefully Server Fault will become the one-stop resource that we so badly need.
Friday, February 27, 2009
New Carreer Path: Snopes Consultant
By now, every single person working in any business that uses email is familiar with Snopes.com. They all know about Snopes because every time one of them forwards a chain letter, an annoying twerp like me sends back a link to Snopes. This annoying twerp makes sure to hit the reply-to-all button so that everyone in the whole freaking company can bask in the forwarder's gullability.
What's odd about this whole notion is that it even exists -- the problem, I mean. The problem of forwarding stupid chain letters with fake health warnings, fake George Carlin quotes, fake pictures of the IT guy picking his nose, etc. No matter how many times a person has been "snoped", they will continue to forward every piece of misinformation that hits their inbox. After a while they'll even preface their messages with something like, "I'm not sure if this is on Snopes or not, but..."
That last bit got me thinking. Perhaps I should start a Snopes Consulting Service through which people could call in and ask if what they're about to forward to five hundred people is true or not. While a phone service doesn't exaclty jive with our new Web 2.0 world, I think that it's the appropriate technological medium for this class of people.
Me: "Hello, Snopes Dopes, Inc."
Them: "Yeah I got this email and..."
Me: "What's the title?"
Them: "Um.. FW: Giant snake served in military with George Ca..."
Me: "Fake! This bit of sanity brought to you by download.com, your number one source of downloading from dot com."
See, there's even a monetization strategy!
Tuesday, February 24, 2009
Things You Should Know About Liferay in the Enterprise
A few days ago I wrote a goofy post about the current state of open source Java-based portal software in which I half-concluded that Liferay is the only choice worth considering, and that unfortunately Liferay will drive a person completely insane.
I stand by my claims, but after the comments I received I think that I need to let people know where I'm coming from. What I want from a portal is an out-of-the-box collaborative experience to synergize my enterprise. But seriously, what I want is an application that can satisfy two basic requirements:
1) The application should provide all of the basic collaborative features that one would expect to use here in 2009. What does that mean? It means wikis, blogs, forums, chat, file sharing, etc. These are not things that I want to spend time implementing.
2) The application should be extensible. This is the whole point of a portal, and all portal applications meet this requirement.
Given these requirements and then considering the sorry state of open source portlets, the only choice worth considering is Liferay. The whole point of Liferay is that BAM, your Intranet portal is up and running and usable, and you can get on with implementing the important bits that are specific to your business.
When you first install Liferay, it's a very "WOW!" experience. It actually starts up and works and looks slick. Drag & drop, tons of portlets, etc. For a good week or so you can have a lot of fun setting it up and showing it off; your friends and collegues will be amazed! But when you actually start to get in to the nitty gritty of your Liferay implementation, things start to fall apart.
I spent a fair bit of time trying to decide if I should write this post or not. On one hand I'm really starting to like the Liferay community, and the developers seem like good people. On the other hand, there's not a lot of information out there about Liferay and I feel like the whole point of the "blogosphere" is to share our experiences for the betterment of all. Everything I'm writing here is based on my own personal experience with Liferay, and unfortunately, just about everything I write from here on is going to be negative.
Advice about Liferay in the Enterprise (or just your Business):
1) Liferay security is extremely poor.
I know that this might be a little controversial as I've read other blogs praising Liferay's permissions system... but really, just because something is really hard to understand doesn't mean that it's good, or even working.
If you're setting up Liferay in your business, then it's imperative that you test and re-test the restrictions in place on every single bit of data that you're exposing through your portal. One of the biggest problems I've had with Liferay is little pieces of confidential information showing up here and there for people who should not have access to it.
For example, the search portlet *will* comprimise security by showing search results, complete with abstracts, to users that should not have access to them. If you have a wiki hiding somewhere in a closed community, and have the tightest permissions on that thing you can possibly set, the search portlet is still going to show results from that wiki to every knucklehead on the site. The reason for this is that Liferay's opensearch implementation doesn't yet do "Liferay permissions." There's no big warning anywhere about this, so hopefully you found out about it by reading this instead of the hard way. My advice: do not use the search portlet.
Another example is the fine-grained permissions for each portlet. Often times they simply do not work correctly. Take the message board: if you create a restricted category (e.g. "forum"), then the posts in that category do not inherit its permissions, and are viewable by anyone with a link. Then, even if you lock down the security of each post in the restricted category, the post title and abstract will still appear to anyone who clicks the "Recent Posts" tab! This problem isn't isolated to the message board; I've found similar behavior in the document library and blog portlets. My advice: do not use fine-grained permissions in Liferay. I should also note that the activities portlet doesn't respect fine-grained portlet permissions at all.
If the above aren't enough to make you uneasy, then there is also a report of an NTLM bug in which any non-domain user can login as any user with a blank or random password. This is a big one, and one that should have been nailed immediately. That it existed in 5.1 and still exists in 5.2.1 is inexcusable. My advice: do not expose your Intranet portal to the outside world.
2) Liferay is very buggy.
It seems like everytime I try to set something up, whether it be a wiki or a blog or whatever, I run into some maddening bug. For instance when editing a wiki page or forum post, all of the new line characters disappear! This makes the entire wiki virtually unusable or at least a significant pain in the rear. A bug report was filed for this one and a fix has been committed, but the problem exists in the default 5.2.1 package that you're going to download. Heck, it even exists on the Liferay community site itself.
Aside from that I've seen 3rd party portlet javascript completely break Liferay's javascript, bugs in the new scoping feature, portlets that simply don't install or work, and a variety of other flaws. Without going into detail about every annoying little thing that I've run across, I'll just leave you with this: be prepared to download the Liferay source and do a bit of patching yourself.
There are hundreds of bugs in the Liferay JIRA, and something like 75+ critical bugs. They don't seem to get patched up very quickly. I know the developers are doing the best they can.
3) Documentation is hit or miss.
The Liferay Administrator's Guide is fantastic. Unfortunately, it's for 5.1 and some important bits aren't going to work for 5.2. Things like database configuration. The Liferay wiki is ok, but I really have a hard time using it. For whatever reason, it's very hard to drill down to topics that are relative...everything's in this search view that returns way too many results. I hate wikis for technical support anyhow because the information is almost always incomplete or out of date.
4) Community is hit or miss.
The community can be really great, and it can also be really bad. What I've found is that a single user who really gets on the ball in the forums can start a chain reaction and forum usage goes up. All too often, however, the forums seem to wither and a lot of posts with good questions go unanswered.
If you're going to use Liferay, then I recommend getting active in the community, and don't let your questions go unanswered. Bump away. The traffic on the forums isn't very high so nobody is going to get too upset.
5) The permissions system is whack.
There's a hilarious diagram in the Liferay Administrator's Guide that is intended to make the permissions system easy to understand. On the contrary, it just demonstrates the complexity. Maybe I'm "old school" or something, but users and groups are just fine. Want to throw in roles? Fine. But I don't need communities and organizations and locations and public and private pages and everything else all mixed up with users and groups and roles.
Here's what I recommend: assuming that you're going to want to bring your users in from LDAP or some external source, don't bother using Liferay organizations. The idea behind organizations is interesting, but the benefits of using them are very few and I've run into more bugs due to the added complexity. Instead, just use Liferay communities. Unlike organizations, user groups can be associated with communites, which allows you to grant access to a particular community to a user group that you've imported via LDAP. This way you can manage your users in a more centralized way, which is sorta the whole point of LDAP.
Another recommendation: use public pages sparingly. From what I can tell, public pages in Liferay are groups of pages with Guest access hard wired to "on". I can't think of many good reasons for this in a corporate environment, especially if you occasionally have guests on your network.
6) Liferay releases are... odd.
Be very careful before deciding to upgrade to the latest release of Liferay. With 5.2 we saw changes to database setup that were sort of hard to find, a bunch of example data that had to be physically removed, and a whole bunch of portlets and themes that took a month or so to be released.
7) Performance is pretty poor.
Now maybe I'm being too harsh, but the requirements for running Liferay are pretty high. Be prepared to dedicate a server instance to Liferay with a couple gigs of memory and a decent CPU.
Ok, so I think I've covered everything that's bothered me about Liferay thus far. Reviewing my list, it almost seems like Liferay could use some real business-grade suit-and-tie management to make sure that priorities are set and that the project as a whole moves in some well-defined direction. With things like Social Office taking up developers time, I really don't see the overall quality of Liferay improving much. Given that, it's important to take it for what it is and work around its problems and limitations because it is a good product. It's miles ahead of the other portals out there in terms of end user experience, administration, and simply getting a full-featured portal up and running in short order.
Wednesday, February 18, 2009
Microsoft Small Business Server 2008 - Great Value?
I've used Small Business Server and for the most part have found it to be a pretty good product at a pretty good price. I was surprised recently to learn that they've removed ISA Server from SBS 2008, and decided to go see exactly what you still get in the latest version SBS.
From Microsoft's own SBS feature list:
1) Windows Server 2008 Standard. Ok, that's sort of expected.
2) Exchange Server 2007 Standard. Ok good, this is necessary in the age of Outlook.
3) Windows Sharepoint Services 3.0. Um...this is a "free" product.
4) Forefront Security for Exchange. 120 day TRIAL VERSION? Odd...
5) Windows Server Update Services 3.0. Hm, this is another "free" product.
6) Windows Live OneCare. Another 120 trial version! Wha??
7) Microsoft Office Live Small Business. Yet another trial!!
8) 900 Free Minutes of America Online! Just kidding.
9) SQL Server 2008 Standard for Small Business. Ok, whew. It's something anyhow.
So let's see what we've got here. It looks like 3 major server products, two free products, and three trial products.
Ok, so for the three products you actually get (note, only the Premium version gets you SQL Server), the price is still pretty good. However, I wouldn't recommend running SQL Server in a small business. It's just not worth the lock-in. Free database servers like MySQL are powerful enough for just about any small business need, and you aren't restricted to how many instances you can install and on which machines, etc.
So really with SBS 2008, it looks like the real benefit is that you get Windows Server and Exchange at about half price. It's not a bad deal, but you are trading some flexibility.
ISA Server will be missed. Although it was a bloated pain in the ass product, it does offer one feature that most external firewalls don't: management of rules and policies and even reporting for specific active directory groups and users. The integration is what sold it. Oh well.
Thursday, February 12, 2009
How to Select an Open-Source Java Portal for your Enterprise
As usual, I'm spending a lot of time trying to select the appropriate open-source java-based portal for my enterprise (e.g. "company"). I say "as usual", because I've been doing this for a couple of years now. With this vast experience under my belt, I thought it appropriate to share my strategy and process with you all.
1. Determine Your Requirements
This is the best part of portal research! You should write down every cool idea you can think of. Dare to dream big!
Ok, now start crossing stuff off until you're left with the following:
Requirement #1: Portal must work.
Requirement #2: Portal must include Amazing Google Maps Mashup portlet, RSS Reader portlet, and Analog Clock portlet.
There, now you've chosen some realistic requirements.
2. Observe the Desolate Playing Field.
Ok, there are really only a few choices here, so let's not complicate things too much.
Contender #1: Liferay.
Contender #2: Jboss.
Contender #3: eXo.
Contender #4: GridSphere.
Contender #5: StringBeans.
Contender #6: Jetspeed and the like.
3. Choose Liferay
It's just the obvious choice. It looks good. It's easy to create layouts. It has an analog clock portlet. Oops, analog clock isn't available on the latest version. Oh well, it still has Google Maps and an RSS reader, which are both critical to business operations.
But seriously, it has a crapload of portlets and is fairly easy to get running.
4. Fall Out of Love with Liferay
Ok, you know that one feature that you left in your requirements even though I told you to cross it off? You know how you're all excited about Liferay having a sweet portlet that satisfies that requirement? Well, that feature is probably broken.
5. Hate Liferay
This is a big step in our process. It takes a little while to get to this point, and it's important to simply confront the fact that you hate Liferay. Listen, it's ok. Don't feel bad for the way you feel. We've all asked questions in the Liferay forums, and we've all experienced that 90% of them go unanswered. We've all been trapped by a bug fix over here that breaks something over there. Yes, my friend, that portlet really did disappear after you upgraded, and it might not be coming back for several months. No, the code comments aren't just hiding somewhere.
6. Visit JBoss Website
Jboss Portal is it. This is a big company sponsored project. We all know about it. Hell, we have unopened email somewhere deep in our inbox from a RedHat salesman trying to sell us this amazing free software. Look at this site, it's so awesomely corporate.
7. View JBoss Portal Demo on JBoss website.
8. Download eXo Portal.... and stuff
So you've heard a lot about eXo, and holy crap the featureset is huge. This one product can do everything you need, and everything you didn't know you needed. Except it's not just one product, it's a half dozen different products. Oh, but there's an "all-in-one" product, cool. Wait a minute... how the hell does this thing work... let's look at the documentation...
9. Visit Gridsphere Website.
Quick, find a screenshot. I'll wait.
10. Check out StringBeans.
Wha?
11. Look at JetSpeed, uPortal, and All the Other Products That Would Appeal to those Guys Who Use vi and Brag About It.
12. Go Back to Liferay
By this time you've forgotten all the bad times, and Liferay is starting to look pretty hot again. Maybe this time it'll work out. Maybe it was just you. Maybe Liferay has really changed this time.
13. Repeat this Process ad nauseam.
Meanwhile, you're still using Sharepoint.
Wednesday, November 26, 2008
Windows 3.1 Lives On Through Vista
If you're anything at all like me, then you were deeply saddened to learn that Microsoft has recently discontinued the licensing of Windows 3.1.
Hey now, cheer up! A little part of Windows 3.1 is still with us. You could even say that it will always be a part of us -- living on in our hearts and nostalgic memories of simpler times. You could also say that it lives in in the form of this dialog box that I found in Vista when trying to install a new font:
Friday, November 14, 2008
JAX-RPC Client in Netbeans 6.5RC2 vs Eclipse Ganymede
I'm not certain, but I think there's something goofy with the JAX-RPC client support in Netbeans 6.5 RC2 using the JAX-RPC Web Services plugin version 0.2.
I'm attempting to interface with a Liferay 5.1.2 instance so that I can add and modify users from an external application. Nothing too difficult. After installing the JAX-RPC plugin in Netbeans, I chose New->Web Service Client and pointed the dialog to the WSDL URL that Liferay provides. For example: http://10129:password@liferayserver:8080/tunnel-web/secure/axis/Portal_UserService?wsdl . Note that I'm passing a Liferay user-id and password and specifying /secure/ in the URI. This Liferay user-id happens to correspond to an administrator in my portal instance. While it is possible to get the WSDL without going through authentication (just omit /secure/ and don't pass credentials), I wanted to give Netbeans all the hints I could to make this easy on myself.
At this point Netbeans went about creating a massive number of files to consume the service. Seriously, a boatload. Once the client was created I tried testing the service using the functionality in Web Service References, but kept getting deserialization errors about an "invalid boolean value". No matter which function I tried to call I got the same error. Interestingly enough, by making a few intentional mistakes and watching the Liferay logs I could see the actual calls were making it to the server just fine, and I guess that makes sense since the errors are during deserialization of the returned data.
I tried sticking a client invokation on a JSP in my project by right-clicking in the open JSP file and choosing Web Service Client Resources->Call Web Service Operation. Specifically, I'm trying for getUserById(LiferayID) from which I should receive a Liferay User object, and from that I'm going to display the user's email address on my page.
No luck. Same damn deserialization error, this time reported in the Glassfish V2 output. It looks something like this:
java.rmi.RemoteException: Runtime exception; nested exception is:Awesome. I stepped through the code with the debugger and while I can see the exception occuring, I don't really understand why it's occuring. I did some searching online and couldn't find much except some complaining about Netbeans JAX-RPC support in general.
deserialization error: invalid boolean value:
at com.sun.xml.rpc.client.StreamingSender._handleRuntimeExceptionInSend(StreamingSender.java:348)
at com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:330)
at com.sgmbiotech.liferay.client.UserServiceSoap_Stub.getUserById(UserServiceSoap_Stub.java:1432)
...
Caused by: deserialization error: invalid boolean value:
at com.sun.xml.rpc.encoding.SOAPDeserializationContext.deserializeMultiRefObjects(SOAPDeserializationContext.java:107)
at com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:256)
... 35 more
On a hunch that the problem was with Netbeans' code generation, I decided to fire up Eclipse (Ganymede, full EE install) and use it to generate the appropriate classes. I created a new web project and then did a New->Other->Web Services->Web Service Client, turned the slider down to "assemble client", and pointed the service definition at the Liferay WSDL file. Note: I recommend copy / pasting the URL to the WSDL file into the service definition field in this dialog, because using Browse and typing it in is an experience much like falling off a moving truck into a giant pile of cheese graters. I won't go into it.
Eclipse generated the client for me which consisted of only six class files, unlike the 312 that Netbeans produced. It even used good package names. I believe it Eclipse in this case is just calling out to WSDL2Java from the Axis project, because I've done it by hand once or twice and got very similar results if memory serves me.
I manually imported the Eclipse-generated client into my Netbeans project, added some necessary jar files, hand-wrote the call in my jsp file and voila - IT WORKED.
The invocation code in the JSP file looked like this:
com.liferay.portal.service.http.UserServiceSoapProxy proxy = new com.liferay.portal.service.http.UserServiceSoapProxy();
((javax.xml.rpc.Stub)proxy.getUserServiceSoap())._setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, "10129");
((javax.xml.rpc.Stub)proxy.getUserServiceSoap())._setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, "test");
((javax.xml.rpc.Stub)proxy.getUserServiceSoap())._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, "http://liferayserver:8080/tunnel-web/secure/axis/Portal_UserService");
com.liferay.portal.model.UserSoap user = proxy.getUserById(10129);
response.getWriter().write(user.getEmailAddress());
Note that setting username, password, and the endpoint is required.
The Netbeans code that didn't work looked like this:
try {
client.UserServiceSoapService userServiceSoapService = new client.UserServiceSoapService_Impl();
client.UserServiceSoap portal_UserService = userServiceSoapService.getPortal_UserService();
((javax.xml.rpc.Stub)portal_UserService)._setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, "10129");
((javax.xml.rpc.Stub)portal_UserService)._setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, "test");
((javax.xml.rpc.Stub)portal_UserService)._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, "http://liferayserver:8080/tunnel-web/secure/axis/Portal_UserService");
response.getWriter().write(user.getEmailAddress());
} catch(javax.xml.rpc.ServiceException ex) {
java.util.logging.Logger.getLogger(client.UserServiceSoapService.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch(java.rmi.RemoteException ex) {
java.util.logging.Logger.getLogger(client.UserServiceSoapService.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch(Exception ex) {
java.util.logging.Logger.getLogger(client.UserServiceSoapService.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
Note that the calls look almost identical here, it's just that the client generated by Netbeans has deserialization issues for whatever reason.
Sorry about the bad code formatting, I don't know how to fix it with this crappy blogger editor.
Sunday, October 26, 2008
Eclipse Ganymede WTP Can Bite Me
****
I am an idiot.
The J2EE module dependencies of my project were reset when I did the renaming business. It took me an embarrassingly long time to figure this out, but I wasn't exactly helped much by Eclipse's awesome "Preferences" pages.
****
Approximately seven hours down the tubes tonight fighting with Eclipse WTP (Web Tools Platform). Everything was working fine earlier, but then I used Eclipse's own refactoring tools to rename a few projects and the whole thing went belly up. For some reason it's no longer publishing my projects properly to tomcat and I'm getting persistent ClassNotFound exceptions for classes that are not in the project that I'm actually publishing.
Build environment seems ok, all of my unit tests run fine, including tests of the Dynamic Web Project in question which references classes another Utility project, which are ultimately not found... everything works except for the publishing & running part. I can successfully create a new test client via Web Services and the client JSP pages load and fire, but when I hit the Invoke button: blammo, ClassNotFoundException: com.you.are.an.idiot.Haha not found.
I went so far as to completely wipe Eclipse and reinstall. I then re-created my workspace and projects and imported the source. I even ditched Tomcat and let Eclipse install a new one for me. Nothing. It's all hosed and I'm mad as hell.
Welp, I get to look like an ass in the morning because my working code isn't demonstratable. Sure wish I knew what happened, but don't really care. I'm giving JDeveloper a download. Sorry Eclipse, I appreciate the vision and hard work, but most of the stuff I've tried outside of the core featureset has been way too fragile.
Eclipse... *snif* ... what really chaps my ass is that this crap was working this afternoon and I was just starting to dig in and refine the interface for this project. If only I hadn't decided to friggin RENAME some projects... By now I would likely be finished.... but here I am, without a clue how to proceed without launching in to a completely different environment.
If anybody knows of a secret "clean up everything related to Eclipse and every damn piece of configuration it's ever puked up and start over from scratch" button, I'm all ears. I'm pretty sure I covered everything when I started over, but I must've missed something.
Monday, October 20, 2008
Dear AJAX, Stop That
I want my browser's STOP button back!
Or maybe I should be directing this complaint at my browser? Hey Firefox, why can't the STOP button stop AJAX requests?
Or maybe I should just stop using Google Reader for my homepage. Hey Google, enough already with the "our web page is really a web application" business. I'm damn sick of having to make sure that the Google Reader page loads up before trying a search in Firefox. If I don't wait then Reader hijacks the browser when it finally gets its results back from AJAXville, which can take up to half a minute at times.
Tuesday, September 30, 2008
Is Auto-Hiding THAT Hard?
For Blod's sake, why can't anyone make "auto-hide" work on task bars. It hasn't worked well on any version of Windows from '95 through Vista. The Downloads window in Firefox or IM notifications in MSN Messenger, as for-instances, will not allow the task bar to auto-hide properly - it'll just sit there, unhidden, waiting for you to figure out which window is trying to notify you of something or other that you don't care about.
I happen to like the task bar to be on the top of the screen, so when it doesn't auto-hide, I lose the tops of any windows up there which usually means I lose the ability to easily move them around and such. This happens to me every single day in Vista. Right now it's up there not auto-hiding and I have no idea which window is causing the problem, and whether it's just a matter of giving the offending window focus, or completely closing it to regain auto-hide functionality. I've got 3 SSH sessions via Putty, one instance of Word, three file explorer windows, one remote terminal, two Windows shells, one instance of FreeCommander, one instance of Notepad, one instance of Eclipse, an instance of Sage MAS90, 14 Firefox windows, and Outlook all running and I'll be damned if I'm going to start closing them all until the stupid Task Bar starts working right again.
This happens to me with Gnome panels also, but thankfully they do such a terrible job of "hiding" that I rarely use that feature when I'm running a Gnome desktop.
Friday, September 26, 2008
Top 10 Linux FOSS Keys
Linux and FOSS "top whatever" lists are all the rage these days on the blogoweb, so I figured I might as well cash in.
I've been using Linux and Free Open Source Software for many years now, and have developed my own set of preferences and tastes in this regard that work well for me. I thought I'd share some of them in hopes of helping out newbies or perhaps even inspiring some of the old-timers.
Specifically, I'd like to talk about some of the keys available on Linux. I realize that many of these keys might also be available on other operating systems, and I should also note that I haven't used every single key -- so if I miss an important one, let me know.
- The A key.
Not the most important key, surely, but a big dog no less. The king of the alphabet. The first letter of "Alphanumeric" and "A-Team". When used in conjunction with the CTRL key it will Select All in most of your favorite FOSS programs. Without the A key, there's no way you could view processes belonging to All users using `ps aux`, or see All sockets using `netstat -a` -- hell, you couldn't even spell netstat.
The A key. With it we can achieve the center, the essence, the heart of `man`. - The Semicolon (;) key.
Ah the semicolon, a personal favorite of mine. With the semicolon key I can look grammatically smart to people more stupider than I; of whom are many. Without the semicolon key getting a C or Java program to compile would be a miserable experience, and you can forget about your cute little PHP app with the Javascript front-end.
The semicolon key -- keeping FOSS lovers' right pinkies in shape for over 30 years. Or more, or less. I dunno, how old are keys? - The Backtick key.
Oh! the anguished, misunderstood, misrepresented backtick key. Ask a typical Windows user to press the backtick key and you'll have a good reason to chuckle arrogantly to yourself, just loudly enough so that they'll see it. "Why would I ever use that", they'll ask, full of stupid.
Often overshadowed by the tilde who found fame in mathematics, the backtick waits patiently on your FOSS keyboard, just above the Tab and just to the left of 1 -- waiting for you to need to exec something in your scripting language. Or waiting, perhaps, to be used covertly in a parameter sent to your poorly-written PHP script... but let's not generalize, not all backticks are bad just because most of them are.
Oh backtick, you kick so much ass! - The Backspace key.
The cleaner. The remover of bad. Where would be without the backspace key? We'd be arrowing around and using the delete key, that's where we'd be. What a nightmare! The delete key is one of the most overrated, poorly conceived keys on your FOSS keyboard, yet somehow it has historically taken precedence over backspace, who in some circumstances is reduced to coughing out a bunch of useless ^H^H^H characters.
Without the backspace key I wouldn't be able to remove the mistake I'm about to make. - The Spacebar.
Perhaps the spacebar should have been at the #1 spot on my list. After all, it's freakin GIGANTIC! It's so god damned enormous that it's not even called a key -- it's called a BAR. And it's a bar because it's so dang useful. Here's how your code might look without the spacebar:
intmain(){return1;}
Compile THAT! Ha!
And what a perfect name, rich with double meaning. When future earthly entrepreneurs start opening merry little establishments on space stations around the universe, you can bet there will be more than a small shake of cool joints called "The Space Bar." - The ellameno keys.
Reduced to a single letter in the minds of many by an unfortunate, cruel children's song, the l, m, n, and o keys deserve a mention. Thanks for the ls, the more, the nslookup, and the almost-middle letter of the acronym FOSS. - The Print Screen key.
A dumping ground for homeless functions, the Print Screen key has remained a part of FOSS-compatible keyboards since its early beginnings when it would actually "print the screen." Now nobody really knows what to make of it. It might take a screenshot, sure, that's cool. On some non-FOSS keyboards it might INSERT, causing your cursor to type over everything in front of it, and I guess that's manageable. But what if it SysRqs???? What the hell is that? What if it SysRqs whiles taking a screenshot of your cursor changing behavior!?
Typically located near the Scroll Lock and Pause / Break keys, the Print Screen key is made even more ominous by the unsavory company it keeps. They're there, they're proud, and it's best if you just leave them the hell alone. But if you get yourself in with this selective crowd, they might just open up a whole new level of functionality that you never knew existed. But I dunno, I don't push on them. - The Esc key.
Let's face it, the escape key is losing relevance. Rarely does the esc key actually perform any useful function -- just what does it mean to "escape" in a modern operating system anyhow? Richard Stallman completely redefined the key when he wrote Emacs, turning into some kind of freakishly meta bastard, and nobody even noticed! Nobody stopped to think, "hey, if I press M-c, an awesome feature to capitalize the first letter of a word, won't it cause me to 'escape' from Emacs?" No, no it won't.
Look, the esc key might not have any functional relevance when it comes to your FOSS software, but it does have one very important function in the physical world. It gives you something to beat on when your FOSS programs that aren't supposed to crash suddenly stop responding. As if it were the controls to a time machine, we beat the hell out of the escape key every time something goes wrong. It is the avenue through which we allow our abusive tendencies to escape.
Escape key, I salute thee. - The Arrow keys.
"Hey, we're hear to stay, so just use us already!!"
Poor arrow keys. Everyone always hijacking other letters or even the number pad to perform the function that the arrow keys were specifically designed for. Twenty years ago it wasn't a given that a keyboard would have arrow keys, but now-a-days I challenge you to find one without. So knock it off with this Num Lock crap and forget about your WASD and HJKL. We're never going to convince our proprietary brothers and sisters to make the switch to FOSS if we can't even reduce ourselves to using keys with arrows on them to move things in directions.
Arrow keys. Easy is good. - The Windows key SUCKS.
In blog-style top-ten FOSS fashion, I completely bail when I run out of ideas and add something completely irrelevant. Open-Apple and Closed-Apple are stupid too.
Thursday, September 18, 2008
Viewsonic WPG-150 "Wireless Presentation Gateway"
"Hey, I thought this blog was about software, what gives?"
"huh?"
"Nevermind. Thanks."
Wednesday, September 17, 2008
Linux Action Show's Host to Produce Non-free Software
So I'm a regular listener of the Linux Action Show, a podcast devoted to news and commentary about -- you guessed it -- Linux. The "action" part of the show is that they talk loudly. For the most part I've always found the show to be interesting and insightful without being overly preachy, as Linux advocasy often is. Essentially: Linux is good but needs work and we can put up with a few proprietary drivers even though we hate them. Knowing of the show's pragmatic stance on free software, it still came as quite a shock when co-host Bryan Landuke recently announced that he is going to be producing commercial, closed-source applications exclusively for Linux.
Producing closed-source commercial programs on Linux to demonstrate that it can be done successfully in the hopes that others will follow suit is fatally flawed. As we just implied, Linux doesn't have the market share to support a large number of niche closed-source developers, so all that will be proven is that it can't be done. But just for fun, let's assume that Bryan does pull it off, and he sells enough copies of ones and zeros to pull in the necessary income to replace a regular W2 job in the industry (assuming this number is in the range of $60-100K for a man in his 30s, plus enough to cover the self-employment tax burden... that's a lot of shareware to sell). What will this do for Linux?
Wednesday, September 10, 2008
Damn you nano!
GNU nano is a pico clone text editor for Unix-like operating systems, and I like it because it's quick and reminds me of using Pine for email in the good-ol' days when an inbox was full of messages from actual human beings. Anyhow, that's besides the point. Let me just say that I use nano frequently throughout the day.
pfSense Captive Portal with Firewall Schedules
Today's sad story:
Friday, September 5, 2008
3Com Baseline 29XX Switch Password Lameness
Change the admin password on your 3Com Baseline Switch? Can't login anymore?
Thursday, September 4, 2008
Ubuntu Hardy Screen Resolution Hell
Ubuntu Thinktank: "How can we make Ubuntu easier to use?"
Satan: "Well, you could completely automate screen detection so people don't have to manually configure xorg.conf. In fact, you should just stop using xorg.conf. You might also get rid of the Screens and Graphics tool replace it with a single dialog box that allows the user to view his screen resolution and pretty much not do anything else. After all, an automated solution that works for all is the best solution."
Ubuntu Thinktank: "Interesting... but should we really believe that our one solution will work for every hardware scenario? I mean, easy is great but what about the people for whom it doesn't work right, won't they be..."
Satan: "SILENCE FOOLS! ONE WAY FOR ALL IS THE WAY AND IT IS MY WAY FOR I HAVE SPOKEN! (Just make sure it works on my Compaq laptop or there'll be HELL to pay. Hehe, I kill me.)"
-----
So this morning I boot my Ubuntu Hardy machine and behold: 640x480 awesomeness. No real reason for it that I can think of. It's kind of odd because I have a similar problem with my Vista machine "forgetting" it's screen settings, but at least in that case I can CHANGE THEM BACK.
Seems like this is a common problem. Here are a couple reference threads: http://ubuntuforums.org/showthread.php?t=766879 , and http://ubuntuforums.org/showthread.php?t=771810 .
I have a Geforce 6200 video card in the machine and a pretty basic 1024x768 LCD. Not an abnormal configuration by any means. I'm using the proprietary nVidia driver.
I installed nvidia-settings and ran it, but guess what? It's not usable at 640x480. How about that! To all you designers at Gnome who thought: "hmm, is there any way that we can make buttons and stuff like that bigger?", go to hell.
I manually edited xorg.conf to add a line forcing the display to 1024x768, and the display came up at 800x600. That was pretty awesome.
Finally I read a post about adding "Screens and Graphics" back to the main menu. Apparently they didn't get rid of it, they just hid it because the devil made them do it. Running Screens and Graphics I was able to change my monitor type and get back to 1024x768. (Note that if you add Screens and Graphics, it will show up under "Other", and if you run the menu editor at low resolution you'll have to use the tab and arrow keys to move around because the mouse will just scan around the virtual screen instead of clicking on what you want to be clicking on)
Oh, I should note that you can edit your menu by right clicking on it and choosing Edit Menus. I believe it should be the Applications menu that you right click on, but I can't remember. My menu is just a little Ubuntu icon because I couldn't stand all the space the default menu took on the panel.
As I wrap this up, I'd like to offer a bit of advice to the Ubuntu Thinktank:
There are two things that I need more than anything out of an easy-to-use graphical operating system:
1) The ability to enter stuff into the computer with the keyboard and mouse.
2) The ability to see the stuff I entered.
Any sort of screwups in those regards are showstoppers. Don't take away the user's ability to easily make changes to his configuration. You want to automate things? Cool. Do both.
Friday, August 29, 2008
Safari Books Online by O'Reilly
I recently signed up for O'Reilly's Safari Books Online which is an online book service providing complete titles from O'Reilly and several other technology book publishers. O'Reilly, if you didn't already know, is one of the leading publishers of technology books. You've seen their books in the Computer section of your local mega-chain bookstore -- they're the ones with the pictures of ducks and chickens and badgers and snakes on them.
Safari Books Online contains, as far as I can tell, the complete lineup of O'Reilly books and titles from other publishers such as Microsoft Press, Que, Manning (think pictures of swashbucklers and jesters), Prentice Hall, and Adobe Press to name a few. As I write this, there are over 6,100 books available. Full books. Complete with indexes, tables of content, and errata.
Having browsed a little bit through everything that's available, my current "Favorites" lineup includes Beautiful Code, MySQL - Fourth Edition, Building Web Services with Java, Programming Python - Third Edition, and A Designer's Guide to Adobe Indesign and XML.
In addition to books, there is other content available such as articles and videos. The videos were a big suprise and now are my favorite feature of Safari. I've been watching Java Fundamentals LiveLessons I and II (14 hours!) by Deitel & Assoc., Working with Color by Bruce Heavin, and Inspired CSS by Andy Clarke. Videos are availabe in both Flash and Quicktime format, and stream reasonably well (though not as well as I would like at times). Video learning is the fastest way I've found to soak up information without falling asleep or becoming distracted.
The best part of Safari: it's only $42.99 per month for a wealth of information at your fingertips. There are cheaper versions of the service ($23 - 40) called "Safari Bookshelf" in which you have a fixed number of slots (10, 20, or 30) that you can fill with books. But the Bookshelf service only includes limited access to the service and requires that you think about which books you'd like to take a look at. With "Safari Library" being complete for $43, it's the no-brainer choice.
Just today I had to do some mucking with a BIND server and instead of Googling my brains out or trying to read documentation written by programmers, I simply went to Safari and checked out DNS and BIND, 5th Edition and DNS and Bind Cookbook. These are books that I would love to have on my bookshef for just this occasion, but I don't work with BIND enough to warrant purchasing them. (Did I mention that you also get up to 35% off when purchasing a print book from Safari?)
Enough raving, the service does have its flaws.
First, reading online is hard on the eyes and simply not as comfortable as kicking back with a book. While Safari does provide an index and table of contents for every book, it can't touch flipping through real pages for ease of use.
Second, the reading experience is somewhat hampered by the intentional limits imposed by the services. For instance, you can only read one section from a chapter at a time, and you have to click the "Next" button to proceed onward. This means that you're reading the books in what are essentially little snippets which can really slow you down. Some books are actual scans and they only let you see one full page at a time. Thus if there is a corresponding photograph on the next page, you have to click "Next" to get to it (there's a photography book I'm reading and I find myself clicking the Next and Previous buttons all the time to switch between the text and images). All of this is made worse by the semi-ajaxy implementation -- there is nothing to indicate that the next page is loading after you click, and browsers like Firefox do not know how to scroll up to the top of the page when you flip to the next page.
Third, the service is kind of slow. Not unusable slow, but noticable 1-2+ second page loads slow. When you're only given a snippet to read at a time, those seconds really start to add up.
All the negatives aside, Safari is great. Having access to this amount of great information is simply amazing.