Wednesday, March 20, 2013

Tips #1 - C# වලින් Serial Port එකත් එක්ක Communicate කිරීම



                මම අද කතා කරන්න යන්නේ අපේ මූළික පාඩම් මාලා වලින් පොඩ්ඩකට මිදිල ඔයාලට වැදගත් වේවි කියල හිතෙන codes ගැන කතා කරන්නයි. මටත් මේ ගැන යොයන්න වුනේ මගේ යාළුවෙකුගේ අවශ්‍ය තාවයකට program එකක් ලියන්න වුන නිසියි. ඉතින් මම හිතුවා ඔයාලත් එක්කත් ඒ දේවල් බෙදා ගන්න.

ඇයි අපිට Port Programming අවශ්‍යය


                සමහර programs වලදි අපිට අපේ computer  එකට පිටතින් ඇති hardware එකකින් data ගන්න සහ ඒවාට data යවන්න  අවශ්‍ය වෙනව. මේ සඳහා අපිට computer එකේ තිබෙන විවිධ වූ ports භාවිතා කරන්න පුළුවන් වුනත් අපි අතර ජනප්‍රිය වුන port එකක් තියෙනව ඒ සඳහා, ඒ තමයි Serial Port එක. නමුත් දැන් නම් ගොඩක් computers වල මේ port එක එන්නේ නෑ. නමුත් භාවිතයේ සරල බව නිසාම (USB වලට සාපේක්ෂව) අදටත් භාවිතා වෙනව. ඒ නිසා මම හිතුව ඒ ගැන කතා කරන්න.

Program එක ගැන


                   මම code කරන්න තෝර ගත්තේ C#.Net කියන  programming language එක, ඒ සඳහා විශේෂ හේතුවක් නැති වුවත් C# කියන්නේ මගේ ප්‍රියතම programming language එක නිසා තොරගත්ත. .Net වලදි නම් මෙය ඉතා පහසු කරල තියෙනව Framework එක මගින්. 

අපි මුලින්ම කරන්න ඕන අවශ්‍ය කරන system classes ටික import කර ගන්න ඒක,

using System.IO.Ports;
using System.Threading;

දැන් අපි serial port object එකක් අවශ්‍ය කරන parameters දීල හදාගන්න ඕන.

SerialPort myserialPort = new SerialPort("COM1", 19200, Parity.None, 8, StopBits.One);
myserialPort.Handshake = Handshake.None;

ඊළගට අපි event handler එකක් හඳා ගන්න ඕන serial port එකට data ලැබුනම run වෙන්න,

myserialPort.DataReceived += new SerialDataReceivedEventHandler(SP_DataReceived);

දැන් අපි හදා ගත්ත serial port එක open කරන්න ඕන ඒක භාවිතා කරන්න කලින්.

myserialPort.Open();

දැන් අපි අපේ  computer එකේ serial port එක හරහා data ලබා ගන්න සහ යවන්න සූදානම්. අපිට serial port එකෙන් ලැබෙන data, UI එකට ගන්න delegate භාවිතා කරන්න වෙනව. ඒ .Net framework එක cross-thread actions වලට ඉඩ ලබා නොදෙන නිසා. අපි delegate භාවිතා කරන්නෙ Non-UI Thread එකක ඉදල UI Thread එකට data ලියන්නයි.

private delegate void SetTextDeleg(string text);

දැන් අපි කලින් හදා ගත්ත event handler එකට ලබා දුන්න method එක code කරන්න ඕන data ලැබුනම run වෙන්න.

void SP_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    Thread.Sleep(500);
    string data = _serialPort.ReadLine();
    this.BeginInvoke(new SetTextDeleg(SI_DataReceived), new object[] { data });
}

දැන් SI_DataReceived method එක code කරන්න ඕන අපිට ලැබෙව data UI එකට ලියන්න.

private void si_DataReceived(string data) 
{
  textBox1.Text = data.Trim(); 
}

Data ගන්න වැඩේ හරි දැන්, අපි බලමු කොහොමද data යවන්නේ කියල, ඒ සඳහාත් අපි පොඩි method එකක් ලියමු. data ලියන්න කලින් අනිවාර්යයෙන්ම port එක open කරල තියෙන්න ඕන.

try
{
  if(!(myserialPort.IsOpen))
        myserialPort.Open();
        myserialPort.Write("SI\r\n");
}
catch (Exception ex)
{
  MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
}

දැන් ඔක්කොම වැඩ ටික හරි. අවසානයටම ඔයාලගේ program එක close වෙන කොට port එක close කරන්න.

myserialPort.Close();

මම මේ code එක ඉතාමත් සරල අන්දමින් කලේ ඔයාලට අවශ්‍ය නම් මේක තව සංකීර්ණ ලෙස ඔයාලගේ අවශ්‍යතාවවය අනුව යොදාගන්න පුළුවන්.
Read More

Monday, March 18, 2013

HTML සිංහලෙන් පාඩම 13 - HTML CSS

                              අපේ Blog එකේ වෙනම CSS පාඩමක් යනව වුනත් මම අද හිතුවා පොඩ්ඩක් CSS ගැන කියන්න ඕන කියල. පොඩි හැඳින් වීමක් වගේ, නැත්තම් මේ පාඩම් ටික සම්පූර්ණ නැති වෙනව. අපි හැමොම දන්නවනේ CSS කියල අපි කෙටියෙන් අඳුන් වන්නේ Cascading Style Sheets කියල. ඉතින් මේ CSS වලින් අපිට කරන්න පුළුවන් දේවල් ඉතාමත් පුදුමාකාරයි. හිතාගන්නවත් බැරි වැඩ CSS වලින් web sites වල කරල තියෙනව. මේ වැඩ තවත් පහසු කරගන්න ලගදී CSS 3 කියන සංස්කරණය නිකුත් වුනා. මේ දේවල් ගැන වැඩි විස්තර ඔයාලට අපේ CSS පාඩම් මාලාව අධ්‍යයනයෙන් දැන ගන්න පුළුවන්.

              ඔයාල දන්නවනේ CSS හඳුන්වල දුන්නේ HTML elements වලට වඩාත් හොඳ විදිහකට styles දාන්න පුළුවන් වෙන්නනේ. අපිට මේ වැඩේ කරන්න පුළුවන් ආකාර තුනක් තියෙනව.

  1. Inline
  2. Internal
  3. External
අපි දැන් මේ එකින් එක විස්තර කරමු.

Inline 

අපි මේ විදිහට styles යොදන්න එක් HTML element එකකට විතරක් යම් කිසි style එකක් යොදන වෙලාවකදි තමයි. මේ සඳහා අපි ඒ element එකේ style කියන attribute එක යොදා ගන්නව. මෙහි ඕනෑම CSS property එකක් සඳහන් කළ හැකියි.

<p style="color:red;margin-left:45px;">This is my first paragraph</p>

Internal

අපි මේ විදිහට styles යොදන්නේ එක් වෙබ් පිටුවකට විතරක් අදාල වන පරිදි යම් කිසි elements කිහිපයකටම එකම style එක යොඳන විටදියි. මම පෙර පාඩමේදී සඳහන් කල පරිදිම මේ styles අපි ලියන්නේ HEAD එක තුලයි.  මේ සඳහා අපි <style> කියන tag එක පාවිච්චි කරනව.

<head>
     <style type="text/css">
         body {background-color:blue;}
         p {color:red;}
     </style>
</head>

External

අපිට එකම style එක විවිධ web pages සඳහා යොදා ගැනීමට අවශ්‍ය වෙන වෙලාවට අපිට external style sheet එකක් භාවිතා කිරීමට සිදුවෙනව. ඒ external style sheets අපේ වෙබ් පිටුවට link කරන්න අවශ්‍යයි. මේ code එකත් අපි ලියන්නේ HEAT එක තුලමයි, ඒ සඳහා අපි <link> කියන tag එකයි.

<head>
      <link rel="stylesheet" type="text/css" href="mystyle.css">
</head>

අපි අයෙත් තවත් පාඩමකින් හමුවෙමු. ඊලග පාඩමේදී අපි HTML වලදී Images හසුරවන ආකාරය ගැන කතා කරමු.
Read More

Sunday, March 17, 2013

Android Transaction App - SQLite Database in Android App - 2


Android Transaction App

SQLite Database in Android App - 2


    ඔයාල පෙර ලිපිය කියවලා, ඒක කලා නම් errors එන්න ඇති. එයට හේතුව තමයි. අපේ main.xml එකේ තියෙන image buttons වලට උවමනා කරනා images මම සපයලා තිබුන නැති එක. ඇත්තෙන්ම ඔයාලට කැමති විදියක images භාවිතා කරන්න පුළුවන් ඒ සඳහා. මම මුලින්ම පෙන්නලා දෙන්නම්, ඒ images දාන්න ඕනෙ කොහෙටද, හා ඒවා code එකේ define කරලා තියෙන්නේ කොහොමද කියන එක.


ඉහත රූපයේ තියෙන්නේ අපේ App එකේ res directory එක. බලන්නකො එතන, අලුත් directory එකක් තියෙනවා නේද drawable කියලා. අන්න එතනට තමයි, අපි භාවිතා කරන images දාන්න ඕනි. 

ඔයාලට පේනවා ඇති මගෙ උදාහරනයේ images 7ක් භාවිතා කරලා තියෙනවා. ඒවා තියෙන්නේ මගෙ main.xml එකේ. ඒ buttons වලට හා main.xml එකේ පසුබිමට.



අපි දැන් බලමු, අපේ main.xml එකේ අලුතින් කරලා තියෙන දේවල් මොනවද කියලා.

   මෙහිදී අපි සාමාන්‍ය විදියට RelativeLayout එකක් භාවිතා කරලා තියෙනවා. නමුත් හොඳට බැලුවොත් දැක ගන්න පුළුවන් වේවි, අපි කලින් කතා කරපු App එකක තිබුනාට වඩා අලුත් attribute එකක් එහි තියෙනවා. ඒ තමයි

android:background="@drawable/menu_background"

මෙන්න මේ හරහා තමයි මගේ App එකේ main.xml එකට පසුබිම් රූපයක් දාල තියෙන්නේ.

දැන් බලන්නකෝ අපි තව අලුත් tag එකක් යොදාගෙන තියෙනවා. ඒ තමයි <ImageButton> tag එක. මෙයත් සාමාන්‍ය Button එකක්ම තමයි, නමුත් එහි ඇති විශේෂය වන්නේ එයට රූපයක් ඇතුලත් කරන්න හැකිවීමයි. මම එක කොටසක් විස්තර කරන්නම්.

<ImageButton
  android:layout_width="90dp"
  android:layout_height="85dp"
  android:id="@+id/payment_list_button
  android:src="@drawable/list"
  android:scaleType="fitCenter"
  android:background="@color/grey"
  android:layout_centerHorizontal="true" 
 android:layout_alignTop="@+id/add_payment_button"
/>

    මේ Button එකේ තියෙන sizes වෙනස්. ඒක නිසා තමයි, android:layout_width හා android:layout_height කියන ඒවා dp ලෙස අගයන් දීලා තියෙන්නේ. මෙහි android:src කියන attribute එක හරහා තමයි, අපේ Button එකේ පෙන්විය යුතු Image එක ලබා දෙන්නේ. බලන්නකො ඒක define කරල තියෙන කොහොමද කියලා. 

@drawable/list මේ drawable කියලා කියන්නේ අපේ images තියෙන directory එක. එතකොට  list කියලා කියන්නේ අපි පෙන්වන්න බලාපොරොත්තු වෙන image එක. 

android:scaleType="fitCenter" කියන කොටස හරහා අපේ image එක Button එකේ මැද කොටසට සමබර වෙන විදියට ස්ථාන ගත කරලා තියෙන්නේ. android:background="@color/grey" කොටසින් මම මගේ Button එකට පසුබිම් වර්ණයක් දීලා තියෙනවා.


දැන් අපි add_transactions.xml එක ගැන සලකලා බලමු.
බලන්නකො එහි අලුත් දේවල් කිහිපයක්ම තියෙනවා නේද?

එක මුලින්ම බලනකොට සාමාන්‍ය විදියේ linearlayout එකක් තියෙනවා. එහි තුල <ScrollView> කියල tag එකක් ඔයාලට දැක ගන්න පුළුවන් වේවි. ඔයාල මේ interface එක හදලා බැලුවනම් ඔයාල අත් දකින්න ඇති, එක උඩට හා පහලට තල්ලු (Scroll) කරන්න පුළුවන් බව. අන්න ඒ හැකියාව ලැබිල තියෙන්නේ මෙන්න මේ <ScrollView> එක නිසා. 

ඉන් පසුව තවත් පහලට එනකොට, ඔයාලට දැක ගන්න පුළුවන් 
<DatePicker> හා <TimePicker> කියලා tags දෙකක්. මේවා අපිට දිනයක් හා කාලයක් ලබා ගැනීමට, යොදා ගන්න පුළුවන්.

ඉන් පසුව තවත් වැදගත් කොටසක් තියෙනවා. ඒ තමයි RadioButton කියන එක. අපි RadioButton භාවිතා කරන්නේ කිසියම් එක තෝරා ගැනීමක් සඳහා. අපගේ උදාහරනයේ ඒ වගේ තෝරාගැනීම් දෙකක් තියෙනවා. ඒ තමයි  Payments හා  Income කියන ඒවා. එකවර තෝරා ගත හැකිවිය යුත්තේ එකක් පමණයි. එම නිසා අපගේ RadioButton දෙක, එක RadioGroup එකක් තුලට ගොනු කර තියෙනවා ඔයාලට බලා ගන්න පුළුවන්.

පහතින් වෙන කොටස් වල තිබෙන්නේ අපි මීට පෙර විස්තර ඇතිව කතා කල කොටස්, වෙන වෙන ආකාර වලින් යොදා ගැනීම් කිහිපයක්.

අපි මීලඟ ලිපියෙන් අනිකුත් interfaces ගැන කතා කරමු.


ඔයාලට මේ කරපු දේ ටික ගැන ප්‍රශ්න තියෙනව නම් comment කරන්න නැති නම් mail කරන්න kavi707@gmail.com 

Read More

Wednesday, March 13, 2013

HTML සිංහලෙන් පාඩම 12 - Head Tag එක


                   මම අද පාඩමෙන් කතා කරන්න බලාපොරොත්තු වෙන්නේ, අපි හැම වෙලාවෙම භාවිතා කරන tag එකක් ගැන‍යි. ඒ තමයි <head> Tag එක. මේ tag එක ඉතාමත් විශේෂ tag එකක් මොකද මේ Tag එක නැති වෙබ් පිටුවක් හොයා ගන්නවත් නැති තරම් නිසා. ඒ තරමටම මේ tag එක භාවිතා වෙනව. 

                      මේ tag එක ඇත්තටම තනිව කාර්යයක් නොකලාට, මෙය තුල අඩංගු කල හැකි head elements භාවිතා කරල අපි කරගන්න දේවල් නම් ඉතා විශාලයි. දැන් මොනවද මේ head elements කියන්නේ? අපි දැනටමත් දන්නවනේ වෙබ් පිටු නිර්මාණය කිරීමේදී JavaScript, CSS වගේ තාක්ෂණ භාවිතා කරනව කියල, ඉතින් ඒ වගේ අපේ වෙබ් පිටුවට අවශ්‍ය වෙන වෙනත් files හොයාගන්න browser එකට ඒවා ගැන කියන්න මේවා භාවිතා වෙනව තව scripts ආදිය වගේ අපේ වෙබ් පිටුවට අදාල meta dataද ඇතුලත් කල හැකියි. ඒ වගේ තව බොහෝ දේවල් තියෙනව. දැන් අපි වැදගත් වෙන head elements කිහිපයක් ගැන කතා කරමු.

<title> head element

මේ head element එක අපි භාවිතා කරන්නේ  අපේ වෙබ් පිටුවට title එකක් ලබා දෙන්නයි. ඒක කරන්නේ මෙන්න මේ විදිහටයි.

<html>
      <head>
      <title>THIS IS MY FIRST WEB PAGE</title>
      </head>
<html/>

ඒක පේන්නේ මෙන්න මේ වගේ


ඔයාල කැමති විදිහකට ඔයාලගේ වෙබ් පිටු වලට titles එකතු කර ගන්න පුළුවන්. ඒ වගේම කව්රුහරි අපේ වෙබ් පිටුව bookmark කරන කොට එතන නම විදිහට එන්නෙත්, search engine වලදි පෙන්වන්නෙත් මේ Title එකම තමයි

<base> head element

මේ tag එකෙන් අපි කරන්නේ අපේ වෙබ් පිටුව තුලදී මින් ඉදිරියට භාවිතා කරන URL සඳහා අවශ්‍ය වන මූලික ටික ලබා දෙන එකයි. ඒ කියන්නේ URL එකේ පොදු කොටස ලබා දෙන එක, එතකොට හැම තිස්සෙම ඒ ටික ලියන්න ඕන නෑනේ. මේක ඉතා වැදගත් images වලට වගේ URL දෙන කොට. syntax එක පහතින්,

<html>
      <head>
           <base href="http://codingsihalen.blogspot.com/2013/01/" target="_blank"/>
      </head>
</html>

<link> head element

මේ tag එක නම් ගොඩක් අය භාවිතා කරල ඇති. අපි මේක භාවිතා කරන්නේ අපේ වෙබ් පිටුව හා වෙනත් බාහිර document එකක් අතර සම්බන්ධයක් ඇති කරන්නයි. සරලම උදාහරණය තමයි අපේ වෙබ් පිටු වලට භාහිර stylesheet සම්බන්ද කර ගැනීම. ඒ ගැන වැඩි විස්තර අපේ CSS පාඩම් මාලාවෙන් ඔයාලට ඉගෙන ගන්න පුළුවන්.

<html>
      <head>
           <link rel="stylesheet" type="text/css" href="style.css"/>
      </head>
</html>

<style> head element

මේ Tag එක අපි යොදා ගන්නවා අපේ HTML elements වලට head එක තුලදී CSS styles ලියන්න. මේ tag එකත් හරිම ජනප්‍රිය එකක්.

<html>
     <head>
          <style type="text/css">
              body 
              {
                background-color:yellow
              }
              p 
              {
                color:blue
              }
          </style>
     </head>
</html>

<meta> head element

මේ tag එකෙන් අපි කරන්නේ අපේ වෙබ් පිටුවට අදාල දත්ත සඳහන් කරන එකයි. Search engine වලට මේ දත්ත වැදගත්. මේවා වෙබ් පිටුව බලන අයට පේන්නේ නෑ. අපිට පුළුවන් පේ වෙබ් පිටුවට අදාල keywords, description, author වගේ දේවල් සඳහන් කරන්න. අපි පොඩි උදාහරණයක් බලමු.

<html>
<head>

KEYWORDS සඳහන් කරන හැටි
    <meta name="keywords" content="HTML, CSS, XML, XHTML,  JavaScript">

වෙබ් පිටුවේ description එක සඳහන් කරන හැටි

    <meta name="description" content="Free Web tutorials on HTML and CSS">

වෙබ් පිටුවේ කතෘ සඳහන් කරන හැටි

    <meta name="author" content="Hege Refsnes">

වෙබි පිටුව ඉබේම refresh කරන හැටි.

    <meta http-equiv="refresh" content="30">

</head>
</html>

<script> head element

මේක ඉතින් අපි භාවිතා කරන්නේ client side scripts ලියන්න තමයි, JavaScripts වගේ. අපි මේ tag එක ගැන වැඩි විස්තර පසු පාඩමකින් කතා කරමු. අයෙත් අපි තවත් පාඩමකින් හමුවෙන තුරු ගිහින් එන්නම්.......
Read More

Wednesday, March 6, 2013

8. C අටවන පාඩම - Pointers (දර්ශකයන්)


මෙම ලිපියෙන් මම බලාපොරොත්තු වෙන්නෙ C භාෂාවේ භාවිතා වන වැදගත් යෙදුමක් වන දර්ශක (Pointers) පිළිබදව විස්තර කිරීමටයි. 

Pointer (දර්ශක) යනු මතක ගබඩාවේ ලිපිනයන් (Memory location address) සමග ගනුදෙනු කිරීමට C හි භාවිතා වන යෙදුමයි. මෙය භාවිතයෙන් ඉතා පහසුවෙන් memory location වෙත ගමන් කල හැකි අතර ඒවායෙහි ගබඩා කර ඇති values කියවීම, වෙනස් කිරීම ආදිය pointers භාවිතයෙන් පහසුවෙන් සිදු කර ගත හැක. 


දර්ශක භාවිතයේදී පෙරදී භාවිතා නොකල අලුත් කාරක රීති (Syntax) භාවිතා කිරීමට සිදුවේ. මන්ද මෙහිදි අපට මතක ගබඩාවේ ලිපිනයටත්, ගබඩා වී ඇති දත්ත අගයටත් (Memory location address and Value) යන දෙකම ලබාගත යුතු බැවින්. 

දර්ශක හදුන්වාදීමේදී එය pointer ආකාරයේ විචල්‍යක් බවත් එහි ගබඩා කළ හැකි දත්ත ආකාරය (Data type) කුමක්ද යන වගත් compiler එකට දැන්විය යුතුය. පහත දැක්වෙන්නෙ pointer variable එකක් declare කරන ආකාරයයි. 

<variable_type> *<name>; 

උදාහරණයක් ලෙස Integer ආකාරයේ විචළ්‍ය දර්ශකයක් හදුන්වාදෙන ආකාරය සලකා බලමු.

int *Number; 

මෙහි දැකිය හැකි * (තරු/star) ලකුණින් හැගවෙන්නේ මෙම විචල්‍ය දර්ශකයක් බවයි.

සාමාන්‍ය විචල්‍යකින් මතක ගබඩා ලිපිනය(Memory location address) එක ලබා ගැනීම.

සමාන්‍ය විචල්‍යකින් memory location address එක ලබාගැනීමට C ක්‍රමලේඛනයේදී '&' සංකේතය භාවිතා කරයි.

int Number= 5;
int *p = &Number; 

ඉහත උදාහරණය සලකන්න එහි මුලින්ම Integer ආකාරයේ Number විචල්‍යට අගය 5ක් ලෙස යොදා ඇත. දෙවනිව Integer ආකාරයේ p නම් පොයින්ටර් විචල්‍යකට &Number අගය ඇතුලු කර ඇත. මෙහිදී සිදුවන්නේ p හි අගය ලෙස Number විදල්‍යයේ Memory location address එක assign වේ. 

පොයින්ටර් විචල්‍යකින් එහි මතක ගබඩාවේ අගය ලබා ගැනීම.

පොයින්ටර් විචල්‍යක් භාවිතයෙන් එහි ගබඩා කර ඇති ලිපිනයේ අඩංගු අගය ලබාගන්නා ආකරය දැන් අපි බලමු.



printf("%d", *p);


ඉහත උදාහරණයේ ආකාරයට *p ලෙස භාවිතා කිරීමෙන් අපට පොයින්ටරයේ අඩංගු අගය කෙලින්ම ලබාගත හැක.

ඉහත සාකඡ්චාකල දෑ සැකෙවින් පහදා ගැනීමට පහත උදාහරණය උත්සාහ කරන්න.


#include <stdio.h>

void main(){
    int x;            /* A normal integer*/
    int *p;           /* A pointer to an integer ("*p" is an integer, so p
                       must be a pointer to an integer) */

    p = &x;           /* Read it, "assign the address of x to p" */
    printf("Enter value:");
    scanf( "%d", &x );          /* Put a value in x, we could also use p here */
    printf( "Value of pointer is %d\n", *p ); /* Note the use of the * to get the value */
    printf( "Memory address is %d\n", p ); /*Display memory address from pointer */
    printf( "Memory address of x is %d\n", &x ); /*Use of & to get memory address */
    printf( "Value of x is %d\n", x ); 
}

මෙමගින් Pointer (දර්ශක) විචල්‍ය ගැන අවබෝධයක් ලබාගන්නට හැකිවන්නට ඇතැයි සිතමි. දර්ශක විචල්‍යද C හි භාවිතා වන තවත් විචල්‍ය ආකාරයකි.C හිදී එමගින් Memory location එක සමග ගණුදෙනු කිරීමට ක්‍රමලේඛකයාට අවකාශය ලබාදෙයි.
Read More