In reference to contest: http://www.cloudspokes.com/challenges/1804
Category Archives: Uncategorized
I am in London this week.
I am working on Salesforce / SAP / Ruby demo for September.
- NetWeaver is SAP’s new approach to Java and ERP system.
Getting Debugger to work on Ruby 1.9.3
The new Ruby 1.9.3 breaks the old Ruby Debugger. Following steps are needed to get it work again. Furthermore, Mongoid 3.0.x requires Ruby 1.9.3. The old Ruby 1.9.3 does not work. Below is a working shell script
echo "Installing ruby-debug with ruby-1.9.3-p0 ..." curl -OL http://rubyforge.org/frs/download.php/75414/linecache19-0.5.13.gem curl -OL http://rubyforge.org/frs/download.php/75415/ruby-debug-base19-0.11.26.gem sudo gem install linecache19-0.5.13.gem ruby-debug-base19-0.11.26.gem -- --with-ruby-include=$rvm_path/src/ruby-1.9.3-p194/ sudo gem install --pre ruby-debug-base19x echo "Done."
OAuth 1 and 2 (for Google) with OmniAuth1+2 Gems
OAuth is an important standard for cross domain authentication, allowing web apps and users to share subscriptions. Per wikipedia (http://en.wikipedia.org/wiki/Oauth), sites are supporting either 1.0 or 2.0 Oauth standards.
| Service Provider | OAuth Protocol |
|---|---|
| VK | 2.0 |
| 2.0 | |
| Foursquare | 2.0 |
| github | 2.0 |
| 2.0 + 1.0 + AuthSub | |
| Microsoft (Hotmail, Messenger, Xbox) | 2.0 |
| 2.0 | |
| MySpace | 1.0a |
| Netflix | 1.0a |
| StatusNet | 1.0a |
| 1.0a | |
| Vimeo | 1.0a |
| Yahoo! | 1.0a |
Google actually support 3 different authentication mechanisms.
- AuthSub – The legacy channel subscription mechanism of the YouTube,
- OAuth 1.0 – But, it only works for Google Contacts, I was NOT able to authenticate against YouTube with scope (http://gdata.youtube.com), even though it was documented in http://hoisie.com/2011/09/12/using-google-oauth-with-omniauth/ using omniauth + omniauth-google gems
- OAuth 2.0 – I was able to successfully authenticate against it using omniauth-oauth2 + omniauth-google-oauth2 gems
Note the following:
https://accounts.google.com/ManageDomains -> for OAuth 1.0
https://code.google.com/apis/console -> OAuth2 (This is the right one for YouTube Oauth 2)
https://www.google.com/a/cpanel/[mydomain]/SetupOAuth -> Service to Your Google App admin, i.e. Gmail, Calendar, etc.
You can then $ curl https://gdata.youtube.com/feeds/api/users/default -H ‘Authorization: OAuth ya29.reset of the Key’
I made an example Rails application, showing how to authenticate using those (oauth 1.0 and oauth 2.0) standards.
In the Rails application, following files are needed.
### Rails_root/Gemfile ### source 'https://rubygems.org' ... #OAuth 1.0 gem 'omniauth' gem 'omniauth-google' #OAuth 2.0 gem 'omniauth-oauth2' gem 'omniauth-google-oauth2' ...
### routes.rb ### <App name>::Application.routes.draw do resources :users root :to => 'users#index' match "/auth/:provider/callback" => "sessions#create" match "/auth/failure" => "sessions#failure" match "/signout" => "sessions#destroy", :as => :signout end
### config/initializers/omniauth.rb ###
OmniAuth.config.full_host = "http://localhost:3000"
Rails.application.config.middleware.use OmniAuth::Builder do
# OAuth 1.0 result # Access token starts with 1/xxxx
#Get Oauth 1.0 Key (domain name format) + Consumer Secret from https://accounts.google.com/ManageDomains
# Provider Uid Access Token Secret
# google raygao@are4.us 1/---------oauth 1 token------- XXXXXX
provider :google, '<key in Dname>', '<Consumer Secret>', :scope => 'http://gdata.youtube.com'
# OAuth 2.0 result, # Access token starts with ya29.xxxx
# get it from https://code.google.com/apis/console/
# See https://github.com/zquestz/omniauth-google-oauth2/issues/20
# This explain OAuth2 for Google. Note, OAuth, does not return token_secret.
# Provider Uid Access Token Secret
# google_oauth2 102425343454127939656 ya29.<rest of the stuff> <none>
provider :google_oauth2, '<Client ID>.apps.googleusercontent.com', '<Client Secret>', {:access_type => 'online', :approval_prompt => '', :client_id => '<domain name>'}
end
### sessions_controller.rb ####</pre> require 'pp' class SessionsController < ApplicationController def create auth = request.env["omniauth.auth"] puts auth #user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.create_with_omniauth(auth) user = User.create_with_omniauth(auth) session[:user_id] = user.id puts '###### Callback invoked #####' redirect_to root_url, :notice => "Signed in!" end def destroy session[:user_id] = nil redirect_to root_url, :notice => "Signed out!" end def failure #render :text => 'Google auth failed.' render :text => request.env['omniauth.auth'].to_hash.inspect rescue "No Data" end end
###users/index.html.erb ### <h1>Listing users</h1> <table> <tr> <th>Provider</th> <th>Uid</th> <th>Access Token</th> <th>Secret</th> <th></th> <th></th> <th></th> </tr> <% @users.each do |user| %> <tr> <td><%= user.provider %></td> <td><%= user.uid %></td> <td><%= user.access_token %></td> <td><%= user.secret %></td> <td><%= link_to 'Show', user %></td> <td><%= link_to 'Edit', edit_user_path(user) %></td> <td><%= link_to 'Destroy', user, :confirm => 'Are you sure?', :method => :delete %></td> </tr> <% end %> </table> <br /> <%= link_to 'New User', new_user_path %> <br/><hr/> <%= link_to 'Google Auth', "/auth/google" %><br/> <%= link_to 'Google OAuth 2', "/auth/google_oauth2" %><br/> <hr/> curl https://gdata.youtube.com/feeds/api/users/default -H 'Authorization: OAuth ya29.<long stuff>' <br/> note, Oauth2 has no return secret!!! <br/> Setup Oauth2 here -> https://code.google.com/apis/console
### models/user.rb ### class User < ActiveRecord::Base def self.create_with_omniauth(auth) u = User.new() u.provider = auth['provider'] u.uid = auth['uid'] u.access_token = auth['credentials']['token'] u.secret = auth['credentials']['secret'] puts "*" *80 puts auth puts "*" *80 u.save return u end end
The Zip file of the app is here -> Utube
Enjoy!!!
Adding runtime (dynamically generated) components to JPanel with NetBeans
This problem has been bugging me for the passed two days. Finally, after a lot of trial and error, I realized it was an issue concerning selecting the correct LayoutManager.
By default, containers (i.e. JPanel, JScrollPanel) added with drag and drop inside the NetBeans uses the GroupLayout. Hence, if you try to add a new runtime generated components to those containers, they won’t show up.
To solve this problem is to reset the Layout manager. So far, GridLayout and FlowLayout managers works great.
touchmepane.setLayout(new GridLayout());
And, this solved me problem.
jPanelServerList.setLayout(new GridLayout()); jPanelServerList.add(rayslabel,0); jPanelServerList.add(servericon,0); jPanelServerList.setBackground(Color.BLUE); jPanelServerList.revalidate(); jPanelServerList.repaint();
revalidate() call is important. Otherwise, there is a lag.







