Search This Blog

Thursday, January 30, 2020

Multithreading with wxWidgets

C++ program တွေမှာ wxWidgets ကို သုံးပြီး multithreading လုပ်ဆောင်မှု တွေ ပြုလုပ် တဲ့အကြောင်း ဆွေးနွေး ပါမယ်။ ဆွေးနွေးမယ့် နမူနာ ပုံစံ အမျိုးမျိုး က
တို့ ဖြစ်ပါတယ်။

အခြေခံ multithreading နမူနာ နဲ့ သူ့ကို run လိုက်လို့ ရလာတဲ့ ရလဒ် ကို အောက်က link နဲ့ ပုံမှာ ပြထားပါတယ်။

https://github.com/yan9a/wxwidgets/blob/master/thread/thread1/thread1.cpp




Figure 1. thread1.cpp


Simple Multithreading Example

ရိုးရှင်း တဲ့ multithreading နမူနာ အနေနဲ့

https://github.com/yan9a/wxwidgets/blob/master/thread/th-simple/th-simple.cpp

ဆိုတဲ့ ပရိုဂရမ် လေးကို ဆွေးနွေး ပါမယ်။ ပရိုဂရမ် မှာ start ၊ stop ၊ pause နဲ့ resume ဆိုတဲ့ button လေးခု ကို အရင် ထည့် ပါမယ်။ Start button က thread အသစ် တစ်ခု ကို ဖန်တီး ပြီး၊ စတင် ဖို့ပါ။ Stop က နောက်ဆုံး ဖန်တီး လိုက်တဲ့ thread ကို ရှာပြီး ဖျက်ပေး ပါလိမ့်မယ်။ Pause က နောက်ဆုံး စတင် တဲ့ thread ကို ရှာပြီး ခေတ္တရပ် (pause) လုပ်ပေး ပါတယ်။ Resume က အရင်ဆုံး paused လုပ်ခဲ့ တဲ့ thread ကို ရှာပြီး၊ ပြန် run ပေးဖို့ ပါ။

Friday, December 28, 2018

Curve Plotting with C++

C++ program တွေမှာ curve plotting လုပ်ဖို့ လိုလာရင် သုံးလို့ ရမယ့် နည်းလမ်း တချို့ကို ဆွေးနွေး ချင်ပါတယ်။ သုံးကြည့်မယ့် tools တွေက
တို့ ဖြစ်ပါတယ်။

Gnuplot

Gnuplot ကို Ubuntu ပေါ်မှာ install လုပ်ဖို့ အတွက် အောက်က command တွေကို သုံးနိုင် ပါတယ်။

$ sudo apt update
$ sudo apt install gnuplot


Install လုပ်ပြီး တဲ့ အခါ gnuplot ကို အောက်ပါ အတိုင်း စနိုင် ပါတယ်။

$ gnuplot


ပြီးတဲ့ အခါ လက်ရှိ ဗားရှင်း စတဲ့ အချက်အလက် တွေပေါ်လာ ပြီးတဲ့ အခါ gnuplot ရဲ့ prompt ကို ရောက်သွား ပါမယ်။ နမူနာ အနေနဲ့ sin(x) ကို plot လုပ်ကြည့်ပြီး၊ cos2(x) ကို ပါ အောက်က အတိုင်း ထပ် plot လုပ်ကြည့် လိုက်ရင် Figure. 1 မှာ ပြထား သလို တွေ့ရ ပါလိမ့်မယ် [Mig18]။ Gnuplot ကနေ ထွက်ဖို့ အတွက် q ကို ရိုက်ထည့် နိုင် ပါတယ်။

> plot sin(x)
> replot cos(x)**2
> q



Figure 1. Plotting sin(x) and cos2(x) to test gnuplot.


Friday, November 23, 2018

Using Parallel Port on Linux with C++

Linux ပေါ်မှာ Paraller port ကို digital input output တွေ အနေနဲ့ အသုံးပြု ဖို့ [Lin15a,Coo08a] C++ class နဲ့ နမူနာ ပရိုဂရမ် တွေကို အောက်က link မှာ တွေ့နိုင် ပါတယ်။

https://github.com/yan9a/parallel-port


Figure 1. wxWidgets example using paraller port as digital output and input.


Thursday, November 22, 2018

MySQL Connector/ODBC 8.0 on Linux

Microsoft ရဲ့ MsSQL server ကို ODBC driver သုံးပြီး C++ နဲ့ သုံးခဲ့ သလိုပဲ Oracle ရဲ့ MySQL server ကို လည်း MySQL Connector/ODBC 8.0 driver ကို တပ်ဆင်ပြီး အသုံးပြု နိုင်ပါတယ်။ ကောင်းတဲ့ အချက်က တော့ C++ program တွေကို ဘာမှ ပြောင်းစရာ မလိုပဲ DSN ကို ပဲ ပြောင်းပြီး သုံးလိုက် ရုံပါပဲ။

SBC အမျိုးမျိုး၊ Platforms အမျိုးမျိုးမှာ သုံးချင်တာမို့ MySQL Connector/ODBC 8.0 ကို source ကနေ build လုပ်ပြီး တပ်ဆင် အသုံးပြု တဲ့ အကြောင်း ဆွေးနွေး ပါမယ်။ စစခြင်း အောက်က tools တွေကို စက်ထဲမှာ တပ်ဆင်ထားဖို့ လိုပါတယ်။
sudo apt install mysql-client libmysqlclient-dev
sudo apt install unixodbc unixodbc-dev
sudo apt install libgtk-3-dev cmake
sudo apt install libssl-dev

Friday, October 5, 2018

Using MS SQL Server from C++ with wxWidgets

MS SQL server ကို ODBC API နဲ့ C++ ပရိုဂရမ် ရေးပြီး ဆက်သွယ် အသုံးပြု တဲ့ အကြောင်း ဆွေးနွေး ပါမယ် [Eas18]။ အဲဒီနောက် Class module တစ်ခု ဖန်တီးပြီး wxWidgets GUI application တွေမှာ SQL server တွေကို သုံးတဲ့ နမူနာ တစ်ခုကို ဆက်လက် ဖော်ပြ ပါမယ်။ Unix နဲ့ Linux စက်တွေ အတွက်တော့ အောက်က လင့်ခ်

Using Microsoft SQL Server from Linux Machines with ODBC & FreeTDS
(http://coolemerald.blogspot.com/2018/10/using-microsoft-sql-server-from-linux.html)


မှာ ဖော်ပြ ထားတဲ့ အတိုင်း FreeTDS နဲ့ ODBC ကို တပ်ဆင် ထားဖို့ လို ပါတယ်။

Using Microsoft SQL Server from Linux Machines with ODBC & FreeTDS

FreeTDS က Unix နဲ့ Linux စက်တွေ အတွက် Microsoft SQL Server နဲ့ Sybase databases တွေကို ဆက်သွယ် အသုံးပြု ရတဲ့ လိုင်ဘရီ တွေ ဖြစ်ပါတယ် [Fre16]။ FreeTDS C libraries တွေက free, opensource ဖြစ်ပြီး GNU LGPL လိုင်စင် ဖြစ်ပါတယ်။ ဒီ အပိုင်း မှာ Windows စက် တစ်ခု ခု မှာရှိတဲ့ mixed mode authentication နဲ့ တပ်ဆင် ထားတဲ့ MS SQL server ကို Linux စက် ကနေ FreeTDS နဲ့ ဆက်သွယ် အသုံးပြု တဲ့ အကြောင်း ဆွေးနွေး ပါမယ်။ MS SQL server က TCP/IP နဲ့ remote ဆက်သွယ်မှု ကို ခွင့်ပြု ထားပြီး၊ username နဲ့ password ကို အသုံးပြုပြီး ဆက်သွယ် နိုင်ဖို့ လိုပါတယ်။

MS SQL server က Microsoft နဲ့ Sybase တို့ ပူးပေါင်း ဆောက်ရွက်မှု ကနေ မွေးဖွား လာတာ ဖြစ်ပါ တယ်။ ဒါကြောင့် သူ့တို့ ရဲ့ SQL server တွေက ဆင်တူ ကြပြီး၊ client တွေက နေလှမ်း ဆက်သွယ် အသုံးပြု တဲ့ communication protocol က စ ထပ်တူ နီးပါး တူညီ ပါတယ်။ အဲဒီ protocol ကို Tabular Data Stream (TDS) လို့ ခေါ်ပါတယ်။ TDS ကို open source အနေနဲ့ implementation လုပ်တဲ့ project ကို Brian Bruns စတင်ခဲ့ ပြီး၊ FreeTDS လို့ နာမည် ပေးခဲ့ တာပါ။

Thursday, October 4, 2018

MySQL Connector C++ 8.0 with wxWidgets

MySQL Connector C++ 8.0 ကို wxWidgets နဲ့ တွဲသုံး တဲ့ နမူနာ တစ်ခု ကို ဖော်ပြ ချင် ပါတယ်။ wxWidgets ထည့်သွင်း အသုံးပြုပုံ နဲ့ MySQL server, MySQL Connector C++ 8.0 တို့ တပ်ဆင် အသုံးပြု ပုံ အသေး စိတ်တွေ ကို အောက်က လင့်ခ် တွေမှာ ဖော်ပြ ထားတဲ့ အရင်ပို့စ် တွေ မှာ တွေ့နိုင် ပါတယ်။

ceMySQL.h Cross-platform C++ programming with wxWidgets

Using MySQL Database with C++ on Various Platforms Including ARM Single Board Computers

အဲဒီ အတွက် ဆက်သွယ် အသုံးပြု မယ့် MySQL server မှာ mytest ဆိုတဲ့ database နဲ့၊ အထဲမှာ mytable ဆိုတဲ့ table ကို Figure 1 မှာ ပြထား တဲ့ အတိုင်း MySQL Workbench နဲ့ ဖန်တီး ထားလိုက် ပါမယ်။


Figure 1. Creating a database 'mytest' and a table 'mytable' using MySQL Workbench.


Wednesday, September 19, 2018

Safe and easy DIY Home Energy Monitor Using Current Transformer with Arduino, Raspberry Pi, or Beaglebone Black

အိမ်မှာ ရှိတဲ့ လျှပ်စစ် အသုံး အဆောင် တွေရဲ့ စွမ်းအင် အသုံး ပြုမှု ကို စီစစ် တိုင်းတာ ဖို့ အတွက် ရိုးရှင်း ပြီး၊ အခြေခံ ကျတဲ့ energy monitor တစ်ခု ကို လုပ်ကြည့် ပါမယ်။ တိုင်းတာ အသုံး ပြုတဲ့ နည်း အများကြီး ရှိပေ မယ့် သင်ယူ လေ့လာမှု အတွက် အထောက် အကူ ဖြစ်ဖို့ ရော၊ အန္တရာယ် ကင်းဖို့ အတွက်ပါ သင့်တော်မှု ရှိမယ် ထင်တဲ့ YHDC Current Transformer SCT-013-000 [YHD18] ကို သုံးဖို့ ရွေးချယ် လိုက်ပါ တယ်။ သူက split-core ဖြစ်ပြီး တိုင်းတာ ချင်တဲ့ ဗို့အား မြင့် ဝါယာ လိုင်း တွေကို ဘာမှ ဖြုတ် စရာ မလိုပဲ ဝါယာ ပေါ်ကို ပတ်ပြီး ကလစ် တပ်လိုက် ဖို့ပဲ လိုတာမို့ non-invasive ဖြစ်ပြီး၊ အန္တရာယ် လည်းကင်း၊ အသုံးပြုဖို့လည်း လွယ်ကူ ပါတယ်။ အဲဒီ လို ပတ်တဲ့ အခါ Figure 1 ရဲ့ ညာဖက် ဆုံးမှာ ပြထား သလို ဝါယာ တစ်စ ကိုပဲ ပတ်ရ မှာဖြစ် ပါတယ်။


Figure 1. (ဘယ်ဘက်) SCT-013 က split core ဖြစ်တဲ့ အတွက် ကလစ်ကို ဖွင့်ပြီး ဝါယာ ပေါ်ကို အလွယ် တကူ တပ်ဆင်နိုင် ပါတယ်။ (အလယ်) ဝါယာ အကုန်လုံးကို ပတ်လိုက်ရင် အဝင် နဲ့ အထွက် ပြန်ကြေပြီး core ထဲမှာ ဖြတ်စီး တဲ့ စုစုပေါင်း current က သုည ဖြစ်သွား တဲ့ အတွက် တိုင်းလို့ မရ ပါဘူး။ (ညာဖက်) ဝါယာ တစ်စ ကို ပဲ core ထဲမှာ ပတ်ဖို့ လိုပါတယ်။


Friday, August 10, 2018

DIY Programmable Function Generator Using Arduino Uno

Arduino Uno ကို function generator အနေ နဲ့ သုံးပြီး လိုချင် တဲ့ low frequency waveform တွေကို စိတ်ကြိုက် ထုတ်နိုင် ပါတယ်။ သူ့ရဲ့ အားသာချက် က လိုသလို ပရိုဂရမ် ရေးပြီး စိတ်ကြိုက် customize အမျိုးမျိုး ထုတ်နိုင်၊ အချိန် အလိုက် ပြောင်းနိုင် တာဖြစ်ပြီး၊ အားနည်း ချက်ကတော့ အရမ်း မြင့်တဲ့ frequency တွေကို ထုတ် မပေးနိုင် တာ ဖြစ်ပါတယ်။ Arduino ရဲ့ analog output က pwm သုံးထား တာမို့ ရလဒ် ပိုကောင်းအောင်၊ pwm frequency ကို 8 kHz လောက် ပြောင်းထား ပါတယ်။ ဒီထက် ရလဒ် ပိုကောင်း ချင်ရင် DAC နဲ့ တွဲသုံး လို့လည်း ရပါတယ်။


Figure. Arduino function generator ၏ အထွက်ကို oscilloscope ဖြင့် တိုင်းတာ ရရှိပုံ။


Wednesday, August 1, 2018

Using MySQL Database with C++ on Various Platforms Including ARM Single Board Computers

Database server တွေကို ဆက်သွယ် အသုံးပြု တဲ့ C++ application တွေ ရေးသား တဲ့ အကြောင်း ဆွေးနွေး ပါမယ်။ MySQL (မိုင် အက်စ် ကျူ အယ်) က Oracle ရဲ့ open source ဖြစ်တဲ့ database management system တစ်ခု ဖြစ် ပါတယ်။ သူက free ရနိုင်ပြီး၊ robust ဖြစ်ရုံ မက ပဲ platforms တော်တော် များများ ပေါ်မှာ အလုပ်လုပ် ပါတယ်။ Odroid လို 32 bit armv7 achitecture SBC လေးတွေ ပေါ်မှာ တောင် source ကနေ build လုပ်ပြီး run နိုင်ပြီး၊ functionality တွေ စုံသလို၊ user interface မျိုးစုံ ရှိတာ မို့ နမူနာ အနေနဲ့ MySQL database serser ကို ဆက်သွယ် အသုံးပြု ပါမယ်။

MySQL server ကို traditional အတိုင်း relational database ပုံစံ နဲ့ သုံးလို့ ရသလို၊ schema ကို အသေ သတ်မှတ် စရာ မလိုတဲ့၊ NoSQL လို့လည်း ခေါ်ကြတဲ့ document store အနေနဲ့ လည်း သုံးလို့ ရပါတယ်။ Relational database မှာ သိမ်းမယ့် table ရဲ့ column အားလုံး ကြိုသိ ပြီး schema ကြိုသတ်မှတ် ဖို့ လိုပေမယ့်၊ document store ကတော့ schema flexible ဖြစ်ပြီး JSON object နဲ့ ကိုယ်စားပြု ဖော်ပြ ပါတယ်။ ဒီ နေရာမှာ relational model ရဲ့ power နဲ့ document store ရဲ့ flexibility ကို ပေါင်းစပ် အသုံးပြု လို့ ရအောင် X DevAPI ကို သုံးပြီး application တွေ ပြုလုပ် တဲ့ အကြောင်း ဆွေးနွေး ပါမယ်။