Delivering a good speech is hard, because it requires a lot of experience and when you are young, how many times are you going to deliver a speech ? Not much.
At Startup Weekend Eindhoven 2011, I have had a hard time to make the speech. The problem I had was, my idea was already busted with the second presentation thus I needed to come up with an another existing idea of mine. I made myself clear that no condition will stop me to go out there and make the pitch. Great that I did it.
My lizard brain was working hard to stop me, not to do the thing, but I did easily shut it off, even though the physical effects was high.
It is important to note that, doing you homework well before the pitch/presentation/speech is very important. Write you speech, record your own sound and listen very carefully to your tone and keep on doing. You will get better, and don't forget to do it in the real world, not in your safety zone, not to your friends/mom/girlfriend. Deliver it to an audience of 100. You are going to see the difference.
Anyway, here is another great article at HBR about speech http://blogs.hbr.org/pallotta/2011/03/delivering-the-speech-of-your.html
- Know your goal. When the speech is over, what do you want the audience saying about it and you? What difference do you want to make? Most speakers never ask this of themselves.
- Memorize your speech. That's right. Memorize every word of it. Deliver it in front of a mirror five times, six times, ten times. Then deliver it while your kid is screaming in the background, to develop the confidence that you can recite it no matter what distraction pops up. Why memorize it? Because nothing will put an audience to sleep faster than someone reading from a prepared text. Because when you memorize it, it stops being about getting the words right and starts being about getting the feeling right. Imagine if Andrea Bocelli didn't memorize the words to the songs in his repertoire. How much room do you think there would be for him to feel them?
- If you don't want to knock it out of the park, don't follow rule 2.
- Practice the transitions. What will get you from one point to the next? Is it "if," or "when," or "then I." Know and memorize the precise construction of each transitional sentence. It's in uncertainty about transitions from one point to the next that people lose their grace in public and start saying "aaahhhh."
- Don't fear silence. You want to silence a room? Don't talk. Be silent and look at the audience. Five seconds. Seven seconds. Just taking them in. Connecting with them. But never do it for effect. Do it to get intimate with your audience. It silences a room like you wouldn't believe. Why? Because it's not normal. Audiences are used to speakers filling every nanosecond with the sound of their own voice, leaving zero time for reflection. Audiences are used to being avoided, not appreciated. When they come upon someone who can command their own silence, they understand, "This person is serious."
- Never, ever, ever use PowerPoint as your speech notes. The slides are for your audience, not for you. The moment they see you rattling through a list of bullets that you should have had the courtesy to memorize, they put you in a category with every other boring presenter they've ever seen and you've lost them.
- Give something of yourself. Don't be afraid to feel something in front of an audience. Don't be afraid to say something that will make you feel something, and that will make the audience feel something.
- Be yourself. Don't feel you need to mimic the testosterone level of a motivational speaker. You will look and feel fake. Robert Kennedy never tried to copy Martin Luther King's rhetorical skills. RFK was soft-spoken. He owned that. And as a result, was every bit as affecting as King.
- Don't speak in abstractions. Say what it is that you mean. Plainly. Avoid the lexicon of your own trade. People are sick of it. It doesn't mean anything to them anymore. Speak in human.
- Feel what's happening in the room and use it to connect your speech to this moment. In this way, if your mike goes out, you can make a joke out of it, rather than it making a nervous wreck, and a joke, out of you.
- Make eye contact until it scares you. Distribute your eye contact around the room. Not for effect, but because you genuinely want to connect with the people in front of you.
- Don't miss your own talk. It is a privilege and an honor to be asked to speak. Take the opportunity to commune with other human beings. It's like getting to watch a falling star.
- Come from a place of love for your audience. That's mastery. When you allow yourself to feel the humanity of your audience, you have succeeded in taking the focus off yourself. There is a universe of difference between this place and a PowerPoint presentation. This is the place from which change is made. From here you can move mountains.
20ef63c4-8b40-4a0d-bf1d-8b16cf1b52bd|2|3.0
Posted by
Admin on
3/16/2011 11:59 AM |
Comments (0)
A Great list published at Harvard Business Review ;
| WE NEED LESS: |
WE NEED MORE: |
| Information |
Wisdom |
| Shallow billionaires |
Passionate teachers |
| Self-promotion |
Self-awareness |
| Multitasking |
Control of our attention |
| Inequality |
Fairness |
| Sugar |
Lean protein |
| Action |
Reflection |
| Super sizes |
Smaller portions |
| Private jets |
High-speed trains |
| Calculation |
Passion |
| Experts |
Learners |
| Blaming |
Taking responsibility |
| Judgment |
Discernment |
| Texting |
Reading |
| Anger |
Empathy |
| Output |
Depth |
| Constructive criticism |
Thank-you notes |
| Possessions |
Meaning |
| Righteousness |
Doing the right thing |
| Answers |
Curiosity |
| Long hours |
Longer sleep |
| Complaining |
Gratitude |
| Sitting |
Moving |
| Selling |
Authenticity |
| Cynicism |
Realistic optimism |
| Self-indulgence |
Self-control |
| Speed |
Renewal |
| Emails |
Conversations |
| Winning |
Win-win |
| Immediate gratification |
Sacrifice |
1716b9a3-b169-4454-aa9a-5f6a11f1bf56|1|5.0
View basic
Lets start with generating a demo project called demo 3
rails new demo3
After generation completed, we could add post model with title and body fields
rails g scaffold post title:string body:text
<!DOCTYPE html>
<html>
<head>
<title>Demo3</title>
<%= stylesheet_link_tag :all %>
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>
</head>
<body>
<%= yield %>
</body>
</html>
go to views/layouts
yield basically appends all the rendering text from the views
go to the views/posts/index.html.erb file
<h1>Listing posts</h1>
<table>
<tr>
<th>Title</th>
<th>Body</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @posts.each do |post| %>
<tr>
<td><%= post.title %></td>
<td><%= post.body %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New Post', new_post_path %>
Filters
before
after
around is executed both before and after an action is executed
private
def get_and_respond_with
@post = params[:id].present? ? Post.find( param )
yield
respond_with(@post)
end
Place private keyword to the end of your rails controller otherwise all the methods underneath it will become private members. Private members are there for
to not to serve a actions to the controllers
we can have a rendering login in before or after action, which needs to be
You can use
layout "my_layout"
to define a layout used all over the post controller which will search in the application folder
or simply create a new view under the application called “posts.html.erb” which will be automatically picked up by convention
or you can also define which template to use in an action
def index
@posts = Post.all
render :layout => 'juicy'
end
Partials
Add the following line under index.html.erb
<%= render 'category_list' %>
place a new layout view under posts called _category_list.html.erb
and place some html
Now navigate to /posts, you will see your extra html is rendered onto the page.
underscore ( “_” ) sign to the trick to indicate that it is a partial view.
Lets change the _category_list.html.erb file and add the following code
<h1> Category </h1>
<% categories.each do |c| %>
<li> <a href="#"> <%=c %> </a> </li>
<%end%>
undefined local variable or method `categories' for #<#<Class:0xa98d474>:0xa98ba98>
because we did not defined our categories variable we get an error. Lets define the variable in our render call
replace the render ‘category_list’ with
<%= render :partial => 'category_list' , :locals => { :categories => [ "test" , "test2" ] } %>
:locals is the data that we are passing into the partial view
and the only data is named “categories” with an array of values
we can also use layout to render the partial view
create a new file called _green_box.html.erb in posts folder and place the following html code
<div style="background-color:green">
<%= yield %>
</div>
and modify the render line with
<%= render :partial => 'category_list' , :locals => {:categories => [ "test" , "test2" ] } , :layout => 'green_box' %>
and refresh your posts page!
Helpers
bahadir@ubox:~/RubymineProjects/demo3$ rails g migration add_author
invoke active_record
create db/migrate/20110206174947_add_author.rb
Open up the add_author.rb
class AddAuthor < ActiveRecord::Migration
def self.up
add_column :posts , :author_first , :string
add_column :posts , :author_last , :string
end
def self.down
remove_column :posts , :author_first , :string
remove_column :posts , :author_last , :string
end
end
This is a migration script that will help us to create the author_first and author_last column when we migrate up ( self.up ) and remove them ( self.down ) if we want to migrate down
rake db:migrate
bahadir@ubox:~/RubymineProjects/demo3$ rake db:migrate
(in /home/bahadir/RubymineProjects/demo3)
== AddAuthor: migrating ======================================================
-- add_column(:posts, :author_first, :string)
-> 0.0008s
-- add_column(:posts, :author_last, :string)
-> 0.0005s
== AddAuthor: migrated (0.0016s) =============================================
Now go to _form.html.erb
<div class="field">
<%= f.label :author_first %><br />
<%= f.text_field :author_first %>
</div>
<div class="field">
<%= f.label :author_last %><br />
<%= f.text_field :author_last %>
</div>
and last thing to do is to add the fields to the show.html.erb file
<p>
<b>Author first:</b>
<%= @post.author_first %>
</p>
<p>
<b>Author last:</b>
<%= @post.author_last %>
</p>
Lets look at how we can use helpers
go to your index.html.erb and add the following line
<td><%= author_name(post) %></td>
and open up the helpers/posts_helper.rb
and define the following method
module PostsHelper
def author_name(post)
"#{post.author_first} #{post.author_last}"
end
end
Lets print out the date of the post as well. Open up helpers/application_helper.rb and add the pretty_date function
module ApplicationHelper
def pretty_date(date)
date.strftime("%B %d %Y")
end
end
now go back to index.html.erb file and change the author_name line by appending the date of the post
<td><%= author_name(post) %> - <%= pretty_date(post.created_at) %> </td>
Other View Engines - HAML
add the haml gem to the GEMFILE file
gem 'haml'
and
run the script
bundle install
and restart your server
create a new file called index.html.haml and add the following lines
%h1 Welcome
- @posts.each do |post|
- if (should_show?(post))
%h2= post.title
%i #{author_name(post)} - #{pretty_date(post.created_at)}
%hr
= link_to 'Show', post |
= link_to 'Edit' , edit_post_path(post)
= link_to 'Destroy', post, :confirm => 'Are you sure?' , :method => :delete
%br
= link_to 'New Post', new_post_path
Holy cow!
http://html2haml.heroku.com/
Holy cow #2
some more refactoring to the index.html.haml
%h1 Welcome
= render :partial => "category_list", :locals => { :categories => ["thing","thing2"] }
// you might not use as if you name the partial view as "post" but if you need to
// use the as parameter to pass in the collection item
= render :partial => 'post' , :collection => @posts , :as => :post
%br
= link_to "New Post", new_post_path
Create a new file called _post.html.haml and paste in
- if (should_show?(post))
%h2= post.title
%i #{author_name(post)} - #{pretty_date(post.created_at)}
%hr
= link_to "Show", post |
= link_to "Edit" , edit_post_path(post)
= link_to "Destroy", post, :confirm => "Are you sure?" , :method => :delete
ef55ebfe-f43f-4138-8434-ae7cdfdf6b94|0|.0
Choosing an IDE or Editor
I have downloaded the RubyMine from Jetbrains who are the makers of famous ReSharper for .NET guys and IntelliJ for Java. I generally like the products of Jetbrains but I see RubyMine is still in its early stages and not free. You may still download the product and try it for 30 days.
Frankly, I see RubyMine tries to do a lot, download bundles run rails, use any rails generators but since we are in the learning stages and understanding under the hood, it is better to go with a basic normal editor.
The editor I am going to use is BlueFish which I mentioned before. BlueFish is a very nice simple editor which makes it easy to browse folders, create files, and also nice syntax highlighting for different languages ( html , javascript , java , ruby , PHP, PERL , Python )
Folder tree is refreshed automatically if you click one time to the folder ( wow! ) It is very handy if you use rails through command line!
New Rails project
Lets start with writing code. First of all we need to create a new rails application. In order to do that open up a console and run the following command
rails new demo1
creates a new demo1 project. The project is empty which means there are no mappers, controllers or views are created for you. New command only generates a basic Rails project structure.
Mapper
config/routes.rb here you define a new route for the request handling
- open up the config/routes.rb
- Go to line 51
-
root :to => "home#index"
- uncomment the root and change the string with home#index
Basically with this piece of code we tell rack that we will have a home controller and in that home controller there will be method called index. Lets create that controller first
- go to app/controllers
- add a new file called home_controller.rb
- in that file place the following line of code
class HomeController < ApplicationController
def index
@message = " Hello from the home controller"
end
end
We don’t want to place any html inside the controller, so let’s create our view as well. The file extension of the html file will be .erb which stands for eRuby that is the ruby templating file like asp or jsp
- go to app/views/
- create a folder called home
- create a file named index.html.erb
- and place the following code.
It is important to understand that all the files and code placed inside is a convention.
- home_controller.rb maps with root :to => "home#index"
- and the class
- HomeController maps with root :to => "home#index"
- def index maps with root :to => "home#index" and index.html.erb as well
To try how things will be broken, just rename one of the following into “homex” and see the errors.
If you place everything fire up rails in console using
rails s
in your application directory.
Using Query Strings
Make a request to your home http://localhost:3000/?m=testtest Rails contains an object called params and to get the value of the m query string
@user_messsage = params [ :m ]
Open your index.html.erb to modify the html and print out the parameter that passed in ( which is a bad idea to directly output the value )
<h1> <%=@message%> & <%=@user_message%> </h1>
and if you refresh you browser you will see
Hello from the home controller & testtest
but if you pass in an html tag with your query string , Rails 3 will automatically encode the output http://localhost:3000/?m=testtest<h2>
Forms
Create a form and post the information to server and back Create a new file called new.index.erb under your views/home folder paste the following code ( normal way, not rails way! )
<form action="/home/create" action="post">
<input name="message" />
<input type="submit" value="submit" />
</form>
and we need to map this action in our routes file.
Routing Error
No route matches "/home/create"
Routing
Rather than mapping all the actions one by one, we may remove ( comment ) the match line and active the line 57
match ':controller(/:action(/:id(.:format)))'
which will do the auto mapping for us. ( sounds familiar with ASP.NET MVC global.asax routing definitions ? :)
We previously define basic html to post our data to the server, but in rails you don’t need to write that piece of code.
<% form_tag ( 'create' ) do %>
<input name="message" />
<input type="submit" value="submit" />
<% end %>
navigate to http://localhost:3000/home/new
def create
@message = params[:message]
# new in Rails 3 build in, use notice
redirect_to "/" , :notice => @message
end
and refactor index.html.erb into
<h1>
<%=@message%>
</h1>
<%=notice%>
as you realized, we did not use the @user_message but use the notice session parameter which we set in the create method
CRUD
So far we went with the basics but the real power of rails starts with database operations and how easy to manage, generate and iterate. We start with the rails generator Scaffold
rails g scaffold pint name:string price:decimal
This will tell the rails that, hey rails
- I want have a new model called pint
- Pint will have two fields which are
- Name is a string
- Price is a decimal field
Rails does not like singular form of models ( like pint in this scenario ) Here is the output rails 3 generates
bahadir@ubox:~/RubymineProjects/demo1$ rails g scaffold pint name:string price:decimal
invoke active_record
create db/migrate/20110206113538_create_pints.rb
create app/models/pint.rb
invoke test_unit
create test/unit/pint_test.rb
create test/fixtures/pints.yml
route resources :pints
invoke scaffold_controller
create app/controllers/pints_controller.rb
invoke erb
create app/views/pints
create app/views/pints/index.html.erb
create app/views/pints/edit.html.erb
create app/views/pints/show.html.erb
create app/views/pints/new.html.erb
create app/views/pints/_form.html.erb
invoke test_unit
create test/functional/pints_controller_test.rb
invoke helper
create app/helpers/pints_helper.rb
invoke test_unit
create test/unit/helpers/pints_helper_test.rb
invoke stylesheets
create public/stylesheets/scaffold.css
After that check out the folders in your folder structure. Let’s migrate the database so that our model is also reflected ( huh did we have already a database setup ? :) Well, Sqlite is already in place and rails already made the setup for us.
rake db:migrate
bahadir@ubox:~/RubymineProjects/demo1$ rake db:migrate
(in /home/bahadir/RubymineProjects/demo1)
== CreatePints: migrating ====================================================
-- create_table(:pints)
-> 0.0018s
== CreatePints: migrated (0.0019s) ===========================================
I am amazed how easy it is! Hold on a second, we did not setup any routing and application responds us. How could it be happen ? Open up routes.rb file Line 2 is added by the rails generator
resources :pints
which does the all the routing tricks for us.
d866cb5f-7783-4ab2-960b-f25da78bfca6|1|5.0
Todays challenge is setup Python 2.5 in Ubuntu and deploy a sample application to Google App Engine. I chose Python over Java, since I don’t know much about Python and Django. Okay, it’s time to figure out
Before installing python, lets first install Eclipse and eclipse won't run without Java jre's. First you need to download jre, first we need to add a list of sources to the sources.list file so that we may download the java jre and jdks using sudo apt-get install command. In order to do that
install java in ubuntu
Ubuntu 10 comes with python 2.6 but in order to run Google App Engine without any problems when deployed, you need to download and setup Python 2.5 because that is what the App Engine works right now. If you try to install python 2.5 with
sudo apt-get install phyton2.5
you are going to fail my friend. Let’s see how we can install python 2.5
I have found the following web site
http://kovshenin.com/archives/installing-python-2-5-on-ubuntu-linux-10-10/which describes the steps to install 2.5
sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get update
sudo apt-get install python2.5
and if you run the command
python2.5
you will see an output like this;
Python 2.5.5 (r255:77872, Sep 14 2010, 15:51:01)
Setting up interpreter in Eclipse
http://pydev.org/manual_101_interpreter.htmlDownload Google App Engine Pyhton SDK
http://code.google.com/appengine/downloads.html and extract it to a folder ; e.g /home/bahadir/AppEngine/
Create a new Google App Engine Project
Select the location of the Google App Engine Python SDK 
After your first test project created, you can click the Google App Engine deploy button. I guess, I don’t have the deploy settings for python, I got an error, “this is not a google app engine project”.

Thus, I go back to basics, fire up the terminal.
To run your project locally, you may use the development server for app engine which is found in the Google App Engine SDK. The parameter is the location of your application which app.yaml is located.
./dev_appserver.py /home/bahadir/workspace/guesswhat/src/
In order to upload your application to google engine use the following command
./appcfg.py --application=cambelb --email=me@bahadircambel.com update /home/bahadir/workspace/guesswhat/src/
- -- application is the name of the application id you set in your google app engine
- -- email is your login email
At the initial run of the appcfg script, you may be prompt to enter your password information, if your email is not already authenticated.
Here is the output
- ./appcfg.py:42: DeprecationWarning: the sha module is deprecated; use the hashlib module instead os.path.join(DIR_PATH, 'lib', 'django'), /home/bahadir/AppEngine/google_appengine/google/appengine/tools/dev_appserver_login.py:33: DeprecationWarning: the md5 module is deprecated; use hashlib instead
- import md5
- Application: cambelb (was: wishiremember); version: 1.
- Server: appengine.google.com.
- Scanning files on local disk.
- Initiating update.
- Cloning 2 application files.
- Uploading 2 files and blobs.
- Uploaded 2 files and blobs
- Precompilation starting.
- Precompilation completed.
- Deploying new version.
- Checking if new version is ready to serve.
- Will check again in 1 seconds.
- Checking if new version is ready to serve.
- Will check again in 2 seconds.
- Checking if new version is ready to serve.
- Closing update: new version is ready to start serving.
Now you can navigate to your application:
639fd4d5-6a3e-4f84-b704-0369d44a0ce3|0|.0