2022年1月3日 星期一

leetcode no.206 Reverse Linked List 心得分享

 其實我一開始就看了討論區的解答,但還是看不出來為什麼可以這樣解,印出所有資料後豁然開朗,所以紀錄一下~

https://leetcode.com/problems/reverse-linked-list/

2020年11月13日 星期五

vernemq failed to start within 15 seconds

 如果遇到disk full導致vernemq 開不起來

可能會看到以下error
Pid not found
vernemq failed to start within 15 seconds
vernemq.service: Failed with result 'resources’.

試過怎麼啟動都無效
可能有檔案被綁住
刪除重安裝就可以了
記得etc/vernemq內的東西都要備份

解除安裝:
sudo apt-get --purge remove vernemq -y

Purging configuration files for vernemq (1576070137:1.10.1) ...
dpkg: warning: while removing vernemq, directory '/etc/vernemq' not empty so not removed
dpkg: warning: while removing vernemq, directory '/var/lib/vernemq' not empty so not removed
dpkg: warning: while removing vernemq, directory '/var/log/vernemq' not empty so not removed
root@ip-172-31-25-138:/var/log# rm /etc/vernemq
rm: cannot remove '/etc/vernemq': Is a directory
# rm /etc/vernemq -R
# rm /var/lib/vernemq -R
# rm /var/log/vernemq -R
一定要清乾淨~~~!!!!

安裝:
# sudo dpkg -i vernemq-1.10.1.xenial.x86_64.deb

移動設定檔:
# cp vernemq.conf /etc/vernemq/vernemq.conf
# cp vmq.acl /etc/vernemq/vmq.acl
# cp vmq.passwd /etc/vernemq/vmq.passwd

# vernemq start
這樣就正常運作了
還是得小心disk full的問題

2018年3月15日 星期四

[BCB] Borland C++ Builder 所有元件失蹤之謎

最近開BCB出現這種狀況,所有的component都消失了,大吃一驚,好像有重灌過但沒改善,那時就放著了,今天突然想解決一下這個問題
因為comport serial通訊第一個想到的是老牌的BCB阿...
元件都空的要怎麼寫程式...
去查一下環境變數
BCB用了兩個
一個看起來像執行檔
另一個應該就是component放的位置了吧
應該沒錯
因為複製位置在我的電腦打開是空的
到CD檔裡面尋找附檔名bpl
把它全部複製到BCB指定資料夾
打開BCB發現回來了~也可以順利執行,太好了

看起來像移動到system32但BCB不知道
真的蠻奇怪的說

2018年2月23日 星期五

JDK 64bit變32bit

原來要改JDK 64bit變32bit那麼簡單
只要安裝好去指定system variable的path值就好了

從這個網頁下載JDK:
JDK8 download


下載完後點開安裝,安裝完後去系統變數做設置
(這邊只要沒設好就會失敗)
選Path->New 輸入你的JDK安裝位置的bin檔
我通常是開啟資料夾直接複製資料夾位置

修改系統變數教學

以我為例,我裝了兩個JDK,出現的位置如下
64bit:
C:\Program Files\Java\jdk1.8.0_161\bin
32bit:
C:\Program Files (x86)\Java\jdk1.8.0_161\bin

依造這樣的方法
就可以安裝一堆JDK然後隨便指定一個了!!
也就是說依造需求可以自由更改

最後如果eclipse原本用64bit但要改用32bit就需要重新下載32bit去安裝
下載頁面: Eclipse Installer


我中間發現
eclipse是資料夾而已,沒辦法從控制台unintall
安裝新的不衝突,只要跟原版本資料夾位置不一樣就可以了

2018年1月5日 星期五

如何在github指定跳到第幾行

例如說
https://github.com/stefanjones/Arduino/blob/master/hardware/arduino/cores/arduino/USBCore.cpp#L628-L633

關於PermaLink. PermaLink 其實是permanent link 的意思,也就是「永久鏈結」,也有人翻作「靜態鏈結」
https://help.github.com/articles/creating-a-permanent-link-to-a-code-snippet/



只要把要顯示的選起來,左邊出現"..."就可以按分享鏈結

真的是非常方便呢!!

2017年12月10日 星期日

[工具] win10 mobile hotspot

由於手邊沒有路由器分享wifi,後來想到要用TOTOLINK A1000UA分享有線網路出來,但一直失敗,後來直接拆掉用win10內建的熱點分享就好了
win10的熱點分享設定:



turn on


紅線圈起來是有線網路,右邊是hotspot的虛擬網路,要分享網路給虛擬網路才有IP DHCP


確認兩個都有勾選,下拉選單選擇虛擬網路名稱



這樣就可以連了


[隨筆] 螢幕發黃

我的22吋螢幕變黃了,在我看電腦的時候,突然色調就變了,嚇了一跳,網路上查說是燈管壞掉或是線壞掉,抑或是險卡壞掉

我的22吋螢幕接的是筆電,用D-sub連接,正好我大主機還用HDMI跟螢幕連著,開機切換過去看發現很正常沒發黃,所以是筆電這邊的問題,螢幕目前排除掉故障的可能了

我把Dsub的線換掉,換成HDMI,結果有好一點,變淡黃,現在確定問題出在主機板上的內顯了,不過筆電是焊死的內顯沒辦法換(而且內顯現在都靠CPU?),如果要叫修就要整台搬去...

現在把螢幕的色調調到極藍,看起來正常一些了,之後如果要送修再看看吧(懶

2017年12月9日 星期六

[貓] 口腔發炎/免疫力低下/嗜酸性齒齦炎/口齦炎/牙齦炎 治療方法與過程


我的貓罹患嗜酸性齒齦炎,一開始發病的時候是注意到他怎麼不怎麼吃東西,或是吃東西會低吼叫痛,扒開他的嘴巴看到紅腫的牙齦,上網查資料才確定他是不明原因發生的齒齦炎,可能是自己免疫細胞(嗜酸性細胞)太強,去攻擊牙齦細胞導致紅腫發炎

最後是動手術才治好口齦炎,推薦給有需要的人這家獸醫,直接去動手術最快了,不要再猶豫...!

淇寶寶動物醫院

在新竹的貓主人如果有也相同的困擾,可以去找淇醫師,真心推薦


按繼續閱讀,底下有更多日記與就醫金額紀錄


2017年12月5日 星期二

SQL PHP HTML ASP EXCEL 一些好用的函式參考

SQL PHP HTML ASP EXCEL
一些好用的函式參考

http://tmh-vb-tools.blogspot.tw/


15個優化你的sql Query的方式

http://blog.davidou.org/archives/609

參考用~~~~

這邊先介紹15個優化你的sql Query的方式

1.Indexes

對你的欄位做Index優化是非常常見的優化方式,儘管如此,你還是必須完全的了解indexing在資料庫裡面是如何運作的以便充分的索引。不然濫用index而不懂他是怎運作的會造成反效果。

2.Symbol Operator

我們常用 >,<,=,!= 等的運算符號在我們的查詢裡 ,我們可以透過已經建立過index索引的欄位來加快查詢的速度。例如:

SELECT * FROM TABLE WHERE COLUMN > 16
現在,上面這個查詢式沒優化的。因為DBMS必須去找所有大於小於16的所有資料

。所以我們可以把它改寫成如下:

SELECT * FROM TABLE WHERE COLUMN >= 15
這樣的話DBMS就會直接跳到15去,然後直接找比15小的出來。

3.Wildcard

在sql裡面 我們提供了%來做模糊查詢,然而這個%的查詢會拖慢你的查詢速度,特別是當你的table非常大的時候。我們可以透過前後縋的方式優化我們的查詢而不要全部都使用,例如:

#Full wildcard
SELECT * FROM TABLE WHERE COLUMN LIKE ‘%hello%’;
#Postfix wildcard
SELECT * FROM TABLE WHERE COLUMN LIKE ‘hello%’;
#Prefix wildcard
SELECT * FROM TABLE WHERE COLUMN LIKE ‘%hello’;

這個欄位必須要做index才比較會有效果

ps對一個百萬條資料的table做Full wildcard會killing這個資料庫

4.NOT Operator

嘗試去避免使用 NOT在你的sql裡面,用正向的的方式查詢會快很多。例如用 LIKE, IN, EXIST or = 符號 而不要使用 NOT LIKE, NOT IN, NOT EXIST or != 符號。使用反向符號會導致資料庫會去搜尋每一筆資料去確定他都是真的不屬於或不存在這個table。相反地,假如有這筆資料的話,用正向的方式查詢會直接的跳到這個查詢結果。想像一下,假設你有一百萬筆資料在這個table的話 那GG拉。

5.COUNT VS EXIST

我們常會用 COUNT 去查詢有多少筆的資料存在

1 SELECT COLUMN FROM TABLE WHERE COUNT(COLUMN) > 0
同樣的,這是一個非常差的查詢,因為count會搜尋「所有」存在這個表上的紀錄,所以比較好的方法式寫EXIST ,這個他只要一旦找到就會停止,當然,他是存在的(exist)。

6.Wildcard VS Substr

假如要查詢特定的索引的話,如果那個欄位有做index 那麼最好使用 wildcard 而不是substr 例如

[不好的]SELECT * FROM TABLE WHERE  substr ( COLUMN, 1, 1 ) = 'value'.
上面這個查詢會去substr每一筆資料就為了找‘value’這個字串,而

[好的] SELECT * FROM TABLE WHERE  COLUMN = 'value%'.
Wildcard 會找的比較快,假如value是在每一筆資料的最前面的話

7.Index Unique Column

有些資料庫例如 MySQL對於unique 和indexed的欄位搜尋速度比較好。因此假如這個欄位是unique的,最好記得對他們做index。但是要是那個欄位根本就沒有搜尋的必要的話,就不要做index,縱使他們是unique的。

8.Max and Min Operators

Max 和 Min是為了找到最大跟最小值用的,我們在已經做index的欄位使用他們兩個的話,速度會很快。但是假如這個欄位只想要查詢最大跟最小值的話,就不要去做index了 這不划算,就好比為了一棵樹而放棄整座森林一樣。為了他而讓整個資料庫效能降低。

9. Types

盡量使用最有效(最小的)資料型態。用太大的資料型態去存很小的資料是不必要甚至是危險的。用較小的資料型態可以得到比較小的table空間。例如用MEDIUMINT通常就比用INT好,因為MEDIUMINT少了25%的空間,還有在儲存email 或是少數資料時VARCHAR還是比 longtext 好。

10.Primary Index

主要的Primary欄位通常都用來做index用的,所以盡可能的讓他越小越好。這讓DBMS能更簡單有效的去查詢每一筆資料。

11.String indexing

假如字串他有前後縋詞可以被index的話就不需要對整個字串index。特別是他的前後字串提供一個唯一的識別時。越少的index速度會越快。除了減少硬碟空間之外,還可以提供你更多的index cache使用還有更少的硬碟資料查詢時間

12.Limit The Result

另一個很常優化的方式就是去限定查詢回來的筆數,假如你的table有個幾十億的資料,幾個簡單的查詢就可以攤掉你整個資料庫了

  SELECT * FROM TABLE
因此,不要偷懶不想去限制回傳筆數,在另一方面 在遇到 SQL injection 攻擊時可以降低損害的程度

  SELECT * FROM TABLE WHERE 1 LIMIT 10
13.Use Default Value

如果你使用MySQL時,盡量使用Default值,Insert values 只有當值跟DEfalut不一樣時才用,在mysql裡,這樣可以減少一次解析的時間並增快寫入的速度。

14.In Subquery

我們常用下列in的子查詢來查詢資料

1 SELECT * FROM TABLE WHERE COLUMN IN (SELECT COLUMN FROM TABLE)
這樣做是很號資源的,因為sql會先處理內部查詢,查完才做外面的查詢

1 SELECT * FROM TABLE, (SELECT COLUMN FROM TABLE) as dummytable WHERE dummytable.COLUMN = TABLE.COLUMN;
使用一個自定的表會比用in還要來的好 另外 用 exist 也不錯

15.Utilize Union instead of OR

在MySQL裡面,用了or 會讓整個查詢的速度優勢不見,就算做index也沒啥太大的效用

  SELECT * FROM TABLE WHERE COLUMN_A = 'value' OR COLUMN_B ='value'
我們可以把上面透過union改寫成下面這樣

  SELECT * FROM TABLE WHERE COLUMN_A = 'value'
  UNION
  SELECT * FROM TABLE WHERE COLUMN_B = 'value'
這樣跑比較快

總結

總歸來說,上面這些優化並不能保證你得查詢不會成為系統的瓶頸,這需要更多的剖析研究。然而上述的簡單優化方式,至少可以幫你很多

文章來源:http://hungred.com/useful-information/ways-optimize-sql-queries/

註:我是看文章重點翻譯的,所以部分形容描述就沒翻了。而關於第14點其實真的會差很多,我曾經因為為了一個同樣的查詢結果從in改成join 查詢時間從22秒瞬間下降到0.05秒而已

最近愛上的歌-Adele someone like you

最近才發現愛戴兒Adele才大我一歲,我一直以為他四十了,因為他的歌聲又成熟又滄桑,創作的詞曲很有韻味,而且外表還真看不出來,他發行第一張專輯時才19...他的專輯都用他當時的年紀當名字
真的超厲害...

有才華的人不管幾歲都應該盡情發揮,不要用年齡當藉口,覺得太小不能做什麼,長大了也不會去做的

這首歌的副歌一直重複吟誦,never mind I will find someone like you...深深刺中我的心,喜歡上不能愛的他,只能安慰自己,下次還能遇到跟他一樣的人...抱著這份悲傷的心情低吟尋找...





Adele

Someone Like You

I heard that you're settled down That you found a girl and you're married now
I heard that your dreams came true Guess she gave you things I didn't give to you
Old friend, why are you so shy? Ain't like you to hold back or hide from the light
I hate to turn up out of the blue uninvited But I couldn't stay away, I couldn't fight it
I had hoped you'd see my face And that you'd be reminded that for me it isn't over

Never mind, I'll find someone like you I wish nothing but the best for you, too
Don't forget me, I beg I remember you said
'Sometimes it lasts in love But sometimes it hurts instead'
Sometimes it lasts in love But sometimes it hurts instead, yeah

You know how the time flies Only yesterday was the time of our lives
We were born and raised in a summer haze Bound by the surprise of our glory days
I hate to turn up out of the blue uninvited But I couldn't stay away, I couldn't fight it
I had hoped you'd see my face And that you'd be reminded that for me it isn't over

Never mind, I'll find someone like you
I wish nothing but the best for you, too
Don't forget me, I beg I remember you said 'Sometimes it lasts in love But sometimes it hurts instead'
Nothing compares No worries or cares Regrets and mistakes, they're memories made Who would have known how bittersweet this would taste?

Nevermind, I'll find someone like you I wish nothing but the best for you
Don't forget me, I beg I remember you said
'Sometimes it lasts in love But sometimes it hurts instead'
Nevermind, I'll find someone like you I wish nothing but the best for you, too
Don't forget me, I beg I remember you said
'Sometimes it lasts in love But sometimes it hurts instead'
Sometimes it lasts in love But sometimes it hurts instead, yeah


[BCB][C++] 一個有趣的題目,執行過程中destory自己的資料夾

昨天開始就一直在積極尋找如何刪掉程式所在資料夾
如果開啟C:/app/a.exe
然後在執行中下達刪除C:/app
結果是資料夾內容會全部清空
但C:/app這個資料夾還在

so...
是不是更改呼叫外部的指令可以修正這問題?
WinExec、system、ShellExcute...
是不是可以直接叫bat檔?
是不是另外call 程式可以?

這個是在執行時把自己先複製到temp資料夾
再執行另一個process
目的是可以刪掉exe檔



結果可以成功開起來
也確實可以刪掉當前資料夾中的exe
但是空資料夾還在


學到的cmd指令:
等同於用工作管理員刪除process
taskkill /f /im Project_clone.exe

等待三秒
@ping 127.0.0.1 -n 3 -w 3000 > nul

刪除資料夾以及裏頭的東西
rd C:/app /q /s

最後測試發現只要從程式call
不管用WinExec、system、ShellExcute另一個程式、bat
資料夾就是刪不掉
可能是directory path還在call heap裡
找很久找不到如何解除這個path
後來想到用常駐程式去摧毀
可是對方不要再有另一個service
要安裝很麻煩
我想到用工作排程



這樣就可以了

想解決update卻沒該column的錯誤

想解決update卻沒該column的錯誤
避免一開啟程式就出錯
一開始研究在SQL command下手
但無法避開錯誤
後來發現在client端擋掉query錯誤即可

注意:
1. Limit 1 必寫
2. exist 的用法
https://www.techonthenet.com/mysql/exists.php
3. 從res就要擋掉了,不然到row會大出錯


MySQL: EXISTS Condition

This MySQL tutorial explains how to use the MySQL EXISTS condition with syntax and examples.

Description

The MySQL EXISTS condition is used in combination with a subquery and is considered "to be met" if the subquery returns at least one row. It can be used in a SELECT, INSERT, UPDATE, or DELETE statement.

Syntax

The syntax for the EXISTS condition in MySQL is:
WHERE EXISTS ( subquery );

Parameters or Arguments

subquery
SELECT statement that usually starts with SELECT * rather than a list of expressions or column names. MySQL ignores the list of expressions in the subquery anyways.

Note

  • SQL statements that use the EXISTS Condition in MySQL are very inefficient since the sub-query is RE-RUN for EVERY row in the outer query's table. There are more efficient ways to write most queries, that do not use the EXISTS Condition.

Example - With SELECT Statement

Let's look at a simple example.
The following is a SELECT statement that uses the MySQL EXISTS condition:
SELECT *
FROM customers
WHERE EXISTS (SELECT *
              FROM order_details
              WHERE customers.customer_id = orders.customer_id);
This MySQL EXISTS condition example will return all records from the customers table where there is at least one record in the order_details table with the matching customer_id.

Example - With SELECT Statement using NOT EXISTS

The MySQL EXISTS condition can also be combined with the NOT operator.
For example,
SELECT *
FROM customers
WHERE NOT EXISTS (SELECT *
                  FROM order_details
                  WHERE customers.customer_id = orders.customer_id);
This MySQL EXISTS example will return all records from the customers table where there are no records in the order_details table for the given customer_id.

Example - With INSERT Statement

The following is an example of an INSERT statement that uses the MySQL EXISTS condition:
INSERT INTO contacts
(contact_id, contact_name)
SELECT supplier_id, supplier_name
FROM suppliers
WHERE EXISTS (SELECT *
              FROM orders
              WHERE suppliers.supplier_id = orders.supplier_id);

Example - With UPDATE Statement

The following is an example of an UPDATE statement that uses the MySQL EXISTS condition:
UPDATE suppliers
SET supplier_name = (SELECT customers.customer_name
                     FROM customers
                     WHERE customers.customer_id = suppliers.supplier_id)
WHERE EXISTS (SELECT *
              FROM customers
              WHERE customers.customer_id = suppliers.supplier_id);

Example - With DELETE Statement

The following is an example of a DELETE statement that uses the MySQL EXISTS condition:
DELETE FROM suppliers
WHERE EXISTS (SELECT *
              FROM orders
              WHERE suppliers.supplier_id = orders.supplier_id);

Reserve to Binary Tree

看完這篇
雖然我們公司 90%的工程師都用你開發的工具,但我們還是不聘用你
http://www.techbang.com/posts/24183
我驚了一下

突然問我怎麼反轉二元樹,我一點頭緒都沒有,趕緊去查答案


資料結構 - 一般樹轉二元樹


喔原來是這個簡單的原理
把一般的樹轉變為二元樹而已
因為限定每層sibling互連
所以保證一定是二元樹

規則是
1. LChild不變
2. Sibling變為RChild


LCRS Tree

從上面的轉換結果,我們可以知道這個二元樹的左子節點代表的是原來的第一個子節點,右子節點代表下一個兄弟節點,而這樣的性質的樹也稱為LCRS Tree(Left-Child-Right-Sibling Tree)

CODE

C#
JAVA
C++

原來我學過,真的要學而時習之

[BCB] WebCam的處理

WebCam的輸入與擷取在BCB實作上算是蠻簡單的,windows的函式庫已經有很完整的範例可以參考,這邊記錄下這次的處理方法

輸入原理:
1. capCreateCaptureWindow 先指定視窗handle給裝置
2. capDriverConnect 連結裝置
3. 設定&拷貝 capDriverGetCaps




輸出到eVision的結構中使用:

[BCB] EEFFACE例外處理

本來舊的WebCam給我的是320*240解析度的圖像,但新的WebCam給我640*480,當時我的電腦是連接舊的,結果程式一發出去在外面的機器都不能用,因為他們都裝設新的,所以我先換一台,裝好driver,裝driver時出現這個錯誤:

Driver是這個:

按掉很多次後幸好他可以繼續裝,裝好之後打開他給的範例程式,運作正常:


開啟程式也沒問題,但IDE在Debug模式下會瘋狂報錯,一出現就當掉只能重開:



查網路上的說法是說這是程式拋出BCB6外的exception,Delphin遇到這種外部例外都這樣歸類處理,也就是IDE無法處理
"
This is clearly something happening in the Delphi evaluator (which is part of the compiler). The odd thing is that if it is, in fact, going through writeobj.c, something is certainly not quite right. If you can reproduce this with a test case, please report it in QualityCentral (http://qc.embarcadero.com).
EEFFACE is the SEH exception code used by C++, which is "leaking" out to some Delphi code (in this case the IDE itself). When the exception code is not a Delphi generated exception or a hardware related exception, Delphi simply maps it to EExternalException.
"
(https://stackoverflow.com/questions/2197351/external-exception-eefface-in-delphi/7949748#7949748?newreg=c1729bc078ba43e98c2ae1a59b876913)
解決辦法
1.改regEdit

"
同事安裝了中信公司網銀客戶端後無法運行,報「External exception EEFFACE」錯誤,而另一個同事就使用正常。我檢查了很久也沒找到原因,後來去網上搜了一下,發現報這個錯誤的情況還真不少,總體來說都是用 C++ Builder 程序編譯的軟件才會報錯。C++ Builder 某些版本的問題加上程序設計的缺陷導致此問題發生。下面給出兩個通用的解決辦法:
1、安裝一個補丁包後重新編譯源程序。參見:http://www.respower.com/~earlye/programming/TranslateStandardExceptions.htm
2、修改註冊表:
假設出錯的應用程序名為「Project1.exe」,打開註冊表,找到如下主鍵:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]
新建一個「Project1.exe」項,然後再其下創建一個字符串值,鍵值名為「DisableHeapLookAside」,內容設為「1」即可(有時候留空也有效)。

"
(http://www.mympc.org/news/2/2010-3-19_17365125942.html)

"
Error message: 'External Exception EEFFACE'
This message occurs under Windows 2000 and NT 4.0 with Service Pack 4 and higher, as the result of a bug in the Borland Database Engine (BDE). In order to avoid this message ask your network administrator to adjust the Windows NT Registry as follows:
1.Use regedt32.exe to open the key
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows
NT\CurrentVersion\Image File
Execution Options.
2.With this key selected, add a key with the name photobase.exe. Class can remain
empty.
3.Select this key and add the following value: DisableHeapLookAside; data type
REG_SZ; string "1" (without quotation marks).
Another solution is to change to Windows 95 or Windows 98, or to use Sybase SQL Anywhere or Oracle as a database system.
"  (http://forum.worldstart.com/showthread.php?t=50073)

2.IDE 按F8(RUN but Stop) 不要按F9(RUN) 有機會成功進debug模式


至少可以用了,呼

額外參考資料:
【轉】遇到 External Exception EEFFACE 錯誤的解決辦法
(http://www.cnblogs.com/zhujiecode/articles/2620489.html)

[BCB] 改變視窗外型

要怎麼控制視窗的形狀呢...

使用RGN class, GDI

從WIN32 API 書上看到的

特別注意
CreateRectRgn(x1,y1,x2,y2);
是左上與右下的座標點

好在翻書有翻到過
再去跑圖書館一次

這本書有機會想買:Windows Graphics Programming: Win32 GDI and DirectDraw

雖然說MSDN老師說會用最重要,但是光看他的敘述實在寫不出來,我需要實際例子,就把它當作文法書上的文法,可供快速查閱,但例句要自己找
MSDN-CreateRectRgn function

資料來源
[1]:C++ builder & windows API範例辭典



[BCB] compile error: not define symbol 'string'

這麼平常的string怎麼BCB會compile error (抱頭
查了很久發現BCB原生可以抓到的是AnsiString、String
他已經包好的class

如果要用stirng
這個C++才出現的class
需要

#include <iostream>
#incldue <string>

using namespace std;

[BCB]C++ Builder建立/使用 Lib筆記

今天來整理一下,如何在C++ Builder中建立及使用libary(靜態聯結函式庫)的筆記吧!

Q. 如何將已有的 .cpp及 .h製成 .lib? 
1. 開啟C++ Builder
2. File/New/Other 選擇Libray 按OK
3. 此時會自動產生一個 Project1.bpf檔
4. 接著將要被打包的 .cpp透過 Add File to project加入到專案中 ( .h不用)
5. 將此專案儲存起來 (可依照功能/目的來命名,不一定要和 .cpp/.h同名)
6. Build此專案
7. 完成後,在目錄下會產生一個和專案同名的 .lib檔
8. 未來可將 .lib及 .h檔發佈出去


Q. 在C++ Builder開發環境下,如何使用 .lib及 .h檔?
1. 在拿到 .lib及 .h檔後,將這兩個檔案放到專案執行的目錄下或者,
.lib可放在Windows能搜尋到的目錄下即可,但 .h 一定要放在專案執行的目錄下
2. 透過Add File to project將 .lib加入到專案中 ( .h不用)
3. 在程式開頭處加入 #include "xxx.h"
4. 完成



資料來源:
http://macodolau.blogspot.tw/2010/04/c-builder-lib.html

[分享] 歡迎高雄人加入路自學館課程(免費課程 FREE)

我想幫路 自學館打一下廣告

昨天淒風冷雨中只有三個人來上英文課實在是太悲傷了,老師實力太強內容很充實,課程價值非常高,直逼千元一堂,基於有好資源高雄人應該多多利用的想法,來寫這篇文章

自學館的課程在高雄區的圖書館舉辦,遠至路竹都有,他最棒的是

課程免費!!!

除了講義費以外無任何其他費用

在外面要學英日文一堂課500,買個課程數萬元,也不保證你學不學得會,有保證一定考的到某證照的,價格又貴到爆炸

路自學館主辦人是文藻大學退休教授,專業是日文,英文也很強,有另請志同道合的英文教師教授,退休的教授還有教學的熱枕真的很不簡單

我在上課期間一直在觀察,為什麼上課不用錢?為什麼這麼熱心?基於我一直覺得免錢的最貴的想法,一開始覺得到底是那裡有詐,結果一個月下來了解架構組織流程後,確認真的是高雄人的熱心與熱情無限延伸,這延伸也太誇張了,真的超佛心

不同於昂貴的補習班,他主要強調自學,會教導你如何自學、如何找資源,自學方法很重要,有些資源不知道,就少了很多神兵利器,學起來倍感辛苦,而且容易放棄

走過那麼多路,知道學習資源多麼可貴的我,碰到路自學館像進到寶山一樣興奮

歡迎想提升英日文能力的人加入,歡迎所有學生、上班族、想進修的人,講座有分程度,隨自己需求去上課,不過像我覺得我日文幼幼班去聽新聞講座也不覺得難,老師帶的真的很好,新的一年給自己一個挑戰吧!

多多來講座上課~有益身心健康

課程資訊都公布在臉書社團跟路自學館官網

FB社團連結:
日文:https://www.facebook.com/groups/283608928427871/
英文:https://www.facebook.com/groups/425843060817990/


[AI] [LeNet] 實作

目標: 把Marcel出的作業寫完

notepad++结合Zen Coding快速编写HTML代码

查notepad++的使用發現這篇,蠻好用的感覺


轉載自:notepad++結合Zen Coding快速編寫HTML代碼

經朋友介紹認識了Zen Coding一款快速編寫HTML代碼的插件,然後在google搜索一下其使用,讓在下激動不以,今天特意寫了一篇blog來跟大家一起分享。
         Zen Coding其實是一款快速編寫HTML,XML,XSL(或其他格式化語言)的編輯器插件,這個插件的實現了用縮寫方式完成大量重複的書寫工作。他的核心是一個強大的縮寫引擎,掌握這些縮寫技巧,給我們的編寫代碼帶來極高的編寫效率。他支持好多編輯器,如TextMate,UltraEdit,Notepad++等許多編寫器,我們可以從http://code.google.com/p/zen-coding下載到相對應的編輯插件,然後我們把解壓縮出來的文件,如下圖:


放到你的Notepad++安裝文件下的plugins目錄下,在我的電腦中的程序安裝地址是「C:\Program Files\Notepad++\plugins」(這個地址需要對應你的程序安裝地址)。然後重新啟動你的Notepad++編輯器就能看到菜單欄上增加了一項Zen Coding。如下圖所示:


這樣我們在Notepad++編輯下就成功的安裝好了Zen Coding的插件。
接著我們一起來看看Zen Coding如何使用,其實只要你對CSS的選擇器比較熟悉,就可以得用簡短的類似於CSS選擇器的代碼高效的編寫出HTML代碼,我們先來看一個簡單的實例,首先在你的編輯器中輸入下面一句代碼
div#header>div#logo+ul.nav>li.item-$*5>a
       接著按一下快捷鍵ctr+E,就會自動生成如下的HTML代碼:
<div id="header">
    <div id="logo"></div>
    <ul class="nav">
        <li class="item-1"><a href=""></a></li>
        <li class="item-2"><a href=""></a></li>
        <li class="item-3"><a href=""></a></li>
        <li class="item-4"><a href=""></a></li>
        <li class="item-5"><a href=""></a></li>
    </ul>
</div>
       這樣是不是很神奇呀。你一定會問這是怎麼實現的呢?在沒搞清楚這是怎麼回事的時候,你可能會相當的迷惑,不知道這是怎麼一回事。沒關係,我們先來看一下其在線演示,一起感受下zen-codingr的強大功能,請看其在線的DEMO演示。
       在打開的在線編輯中我們同樣輸入上面的那段代碼:
div#header>div#logo+ul.nav>li.item-$*5>a
       此時我們在按一下ctr+,就能看到轉換的HTML代碼
<div id="header">
    <div id="logo"></div>
    <ul class="nav">
        <li class="item-1"><a href=""></a></li>
        <li class="item-2"><a href=""></a></li>
        <li class="item-3"><a href=""></a></li>
        <li class="item-4"><a href=""></a></li>
        <li class="item-5"><a href=""></a></li>
    </ul>
</div>
       此處的快捷方式是ctr+,而在我們的Notepad++中使用的是ctr+E,所以這裡要提醒大家,在不同的編輯中的快捷方式是不一樣的,感興趣的朋友可以自己多研究一下,我們這裡主要是針對在notepad++中如何使用zen coding。
       在學習如何在notepad++中使用zen coding之前我們有必要先瞭解一下zen coding是一些基本規則,這樣我們才能更好的在notepad++中應用zen coding來提高大家編定代碼的效率。
Zend Coding書寫規範
            E:表示元素,如p,div等,例如我們在編輯中輸入:
p
按一下ctr+E,我們就能得到
<p></p>
E#name和E.name:這個是ID和Class屬性,和CSS樣式表定義ID和Class是一樣的。#表示ID,.表示Class。例如定義一個ID為header的div,我們可以這樣來書寫:div#header,然後定義一個class我們可以寫在div.region。我們一起先在編輯中輸入:
div#header
       然後展開,就成為:
<div id="header"></div>
div.region
       展開就是:
<div class="region"></div>
       當然我們同時可以將兩者合併在一起,因為在我們編寫代碼時,常會碰到一個元素具有一個ID和多個Class名,那我們這裡也可以簡單方便的實現,大家一起來看下面的一個例子:
div#nav.menu.links.tab
       同時我們來展開他:
<div id="nav" class="menu links tab"></div>
       是不是我們這個div同時具有ID名nav和class名menu,links,tab呀,方便吧
E>E:表示父級嵌套子級:
div#header>h1#logog
<div id="header">
    <h1 class="logo"></h1>
</div>
       我們還可以實現多級嵌套:
div#header>h1#logo>a
<div id="header">
    <h1 id="logo"><a href=""></a></h1>
</div>
E+E:同輩元素:
div#header>h1.site_name+p.site_solgan
<div id="header">
    <h1 class="site_name"></h1>
    <p class="site_solgan"></p>
</div>
給元素添加屬性:給標籤元素添加屬性
a[title]
<a href="" title=""></a>
       當然我們還可以給其加上屬性值:
a[title="hello zen coding"]
<a href="" title="hello zen coding"></a>
       不過這裡需要提醒大家一點,在展開之前,光標最好放在a[title="hello zen coding"]的末尾。不然會造成不可想像的錯誤,大家可以自己嘗試一下,就自然明白了。
E*N:多個相同元素的寫法
div#nav>ul>li.item*5>a
<div id="nav">
    <ul>
        <li class="item"><a href=""></a></li>
        <li class="item"><a href=""></a></li>
        <li class="item"><a href=""></a></li>
        <li class="item"><a href=""></a></li>
        <li class="item"><a href=""></a></li>
    </ul>
</div>
E*N$:按索引生成
ul>li.item-$*3
<ul>
    <li class="item-1"></li>
    <li class="item-2"></li>
    <li class="item-3"></li>
</ul>
       上面上一些Zen Coding的書寫規範,當然更多的書寫大家還可以參考ZenCodingCheatSheet.pdf文檔,這裡我就不全部闡述了。
       到這裡我們對zen coding有一定的瞭解了,也不會對一開始那一段如何產生代碼感到迷惑不解了,接著我們就可以來一起看看zen coding在notepad++編輯中的應用了。
【Ctrl+E】展開縮寫(Expand Abbreviation):例如前面那些例子,我們只要在notepad++編輯中輸入如下代碼:
div#header>(h1.logo>a)+ul.nav>li.item*5>a
       我們只要按一下【Ctrl+E】,馬上就能把上面的代碼轉換成如下的HTML代碼
<div id="header">
    <h1 class="logo"><a href=""></a></h1>
    <ul class="nav">
        <li class="item"><a href=""></a></li>
        <li class="item"><a href=""></a></li>
        <li class="item"><a href=""></a></li>
        <li class="item"><a href=""></a></li>
        <li class="item"><a href=""></a></li>
    </ul>
</div>
       需要提醒大家的一點是,我們上面中的括號的使用,在前面我們沒有碰到過,這裡加上這個括號是為控制其嵌套格式,如果我們不加上這個括號,那麼生成出來的HTML是完全另外一們樣子,大家可以在自己本地電腦上的編輯上嘗試一下。你會恍然大悟的,同時也會知道他的更神奇之處。
【Ctrl+Shift+A】嵌套代碼(Wrap with Abbreviation):如何說我們想在下面代碼中的P標籤外嵌套一個div.limiter
<div id="header">
    <p>Hello Zen Coding</p>
</div>
       我們只需要在p標籤的結束位置按【Ctrl+Shift+A】,在彈出的窗口中輸入div.limiter,如下圖所示:
       然後按回車【Enter】鍵,就會自動在p標籤外嵌套一個div.limiter的div標籤,如:
<div id="header">
    <div class="limiter">
        <p>Hello Zen Coding</p>
    </div>
</div>
          一定要記住是在p標籤的末尾,如果光標不在p標籤的末尾,而是在p標籤內容中的任何一個位置,那不div.limiter就不會嵌套在<p></p>外面,而是嵌套在Hello Zen Coding的外面。
       還有一種更讓你感興趣的方法,我們在編輯中寫幾行沒有任何標籤的內容,但我想給每個沒有標籤的內容嵌套在ul列表中,如下所示
list1
list2
list3
list4
list5
         我們在編輯器中按【Ctrl+A】選中這幾行內容,然後按【Ctrl+Shift+A】在彈出的對話框中輸入ul.menu>li.item*>a後按【Enter】鍵,就會生成如下代碼
<ul class="menu">
    <li class="item"><a href="">list1</a></li>
    <li class="item"><a href="">list2</a></li>
    <li class="item"><a href="">list3</a></li>
    <li class="item"><a href="">list4</a></li>
    <li class="item"><a href="">list5</a></li>
</ul>
        記得選中所有內容喲,我嘗試了不選中內容是沒有效果出現的喲。
       下面我們一起來看幾個常用的快捷方式
【Ctrl+Shift+D】選中代碼塊(Balance TagInward/Outward):選中當前光標所在的代碼塊,長按可以依次選中其父塊代碼。
【Ctrl+Alt+[,Ctrl+Alt+]】轉到上一個/下一個編輯點:按下可以依次跳到可輸入內容的編輯點,省去了不停按方向鍵或鼠標來定位編輯點的麻煩。
【Ctrl+Alt+M 】合併行(Merge Lines):將選中的多行代碼合併為一行。壓縮css、js代碼為一行時,這個很方便。Ctrl+A,然後Ctrl+Alt+M,兩下即可搞定,免去了動用壓縮工具的麻煩。(當然這個只是簡單地將代碼合併為一行,並不能做更深入的代碼壓縮)
【Alt+/ 】添加、移除註釋(Toggle Comment): 註釋掉光標所在的代碼塊
【Ctrl+Shift+』 】移除標籤(Remove Tag):比如將
<div class="test">
    hello world
</div>
 移除div標籤,留下hello world。
【Ctrl+』 】空標籤轉化(Split/Join Tag):比如將<div class="test"></div>轉化為<div class="test"/>,反向亦可。
       我們在這裡介紹了一些快捷的使用,但常用的還是我們前面看到那幾個生成HTML代碼的兩種【Ctrl+E】和【Ctrl+Shift+A】當然感興趣的朋友可以依次去嘗試。體會一下。
       如果你對JS精通的話,你還可以改寫plugins\NppScripting\includes\Zen Coding.js這個JS文件,讓它按照你喜歡的編輯習慣,當然你不編寫自己的縮寫規則,也強烈建議您閱讀一下這個JS文件,熟悉Zen Coding自帶的一些縮寫規則,讓你編輯代碼更快。
       最後Zen Coding分為Zen Html和Zen Css兩個部分,在這裡我們主要一起探討了Html部分,如果感興趣的朋友可以去深入瞭解一下Zen Css部分
如需轉載請註明出處:W3CPlus