我會找到的
Reset life, only this time.
2012年4月26日 星期四
One Code Project
2012年2月9日 星期四
App Idea:中文習字帖
1. Chinese Flash - Study & Learn Mandarin Vocabulary
http://itunes.apple.com/us/app/id486531735?mt=8
2. Pleco Chinese Dictionary
http://itunes.apple.com/us/app/pleco-chinese-dictionary/id341922306?mt=8
3. Learning to Write Chinese Characters on the iPad
http://www.sinosplice.com/life/archives/2011/06/30/learning-to-write-chinese-characters-on-the-ipad
4. eStroke
http://fast.eon.com.hk:1818/estroke/
iOS 開發資源
1. Tesseract OCR
http://iphone.olipion.com/cross-compilation/tesseract-ocr
2. Compiling tesseract v3 for iPhone
http://robertcarlsen.net/tag/tesseract
3. 中文筆順學習軟體製作
http://w2.hwc.edu.tw/ifg/dgn/98-7-3index.htm
4. 怎么样将汉字画出来
http://www.qqgb.com/Program/VC/VCJC/Program_237704.html
5. 筆順學習網
http://stroke-order.learningweb.moe.edu.tw/home.do
6. 中文字的筆順
http://chinesedigger.blogspot.com/2008/06/writing-sequences.html
2012年2月8日 星期三
iOS App 上架需知
When you create or update your apps in iTunes Connect, you must upload screenshots that are high-resolution. We require your screenshots as high-resolution images so that your app is optimized for the Retina display.
The requirements for high-resolution images are 960 x 640, 960 x 600, 640 x 960, or 640 x 920 pixels. Images must be at least 72 dpi, in the RGB color space, and the file must be .jpeg, .jpg, .tif, .tiff, or .png. You can update your screenshot files at any time in iTunes Connect.
New Notification for Binaries Exceeding Cellular Network Download Size Limit
Admin and Technical users will now be notified if your resulting binary size for the App Store exceeds the cellular network download size limit of 20MB. Exceeding the limit requires your app to be downloaded over Wi-Fi. This information can help you determine if you want to resubmit your binary in order to reduce the size of your app.
2012年2月1日 星期三
Exchange Webservice (EWS):The request failed with HTTP status 405: Method Not Allowed
FindItemResponseType findItemResponse = esb.FindItem(findItemRequest);
修正的地方為
ExchangeServiceBinding esb = new ExchangeServiceBinding();
esb.Credentials = new NetworkCredential(@"id", "pw", "domain");
esb.Url = @"https://test.com.tw/EWS/Services.wsdl";
改成
esb.Url = @"https://test.com.tw/EWS/Exchange.asmx";
2012年1月9日 星期一
[super dealloc]; 使用注意事項
- (void)dealloc { [super dealloc]; }
通常我們會將需要釋放的資源也寫在裡面,進行資源的釋放,
特別要注意的是 [super dealloc]; 要最後才呼叫。
錯誤(會造成釋放失敗系統當掉)
- (void)dealloc { [super dealloc]; [myobj release]; [myobj2 release]; }
正確寫法應該為
- (void)dealloc { [myobj release]; [myobj2 release]; [super dealloc]; }
2011年11月28日 星期一
NSDate Top usage
// Your dates: NSDate * today = [NSDate date]; NSDate * yesterday = [NSDate dateWithTimeIntervalSinceNow:-86400]; //86400 is the seconds in a day NSDate * refDate; // your reference date // 10 first characters of description is the calendar date: NSString * todayString = [[today description] substringToIndex:10]; NSString * yesterdayString = [[yesterday description] substringToIndex:10]; NSString * refDateString = [[refDate description] substringToIndex:10]; if ([refDateString isEqualToString:todayString]) { cell.title.text = @"Today"; } else if ([refDateString isEqualToString:yesterdayString]) { cell.title.text = @"Yesterday"; } else { cell.title.text = refDateString; }
2011年10月26日 星期三
SAP: Destination configuration already initialized - Part II
1. 避免 Destination configuration already initialized 錯誤
2. 展示如何把 IRfcTable 當作呼叫 RFC 的輸入參數
歷經
public IRfcTable TEST_B0001(string VBELN, string POSNR, string CHARG, string LFIMG) { IRfcTable IRetTable = null; HLBackendConfig hlConfig = new HLBackendConfig(); bool bRegistered = false; try { RfcDestinationManager.RegisterDestinationConfiguration(hlConfig); RfcDestination rfcDest = RfcDestinationManager.GetDestination("INIT_SAP"); RfcRepository rfcRepo = rfcDest.Repository; IRfcFunction IReader = rfcRepo.CreateFunction("TEST_B0001"); bRegistered = true; IRfcTable Itab = IReader.GetTable("IT_INPUT"); Itab.Append(); Itab[0].SetValue("VBELN", VBELN); Itab[0].SetValue("POSNR", POSNR); Itab[0].SetValue("CHARG", CHARG); Itab[0].SetValue("LFIMG", LFIMG); IReader.SetValue("IT_INPUT", Itab); IReader.Invoke(rfcDest); IRetTable = IReader.GetTable("ET_RETURN"); } catch (Exception ex) { throw ex; } finally { if (bRegistered) RfcDestinationManager.UnregisterDestinationConfiguration(hlConfig); } return IRetTable; }
2011年10月18日 星期二
SAP 與 .NET 整合心得
1. .NET 與 SAP 函數溝通透過 DataTable <--> IRfcTable 兩者間的互相轉換最方便
2. .NET Web Service 與 SAP 函數溝通 DataTable <--> DataSet <--> IRfcTable 三者間的互轉最方便
3. 設計溝通介面函數時使用以上兩個原則,實作系統的速度很快而且具有快速擴充的彈性
4. SAP Connector 本身的問題很多,每次呼叫 RFC 時,Init / Uninit 要寫在同一段處理函數中
5. SAP Connector 也是透過 .NET 撰寫而成,第一次實機部署安裝之後,要記得重新啟動作業系統
7. 由於第六點原因,RFC 呼叫非常耗資源及時間,可以的話盡量將資料另外儲存在自己系統的資料庫中,資料庫沒資料才考慮從 RFC 呼叫取得
8. 多多利用 SAP Logon 等 GUI 工具,文件上寫的往往都不是真的,看 code 才是王道
9. 一有功能要馬上讓使用者試用,並且立即強迫畫押簽收,以免日後發生糾紛時沒有防禦的系統
2011年10月11日 星期二
.NET CF ListView 不支援 OnClick
所以若要取得使用者點選的 ListViewItem 得用 SelectedIndexChanged 來替代,
範例如下:
private void lv_SelectedIndexChanged(object sender, EventArgs e) { if (lv.SelectedIndices.Count > 0) { ListViewItem lvi = lv.Items[lv.SelectedIndices[0]]; MessageBox.Show(lvi.SubItems[0].Text); } }
2011年9月30日 星期五
SQL Server 2008 R2 Setup has encountered an error.
只有安裝 MUI 之後,SQL Server 就可以順利安裝完成了。
基本上最重要的原則就是作業系統使用的語系,
要和SQL Server 使用的語系相同。
2011年9月25日 星期日
2011年9月24日 星期六
VS2008 Package Load Failure: Visual Web Developer HTML Source Editor Package
Package Load Failure:
Package 'Visual Web Developer HTML Source Editor Package' has failed to load XXXXXXXXXXX
然後在 IDE 中的 Web Application 中就原本存在的 Design/Split/Source 頁籤就消失了:
開始網路有提及的的方法幾乎都嘗試:
1. 全部移除掉 VS 2008,再重新安裝 VS 2008 + SP1
2. 在 cmd 下進行 C:\Program Files\Microsoft Visual Studio 9.0\VC>devenv /resetskippkgs
3. 重新修復 VS2008安裝光碟\WCU\WebDesignerCore.exe
4. 控制台中重新安裝 & 修復 Microsoft Visual Studio Web Authoring Component
結果全部失敗
最後發現筆者的 VS2008 是英文語系,但是 MS 卻又很雞婆加入了一些參數,
應該是語系不同導致載入時找不到對應的語系資料夾資源所造成。
解法方法如下:
1. 啟動 VS2008
2. 選單 -> Tools -> Options -> 頁籤 Environment -> International Settings -> Language 改為 English
3. 重新啟動 VS2008,問題解決(若不行的話 開一個新的 Web Application 試試看)!
這問題兩年前就遇過一直卡著,今天終於發狠浪費一天時間來解決。
Visual Studio 2008 SP1 - After installation: "Package Load Failure
2011年9月2日 星期五
Hints for publish IPA (iOS app)
在建立 IPA 檔案準備要發佈至 App Store 或透過 In-House 方式時,
有時候會因位憑證簽署太多組導致混淆,
我們可以透過檢查以下兩個部份來作最後的檢查:
In build detail view
1. 尋找字串 embedded.mobileprovision,檢查是否存在於 builded package中。
2. 尋找字串 CodeSign,檢查 "iPhone Distribution: Your CodeSign Name." 是否正確。
如此,就能確保 IPA 檔案是正確的。
2011年9月1日 星期四
Compile error CS0006, CS0009 in VS 2008
error CS0006: C:\WINDOWS\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll
連 [2.0.0.0__b03f5f7f11d50a3a] 資料夾都消失了,透過以下方法排除,
1. 進入 console window
2. mkdir C:\WINDOWS\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a
3. cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
4. copy *.dll C:\WINDOWS\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3
5. 重新啟動 VS 2008 後就正常
參考資料來源
2011年8月26日 星期五
Remove UIViewController from UINavigationController
NSMutableArray *allControllers = [[NSMutableArray alloc] initWithArray:navPick.viewControllers];
for (id object in allControllers) {
// if ([object isKindOfClass:[LoginController class]]) // 此行註解掉,會將容器內所有VC移除
[allControllers removeObject:object];
}
navPick.viewControllers = allControllers;
2011年8月24日 星期三
Loaded the "NibFileName" nib but didn't get a UITableView
動態載入時 xcode 會報錯,原因是繼承的形態跟 nib 使用的類別不同造成,
原始的宣告如下:
@interface ObjIDPickViewController : UITableViewController
{
}
要把它改成
@interface ObjIDPickViewController : UIViewController
{
}
2011年8月19日 星期五
C# get a string from C++ DLL
TCHAR g_awcMessage[] = L"Hello中文";
char g_aszMessage[] = "Hello中文";
extern "C" __declspec(dllexport) TCHAR* __stdcall GetHelloL()
{
return g_awcMessage;
}
extern "C" __declspec(dllexport) CHAR* __stdcall GetHello()
{
return g_aszMessage;
}
extern "C" __declspec(dllexport) int __stdcall GetInt()
{
return 100;
}
C# P/Invoke:
[DllImport("gpDll.dll")]
public static extern IntPtr GetHello();
[DllImport("gpDll.dll")]
public static extern IntPtr GetHelloL();
[DllImport("gpDll.dll")]
public static extern int GetInt();
private void button1_Click(object sender, EventArgs e)
{
// Not support in CF
//Marshal.PtrToStringAnsi
//Marshal.PtrToStringAuto
// Multibytes 會變成亂碼
string str = Marshal.PtrToStringUni(GetHello());
// Wide Character 顯示正常
string strL = Marshal.PtrToStringUni(GetHelloL());
int n = GetInt();
}
WinCE/Mobile Control Panel Item List
VC++
BOOL ShowControlPanelApplet(int id)
{
TCHAR szParams[32];
SHELLEXECUTEINFO execinfo = {0};
memset(&execinfo, 0, sizeof(execinfo));
execinfo.cbSize=sizeof(execinfo);
execinfo.lpFile=TEXT(“\\windows\\ctlpnl.exe”);
execinfo.lpVerb=TEXT(“open”);
// Id value determines which control applet will be launched
// For e.g. 23 for bluetooth applet
wsprintf(szParams, L”cplmain.cpl,%d”, id);
execinfo.lpParameters = szParams;
BOOL bRet=ShellExecuteEx(&execinfo);
return bRet;
}
VC#
Process.Start(@"\windows\ctlpnl.exe", "cplmain.cpl,19");
Windows Mobile
1 Password
2 Owner Information
3 Power
4 Memory
5 About
6 Brightness
7 Screen
8 Input
9 Sounds & Notifications
10 Remove Programs
11 Menus
12 Buttons
13 Today
14
15 Beam
16 Clocks & Alarms
17 Configure Network Adapters
18 Regional Settings
19 Connections
20
21
22 Manage Certificates
23 Bluetooth
24 Error Reporting
25 GPS Settings
26
27 USB to PC
Windows CE
1 PC Connection - 35#”ctlpnl.exe” \Windows\cplmain.cpl,0
2 Dialing - 35#”ctlpnl.exe” \Windows\cplmain.cpl,1
3 Keyboard - 35#”ctlpnl.exe” \Windows\cplmain.cpl,2
4 Password - 35#”ctlpnl.exe” \Windows\cplmain.cpl,3
5 Owner - 35#”ctlpnl.exe” \Windows\cplmain.cpl,4
6 Power - 35#”ctlpnl.exe” \Windows\cplmain.cpl,5
7 System - 35#”ctlpnl.exe” \Windows\cplmain.cpl,6
8 Display - 35#”ctlpnl.exe” \Windows\cplmain.cpl,7
9 Mouse - 35#”ctlpnl.exe” \Windows\cplmain.cpl,8
10 Stylus - 35#”ctlpnl.exe” \Windows\cplmain.cpl,9
11 Volume & sounds - 35#”ctlpnl.exe” \Windows\cplmain.cpl,10
12 Input Panel - 35#”ctlpnl.exe” \Windows\cplmain.cpl,11
13 Remove Programs - 35#”ctlpnl.exe” \Windows\cplmain.cpl,12
14 Date/Time - 35#”ctlpnl.exe” \Windows\cplmain.cpl,13
15 Certificates - 35#”ctlpnl.exe” \Windows\cplmain.cpl,14
16 Accessibility - 35#”ctlpnl.exe” \Windows\cplmain.cpl,15
SendKeys for .NETCF
So I have to implement it thru APIs,
here is the solutions: SendInput, keybd_event, PostKeybdMessage and SendMessage
[DllImport("coredll.dll", SetLastError = true)]
//[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
[DllImport("coredll", SetLastError = true)]
//[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string _ClassName, string _WindowName);
[DllImport("coredll", SetLastError = true)]
//[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
public static void SendIt()
{
IntPtr ip = FindWindow("notepad", null);
SetForegroundWindow(ip);
const int KEYEVENTF_KEYUP = 0x2;
const int KEYEVENTF_KEYDOWN = 0x0;
byte VK_TAB = 0x0D;
keybd_event(VK_TAB, 0, KEYEVENTF_KEYDOWN, 0);
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);
}
Symbolic constant name | Value (hexadecimal) | Keyboard (or mouse) equivalent |
---|---|---|
VK_LBUTTON | 01 | Left mouse button |
VK_RBUTTON | 02 | Right mouse button |
VK_CANCEL | 03 | Control-break processing |
VK_MBUTTON | 04 | Middle mouse button (three-button mouse) |
VK_BACK | 08 | BACKSPACE key |
VK_TAB | 09 | TAB key |
VK_CLEAR | 0C | CLEAR key |
VK_RETURN | 0D | ENTER key |
VK_SHIFT | 10 | SHIFT key |
VK_CONTROL | 11 | CTRL key |
VK_MENU | 12 | ALT key |
VK_PAUSE | 13 | PAUSE key |
VK_CAPITAL | 14 | CAPS LOCK key |
VK_ESCAPE | 1B | ESC key |
VK_SPACE | 20 | SPACEBAR |
VK_PRIOR | 21 | PAGE UP key |
VK_NEXT | 22 | PAGE DOWN key |
VK_END | 23 | END key |
VK_HOME | 24 | HOME key |
VK_LEFT | 25 | LEFT ARROW key |
VK_UP | 26 | UP ARROW key |
VK_RIGHT | 27 | RIGHT ARROW key |
VK_DOWN | 28 | DOWN ARROW key |
VK_SELECT | 29 | SELECT key |
VK_PRINT | 2A | PRINT key |
VK_EXECUTE | 2B | EXECUTE key |
VK_SNAPSHOT | 2C | PRINT SCREEN key |
VK_INSERT | 2D | INS key |
VK_DELETE | 2E | DEL key |
VK_HELP | 2F | HELP key |
30 | 0 key | |
31 | 1 key | |
32 | 2 key | |
33 | 3 key | |
34 | 4 key | |
35 | 5 key | |
36 | 6 key | |
37 | 7 key | |
38 | 8 key | |
39 | 9 key | |
41 | A key | |
42 | B key | |
43 | C key | |
44 | D key | |
45 | E key | |
46 | F key | |
47 | G key | |
48 | H key | |
49 | I key | |
4A | J key | |
4B | K key | |
4C | L key | |
4D | M key | |
4E | N key | |
4F | O key | |
50 | P key | |
51 | Q key | |
52 | R key | |
53 | S key | |
54 | T key | |
55 | U key | |
56 | V key | |
57 | W key | |
58 | X key | |
59 | Y key | |
5A | Z key | |
VK_NUMPAD0 | 60 | Numeric keypad 0 key |
VK_NUMPAD1 | 61 | Numeric keypad 1 key |
VK_NUMPAD2 | 62 | Numeric keypad 2 key |
VK_NUMPAD3 | 63 | Numeric keypad 3 key |
VK_NUMPAD4 | 64 | Numeric keypad 4 key |
VK_NUMPAD5 | 65 | Numeric keypad 5 key |
VK_NUMPAD6 | 66 | Numeric keypad 6 key |
VK_NUMPAD7 | 67 | Numeric keypad 7 key |
VK_NUMPAD8 | 68 | Numeric keypad 8 key |
VK_NUMPAD9 | 69 | Numeric keypad 9 key |
VK_SEPARATOR | 6C | Separator key |
VK_SUBTRACT | 6D | Subtract key |
VK_DECIMAL | 6E | Decimal key |
VK_DIVIDE | 6F | Divide key |
VK_F1 | 70 | F1 key |
VK_F2 | 71 | F2 key |
VK_F3 | 72 | F3 key |
VK_F4 | 73 | F4 key |
VK_F5 | 74 | F5 key |
VK_F6 | 75 | F6 key |
VK_F7 | 76 | F7 key |
VK_F8 | 77 | F8 key |
VK_F9 | 78 | F9 key |
VK_F10 | 79 | F10 key |
VK_F11 | 7A | F11 key |
VK_F12 | 7B | F12 key |
VK_F13 | 7C | F13 key |
VK_F14 | 7D | F14 key |
VK_F15 | 7E | F15 key |
VK_F16 | 7F | F16 key |
VK_F17 | 80H | F17 key |
VK_F18 | 81H | F18 key |
VK_F19 | 82H | F19 key |
VK_F20 | 83H | F20 key |
VK_F21 | 84H | F21 key |
VK_F22 | 85H | F22 key |
VK_F23 | 86H | F23 key |
VK_F24 | 87H | F24 key |
VK_NUMLOCK | 90 | NUM LOCK key |
VK_SCROLL | 91 | SCROLL LOCK key |
VK_LSHIFT | A0 | Left SHIFT key |
VK_RSHIFT | A1 | Right SHIFT key |
VK_LCONTROL | A2 | Left CONTROL key |
VK_RCONTROL | A3 | Right CONTROL key |
VK_LMENU | A4 | Left MENU key |
VK_RMENU | A5 | Right MENU key |
VK_PLAY | FA | Play key |
VK_ZOOM | FB | Zoom key |
Emulate mouse action in .NETCF
SendMessage API:
//Find topmost window of another application
IntPtr parentWnd = WIN32.Window.FindWindow(null, "Form2");
//Find the button
IntPtr hButton = WIN32.Window.FindWindowEx(parentWnd, IntPtr.Zero, null, "Target");
//Click the target button
WIN32.Window.SendMessage(hButton, Window.WM.WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero);
WIN32.Window.SendMessage(hButton, Window.WM.WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero);
mouse_event API:
[DllImport("coredll.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
public enum MouseEventFlags
{
LEFTDOWN = 0x00000002,
LEFTUP = 0x00000004,
MIDDLEDOWN = 0x00000020,
MIDDLEUP = 0x00000040,
MOVE = 0x00000001,
ABSOLUTE = 0x00008000,
RIGHTDOWN = 0x00000008,
RIGHTUP = 0x00000010
}
void ClickIt()
{
SetCursorPos(400, 10);
mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
}