XD找好久
1.點選要修改的資料表
2.之後到瀏覽介面後,按上面的管理
3.資料表選項內,直接將資料表改名為的框框修改就好了
星期一, 5月 28, 2012
星期二, 5月 22, 2012
[Heroku] Java on Heroku
試玩了一下Heroku,發現自已從本地端的eclipse建Maven專案push上去Heroku後,
app都run不起來。
不過目前Heroku支援了四種template來幫助開發者在上面開發web app。
請參考這個網站:http://java.heroku.com/
•Web app with Spring and Tomcat
•Containerless web app with Embedded jetty
•Web app with Play! Framework
•RESTful API with JAX-RX
app都run不起來。
不過目前Heroku支援了四種template來幫助開發者在上面開發web app。
請參考這個網站:http://java.heroku.com/
•Web app with Spring and Tomcat
•Containerless web app with Embedded jetty
•Web app with Play! Framework
•RESTful API with JAX-RX
[Java] Maven + Eclipse 備忘錄
Maven是什麼?
Maven提供你的是建構環境,或說是建構環境的框架(Framework)。
舉例來說,在Maven中認為,專案開發遵循應某些慣例,這些慣例像是固定目錄的名稱與架構、固定變數的名稱、固定的建構生命周期(Build lifecycle)等。Maven認為你不應花費時間在這些慣例的設定上,而要將精神放在更重要的工作上。
正如在 簡介 Apache Ivy 中提到的,程式庫的相依性管理是個頭痛的問題,Maven使用集中式管理,提供集中式的貯藏室(Central repository),你要在設定檔案宣告相依的程式庫等資訊,Maven會為你下載相關的檔案。
plugin 為基礎的架構
Maven 提供固定的建構生命周期,像是Default、Clean、Site等。在每個生命周期中,又會分作一些階段(Phase), 像是Default生命周期中,會有Validate、Compile、Test、Package、Integration test、Verify、Install、Deploy等階段,每個階段會有一些相繫結的plugin,Maven本身會有一些預設的plugin,你也 可以在設定檔中依需求宣告想使用的plugin,Maven會自動取得plugin。
專案物件模型(Project Object Model)
在Ant中使用build.xml來定義建構過程中的所有資訊,在Maven中與之對應的是pom.xml,不過pom.xml主要的目的是提供專案資訊,像是專案名稱、組織名稱、相依資訊等。
Maven提供你的是建構環境,或說是建構環境的框架(Framework)。
Maven的主要精神有:
- 慣例先於設定(Convention over configuration)
舉例來說,在Maven中認為,專案開發遵循應某些慣例,這些慣例像是固定目錄的名稱與架構、固定變數的名稱、固定的建構生命周期(Build lifecycle)等。Maven認為你不應花費時間在這些慣例的設定上,而要將精神放在更重要的工作上。
- 集中管理相依性(Dependency management)
正如在 簡介 Apache Ivy 中提到的,程式庫的相依性管理是個頭痛的問題,Maven使用集中式管理,提供集中式的貯藏室(Central repository),你要在設定檔案宣告相依的程式庫等資訊,Maven會為你下載相關的檔案。
plugin 為基礎的架構
Maven 提供固定的建構生命周期,像是Default、Clean、Site等。在每個生命周期中,又會分作一些階段(Phase), 像是Default生命周期中,會有Validate、Compile、Test、Package、Integration test、Verify、Install、Deploy等階段,每個階段會有一些相繫結的plugin,Maven本身會有一些預設的plugin,你也 可以在設定檔中依需求宣告想使用的plugin,Maven會自動取得plugin。
專案物件模型(Project Object Model)
在Ant中使用build.xml來定義建構過程中的所有資訊,在Maven中與之對應的是pom.xml,不過pom.xml主要的目的是提供專案資訊,像是專案名稱、組織名稱、相依資訊等。
星期日, 5月 20, 2012
[RoR] 如何連接資料庫
Rails內建的資料庫是採用SQLite,資料庫的設定檔在此目錄下:config/database.yml
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: sqlite3
database: db/production.sqlite3
pool: 5
timeout: 5000
建立一個Model
$>rails g model users account:string password:string
invoke active_record
create db/migrate/20120520124738_create_users.rb
create app/models/users.rb
invoke test_unit
create test/unit/users_test.rb
create test/fixtures/users.yml
使用migrate建立資料表
$> bundle exec rake db:migrate
== CreateUsers: migrating ====================================================
-- create_table(:users)
-> 0.0014s
== CreateUsers: migrated (0.0015s) ===========================================
新增一個descript欄位到users表格
rails g migration add_descript_to_users
invoke active_record
create db/migrate/20120520125033_add_descript_to_users.rb
執行migrate將剛新增的欄位加入
$>bundle exec rake db:migrate
== AddDescriptToUsers: migrating =============================================
== AddDescriptToUsers: migrated (0.0000s) ====================================
TIP:Rails會知道哪些已經執行過migration,所以只會執行一次
Rake指令集
rake db:create # to create database
rake db:migrate # to create tables based on your migration
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: sqlite3
database: db/production.sqlite3
pool: 5
timeout: 5000
建立一個Model
$>rails g model users account:string password:string
invoke active_record
create db/migrate/20120520124738_create_users.rb
create app/models/users.rb
invoke test_unit
create test/unit/users_test.rb
create test/fixtures/users.yml
使用migrate建立資料表
$> bundle exec rake db:migrate
== CreateUsers: migrating ====================================================
-- create_table(:users)
-> 0.0014s
== CreateUsers: migrated (0.0015s) ===========================================
新增一個descript欄位到users表格
rails g migration add_descript_to_users
invoke active_record
create db/migrate/20120520125033_add_descript_to_users.rb
執行migrate將剛新增的欄位加入
$>bundle exec rake db:migrate
== AddDescriptToUsers: migrating =============================================
== AddDescriptToUsers: migrated (0.0000s) ====================================
TIP:Rails會知道哪些已經執行過migration,所以只會執行一次
Rake指令集
rake db:create # to create database
rake db:migrate # to create tables based on your migration
星期六, 5月 19, 2012
[RoR] 第一個RoR應用程式: HelloWorld
來個所有程式的第一步吧,HelloWorld
測試環境:
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]
Rails 3.2.3
作業1:HelloWorld 起步
測試環境:
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]
Rails 3.2.3
作業1:HelloWorld 起步
星期三, 5月 09, 2012
[Javascript] Prototype 繼承
記錄一些關於Prototype的讀後感:)
Prototype的好處?
Javascript可使用Prototype來擴充類別的方法,
可以增加其效能,可將全部已instances的物件,
全部加上新的方法。
為什麼要用jQuery.fn?
jQuery中的jQuery.fn ($.fn) 其實就是等於 jQuery.prototype,
意即:
$.fn = $.prototype
所以寫外掛的時候就能輕鬆擴充jQuery的函式庫了。
為什麼不直接用$.prototype?
主要在於早期的jQuery.fn裡的每個內容並不使用prototype來實作,
而是採繞行整個物件的方式,
因為物件內的屬性跟方法可能很多,導致速度很慢,
後續版本改用prototype來提升效能,
為避免已存在的外掛程式被破壞。
所以才有會$.fn = $.prototype的別名存在。
Reference:
用javascript的prototype來玩繼承
Prototype的好處?
Javascript可使用Prototype來擴充類別的方法,
可以增加其效能,可將全部已instances的物件,
全部加上新的方法。
為什麼要用jQuery.fn?
jQuery中的jQuery.fn ($.fn) 其實就是等於 jQuery.prototype,
意即:
$.fn = $.prototype
所以寫外掛的時候就能輕鬆擴充jQuery的函式庫了。
為什麼不直接用$.prototype?
主要在於早期的jQuery.fn裡的每個內容並不使用prototype來實作,
而是採繞行整個物件的方式,
因為物件內的屬性跟方法可能很多,導致速度很慢,
後續版本改用prototype來提升效能,
為避免已存在的外掛程式被破壞。
所以才有會$.fn = $.prototype的別名存在。
Reference:
[jQuery API] Deferred Object
Deferred Object 最大的特色在於處理非同步的狀況時,所執行的 Callback function 可以指定多個,讓程式增加可讀性,舉一個簡單的例子來說明:
Deferred Object 的狀態可分成三種
1. Pending: Operation 處理中
2. Resolve: Operation 處理成功
3. Reject: Operation 處理失敗
Reference:
http://ithelp.ithome.com.tw/question/10090605
Deferred Object 的狀態可分成三種
1. Pending: Operation 處理中
2. Resolve: Operation 處理成功
3. Reject: Operation 處理失敗
Reference:
http://ithelp.ithome.com.tw/question/10090605
星期二, 5月 08, 2012
[jQuery API] 偵測元素大小被改變 Detect element resize
先前寫了一個FlickrLinkr小服務,在div添加tinyscrollbar的外掛,
但因為div裡面需要讀取圖檔,當未讀取完的時候,會導致tinyscrollbar的高度不正常(後面被讀取出來的圖檔被div擋住)
可以透過這個可以偵測元素resize的外掛來解決目前的問題:)
星期四, 5月 03, 2012
星期三, 5月 02, 2012
UML 又來了 lol
免費的UML圖表工具
http://astah.net/
活動圖:
http://microbuddy.blogspot.com/2009/03/uml_25.html
循序圖:
http://codingjames.blogspot.com/2009/08/uml-sequence-diagram.html
http://astah.net/
活動圖:
- 活動圖是表示流程的大方向面
- 不要落入描述活動的細節裡面,有細節可再細分第二張活動圖
- 活動圖應保持易讀性與單純化
http://microbuddy.blogspot.com/2009/03/uml_25.html
循序圖:
http://codingjames.blogspot.com/2009/08/uml-sequence-diagram.html
星期一, 4月 30, 2012
[IIS7] IIS7 執行 php專案以及phpMyAdmin
本篇記綠在IIS7上面執行php與phpMyAdmin的安裝心得。
最後可以正確在IIS7上架php的專案(可正常連接mysql),
但目前IIS7執行phpMyAdmin專案在載入mysql.dll模組會錯誤,尚無解Orz~
安裝環境:
Win7
前置工作:
Appserv安裝apache, php, phpmyadmin
如何在IIS7上執行php設定步驟
接著打開IIS管理工具
Step1:選擇 處理常式對應
Step2:接著點擊 新增模組對應
Step3:
在 要求路徑中 輸入 *.php
類型下拉 選擇 FastCgiModule
執行檔選擇 php5安裝目錄下的 php-cgi.exe
接著名稱取個 PHP for FCGI 即可
點確定,接著將剩餘的步驟都點確定即可完成設定。
Step4:
接著,請到php5安裝目錄下,把php.ini-recommended 改為 php.ini
Step5:
重新啟動www服務,即可運作PHP
最後可以正確在IIS7上架php的專案(可正常連接mysql),
但目前IIS7執行phpMyAdmin專案在載入mysql.dll模組會錯誤,尚無解Orz~
安裝環境:
Win7
前置工作:
Appserv安裝apache, php, phpmyadmin
如何在IIS7上執行php設定步驟
接著打開IIS管理工具
Step1:選擇 處理常式對應
Step2:接著點擊 新增模組對應
Step3:
在 要求路徑中 輸入 *.php
類型下拉 選擇 FastCgiModule
執行檔選擇 php5安裝目錄下的 php-cgi.exe
接著名稱取個 PHP for FCGI 即可
點確定,接著將剩餘的步驟都點確定即可完成設定。
Step4:
接著,請到php5安裝目錄下,把php.ini-recommended 改為 php.ini
Step5:
重新啟動www服務,即可運作PHP
星期日, 4月 29, 2012
[jQuery API] Html encode decode
利用jQuery簡單的完成html的編碼跟解碼
Reference:
JavaScript/jQuery HTML Encoding
function htmlEncode(value){
return $('<div/>').text(value).html();
}
function htmlDecode(value){
return $('<div/>').html(value).text();
}
Reference:
JavaScript/jQuery HTML Encoding
星期三, 4月 25, 2012
[Javascript] 偵測上傳檔案的MIME Type
在前端偵測上傳檔案的MIME Type,不過不實用,因為使用者可以改副檔名來欺騙你。
var mimeType = document.getElementById("filedata").files[0].type; // e.g. image/png
星期二, 4月 24, 2012
[jQuery Plugin] 處理過長文字外掛(Truncate long string in web)
常常遇到在web上要處理文字過長的問題!!
參考了jquery text truncate寫的範例程式:
參考了jquery text truncate寫的範例程式:
/**
* Visual string trimming Trimming with pixel of container
*
* change log:
* 2012/12/06 use text function to avoid special characters let system crash
* @author ken tsai 2012/04/06
*/
;
(function($) {
function htmlEncode(value) {
try{
return $('<div/>').text(value).html();
}catch(err){
$.console("htmlEncode:" + err);
return valeu;
}
}
function htmlDecode(value) {
try{
return $('<div/>').html(value).text();
}catch(err){
$.console("htmlDecode:" + err);
return valeu;
}
}
$.tirmWithPixel = {};
$.tirmWithPixelHTML = function(options){
var opts = $.extend($.fn.trimWithPixel.defaults, options);
var text = opts.text;
var pixelLimitWidth = opts.limitPixelLength;
var tailPattern = opts.tail;
var $container = $("<div/>");
var content = $container.append(
$.tirmWithPixel({
text:text,
limitPixelLength:pixelLimitWidth,
tail:tailPattern}
).clone()).html();
return content;
};
$.tirmWithPixel = function(options) {
var opts = $.extend($.fn.trimWithPixel.defaults, options);
var text = opts.text;
var pixelLimitWidth = opts.limitPixelLength;
var tailPattern = opts.tail;
var $container = $("<span></span>");
//if element don't add to body
//you can't get width from current element
$container.text(text).appendTo("body");
// $.console("original:" + $container.text());
$container.trimWithPixel({
limitPixelLength:pixelLimitWidth,
tail:tailPattern});
var $copyContainer = $container.clone();
//remove from body
$container.remove();
// $.console("trim:" + $container.text());
return $container;
};
$.fn.trimWithPixel = function(options) {
// combine options
var opts = $.extend($.fn.trimWithPixel.defaults, options);
var pixelLimitWidth = opts.limitPixelLength;
var tailPattern = opts.tail;
var callback = opts.callback;
this.each(function(i, obj) {
var $strContainer = $(this);// current element
var cText = $strContainer.text();// original text of container(without html encode)
var oText = cText;// record original text(with html encode)
//$.console("oText:" + oText);
var $vistualSpan = $("<span style='white-space:nowrap;'></span>");
$vistualSpan.text(cText);
//$.console("span context:" + $vistualSpan.html());
$strContainer.html($vistualSpan);
//$.console("$strContainer html:" + $strContainer.html());
var spanWidth = $vistualSpan.width();
//$.console("spanWidth:" + spanWidth);
// elem width is more than limit pixel length
if (spanWidth > pixelLimitWidth) {
var max = 0;
while ((spanWidth = $vistualSpan.width()) > pixelLimitWidth) {
cText = cText.substring(0, cText.length - 1);
$vistualSpan.text(cText);
cText = $vistualSpan.text();
//debug
/*
max++;
if(max > 100){
$.console("[trimWithPixel] Exceed max limitation..");
return;
}*/
}
cText = cText + tailPattern;
if (callback && typeof(callback) === "function") {
callback({oText:oText,cText:cText});
}else{
$strContainer.attr("title", oText);
$strContainer.text(cText);// using text fun to unescape html
}
} else {
// not trimming
//$.console("not trimming");
if (callback && typeof(callback) === "function") {
callback({oText:oText,cText:cText});
}else{
$strContainer.attr("title",oText);
$strContainer.text(oText);// using text fun to unescape html tag
}
}
});
};
// default options
$.fn.trimWithPixel.defaults = {
limitPixelLength : 125,
tail : "..."
};
})(jQuery);
訂閱:
意見 (Atom)



