Welcome to the new site! Some areas are "Coming Soon!" as the content is being migrated.

Archive for the ‘How-To’ Category

50 Apps to Fuel Your Online Business

Tuesday, March 9th, 2010
Annie Vranizan and I presented ’50 Apps to Fuel Your Online Business’ at the Nevada Interactive Media Summit last weekend. I’ve posted the slides here and you can find the full list of 50 apps and their links on Annie’s website.
View more presentations from Colin Loretz.

My Calendar Syncing Solution

Wednesday, December 2nd, 2009

Calendars and I are something that have never quite gotten along. I’ve tried using everything from iCal on my mac, the calendar on my iPhone, Google Calendar, Backpack Calendar, and to-do applications like Things or ToodleDo. With each system, I would eventually just resort to using a piece of paper or a notebook to track everything. I’m now starting two companies and I have a need to actually share/see both my availability and that of the people I’m working with. So unless moleskine notebooks someday become internet-enabled, I needed to teach myself to use something else.

I managed to sync my Google Calendar, iPhone, iCal on Mac, Salesforce calendar and Basecamp Milestones. Each one of the technologies supports integration without third-party applications except Salesforce, which I will show you below.
sync

What You Will Be Able To Do

As illustrated above, you will have bidirectional integration with each system except Basecamp, which will only be imported into Google Calendar as a read-only calendar (fortunately that is all I really need for Basecamp).

You will be able to create/edit/delete events most efficiently between iCal, GCal, and iPhone, as if they were all the exact same calendar. This includes being able to invite people to those events.

How To Do It

We’re now able to do this thanks to a wonderful technology called CalDav which is supported by most of these platforms.

Setup Google Calendar

I use Google Apps on my own domain but this should work with the regular Google Calendar as well. Simply setup Google Calendar how you would like to use it.

Add Basecamp to Google Calendar

Login to your Basecamp and scroll down to the bottom of the page to find your global feeds. Right-click on the Global iCal Feed and copy the link address. Go into Google Calendar and in the left sidebar, click the Add+ link and select Add by Url. Paste in your URL and you can select whether or not you’d like to make it publicly accessible. I would only enable this if you want to publish your GCal on a website somewhere.

add

Add Salesforce to Google Calendar

For this integration, I had to use Appirio Sync for Google Calendar. It’s free on the AppExchange. Install the app inside of Salesforce and it will step you through the setup. You can select from bi-directional syncing or opt only for Salesforce to Google or Google to Salesforce functionality.

Syncing Google Calendar and the iPhone calendar (link)

You must have at least the 3.0 version of the iPhone firmware for this to work.

These instructions were provided by Google:

  1. Open the Settings application on your device’s home screen.
  2. Open Mail, Contacts, Calendars.
  3. Select Add Account…
  4. Select Other.
  5. Select Add CalDAV Account.
  6. Enter your account information:
    • In the Server field, enter [ google.com ]
    • In the Username field, enter your full Google Account email address.
    • In the Password field, enter your Google Account password.
    • In the Description field, enter the name you’d like to appear on the account.
  7. Select Next at the top of your screen.

After you’ve completed setup, open the Calendar application and syncing will automatically begin.

By default only your primary calendar will be synced to your device. You can sync additional calendars by visiting one of the following pages from any browser (via desktop or mobile device):

Select the calendars you’d like to sync, and click Save. The selected calendars will display on your device at the time of the next sync.

Syncing Google Calendar and Ical (link)

  1. Open Apple iCal, go to Preferences and then the Accounts tab.
  2. Click on the + button to add an account.
  3. Under Account Information, enter your Google Account username and password.
  4. Under Server Options, add the following URL:
    https://www.google.com/calendar/dav/YOUREMAIL@DOMAIN.COM/userReplace ‘youremail@domain.com’ with the email address that you use to log in to Calendar. Make sure to include the ‘@domain.com’ portion (which is @gmail.com for Gmail users) in this section.
  5. Click Add.
  6. Under the Delegation tab, select the calendars you’d like to add to iCal by checking the boxes next to them. You may need to hit refresh to get the latest list of calendars.
  7. Add your email address to your Address Book card by selecting Add Email. You’ll be prompted to add your email address only if your address is not already in your Address Book.

You won’t be able to invite or email guests to Google Calendar events within iCal if your address is not in your Address Book.

Your Google Calendar will now appear in iCal’s list of calendars, and changes you make to your Google Calendar in iCal will be reflected when you sign in to Google Calendar.

Syncing <Insert Name Here> with Google Calendar

If you use a web application that has dates and events as an iCal feed that you can subscribe to, you can add any of them to Google Calendar.

A few things to note

It’s not perfect but it works for me. Now, I can use whichever calendar is on-hand at the time and it will almost always be reflected elsewhere because my Google Calendar is acting as the master calendar.

Someone recommended I check out Pocket Informant on the iPhone, which syncs with Google Calendar and looks like it has a better method for visualizing events and availability when you have a lot of calendars. I haven’t tried it yet as it costs $12 on the App Store but its worth taking a look at it if you use a lot of calendars.

Hope this helps!

Ignite Reno: Diagnosing Technology as a Mental Disorder

Friday, July 17th, 2009

Here is the slide deck for the presentation I gave at Ignite Reno #2 on July 16th at Amendment 21. The video will come soon!

A better shave using a single blade safety razor

Sunday, June 7th, 2009

sensor_excel_handle_2Shaving is usually something everyone hates to do. Who really enjoys scraping a piece of sharpened metal across their skin? My own experience has been less than pleasant. I’ve tried probably a dozen different brands of razors but all of them have been common safety razors with multiple blades.

The razor I “enjoyed” most was the Gillette Sensor Excel. Most new razors have pivoting heads that have led to some pretty painful hacking. The Sensor Excel’s head does not pivot so if you’re looking for a multi-blade razor, look for this one but do not fall for the Sensor3 which has more whizbang features and I believe a pivoting head. I used to buy 30 cartridges at a time for it at Costco but unfortunately they no longer seem to carry them here in Reno.

razor I’ve recently discovered the problem was the multiple blades. Multi-blade razors function in such a manner that the first blade pulls the hair and the second, third, fourth (and so on) blades cut the hair. Ouch! Earl Spriggs gave me a single-blade straight razor along with shaving soaps and a brush as a graduation present and I’ve found it makes a significant difference during shaving. Before I started using the “new” razor, he suggested I check out videos from Mantic59 on YouTube. Mantic59 has an entire channel of videos dedicated to shaving with multiple types of razors including a straight edge razor, for those of you brave souls looking for a barber shave.

While I doubt shaving will ever be an entirely pleasant experience, I’ve found that using a single-blade razor has made shaving much more enjoyable and my face doesn’t hate me (as much) afterward.

Everything I’ve watched and read about single-blade shaving stresses the importance of:

  • Maintaing a 30-degree angle between the blade and the face
  • Proper lathering
  • Have patience when shaving – it’s not a race
  • Do NOT apply pressure to the blade
  • Use an alcohol-free aftershave product to help soothe and condition the skin

safety

Not applying pressure to the blade might seem counterintuitive for most shavers because most of today’s safety razors are extremely light and require a little bit of pressure to pull and hack the hair off your face. When using a single-blade razor (as pictured right), the weight of the razor itself is enough pressure to provide a close shave without destroying the top layer of your skin. If you’re doing it right, you will know it’s working as you actually hear the blade cutting the hair, something you probably don’t hear with your multi-blade razor now. The key to avoiding razor burn is to not apply pressure!

Happy shaving!

LinkedIn as your living resume

Monday, May 18th, 2009

Did you create your resume using a Microsoft Word template? Stop right there. Really. Stop. Please.

I’ve been using LinkedIn (sign up if you haven’t already!) for quite a while to keep track of my academic and professional history and while I frequently send people there to check out my qualifications, I always kept my resume up-to-date saved somewhere on my desktop. I use Apple’s iWork which has some cool resume templates but the hassle of keeping it up to date still exists.

Today I was on LinkedIn and I discovered you can export your LinkedIn profile to a print-friendly PDF version to use as a resume. This is great because you can print a copy today, make a change to LinkedIn next week and print a new, up-to-date copy. It will not be the most beautiful resume you’ve ever seen but it looks much nicer than many of the resumes I’ve seen others try to pass off.

linkedin

LinkedIn does throw their logo on the bottom of the resume but its a small price to pay for having your own “living document” and it provides a way for you to direct any resume readers to your LinkedIn page to view recommendations and extend your own personal network.

View Colin Loretz's profile on LinkedIn

Adobe Flex: Creating Widgets for the Desktop & Web

Thursday, March 12th, 2009

I presented the following presentation at the first-ever Nevada Interactive Media Summit last week. My presentation consisted mostly of demonstrations in Adobe Flex Builder but if you plug the code below into Flex, you should be able to follow along. A video of the presentation should be available soon.

Demo #1: RSS Reader

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

 <mx:HTTPService id="myRSSFeed" url="{rssURL.text}" />

 <mx:Label x="10" y="12" text="RSS URL:" fontWeight="bold" />

 <mx:TextInput id="rssURL" width="357" x="68" y="10" />

 <mx:Button x="371" y="40" label="GO !!" click="myRSSFeed.send()"/>

 <mx:DataGrid id="myDataGrid" dataProvider="{myRSSFeed.lastResult.rss.channel.item}"

 width="417.5" height="144"

 click="{myTextArea.htmlText =

 myRSSFeed.lastResult.rss.channel.item[myDataGrid.selectedIndex].description}"

 x="7.5" y="70">

 <mx:columns>

 <mx:DataGridColumn headerText="Date" dataField="pubDate" textAlign="left"/>

 <mx:DataGridColumn headerText="Title" dataField="title" textAlign="center"/>

 </mx:columns>

 </mx:DataGrid>

 <mx:TextArea id="myTextArea" width="415" height="162" x="10" y="222"/>

 

</mx:Application>

Demo #2: Twitter Search Application

<?xml version="1.0" encoding="utf-8"?>

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" title = "Twitter @ NIM" layout="absolute">

 <mx:Script>

 <![CDATA[ 

 private function doSearch(e:MouseEvent):void

 {

 twitterService.url = "http://search.twitter.com/search.atom?q=" + twitterKeyword.text;

 twitterService.send();

 }

 ]]>

 </mx:Script>

 

 <mx:HTTPService id="twitterService" />

 

 <mx:Label x="10" y="20" text="Twitter Search Term"/>

 <mx:TextInput id = "twitterKeyword" x="10" y="38" width="295"/>

 <mx:Button click = "doSearch(event)" x="379" y="38" label="Search" width="81"/>

 <mx:List dataProvider = "{twitterService.lastResult.feed.entry}" labelField="title" x="10" y="68" width="450" height="282"></mx:List>




</mx:WindowedApplication>

Salesforce Rollup Summary Fields using Apex Code

Monday, October 13th, 2008

Rollup Summary Fields on any field/object using APEX Code
Level: Intermediate

Rollup Summary Fields
The Rollup Summary fields provided by Salesforce offer a great way to summarize relationship data. If you have two objects, “Timesheet” and “Time Entry”, a rollup summary field can total the number of hours assigned to any given timesheet.

What problem does this address?
Standard rollup summary fields require a master-detail relationship. Currently, you can not setup a master-detail-detail+ relationship so what happens when you have more than 2 objects that you want to summarize? You won’t be able to.

The following Apex code helps solve this situation by allowing you to summarize information on objects that are related by either a Master-Detail relationship or a Lookup relationship field. You can even summarize information in a cascading fashion, by linking more than 2 objects together. I’ve been working on a project management application on the Force.com platform and we have Projects->Tasks->Time Entries. The time entries are summarized by hours and dollars at both the Task and Project level.

In tackling this problem, there are five use cases we must consider:
1. Creating a new record that rolls up to the parent record
2. Deleting an existing record that currently rolls up to the parent record
3. Updating a record with a new value and remains under the same parent record
4. Updating a record with a new value and changing the parent record that it rolls up to
5. The child value remains the same and we change the parent record that is being rolled up to

Disclaimer & Warning:
There are other ways to accomplish this type of functionality so please feel free to critique the code in the comments. The code has been written for processing bulk records but has not been extensively tested for excessively large record sets. IE: A parent object that summarizes 100+ child records that summarizes another 100+ child records below that. The more objects you have cascading under one another, the greater the chances of running into the Salesforce governor limits. Please feel free to provide feedback and recommendations on this as you encounter them.

GETTING STARTED

Step 1: Create the Parent and Child objects
1. Create a parent object:

  • Object Label: Weekly Timesheet
  • Object Name: Weekly_Timesheet
  • Save

2. In the Custom Fields & Relationships area of the new object, click New.

3. Create a new field to store the summarized data:

  • Field Type: Number
  • Field Label: Total Hours
  • Field Name: Total_Hours
  • Length: 16
  • Decimals: 2
  • Save

4. Create a child object:

  • Object Label: Time Entry
  • Object Name: Time_Entry
  • Save

5. In the Custom Fields & Relationships area of the new object, click New.

6. Create two fields on the child object:

  • Field Type: Number
  • Field Label: Hours
  • Field Name: Hours
  • Length: 16
  • Decimals: 2
  • Follow prompts and Save
  • Field Type: Lookup Relationship
  • Field Label: Timesheet
  • Field Name: Timesheet
  • Follow prompts and Save

7. Create a trigger (Download formatted code here)

trigger rollupHoursToTimesheet on Time_Entry__c (after insert, after update, after delete) {
double sumTotalHours = 0.0;
Weekly_Timesheet__c [] sheetsToUpdate = new Weekly_Timesheet__c[]{};

//***********************************************
//Code for updating existing records and new records
//***********************************************

if(Trigger.isInsert)
{
Time_Entry__c [] teNew = trigger.new;

for(Time_Entry__c te : teNew)
{
for (Weekly_Timesheet__c timesheet : [select Id, Name, Total_Hours__c from Weekly_Timesheet__c where Id = :te.Timesheet__c])
{

//Sum all the timesheet entries
for (Time_Entry__c timeEntries: [select Id, Hours__c from Time_Entry__c where Timesheet__c = :timesheet.id])
{
sumTotalHours += timeEntries.Hours__c;
}

timesheet.Total_Hours__c = sumTotalHours;

//add timesheet to list to be updated outside of the loop
sheetsToUpdate.add(timesheet);
}
}

//commit the changes to Salesforce
update sheetsToUpdate;
}

//***********************************************
//Code for updating when a record is updated
//***********************************************

else if(Trigger.isUpdate)
{
//sum total both old and new
Time_Entry__c [] oldTime = Trigger.old;
Time_Entry__c [] newTime = Trigger.new;
Double newSum = 0.0;
Double oldSum = 0.0;

for(Time_Entry__c newTe: newTime)
{
for(Time_Entry__c oldTe : oldTime)
{

Weekly_Timesheet__c oldTimesheet = [Select Id, Name, Total_Hours__c from Weekly_Timesheet__c where Id = :oldTe.Timesheet__c];
Weekly_Timesheet__c newTimesheet = [Select Id, Name, Total_Hours__c from Weekly_Timesheet__c where Id = :newTe.Timesheet__c];

Time_Entry__c [] newSumHours = [Select Id, Name, Hours__c from Time_Entry__c where Timesheet__c = :newTimesheet.Id];
Time_Entry__c [] oldSumHours = [Select Id, Name, Hours__c from Time_Entry__c where Timesheet__c = :oldTimesheet.Id];

//sum premiums from child objects
for(Time_Entry__c oldSumHour : oldSumHours)
{
oldSum += oldSumHour.Hours__c;
}

for(Time_Entry__c newSumHour : newSumHours)
{
newSum += newSumHour.Hours__c;
}

newTimesheet.Total_Hours__c = newSum;
oldTimesheet.Total_Hours__c = oldSum;

sheetsToUpdate.add(newTimesheet);
sheetsToUpdate.add(oldTimesheet);
}
}

update sheetsToUpdate;
}

//***********************************************
//Code for updating when a record is deleted
//***********************************************

else if(Trigger.isDelete)
{

Time_Entry__c [] teOld = trigger.old;

for(Time_Entry__c te: teOld)
{

for (Weekly_Timesheet__c timesheet: [select Id, Name, Total_Hours__c from Weekly_Timesheet__c where Id = :te.Timesheet__c])
{
for (Time_Entry__c timeEntries: [select Id, Hours__c from Time_Entry__c where Timesheet__c = :timesheet.id])
{
sumTotalHours += timeEntries.Hours__c;
}

timesheet.Total_Hours__c = sumTotalHours;

sheetsToUpdate.add(timesheet);
}
}

update sheetsToUpdate;
}

}

trigger rollupHoursToTimesheet on Time_Entry__c (after insert, after update, after delete) {

double sumTotalHours = 0.0;
Weekly_Timesheet__c [] sheetsToUpdate = new Weekly_Timesheet__c[]{};

//***********************************************
//Code for updating existing records and new records
//***********************************************

if(Trigger.isInsert)
{
Time_Entry__c [] teNew = trigger.new;

for(Time_Entry__c te : teNew)
{
for (Weekly_Timesheet__c timesheet : [select Id, Name, Total_Hours__c from Weekly_Timesheet__c where Id = :te.Timesheet__c])
{

//Sum all the timesheet entries
for (Time_Entry__c timeEntries: [select Id, Hours__c from Time_Entry__c where Timesheet__c = :timesheet.id])
{
sumTotalHours += timeEntries.Hours__c;
}

timesheet.Total_Hours__c = sumTotalHours;

//add timesheet to list to be updated outside of the loop
sheetsToUpdate.add(timesheet);
}
}

//commit the changes to Salesforce
update sheetsToUpdate;
}

//***********************************************
//Code for updating when a record is updated
//***********************************************

else if(Trigger.isUpdate)
{
//sum total both old and new
Time_Entry__c [] oldTime = Trigger.old;
Time_Entry__c [] newTime = Trigger.new;
Double newSum = 0.0;
Double oldSum = 0.0;

for(Time_Entry__c newTe: newTime)
{
for(Time_Entry__c oldTe : oldTime)
{

Weekly_Timesheet__c oldTimesheet = [Select Id, Name, Total_Hours__c from Weekly_Timesheet__c where Id = :oldTe.Timesheet__c];
Weekly_Timesheet__c newTimesheet = [Select Id, Name, Total_Hours__c from Weekly_Timesheet__c where Id = :newTe.Timesheet__c];

Time_Entry__c [] newSumHours = [Select Id, Name, Hours__c  from Time_Entry__c where Timesheet__c = :newTimesheet.Id];
Time_Entry__c [] oldSumHours = [Select Id, Name, Hours__c from Time_Entry__c where Timesheet__c = :oldTimesheet.Id];

//sum premiums from child objects
for(Time_Entry__c oldSumHour : oldSumHours)
{
oldSum += oldSumHour.Hours__c;
}

for(Time_Entry__c newSumHour : newSumHours)
{
newSum += newSumHour.Hours__c;
}

newTimesheet.Total_Hours__c = newSum;
oldTimesheet.Total_Hours__c = oldSum;

sheetsToUpdate.add(newTimesheet);
sheetsToUpdate.add(oldTimesheet);
}
}

update sheetsToUpdate;
}

//***********************************************
//Code for updating when a record is deleted
//***********************************************

else if(Trigger.isDelete)
{

Time_Entry__c [] teOld = trigger.old;

for(Time_Entry__c te: teOld)
{

for (Weekly_Timesheet__c timesheet: [select Id, Name, Total_Hours__c from Weekly_Timesheet__c where Id = :te.Timesheet__c])
{
for (Time_Entry__c timeEntries: [select Id, Hours__c from Time_Entry__c where Timesheet__c = :timesheet.id])
{
sumTotalHours += timeEntries.Hours__c;
}

timesheet.Total_Hours__c = sumTotalHours;

sheetsToUpdate.add(timesheet);
}
}

update sheetsToUpdate;
}

}

8. Create the unit test for the trigger in an Apex class

[COMING SOON]

Toolkit for House Hunting on the Web

Tuesday, September 16th, 2008

I’m about to move out of my apartment and I’ve been on the hunt for where I will end up next. With work and school, I haven’t had a lot of time to drive and look around for a new place but I have been able to check out a lot of places via the web.

Here are the tools I’ve been using:

Craigslist
If you haven’t heard of Craigslist by now, you’ve probably been living under a rock. Craigslist is an online provider of classified ads. The website lists items for sale and purchase from cities all over the world. I’m looking for another apartment so I’ve been searching http://reno.craigslist.org/apa/ for something within my price range.

Google Street View
When I find a place I like on Craigslist, I pop the address into Google Maps and pull up the street view option to get another perspective on the property and its surroundings.

Twitter
You never know what opportunities your friends may know about. I have been reminding my followers on Twitter that I’m looking for a new place to live and have had a few people respond with available options in their neighborhood.

Zillow
If you’re looking to actually buy or sell a house or condo, Zillow provides you with a few handy tools. First off, they provide an interactive map via Microsoft Virtual Earth that allows you to interact with properties that are currently for sale or have sold recently. The map shows estimates for each of these properties and can help in valuing your property. Second, Zillow can provide you with a Zestimate, which is a valuation of your property based on the data they have on similar properties nearby.

Keep in mind, while there are a lot of cool resources online, you can find some pretty cool deals out there the old fashioned way by hopping in your car and driving around.

Secret to Making Money from Startup School 08

Sunday, September 14th, 2008

David Heinemeier Hansson at Startup School 08 on The A Secret to Making Money.

His presentation is to the point and reinforces the direction I’m heading while working on my own web app in the little “spare/free” time I find. Quite inspiring.

<div><a href='http://www.omnisio.com' onclick="pageTracker._trackPageview('/outgoing/www.omnisio.com?referer=');">Share and annotate your videos</a> with Omnisio!</div> <p>

Installing MySQL from source on Mac OS X Leopard

Sunday, September 14th, 2008

I spent a few hours going through these steps with a friend of mine, Glenn, who is starting to learn Ruby on Rails. He wanted to install MySQL so we decided to do it from source. Glenn was trying to install MySQL using Dan Benjamin’s tutorial at Hivelogic. I found the same steps that Dan posted on a few other websites but the remote source code his example tries to download no longer exists. This process does not take a few hours but we ran into a few issues trying to find a working copy of the version we used: mysql-5.0.45.tar.gz.

This is a quick post, which I hope may help anyone else trying to install MySQL, but I have not gone in depth on any of the steps. If you have any issues or questions, please feel free to comment below.

Disable any existing installs of MySQL:
sudo rm /usr/local/mysql

Remove the startup item:
sudo rm -rf /Library/StartupItems/MySQLCOM/

Setup your path by editing your .bash_login file, I’ll be using Textmate:
mate ~/.bash_login

Add to the end of the file:
export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"

Save the file.

Create a directory called src in your home folder.
mkdir src
cd src

To download the mysql source:
curl -O http://mirror.provenscaling.com/mysql/community/source/5.0/mysql-5.0.45.tar.gz

Extrace the code from the gzip and enter the directory:
tar xzvf mysql-5.0.45.tar.gz
cd mysql-5.0.45

You now need to configure MySQL, paste the following into Terminal and press enter:
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
-fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql \
--with-extra-charsets=complex --enable-thread-safe-client \
--enable-local-infile --enable-shared

Now we will compile the code:
make

And install the code:
sudo make install

The last two steps may take a while.

Once all of this is complete, it’s time to setup the initial database user and privileges.
cd /usr/local/mysql
sudo ./bin/mysql_install_db --user=mysql
sudo chown -R mysql ./var

Now MySQL should be installed. In order to start the initial MySQL and have it start every time you restart your machine, do the following:

Create a file in /Library/LaunchDaemons named com.mysql.mysqld.plist
Paste the following XML into the new file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>com.mysql.mysqld</string>
    <key>Program</key>
    <string>/usr/local/mysql/bin/mysqld_safe</string>
    <key>RunAtLoad</key>
    <true/>
    <key>UserName</key>
    <string>mysql</string>
    <key>WorkingDirectory</key>
    <string>/usr/local/mysql</string>
</dict>
</plist>

While still in the LaunchDaemons folder, enter:
sudo chown root /com.mysql.mysqld.plist
sudo chown root com.mysql.mysqld.plist 

Return to the top directory and enter:
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysqld.plist

MySQL should now be running. To enter MySQL, enter in Terminal:
mysql -u root

You should see the following:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.45 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>

Congratulations, you’ve installed MySQL from binary source!

If you do not see the MySQL monitor, make sure you followed all the steps above. When I did this for the first time, it didn’t work so I disabled the install and started over from the top and it worked fine the second time around.

what i do -

Lively Labs

Web App Shop

visit

Reno Collective

Coworking Space

visit

things you should go to -

SEP 18-19

WordCamp PDX

in Portland

more

OCT 23

WordCamp Las Vegas

in Las Vegas

more

NOV 15-17

FOWD

in New York City

more

DEC 6-9

Dreamforce

in San Fran

more