[Flash]How to detect flash player version

前一篇文章提到的 chart 是別人家做好的 flash 元件,所以很多地方都有受限,現在有人反映 flash player 6 看不到 chart,好吧,既然有人反應那就來找找怎麼去判斷 browser 的 flash player 版本(心中OS:現在 flash 版本都到 9 了麻煩升個級好嗎? -__-)…

我找到兩個方式:

一、在 object tag 上加上 codebase 指定版本

<object classid=”xxx” codebase=”http://fpdownload.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=8,0,0,0″ … >

</object>

但是 FF2 好像不太吃這一套…

二、 用 JS 判定

詳見 這裡,這應該是最穩的辦法…

不過還真是有點小麻煩,若是在做 flash 的時候就加上檢查版本的功能,那不就沒這麼多事了嗎? 唉~

張貼留言

[JavaScript]How to set resize event in IE & FF2

前陣子,為了 layout 上的 flash chart 能夠 liquid width,在 try error 了無數次之後,好不容易找到最簡單能夠重新 render chart 的方式,卻栽在設定 resize 的 event 上,在 IE 上只要在 tag 上加上 onresize=”xxx” 就OK,FF2 就不吃這一套,屢試不爽

(╯ ̄皿 ̄)╯︵┴─┴

查了一下資料,原來 FF2 的 resize 只有在 window 物件上才有,而且是叫〝resize〞不是〝onresize〞,好吧,那就設成 window resize 吧..

BUT, 我以為我找到關鍵的所以應該沒問題了,錯錯錯~~ 原來 IE & FF2 的 event 指定方式不一樣啊~~~~

好吧, 再去問了谷歌得到解答如下:

// if FF2
if(window.addEventListener)
{
window.addEventListener(‘resize’, function(){render_chart();}, false);
}
// if IE
if(window.attachEvent)
{
window.attachEvent(“onresize”, function(){render_chart();});
}

唉~ 真是麻煩~

留言 (2)

[Ubuntu]Ubuntu 更改時區

今早因某台 Server 時間不正確,所以 Google 了一下 ubuntu 更改時區的用法

以下作法 參考至 调整更改ubuntu时区鳥哥的 Linux 私房菜-NTP 時間伺服器

$ sudo tzselect
依選項選擇你在的時區

$ sudo cp /usr/share/zoneinfo/Aisa/Taipei /etc/localtime
更換時區檔

$ sudo ntpdate time.stdtime.gov.tw
對時,其它台灣的 Time Server 請參考 國家時間與頻率標準實驗室 的說明

$ sudo hwclock -w
將時間寫入 BIOS

$ sudo crontab -e
@daily /usr/sbin/ntpdate time.stdtime.gov.tw > /dev/null
將對時寫進 crontab 每天做一次

張貼留言

[ActiveRecord]Dynamic attribute-based finders

說明:(節錄至ActiveRecord::Base)
Dynamic attribute-based finders are a cleaner way of getting (and/or creating) objects by simple queries without turning to SQL.

用法:

可以簡單利用 find_by_xxx or find_all_by_xxx 來取得資料(xxx => column name)
ex: Person.find_by_user_name(user_name)

也可使用複數的條件(and/or)來取得資料
ex: Person.find_by_user_name_and_password(user_name, password)

最最最好用的就是這個功能,先判斷資料是否存在,若存在回傳此筆資料,若不存在 create 這筆資料
ex:
# No 'Summer' tag exists
Tag.find_or_create_by_name("Summer") # equal to Tag.create(:name => "Summer")
# Now the 'Summer' tag does exist
Tag.find_or_create_by_name("Summer") # equal to Tag.find_by_name("Summer")

或是不想直接 create 只是先初始化一個新的物件的話
ex:
# No 'Winter' tag exists
winter = Tag.find_or_initialize_by_name("Winter")
winter.new_record? # true

這些finders實在是方便,故特別記一筆以免忘記~

留言數(1)

[DRB]Distributed Ruby Objects Simple Sample

Distributed Ruby Objects (以下簡稱 drb),是 Ruby Standard Library 中用來做到類似 RPC (Remote procedure call) 的函式庫,以下紀錄最基本的 Server 端和 Client 端的 sample。

Server:

require ‘drb’

class TimeServer

def get_current_time
Time.now
end

def stop_server
DRb.stop_service
end

end

uri = ‘druby://localhost:7788′
front_object = TimeServer.new

DRb.start_service(uri, front_object)

# Wait for the drb server thread to finish before exiting.
DRb.thread.join

這樣一來最簡單的 Server 端就OK了,只要執行這段 Ruby code,Client端就可以用 druby://localhost:7788 來叫用服務。

Client:

require ‘drb’

server_uri = “druby://localhost:7788″

timeserver = DRbObject.new_with_uri(server_uri)

#call remote object method ‘get_current_time’
puts timeserver.get_current_time

#stop remote service
timeserver.stop_server

就這麼簡單,不過方便歸方便,安全的問題也要特別注意

若想深入了解的人可以參考以下連結:

Intro to DRb
drb: Ruby Standard Library Documentation

張貼留言

如何在寫一般 Ruby Code 時使用 Rails 的 ActiveSupport

就只要改一行:

require “rubygems”
require “active_support”

就這麼簡單,害我找半天,本以為要像使用 ActiveRecord 般

require “rubygems”
require_gem “activerecord”

依樣畫葫蘆的結果完全沒反應

require “rubygems”
require_gem “activesupport”

怎麼會這樣勒?????
在Google中也沒找到相關資料,我記得require_gem “activerecord” 之後除了ActiveRecord外還可直接使用ActiveSupport,但若只想使用ActiveSupport的功能把整個ActiveRecord都require進來實在太肥,索性直接進 ActiveRecord 的原始碼裡面看到底是怎麼弄的,結果改一行就解決~~

YA~~ 以後可以直接使用 1.days.ago 或是 Time.now.tomorrow 這類簡單的表示法啦~~~

Rails萬歲~~~ OpenSource 萬歲~~~~~

留言 (2)

[Ruby] dump excel data example.

require 'win32ole'

def getAbsolutePath filename
  fso = WIN32OLE.new('Scripting.FileSystemObject')
  return fso.GetAbsolutePathName(filename)
end

filename = getAbsolutePath("sample1.xls")
xl = WIN32OLE.new('Excel.Application')
book = xl.Workbooks.Open(filename)

begin
book.Worksheets.each do |sheet|
  sheet.UsedRange.Rows.each do |row|
    record = []
    row.Columns.each do |cell|
      record << cell.Value
    end
    puts record.join(",")
  end
end

ensure 
  book.Close
  xl.Quit
end

Reference: Win32OLE 活用法 【第 2 回】 Excel

留言 (2)

如何在寫一般 Ruby Code 時使用 Rails 的 ActiveRecord 存取 Database

require "rubygems"
require_gem "activerecord"
require "active_record"

ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "hostname",
:database => "yourdb",
:username => "dbuser",
:password => "dbuserpw"
)

class MyTable < ActiveRecord::Base
end

這樣就可以在一般 Ruby Code 中使用 ActiveRecord 的 CRUD (Create, Read, Update, Delete) 存取你的 Database 了.

Update: 2007-03-16

因為 require_gem 已經被廢除了,所以改用 require ‘active_record’ 代替

另外,從 Lighty RoR 最簡潔有力的網頁框架: 在 Rails 之外使用 ActiveRecord 這篇中發現,還可以利用設定 config 的方式將 ActiveRecord 的設定寫在 code 外

想知道詳細用法可至上述網頁看看 :)

張貼留言

How to install Trac on Ubuntu

Prerequisites

  • Apache with SSL
  • SVN

Installation

  1. Install Package
    • $ sudo apt-get install trac
  2. Create the Trac Environments Directory
    • $ sudo mkdir /home/trac
    • $ sudo chown www-data:www-data /home/trac
  3. Setup Apache2
    <VirtualHost servername:443>
        ServerName servername
        ServerAdmin admin@servername
    
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/apache.pem
    
        DocumentRoot /var/www/trac
        <Directory />
            Options None
            AllowOverride None
            allow from all
        </Directory>
    
        # Trac settings
        <Directory "/var/www/trac">
            Options +FollowSymLinks
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
    
        <Directory "/var/www/trac/projects">
            AllowOverride None
            Options ExecCGI -MultiViews +FollowSymLinks
            AddHandler cgi-script .cgi
            Order allow,deny
            Allow from all
        </Directory>
    
        # for multiple projects
        RewriteEngine on
        RewriteRule ^/projects/+$            /projects/index.html [L]
        RewriteCond /home/trac/$1            -d
        RewriteRule ^/projects/([[:alnum:]_]+)(/?.*)    /projects/trac.c
    gi$2 [S=1,E=TRAC_ENV:/home/trac/$1]
        RewriteRule ^/projects/(.*)          /projects/index.html
    
        # You need this to allow users to authenticate
        # trac.htpasswd can be created with
        # cmd 'htpasswd -c trac.htpasswd' (UNIX)
        # do 'man htpasswd' to see all the options
        <LocationMatch "/projects/[[:alnum:]_]+/login">
            AuthType Basic
            AuthName "trac"
            require group dev
        </locationMatch>
    
        ErrorLog /var/log/apache2/trac_error.log
    
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn
    
        CustomLog /var/log/apache2/trac_access.log combined
        ServerSignature On
    </VirtualHost>
  4. Setup Trac web home directory (/var/www/trac)
    • index.html
    • projects/
      • trac.cgi -> /usr/share/trac/cgi-bin/trac.cgi
    • trac -> /usr/share/trac/htdocs
  5. Restart Apache
    • $ sudo chown -R www-data /usr/share/trac
    • $ sudo apache2 -k restart
  6. Creating Environments
    • $ sudo mkdir /home/trac
    • $ sudo trac-admin /home/trac/YourProjectNameHere initenv
    • $ sudo chown -R www-data /home/trac/YourProjectNameHere
    • The “trac-admin” command shown above prompted me to enter:
      • the project name (YourProjectNameHere)
      • the path to svn repository (/home/svn/YourProjectNameHere)
      • the path to the Trac templates directory (/usr/share/trac/templates)
  7. Access your project
    • https://servername/project/YourProjectNameHere

Reference Link:

TracOnUbuntu – The Trac Project – Trac

留言 (6)

BACKUP and RESTORE WIKI/SVN/TRAC

WIKIDB

  • Backup
    • mysqldump -u root -pxxxxxx wikidb > backup.sql
  • Restore
    • mysql -u root -pxxxxxx wikidb < backup.sql

SVN

  • Backup
    • svnadmin dump /svn/repository_path > dumpfile
  • Restore
    • svnadmin load /svn/repository_path < dumpfile

TRAC

  • Backup
    • Copy /trac/projrct
  • Restore
    • Just put the copy back…

張貼留言

較舊的文章 »