object(WP_Post)#2979 (24) {
  ["ID"]=>
  int(1320)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-10-04 14:21:17"
  ["post_date_gmt"]=>
  string(19) "2024-10-04 14:21:17"
  ["post_content"]=>
  string(1306) "




這裏下載Icon

https://github.com/legacy-icons/famfamfam-silk

https://icons8.com/app/windows

" ["post_title"]=> string(24) "Java第19堂: Outlook UI" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(14) "java-lesson-19" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-10-04 14:21:47" ["post_modified_gmt"]=> string(19) "2024-10-04 14:21:47" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1320" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java第19堂: Outlook UI
這裏下載Icon https://github.com/legacy-icons/famfamfam-silk https://icons8.com/app/windows

這裏下載Icon

https://github.com/legacy-icons/famfamfam-silk

https://icons8.com/app/windows

			object(WP_Post)#2988 (24) {
  ["ID"]=>
  int(1301)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-09-27 15:41:45"
  ["post_date_gmt"]=>
  string(19) "2024-09-27 15:41:45"
  ["post_content"]=>
  string(604) "




Example project: https://github.com/quantrpeter/antlr-maven-project-setup

" ["post_title"]=> string(30) "Antlr第2堂: Maven with Antlr" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(14) "antlr-lesson-2" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-09-27 15:42:28" ["post_modified_gmt"]=> string(19) "2024-09-27 15:42:28" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1301" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Antlr第2堂: Maven with Antlr
Example project: https://github.com/quantrpeter/antlr-maven-project-setup

Example project: https://github.com/quantrpeter/antlr-maven-project-setup

			object(WP_Post)#2975 (24) {
  ["ID"]=>
  int(1297)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-09-27 15:38:23"
  ["post_date_gmt"]=>
  string(19) "2024-09-27 15:38:23"
  ["post_content"]=>
  string(904) "





"
  ["post_title"]=>
  string(31) "Java第18堂: TableCellRenderer"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(14) "java-lesson-18"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-09-27 15:38:23"
  ["post_modified_gmt"]=>
  string(19) "2024-09-27 15:38:23"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(30) "https://www.hkprog.org/?p=1297"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Java第18堂: TableCellRenderer
			object(WP_Post)#2982 (24) {
  ["ID"]=>
  int(1293)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-09-25 13:30:36"
  ["post_date_gmt"]=>
  string(19) "2024-09-25 13:30:36"
  ["post_content"]=>
  string(924) "





"
  ["post_title"]=>
  string(59) "LeetCode第1堂: LinkedList + Queue + Stack + Binary Search"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(17) "leetcode-lesson-1"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-09-25 13:30:36"
  ["post_modified_gmt"]=>
  string(19) "2024-09-25 13:30:36"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(30) "https://www.hkprog.org/?p=1293"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
LeetCode第1堂: LinkedList + Queue + Stack + Binary Search
			object(WP_Post)#2977 (24) {
  ["ID"]=>
  int(1289)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-09-25 13:29:01"
  ["post_date_gmt"]=>
  string(19) "2024-09-25 13:29:01"
  ["post_content"]=>
  string(970) "








" ["post_title"]=> string(29) "Antlr第1堂: Install and run" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(14) "antlr-lesson-1" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-09-25 13:29:02" ["post_modified_gmt"]=> string(19) "2024-09-25 13:29:02" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1289" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Antlr第1堂: Install and run

			object(WP_Post)#2974 (24) {
  ["ID"]=>
  int(1283)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-09-25 13:26:44"
  ["post_date_gmt"]=>
  string(19) "2024-09-25 13:26:44"
  ["post_content"]=>
  string(958) "








" ["post_title"]=> string(20) "Java第17堂: JTable" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(14) "java-lesson-17" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-09-25 13:26:57" ["post_modified_gmt"]=> string(19) "2024-09-25 13:26:57" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1283" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java第17堂: JTable

			object(WP_Post)#2973 (24) {
  ["ID"]=>
  int(1277)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-09-13 15:17:57"
  ["post_date_gmt"]=>
  string(19) "2024-09-13 15:17:57"
  ["post_content"]=>
  string(958) "








" ["post_title"]=> string(60) "Java第16堂: Abstract Factory Pattern & ExecutorService" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(14) "java-lesson-16" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-09-25 13:27:04" ["post_modified_gmt"]=> string(19) "2024-09-25 13:27:04" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1277" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java第16堂: Abstract Factory Pattern & ExecutorService

			object(WP_Post)#2972 (24) {
  ["ID"]=>
  int(1269)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-09-10 19:07:55"
  ["post_date_gmt"]=>
  string(19) "2024-09-10 19:07:55"
  ["post_content"]=>
  string(1244) "

在pom.xml加上<developer>, <email>為你的hkprog登入電郵

然後登入hkprog.org,上載你的頭像

" ["post_title"]=> string(52) "如何在編程學會Maven Repo加上開發者訊息" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(136) "%e5%a6%82%e4%bd%95%e5%9c%a8%e7%b7%a8%e7%a8%8b%e5%ad%b8%e6%9c%83maven-repo%e5%8a%a0%e4%b8%8a%e9%96%8b%e7%99%bc%e8%80%85%e8%a8%8a%e6%81%af" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-09-10 19:09:30" ["post_modified_gmt"]=> string(19) "2024-09-10 19:09:30" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1269" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
如何在編程學會Maven Repo加上開發者訊息
在pom.xml加上<developer>, <email>為你的hkprog登入電郵 然後登入hkprog.org,上載你的頭像

在pom.xml加上<developer>, <email>為你的hkprog登入電郵

然後登入hkprog.org,上載你的頭像

			object(WP_Post)#2971 (24) {
  ["ID"]=>
  int(1265)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-09-06 16:26:48"
  ["post_date_gmt"]=>
  string(19) "2024-09-06 16:26:48"
  ["post_content"]=>
  string(904) "





"
  ["post_title"]=>
  string(38) "Java第15堂: Design Pattern Singleton"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(14) "java-lesson-15"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-09-06 16:27:06"
  ["post_modified_gmt"]=>
  string(19) "2024-09-06 16:27:06"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(30) "https://www.hkprog.org/?p=1265"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Java第15堂: Design Pattern Singleton
			object(WP_Post)#2970 (24) {
  ["ID"]=>
  int(1185)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-08-23 10:30:55"
  ["post_date_gmt"]=>
  string(19) "2024-08-23 10:30:55"
  ["post_content"]=>
  string(18981) "

舉辦了十四堂Java網課之後正式舉辦第一堂實體堂,感謝生產力局大力支持提供場地令課程得以進行,本堂教導大家使用Git,特別是小學生掌握Git和Maven之後初步具備協作能力,可以合作寫一些更大的軟件,是教育重要的一步。本次亦講解了學生教育理念,見下面PowerPoint

" ["post_title"]=> string(22) "第一堂Java實體堂" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(22) "java-physical-lesson-1" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-08-23 14:02:31" ["post_modified_gmt"]=> string(19) "2024-08-23 14:02:31" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1185" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
第一堂Java實體堂
舉辦了十四堂Java網課之後正式舉辦第一堂實體堂,感謝生產力局大力支持提供場地令課程得以進行,本堂教導大家使用Git,特別是小學生掌握Git和Maven之後初步具備協作能力,可以合作寫一些更大的軟件,是教育重要的一步。本次亦講解了學生教育理念,見下面PowerPoint

舉辦了十四堂Java網課之後正式舉辦第一堂實體堂,感謝生產力局大力支持提供場地令課程得以進行,本堂教導大家使用Git,特別是小學生掌握Git和Maven之後初步具備協作能力,可以合作寫一些更大的軟件,是教育重要的一步。本次亦講解了學生教育理念,見下面PowerPoint

			object(WP_Post)#2969 (24) {
  ["ID"]=>
  int(1178)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-08-18 18:22:52"
  ["post_date_gmt"]=>
  string(19) "2024-08-18 18:22:52"
  ["post_content"]=>
  string(893) "

在Netbeans裏可以看到編程學會的Maven Repo上面有沒有你submit的jar

" ["post_title"]=> string(22) "編程學會Maven Repo" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(46) "%e7%b7%a8%e7%a8%8b%e5%ad%b8%e6%9c%83maven-repo" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-08-18 18:22:52" ["post_modified_gmt"]=> string(19) "2024-08-18 18:22:52" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1178" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
編程學會Maven Repo
在Netbeans裏可以看到編程學會的Maven Repo上面有沒有你submit的jar

在Netbeans裏可以看到編程學會的Maven Repo上面有沒有你submit的jar

			object(WP_Post)#2968 (24) {
  ["ID"]=>
  int(1165)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-08-16 13:53:44"
  ["post_date_gmt"]=>
  string(19) "2024-08-16 13:53:44"
  ["post_content"]=>
  string(2376) "








Executable Jar

Submit左個jar上編程學會,其它project想用,可以咁樣揾返個dependency

如果我想知你地寫咩function, 我click呢個制就會睇到

" ["post_title"]=> string(45) "Java第14堂: Maven Repo & Executable Jar" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(34) "java-lesson-14-maven-repo-exec-jar" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-08-18 09:34:37" ["post_modified_gmt"]=> string(19) "2024-08-18 09:34:37" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1165" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java第14堂: Maven Repo & Executable Jar
Executable Jar Submit左個jar上編程學會,其它project想用,可以咁樣揾返個dependency 如果我想知你地寫咩function, 我click呢個制就會睇到

Executable Jar

Submit左個jar上編程學會,其它project想用,可以咁樣揾返個dependency

如果我想知你地寫咩function, 我click呢個制就會睇到

			object(WP_Post)#2967 (24) {
  ["ID"]=>
  int(1154)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-08-12 16:13:47"
  ["post_date_gmt"]=>
  string(19) "2024-08-12 16:13:47"
  ["post_content"]=>
  string(3232) "

計劃名稱:為香港出力

口號 : 唔好講嘢,實際開發

計劃詳情

     香港編程學會為社會提供義務教育,吸引到一大批對編程有濃厚興趣之年青人,編程學會透過一系列課程,真接拉高他們之技術,令他們從小就擁有實際的軟件開發能力。現在是時候貢獻香港了,我們將會發起號召及組織,團結業界學界及年青人,貢獻一己的力量,開發一系列的開源工具,提升香港生產力及香港Programmer之榮譽感。

計劃為什麼重要

     香港IT界一直以來給人的印象就是說話多,實際輸出少。 香港人過去二十年在軟件開發上連一個回憶都沒有。計劃作出三方面大膽嘗試

  • 嘗試團結眾人參與軟件開發
  • 嘗試以實際開發,拉高全民開發力
  • 嘗試動員以住沒有想過的對象:年青人, 萬人成功, 我們就可擁有巨力動力

計劃分工:

  • 香港編程學會 : 提供教育及技術支持
  • 生產力局 : 提供場地,宣傳及動員的支持 (傾談中)
  • 創科局 : 提供資金支持 (傾談中)

分階段實行

     第一階段:動員十名編程資優生參與開源小工具開發。圍繞住Microsoft世界開發一些補完功能型的工具,再投放給香港各NGO使用

     第二階段:動員一百名編程資優生,參與完整Full Stack開發,務求建立香港編程文化

     第三階段:動員一千名編程資優生,向軟件界核心領域例如OS/Compiler等推進

" ["post_title"]=> string(8) "We serve" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(8) "we-serve" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-08-12 16:16:04" ["post_modified_gmt"]=> string(19) "2024-08-12 16:16:04" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1154" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
We serve
計劃名稱:為香港出力 口號 : 唔好講嘢,實際開發 計劃詳情      香港編程學會為社會提供義務教育,吸引到一大批對編程有濃厚興趣之年青人,編程學會透過一系列課程,真接拉高他們之技術,令他們從小就擁有實際的軟件開發能力。現在是時候貢獻香港了,我們將會發起號召及組織,團結業界學界及年青人,貢獻一己的力量,開發一系列的開源工具,提升香港生產力及香港Programmer之榮譽感。 計劃為什麼重要      香港IT界一直以來給人的印象就是說話多,實際輸出少。 香港人過去二十年在軟件開發上連一個回憶都沒有。計劃作出三方面大膽嘗試 計劃分工: 分階段實行      第一階段:動員十名編程資優生參與開源小工具開發。圍繞住Microsoft世界開發一些補完功能型的工具,再投放給香港各NGO使用      第二階段:動員一百名編程資優生,參與完整Full Stack開發,務求建立香港編程文化      第三階段:動員一千名編程資優生,向軟件界核心領域例如OS/Compiler等推進

計劃名稱:為香港出力

口號 : 唔好講嘢,實際開發

計劃詳情

     香港編程學會為社會提供義務教育,吸引到一大批對編程有濃厚興趣之年青人,編程學會透過一系列課程,真接拉高他們之技術,令他們從小就擁有實際的軟件開發能力。現在是時候貢獻香港了,我們將會發起號召及組織,團結業界學界及年青人,貢獻一己的力量,開發一系列的開源工具,提升香港生產力及香港Programmer之榮譽感。

計劃為什麼重要

     香港IT界一直以來給人的印象就是說話多,實際輸出少。 香港人過去二十年在軟件開發上連一個回憶都沒有。計劃作出三方面大膽嘗試

  • 嘗試團結眾人參與軟件開發
  • 嘗試以實際開發,拉高全民開發力
  • 嘗試動員以住沒有想過的對象:年青人, 萬人成功, 我們就可擁有巨力動力

計劃分工:

  • 香港編程學會 : 提供教育及技術支持
  • 生產力局 : 提供場地,宣傳及動員的支持 (傾談中)
  • 創科局 : 提供資金支持 (傾談中)

分階段實行

     第一階段:動員十名編程資優生參與開源小工具開發。圍繞住Microsoft世界開發一些補完功能型的工具,再投放給香港各NGO使用

     第二階段:動員一百名編程資優生,參與完整Full Stack開發,務求建立香港編程文化

     第三階段:動員一千名編程資優生,向軟件界核心領域例如OS/Compiler等推進

			object(WP_Post)#2966 (24) {
  ["ID"]=>
  int(1143)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-08-09 13:49:09"
  ["post_date_gmt"]=>
  string(19) "2024-08-09 13:49:09"
  ["post_content"]=>
  string(904) "





"
  ["post_title"]=>
  string(33) "Java第13堂: XPath & XStream"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(38) "java%e7%ac%ac13%e5%a0%82-xpath-xstream"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-08-09 13:49:33"
  ["post_modified_gmt"]=>
  string(19) "2024-08-09 13:49:33"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(30) "https://www.hkprog.org/?p=1143"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Java第13堂: XPath & XStream
			object(WP_Post)#2965 (24) {
  ["ID"]=>
  int(1134)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-08-06 03:58:21"
  ["post_date_gmt"]=>
  string(19) "2024-08-06 03:58:21"
  ["post_content"]=>
  string(1290) "




" ["post_title"]=> string(23) "RISC-V Day -16 Feb 2024" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(22) "risc-v-day-16-feb-2024" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-08-06 03:58:35" ["post_modified_gmt"]=> string(19) "2024-08-06 03:58:35" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1134" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
RISC-V Day -16 Feb 2024
			object(WP_Post)#2964 (24) {
  ["ID"]=>
  int(1124)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-08-02 14:29:20"
  ["post_date_gmt"]=>
  string(19) "2024-08-02 14:29:20"
  ["post_content"]=>
  string(904) "





"
  ["post_title"]=>
  string(37) "Java第12堂: Swing Layouts & XML"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(15) "java-lession-12"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-08-02 14:30:38"
  ["post_modified_gmt"]=>
  string(19) "2024-08-02 14:30:38"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(30) "https://www.hkprog.org/?p=1124"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Java第12堂: Swing Layouts & XML
			object(WP_Post)#2963 (24) {
  ["ID"]=>
  int(1086)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-08-01 03:27:46"
  ["post_date_gmt"]=>
  string(19) "2024-08-01 03:27:46"
  ["post_content"]=>
  string(8417) "

七月份,香港編程學會舉辦了一場別開生面的聚會及生日會,展示了學會成員之間的團結和友誼。這次活動在一個溫馨的BBQ場地舉行,吸引了眾多成員參加。

活動開始時,學會主席致辭,回顧了過去一年的成就,並展望未來的計劃。隨後,成員們分享了各自的編程經驗和心得,討論了最新的技術趨勢和項目進展。這些交流不僅增進了彼此的了解,也激發了新的創意和合作機會。

在生日會環節,學會特別為七月份生日的成員準備了精美的蛋糕。大家一起唱生日歌,分享甜點,氣氛溫馨而愉快。這一刻,不僅讓壽星們感受到來自學會的關愛,也讓所有成員感受到集體的溫暖。

整個活動充滿了歡聲笑語,成員們在輕鬆愉快的氛圍中加深了彼此的友誼。這次聚會不僅展示了香港編程學會的團結一面,也為未來的合作奠定了堅實的基礎。

希望未來的每一次聚會,都能像這次一樣,充滿歡樂和溫暖,讓學會成員們在共同學習和成長的道路上,攜手並進。

" ["post_title"]=> string(39) "七月份編程學會眾會及生日會" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(9) "202407bbq" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-09-05 05:26:43" ["post_modified_gmt"]=> string(19) "2024-09-05 05:26:43" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1086" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
七月份編程學會眾會及生日會
七月份,香港編程學會舉辦了一場別開生面的聚會及生日會,展示了學會成員之間的團結和友誼。這次活動在一個溫馨的BBQ場地舉行,吸引了眾多成員參加。 活動開始時,學會主席致辭,回顧了過去一年的成就,並展望未來的計劃。隨後,成員們分享了各自的編程經驗和心得,討論了最新的技術趨勢和項目進展。這些交流不僅增進了彼此的了解,也激發了新的創意和合作機會。 在生日會環節,學會特別為七月份生日的成員準備了精美的蛋糕。大家一起唱生日歌,分享甜點,氣氛溫馨而愉快。這一刻,不僅讓壽星們感受到來自學會的關愛,也讓所有成員感受到集體的溫暖。 整個活動充滿了歡聲笑語,成員們在輕鬆愉快的氛圍中加深了彼此的友誼。這次聚會不僅展示了香港編程學會的團結一面,也為未來的合作奠定了堅實的基礎。 希望未來的每一次聚會,都能像這次一樣,充滿歡樂和溫暖,讓學會成員們在共同學習和成長的道路上,攜手並進。

七月份,香港編程學會舉辦了一場別開生面的聚會及生日會,展示了學會成員之間的團結和友誼。這次活動在一個溫馨的BBQ場地舉行,吸引了眾多成員參加。

活動開始時,學會主席致辭,回顧了過去一年的成就,並展望未來的計劃。隨後,成員們分享了各自的編程經驗和心得,討論了最新的技術趨勢和項目進展。這些交流不僅增進了彼此的了解,也激發了新的創意和合作機會。

在生日會環節,學會特別為七月份生日的成員準備了精美的蛋糕。大家一起唱生日歌,分享甜點,氣氛溫馨而愉快。這一刻,不僅讓壽星們感受到來自學會的關愛,也讓所有成員感受到集體的溫暖。

整個活動充滿了歡聲笑語,成員們在輕鬆愉快的氛圍中加深了彼此的友誼。這次聚會不僅展示了香港編程學會的團結一面,也為未來的合作奠定了堅實的基礎。

希望未來的每一次聚會,都能像這次一樣,充滿歡樂和溫暖,讓學會成員們在共同學習和成長的道路上,攜手並進。

			object(WP_Post)#2962 (24) {
  ["ID"]=>
  int(1046)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-07-20 08:38:38"
  ["post_date_gmt"]=>
  string(19) "2024-07-20 08:38:38"
  ["post_content"]=>
  string(3051) "

今次教導了幾名青少年開始學習編程,教授了一些編程的基礎技術。我們生活在一個數字化的世界,編程已經成為我們日常生活中不可或缺的一部分。無論是手機應用程序,還是我們使用的各種網站,都是由編程語言創建的。學習編程可以開啟一扇通往創新和創造力的大門,讓我們有能力去創建和控制自己的數字世界。

義教編程是一種強大的力量,可以幫助青少年開始這個旅程。感謝仁濟醫院兒童發展基金提供了一個友好和支持的環境,讓你們可以在專業的指導下學習編程。這些義工老師都是經驗豐富的編程專家,他們熱衷於分享他們的知識和經驗,幫助你們建立堅實的編程基礎。 2024 Jul 20

" ["post_title"]=> string(47) "編程義敎 : 仁濟醫院兒童發展基金" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(14) "20240720_ychss" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-07-20 09:29:54" ["post_modified_gmt"]=> string(19) "2024-07-20 09:29:54" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1046" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
編程義敎 : 仁濟醫院兒童發展基金
今次教導了幾名青少年開始學習編程,教授了一些編程的基礎技術。我們生活在一個數字化的世界,編程已經成為我們日常生活中不可或缺的一部分。無論是手機應用程序,還是我們使用的各種網站,都是由編程語言創建的。學習編程可以開啟一扇通往創新和創造力的大門,讓我們有能力去創建和控制自己的數字世界。 義教編程是一種強大的力量,可以幫助青少年開始這個旅程。感謝仁濟醫院兒童發展基金提供了一個友好和支持的環境,讓你們可以在專業的指導下學習編程。這些義工老師都是經驗豐富的編程專家,他們熱衷於分享他們的知識和經驗,幫助你們建立堅實的編程基礎。 2024 Jul 20

今次教導了幾名青少年開始學習編程,教授了一些編程的基礎技術。我們生活在一個數字化的世界,編程已經成為我們日常生活中不可或缺的一部分。無論是手機應用程序,還是我們使用的各種網站,都是由編程語言創建的。學習編程可以開啟一扇通往創新和創造力的大門,讓我們有能力去創建和控制自己的數字世界。

義教編程是一種強大的力量,可以幫助青少年開始這個旅程。感謝仁濟醫院兒童發展基金提供了一個友好和支持的環境,讓你們可以在專業的指導下學習編程。這些義工老師都是經驗豐富的編程專家,他們熱衷於分享他們的知識和經驗,幫助你們建立堅實的編程基礎。 2024 Jul 20

			object(WP_Post)#2961 (24) {
  ["ID"]=>
  int(1040)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-07-20 03:05:38"
  ["post_date_gmt"]=>
  string(19) "2024-07-20 03:05:38"
  ["post_content"]=>
  string(904) "





"
  ["post_title"]=>
  string(37) "Java第11堂: Generics & Netbeans"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(14) "java-lesson-11"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-07-20 03:07:40"
  ["post_modified_gmt"]=>
  string(19) "2024-07-20 03:07:40"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(30) "https://www.hkprog.org/?p=1040"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Java第11堂: Generics & Netbeans
			object(WP_Post)#2960 (24) {
  ["ID"]=>
  int(1031)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-07-20 02:51:33"
  ["post_date_gmt"]=>
  string(19) "2024-07-20 02:51:33"
  ["post_content"]=>
  string(4583) "












範例代碼

a.asm:

bits 16
%define ONE    1

org 0x7c00
	mov ax, 0xb800
	mov es, ax
	mov byte [es:0], 'P'
	mov byte [es:1], 4
	mov byte [es:2], 'e'
	mov byte [es:3], 3

loop1:
	jmp loop1

	times   512-($-$$)-2    db      0
	signature       dw      0xaa55

bochsrcSDL.bxrc:

###############################################################
# bochsrc.txt file for DLX Linux disk image.
###############################################################

# how much memory the emulated machine will have
megs: 16

# hard disk
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="hd.img", mode=flat, cylinders=40, heads=16, spt=63

# choose the boot disk.
boot: c

#display_library: term
# other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga
display_library: sdl2

# where do we send log messages?
log: bochsout.txt

# disable the mouse, since DLX is text only
mouse: enabled=0

magic_break: enabled=1

#debug: action=report
info: action=report
error: action=report
panic: action=report

insertData.sh:

#!/bin/bash

if [ $# != 4 ]; then
	echo "Usage : insertData.sh source dest <source skip position> <dest seek position>"
	exit;
fi

source_size=$(ls -l $1 | awk {'print $5'})
#dest_size=$(ls -l $2 | awk {'print $5'})
total_seek_size=$((source_size + $4))
#dd if=$2 of=insertData_temp skip=$total_seek_size ibs=1 obs=1MB > /dev/null
if [ $4 = 0 ]; then
	rm -fr first
	touch first
else
	echo "dd if=$2 of=first bs=$4 count=1";
	dd if=$2 of=first bs=$4 count=1
fi

#### back #####
echo "dd if=$2 of=back skip=1 bs=$total_seek_size";
dd if=$2 of=back skip=1 bs=$total_seek_size

cat first $1 back > $2

rm -fr first back

編譯指令

nasm a.asm -l a.lst
./insertData.sh a hd.img 0 0
bochs -f bochsrcSDL.bxrc
" ["post_title"]=> string(14) "x86 ASM第2堂" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(16) "x86-asm-lesson-2" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-07-20 03:06:30" ["post_modified_gmt"]=> string(19) "2024-07-20 03:06:30" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(30) "https://www.hkprog.org/?p=1031" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
x86 ASM第2堂
注意,在bochsrcSDL.bxrc不需要這兩句,否則就會做成video framebuffer 0xb8000不能使用 範例代碼 a.asm: bochsrcSDL.bxrc: insertData.sh: 編譯指令

範例代碼

a.asm:

bits 16
%define ONE    1

org 0x7c00
	mov ax, 0xb800
	mov es, ax
	mov byte [es:0], 'P'
	mov byte [es:1], 4
	mov byte [es:2], 'e'
	mov byte [es:3], 3

loop1:
	jmp loop1

	times   512-($-$$)-2    db      0
	signature       dw      0xaa55

bochsrcSDL.bxrc:

###############################################################
# bochsrc.txt file for DLX Linux disk image.
###############################################################

# how much memory the emulated machine will have
megs: 16

# hard disk
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="hd.img", mode=flat, cylinders=40, heads=16, spt=63

# choose the boot disk.
boot: c

#display_library: term
# other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga
display_library: sdl2

# where do we send log messages?
log: bochsout.txt

# disable the mouse, since DLX is text only
mouse: enabled=0

magic_break: enabled=1

#debug: action=report
info: action=report
error: action=report
panic: action=report

insertData.sh:

#!/bin/bash

if [ $# != 4 ]; then
	echo "Usage : insertData.sh source dest <source skip position> <dest seek position>"
	exit;
fi

source_size=$(ls -l $1 | awk {'print $5'})
#dest_size=$(ls -l $2 | awk {'print $5'})
total_seek_size=$((source_size + $4))
#dd if=$2 of=insertData_temp skip=$total_seek_size ibs=1 obs=1MB > /dev/null
if [ $4 = 0 ]; then
	rm -fr first
	touch first
else
	echo "dd if=$2 of=first bs=$4 count=1";
	dd if=$2 of=first bs=$4 count=1
fi

#### back #####
echo "dd if=$2 of=back skip=1 bs=$total_seek_size";
dd if=$2 of=back skip=1 bs=$total_seek_size

cat first $1 back > $2

rm -fr first back

編譯指令

nasm a.asm -l a.lst
./insertData.sh a hd.img 0 0
bochs -f bochsrcSDL.bxrc
			object(WP_Post)#2959 (24) {
  ["ID"]=>
  int(997)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-07-12 09:44:45"
  ["post_date_gmt"]=>
  string(19) "2024-07-12 09:44:45"
  ["post_content"]=>
  string(904) "





"
  ["post_title"]=>
  string(31) "Java第10堂: Inheritance again"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(14) "java-lesson-10"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-07-13 01:27:54"
  ["post_modified_gmt"]=>
  string(19) "2024-07-13 01:27:54"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(29) "https://www.hkprog.org/?p=997"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Java第10堂: Inheritance again
			object(WP_Post)#2958 (24) {
  ["ID"]=>
  int(951)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-07-10 15:55:46"
  ["post_date_gmt"]=>
  string(19) "2024-07-10 15:55:46"
  ["post_content"]=>
  string(5680) "








下載nasm https://www.nasm.us/

下載bochs https://bochs.sourceforge.io/ , 如果在linux或mac,可以試下自己build

./configure --enable-debugger --enable-debugger-gui --with-sdl2 --with-nogui --with-term
make -j
make install

Asm例子

a.asm:

org 0x7c00
	mov	ax,1
	mov	bx,2
	add ax, bx   ; ax = ax + bx
	inc ax
	sub ax, bx	 ; ax = ax - bx

	mov ah, byte [ds:bx]

	xor ch,ch    ; set zero
	mov byte [ds:bx], ch
	
loop1:
	jmp loop1

	times   512-($-$$)-2    db      0
	signature       dw      0xaa55

bochsrcSDL.bxrc:

###############################################################
# bochsrc.txt file for DLX Linux disk image.
###############################################################

# how much memory the emulated machine will have
megs: 16

# filename of ROM images
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest

# what disk images will be used
#floppya: 1_44=../bootimage, status=inserted
#floppyb: 1_44=floppyb.img, status=inserted

# hard disk
#ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
#ata0-master: type=disk, path="hd10meg.img", cylinders=306, heads=4, spt=17
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
#ata0-master: type=disk, path="10mb.img", mode=flat, cylinders=20, heads=16, spt=63
ata0-master: type=disk, path="hd.img", mode=flat, cylinders=40, heads=16, spt=63
#ata0-master: type=disk, path="../hd.img", mode=flat, cylinders=203, heads=16, spt=63	# 100MB
#ata0-master: type=disk, path="../harddisk", mode=flat, cylinders=2080, heads=16, spt=63   # 1GB

# choose the boot disk.
boot: c

#display_library: term
# other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga
display_library: sdl2

# where do we send log messages?
log: bochsout.txt

# disable the mouse, since DLX is text only
mouse: enabled=0

# enable key mapping, using US layout as default.
#
# NOTE: In Bochs 1.4, keyboard mapping is only 100% implemented on X windows.
# However, the key mapping tables are used in the paste function, so
# in the DLX Linux example I'm enabling keyboard_mapping so that paste
# will work.  Cut&Paste is currently implemented on win32 and X windows only.

#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-us.map
#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-fr.map
#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-de.map
#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-es.map

magic_break: enabled=1

#debug: action=report
info: action=report
error: action=report
panic: action=report

insertData.sh:

#!/bin/bash

if [ $# != 4 ]; then
	echo "Usage : insertData.sh source dest <source skip position> <dest seek position>"
	exit;
fi

source_size=$(ls -l $1 | awk {'print $5'})
#dest_size=$(ls -l $2 | awk {'print $5'})
total_seek_size=$((source_size + $4))
#dd if=$2 of=insertData_temp skip=$total_seek_size ibs=1 obs=1MB > /dev/null
if [ $4 = 0 ]; then
	rm -fr first
	touch first
else
	echo "dd if=$2 of=first bs=$4 count=1";
	dd if=$2 of=first bs=$4 count=1
fi

#### back #####
echo "dd if=$2 of=back skip=1 bs=$total_seek_size";
dd if=$2 of=back skip=1 bs=$total_seek_size

cat first $1 back > $2

rm -fr first back

Compile指令:

nasm a.asm -l a.lst
dd if=/dev/zero of=hd.img count=3072 bs=10240
./insertData.sh a hd.img 0 0
bochs -q -f bochsrcSDL.bxrc
" ["post_title"]=> string(14) "x86 ASM第1堂" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(16) "x86-asm-lesson-1" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-07-10 16:48:01" ["post_modified_gmt"]=> string(19) "2024-07-10 16:48:01" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=951" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
x86 ASM第1堂
下載nasm https://www.nasm.us/ 下載bochs https://bochs.sourceforge.io/ , 如果在linux或mac,可以試下自己build Asm例子 a.asm: bochsrcSDL.bxrc: insertData.sh: Compile指令:

下載nasm https://www.nasm.us/

下載bochs https://bochs.sourceforge.io/ , 如果在linux或mac,可以試下自己build

./configure --enable-debugger --enable-debugger-gui --with-sdl2 --with-nogui --with-term
make -j
make install

Asm例子

a.asm:

org 0x7c00
	mov	ax,1
	mov	bx,2
	add ax, bx   ; ax = ax + bx
	inc ax
	sub ax, bx	 ; ax = ax - bx

	mov ah, byte [ds:bx]

	xor ch,ch    ; set zero
	mov byte [ds:bx], ch
	
loop1:
	jmp loop1

	times   512-($-$$)-2    db      0
	signature       dw      0xaa55

bochsrcSDL.bxrc:

###############################################################
# bochsrc.txt file for DLX Linux disk image.
###############################################################

# how much memory the emulated machine will have
megs: 16

# filename of ROM images
romimage: file=$BXSHARE/BIOS-bochs-latest
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest

# what disk images will be used
#floppya: 1_44=../bootimage, status=inserted
#floppyb: 1_44=floppyb.img, status=inserted

# hard disk
#ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
#ata0-master: type=disk, path="hd10meg.img", cylinders=306, heads=4, spt=17
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
#ata0-master: type=disk, path="10mb.img", mode=flat, cylinders=20, heads=16, spt=63
ata0-master: type=disk, path="hd.img", mode=flat, cylinders=40, heads=16, spt=63
#ata0-master: type=disk, path="../hd.img", mode=flat, cylinders=203, heads=16, spt=63	# 100MB
#ata0-master: type=disk, path="../harddisk", mode=flat, cylinders=2080, heads=16, spt=63   # 1GB

# choose the boot disk.
boot: c

#display_library: term
# other choices: win32 sdl wx carbon amigaos beos macintosh nogui rfb term svga
display_library: sdl2

# where do we send log messages?
log: bochsout.txt

# disable the mouse, since DLX is text only
mouse: enabled=0

# enable key mapping, using US layout as default.
#
# NOTE: In Bochs 1.4, keyboard mapping is only 100% implemented on X windows.
# However, the key mapping tables are used in the paste function, so
# in the DLX Linux example I'm enabling keyboard_mapping so that paste
# will work.  Cut&Paste is currently implemented on win32 and X windows only.

#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-us.map
#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-fr.map
#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-de.map
#keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-es.map

magic_break: enabled=1

#debug: action=report
info: action=report
error: action=report
panic: action=report

insertData.sh:

#!/bin/bash

if [ $# != 4 ]; then
	echo "Usage : insertData.sh source dest <source skip position> <dest seek position>"
	exit;
fi

source_size=$(ls -l $1 | awk {'print $5'})
#dest_size=$(ls -l $2 | awk {'print $5'})
total_seek_size=$((source_size + $4))
#dd if=$2 of=insertData_temp skip=$total_seek_size ibs=1 obs=1MB > /dev/null
if [ $4 = 0 ]; then
	rm -fr first
	touch first
else
	echo "dd if=$2 of=first bs=$4 count=1";
	dd if=$2 of=first bs=$4 count=1
fi

#### back #####
echo "dd if=$2 of=back skip=1 bs=$total_seek_size";
dd if=$2 of=back skip=1 bs=$total_seek_size

cat first $1 back > $2

rm -fr first back

Compile指令:

nasm a.asm -l a.lst
dd if=/dev/zero of=hd.img count=3072 bs=10240
./insertData.sh a hd.img 0 0
bochs -q -f bochsrcSDL.bxrc
			object(WP_Post)#2957 (24) {
  ["ID"]=>
  int(895)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-07-07 04:37:14"
  ["post_date_gmt"]=>
  string(19) "2024-07-07 04:37:14"
  ["post_content"]=>
  string(2786) "

Thank you HKOSCON, their Chairman Mr Sammy, and all members for the chance to present there

" ["post_title"]=> string(12) "HKOSCON 2024" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(12) "hkoscon-2024" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-07-07 04:38:35" ["post_modified_gmt"]=> string(19) "2024-07-07 04:38:35" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=895" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
HKOSCON 2024
Thank you HKOSCON, their Chairman Mr Sammy, and all members for the chance to present there

Thank you HKOSCON, their Chairman Mr Sammy, and all members for the chance to present there

			object(WP_Post)#2956 (24) {
  ["ID"]=>
  int(855)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-07-05 14:05:30"
  ["post_date_gmt"]=>
  string(19) "2024-07-05 14:05:30"
  ["post_content"]=>
  string(902) "





"
  ["post_title"]=>
  string(38) "Java第9堂: Constructor & Multithread"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(13) "java-lesson-9"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-07-05 15:31:42"
  ["post_modified_gmt"]=>
  string(19) "2024-07-05 15:31:42"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(29) "https://www.hkprog.org/?p=855"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Java第9堂: Constructor & Multithread
			object(WP_Post)#2955 (24) {
  ["ID"]=>
  int(844)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-07-03 13:39:41"
  ["post_date_gmt"]=>
  string(19) "2024-07-03 13:39:41"
  ["post_content"]=>
  string(2029) "

終於找到一位有心人Charles Ng先生帶領大家成立Embedded System Special Interest Group,本會和吳先生承諾呢個SIG會last for最少一年,吳先生會搞兩次workshop,會長亦都會一對一搞另多兩次workshop以作支持。吳先生是業界從事嵌入式開發超過幾十年之專業人士,佢自己實作左塊PCB可以mount raspberry pi cm上去,佢會舉辦workshop教一教大家點做,請大家支持。

吳先生作品

" ["post_title"]=> string(50) "Embedded System Special Interest Group宣布成立" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(38) "embedded-system-special-interest-group" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-07-03 15:23:05" ["post_modified_gmt"]=> string(19) "2024-07-03 15:23:05" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=844" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Embedded System Special Interest Group宣布成立
終於找到一位有心人Charles Ng先生帶領大家成立Embedded System Special Interest Group,本會和吳先生承諾呢個SIG會last for最少一年,吳先生會搞兩次workshop,會長亦都會一對一搞另多兩次workshop以作支持。吳先生是業界從事嵌入式開發超過幾十年之專業人士,佢自己實作左塊PCB可以mount raspberry pi cm上去,佢會舉辦workshop教一教大家點做,請大家支持。 吳先生作品

終於找到一位有心人Charles Ng先生帶領大家成立Embedded System Special Interest Group,本會和吳先生承諾呢個SIG會last for最少一年,吳先生會搞兩次workshop,會長亦都會一對一搞另多兩次workshop以作支持。吳先生是業界從事嵌入式開發超過幾十年之專業人士,佢自己實作左塊PCB可以mount raspberry pi cm上去,佢會舉辦workshop教一教大家點做,請大家支持。

吳先生作品

			object(WP_Post)#2954 (24) {
  ["ID"]=>
  int(773)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-06-30 06:38:05"
  ["post_date_gmt"]=>
  string(19) "2024-06-30 06:38:05"
  ["post_content"]=>
  string(25143) "





















"
  ["post_title"]=>
  string(33) "Azure User Group聚會 2024/06/29"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(33) "azure-user-group-meetup2024-06-29"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-06-30 06:41:15"
  ["post_modified_gmt"]=>
  string(19) "2024-06-30 06:41:15"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(29) "https://www.hkprog.org/?p=773"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Azure User Group聚會 2024/06/29
			object(WP_Post)#2953 (24) {
  ["ID"]=>
  int(766)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-06-28 08:06:53"
  ["post_date_gmt"]=>
  string(19) "2024-06-28 08:06:53"
  ["post_content"]=>
  string(899) "





"
  ["post_title"]=>
  string(41) "Java第8堂: Overriding & Static func"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(13) "java-lesson-8"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-06-28 14:14:04"
  ["post_modified_gmt"]=>
  string(19) "2024-06-28 14:14:04"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(29) "https://www.hkprog.org/?p=766"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Java第8堂: Overriding & Static func
			object(WP_Post)#2952 (24) {
  ["ID"]=>
  int(755)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-06-21 15:14:46"
  ["post_date_gmt"]=>
  string(19) "2024-06-21 15:14:46"
  ["post_content"]=>
  string(1801) "








功課一

功課二

" ["post_title"]=> string(92) "Java第7堂: Interface接口 & Polymorphism多態 & Exception例外 & Java Swing" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(13) "java-lesson-7" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-06-21 15:15:27" ["post_modified_gmt"]=> string(19) "2024-06-21 15:15:27" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=755" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java第7堂: Interface接口 & Polymorphism多態 & Exception例外 & Java Swing
功課一 功課二

功課一

功課二

			object(WP_Post)#2951 (24) {
  ["ID"]=>
  int(736)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-06-14 11:18:45"
  ["post_date_gmt"]=>
  string(19) "2024-06-14 11:18:45"
  ["post_content"]=>
  string(2733) "








Stack例子:

import java.util.Stack;

public class Example6 {
	public static void main(String args[]) {
		Stack<String> s = new Stack();
		s.add("A");
		s.add("B");
		s.add("C");

		s.remove(1);
		System.out.println(s.size());

		System.out.println(s.pop());
		if (!s.empty()) {
			System.out.println(s.pop());
		}
		System.out.println(s.pop());
		if (!s.empty()) {
			System.out.println(s.pop());
		}
	}
}

LinkedList例子:

import java.util.LinkedList;

public class Example6 {
	public static void main(String args[]) {
		LinkedList<String> list = new LinkedList();
		list.add("Peter 1");
		list.add("Peter 2");
		list.add("Peter 3");

		for (int x = 0; x < list.size(); x++) {
			System.out.println(list.get(x));
		}
	}
}
" ["post_title"]=> string(43) "Java第6堂: Data Structure & OOP again" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(13) "java-lesson-6" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-06-15 17:15:17" ["post_modified_gmt"]=> string(19) "2024-06-15 17:15:17" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=736" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java第6堂: Data Structure & OOP again
Stack例子: LinkedList例子: 注意 : 如果用VSCode打Code,淺灰式e:只是提示不是真正代碼,不用打去你段Code到

Stack例子:

import java.util.Stack;

public class Example6 {
	public static void main(String args[]) {
		Stack<String> s = new Stack();
		s.add("A");
		s.add("B");
		s.add("C");

		s.remove(1);
		System.out.println(s.size());

		System.out.println(s.pop());
		if (!s.empty()) {
			System.out.println(s.pop());
		}
		System.out.println(s.pop());
		if (!s.empty()) {
			System.out.println(s.pop());
		}
	}
}

LinkedList例子:

import java.util.LinkedList;

public class Example6 {
	public static void main(String args[]) {
		LinkedList<String> list = new LinkedList();
		list.add("Peter 1");
		list.add("Peter 2");
		list.add("Peter 3");

		for (int x = 0; x < list.size(); x++) {
			System.out.println(list.get(x));
		}
	}
}
			object(WP_Post)#2950 (24) {
  ["ID"]=>
  int(721)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-06-07 16:20:13"
  ["post_date_gmt"]=>
  string(19) "2024-06-07 16:20:13"
  ["post_content"]=>
  string(1946) "








功課一 : 改下段Bubble Sort Code令到佢唔好Loop咁多次

功課二:將下面張圖轉成Code

" ["post_title"]=> string(45) "Java第5堂: Sorting & OOP(Class, Object)" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(13) "java-lesson-5" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-06-07 16:25:25" ["post_modified_gmt"]=> string(19) "2024-06-07 16:25:25" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=721" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java第5堂: Sorting & OOP(Class, Object)
功課一 : 改下段Bubble Sort Code令到佢唔好Loop咁多次 功課二:將下面張圖轉成Code

功課一 : 改下段Bubble Sort Code令到佢唔好Loop咁多次

功課二:將下面張圖轉成Code

			object(WP_Post)#2949 (24) {
  ["ID"]=>
  int(702)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-05-31 14:59:02"
  ["post_date_gmt"]=>
  string(19) "2024-05-31 14:59:02"
  ["post_content"]=>
  string(899) "





"
  ["post_title"]=>
  string(29) "Java第4堂: Array & Loop"
  ["post_excerpt"]=>
  string(0) ""
  ["post_status"]=>
  string(7) "publish"
  ["comment_status"]=>
  string(4) "open"
  ["ping_status"]=>
  string(4) "open"
  ["post_password"]=>
  string(0) ""
  ["post_name"]=>
  string(34) "java%e7%ac%ac4%e5%a0%82-array-loop"
  ["to_ping"]=>
  string(0) ""
  ["pinged"]=>
  string(0) ""
  ["post_modified"]=>
  string(19) "2024-05-31 15:02:22"
  ["post_modified_gmt"]=>
  string(19) "2024-05-31 15:02:22"
  ["post_content_filtered"]=>
  string(0) ""
  ["post_parent"]=>
  int(0)
  ["guid"]=>
  string(29) "https://www.hkprog.org/?p=702"
  ["menu_order"]=>
  int(0)
  ["post_type"]=>
  string(4) "post"
  ["post_mime_type"]=>
  string(0) ""
  ["comment_count"]=>
  string(1) "0"
  ["filter"]=>
  string(3) "raw"
}
		
Java第4堂: Array & Loop
			object(WP_Post)#2948 (24) {
  ["ID"]=>
  int(688)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-05-24 15:04:17"
  ["post_date_gmt"]=>
  string(19) "2024-05-24 15:04:17"
  ["post_content"]=>
  string(1733) "








功課一

功課二

" ["post_title"]=> string(21) "Java第3堂: For Loop" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(32) "java%e7%ac%ac3%e5%a0%82-for-loop" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-05-24 15:09:02" ["post_modified_gmt"]=> string(19) "2024-05-24 15:09:02" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=688" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java第3堂: For Loop
功課一 功課二

功課一

功課二

			object(WP_Post)#2947 (24) {
  ["ID"]=>
  int(679)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-05-17 17:15:08"
  ["post_date_gmt"]=>
  string(19) "2024-05-17 17:15:08"
  ["post_content"]=>
  string(1446) "








練習

public class Example1{
	public static void main(String args[]){
		int score=55;

		if (score >= 80){
			System.out.println("A");
		}else if (score >= 60){
			System.out.println("B");
		}else if (score >= 40){
			System.out.println("C");
		}else{
			System.out.println("F");
		}

		System.out.println("End");
	}
}
" ["post_title"]=> string(33) "Java第2堂 : Variable & Loop" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(6) "java-2" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-05-18 03:51:14" ["post_modified_gmt"]=> string(19) "2024-05-18 03:51:14" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=679" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java第2堂 : Variable & Loop
練習

練習

public class Example1{
	public static void main(String args[]){
		int score=55;

		if (score >= 80){
			System.out.println("A");
		}else if (score >= 60){
			System.out.println("B");
		}else if (score >= 40){
			System.out.println("C");
		}else{
			System.out.println("F");
		}

		System.out.println("End");
	}
}
			object(WP_Post)#2946 (24) {
  ["ID"]=>
  int(641)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-05-10 16:51:25"
  ["post_date_gmt"]=>
  string(19) "2024-05-10 16:51:25"
  ["post_content"]=>
  string(5935) "




PowerPoint

Notes

  1. 下載Java https://java.sun.com
  1. 以下是HelloWorld代碼
class Example1{
    public static void main(String args[]){
          System.out.println("Hello World");
    }
}

Compile指令

javac Example1.java
java Example1

常見錯誤

錯誤一 : 打錯字

首先打錯字唔洗驚, 睇下個Error Message, 佢會有個箭咀指住大約錯邊個位, 同埋有個行數, 跟住就可以揾到錯邊

錯誤二: Save錯文件名

錯誤張文件名Save做.java.txt, 所有Java文件必需要用.java做尾. 你地係notebook到要簡下面嘅撰項

" ["post_title"]=> string(12) "Java 第1堂" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(6) "java-1" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-05-13 09:00:19" ["post_modified_gmt"]=> string(19) "2024-05-13 09:00:19" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=641" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Java 第1堂
PowerPoint Notes Compile指令 javac Example1.javajava Example1 常見錯誤 錯誤一 : 打錯字 首先打錯字唔洗驚, 睇下個Error Message, 佢會有個箭咀指住大約錯邊個位, 同埋有個行數, 跟住就可以揾到錯邊 錯誤二: Save錯文件名 錯誤張文件名Save做.java.txt, 所有Java文件必需要用.java做尾. 你地係notebook到要簡下面嘅撰項

PowerPoint

Notes

  1. 下載Java https://java.sun.com
  1. 以下是HelloWorld代碼
class Example1{
    public static void main(String args[]){
          System.out.println("Hello World");
    }
}

Compile指令

javac Example1.java
java Example1

常見錯誤

錯誤一 : 打錯字

首先打錯字唔洗驚, 睇下個Error Message, 佢會有個箭咀指住大約錯邊個位, 同埋有個行數, 跟住就可以揾到錯邊

錯誤二: Save錯文件名

錯誤張文件名Save做.java.txt, 所有Java文件必需要用.java做尾. 你地係notebook到要簡下面嘅撰項

			object(WP_Post)#2945 (24) {
  ["ID"]=>
  int(629)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-04-09 09:11:48"
  ["post_date_gmt"]=>
  string(19) "2024-04-09 09:11:48"
  ["post_content"]=>
  string(1727) "

Get in HKPS website, you see "Hour Of Code" menu on top

If you are not registered yet, you jump in above page. Two options: register for teen or adult

This is the main screen, since we don't have many courses yet, so no search bar. "On going" means the course still has lessons, you may ask teacher questions. "Done" means the course is ended, no question to teacher.

View course info and video play back

" ["post_title"]=> string(21) "HOC system proposal 1" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(21) "hoc-system-proposal-1" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-04-09 09:17:27" ["post_modified_gmt"]=> string(19) "2024-04-09 09:17:27" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=629" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
HOC system proposal 1
Get in HKPS website, you see “Hour Of Code” menu on top If you are not registered yet, you jump in above page. Two options: register for teen or adult This is the main screen, since we don’t have many courses yet, so no search bar. “On going” means the course still has lessons, you […]

Get in HKPS website, you see "Hour Of Code" menu on top

If you are not registered yet, you jump in above page. Two options: register for teen or adult

This is the main screen, since we don't have many courses yet, so no search bar. "On going" means the course still has lessons, you may ask teacher questions. "Done" means the course is ended, no question to teacher.

View course info and video play back

			object(WP_Post)#2944 (24) {
  ["ID"]=>
  int(532)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2024-02-23 16:49:19"
  ["post_date_gmt"]=>
  string(19) "2024-02-23 16:49:19"
  ["post_content"]=>
  string(454) "

Lunch with Thei and Microsoft to discuss the project about the AI platform

" ["post_title"]=> string(29) "Lunch with Thei and Microsoft" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(29) "lunch-with-thei-and-microsoft" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2024-02-23 16:52:18" ["post_modified_gmt"]=> string(19) "2024-02-23 16:52:18" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=532" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
Lunch with Thei and Microsoft
Lunch with Thei and Microsoft to discuss the project about the AI platform

Lunch with Thei and Microsoft to discuss the project about the AI platform

			object(WP_Post)#2943 (24) {
  ["ID"]=>
  int(334)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2023-12-13 05:59:38"
  ["post_date_gmt"]=>
  string(19) "2023-12-13 05:59:38"
  ["post_content"]=>
  string(2149) "

McCode is a weekly event for coding enthusiasts who want to share their passion, learn new skills, and enjoy some delicious food. Every week, we meet at a local McDonald’s restaurant and work on different coding projects, challenges, and tutorials. Whether you are a beginner or an expert, you are welcome to join us and have fun with coding. McCode is a great opportunity to network with other coders, get feedback on your work, and discover new tools and resources. Plus, you get to enjoy some tasty burgers, fries, and drinks while you code. What’s not to love? If you are interested in joining McCode, please visit our website and sign up for our newsletter. We hope to see you soon at McCode, the coding event that satisfies your hunger for learning and eating.

" ["post_title"]=> string(6) "McCode" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(6) "mccode" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2023-12-15 07:34:05" ["post_modified_gmt"]=> string(19) "2023-12-15 07:34:05" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=334" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
McCode
McCode is a weekly event for coding enthusiasts who want to share their passion, learn new skills, and enjoy some delicious food. Every week, we meet at a local McDonald’s restaurant and work on different coding projects, challenges, and tutorials. Whether you are a beginner or an expert, you are welcome to join us and […]

McCode is a weekly event for coding enthusiasts who want to share their passion, learn new skills, and enjoy some delicious food. Every week, we meet at a local McDonald’s restaurant and work on different coding projects, challenges, and tutorials. Whether you are a beginner or an expert, you are welcome to join us and have fun with coding. McCode is a great opportunity to network with other coders, get feedback on your work, and discover new tools and resources. Plus, you get to enjoy some tasty burgers, fries, and drinks while you code. What’s not to love? If you are interested in joining McCode, please visit our website and sign up for our newsletter. We hope to see you soon at McCode, the coding event that satisfies your hunger for learning and eating.

			object(WP_Post)#2789 (24) {
  ["ID"]=>
  int(311)
  ["post_author"]=>
  string(1) "1"
  ["post_date"]=>
  string(19) "2023-12-01 16:16:42"
  ["post_date_gmt"]=>
  string(19) "2023-12-01 16:16:42"
  ["post_content"]=>
  string(2865) "

Thank you someone for providing us with the venue (we can't disclose his name). The workshop is very hands-on and everyone gets their first feeling to code the FPGA.

" ["post_title"]=> string(24) "FGPA Workshop 2023/12/01" ["post_excerpt"]=> string(0) "" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(4) "open" ["ping_status"]=> string(4) "open" ["post_password"]=> string(0) "" ["post_name"]=> string(24) "fgpa-workshop-2023-12-01" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2023-12-13 05:54:59" ["post_modified_gmt"]=> string(19) "2023-12-13 05:54:59" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(29) "https://www.hkprog.org/?p=311" ["menu_order"]=> int(0) ["post_type"]=> string(4) "post" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["filter"]=> string(3) "raw" }
FGPA Workshop 2023/12/01
Thank you someone for providing us with the venue (we can’t disclose his name). The workshop is very hands-on and everyone gets their first feeling to code the FPGA.

Thank you someone for providing us with the venue (we can't disclose his name). The workshop is very hands-on and everyone gets their first feeling to code the FPGA.