Sunday, August 3, 2008

Making Curved Lines in Apple Keynote 2008

When I was working on my slides for OSCON 2008, I really wanted to have a curved line in my presentation. Unfortunately there is no simple tool that creates curved lines or allows you to curve straight lines in Apple Keynote 2008. So I went to Google and search for a way to do it. I came up with a lot of results for people asking how to accomplish this and an almost equal amount of results saying it wasn't possible. Then I found this post in the Apple Discussion Forums. The first time I read it, I breezed through it and immediately went to test it out in Keynote. It didn't work for me. So, I went searching farther. Later in the day, after much failure, I found that posting again and read the directions more carefully and tried each step. The results were flawless. At that point, I decided that the internet could use at least one more resource on the subject, and this blog post was born. Here's the instructions on making a curved line in Apple Keynote 2008 with screenshots.

1. While working in your Keynote presentation, choose the "Draw a shape" tool by click on the "Shape" icon in the toolbar, then choosing the "Draw a Shape" icon at the bottom. Alternatively, you can go through the menu (Insert -> Shape -> Draw a Shape) to achieve the same results.

Curved Lines in Apple Keynote 2008: Step 1

2. Click on the presentation to set the first point. This is where your line will start. Then, when setting the second point, click and hold the mouse button. This will give you the ability to adjust the curve of the line. While holding, move your mouse downwards on the screen and adjust the mouse left and right accordingly to get the curve that you want. When you're happy with the curve, let go of the mouse button. Hit the Escape Key (esc) to stop the drawing process.

Curved Lines in Apple Keynote 2008: Step 2

3. Your "shape" should now be selected. If it's not (has no white boxes around it), click on the shape once. Now open up the Inspector. (⌘⌥I or View -> Show Inspector) Click on the "Object Inspector" button. Now select the drop down for "Fill" and choose "None." This will turn your shape into an empty path.

Curved Lines in Apple Keynote 2008: Step 3

4. Last, select the drop down for "Stroke" and choose "Line". This will make your line look like a real line. At this point you're basically done!

Curved Lines in Apple Keynote 2008: Step 4

5. From here, you can customize your line line any normal line. In my example below I added a 15px stroke and an arrow head on the end point.

Curved Lines in Apple Keynote 2008: Step 5

Enjoy!

Wednesday, July 23, 2008

Slides from OSCON2008

Intro to Ruby Web Frameworks


Commanding Your SSH Universe with Capistrano


I will update this after my Capistrano talk. (read: slides still need work)

UPDATED: Capistrano talk slides uploaded!

Monday, July 21, 2008

Come see me at OSCON 2008


OSCON 2008


If you see me this week, please come up and chat for a bit! If you're even more adventurous, come and see one of my talks:

Tuesday, July 15, 2008

Easier Capistrano Deployments from Github

I've posted an article this morning on the Edgecase Blog about our experiences in updating our deployment strategy after moving from a self-hosted centralized git repository to Github. Enjoy!

Easier Capistrano Deployments from Github

Thursday, April 3, 2008

Git branches for storing project assets

Background: So I'm starting up a personal project. This is a the first of which I'm going to do completely on Git hosted at github. I'm really excited because I've been using git at work, and I have been watching github come to life on the sidelines. But all was not well in git-ville. In my projects, I tend to do a BUNCH of Photoshop mockups and slice them into HTML to "prototype" designs/layouts and I like to keep them in version control if possible. In Subversion, my repository would look something like this:


- _design
|- assets
|- mockups
- branches
- tags
|- myapp_0_1
|- myapp_0_2
- trunk
|- app
|- config
|- db
[Standard Rails Directories]



Unfortunately there's some problems with this kind of setup in Git. First, what we've come to know and love as trunk in Subversion, Git refers to, more or less, as the "master" branch. So there's no way to create some top-level directory above the root of my app to handle "odd" files.

Another option I thought of was just keeping a "design" folder in the root of my app, but REALLY didn't like that. Dirtay! The idea from the beginning is to keep these files separate from my actual app. And then when deploying I'd sure as heck want to make sure that I either 1) didn't get those files when pulling (which I'm pretty sure would be have been next to impossible) or 2) setup some sort of script to delete that crap out of my release directory as part of deploy process.

In the spirit of Git, why not create another branch to track the odd files? (git checkout -b designbranch) Is that one of the things that Git is supposed to be really good at? Yes, but part of the idea of branches is that they share a common history. git checkout -b designbranch is the same as git checkout -b designbranch HEAD or git checkout -b designbranch and that's not what I want, but it seems like the best plan with a little bit of deleting... and hacking... and ABSOLUTELY no merging.

My Solution: I decided tonight was the night. I needed to do something to get this done. I made a little mention of this at the office explaining to Jerry, who's going to help me out on the design stuff, what the plan was. Chad then interjected with the idea that Git was capable of making blank branches. Wow! That would be great. But a quick look at man git-branch left me wanting. There was nothing there that looked like you could create a blank branch.

Fast forward to "free time". So I'm ready to do this thing, and being the Git newb that I am, I wanted to make sure that I was creating this branch properly so that it would work with my github setup and subsequent clones would have access to the branch in the proper manner. I stop by one of my favorite git usage guides, and that pretty much had what I wanted, but it still didn't feel right, so I moved onward. After Googling at bit I found an article with a very interesting title: Creating a git branch without ancestry. Jackpot! This is exactly what I needed. And, after a few tests, rm projectdir; git clone git@...project.git and some success recreating this in /tmp here's what I came up with:



# standard github project setup
mkdir myproject
cd myproject
git init
touch README
git add README
git commit -m 'Intialize repo'
git remote add origin git@github.com:ryanbriones/myproject
git push origin

# add design branch
git symbolic-ref HEAD refs/heads/design
rm .git/index
mkdir assets mockups
echo 'Placeholder.' > assets/HOLDER
echo 'Placeholder.' > mockups/HOLDER
git add assets/ mockups/
git commit -m 'Initialize design branch'
git checkout -f master
git push origin design:refs/heads/design

# after making changes in design branch, push with
git push origin design



And so far I'm happy with this, but of course, if I run into any issues with this, I'll post something about it. Enjoy.

Friday, March 21, 2008

Stephanie on Etsy

So I've been a little lazy about making this blog post. Ok, really lazy. I've been trying to convince my wife Stephanie for a long time to post her notecard crafts online and try to make a little money at it. We were almost there one time, but I failed at "e-commerce 101". Luckily, one of Stephanie's coworkers picked up the torch where I left off and had a much more adept convincing power.

Stephanie created a site on Esty a week or two before Valentines Day and since has put up some wicked cool notecards. I'm personally keen on the Repurposed Magazine Envelopes with Notecards. You can't pack that up in Hallmark!

So, if you've got a few extra dollars just burning a hole in your pocket, consider buying some notecards for you or one of your loved ones. Money well spent!

Thursday, March 20, 2008

Speaking at OSCON 2008

So as the geekier of you reading this might know I started out my career of computer programming using Perl. Being a young programmer with no formal training, I immersed myself in the Perl community as much as possible. Perlmonks. Magnet and DALnet #perl. But once a year there was the mecca of Perl community events that I so wished I could attend. The Perl Conference that took place as part of O'Reilly's Open Source Conference, or OSCON. Back then there was never any chance I'd get to go.

Fast forward to the 2008. I had already decided that I didn't really want to go to RailsConf again. RailsConf 2007 was a bit of a disappointment for me in many different ways. After having attended Codemash 2008 in January, my itch to be involved in things that broaden my "software development horizons" had become much itchier. What could scratch this itch for me? OSCON 2008 maybe? "No way!", I said. "I couldn't come up with the money to attend this conference, much less travel to Portland, OR." Luckily Joe O'Brien was there to offer me some good advice. "Submit a proposal to OSCON. If it gets picked, you'll probably get free registration to the conference." It sounded like good advice at the time, anyway. So, I put together two proposals for OSCON and submitted them right at the Feb. 4th deadline. I don't think I could have squeezed another one out, but the idea is the more proposals you produce, the better chance you have of being accepted. And then there was waiting.

Until Mar 17th...

We were just talking at the office that morning RailsConf and if I was still going to go to Portland. ENTP is hosting an "unconference" (CabooseConf) during the same time as RailsConf in Portland, and I thought it would be cool to go. It would have to be dependent on whether one of my talks got accepted for OSCON, though. I would only have enough moola for one of the conferences. Later that day I happened to be checking Twitter when I saw that Jay Fields had his talk on Adhearsion accepted for OSCON. "When am I going to find out whether either of my talks were accepted!?" I thought. Annoyed, I brought up the OSCON proposals dashboard when I saw something odd. Two things required my attention. Not to be distracted, I soldiered on to the proposal status page and that's when I saw it; both of my talks had been accepted. A rush of excitement rushed throught my veins! I announced to the office that I had been accepted. Cheers all around. After I sat back down, I looked at the page again and another emotion rushed my veins: fear. Both of my talks have been accepted for OSCON! This will be my first conference speaking engagement. Yikes.

So I'm both excited and fearful. This is a big step for me and I will finally get to attend OSCON, a dream not forgotten. At any rate, here are the abstracts I submitted and hope that if you can attend you will come and see me!


An Introduction to Ruby Web Frameworks

The Internet is changing at an exponential rate. Yesterday’s web pages have effectuated today’s web applications and the fresh, fertile soil that it brings is manifesting itself in a new crop of web frameworks that are driving this new frontier. The Ruby community isn’t holding back either. They’ve got the power and simplicity of the Ruby language on their side. They’re opinionated and pragmatic. And most of all, they’re having fun.

In this talk we’ll take a journey into the world of Ruby and take a look at what’s making waves in Ruby Web Framework development like Convention over Configuration, Domain-Specific Languages and focus on Test-Driven Development. We wouldn’t be well-rounded if we didn’t take some time to address some of the criticism that Ruby has received and admit that it has shortcomings. Throughout this talk we’ll cite examples from a few Ruby Web Frameworks, like Rails, Merb, Camping and Sinatra, talk about how they’ve changed the world for others and how they might change your world too.




Commanding Your SSH Universe with Capistrano

What could be worse than having to manage and maintain application servers for a team of agile developers? Being on that team as a developer AND the systems administrator. A setup for one application might included a development server, a staging server, a cluster of production servers and one or two servers for version control and continuous integration. The fuse is burning at both ends for you and there is never time to waste. Meet Capistrano. Capistrano enables you to automate your many system administration tasks harnessing the ubiquity of SSH and the simplicity of a Ruby DSL configuration.

During this talk, we’ll take a look a some of my real world usage of Capistrano in my job as a web application developer and system administrator. I’ll demonstrate how to free yourself from the monotony of login-execute-logout method by creating a few simple Capistrano tasks, covering the basics of configuration and usage. We’ll also examine how Capistrano runs a task in parallel on multiple remote servers by creating a simple Rails application deployment using a standard Apache Proxy/Mongrel Cluster setup and touch on a few “advanced” recipes.