Tuesday, May 30, 2006

Rails Tip : Passing variables to "render :partial"

Inspired by John Topley's post, "Rails Tips #1: Local Documentation", I want to drop a "bite-size" Ruby on Rails tip.

You can pass variables into a partial's local scope like so:

<%= render :partial => 'some_partial',
:locals => {:some_variable => "somevalue",
:some_other_variable => some_other_variable} -%>

It took me a while to come across this style of coding. I think I stumbled across it on the Ruby on Rails, "Ruby Forum". Before I found out about this I was just putting everything into instance variables so all my .rhtml templates could access the values. (When you've got the "@" symbol before the variable name, it's an instance variable.) I found it difficult to keep track of what was going on in my code when everything was an instance variable, and I much prefer passing variables directly into my partial's.

StopDesign, Doug Bowman, Google, Cool :)

Doug Bowman @ stopdesign is now employeed at Google as, "Visual Design Lead". It's nice to see Google bringing in some design talent for their applications. Programmers can make user-friendly apps (yes they can!), but a true designer can make them beautiful!

Good luck to Doug!

Tuesday, May 23, 2006

My Favorite Web Host Now Offers Linux Hosting!

I've used a bunch of hosting companies in my time, and my favorite one is my current host, CrytalTech. (Click the link, sign up, and I get a referral credit.) They've always been a Windows Server host. I joined up with them because they offered Coldfusion hosting, but I stayed with them because they have very responsive customer service. I just noticed they now offer Dedicated Linux hosting, and this part caught my eye, "Ability to Install Any Software".

I'll be launching my designer service as a hosted application, and plan on starting really small. I may not go with this solution, but at least my favorite hosting company is now an option.

Monday, May 22, 2006

Just sharing, interesting blog posts by Designers II

Derek Powazek, "Design for Selfishness"
Because we solve a problem they have. Because we give them something they can't get anywhere else. Because we enable a kind of communication that's unlike anything else. Because we make their lives more convenient. Because we give them, or save them, money. Because we enable them to do more with less. Because they told us they wanted to.
Mike Rohde @ rohdesign, "Back to Paper: Should I Ditch My PDA?"
This week I'm going to think about a move back to paper. I want to make sure it's reasonable, practical and that the system will work the way I need it to. I'm 95% sure it will work well, but I want to brew on the idea a few more days.
Anand Sharma @ April Zero, "Web Workflow - Part I"
Many people, both friends and clients, have asked me how I make a web page. Well, the process is twofold

Sunday, May 21, 2006

Just sharing, interesting blog posts by Designers

Rachel Cunliffe @ cre8d blog, "Going wider"
Yesterday I was asked by someone on Skype why we’d chosen to go with a wider page design for Idolblog, ideal for screen resolutions of 1024px wide and up. It’s a good question.
Dave Shea @ mezzoblue, "Raw"
Let’s say you have a digital camera that shoots in Raw format. However, you’ve been using JPG files ever since you got it, due to a sense of familiarity, simply not having the time to figure out Raw, or because you don’t like the larger file sizes. Sound familiar?

That was me too, up until about a month ago. Then I started shooting Raw. And from now on, unless I need a lot of photos in a very short time, Raw it is. It’s not for everyone, and it’s not for every occasion, but it’s certainly the best default choice for me. And if you’re concerned with image quality, it could very well be for you too.
Jon Hicks @ hicksdesign, "Firefox becomes a contender"
Up until a few months ago, Firefox was never on my list of browsers that I flirted with. It was never opened, not even for the hallowed web developer toolbar that so many swear by.

Update: Added this one:
Ryan Carson @ A List Apart, "The Four-Day Week Challenge"
The more you work, the more you get done, right? Well, I’d like to encourage you to take the “Four-Day Challenge.”

Friday, May 19, 2006

Sneak Peak at Current GUI for the Designer Service

I'll be putting together a video of the UI in the near future, so until then I'm only going to show these incredibly revealing cropped screen shots. :)

1)

2)
3)
4)

Original GUI mock-up for the Designer Service (ug!)

(If you're not familiar with what I'm building, here is my elevator pitch. "A web service that will allow designers to upload their work (pieces) to a web page. The designer's clients will then be able to view, comment on, and approve the designer's work.")

Before we get started, I need to let everyone know that I know this original mock-up is bad. That's why I'm not using! :)

I want to share it with everyone because I will be putting up screen shots or a video of my current UI soon, and since this blog chronicles my journey I figured you should see the evolution of the UI!

Before I started coding the designer service (I will name it one day!) I created a mock-up of the main screen of the application. The goal for the main screen was to give the designers and clients a very simple page to review, edit, and approve each "piece" of a project. (A "piece" could be a logo, a page from a brochure, a screen shot of a web page, etc...) I didn't want anyone to have to jump from one view to another to get to any of the pieces so I created what you see below. (You should be able to click on it to view the full version.)


At first I liked the UI, and started building the application from this mock-up. Once I got the page working I really didn't like it. Other than it's poor aesthetics it just didn't work. The page would (obviously) get huge when you had a lot of pieces and it was very easy to lose your context when you were working with it. I was also very concerned that a client would think the large-sized images they were looking at were full size. Giving a distorted view of the designer's work.

I did take away a good thing from this prototype/build effort. (Other than getting my feet wet with Ruby on Rails.) Even though I ditched this UI the server-side logic was still usable for my next UI.

I decided to go with a thumbnail/big-view model as opposed to the single-page-for-everything style I used on the first pass.

After I ditched the above UI, I created a mockup of a thumbnail version.


It's still pretty terrible, but at least I got my thumbnail concept into something I could see. I then coded my app against this mock-up. I didn't like how cluttered and goofy this UI looked, but like I said, it got my concept into a format I could see.

I've settled on the thumbnail/big-view model for the application, and have made some dramatic changes to the UI. It's not as awesome as something like Fluxiom, but I think it's pretty sharp. I'll be posting a screen shot of the most recent UI soon. (Maybe even tonight!)

Thursday, May 18, 2006

Finally, a video capture app for Intel Macs! Perfect for product demo video. :)

I've been waiting for Ambrosia Software to release an Intel version of their video capture software, Snapz Pro X, so I could create a preview movie of my designer service. But it looks like shinywhitebox beat them to the punch. I just tried their app, iShowU, and it works as advertised.

Watch for video sneak peek in the next few days! :)

Wednesday, May 17, 2006

Mo' Automated Unit Testing

Ruby on Rails has a couple of basic testing types built into the framework. "Unit" and "Functional". Unit Tests are for model objects. Functional Tests are for your controllers.

Over the last two working sessions I've written a whole bunch of Unit tests. I've got pretty good coverage. In my next working session I'll be tackling the Functional tests. After that, I'll be back to actually making progress on the app itself!

Flex 2 SDK will be free

It doesn't give you the whole kit 'n kaboodle, but it's enough to make some seriously cool UI's for web apps. (Single rendering platform!)

Free Flex SDK

If you've been following my blog from the start you probably remember when I was working on a Java/OpenLaszlo application. OpenLaszlo has its good points, one of which was that it's free (opensource). I haven't personally programmed anything in Flex (I manage people at my day job who do), but the people I've spoken to that have written code in both Flex and OpenLaszlo say that Flex is the better of the two. The programming model seems nicer, and I know the Flex components are of a higher level of quality than OpenLaszlo's. (I know I sound a little harsh toward OpenLaszlo. Don't get me wrong. I actually like OpenLaszlo.)

With a version of Flex being free the Flash platform has a better shot against the XAML and the XHTML/JavaScript platforms. I think the thing Adobe has to concentrate on next is the runtime performance of the Flash player. The one on the Mac is supposed to be super fast due to the fact that it taps your computer's video card. I hope the Windows one catches up!

Sunday, May 14, 2006

Blogging Designers?

I spent some time looking for blogs written by designers today. I'm building a web application/service for designers, and I think it would be a good idea to try and get more immersed in their world.

I know a bunch of designers. There's my cousin. And at my day job I manage 2 web designers, work with 2 others (on the marketing side), and I have a good relationship with the Corporate Creative Design Director. Out of all these people, only 1 of them has their own blog.

Back when I was trying to master XHTML and CSS I was a regular reader of Dave Shea's mezzoblue and Dan Cederholm's SimpleBits, so those guys are back on my rotation.

I've also found 2 new blogs that seem to be interesting. Blue Flavor and Derek Powazek.

If anyone knows of any other blogs by designers, please feel free to leave their URL in a comment below. Thanks!

Friday, May 12, 2006

Automated Unit Testing

I have a confession to make.

I haven't been writing testing code for my designer service web application.

THE HORROR!!!

:)

This designer service is my first Ruby on Rails app. I've been learning both Rails and Ruby during the development of it. I'm finally feeling pretty comfortable with the structure of everything. (At least the way I'm doing everything. ;) )

Now that I've got my head wrapped around how to put everything together, and a big chunck of the app completed I figured it was a good time to get into the built-in testing of Rails.

On the Java side I've worked with JUnit before, and thought it was pretty cool. So far, it appears that most of the Rails stuff is very similiar. Especially when using the Eclipse-based IDE, RadRails. It uses the same (or a very good knock-off) testing GUI as Eclipse does for JUnit.

The one thing I found with Rails that I'm not sure there is an equivalent for on the Java side (at least not as simple to setup) is something called, fixtures. Fixtures are pretty neat. They setup your test database with the test data you specfiy simply by typing the values into a text file (the "fixture" file).

I want to thank the guy(s)/gal(s) who wrote up the manual on Rails testing. It helped out big-time.

As I did tonight, I'll be spending my next couple of working sessions building up my test cases.

Tuesday, May 09, 2006

In a strange twist of fate....

(This post is related to my day job.)

"I want you guys focused."

It put a huge smile on my face.

It seems that I've had an effect on one of the "Marketing People" I was referring in my previous post, "Understanding the "Marketing" People, and Managing their Projects".

I'm pretty sure it was #7 that did it. ;)

Saturday, May 06, 2006

Caught up on my blog reading today. 2 stand out.

NetNewsWire was telling me I had about 130 unread blog posts to read. Since I wasn't in the mood to code this morning, I figured I should get crack'n on those blog posts.

Two blogs stand out above all the rest.

Kathy Sierra's, Creating Passionate Users

and

Seth Godin's blog (he is a "Marketing" guy)

I think one thing they have in common (other than the fact that they are both professional authors) is that the stories they tell, and the ideas they are spreading are easy to grasp. You can apply what you learn from them to your business and your life. You don't have to be "in their field" to understand what they're talking about. It's just good stuff.

Is Blogger ever going to be updated?

For the last year I have been using the (free) blog tool, Blogger, to manage this blog. I like the tool. It's simple, straight forward, publishes to my michaelsica.com FTP server, provides commenting ability, a XML feed of my blog, and has about 20 themes for the L&F of my blog.

But the only thing I've noticed Blogger add in the entire year I've used the service is the spam-reducing word verfication feature of the commenting section, and a dashboard widget (which doesn't have enough features for me to use as a blogging tool).

I'm not sure what else they've done.

Is anyone even working on this product anymore?

Here are a few things I'd like to see.
  • Trackbacks! Why don't we have these?
  • More themes! I'm bored of the existing ones!
  • I have a really really really hard time putting code samples into the the "Compose" box. Help!
I guess you get what you pay for...

Wednesday, May 03, 2006

Understanding the "Marketing" People, and Managing their Projects

I know most of you are reading this blog to follow my story of getting Ataraxis Software off the ground. But I have a day job as an IT manager, and I've recently figured out something about the non-tech side of my company. I'm sharing this with the hope that more tech people will understand the minds of the business people they work with.

I graduated with a M.I.S. degree, which at UCF, is within the College of Business. I took all the standard business classes. Finance, marketing, general management stuff, legal & ethics, economics, international business, etc...

(Side note: I was actually a Finance major for 2 years, then I switched to Marketing for 2 weeks, then finally landed in M.I.S. I kept finding myself reading the technology section of BusinessWeek so I figured I should stop fighting the urge.)

I learned a little bit of programming in High School (Basic, QBasic, Pascal), and a little tiny bit more in College (Visual Basic), and then I became a PHP script-kiddy in my own time during my last year of College. (I mean "script-kiddy" in the worst sense of the phrase. I was the proverbial, kid with a scripting language and knowledge of the SELECT statement.)

I got a job with my current employer in the beginning of 2002 as a web developer in the IT department. I considered myself relatively well-rounded. Business + Technical. I would get into discussions with people at work about how important it was for the IT department to deliver systems that fulfilled what the business needs to do their job. We are their only source of custom software systems, we MUST provide them with the best software we can that allows the business to achieve it's goals. I eventually worked my way to a Project Manager position, and recently was promoted to the Manager of Web Development. (I'm managing a team of about 10 right now. A few Project Management types, and a bunch of developers and designers.)

I've always been very PRO business user. I've always tried my hardest to understand what they need, and work a process to deliver on those needs.

BUT

There was always one thing that I could never, ever, understand about our business users. I see this one thing exhibited more in marketing people than in any other type of business person.

The marketing people know you only have X number of resources. But they want you to be working on X*Y projects AT THE SAME TIME.

You can have a meeting with a marketing person to discuss the current projects you're working on for them, and at the end of the meeting they want to talk to you about the other 2 projects they came up with over the weekend.

Go ahead and discuss these projects with them, and see what happens. :) At the end of that discussion they'll say, "Great! Let's do it! Go! Go! Go!".

As a member of the programming community my brain says, "Dude, these business people are INSANE. They know we're working on a bunch of stuff right now, why would they want to add more to the mix, and have us DO IT ALL AT THE SAME TIME?!?!?!"

I couldn't understand it.

They literally want each programmer to divide their day up into little chunks so everything moves a little each day.

(Side note: If you don't know why programmers shouldn't break up their day into 4,000 little chunks then read these 2 articles: http://www.joelonsoftware.com/articles/fog0000000068.html and http://www.joelonsoftware.com/articles/fog0000000022.html)

There was a project my team had worked on earlier this year, and the end result was something that we actually had to pull out of the system once it was implemented. It just wasn't up to snuff performance wise, so we had to "un-implement" it. In order for us to try to get it working we would need an uncertain amount of time to figure out what was wrong. Possibly even re-code it from scratch. The project had already taken up about about 1.5-2 months of development time.

Shortly after this misstep, I was meeting with the Marketing team that was directly affected by the failed project, and the Marketing Director (who's a great guy) made a comment that I almost missed. He literally said it while he was turning around and walking toward his desk. It was something to effect of....

"You can't just be working on one thing. That's how you fall behind."

At that moment it became crystal clear to me why all the Marketing people I've worked with expect your X number of resources to be working on X*Y number of projects.

Marketing people are hyper-paranoid about not having growth opportunities worked on. Not every idea, and not ever project is going to be a winner that brings in more consumers or more revenue. Tieing up all the tech resources on 1 project is, in their eyes, a death sentence.

It's not just a death sentence for the business. I'm going to go out on a limb and say that most Marketing people are measured by the higher up's in terms of how much money they make the company. So it's their livelihood we're talking about.

With that insight, can you see why they don't want the tech people just working on 1 thing at a time?

It's all obvious stuff when you say it out loud, but you'd be surprised as to how many IT people freak out over these kinds of demands.

So, how do you cope with this situation?

It all come down to management. The IT management has to bend a little, but manage everything carefully so you don't spread your staff so thin that you never deliver anything.

Accept the fact that you are putting the business at risk if you're tieing up all the resources on to few projects, but realize that if it turns into the wild-west of run away projects the business will be in even more trouble.

Here are some tips. I fully reserve the right to disagree with all this in the future. :)

1) Question the business for justification of projects from a financial perspective.

This is a lot easier when the business actually likes and respects you. (Or at least pretends they do. ;) )

Ask them questions! When you enter into a dialogue regarding projects sometimes it makes them realize they haven't fully thought everything out. Try your hardest to not take on projects that don't have a clear benefit, or don't have the potential to make some type of impact on the company. You've only got so many hours in a day!

2) "Day 1 functionality"
Focus the business people on what they need Day 1. I drill this into their heads by repeating it every 3rd sentence. They'll "get it" when you are constantly telling them that you're really excited about the project, but you "want to give them functionality as soon as possible". "We've got to focus on what we can deliver Day 1 so we can get you off the ground. We can always add stuff after launch. What can I give you Day 1 that will make a difference?"

(Please don't explain Agile or Iterative development to me. :) Those are both specific techniques. This is meant to be a general discussion.)

3) Prioritize Work
Don't let the business announce 10 projects by waving their hands in the air, saying, "I want these," and walking away. They must tell you in what order the projects are important to them. You must make them realize that regardless of how many you can work on at the same time, you need to understand their priority. And remember, "These 3 are a priority.", is not a priority list. Put the projects in order. 1-10 or 1-100 or 1-X*Y. Get them in order.

A trick I like to use is an "IT suggestion" priority list. It's a starting point. Let the business tweak from there.

4) Don't get caught up in the small stuff.
Not every single problem a user has on a daily basis needs a technology solution. Quickly recognize if building more software is really the answer. Don't let the meaningless stuff reach your developers/designers!

5) Be very specific about the work you give to your staff. (Oh NO! Micro-management!)
After a meeting with the business people is over, sit down with developer/designers and write out the EXACT tasks that need to be worked on. Each task should be assigned to 1 person. Work with that person to figure out when the task will be completed. (There's a lot more to that then I want to go into. Check this article out for more detail: http://www.joelonsoftware.com/articles/fog0000000245.html)

Don't give people ambiguous direction like, "Can you do all that stuff they were talking about? Go ahead and I'll check back with you in a few days."

It doesn't frigg'n work. Some people might actually be able to accomplish something, but every single person I've managed on a project usually doesn't or only achieves 1/10 of what they could have with proper direction.

Now, don't treat your staff like trained monkeys! Involve them in the discussions. Involve them in the scheduling. Listen to them! At the end of the conversation, they should have specific assignments and due dates.

6) Don't rotate different projects on a daily basis, work your milestones.
This is heavily related to #5. Create very specific milestones in projects that a developer/designer can achieve in a week or so. Then you can consider "switching" gears (projects) upon completion of the milestone. Finishing a milestone that stretched over a few days actually feels good. You "got something done".

7) Constantly communication with the business regarding status and work load.
Have a weekly meeting. Everyone hates meetings, but they aren't bad if you stay focused and keep the meeting short. Just sit down for 20 minutes and update them! No biggie!

When they start bringing up the next 10 projects, constantly re-iterate to them where you are with the existing projects and what level of impact starting new projects will have on the existing ones. Make sure you've got clear direction and your projects are prioritized before allowing your developers/designers to begin working on stuff.

8) Keep your eye on the prize.
Your goal is to get these projects completed. Stay focused on reaching milestones!

You'll eventually get a feeling for how many simultaneous projects your staff can work on, and still launch stuff. If you've gone months without launching something. You've probably taken on too much. Explain to your business people that you've reach your capacity and something has to give. Don't be afraid to talk to your business users!

---

Like this blog post? Digg it!

Monday, May 01, 2006

Just spreading the word. script.aculo.us Reflector

This is just wicked cool, script.aculo.us Reflector.