2018-09-13

要求已經中止: 無法建立 SSL/TLS 的安全通道。

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12|SecurityProtocolType.Ssl3| SecurityProtocolType.Tls;

2015-01-14

Eclipse佈景主題:修改Debug執行指令指標顏色

厭倦 Eclipse 預設的佈景主題嗎?可以到  Eclipse Color Themes 這個網站下載喜歡的主題,但常常在 Debug 時會發生原本的執行指令的highlight顏色與Theme不合,就像下圖:


可以經由window>Preferences>Editors>Text Editors>Annotations>Debug Current Instruction Pointer修改 Color:


修改後:
是不是清楚點了呢~~

2013-02-20

Java UI Application 全形中文

現在應該很少人寫 Java UI Application, 最近遇到了一個困擾我很久的問題終於解決了,每次一啟動 Java 程式輸入法就自動變成全形中文注音,原來是Windows7的預設輸入法沒有設成美式鍵盤如果你也有這個問題切記要選美式不要選拿鐵(誤)!!



2016-01-21 補充:此方式只適用於新注音。

2011-03-03

化腐朽為神奇~~~原來我的婚禮會場可以變這樣

辦完婚禮了~~除了老婆的美讓我驚豔之外,還有Ring finger化腐朽為神奇的布置讓我嘆為觀止。來參加我的婚禮的親朋好友們,睜大你目珠往下看吧~~

入口處
before

after

小弟獻唱的舞台
before

after
收禮桌
before

after 

after

after

超.......感謝德羅斯這麼用心~~3Q






2010-11-05

SWT 避開與UI Thread打結的方式

非 UI Thread中若觸發 修改UI的動作會產生 
org.eclipse.swt.SWTException: Invalid thread access 的例外,避開的方式為:


Composite.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
if (!Composite.isDisposed()) {
/*加入修改Composite 內UI的動作*/
}
}
});

2010-10-25

ASP.NET GridView

做出可以指定欄位名稱欄位排序GridView:
//取得資料
private void loadData(string sortString){
DataTable dt = MyData.getAllDatas();
if (sortString != "")
        {
            dt.DefaultView.Sort = sortString;
        }
        GridView1.DataSource = dt;
        GridView1.DataBind();
}
//設定欄位名稱
private void generateTitle(DataTable dt){
string[] title = new string[] { "欄位A", "欄位B", "欄位C", "欄位D", "欄位E"};
        for (int i = 0; i < title.Length; i++)
        {
            dt.Columns[i].ColumnName = title[i];
        }
}
//GridView排序事件
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string d = e.SortExpression;//需要排序的欄位名稱
        string sort = (string)ViewState[d];
        if (sort == null || sort == "" || sort == " ASC")
        {
            ViewState[d] = " DESC";//[排序方式]
        }
        else
        {
            ViewState[d] = " ASC";//[排序方式]
        }
        loadSyncMark(d + (string)ViewState[d]);//"[欄位名稱] [排序方式]"
    }
//網頁載入的用法
 protected void Page_Load(object sender, EventArgs e)
 {
   loadData("");
 }

2010-10-18

執行外部程式小問題

有時候用Java執行外部程式或是將程式加入windows排程時,有些程式無法正常執行,雖然可以在工作管理員看到該處理程序也配置了記憶體,但CPU都沒有動作。

解決方式:
寫一個BAT檔,先將路徑移到該程式位置在執行。例如:想要執行 "C:\Hello\Hello.exe",就寫一個Hello.bat,內容為

cd C:\Hello
Hello.exe

 最後只需要執行Hello.bat, 這樣就不會因為該程式需要用到系統的環境變數而讓程式懸在那邊。

2010-10-02

難道是老人家專用!!!

不管昨天多麼晚睡,依然實現跟老婆約定的加班前先去運動,所以一大早起來就去信義運動中心報到,因為隻身一人實在太無趣便找了才剛收不久的二妹跟小弟一起晨泳,三人上到四樓看到入口擺脫鞋處,滿滿的拖鞋整齊的擺滿鞋櫃,心想 : 今天是有什麼活動嗎?竟然有這麼多人一大早這麼健康的來游泳。換完裝到了游泳池邊,我們看到了一個非常令人驚訝的畫面!!在泳池裡大約有50位老人家在游泳,SPA區大約有10位,冷熱區大約10位,而烤箱已經塞爆了,就這樣三個人帶著驚訝的表情做完暖身與淋浴後,還是你看我我看你的遲遲下不了水,最後我帶頭先衝,找到了一個只有5位老人家的水道跟老人們一起慢慢的游。其實跟老人家游泳還蠻困難的,因為一直以來都是被別人追,這次換我追老人,不是平常自己習慣的速度,所以動作不是很協調,但稍微練習一下就可以掌握。可惜的是,這次游泳只游了大約一小時候我們就撤退了,因為我因為怕踢到老人家所以一直游捷式,搞的手腳一下就酸了,通常是會去SAPSpa疏通一下再用烤箱烤一烤蒸氣蒸一蒸來回復HP值後再游他個兩百回,但今天實在是選到了老人家聚泳的時間,所以就打消念頭黯然的去加班了~~

2010-08-31

無法開始監視 global.asax 的變更

把vista的UAC關閉後再開啟
VS2008建置網站時出現了" 無法開始監視 global.asax 的變更" 的錯誤。

解決方法如下:
1.關閉UAC。
2.重新開機 。
 就這樣我花了一個上午的時間解決這兩個問題。

UAC好像不是一個開關自如的東西,所以關掉後就不要再開了。

2010-07-02

Word 與 奇妙的 XML

這次做專案需要生成一些word文件,想說以前有經驗用word另存成XML格式再用取代字的方式做。但這次的文件較之前複雜許多,要取代的欄位特別多並且有圖片需求。
要做的就三個部份
1. 取代文字的方式
2. 圖片要轉成Base64String
    3. 文件本身要加入須被取代的部分

前兩項很好解決,我這次在第三項碰了一鼻子灰~~
因為要取代的文字與圖片實在太多,所以就律訂要取代的文字是用"[數字]"來分別,在測試時只用少許的資料做測試所以都很成功,但一到完整的文件就發現怎麼會找不到[30]之類的錯誤,查看原始XML文件發現雖然在word裡看到是[30]但是在XML文件中"["跟"30"還有"]"中間竟然有其他,所以干擾了取代文字程式,欄位實在太多且夾雜的並非全相同(心想 :要我用手動去校正鬍子都長長了~~),再進一步分析為何到[30]才會發生這種錯誤呢??!!回想一下當初做文件因為中間不小心跳號所以又重編了,造成"[數字]"並非一次完成,所以word就會再增加來指定這次輸入的文字相關屬性造成中間夾雜的(心想 :要我重新一個一個重寫嗎??),但其實有個方法可以很快的解決這問題,就是全部複製然後貼上,這樣那些夾雜的就全部消失了(爺~~~~~萬歲!!!)。
    再來就是要取代圖的部分,原來word中加入的圖都會被轉成 Base64String ,而且不同圖框若加入的是相同圖片word的XML只會有一份資料,而該圖框會指向相同資料部分。所以在做取代文件的時候要先給每個圖框不同的資料來源,這樣轉成XML才可以區分取代的位置。

2010-04-12

uDig的Splash設定

.product的設定中選取Splash頁籤,需要設定兩個地方;
1. Location:
      指定你的splash.bmp是在哪一個Plug-in,可以點選Browse...按鍵選取,若沒有指定發佈的RCP程式無法知道你的splash.bmp的位置,就無法顯示。

2.Customization:
    可以選是否要加入progress bar與progress message,並指定其位置是在splash.bmp的哪裡,Text Color是指定message文字的顏色。

2010-04-08

uDig 發佈與加入jfreechart

為了要發佈uDig套件花了不少時間在比對eclipse 3.5跟uDig1.2RC之間的plugin版本,發佈前還套用新的SWT版本並且整合jfreechart來用。總共花了快要4天的時間才有點搞懂Eclipse RCP中的feature與plug-in的分別,也因為這樣這一次的問題才有解~~~

在uDig1.2RC發現有內附jFreeChart的套件,但開發時遇到了一個問題就是uDig本身是Eclipse RCP開發而成的,使用的UI套件並不是java的awt/swing而是SWT,jFreeChart的繪製工具一般而言都是畫在Swing GUI裡,所以我們使用的方法就是下在最新的jfreechart1.0.13版本,接著置換掉
\udig-sdk\plugins\net.refractions.udig.libs_1.2.0\lib 裡關於jfreechart的檔案、
 \udig-sdk\plugins\net.refractions.udig.libs.source_1.2.0\src\net.refractions.udig.libs_1.2.0\lib 裡jfreechart的原始碼,接著修改C:\java\target\udig-sdk\plugins\net.refractions.udig.libs_1.2.0\META-INF\MANIFEST.MF檔案,的Bundle-ClassPath:將jfreechart相關的jar都加入,這樣就可以開心的使用新版的JFreeChart在SWT套件裡。

發佈的時候在發佈時會有出現找不到plug-in的錯誤,但是怎麼用都不對,最後再看了eclipse\plugins與udig-sdk\plugins裡面的jar差異,終於在每換一個檔案重開一次eclipse以讓target可以完整的更新後發佈成功,以下列出換掉的檔案與資料夾
資料夾:
org.eclipse.rcp_3.5.1.R35x_v20090811-9SA0FxVFqE70OL1ARMrfcO6e7BA6
org.eclipse.rcp.source_3.5.1.R35x_v20090811-9SA0FxVFqE70OL1ARMrfcO6e7BA6
檔案:
org.eclipse.swt.win32.win32.x86.source_3.5.1.v3555a.jar
org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar
org.eclipse.swt_3.5.1.v3555a.jar
org.eclipse.core.expressions.source_3.4.100.v20090429-1800.jar
org.eclipse.core.expressions_3.4.100.v20090429-1800.jar
org.eclipse.osgi.source_3.5.1.R35x_v20090827.jar
org.eclipse.osgi_3.5.1.R35x_v20090827.jar
org.eclipse.jface_3.5.1.M20090826-0800.jar
org.eclipse.ui_3.5.1.M20090902-1000.jar
org.eclipse.ui.workbench_3.5.1.M20090826-0800a.jar
org.eclipse.rcp.source_3.5.0.v200909170800.jar
org.eclipse.rcp_3.5.0.v200909170800.jar
org.eclipse.equinox.app_1.2.0.v20090520-1800.jar
org.eclipse.equinox.app.source_1.2.0.v20090520-1800.jar
org.eclipse.equinox.preferences.source_3.2.300.v20090520-1800.jar
org.eclipse.equinox.preferences_3.2.300.v20090520-1800.jar
以上的檔案都是udig-sdk提供的,因為他跟eclipse的plugin相沖,所以用eclipse的pluring的版本,這樣就可以發佈成功了。

2009-09-10

星巴克招待

2009/9/12上午11點開始,凡點購任一杯飲料,另一杯飲料由星巴克招待。

2009-08-24

Java 四捨五入

public static void main(String[] args) {
double d = 123.12345678d;
double f = 123.12356789d;
System.out.println(BigDecimal.valueOf(d).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue()+" "+BigDecimal.valueOf(f).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue());
}

結果為
123.123 123.124

2009-07-16

uDig連接Oracle需要SID

uDig連接Oracle時要填入Host,Username,Password,Database,Schema.
其中Database是Oracle SID,SID可以用以下的SQL COMMAND來取得

select instance_name from v$instance;

2009-06-29

uDig的map動作監聽

net.refractions.udig.project.mapInterceptor 這個Extension 可以讓你知道 layer Added, layerRemoved, mapClosing, mapCreation and mapOpening。
layer Added 和 layerRemoved 需要實作 LayerInterceptor ,
mapClosing, mapCreation and mapOpening 需要實作 MapInterceptor

動作都寫在plugin.xml中

2009-06-23

uDig View ID

View ID:
BOOKMARKS = "org.tcat.citd.sim.udig.bookmarks.internal.ui.BookmarksView"
PROJECTS = "net.refractions.udig.project.ui.projectExplorer";
LAYERS = "net.refractions.udig.project.ui.layerManager";

2009-06-19

使用過的Dependencies and Extension

  1. Distance Tool (will make contrubutions to the UI)
    Dependencies: net.refractions.udig.project.ui
    Extension: net.refractions.udig.project.ui.tool

  2. CustomApp (will not make contrubutions to the UI)
    Dependencies: net.refractions.udig.ui
    Extension: org.eclipse.core.runtime.applications, org.eclipse.ui.perspectives, org.eclipse.ui.perspectiveExtensions

uDig顯示全圖 範例

import net.refractions.udig.project.ui.ApplicationGIS;
import net.refractions.udig.project.ui.tool.AbstractActionTool;
import org.eclipse.core.runtime.NullProgressMonitor;
import com.vividsolutions.jts.geom.Envelope;
/**
*
* @author Freepisces
*
*/
public class ShowAllMap extends AbstractActionTool {

public ShowAllMap() {
// TODO Auto-generated constructor stub
}

@Override
public void run() {
Envelope newbbox = ApplicationGIS.getActiveMap().getMapLayers().get(0).getBounds(new NullProgressMonitor(), getContext().getCRS());/*get layer's evenlope*/
NavCommand showallmapcommand = getContext().getNavigationFactory().createSetViewportBBoxCommand(newbbox); /*create a Navigation Command*/
getContext().sendASyncCommand(showallmapcommand); /*send command to refresh viewport*/
}

@Override
public void dispose() {
// TODO Auto-generated method stub

}

}