วันพุธที่ 27 พฤษภาคม พ.ศ. 2563
Error:
yothinin@yothinin-Y400:~/projects/gtk$ gcc -Wall -c -o hello hello.c `pkg-config --libs --cflags gtk+-2.0`
In file included from /usr/include/gtk-2.0/gtk/gtkobject.h:37,
from /usr/include/gtk-2.0/gtk/gtkwidget.h:36,
from /usr/include/gtk-2.0/gtk/gtkcontainer.h:35,
from /usr/include/gtk-2.0/gtk/gtkbin.h:35,
from /usr/include/gtk-2.0/gtk/gtkwindow.h:36,
from /usr/include/gtk-2.0/gtk/gtkdialog.h:35,
from /usr/include/gtk-2.0/gtk/gtkaboutdialog.h:32,
from /usr/include/gtk-2.0/gtk/gtk.h:33,
from hello.c:1:
/usr/include/gtk-2.0/gtk/gtktypeutils.h:236:1: warning: ‘GTypeDebugFlags’ is deprecated [-Wdeprecated-declarations]
236 | void gtk_type_init (GTypeDebugFlags debug_flags);
| ^~~~
In file included from /usr/include/glib-2.0/gobject/gobject.h:24,
from /usr/include/glib-2.0/gobject/gbinding.h:29,
from /usr/include/glib-2.0/glib-object.h:22,
from /usr/include/glib-2.0/gio/gioenums.h:28,
from /usr/include/glib-2.0/gio/giotypes.h:28,
from /usr/include/glib-2.0/gio/gio.h:26,
from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30,
from /usr/include/gtk-2.0/gdk/gdk.h:32,
from /usr/include/gtk-2.0/gtk/gtk.h:32,
from hello.c:1:
/usr/include/glib-2.0/gobject/gtype.h:679:1: note: declared here
679 | {
| ^
In file included from /usr/include/gtk-2.0/gtk/gtktoolitem.h:31,
from /usr/include/gtk-2.0/gtk/gtktoolbutton.h:30,
from /usr/include/gtk-2.0/gtk/gtkmenutoolbutton.h:30,
from /usr/include/gtk-2.0/gtk/gtk.h:126,
from hello.c:1:
/usr/include/gtk-2.0/gtk/gtktooltips.h:73:3: warning: ‘GTimeVal’ is deprecated: Use 'GDateTime' instead [-Wdeprecated-declarations]
73 | GTimeVal last_popdown;
| ^~~~~~~~
In file included from /usr/include/glib-2.0/glib/galloca.h:32,
from /usr/include/glib-2.0/glib.h:30,
from /usr/include/glib-2.0/gobject/gbinding.h:28,
from /usr/include/glib-2.0/glib-object.h:22,
from /usr/include/glib-2.0/gio/gioenums.h:28,
from /usr/include/glib-2.0/gio/giotypes.h:28,
from /usr/include/glib-2.0/gio/gio.h:26,
from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30,
from /usr/include/gtk-2.0/gdk/gdk.h:32,
from /usr/include/gtk-2.0/gtk/gtk.h:32,
from hello.c:1:
/usr/include/glib-2.0/glib/gtypes.h:547:8: note: declared here
547 | struct _GTimeVal
| ^~~~~~~~~
hello.c: In function ‘main’:
hello.c:8:19: error: ‘win’ undeclared (first use in this function)
8 | gtk_widget_show(win);
| ^~~
hello.c:8:19: note: each undeclared identifier is reported only once for each function it appears in
hello.c:4:14: warning: variable ‘window’ set but not used [-Wunused-but-set-variable]
4 | GtkWidget *window;
| ^~~~~~
แก้ไข:
เพิ่มดังนี้
CFLAGS = -Wall -Wunused \
-DG_DISABLE_DEPRECATED \
-DGDK_DISABLE_DEPRECATED \
-DGDK_PIXBUF_DISABLE_DEPRECATED \
-DGTK_DISABLE_DEPRECATED
วันเสาร์ที่ 2 พฤษภาคม พ.ศ. 2563
ทำไมถึงเขียน ภาษา C และ Gtk+ 2.0
หลังจากที่เริ่มเขียนโปรแกรมภาษา C และ Gtk+ 2.0 มาได้ประมาณ 2 สัปดาห์ ก็มีหยุดบ้างทำบ้าง มีหายไปประมาณ 3-4 วัน และบางทีก็ทำสลับกับงานอื่นๆ ไป แต่บางครั้งก็นั่งหน้าจอมากกว่า 12 ชั่วโมง เพื่อค้นหาข้อมูล คิดหาวิธีการเขียนโปรแกรม บางทีเมื่อคิดไม่ออกก็เปลี่ยนไปนั่งทำอย่างอื่นบ้าง ไปหาข้อมูลเกี่ยวกับ Micro-controller หรือไม่ก็ไปไสไม้ทำกล่อง ทำชั้นเรื่อยเปื่อย
ถึงตอนนี้การเขียนภาษา C โดยใช้ Gtk+ ก็ถือว่าก้าวหน้าไประดับหนึ่ง สามารถเขียนได้เป็นเรื่องเป็นราว แต่ก็ยังติดขัดปัญหาอยู่บ้าง บางทีก็ติดเรื่องหาตัวอย่างและข้อมูลไม่ได้ทันที กว่าจะเจอก็ใช้เวลานานพอควร
การเรียนรู้ก็เทียบเคียงกับการเขียนโปรแกรมอื่นๆ ในเรื่องหลักการโดยรวม เช่น สร้างหน้าจอรับข้อมูล หลักการก็ต้องมีช่องรับ เมื่อพิมพ์ก็สามารถตรวจสอบการกดปุ่มคีย์บอร์ดได้ด้วย ว่าพิมพ์ถูกหรือผิด มีการดักอีเวนท์ต่างๆ ของคีย์บอร์ด เมื่อกดปุ่ม enter ก็ให้เลื่อนไปอีกช่องหนึ่งหรือคอนโทรลอื่น เป็นต้น
ใน Gtk+ ก็มีสิ่งเหล่านี้รองรับหมดแล้ว และเหนือกว่าบางโปรแกรมด้วยซ้ำไป แต่ปัญหา คือ ตัวอย่างและเอกสารต่างๆ บางทีก็ยากที่จะเรียนรู้ หากเมื่อเทียบกับการเรียนรู้ FoxPro ในอดีต สิ่งหนึ่งที่ผู้เขียนชอบมาก คือ กดปุ่ม F1 เพื่ออ่าน Help ของโปรแกรม และแต่ละส่วนก็จะมีตัวอย่างให้เราพิมพ์ตาม จนแทบไม่ต้องหาจากหนังสือเลย (สมัยนั้นไม่มีแหล่งเรียนรู้ใน www ต้องหาจากหนังสือหรือ Help นี่แหละ และสมัยนั้นลงทุนซื้อหนังสือต่างประเทศราคา 2-3 พันบาทก็มี)
เดิมทีจะเขียนระบบ Digital Designage |
ถึงตอนนี้การเขียนภาษา C โดยใช้ Gtk+ ก็ถือว่าก้าวหน้าไประดับหนึ่ง สามารถเขียนได้เป็นเรื่องเป็นราว แต่ก็ยังติดขัดปัญหาอยู่บ้าง บางทีก็ติดเรื่องหาตัวอย่างและข้อมูลไม่ได้ทันที กว่าจะเจอก็ใช้เวลานานพอควร
การเรียนรู้ก็เทียบเคียงกับการเขียนโปรแกรมอื่นๆ ในเรื่องหลักการโดยรวม เช่น สร้างหน้าจอรับข้อมูล หลักการก็ต้องมีช่องรับ เมื่อพิมพ์ก็สามารถตรวจสอบการกดปุ่มคีย์บอร์ดได้ด้วย ว่าพิมพ์ถูกหรือผิด มีการดักอีเวนท์ต่างๆ ของคีย์บอร์ด เมื่อกดปุ่ม enter ก็ให้เลื่อนไปอีกช่องหนึ่งหรือคอนโทรลอื่น เป็นต้น
ใน Gtk+ ก็มีสิ่งเหล่านี้รองรับหมดแล้ว และเหนือกว่าบางโปรแกรมด้วยซ้ำไป แต่ปัญหา คือ ตัวอย่างและเอกสารต่างๆ บางทีก็ยากที่จะเรียนรู้ หากเมื่อเทียบกับการเรียนรู้ FoxPro ในอดีต สิ่งหนึ่งที่ผู้เขียนชอบมาก คือ กดปุ่ม F1 เพื่ออ่าน Help ของโปรแกรม และแต่ละส่วนก็จะมีตัวอย่างให้เราพิมพ์ตาม จนแทบไม่ต้องหาจากหนังสือเลย (สมัยนั้นไม่มีแหล่งเรียนรู้ใน www ต้องหาจากหนังสือหรือ Help นี่แหละ และสมัยนั้นลงทุนซื้อหนังสือต่างประเทศราคา 2-3 พันบาทก็มี)
วันศุกร์ที่ 17 เมษายน พ.ศ. 2563
connect wifi in ubuntu terminal
If you have
nmcli
installed, I think this is the simplest solution.
For a new connection:
nmcli dev wifi connect <mySSID> password <myPassword>
Or if a connection was already set up:
nmcli con up <mySSID>
(or if that does not work, try
nmcli con up id <mySSID>
)วันเสาร์ที่ 11 เมษายน พ.ศ. 2563
เริ่มต้นใช้ gtk ด้วยภาษา C ตอนที่ 1
พูดถึงภาษา C เชื่อว่าหลายคนในบ้านเราร้องยี้กันมาก เพราะคิดว่ามันยาก เอาเข้าจริง ภาษา C ไม่ได้ยากแต่การเอาภาษา C มาใช้งานเพื่อให้เป็นระบบนั่นแหละยาก กล่าวอย่างนี้ไม่ใช่การเล่นคำอะไรทั้งสิ้น หากแต่เทียบง่ายๆ ภาษา C ก็เหมือนภาษาอังกฤษ ที่มีหลักการมีไวยากรณ์ที่เป็นพื้นฐาน เราสามารถเลือกเรียนรู้ได้ตามที่ต้องการ แต่เมื่อต้องการนำไปใช้งานในระดับกว้างแล้วภาษา C กลับถูกเลือกใช้น้อยกว่าภาษาอื่นๆ อย่างเช่น C# เป็นต้น
แม้กระทั่งการเขียนโปรแกรมสำหรับ Arduino ก็นิยมใช้ C++ เช่นกัน แต่สำหรับบนลีนุกซ์แล้วภาษาที่ผู้คิดค้นเขาเลือกใช้ ภาษา C จึงเป็นเรื่องที่น่าสนใจเป็นอย่างยิ่งในการเรียนรู้ ดังนั้นผู้เขียนจึงได้พยายามค้นหาข้อมูลเพื่อเรียนรู้ว่าจะเขียนโปรแกรมบน Linux ได้อย่างไร แต่เดิมก็เรียบๆ เคียงๆ กับ C++ และ Python ก็มองผ่านภาษา C ไปอีก
จนกระทั่งล่าสุดช่วงที่หยุดอยู่กับบ้านเพราะภัยไวรัสโควิด-19 ก็มีเวลาว่างมากเสียจนไม่รู้จะทำอะไรก่อนหลังดี เพราะไม่มีสมาธิ และรู้สึกสับสนว้าวุ่นเป็นอย่างมาก สุดท้ายก็กลับมาที่ภาษาซี โดยคิดว่าจะเขียนโปรแกรมเล่นๆ แก้เซ็งสักหน่อย พลันก็คิดขึ้นได้ว่า ทำไมเราไม่ลองเขียน GUI ด้วยภาษา C ซะเลยล่ะ
เหตุผลสำคัญหลังจากที่ติดตั้ง Raspberry Pi เรียบร้อยแล้วก็พยายามจะลง Qt แต่ก็ติดปัญหาเรื่องความเร็ว และ Qt กลับทำงานอืดอาดมาก พอเปลี่ยนไปหยิบเอา NanoPi M1 มาลงเพื่อใช้งานดูก็พบว่าทรัพยากรมันจำกัดจำเขี่ยมาก บังเอิญเหลือบตาไปเห็นโปรแกรม Geany เลยลองเปิดดูพบว่าเป็น Editor สำหรับภาษา C ได้เป็นอย่างดีก็เลยลองเขียนเพื่อติดต่อกับ gtk เวอร์ชัน 2.0 ดูก็ใช้งานได้ดีเลยตั้งใจว่าช่วงหยุดงานนี้น่าจะเรียนรู้ภาษา C และ GUI ด้วย gtk ได้ให้จนได้
แม้กระทั่งการเขียนโปรแกรมสำหรับ Arduino ก็นิยมใช้ C++ เช่นกัน แต่สำหรับบนลีนุกซ์แล้วภาษาที่ผู้คิดค้นเขาเลือกใช้ ภาษา C จึงเป็นเรื่องที่น่าสนใจเป็นอย่างยิ่งในการเรียนรู้ ดังนั้นผู้เขียนจึงได้พยายามค้นหาข้อมูลเพื่อเรียนรู้ว่าจะเขียนโปรแกรมบน Linux ได้อย่างไร แต่เดิมก็เรียบๆ เคียงๆ กับ C++ และ Python ก็มองผ่านภาษา C ไปอีก
จนกระทั่งล่าสุดช่วงที่หยุดอยู่กับบ้านเพราะภัยไวรัสโควิด-19 ก็มีเวลาว่างมากเสียจนไม่รู้จะทำอะไรก่อนหลังดี เพราะไม่มีสมาธิ และรู้สึกสับสนว้าวุ่นเป็นอย่างมาก สุดท้ายก็กลับมาที่ภาษาซี โดยคิดว่าจะเขียนโปรแกรมเล่นๆ แก้เซ็งสักหน่อย พลันก็คิดขึ้นได้ว่า ทำไมเราไม่ลองเขียน GUI ด้วยภาษา C ซะเลยล่ะ
เหตุผลสำคัญหลังจากที่ติดตั้ง Raspberry Pi เรียบร้อยแล้วก็พยายามจะลง Qt แต่ก็ติดปัญหาเรื่องความเร็ว และ Qt กลับทำงานอืดอาดมาก พอเปลี่ยนไปหยิบเอา NanoPi M1 มาลงเพื่อใช้งานดูก็พบว่าทรัพยากรมันจำกัดจำเขี่ยมาก บังเอิญเหลือบตาไปเห็นโปรแกรม Geany เลยลองเปิดดูพบว่าเป็น Editor สำหรับภาษา C ได้เป็นอย่างดีก็เลยลองเขียนเพื่อติดต่อกับ gtk เวอร์ชัน 2.0 ดูก็ใช้งานได้ดีเลยตั้งใจว่าช่วงหยุดงานนี้น่าจะเรียนรู้ภาษา C และ GUI ด้วย gtk ได้ให้จนได้
สมัครสมาชิก:
บทความ (Atom)
Gtk4 ตอนที่ 6 Defining a Child object
Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...
-
นักอิเลกโทรนิกส์ทั้งหลายคงจะเข้าใจวิธีวัดค่าของไดโอดเปล่งแสง หรือ LED เป็นอย่างดี แต่สำหรับมือใหม่ ย่อมต้องเรียนรู้ หาประสบการณ์ต่อไปเรื่อยๆ...
-
Ubuntu เป็น OS ที่นิยมนำมาใช้เป็นเซิร์ฟเวอร์อย่างแพร่หลาย ด้วยการติดตั้งง่าย การแก้ไขปัญหาก็ทำได้ดีเพราะมีเอกสาร คนใช้งานอยู่มาก และโดยปกติ ...
-
ยอมรับสารภาพเลยว่าเลิกเขียนโปรแกรมภาษา C ในอดีตเมื่อหลายปีก่อนก็เพราะการเปรียบเทียบสตริงนี่แหละ ทำไม่ได้หาในหนังสือไม่มีวิธีแก้ไข สมัยนั้นยั...