Posted Oct 2, 2009 4:41:59 PM
Well this week began "re-registration" week at Clarkson, where they randomly and repeatedly delete MAC addresses from your NetReg registration list and make your life miserable.
I leased a VPS from SliceHost and am in the process of moving all my sites there -- which is turning into quite the process... I've decided to clean things up a lot to make my life easier, as well.
Unfortunately, that means my websites are only partially up at the moment... please bear with me as I work through this. It's difficult to migrate off a server, when you can only access it intermittently :-\.
Meantime, I'd like to say "Thanks, OIT, for creating yet another debacle that just makes our lives more difficult. Aren't you supposed to support the faculty and staff? What the hell?"
Posted Aug 20, 2009 12:23:30 AM
Just implemented a quick RSS and ATOM renderer in HawkEye... my feeds were being generated by some legacy code that used to host my website. Once I'd began hosting several other blogs, including my girlfriend's yoga journal, in the same database - everything got fed into the same generator.
The error appears to be fixed, and as a consequence, Josephine's site now support's RSS and ATOM feeds as well!
Thanks for bearing with me... keep the feedback coming!
Posted Aug 19, 2009 11:57:38 PM
Sorry, Planet COSI and anyone else who pulls my RSS feeds.
It just came to my attention that all of the blogs hosted in my database are being read into the same RSS feed... which is an unintended consequence of some design changes I've been going through.
I'm going to reimplement my RSS support now, and should have this problem fixed shortly. Please bear with me!
Posted Aug 19, 2009 12:31:46 AM
I've received several notifications over the past few weeks about dead URLs on my website. Notably, from places where I have linked my own articles, such as in my Best of 2003 roundup. All the links in that article died suddenly, because I'd migrated my blog software from one system to another. Given the date on that post, I'd guess I migrated from pyBlosxom to blosxonomy back then.
Anyway, I'm making an effort to resurrect those dead URL's using some apache re-write rules. Specifically, all the links on my Best of 2003 now work again.
Note to web site maintainers: it's important to pick a URL scheme, and be consistent... it will bite you in the butt later.
Posted Aug 19, 2009 12:15:34 AM
Spent some time working on the website this afternoon... with Matt and Josephine both interested in running the software, there's been a ton of development work going on.
As of this afternoon, my website runs a mashup of two versions of Blosxonomy-J... the version that drives the front page, tag searches, and item permalinks is the current development version. My old beta software still hosts my about page, and the page that supports posting new entries.
Note: comment support is broken for the time being. It should be back up sometime this week. In the meantime, please e-mail me your feedback: tim@timfanelli.com.
The new code is essentially a web-service mashup, called HawkEye. HawkEye pulls "stories" from any number of webservices - which right now includes Radar, the blogging engine behind HawkEye, and Twitter. Matt is developing a del.icio.us plugin, and flickr plugin as well - though that code isn't checked into SVN yet. I also plan on developing a generic ATOM and RSS consumer, making HawkEye a consumer of virtually anything.
My upcoming major undertakings include an event-notification system, allowing modules to react to events in HawkEye. An event would be anything new that posted in any of the story sources. This would allow you to things like tweet new blog posts; blog new tweets; udpate facebook with links to flickr photos; and any other such inter-operable nonsense that has become part of our daily routines -- all without thinking about it. HawkEye should become the basis around which your social networking life revolves.
Ofcourse, every good piece of software needs a name, and all you children of the 80's and earlier will have picked up on the theme already. In fact, at Matt's request, the project's admin console will be called "Hotlips." So what we need now is a clever name that matches the theme. Suggestions are desperately needed!
Also, if you are interested in using the code, or helping to advance it, please get in touch... the platform is growing quickly, but any help would be greatly appreciated.
Posted Aug 6, 2009 5:10:04 PM
Just a quick post about Blosxonomy, which believe it or not is still alive and well.
I've recently spent some time refactoring the code a little. Blosxonomy is turning into a little social mash-up engine. At it's core, it provides blogging services exposed as RESTful API's. The layer above that provides the UI, which currently consumes the blog services, and also Twitter's services, which you can see in action on my website.
Matt's also now got his hands on Blosoxnomy-J and is going to be playing around with it. My hope is to spend a good bit of time this weekend, and next, and have an alpha release by the end of the month.
Stay tuned!
Posted Mar 5, 2009 1:25:52 AM
Just a quick post to announce that timfanelli.com is now running "Blosxonomy-J" - a pure J2EE rewrite of the almost forgotten Blosxonomy blogging software.
Blosxonomy began back in 2004 as a hobby project so that I could learn Ruby, and I did a very poor job of maintaining it, mostly because Ruby just isn't a part of my day-to-day life and I didn't have the time for it. Based on pyBlosxom as a model, and Folksonomy as a concept, Blosxonomy has been hosting my websites without fail for 5 years now.
Every so often, I'd even get an e-mail from people hosting their own websites on Blosxonomy, which would give me the warm and fuzzies all over and start the ball rolling on updating and applying patches... but sure enough, it would always eventually lose my attention.
Well, most recently, I decided I wanted to begin updating my site and adding functionality to make my life simpler - but in order to do that, it needed to be in J2EE. I am, after all, a professional J2EE application developer. So after about a week and a half of coding after work, I have "Blosxonomy-J" - a poorly named, but very nice piece of software, if I do say so myself.
This post is to serve two purposes... first and foremost, to announce Blosxonomy-J to the world. Details and source will be coming soon, after a brief testing period here... check for announcements at Blosxonomy for more information. Second, to test the "post entry" module in my newly configured production environment. If you're reading this, well, it worked.
Posted Feb 15, 2009 2:04:15 PM
Once upon a time, I was an active and founding member of the Clarkson Open Source Institute (COSI). Many a good times were had in that lab, back before the renovations when the likes of myself, buzzco, figgy, dowem, cheesefry, and many others spent the better part of our undergraduate and, for some, graduate careers.
I discovered a long time ago that my blog had been removed from Planet COSI's blogroll. This was most likely the result of a period of time where I didn't maintain my site very well. In fact, for a few months before I wrote Blosxonomy (that site needs work, my apologies), my blog may not have even existed for a while.
So I finally got around to requesting that I be added back to Planet COSI. I don't blog too regularly anymore, but have been meaning to get back into the habit - particularly with all the cool new stuff I've been learning at IBM recently.
So, in the event that my feed makes the list again, just wanted to say "Hello, COSI!" - I'll try to drop in sometime and get back involved...
Posted Jul 29, 2008 2:07:45 PM
Yesterday I posted about an old domain of mine that was picked up by a squatter as soon as it expired. This squatter posted an exact copy of the website I had at the same domain name - with my name, business name and logo, and added several links to various questionable things... As I stated before, I don't care that he got my domain, but to use my name and copyrights was a little too far.
I immediately contacted the registrar and hosting provider for the site - neither of which were much help; until I issued them DMCA Take Down notices. Turns out that process works for the little guy too, not just big label music and movie industries.
The process is pretty clearly spelled out in the Wikipedia article - but here's the process in a nutshell.
If you believe your copyrighted work is being hosted in violation of your rights on some other server, and want the company that runs that server to take down the content - write a letter and include the following bits of info:
- Your contact information
- I included my full name, street and email address, as well as my phone number. The actual text of the copyright law says you must include name and address (email or snail mail) OR a phone number. Just enough so the parties on the other end can contact you.
- Identify the material that you believe you own
- I identified the entire website, and provided a link to the site as shown in the Web Archive as evidence that the content existed when the domain was registered to me.
- If your content is a song or video or something, just identify it as yours, and provide some evidence to support that.
- Identify the material in violation of your copyright
- In other words, provide a URL to the material that's being illegally hosted.
- Make a statement that the person providing the material has a good faith belief that the content is provided illegally (just a one liner)
- Make a statement that you either own the copyrighted material, or are authorized to act on behalf of the copyright owner (again, a one liner)
- Sign it! I wrote my notice in a PDF and signed it digitally using GPG. I also sent it to the hosting provider's legal representatives in a GPG signed email.
It took about 24 hours, but the site is now down. Go me!
You can save yourself some time on the phone by looking up where to send your DMCA takedown notice yourself - the US Copyright Office maintains a Directory of Service Provider Agents for Notification of Claims of Infringement. All hosting providers have to register a contact with them, and this is the person you'll need to send your DMCA Takedown Notice too.
It's also worth noting that if you omit any single piece of information, or send the DMCA notice to the wrong person, that it'll most like just be ignored - I'm sure many of these places are flooded with DMCA notices, and if it's not up to their exact legal requirements, they don't have the time or energy to come ask you to correct it.
So there you go - DMCA comes through for the little guy. Of course there's a caveat: the person who owns the domain now could file suit against me claiming he had a right to post that content - and I hope he does, because I could counter sue for defamation since my name was still attached. Sucker.
Posted Jul 28, 2008 5:40:51 PM
It came to my attention today that a domain name I had registered in 2006, itiesolutions.com, has been re-registered by a domain squatter. This person apparently picked up the domain the same day I had let it expire.
While I'm dissapointed I let the domain expire, fair's fair and it was my bad. I never made any use of the website, though I had intended to use it for my consulting business (of the same name). I had completed many successful consulting contracts while trying to build a name for myself, but then took positions in industry that required my full time and efforts. So I didn't need the website anymore.
What disturbs me, though, is that the new registrant is hosting an identical copy of my website, including my name, business name and business logo... with the additional of several links to sites promoting online gambling and drug purchases.
As the domain comes up in a search for my name, I felt it prudent to address this matter here.
Be it known: itiesolutions.com is no longer owned, maintained, or associated with me in any way. Cease and desist letters have been sent to the domain registrant, the domain registrar, and the hosting company. Hopefully appropriate action will be taken.
Posted Jul 24, 2008 5:33:06 PM
I discovered today that my comments were not working properly after my recent hosting provider migration. This was due to a file-system permissions error, and it has been corrected.
Also of note, I accidentally changed the dates on all my comments to June 22, 2008. I'm working to see if the original dates are in my backups anywhere so they can be restored. But for now, well, "le sigh."
Posted Jun 22, 2008 7:46:54 PM
Today I relocated my website to a hew hosting provider, Slice Host. I always had great support from my previous hosting company, Rimu Hosting, but I needed more resources for an upcoming site I'll be talking about soon, and the price was right with SliceHost.
The transition appears to have gone very smoothly on my beta site; and I'll be updating my primary DNS records shortly to bring this site live on the new server. Hopefully all goes well!
Posted Jun 10, 2008 10:10:58 PM
Because I was bored for a few minutes after work today, timfanelli.com is now:
And, my CSS validates as well:
I checked the validation against the main page, and several individual entries... obviously, some pages may still not validate because I placed invalid XHTML1.1 code into them, but I'll fix those up as they're discovered.
Posted Jun 3, 2008 4:41:20 PM
This post is merely to see what Twitter's HTML updates badge looks like... so here's mine:
Twitter Updates
Posted Jan 23, 2007 12:23:49 AM
Wrote a quick function today also to verify that the syntax of an email address is valid, using regular expressions.
^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$
This will match a userid containing letters, numbers, underscores, dots and hyphens, followed by an at sign, then a domain name containing letters, numbers, hyphens and dots, followed by a suffix of 2-to-4 characters.
Using this regex, I can ensure that the user has entered a potentially valid email address before attempting to send out a confirmation email.
Posted Jan 22, 2007 9:09:34 PM
Well after a months-long hiatus from doing anything even remotely related to Blosxonomy, I finally got around to implementing a simple user-confirmation system for the comments system.
Now, when you post comments to an entry, your email is verified against a list of authorized emails. If your email isn't in my list, a verification email is automatically generated and sent to you, containing a link. All you need to do is click the link to confirm your email, and voiala, your comment appears, and you're free to comment as much as you like.
Hopefully this simple step will significantly reduce the amount of comment spam I recieve on this site.
In other sad news, a simple typo in a bash script resulted in the accidental deletion of all comments in my database. *Oops*. Guess I should have made a backup.
Posted Dec 30, 2006 7:14:07 PM
So I ran across Google Apps for Your Domain today...
Google Apps for Your Domain lets you offer private-labeled email, instant messaging and calendar accounts to all of your users, so they can share ideas and work more effectively. These services are all unified by the start page, a unique, dynamic page where your users can preview their inboxes and calendars, browse content and links that you choose, search the web, and further customize the page to their liking. You can also design and publish web pages for your domain. It's all free* and everything is hosted by Google. No hardware or software required.
I signed up yesterday for email and calendar on my domain just to see how it all works, and it honestly couldn't be simpler. All you do is sign in with your Google account, pick the services you want on your domain, and update the appropriate CNAME and MX records with your DNS provider.
I'm now reachable via email at tim
Available services include mail, calendar, chat and customizable start pages for logging in.
One of my favorite features for the email is domain aliasing... if you own multiple domains, you can alias them together in your Google account which allows you to receive email at multiple domains to a single mailbox.
Definitely worth checking out if you need a free, powerful email solution for your domain.
Posted May 1, 2006 5:50:18 PM
I checked my Google Analytics data this afternoon to get a feel for what my readers are reading... here's a list of the most popular posts on my site -- interestingly, they were some of my favorites too.
- Getting Started with Struts Shale
- How to Create an ATOM Feed
- Securing EJB Applications with Custom JBoss Login Modules
- Apache Rewrite Rules
- Installing Apache2 and SVN using Fink on OS X
So, according to Google, that's the best of Tim Fanelli (dot com)
Posted May 1, 2006 5:43:43 PM
Posted Mar 30, 2006 2:25:14 PM
After a not-so-brief 42 day down period, Tim Fanelli (dot com) is back up and running! I'd cancelled my internet service at home back in February and just this week got around to setting up Blosxonomy on my RimuHosting server... I'm happy to see though that after two days of uptime, my daily page hits are back where they were, and google is referring sites regularly... it's like I never left!
Blosxonomy.com will be back up and running in a day or two, and development will resume shortly thereafter! I've got a couple things I want to change after having gone through the installation process from scratch after having forgotten how to set it up. It's not as simple as I'd though!
Not a whole lot to report other than that. This is more a post to test that my site's configured properly more than anything.
Congrats to Figgy and Stacy on the engagement! Hopefully now she'll never have to worry about the "you can't go after Figgy" law. We were all concerned for her on that front. Thankfully, there won't be any more victims of the law either.
Posted Dec 10, 2005 2:50:01 PM
Struts Shale is a proposal for a next-generation web development framework. I've spent a couple days scouring the internet trying to find a simple getting started guide to build a new Shale application, but there just doesn't seem to be one yet. Shale's website promises that a future milestone release will include a blank template ready for customization, but in the meantime, we're left to reading JavaDoc to figure out how to get going. This tutorial will walk you through building a very simple Hello / GoodBye world application using Shale and JavaServer Faces technology from scratch.
Creating a Directory Layout
The first thing we'll do is create our project layout. I'm a fan of Maven, and like they're standard directory layout templates, but for simplicities sake, we'll ignore it for now (I'll come back to Maven later regarding Shale). Instead, lets create the following directories:
helloworld/
src/
webapp/
WEB-INF/
lib/
This will be enough to get us started.
A Plethora of Dependencies
The next thing we'll need to do is download the plethora of dependencies our simple project will have. First download our direct dependencies:
Then you'll need to download the libraries that those project are dependent on:
- Commons BeanUtils 1.6.1
- Commons Chain
- Commons Codec 1.2
- Commons Collections 3.1
- Commons Digester 1.5
- Commons EL
- Commons Lang
- Commons Logging
- Commons Validator
- Jakarta ORO
*Phew*. Copy the library jars into your WEB-INF/lib directory that we created before. Here's my directory listing for reference:
> ls commons-beanutils-1.7.0.jar commons-digester-1.7.jar commons-logging-1.0.4.jar myfaces-all-1.1.1.jar commons-chain-1.0.jar commons-el-1.0.jar commons-validator-1.1.4.jar oro-2.0.8.jar commons-codec-1.3.jar commons-fileupload-1.0.jar jstl-1.1.2.jar shale-core.jar commons-collections-3.1.jar commons-lang-2.1.jar
Setting up web.xml
The next step is to create our helloworld/WEB-INF/web.xml descriptor file for our hello world web application. Copy the following into your web.xml. It sets up your web application to use the Shale Application Filter, the Commons Chain Listener, and the Shale Servlet mapping. All this amounts to is using Shale as your application's controller.
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
<display-name>Hello/Goodbye World!</display-name>
<!-- Determines wether state is saved on the server or on the client. The
tradeoff here is server memory versus network bandwidth. -->
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<!-- Sets up the shale application filter -->
<filter>
<filter-name>shale</filter-name>
<filter-class>
org.apache.shale.faces.ShaleApplicationFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>shale</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
<!-- Set up the Commons Chain listener -->
<listener>
<listener-class>
org.apache.commons.chain.web.ChainListener
</listener-class>
</listener>
<servlet>
<servlet-name>faces</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
</web-app>
Framework Config Files
Now that we have our dependencies in place and a webapp that is configured to use Shale, we'll add some blank configuration files under helloworld/WEB-INF that Shale and JSF will need in order to properly initialize themselves.
chain-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<catalogs>
<catalog name="shale">
<!-- Disallow direct access to JSP and JSFP resources -->
<command className="org.apache.shale.application.ContextRelativePathFilter"
includes="\S*\.xml,\S*\.faces,\S*\.html,\S*\.gif,\S*\.jpg,/index\.jsp"
excludes="\S*\.jsp,\S*\.jspf"/>
</catalog>
</catalogs>
dialog-config.xml
<!DOCTYPE dialogs PUBLIC "-//Apache Software Foundation//DTD Shale Dialog Configuration 1.0//EN" "http://struts.apache.org/dtds/shale-dialog-config_1_0.dtd"> <dialogs> </dialogs>
We only define one rule in our Chain's shale catalog, and that's to dissallow direct access to our JSP files. This is because we want to force our users to access the site through the JSF Servlet. The digest-config.xml file is required as of the 20051208 nightly build of Shale - the default application filter won't initialize without it. I don't know if this is a bug or not, but since dialog-config doens't concern us in this example, we'll just create an empty one. We'll also need a faces-config.xml file, but we'll revisit that in a bit.
Finally, the Web App
I know that seems like a lot of work to have gotten nowhere so far; if you ever worked with Struts from scratch I think you'd have thought the same thing about that. We're getting there though, it's finally time to write some code and make some JSPs.
First we'll create a simple PersonBean class:
package com.timfanelli.jsfsample;
public class PersonBean {
private String name;
public void setName( final String name )
{
this.name = name;
}
public String getName()
{
return this.name;
}
}
Then we'll create some JSPs. One will prompt for your name, and populate the person bean with the value you enter. The others will say hello or goodbye, depending on which action the user chooses.
welcome.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>Hello/GoodBye World!</title>
</head>
<body>
<f:view>
<h1><h:outputText value="Welcome!"/></h1>
<h:form id="helloform">
<h:outputText value="Please enter your name:"/>
<h:inputText value="#{personBean.name}"/>
<h:commandButton action="sayhello" value="Say Hello"/>
<h:commandButton action="saybyebye" value="Say Goodbye"/>
</h:form>
</f:view>
</body>
</html>
hello.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>Hello/Goodbye World!</title>
</head>
<body>
<f:view>
<h3>Hello, <h:outputText value="#{personBean.name}"/></h3>
</f:view>
</body>
</html>
byebye.jsp
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<html>
<head>
<title>Hello/Goodbye World!</title>
</head>
<body>
<f:view>
<h3>GoodBye, <h:outputText value="#{personBean.name}"/></h3>
</f:view>
</body>
</html>
If you're not familiar with JSF already, you're probably wondering how all of this is going to tie together... How does personBean get into my JSP's and how do the input buttons on welcome.jsp get me to hello.jsp or byebye.jsp? That's where we come back to the faces-config.xml file.
Setting up faces-config.xml
Create a file called helloworld/WEB-INF/faces-config.xml and copy the following into it:
<?xml version="1.0"?> <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> <faces-config> <navigation-rule> <from-view-id>/welcome.jsp</from-view-id> <navigation-case> <from-outcome>sayhello</from-outcome> <to-view-i>d>/hello.jsp</to-view-id> </navigation-case> <navigation-case> <from-outcome>saybyebye</from-outcome> <to-view-id>/byebye.jsp</to-view-id> </navigation-case> </navigation-rule> <managed-bean> <managed-bean-name>personBean</managed-bean-name> <managed-bean-class>com.timfanelli.jsfsample.PersonBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> </faces-config>
faces-config sets up our navigation rules. In particular, if we're coming from /welcome.jsp and the "outcome" is "sayhello", go to the hello.jsp view; if the "outcome" is "saybyebye", go to the byebye.jsp view. The "outcome" is determined by the action property of the commandButton elements your "from-view", welcome.jsp.
Additionally, you can see we've created a managed-bean called personBean that is an instance of our com.timfanelli.jsfsample.PersonBean class. personBean has request scope, and is therefore available throughout processing of the entire request. Its properties can be accessed and set using the #{beanname.propertyname} convention, as shown in all three JSPs.
Build, Package, Deploy
With all this in place, you should now be able to compile, build, deploy and run your web application. I'm going to assume that you're comfortable enough on this process to bang out a quick ant script (or maven pom) to do the job for you.
Once you can access your webapp, please keep reading! (I'm writing this based off the sample project I just completed, so if you find that I missed a step in my writeup, please post comments!)
You can access your sample app by browsing to your context-root /welcome.faces. That will trigger the JSF servlet to find and load a view named "welcome", which corresponds to your "welcome.jsp"
WARNING: No ViewController for viewId
If you're like me, you watched your logs carefully while running your little sample app, and you'd have noticed several warnings telling you there's new view controller for view id
First, create a new class that extends AbstractViewController:
package com.timfanelli.shalesample.viewcontrollers;
import org.apache.shale.view.AbstractViewController;
public class WelcomeViewController extends AbstractViewController {
public WelcomeViewController() {
super();
}
public void init() {
// Obtain generic resources here - that is, resource that you need regardless
// of the context of the request you're going to process.
}
public void preprocess() {
if ( ! isPostBack() )
return;
// Obtain resources you'll need to process the postback - for instance, database
// connections.
}
public void prerender() {
// Use this method to acquire resources (such as database connections,
// or performing queries) that you will need if this view is the one to
// be rendered.
}
public void destroy() {
// Clean up any resources you obtained in previous event handlers.
}
}
Then add a managed-bean to your faces config:
... <managed-bean> <managed-bean-name>welcome</managed-bean-name> <managed-bean-class>com.timfanelli.shalesample.viewcontrollers.WelcomeViewController</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> ...
And that's it! The magic is in the naming convention. We have a view called "welcome.jsp". Shale will try to find a backing-bean for your view named "welcome". Note that there's no actual requirement for your backing bean to implement the ViewController interface (AbstractViewController is a convenience base class) - but Shale guarantees that if it does, you'll get extra "freebies" from the framework. For more information on using ViewController, See Here
Add similar empty view controllers to your "hello" and "byebye" views to make the rest of your warnings go away.
Conclusion
While we used virtually none of Shales features, this should be more than enough to get you on your way to using the newest (and potentially hottest) web development framework out there.
Resource Roundup
I found the following resource helpful to get myself started using JSF and Shale:
Posted Dec 8, 2005 10:22:38 PM
It's been a while since I've started a new J2EE project from scratch, and a lot has changed since the last time I did. I've been working in the J2EE arena for quite a few years now, but with the exception of jETIA, which I started in 2002, I've only been involved in existing projects. jETIA's build system was Ant, revision control was Subversion, and project management and dependencies were managed by hand.
I learned about Maven about a year ago when I responsibilities at my previous job suddenly included maintenance and development of a large, complicated ant based build system. I had hoped that Maven would be the golden solution to my dependency maintenance nightmares, and complicated Ant scripts integrating our source control mechanisms - however I quickly learned (the hard way) that Maven was not flexible enough to adapt to your project structure; I'd have to make my project structure meet their idea of a good layout. Not that I objected to their layout, but the discombobulated state of the project I was working on took years to screw up so badly; fixing it would only further confuse the developers who held deep understanding of how the project ran.
Which brings us today, with my new Maven book (Maven : A Developer's Notebook) and the need to start a project from scratch. Sadly, the book I bought not 4 weeks ago is officially out of date, as Maven 2 is now the standard release, and my book only briefly mentions that while the concepts are the same in version 2, that it's a complete rewrite of the system. Many commands are the same, but the one thing I wanted to do - create a new project - has changed :-\.
Additionally, I discovered today that my MVC framework of choice, Struts, has drastically changed as well! Struts is now broken into two core projects: Structs Action framework - the "original" struts, so to speak, and Shale, a Java Server Faces based MVC framework being billed as "what Struts would have been if we'd known then what we know now".
How fast things change. I feel like, from a technology standpoint, I'm starting all over again... While initially discouraging for me, this should be exciting for you, because this means that I'll be posting many many how tos on getting started with these exciting new versions of technologies designed to make you life in J2EE easier!
So my question to you, then, is aside from Maven for project management, Struts and/or Shale for a strong MVC framework, and Spring for a solid IoC driven dependency injection mechanism - what should I be reading up on during my "technology review" stages, and what are your opinions on them?
Posted Dec 5, 2005 9:21:46 PM
Now that I've migrated my blog to a SQL Database, Blosxonomy had lost some of Blosxom like ease of use, so I decided it was necessary to create a web-based interface to post to my blog. I had originally thought I'd just use my entry-conversion utility and continue to write Blosxom style posts, but quickly decided that was absurd. For those of you keeping track of Blosxonomy, this feature will be included in 0.7.3, which is in the final testing stages now.
In any event, I needed to protect the page that posts to my website from being accessed, and use mod_ssl and mod_rewrite to do it.
In particular, I needed to hide /post from general access - to do this, I added a simple rewrite rule to redirect it to my SSL secured site:
RewriteRule ^/post(.*) https://www.timfanelli.com/post$1
Then, in my :443 virtual host, I added two redirect rules to pass anything other than /post back to the main site:
NameVirtualHost *:443 <VirtualHost *:443> ServerName www.myhostname.com # SSL Engine options go here # Directory authentication options go here RewriteEngine On RewriteRule /post(.*) /post$1 [PT,L] RewriteRule ^(.*)$ http://www.timfanelli.com$1 [R=301] </VirtualHost>
That way, any requests to /post stay on the SSL protected site, any other requests go back to the main, non-SSL site. The SSL Engine options section enables SSL and directs apache to use my self-signed certificate (see how to create one here), and I copied the <Directory> element from my main site into the virtual host, and added a Require valid-user statement using DIGEST authentication.
This provides a secure place for me to make entries to my blog, and prevents general viewing of my site via SSL to minimize the performance overhead (while I love my mac and the G4 processor, SSL is not its strong point).
Posted Dec 5, 2005 4:27:30 PM
A hate to have resorted to this, but after asking all the ex-cosiites I know, submitting a comment to COSI via the feedback form on the website, and contacting a professor directly - this is my last attempt to get someone to change my RSS URL at the Planet COSI aggregator.
ATTENTION PLANET COSI:
Please change the RSS URL you use for my site (http://www.timfanelli.com) to:
http://www.timfanelli.com/rss
The URL you currently use is deprecated, and is only still in existence because I can't seem to get anyone there to change it. It's going to dissapear soon, and I'd like to stay on the Planet COSI blog.
Thank you. ~Tim
Posted Dec 1, 2005 7:07:08 PM
Posted Nov 18, 2005 8:18:00 AM
Spent a couple minutes this morning touching up my Blosxonomy flavour and CSS to make this site render in valid XHTML 1.0 Transitional markup!
It's the little things in life that make me happy. It was actually pretty easy to do - my markup was relatively well formed to begin with. I simply had to add the DOCTYPE element:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
To my head template, and change a bunch of
<div id="bla">...
to
<div class="bla">...
And update my CSS accordingly (changing hash marks to dots).
Of course the continued validity of my markup requires me to use wellformed XHTML markup in my posts, but I try not to go too crazy with the markup, just simple paragraph tags, links, and the occassional image element - it's kind of hard to mess those up.
Once I do some more sanity checking I'll post my flavour over at Blosxonomy so there'll be an xhtml 1.0 transitional flavour available.
Posted Nov 10, 2005 5:36:00 PM
Pete inadvertantly got me thinking about "the fold" the other day. The fold is the point on your site below which users must scroll to see content - and mine was pretty high. This is because I had a lot of whitespace above my banner image, large date headings, and a narrow site width.
To improve my site, I made some changes to my CSS today, removing the banner image, eliminating the white space in the header, and I also did away with my date headings. I like Pete's solution to date headers by printing the "n days ago..." just below his entry's title. I may try something similar. I also increased my site's width from 600px to 800px - allowing me to widen my side bar to make better use of my tag cloud.
All in all I'm happy with the way it turned out. I "brightened" the color scheme too - it was very dark before. My old CSS allowed about 1.25 posts to be seen above the fold. The new design allows for just over two and half. I'm going to start using my "readmore" plugin more heavily also, so my main site will show lots of post titles with descriptions instead.
Posted Oct 29, 2005 11:37:00 AM
Thanks to the Web Archive, I was able to retrieve a bunch of old posts that I had lost a couple years ago when the server I hosted on at the time crashed. I restored the posts that had interesting content with their original publish dates, and thought I'd post a "Best of '03" to those stories. So here they are, in chronological order:
Posted Sep 28, 2005 4:17:00 PM
I finally got around to touching up my CSS, and timfanelli.com now appears properly under IE. Thankfully the fix wasn't too cludgy... I just had to widen my main div's width a couple pixels to account for IE's invalid padding scheme :-\. Oh well
Posted Aug 20, 2005 4:27:00 PM
Well I decided to have my new CSS go live today; I polished it up a little this morning and I think it's good to go. I also added a google search link, and an adsense ad to try and make a few extra pennies :). Also, I added the "gecko" pyblosxom plugin, so if you're not using a gecko based browser, you'll see an extra message saying the site renders best under it, and gives you a link to firefox.
Posted Jan 27, 2005 8:08:00 AM
Well thanks to Figgy, I'm back on PlanetCosi after moving to pyBlosxom. Sorry to all you planet cosi readers who saw that my RSS feed had no pubdates :-\. Cheese helped me out with that one and it should all be back to normal again.
Meanwhile, my shiny new car is a little broke :(. The display in the panel went out yesterday, which I *think* may be related to the gas-cap light coming on because the ass at the gas station didn't close my gas cap properly. Guess it's back to the dealer for me :-\.
And oh yeah, I'm sorry I still must insist that current_temp > 0 --> NO JACKET holds true.
add to del.icio.us