<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6017707773995652599</id><updated>2012-01-09T01:21:33.725+02:00</updated><category term='Linked list'/><category term='MC68000'/><category term='C'/><category term='Электроник'/><category term='AJAX'/><category term='зураг боловсруулалт'/><category term='litelang'/><category term='Java'/><category term='Системийн програмчлал'/><category term='cliche'/><category term='Haskell'/><category term='queue'/><category term='сүлжээ'/><category term='stack'/><category term='Ассемблэр'/><category term='shared memory'/><category term='Линүкс'/><category term='shell'/><category term='python'/><category term='Linux'/><category term='MC6800'/><category term='Damn Small Linux'/><category term='Anroid'/><category term='semaphore'/><category term='Нийтлэл'/><category term='код'/><category term='spoj'/><category term='Android'/><category term='ipc'/><category term='Berkeley RISC I'/><category term='Intel x86'/><category term='svn'/><category term='HOWTO'/><title type='text'>Дагвадоржийн блог</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-90363123400823609</id><published>2012-01-09T01:21:00.002+02:00</published><updated>2012-01-09T01:21:33.732+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Нийтлэл'/><title type='text'>The Friendship of the Music: A review for Genghis Blues</title><content type='html'>&lt;br /&gt;
&lt;div style="background-color: transparent;"&gt;
&lt;b id="internal-source-marker_0.8649236422497779"&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The world as we know is full of inspirations, surprises and other amazing things with all its diversity. This diversity is its people who vary from the highlanders in the Andes, to the arctic Eskimos, from city dwellers of enormous metropolitan areas to Tuareg people in the Saharan desert. The greatest inspiration that is maybe music, a common thing that all different cultures in the world share. The inspiration for Paul Pena, a renowned jazz musician from the United States, was a practice of music from the nomadic people in the Central Asian Altai mountains. Called &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;khoomei&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; locally, this is a style of throat-singing in which the performer produces multiple tones simultaneously making a unique melody. As interesting as how it sounds is the journey and friendship formed when Paul Pena wanted to know better about what he heard on radio.&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Khoomei, otherwise called overtone singing, is practiced by the nomadic people in Mongolia, Chinese Inner Mongolia and Russian Siberian republics like Tuva and Khakassia. It’s believed that khoomei was originated from nomadic herdsmen trying to emulate sounds of mountains, rivers, sand and wild animals. Mongolian nomads have a very different lifestyle which have great impact on khoomei. Mongolian plateau consists of steppes and Gobi desert that last thousands of kilometers where one may not find people for days. Altai ranges have steep mountains raising over the clouds. Herding domestic animals in the arid steppes and hunting games in enormous mountains can last days and sometimes months without seeing home. In such geography and condition, wilderness can be friend of people. Culturally tied to Mongolia, Tuva is a republic in Russian Federation. Tuva was an independent country in the first half of the 20-th century [1]. Afterwards it was incorporated into Russia. The people in Tuva share &amp;nbsp;lots of cultural elements with Mongolians.&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Paul Pena, an American jazz singer accidentally catches khoomei on the radio, when he was surprised by what he was hearing. Excited, he goes to a local music store to look up what he has just listened where he finds out about khoomei performed by Tuvan artists. He wants to go further and make some studies. Apparently he gets along with an organization called Friends of Tuva which is a friendly community that gathers information about Tuva. Friends of Tuva was formed by Nobel laureate physicist Richard Feynman and friends [2]. After performing khoomei unofficially in a Tuvan event in America, Paul Pena was invited to Tuva by Kongar-Ool Ondar who is a throat-singing master in Tuva. After informing with letters, just after the USSR was split, the group of friends travel to Tuva in a very long trip. They get there to be welcomed very friendly by the Tuvan people and meet Kongar-Ool Ondar. The group get along very nicely with local people thus establishing friendships with the people. Furthermore, having learnt khoomei before going to Tuva, Paul Pena wins Tuvan national throat-singing competition called Kargyrgaa [3]. Paul Pena and Kongar-Ool Ondar perform famous jazz music and Tuvan music together with big smiles on both of their faces. The friendship was there to grow and last rest of the following years.&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The world is a big... big place. There are thousands of different ethnic groups and hundreds of different cultures which can not be easily percieved by each other. But inspirations are always there to be found by some medium. In “Genghis Blues”, the music was the medium and it connected different cultures to create friendships among them. &amp;nbsp;It can be best summarized by Paul Pena in his letter which states, “Kongar-Ool and I have been working in the hope of promoting better understanding between people of different nationalities, races, beliefs, languages, and cultural and economic systems. I believe that in this work there can be found evidence that such understanding and cooperation can be realized.” [3]&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: justify;"&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;References&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;ol&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;World at War timelines. &lt;/span&gt;&lt;a href="http://www.schudak.de/timelines/tannutuva1911-1944.html"&gt;&lt;span style="background-color: transparent; color: black; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.schudak.de/timelines/tannutuva1911-1944.html&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; retrieved Jan 03, 2012&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Friends of Tuva website. Frequently asked questions: &lt;/span&gt;&lt;a href="http://www.fotuva.org/faq/part_1.html"&gt;&lt;span style="background-color: transparent; color: black; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.fotuva.org/faq/part_1.html&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; retrieved Jan 03, 2012&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;A personal letter by Paul Pena in 1994. &lt;/span&gt;&lt;a href="http://www.fotuva.org/gb/paul.html"&gt;&lt;span style="background-color: transparent; color: black; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;http://www.fotuva.org/gb/paul.html&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; retrieved Jan 03, 2012&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-90363123400823609?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/90363123400823609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2012/01/friendship-of-music-review-for-genghis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/90363123400823609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/90363123400823609'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2012/01/friendship-of-music-review-for-genghis.html' title='The Friendship of the Music: A review for Genghis Blues'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-8168268109698680184</id><published>2011-12-24T19:25:00.001+02:00</published><updated>2011-12-24T19:25:57.498+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='сүлжээ'/><title type='text'>syncp протоколын тухай</title><content type='html'>&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/8QJNfQYAyJE" width="560"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-8168268109698680184?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/8168268109698680184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2011/12/syncp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8168268109698680184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8168268109698680184'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2011/12/syncp.html' title='syncp протоколын тухай'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/8QJNfQYAyJE/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-2471661013934842703</id><published>2011-03-20T18:58:00.005+02:00</published><updated>2011-03-21T12:17:36.548+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Электроник'/><title type='text'>Verilog ашиглан цуваа танигч хийсэн минь</title><content type='html'>&lt;p&gt;Verilog хэрэглээд цуваа танигч хийснийгээ та бүхэнтэй хуваалцья гэж бодлоо. Электрон хэлхээ нь хир зай эзлэх вэ, хэлхээ их халах уу гэх мэт асуудлуудыг бодолцоогүйг анхаарна уу!&lt;/p&gt;

&lt;p&gt;Энд цуваа танигчийгаа finite-state machine болон цуваа оролт, паралель гаралттай shift register ашиглан хийсэн юм.&lt;/p&gt;

&lt;p&gt;Finite-state machine&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Module Name:   fsm
// Tool versions: Xilinx ISE 12.1
// Description:
//                Sequence detector using FSM
//
//////////////////////////////////////////////////////////////////////////////////
module fsm(clk, reset, inp, outp);
  input clk;
  input reset;
  input inp;
  output outp;
 
  reg[2:0] state;
  reg outp;
 
  always @(posedge clk) // always trigger on clk
     begin
        if (reset)  // check if reset
           begin
              state &lt;= 3'b000;                outp &lt;= 1'b0;             end          else        // else update outp             begin                if (state == 3'b111 &amp;amp; inp == 1'b0)                   outp &lt;= 1'b1;                else                   outp &lt;= 1'b0;             end          case(state) // state transition          3'b000:             if (inp == 1'b1) state &lt;= 3'b001;             else state &lt;= 3'b000;          3'b001:             if (inp == 1'b0) state &lt;= 3'b010;             else state &lt;= 3'b000;          3'b010:             if (inp == 1'b0) state &lt;= 3'b011;             else state &lt;= 3'b000;          3'b011:             if (inp == 1'b1) state &lt;= 3'b100;             else state &lt;= 3'b000;          3'b100:             if (inp == 1'b0) state &lt;= 3'b101;             else state &lt;= 3'b000;          3'b101:             if (inp == 1'b1) state &lt;= 3'b110;             else state &lt;= 3'b000;          3'b110:             if (inp == 1'b1) state &lt;= 3'b111;             else state &lt;= 3'b000;          3'b111:             state &lt;= 3'b000;          default:             state &lt;= 3'b000;          endcase       end       endmodule &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Хэлхээ нь ийм болж байна:&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-jFlwC2AO0rc/TYY10ruY8RI/AAAAAAAAAI8/zuJ8ZUWjoB8/s1600/fsm_tech.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 184px;" src="http://3.bp.blogspot.com/-jFlwC2AO0rc/TYY10ruY8RI/AAAAAAAAAI8/zuJ8ZUWjoB8/s400/fsm_tech.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5586211567006445842" /&gt;&lt;/a&gt;

&lt;p&gt;Shift-register&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Module Name:   shr
// Tool versions: Xilinx ISE 12.1
// Description: 
//                Sequence detector using shift register
//
//////////////////////////////////////////////////////////////////////////////////
module shr(clk, reset, inp, outp);
   input clk;
   input reset;
   input inp;
   output outp;
   
   reg[7:0] shr;
   reg outp;
   
   always @(posedge clk) // always trigger on clk
      begin
         if (reset)  // check if reset
            begin
               shr &lt;= 8'b00000000;
               outp &lt;= 1'b0;
            end
         else
            begin
               shr &lt;= shr &lt;&lt; 1;
               shr[0] &lt;= inp;
               if (shr == 8'b10010110)
                  outp &lt;= 1'b1;
               else
                  outp &lt;= 1'b0;
            end
         
      end

endmodule
&lt;/code&gt;&lt;/pre&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-LMuM5evVMj0/TYY2KfXbKlI/AAAAAAAAAJE/--JdTgT-50w/s1600/shr_tech.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 342px;" src="http://1.bp.blogspot.com/-LMuM5evVMj0/TYY2KfXbKlI/AAAAAAAAAJE/--JdTgT-50w/s400/shr_tech.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5586211941646019154" /&gt;&lt;/a&gt;

&lt;p&gt;За тэгээд 2уланг нь доорх тест модулиар ажиллууллаа даа:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// Module Name:   shr_test
// Tool versions: Xilinx ISE 12.1
// Description:
//                Verilog Test Fixture created by ISE for modules:
//                   shr
//
////////////////////////////////////////////////////////////////////////////////

module shr_test;

// Inputs
reg clk;
reg reset;
reg inp;

// Outputs
wire outp;

// Instantiate the Unit Under Test (UUT)
shr uut (
 .clk(clk),
 .reset(reset),
 .inp(inp),
 .outp(outp)
);

always #5 clk = ~clk;

initial begin
 // Initialize
 clk = 1;
 inp = 0;
 reset = 0;

 // reset=1 when clk rises and reset=0
 // in the next rise of clk
 #9 reset = 1;
 #3 reset = 0;

 // Stimulus
 #1 inp = 1;
 #10 inp = 0;
 #10 inp = 0;
 #10 inp = 1;
 #10 inp = 0;
 #10 inp = 1;
 #10 inp = 1;
 #10 inp = 0;
 #30
 $finish;
end
    
endmodule
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;За тэгсэн чинь доорх симуляцууд гараад ирлээ.&lt;/p&gt;

&lt;p&gt;Finite-state machine&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-VEDgo2G1R1k/TYY21KMWIaI/AAAAAAAAAJM/IiqPwflfYyU/s1600/fsm_sim.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 172px;" src="http://3.bp.blogspot.com/-VEDgo2G1R1k/TYY21KMWIaI/AAAAAAAAAJM/IiqPwflfYyU/s400/fsm_sim.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5586212674696782242" /&gt;&lt;/a&gt;

&lt;p&gt;Shift register&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-s0QvOZZJYjk/TYY3D8iu3hI/AAAAAAAAAJU/f5uRYbqMoHw/s1600/shr_sim.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 172px;" src="http://2.bp.blogspot.com/-s0QvOZZJYjk/TYY3D8iu3hI/AAAAAAAAAJU/f5uRYbqMoHw/s400/shr_sim.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5586212928730619410" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-2471661013934842703?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/2471661013934842703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2011/03/verilog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2471661013934842703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2471661013934842703'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2011/03/verilog.html' title='Verilog ашиглан цуваа танигч хийсэн минь'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-jFlwC2AO0rc/TYY10ruY8RI/AAAAAAAAAI8/zuJ8ZUWjoB8/s72-c/fsm_tech.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-7491136625040085235</id><published>2011-03-19T13:48:00.004+02:00</published><updated>2011-03-21T12:11:55.257+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Электроник'/><title type='text'>Электроник ч сонирхолтой юм аа</title><content type='html'>&lt;p&gt;Компьютерийн инженер ч гэсэн электроникийг цухасхан сураад байгаадаа олзуурхаад байгаа. Цаана чинь "их бүтээн байгуулалт", "7000 инженер хэрэгтэй байна" гээд яриад байна. R&amp;amp;D (судалгаа) хийж үйлдвэржүүлэлтийг бий болгохын тулд инженерүүд маань өөрсдөө шинийг санаачилж, туршиж үзэх хэрэгтэй байна. Тэгээд орлого олохуйц шинэ бүтээгдэхүүний үйлдвэрлэлт бий болговол 7000 инженерийн нэг та 20 хүний ажлын байр бий болгож улс орноо хөгжүүлэхэд хувь нэмэр оруулж болох юм. Туршиж үзэхийн тулд харин инженер тал бүрийн мэдлэг туршлагатай байх хэрэгтэй гэж бодож байна.&lt;/p&gt;

&lt;p&gt;Жишээ нь компьютерийн инженер Bluetooth шиг богино долгионы радио дамжуулах технологи хөгжүүллээ гэхэд радио долгион, тодорхой хэлбэлзэлийн долгион үүсгэх хэлхээ хйих тухай мэдэхгүй байвал нэг тиймэрхүү.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-7491136625040085235?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/7491136625040085235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2011/03/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/7491136625040085235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/7491136625040085235'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2011/03/blog-post.html' title='Электроник ч сонирхолтой юм аа'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-9131338832808700214</id><published>2011-02-07T15:40:00.001+02:00</published><updated>2011-02-07T15:41:58.203+02:00</updated><title type='text'>Өөр нэг блог нээлээ</title><content type='html'>Энэ блогтоо бичсэн кодуудаа оруулаад байдын, тэгээд санал бодлоо бичих гээд өөр блог нээчихлээ. Хаяг нь:&lt;div&gt;
&lt;/div&gt;&lt;div&gt;&lt;a href="http://subjecttouncertainty.blogspot.com/"&gt;http://subjecttouncertainty.blogspot.com/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-9131338832808700214?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/9131338832808700214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2011/02/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/9131338832808700214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/9131338832808700214'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2011/02/blog-post.html' title='Өөр нэг блог нээлээ'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-8619666843442010759</id><published>2011-01-08T21:53:00.010+02:00</published><updated>2011-01-08T22:54:53.765+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Системийн програмчлал'/><category scheme='http://www.blogger.com/atom/ns#' term='Линүкс'/><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><title type='text'>FUSE - хэрэглэгчийн орон зайн файл систем</title><content type='html'>&lt;p&gt;Сүүлийн үед &lt;a target="_blank" href="http://academiamongolica.appspot.com/196002"&gt;үүл&lt;/a&gt;, &lt;a target="_blank" href="http://academiamongolica.appspot.com/142004"&gt;тархай систем&lt;/a&gt; гэсэн нэр томьёонуудыг олонтаа сонсох боллоо. Сүлжээ ашиглан зарим файлуудыг өөр &lt;a href="http://academiamongolica.appspot.com/196002"&gt;тооцоолуур&lt;/a&gt; дээр хадгалаж, өөрийн тооцоолуур дээр байгаа мэтээр хандах гэх мэт олон дэвшилтэт арга замууд бие болсон ба ийм технологи дээр суурилсан олон start-up компани бий болсон.

&lt;p&gt;Энэ бичлэгтээ ийм технологи хийхэд маш их тус болдог FUSE (хэрэглэгчийн орон зайн файл систем) дээр жишээ хийж үзсэнээ хуваалцья гэж бодлоо. &lt;a href="http://academiamongolica.appspot.com/189003"&gt;Юниксжуу&lt;/a&gt; үйлдлийн систем дээр байгаа файл системийг хүссэнээрээ харж хэрэглэхэд тус болдог &lt;a href="http://academiamongolica.appspot.com/180003"&gt;цөмийн&lt;/a&gt; модуль юм.

&lt;p&gt;За тэгэхээр нэг ийм жишээ бичье. Та өөрийгөө тагнуулч байна гэж бод. Тагнаж байгаа хүнийхээ гэрт орлоо. Хэрэглэгчийн тодорхой хугацаанд хандсан файлыг эсвэл хамгийн сүүлд хандсан файлыг олохыг хүслээ гэж бодьё. Энэ жишээн дээр бичих програм маань тодорхой &lt;a href="http://academiamongolica.appspot.com/26006"&gt;хавтасыг&lt;/a&gt; хувьсагч болгож өгөөд ажиллуулахад тэр хавтасан дотор байгаа файлуудыг хамгийн сүүлд өөрчлөгдсөн жил, сар, өдөр, цагаар нь ангилладаг програм байх юм.

&lt;p&gt;Жишээ нь, доорх шиг хавтасыг ангилья гэж бодьё:

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gv39U_UEX20/TSjH_GHp_YI/AAAAAAAAAII/whzeRHJKqXE/s1600/Untitled.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 142px;" src="http://4.bp.blogspot.com/_gv39U_UEX20/TSjH_GHp_YI/AAAAAAAAAII/whzeRHJKqXE/s400/Untitled.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5559913626777288066" /&gt;&lt;/a&gt;

&lt;p&gt;Дээрх зурган дээр файлын нэрүүдийн өмнөх багана файлын хамгийн сүүлд өөрчлөгдсөн огноо болохыг анхаарна уу!

&lt;p&gt;Тэгвэл програмыг ажиллуулсаны хүчинд доорх байдлаар харж болох юм.

&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gv39U_UEX20/TSjJuWCOvTI/AAAAAAAAAIQ/0RoICOzYha0/s1600/Untitled.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 355px;" src="http://2.bp.blogspot.com/_gv39U_UEX20/TSjJuWCOvTI/AAAAAAAAAIQ/0RoICOzYha0/s400/Untitled.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5559915538014977330" /&gt;&lt;/a&gt;

&lt;p&gt;Дээрх зурган дээр бид ангилсан хавтасуудын тусламжтайгаар 2010 оны 05 сарын 10-нь 01 цагт хамгийн сүүлд өөрчлөгдсөн файлыг харж байгаа юм.

&lt;p&gt;За ингээд жишээний мааны код:

&lt;p&gt;&lt;strong&gt;modiffs.c&lt;/strong&gt;&lt;/p&gt;

&lt;div style="height: 300px; overflow: auto;"&gt;
&lt;code&gt;
&lt;pre&gt;

#define FUSE_USE_VERSION 26

static const char * modiffsVersion = "2010.12.24";

#include &amp;lt;sys/types.h&amp;gt;
#include &amp;lt;sys/stat.h&amp;gt;
#include &amp;lt;sys/statvfs.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;strings.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;assert.h&amp;gt;
#include &amp;lt;errno.h&amp;gt;
#include &amp;lt;fcntl.h&amp;gt;
#include &amp;lt;sys/xattr.h&amp;gt;
#include &amp;lt;dirent.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
#include &amp;lt;fuse.h&amp;gt;
#include &amp;lt;time.h&amp;gt;

#define STACK_SIZE 250

typedef struct stack_s {
   char * items[STACK_SIZE];
   int size;
} stack;

int stack_exist(stack * s, char * elem) {
   int i = 0;
   for (i=0; i &amp;lt; s-&amp;gt;size; i++) {
       if (strcmp(elem, s-&amp;gt;items[i]) == 0) {
           return 1;
       }
   }
   return 0;
}

void stack_push(stack * s, char * elem) {
   s-&amp;gt;items[s-&amp;gt;size++] = elem;
}

int dir_depth(const char * path) {
   int depth = 0;
   char * temp = strchr(path, '/');
   while (temp != NULL) {
       depth++;
       temp = strchr(temp + 1, '/');
   }
   return depth;
}

char * full_path(char * upath, char * d_name) {
   char * ret = (char *) malloc(sizeof(char)*(strlen(upath) + strlen(d_name) + 1));
   strcpy(ret, upath);
   strcat(ret, d_name);
   return ret;
}

// Global to store our read-write path
char * rw_path;

// Translate an modiffs path into it's underlying filesystem path
static char * translate_path(const char * path) {

   char * rPath= malloc(sizeof(char)*(strlen(path)+strlen(rw_path)+1));

   strcpy(rPath, rw_path);
   if (rPath[strlen(rPath)-1]=='/') {
       rPath[strlen(rPath)-1]='\0';
   }
  
   int depth = dir_depth(path);
  
   if (strcmp("/", path) == 0) {
       strcat(rPath, "/");
   } else if (depth &amp;lt; 5) {
       strcat(rPath, "/");
   } else {
       int i = 0;
       char * temp = strchr(path, '/');
       while (i &amp;lt; (depth-1)) {
           i++;
           temp = strchr(temp + 1, '/');
       }
       strcat(rPath, "/");
       strcat(rPath, temp);
   }
  
   return rPath;
}

/*
* level:
* 0: year
* 1: month
* 2: day
* 3: hour
*/
char * last_attr(const char * path, int level) {   
   int depth = 0;
   char * cont = (char *) malloc(sizeof(char)*strlen(path));
   strcpy(cont, path);
   char * temp = strtok(cont, "/");
   while (depth &amp;lt; level &amp;amp;&amp;amp; temp != NULL) {
       depth++;
       temp = strtok(NULL, "/");
   }
   return temp;
}

/******************************
*
* Callbacks for FUSE
*
******************************/

static int modiffs_getattr(const char * path, struct stat * stbuf) {
  
   int res = 0;
   int depth = dir_depth(path);
   memset(stbuf, 0, sizeof(struct stat));
  
   if (strcmp(path, "/") == 0) {
       stbuf-&amp;gt;st_mode = S_IFDIR | 0755;
       stbuf-&amp;gt;st_nlink = 1;
       stbuf-&amp;gt;st_ctime = time(NULL);
       stbuf-&amp;gt;st_atime = time(NULL);
       stbuf-&amp;gt;st_mtime = time(NULL);
       stbuf-&amp;gt;st_size = 4096;
   } else if (depth &amp;lt; 5) {       
       stbuf-&amp;gt;st_mode = S_IFDIR | 0444;
       stbuf-&amp;gt;st_nlink = 1;
       stbuf-&amp;gt;st_ctime = time(NULL);
       stbuf-&amp;gt;st_atime = time(NULL);
       stbuf-&amp;gt;st_mtime = time(NULL);
       stbuf-&amp;gt;st_size = 4096;
   } else {       
       char * upath = translate_path(path);
       res = lstat(upath, stbuf);
       free(upath);
       if(res == -1) {
           return -errno;
       }
   }

   return res;
}

static int modiffs_readlink(const char *path, char *buf, size_t size)
{
   int res;
   char * upath = translate_path(path);

   res = readlink(upath, buf, size - 1);
   free(upath);
   if(res == -1) {
       return -errno;
   }
   buf[res] = '\0';
   return 0;
}

static int modiffs_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) {
  
   DIR * dp;
   struct dirent * de;
   int res;
  
   struct tm *ts;
  
   (void) offset;
   (void) fi;
  
   int depth;
  
   char * upath = translate_path(path);
  
   dp = opendir(upath);
  
   if(dp == NULL) {
       res = -errno;
       return res;
   }
  
   filler(buf, ".", NULL, 0);
   filler(buf, "..", NULL, 0);
  
   if (strcmp("/", path) == 0) {       
       stack years;
       years.size = 0;
       while((de = readdir(dp)) != NULL) {       
           struct stat st_modif;
           memset(&amp;amp;st_modif, 0, sizeof(st_modif));
           char * year = (char *) malloc(sizeof(char) * 5);           
           stat(full_path(upath, de-&amp;gt;d_name), &amp;amp;st_modif);
           ts = localtime(&amp;amp;(st_modif.st_mtime));
           strftime(year, 255, "%Y", ts);
           if (stack_exist(&amp;amp;years, year) == 0) {
               stack_push(&amp;amp;years, year);
               filler(buf, year, NULL, 0);
           }
       }
   } else {
       depth = dir_depth(path);
       if (depth == 1) {
           stack months;
           months.size = 0;
           while((de = readdir(dp)) != NULL) {       
               struct stat st_modif;
               memset(&amp;amp;st_modif, 0, sizeof(st_modif));
               char * year = (char *) malloc(sizeof(char)*5);
               char * month = (char *) malloc(sizeof(char)*3);
               stat(full_path(upath, de-&amp;gt;d_name), &amp;amp;st_modif);
               ts = localtime(&amp;amp;(st_modif.st_mtime));
               strftime(year, 255, "%Y", ts);
               strftime(month, 255, "%m", ts);
               if (strcmp(last_attr(path,0), year) == 0) {
                   if (stack_exist(&amp;amp;months, month) == 0) {
                       filler(buf, month, NULL, 0);
                       stack_push(&amp;amp;months, month);
                   }
               }
           }
       } else if (depth == 2) {
           stack days;
           days.size = 0;
           while((de = readdir(dp)) != NULL) {       
               struct stat st_modif;
               memset(&amp;amp;st_modif, 0, sizeof(st_modif));
               char * year = (char *) malloc(sizeof(char)*5);
               char * month = (char *) malloc(sizeof(char)*3);
               char * day = (char *) malloc(sizeof(char)*3);
               stat(full_path(upath, de-&amp;gt;d_name), &amp;amp;st_modif);
               ts = localtime(&amp;amp;(st_modif.st_mtime));
               strftime(year, 255, "%Y", ts);
               strftime(month, 255, "%m", ts);
               strftime(day, 255, "%d", ts);
              
               if (strcmp(last_attr(path,0), year) == 0 &amp;amp;&amp;amp;
                   strcmp(last_attr(path,1), month) == 0) {
                   if (stack_exist(&amp;amp;days, day) == 0) {
                       stack_push(&amp;amp;days, day);
                       filler(buf, day, NULL, 0);
                   }
               }                           
           }
       } else if (depth == 3) {
           stack hours;
           hours.size = 0;
           while((de = readdir(dp)) != NULL) {       
               struct stat st_modif;
               memset(&amp;amp;st_modif, 0, sizeof(st_modif));
               char * year = (char *) malloc(sizeof(char)*5);
               char * month = (char *) malloc(sizeof(char)*3);
               char * day = (char *) malloc(sizeof(char)*3);
               char * hour = (char *) malloc(sizeof(char)*3);
               stat(full_path(upath, de-&amp;gt;d_name), &amp;amp;st_modif);
               ts = localtime(&amp;amp;(st_modif.st_mtime));
               strftime(year, 255, "%Y", ts);
               strftime(month, 255, "%m", ts);
               strftime(day, 255, "%d", ts);
               strftime(hour, 255, "%H", ts);
              
               if (strcmp(last_attr(path,0), year) == 0 &amp;amp;&amp;amp;
                   strcmp(last_attr(path,1), month) == 0 &amp;amp;&amp;amp;
                   strcmp(last_attr(path,2), day) == 0) {
                   if (stack_exist(&amp;amp;hours, hour) == 0) {
                       stack_push(&amp;amp;hours, hour);
                       filler(buf, hour, NULL, 0);
                   }
               }                           
           }
       } else {
           while((de = readdir(dp)) != NULL) {
               if (strcmp(".", de-&amp;gt;d_name) == 0 || strcmp("..", de-&amp;gt;d_name) == 0) {
                   continue;
               }             
              
               struct stat st_modif;
               memset(&amp;amp;st_modif, 0, sizeof(st_modif));
               char * year = (char *) malloc(sizeof(char)*5);
               char * month = (char *) malloc(sizeof(char)*3);
               char * day = (char *) malloc(sizeof(char)*3);
               char * hour = (char *) malloc(sizeof(char)*3);
               stat(full_path(upath, de-&amp;gt;d_name), &amp;amp;st_modif);
               ts = localtime(&amp;amp;(st_modif.st_mtime));
               strftime(year, 255, "%Y", ts);
               strftime(month, 255, "%m", ts);
               strftime(day, 255, "%d", ts);
               strftime(hour, 255, "%H", ts);
              
               if (strcmp(last_attr(path,0), year) == 0 &amp;amp;&amp;amp;
                   strcmp(last_attr(path,1), month) == 0 &amp;amp;&amp;amp;
                   strcmp(last_attr(path,2), day) == 0 &amp;amp;&amp;amp;
                   strcmp(last_attr(path,3), hour) == 0) {
                  
                   struct stat st;
                   memset(&amp;amp;st, 0, sizeof(st));
                   st.st_ino = de-&amp;gt;d_ino;
                   st.st_mode = de-&amp;gt;d_type &amp;lt;&amp;lt; 12;

                   if (filler(buf, de-&amp;gt;d_name, &amp;amp;st, 0)) {
                       break;
                   }
               }
           }
       }
   }
  
   free(upath);
   closedir(dp);
  
   return 0;
}

static int modiffs_mknod(const char *path, mode_t mode, dev_t rdev)
{
   (void)path;
   (void)mode;
   (void)rdev;
   return -EROFS;
}

static int modiffs_mkdir(const char *path, mode_t mode)
{
   (void)path;
   (void)mode;
   return -EROFS;
}

static int modiffs_unlink(const char *path)
{
   (void)path;
   return -EROFS;
}

static int modiffs_rmdir(const char *path)
{
   (void)path;
   return -EROFS;
}

static int modiffs_symlink(const char *from, const char *to)
{
   (void)from;
   (void)to;
   return -EROFS;
}

static int modiffs_rename(const char *from, const char *to)
{
   (void)from;
   (void)to;
   return -EROFS;
}

static int modiffs_link(const char *from, const char *to)
{
   (void)from;
   (void)to;
   return -EROFS;
}

static int modiffs_chmod(const char *path, mode_t mode)
{
   (void)path;
   (void)mode;
   return -EROFS;

}

static int modiffs_chown(const char *path, uid_t uid, gid_t gid)
{
   (void)path;
   (void)uid;
   (void)gid;
   return -EROFS;
}

static int modiffs_truncate(const char *path, off_t size)
{
   (void)path;
   (void)size;
   return -EROFS;
}

static int modiffs_utime(const char *path, struct utimbuf *buf)
{
   (void)path;
   (void)buf;
   return -EROFS;
}

static int modiffs_open(const char *path, struct fuse_file_info *finfo)
{
   int res;
  
   int flags = finfo-&amp;gt;flags;

   if ((flags &amp;amp; O_WRONLY) || (flags &amp;amp; O_RDWR) || (flags &amp;amp; O_CREAT) || (flags &amp;amp; O_EXCL) || (flags &amp;amp; O_TRUNC) || (flags &amp;amp; O_APPEND)) {
       return -EROFS;
   }
  
   char * upath = translate_path(path);

   res = open(upath, flags);

   free(upath);
   if(res == -1) {
       return -errno;
   }
   close(res);
  
   return 0;
}

static int modiffs_read(const char *path, char *buf, size_t size, off_t offset, struct fuse_file_info *finfo)
{
   int fd;
   int res;
   (void)finfo;

   char * upath = translate_path(path);
   fd = open(upath, O_RDONLY);
   free(upath);
   if(fd == -1) {
       res = -errno;
       return res;
   }
   res = pread(fd, buf, size, offset);

   if(res == -1) {
       res = -errno;
   }
   close(fd);
   return 0;
  
}

static int modiffs_write(const char *path, const char *buf, size_t size, off_t offset, struct fuse_file_info *finfo)
{
   (void)path;
   (void)buf;
   (void)size;
   (void)offset;
   (void)finfo;
   return -EROFS;
}

static int modiffs_statfs(const char *path, struct statvfs *st_buf)
{
   int res;
   char * upath = translate_path(path);
   res = statvfs(upath, st_buf);
   free(upath);
   if (res == -1) {
       return -errno;
   }
   return 0;
}

static int modiffs_release(const char *path, struct fuse_file_info *finfo)
{
   (void) path;
   (void) finfo;
   return 0;
}

static int modiffs_fsync(const char *path, int crap, struct fuse_file_info *finfo)
{
   (void) path;
   (void) crap;
   (void) finfo;
   return 0;
}

static int modiffs_access(const char *path, int mode)
{
   int res;
   char *upath = translate_path(path);

   /* Don't pretend that we allow writing
    * Chris AtLee &amp;lt;chris@atlee.ca&amp;gt;
    */
   if (mode &amp;amp; W_OK)
       return -EROFS;

   res = access(upath, mode);
   free(upath);
   if (res == -1) {
       return -errno;
   }
   return res;
}

struct fuse_operations modiffs_oper = {
   .getattr     = modiffs_getattr,
   .readlink    = modiffs_readlink,
   .readdir     = modiffs_readdir,
   .mknod       = modiffs_mknod,
   .mkdir       = modiffs_mkdir,
   .symlink     = modiffs_symlink,
   .unlink      = modiffs_unlink,
   .rmdir       = modiffs_rmdir,
   .rename      = modiffs_rename,
   .link        = modiffs_link,
   .chmod       = modiffs_chmod,
   .chown       = modiffs_chown,
   .truncate    = modiffs_truncate,
   .utime       = modiffs_utime,
   .open        = modiffs_open,
   .read        = modiffs_read,
   .write       = modiffs_write,
   .statfs      = modiffs_statfs,
   .release     = modiffs_release,
   .fsync       = modiffs_fsync,
   .access      = modiffs_access
};
enum {
   KEY_HELP,
   KEY_VERSION,
};

static void usage(const char* progname)
{
   fprintf(stdout,
           "usage: %s readwritepath mountpoint [options]\n"
           "\n"
           "   Mounts readwritepath as a read-only mount at mountpoint\n"
           "\n"
           "general options:\n"
           "   -o opt,[opt...]     mount options\n"
           "   -h  --help          print help\n"
           "   -V  --version       print version\n"
           "\n", progname);
}

static int modiffs_parse_opt(void *data, const char *arg, int key,
                         struct fuse_args *outargs)
{
   (void) data;

   switch (key)
   {
   case FUSE_OPT_KEY_NONOPT:
       if (rw_path == 0)
       {
           rw_path = strdup(arg);
           return 0;
       }
       else
       {
           return 1;
       }
   case FUSE_OPT_KEY_OPT:
       return 1;
   case KEY_HELP:
       usage(outargs-&amp;gt;argv[0]);
       exit(0);
   case KEY_VERSION:
       fprintf(stdout, "ROFS version %s\n", modiffsVersion);
       exit(0);
   default:
       fprintf(stderr, "see `%s -h' for usage\n", outargs-&amp;gt;argv[0]);
       exit(1);
   }
   return 1;
}

static struct fuse_opt modiffs_opts[] = {
   FUSE_OPT_KEY("-h",          KEY_HELP),
   FUSE_OPT_KEY("--help",      KEY_HELP),
   FUSE_OPT_KEY("-V",          KEY_VERSION),
   FUSE_OPT_KEY("--version",   KEY_VERSION),
   FUSE_OPT_END
};

int main(int argc, char *argv[])
{
   struct fuse_args args = FUSE_ARGS_INIT(argc, argv);
   int res;

   res = fuse_opt_parse(&amp;amp;args, &amp;amp;rw_path, modiffs_opts, modiffs_parse_opt);
   if (res != 0)
   {
       fprintf(stderr, "Invalid arguments\n");
       fprintf(stderr, "see `%s -h' for usage\n", argv[0]);
       exit(1);
   }
   if (rw_path == 0)
   {
       fprintf(stderr, "Missing readwritepath\n");
       fprintf(stderr, "see `%s -h' for usage\n", argv[0]);
       exit(1);
   }

   fuse_main(args.argc, args.argv, &amp;amp;modiffs_oper, NULL);

   return 0;
}

&lt;/pre&gt;
&lt;/code&gt;
&lt;/div&gt;



&lt;p&gt;Дээрх кодыг Убунту дээр ирдэг fuse-rofs &lt;a href="http://academiamongolica.appspot.com/179002"&gt;багцын&lt;/a&gt; эх код дээр өөрчлөлт хийж бий болгосоныг анхаарна уу!

&lt;p&gt;&lt;a href="http://academiamongolica.appspot.com/146002"&gt;Эмхэтгэж&lt;/a&gt; ажиллуулахын тулд:

&lt;p&gt;&lt;strong&gt;test.sh&lt;/strong&gt;&lt;/p&gt;

&lt;code&gt;

gcc -o modiffs -Wall -ansi -W -std=c99 -g -ggdb -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -lfuse modiffs.c
fusermount -u /home/dagvadorj/Desktop/u
sudo umount /home/dagvadorj/Desktop/u
./modiffs /home/dagvadorj/Desktop/untitled /home/dagvadorj/Desktop/u

&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-8619666843442010759?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/8619666843442010759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2011/01/fuse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8619666843442010759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8619666843442010759'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2011/01/fuse.html' title='FUSE - хэрэглэгчийн орон зайн файл систем'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gv39U_UEX20/TSjH_GHp_YI/AAAAAAAAAII/whzeRHJKqXE/s72-c/Untitled.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-2858440388967929292</id><published>2010-12-07T18:55:00.002+02:00</published><updated>2011-12-24T19:26:24.340+02:00</updated><title type='text'>BX, Стамбулд</title><content type='html'>&lt;div&gt;
2 жилийн өмнө BX-ийг Стамбулд ирэхэд хийсэн анимэшн. Сая харсан чинь гоё санагдаад хуваалцлаа.&lt;/div&gt;
&lt;div&gt;
&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-6d506069178eea6c" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;
&lt;param name="bgcolor" value="#FFFFFF"&gt;
&lt;param name="allowfullscreen" value="true"&gt;
&lt;param name="flashvars" value="flvurl=http://v22.nonxt7.googlevideo.com/videoplayback?id%3D6d506069178eea6c%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331391358%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6CCA9D26E1783169CD59A42789F82C236A7F86B4.5A3145B1AC3C3B28F0AE9B50033C55AED0CAA78B%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D6d506069178eea6c%26offsetms%3D5000%26itag%3Dw160%26sigh%3D6MU77li9gOtFKKFcqY-Oqah0Hl8&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;
&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"
width="320" height="266" bgcolor="#FFFFFF"
flashvars="flvurl=http://v22.nonxt7.googlevideo.com/videoplayback?id%3D6d506069178eea6c%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331391358%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6CCA9D26E1783169CD59A42789F82C236A7F86B4.5A3145B1AC3C3B28F0AE9B50033C55AED0CAA78B%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D6d506069178eea6c%26offsetms%3D5000%26itag%3Dw160%26sigh%3D6MU77li9gOtFKKFcqY-Oqah0Hl8&amp;autoplay=0&amp;ps=blogger"
allowFullScreen="true" /&gt;&lt;/object&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-2858440388967929292?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=6d506069178eea6c&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/2858440388967929292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/12/bx.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2858440388967929292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2858440388967929292'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/12/bx.html' title='BX, Стамбулд'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-1096373073308756235</id><published>2010-11-12T02:43:00.005+02:00</published><updated>2010-11-12T02:59:22.028+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='litelang'/><title type='text'>Монгол хүний хийсэн програмын хэл</title><content type='html'>&lt;p&gt;Яаая, хүний анхаарал татах гээд лаг гарчиг тавьцан.

&lt;p&gt;2 сарын өмнөөс нэг хэлмэрчилдэг програмын хэл хийж эхэлсэн юмаа. Одоо альфа хувилбараа толилуулмаар байна. Дуусах яагаачгүй байгаа болохоор "0.81" хувилбар гэж нэрлэе.

&lt;p&gt;Энэ хаягаас татаж авч болно. &lt;a href="http://www.box.net/shared/sqp3d08p9e" target="_blank"&gt;http://www.box.net/shared/sqp3d08p9e&lt;/a&gt;

&lt;p&gt;Татаж авсны дараа задлаад root хэрэглэгчээр орсны дараа доорх коммандуудыг ажиллуулна.

&lt;pre&gt;
# make
# litelang example.lite
&lt;/pre&gt;

&lt;code&gt;example.lite&lt;/code&gt; болон түүн дотроос дуудагдаж байгаа &lt;code&gt;factorial.lite&lt;/code&gt; програм нь доорх агуулгатай.

&lt;p&gt;
&lt;strong&gt;example.lite&lt;/strong&gt;

&lt;pre&gt;
print("Тавтай морил!")

include("factorial.lite")

a=7
b=4
print("a=",a,", b=",b)
print("a+b=", a+b)
print("a/b=", a/b)
print("a%b=", a%b)
print("a!=",factorial(a))
print(8,"!=",factorial(8))

gcd = func(x,y)
  while y &gt; 0
    z = y
    y = x%y
    x = z
  end
  return(x)
end

print("15,12 хоёр тооны хамгийн их ерөнхий хуваагч бол: ",gcd(15,12))

print("Таны нэр: ")
a = input()
print("Сайн уу, ", a)

print("
litelang програмын хэл нь одоогийн байдлаар
альфа шатандаа байна.
")
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;factorial.lite&lt;/strong&gt;

&lt;pre&gt;
print("
Энэ файлд факториал функцийн тодорхойлолт бий.
")

factorial = func(n)
    value = 1
    while n&gt;0
       value *= n
       n -= 1
    end
    return(value)
end
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-1096373073308756235?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/1096373073308756235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/11/blog-post.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1096373073308756235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1096373073308756235'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/11/blog-post.html' title='Монгол хүний хийсэн програмын хэл'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-4221207708987036780</id><published>2010-10-01T17:41:00.007+03:00</published><updated>2011-03-21T12:22:38.777+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='queue'/><category scheme='http://www.blogger.com/atom/ns#' term='Linked list'/><category scheme='http://www.blogger.com/atom/ns#' term='stack'/><title type='text'>General purpose linked list, stack and queue for C</title><content type='html'>&lt;p&gt;Programmers refer to use modern programming languages like Java, Python or Ruby for their uses, because of their powerful built-in functions and flexibility. However, sooner or later, a programmer will have to face their old fella C someday.&lt;/p&gt;

&lt;p&gt;For me, I had to use C when I decided to write an interpreter for a programming language I am developing. Of course, C lack of a bunch of stuff, which other modern languages have like hash table, and indexing of a list with a negative index (Python can do list[-2]), etc. But the first things I needed were stack, queue and linked list. We always write these ourselves when programming in C.
&lt;/p&gt;

&lt;p&gt;Here, I wrote a code for a linked list which can be used as stack and queue and supports negative indexing. Followings are the codes hosted on Google Code:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/p/litelang/source/browse/trunk/litelang/slist.h"&gt;http://code.google.com/p/litelang/source/browse/trunk/litelang/slist.h&lt;/a&gt; (Includes description for methods)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://code.google.com/p/litelang/source/browse/trunk/litelang/slist.c"&gt;http://code.google.com/p/litelang/source/browse/trunk/litelang/slist.c&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Peace!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-4221207708987036780?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/4221207708987036780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/10/general-purpose-linked-list-stack-and.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/4221207708987036780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/4221207708987036780'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/10/general-purpose-linked-list-stack-and.html' title='General purpose linked list, stack and queue for C'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-2673191188177905397</id><published>2010-05-11T21:35:00.010+03:00</published><updated>2010-05-11T23:14:32.488+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='зураг боловсруулалт'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><title type='text'>Image Processing буюу Зураг Боловсруулалт</title><content type='html'>&lt;p&gt;Номын санд явж байсан манай сургуулийн нэг Камбуж залуу нэг даалгавар хараадхаа гэхээр нь очоод харсан сонирхолтой санагдаад хийж үзлээ.&lt;/p&gt;

&lt;p&gt;&lt;a target="_blank" href="http://en.wikipedia.org/wiki/Netpbm_format"&gt;ppm&lt;/a&gt; төрлийн зургийн файл нь ASCII форматаар илэрхийлэгддэг юм байна.&lt;/p&gt;

&lt;p&gt;Жишээ нь доорх шиг ppm форматтай зургийг текст эдитор дээр нээвэл хажуудахь шиг харагдана.&lt;/p&gt;
&lt;p&gt;Файлыг &lt;a target="_blank" href="http://www.box.net/shared/1rlvfabum3"&gt;эндээс&lt;/a&gt; татаж авч болно.
&lt;div&gt;
&lt;table width="100%"&gt;
  &lt;tr&gt;
    &lt;td valign="top"&gt;
      &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gv39U_UEX20/S-mp4P2R2AI/AAAAAAAAAFg/jBVet90cZSQ/s1600/adm.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 150px; height: 150px;" src="http://1.bp.blogspot.com/_gv39U_UEX20/S-mp4P2R2AI/AAAAAAAAAFg/jBVet90cZSQ/s400/adm.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5470090006210140162" /&gt;&lt;/a&gt;
    &lt;/td&gt;
    &lt;td valign="top"&gt;
      &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gv39U_UEX20/S-msb98zoeI/AAAAAAAAAFo/-94h46Ewo0c/s1600/adm-code.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 221px; height: 210px;" src="http://2.bp.blogspot.com/_gv39U_UEX20/S-msb98zoeI/AAAAAAAAAFo/-94h46Ewo0c/s400/adm-code.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5470092818904228322" /&gt;&lt;/a&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
ASCII кодыг тайлбарлавал:&lt;br /&gt;
&lt;pre&gt;
P3 # форматын төрөл
150 150 # зургийн өргөн, урт
255 # хэрэглэгдсэн максимум өнгө
176 # эхний цэгийн RGB кодын Red
158 # эхний цэгийн RGB кодын Green
158 # эхний цэгийн RGB кодын Blue
172 # хоёр дахь цэгийн RGB кодын Red
152 # хоёр дахь цэгийн RGB кодын Green
153 # хоёр дахь цэгийн RGB кодын Blue
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;3 дахь мөрөөс хойш 150x150x3 мөр байна. Учир нь 3 тоо нэг цэгийн өнгийг илэрхийлж байна.&lt;/p&gt;
&lt;p&gt;Тэгээд код бичиж үзлээ, энгийн мөртлөө их таалагдлаа. Програмыг ажиллуулахад доорх дөрвөн зураг ppm форматаар үүсэх юм.&lt;/p&gt;
&lt;table width="100%"&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gv39U_UEX20/S-m1SVMSEPI/AAAAAAAAAFw/_eQFO8o_31k/s1600/avatar.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 150px; height: 150px;" src="http://3.bp.blogspot.com/_gv39U_UEX20/S-m1SVMSEPI/AAAAAAAAAFw/_eQFO8o_31k/s400/avatar.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5470102548949111026" /&gt;&lt;/a&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gv39U_UEX20/S-m2xZrVqKI/AAAAAAAAAF4/CuniBuc7NdE/s1600/negative.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 150px; height: 150px;" src="http://2.bp.blogspot.com/_gv39U_UEX20/S-m2xZrVqKI/AAAAAAAAAF4/CuniBuc7NdE/s400/negative.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5470104182240684194" /&gt;&lt;/a&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gv39U_UEX20/S-m3Vdej6aI/AAAAAAAAAGA/qhKhHWPS4Jc/s1600/small.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 75px; height: 75px;" src="http://4.bp.blogspot.com/_gv39U_UEX20/S-m3Vdej6aI/AAAAAAAAAGA/qhKhHWPS4Jc/s400/small.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5470104801736124834" /&gt;&lt;/a&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gv39U_UEX20/S-m3q56lHRI/AAAAAAAAAGI/sCaSAtrzTkw/s1600/mirror.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 150px; height: 150px;" src="http://4.bp.blogspot.com/_gv39U_UEX20/S-m3q56lHRI/AAAAAAAAAGI/sCaSAtrzTkw/s400/mirror.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5470105170147089682" /&gt;&lt;/a&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td valign='top'&gt;Хүний арьсны өнгийг аватарын арьсны өнгөтэй төстэй болгодог болохоор ингэж нэрлэлээ :) Зургийн RGB кодны улаан, цэнхэр хоёр утгыг нь солиход гарна&lt;/td&gt;
    &lt;td valign='top'&gt;Зургийн нэгатив&lt;/td&gt;
    &lt;td valign='top'&gt;Зургийн хэмжээг 2 дахин багасгасан байдал&lt;/td&gt;
    &lt;td valign='top'&gt;Толинд харсан байдал&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;За ингээд эцэст нь кодоо хавсаргая:&lt;/p&gt;
&lt;pre class="brush: c"&gt;

#include &lt;stdio.h&gt;

#include &lt;stdlib.h&gt;



int main() {

        FILE * input;
        FILE * avatar;

        FILE * negative;

        FILE * small;
        FILE * mirror;

        int i, m;

        int width, height, max;

        char fname[20];
        

        printf("Enter the name of the file: ");

        scanf("%20s", &amp;fname);
        

        input = fopen(fname, "r");
        avatar = fopen("avatar.ppm", "w");

        negative = fopen("negative.ppm", "w");

        small = fopen("small.ppm", "w");
        mirror = fopen("mirror.ppm", "w");

        
        if (input == NULL) {

           printf("ERROR: The file can not be found!\n");

           return -1;

        }
        

        fscanf(input, "P3\n%d %d\n%d", &amp;width, &amp;height, &amp;max);
        fprintf(avatar, "P3\n%d %d\n%d\n", width, height, max);

        fprintf(negative, "P3\n%d %d\n%d\n", width, height, max);

        fprintf(small, "P3\n%d %d\n%d\n", width/2, height/2, max);
        fprintf(mirror, "P3\n%d %d\n%d\n", width, height, max);

        
        int dim = width*height;

        int temp[dim][3];

        
        for (i=0;i &lt; dim;i++) {

            fscanf(input, "%d %d %d ", &amp;temp[i][0], &amp;temp[i][1], &amp;temp[i][2]);

            fprintf(avatar, "%d %d %d ", 

                temp[i][2], 

                temp[i][1], 

                temp[i][0]);
            fprintf(negative, "%d %d %d ", 

                max-temp[i][0], 

                max-temp[i][1], 

                max-temp[i][2]);

            if ((i/width)%2==0) {

                if (i%2==0)

                   fprintf(small, "%d %d %d ", 

                       temp[i][0], 

                       temp[i][1], 

                       temp[i][2]);

            }

        }
    
        for (i=0;i &lt; dim;i++) {
        m = (i/width)*width+width-i%width-1;
        fprintf(mirror, "%d %d %d ", temp[m][0], temp[m][1], temp[m][2]);
        }
        

        fclose(input);
        fclose(avatar);

        fclose(negative);

        fclose(small);
        fclose(mirror);

        return 0;

}

&lt;/pre&gt;
&lt;div&gt;
Дажгүй цэгцтэй код боллоо. Зураг том бол RAM-д их зай эзлэх нь дээ. :(
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-2673191188177905397?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/2673191188177905397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/05/image-processing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2673191188177905397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2673191188177905397'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/05/image-processing.html' title='Image Processing буюу Зураг Боловсруулалт'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_gv39U_UEX20/S-mp4P2R2AI/AAAAAAAAAFg/jBVet90cZSQ/s72-c/adm.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-4666711528181095139</id><published>2010-05-08T13:58:00.001+03:00</published><updated>2010-05-08T14:00:23.297+03:00</updated><title type='text'>Confession of an Invader</title><content type='html'>&lt;p&gt;Nearly 1.5 thousand light years from home and we finally made it. 2060 AD, a united space expedition called Confederation of Space Missions discovered a new planet with life on it. After leaving the Earth which has ultimately limited resource and overpopulation, the team finally made to one of 50 moons of NZ53-04 planet in the NZ-53 solar system, which was first located in the 2010s. This moon, relatively younger than our Earth, has enormous amount of aqua and a very dynamic life-form.

&lt;p&gt;This was supposed to be the home, new hope for the mankind. About 2.3 times bigger than the Earth, physically the planet is formed by highlands and deep valleys. The planet has magnificent amount of dissipate, the planet is almost all covered with deep cloud, the highlands are similar to shallow rain forests and streams on it are fed by the clouds. What are in the deep valleys and what is happening out there is mystery. Earlier expeditions reported deathly fauna – giant lizard-like creatures and scary jungle. People called these deep valleys “death” valleys.

&lt;p&gt;We called the planet Renzhou, Chinese for “Man's dominion”, though its indigenous intellectual creatures are the Mangi. Mangis, koala-sized creatures, have tribal societies like earlier plains people. They lived in the planet's highlands. Although, they seemed frightened when the research teams first came, they became friendly shortly.

&lt;p&gt;The cloud making an layer underneath the planet's atmosphere made people hard to breathe, since the pressure was too high. It was a major obstacle for forming colonies alongside the planet since everyone with wear special costume and people would only live in facilities. It was impossible because the first immigration package from the Earth would include some 4 billion people and livestock. Scientists came out with a solution. The solution was to use microwave and chemicals to reduce the amount of the cloud. They were successful. The cloud did became less.

&lt;p&gt;Understanding that the planet's weather condition was changing as a result of humans actions, the mangis were unpleasant with the situation. Clashes of different sizes took place in the highlands. Approved by the United Nations, army regiments and raged volunteers started war against the mangis. As a result the mangis were relocated to the death valleys.

&lt;p&gt;We established colonies on the highlands. New Australland, Ningpo, Nova Occitan, Fukian, Formosa, and Gulliver were among the first ones. Minor mutations were observed among people. This phenomenon  first was thought to be fine. It was later proved that the thick cloudy structure covering the planet was making the life on Renzhou immune to the toxic substances coming from NZ-53 and NZ-53-04.

&lt;p&gt;The cloud was unrecoverable since the forests both in the highlands and the deep valleys are decreased 80% in size and the water supply has decreased 65%. 44 years ago, man was first coming to Renzhou, and today we are leaving the planet with our spaceships. I am one of the few people who were lucky enough to be on one of the ships. About 3.4 billion people are left on the planet for definite death. We, on the ships, are all infected with the toxins. It is most probably that we all be died as well.

&lt;p&gt;Evolution, “the stronger beats the weaker”, cruelty, Darwin's law, war, violence, … Unfortunately, it seems that they will always exist alongside with human.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-4666711528181095139?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/4666711528181095139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/05/confession-of-invader.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/4666711528181095139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/4666711528181095139'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/05/confession-of-invader.html' title='Confession of an Invader'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-8799050221889442163</id><published>2010-05-01T14:40:00.005+03:00</published><updated>2010-06-28T12:08:28.584+03:00</updated><title type='text'>Downloading your e-mail on a server to process</title><content type='html'>You know all the great features of craigslist and Facebook, that use anonymous, standalone e-mail for forwarding request to an ad owner or replying to a message via e-mail.

&lt;p&gt;Well, I will show you how to do something like these.

&lt;p&gt;&lt;span style="font-weight:bold;"&gt;Scenario:&lt;/span&gt; An chronological script will download new e-mails, then a Python script will process on these e-mails.

&lt;p&gt;For downloading e-mails, I used getmail4. The best tutorial for it can be found &lt;a href="http://pyropus.ca/software/getmail/configuration.html"&gt;here&lt;/a&gt;.

&lt;p&gt;For my case, /home/manchurian/.getmail/getmailrc looks like this:

&lt;p&gt;&lt;pre&gt;
[retriever]
type = SimplePOP3Retriever
server = [my_mail_server]
username = [my_mail]
password = [my_mail_password]

[destination]
type = Mboxrd
path = /home/manchurian/inbox
&lt;/pre&gt;

&lt;p&gt;Make the mail downloading automatic using &lt;code&gt;crontab -e&lt;/code&gt;:

&lt;p&gt;
&lt;pre&gt;
* * * * * getmail -n
&lt;/pre&gt;

&lt;code&gt;-n&lt;/code&gt; is for retrieving new mails only.

&lt;p&gt;Now it is time to process the downloaded mails anyway you want:

&lt;p&gt;&lt;pre&gt;
import mailbox
mails = mailbox.mbox("/home/manchurian/inbox")

mails.lock()

try:
   for m in mailbox:
      if m['from'] == 'abc@abc.org':
         print m['subject']
finally:
   mails.unlock()

&lt;/pre&gt;

Cheers,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-8799050221889442163?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/8799050221889442163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/05/downloading-your-e-mail-on-server-to.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8799050221889442163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8799050221889442163'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/05/downloading-your-e-mail-on-server-to.html' title='Downloading your e-mail on a server to process'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-2377700151958134643</id><published>2010-05-01T12:15:00.008+03:00</published><updated>2010-05-01T15:05:31.231+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Backing up MySQL database</title><content type='html'>&lt;p&gt;Losing data on your business application's database would be a real disaster. Here's a way simple script to back up your MySQL database.&lt;/p&gt;

&lt;p style="font-weight: bold;"&gt;Scenario&lt;/p&gt;

&lt;p&gt;We have a remote Debian server with the database, and an Ubuntu server (Intel Xeon) in our office right beneath my table. :)&lt;/p&gt;

&lt;p&gt;We wanted to have our database backed up daily. So here we go:


&lt;p&gt;&lt;span style="font-weight: bold;"&gt;1-st step.&lt;/span&gt; Save SQL script of the database in the remote server.

&lt;p&gt;
&lt;pre&gt;

#!/bin/bash
export d=$(date +'%Y-%m-%d')
mkdir -p /root/backup/$d
mysqldump --add-drop-table --allow-keywords -q -a -c -u root -p[password_for_mysql_root] [databasename] &gt; /root/backup/$d/[databasename].sql
&lt;/pre&gt;

&lt;p&gt;Save it as /root/mysqlbackup.sh

&lt;p&gt;
&lt;span style="font-weight: bold;"&gt;2-nd step.&lt;/span&gt; Automize it with &lt;code&gt;crontab -e&lt;/code&gt; to run daily at 05:30.

&lt;p&gt;
&lt;pre&gt;
30 05 * * * /root/mysqlbackup.sh
&lt;/pre&gt;

&lt;p&gt;&lt;span style="font-weight:bold;"&gt;3-rd step.&lt;/span&gt; Fetch the SQL from the local server and save.

&lt;p&gt;
&lt;pre&gt;
#!/bin/bash
export d=$(date +'%Y-%m-%d')
mkdir -p /root/backup/$d
pscp -sftp -l root -pw [password_for_remote_server_root] root@[server_ip]:/root/backup/$d/[databasename].sql /root/backup/$d
exit 0
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-2377700151958134643?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/2377700151958134643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/05/backing-up-mysql-database.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2377700151958134643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2377700151958134643'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/05/backing-up-mysql-database.html' title='Backing up MySQL database'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-8599751051781525775</id><published>2010-03-22T15:07:00.002+02:00</published><updated>2010-03-22T15:09:20.602+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Berkeley RISC I'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><category scheme='http://www.blogger.com/atom/ns#' term='Ассемблэр'/><title type='text'>Berkeley RISC I</title><content type='html'>RISC төрлийн архитектуртай Berkeley RISC I ассемблэр дээр код бичиж үзлээ.


&lt;pre&gt;


N EQU 10
DIZI EQU $500

 ORG $500
 DCINT 7
 DCINT -98
 DCINT 5
 DCINT 678
 DCINT -832
 DCINT 4567
 DCINT -789
 DCINT 409
 DCINT -372
 DCINT 65


 ORG $600
START:
 ADD R0,N,R17  
 XOR R16,R16,R16  
 SLL R17,2,R17  
back: 
 LDL (R16)DIZI,R2  
 CALL deltaD(R0),R3 
 NOP
 STL (R16)DIZI,R2  
 ADD R16,4,R16  
 NOP
 SUB R16,R17,R18  
 NOP
 JMP BMI,back(R0) 
 NOP
 NOP

 ORG $700
deltaD: 
 SLL R2,1,R21  
 JMP BMI,neg(R0)  
 NOP
 NOP
 
 SLL R2,2,R2  
 RET (R0)R3
 NOP

neg: 
 SUB R0,R2,R2  
 NOP 
 RET (R0)R3
 NOP


&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-8599751051781525775?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/8599751051781525775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/03/risc-berkeley-risc-i.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8599751051781525775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8599751051781525775'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/03/risc-berkeley-risc-i.html' title='Berkeley RISC I'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-5316988326493164809</id><published>2010-03-06T21:47:00.006+02:00</published><updated>2010-03-06T22:23:46.197+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='код'/><category scheme='http://www.blogger.com/atom/ns#' term='MC68000'/><title type='text'>Моторолла 68000</title><content type='html'>Эхэн үеийн Макуудад ажилладаг байсан Моторолла 68000 процессерийн ассемблэр хэл дээр програм бичлээ. 16 бит, тэмдэгтгүй тоог анхны тоо эсэхийг шалгадаг програм; яарч хийсэн учир илүү хурдан ажиллууладаг, цөөхөн регистр ашигладаг болгож амжсангүй.

&lt;pre&gt;
     ORG $0500
num   DC.W  83

     ORG $0600
res   DS.B   1


     ORG  $1000
start MOVEA.L      #$4000,SP

     MOVE.B       #2, (res)
     PEA       num         
     JSR        chkpri     
     MOVE.B   D7, res

     MOVEA.L    #$4000,SP

     MOVE.B #9, D0
     TRAP #15

     ORG  $2000
chkpri MOVE.W  6(A7),A1
     MOVE.W  #2,D3
     MOVE.W  (A1),D4
back  MOVE.L  D4,D2
     DIVU.W  D3,D2
     ADD.W  #1,D3
     CMP.W  D4,D3
     BEQ  pri
     SWAP  D2
     CMPI.W  #0,D2
     BNE  back
     MOVEQ  #0,D7
     RTS
pri   MOVEQ  #1,D7
     RTS


     END  START
&lt;/pre&gt;

chkpri рутиныг ашиглаад массиваас анхны тоонуудыг ялгаж өөр массивт хуулдаг програм:

&lt;pre&gt;
   ORG $0502
from   DC.W 87,92,7,84,65,32,11,83,103,287
N    DC.W  10

   ORG $0602 
to   DS.W N
  

     
       
   ORG     $1000
 
start   MOVEA.L     #$4000,SP
  
  
   LEA  from,A2 
   LEA  to,A3 
   MOVE.W  N,D5   
   MULU.W  #2,D5   
        
   MOVE.W  #0,D1   
back1   PEA  0(A2,D1.W)  
   ADDI.W  #2,D1   
   JSR  chkpri   
   CMPI.W  #1,D7   
   BEQ  cpypri
   CMP.W  D1,D5   
   BNE  back1
                       LEA  to,A3 
   MOVE.W  D6,(A3)   
   JMP  out   
   
cpypri          ADDI.W  #1,D6   
   ADD.W  #2,A3   
   MOVE.W  D4,(A3)   
   JMP  back1

out
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-5316988326493164809?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/5316988326493164809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/03/68000.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/5316988326493164809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/5316988326493164809'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/03/68000.html' title='Моторолла 68000'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-1507357785795588057</id><published>2010-02-17T11:15:00.009+02:00</published><updated>2010-02-17T11:34:47.723+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Linux сервер дээр SVN суулгах</title><content type='html'>SVN (Subversion) бол багаараа хамтарч төсөл гүйцэтгэхэд тун хэрэгтэй зүйл. Энд тохируулах үйл явцыг бичлээ.

Хэрвээ та Debian юмуу Ubuntu хэрэглэж байгаа бол энд хэрэгтэй Apache HTTPd, Subversion зэргийг суулгах нүд эрмэхийн төдий амар зүйл тул суулгах хэсгийг алгасья.

Доорх үйл явцад SVN-рүү HTTP протокол ашиглаж холбогдохоор бодож хийе:

&lt;pre&gt;
# mkdir /subversion
# chown www-data:www-data /subversion
# su www-data
$ svnadmin create /subversion
$ exit
# htpasswd -c /subversion/htpasswd dagvadorj
# htpasswd /subversion/htpasswd oyunjargal
&lt;/pre&gt;

Дараа нь /etc/apache2/httpd.conf файлд дараах мөрүүдийг оруулна:

&lt;pre&gt;
 &amp;lt;location /svn&amp;gt;
   DAV svn
   SVNPath /subversion
   AuthType Basic
   AuthName "Dagvadorj Subversion Repository"
   AuthUserFile /subversion/htpasswd
   Require valid-user
 &amp;lt;/location&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-1507357785795588057?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/1507357785795588057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/02/linux-svn.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1507357785795588057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1507357785795588057'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/02/linux-svn.html' title='Linux сервер дээр SVN суулгах'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-9152534626075352698</id><published>2010-02-12T01:20:00.004+02:00</published><updated>2010-02-12T01:33:40.710+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spoj'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Spoj-ийн бодлого бодов</title><content type='html'>spoj.pl сайт ч гоё шүү. Мэдээд удаж байгаа боловч ёр бодлого бодож амжихгүй юмаа. Өнөөдөр &lt;a href="https://www.spoj.pl/problems/ADDREV/" target="_blank"&gt;ADDREV&lt;/a&gt; кодтой бодлогыг бодлоо. Өгөгдсөн тоонуудыг тонгоргож хөрвүүлээд хооронд нь нэмээд, нийлбэрээ бас тонгоргох юм байна. Тоонуудтай бөх барилдаж байгаа юм шиг болчлоо. :D Мартагдах гээд байхаар нь Python-оор бодлоо. Бодолт нь дор байгаа:

&lt;pre class="brush: py"&gt;


def reversify(num):
 p = str(num)
 s = ""
 i = len(p)-1
 while i &gt;= 0:
  s += p[i]
  i = i - 1
 return int(s)

k = raw_input()

h = []

for j in range(int(k)):
 inp = raw_input()
 l = inp.split(" ")
 h.append(l[0])
 h.append(l[1])

u = 0

while u &lt; 2*int(k):
 print reversify(reversify(h[u]) + reversify(h[u+1]))
 u = u + 2

&lt;/pre&gt;

Гэм нь Python-оор бодсон бусад бодолтуудын хажууд жаахан удаан ажилладаг боллоо. Илүү хурданг хийе гэхээр манай хүн унтья, орой болчлоо гээд байхын. Маргааш ажилтай унтья дөө.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-9152534626075352698?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/9152534626075352698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/02/spoj.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/9152534626075352698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/9152534626075352698'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/02/spoj.html' title='Spoj-ийн бодлого бодов'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-6240589349999446636</id><published>2010-01-03T20:21:00.004+02:00</published><updated>2010-01-03T21:29:51.431+02:00</updated><title type='text'>Зүүн аймгийнхан</title><content type='html'>&lt;p&gt;
Амралтаараа Монгол очоод Толгойтод ахындаа ахтайгаа хөдөөнөөс Улаанбаатарт олон хүн ирж байгаа тухай ярилцаж байлаа. Би өөрөө Эрдэнэтийн хүн болохоор маш сонирхож асууж байлаа л даа:
&lt;/p&gt;

- Ер нь тэгээд аль аймгаас их ирж байх шиг байна даа?&lt;br /&gt;

- Завхан, Увс гээд энэ баруун аймгаас их ирж байна
&lt;p&gt;
гэж ах хариулав. Тэгээд 5, 6 секундийн дараа
&lt;/p&gt;
- Тэр Амгалан хавиар зүүн аймгийнхан ирдэг байхаа

&lt;p&gt;
гэж хэлэх нь тэр. Нээрээ бодоод байхад яг тийм л байхдаа. Хүн чинь том хот сууринд ирж байгаа ч гэсэн нутаг нугатайгаа ойрхон байхыг бодох байх гэж бодогдлоо.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-6240589349999446636?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/6240589349999446636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/01/blog-post_03.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/6240589349999446636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/6240589349999446636'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/01/blog-post_03.html' title='Зүүн аймгийнхан'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-8042085026443424921</id><published>2010-01-03T19:29:00.003+02:00</published><updated>2010-01-03T20:07:57.139+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><category scheme='http://www.blogger.com/atom/ns#' term='Нийтлэл'/><title type='text'>Энэ вэбийг синхрон бишээр авья</title><content type='html'>2, 3 жийлийн өмнө хүн болгоны магтан ярьж байсан зүйлсийг одоо л би ярих гэж байна даа. Төдий чинээ хоцорч яваа минь энэ биз дээ. Юуг магтаад байсан бэ гэхээр гэдэг технологи. Энэ нь Asynchronous JavaScript and XML гэсэн үгийн товчлол, гэсэн хэдий ч сүүлийн үед бас Ajax гээд товчлол биш шинэ үг маягаар хэрэглэх болсон нь энэ технологийг шүтэн хэрэглэгчдийн анархи биз. Санаа нь вэб хуудас ачааллаж дууссаны хойно бүхэл бүтэн шинэ хуудас ачаалахгүйгээр сервер дэх програмыг ажиллуулан үр дүнг буцааж аван өмнө ачаалласан хуудсанд харуулна гэдэг дээр тогтож байна.

Энэ технологийн одууд гэвэл олон байна, жишээ нь: Google Maps, Writely (Google Docs &lt;span style="" lang="MN"&gt;болсон&lt;/span&gt;)&lt;span style="" lang="MN"&gt;, &lt;/span&gt;GMail &lt;span style="" lang="MN"&gt;гээд олон байна. Тухайлбал, &lt;/span&gt;Google Maps хиймэл дагуулаас авсан жижгээс &lt;span style="" lang="MN"&gt;томруугаа 13 ширхэг том зураг олон хуваагдсан байгаагийн аль нэг ачаалласан зургийн зөвхөн хэрэглэгчийн фокуст байгаа хэсгийг л ачааллан харуулж, хэрэглэгч хулганаар зургийг чирэхэд зөвхөн шинэ фокус дахь зургуудыг серверээс нэмж ачааллах гэсэн замаар хурдан ажиллаж байна.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="MN"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="MN"&gt;Яг тэр 2, 3 жилийн өмнө нь &lt;/span&gt;&lt;span style="" lang="TR"&gt;AJAX &lt;/span&gt;&lt;span style="" lang="MN"&gt;стандартчилагдаж байхад нь вэбийн стандандартын &lt;/span&gt;&lt;span style="" lang="TR"&gt;W3C&lt;/span&gt;&lt;span style="" lang="MN"&gt;-гийн сайтруу орж үзэж байгаад &lt;/span&gt;&lt;span style="" lang="TR"&gt;XMLHttpRequest &lt;/span&gt;&lt;span style="" lang="MN"&gt;обьектийг хэрэглэж үзэж билээ, ид шид юм шиг л санагдаж байсан. Гэхдээ &lt;/span&gt;JavaScript &lt;span style="" lang="MN"&gt;дорвитой хэрэглэхээс хальширч байсан учир тэгэсгээд орхисон юм. Учир нь нэг бичсэн код туршиж байсан вэбийн хөтөч програм дээр ажилаад өөр хөтөч дээр ажиллахгүй гэх мэт олон садаа байлаа. Мөн &lt;/span&gt;AJAX&lt;span style="" lang="MN"&gt;-д хамгаалалтын асуудлууд байлаа.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="MN"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="MN"&gt;За тэгээд л вэб хийхдээ дандаа сервер талтай код бичээд л байлаа. Тэгсэн мөнгө бүхнийг өөрчлөнө гэгчээр санхүүгийн хямралд ороод ирэхээр яахын аргагүй нэгэн бүртгүүлсэн ажлынхаа ажил олгогчид нэг хоногийн дотор &lt;/span&gt;AJAX &lt;span style="" lang="MN"&gt;хэрэглэдэг үнэ хаялцах жижигхэн хэрэглээний програм бичиж үзүүлье гээд хэлчихлээ.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="MN"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="MN"&gt;Харин энэ үед&lt;/span&gt; AJAX &lt;span style="" lang="MN"&gt;вэб хуудас хийх харьцангуй асар болсон байлаа. Ингээд &lt;/span&gt;&lt;a href="http://feeditor.com/bidding" target="_blank"&gt;feeditor.com/bidding&lt;/a&gt; &lt;span style="" lang="MN"&gt;хэрэглээний програмыг бичлээ. Хэрэглэсэн технологиудын хувьд гэвэл:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="MN"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;Java      (Java 1.6; Tomcat 5.5) &lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;DWR      (Direct Web Remoting)&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;MySQL&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Dojo      Toolkit&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Scriptaculous&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Prototype&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="MN"&gt;Ингээд кодуудыг &lt;/span&gt;(war + build.xml)&lt;span style="" lang="MN"&gt; нь &lt;a target="_blank" href="http://www.box.net/shared/yvo4xz7af6"&gt;эндээс&lt;/a&gt; татаж авч болно шүү. Харин &lt;a target="_blank" href="http://www.box.net/shared/046m1s20j0"&gt;эндээс&lt;/a&gt; өгөгдлийн сангийн кодыг авч болно.&lt;/span&gt;&lt;/p&gt;

Надаар кодуудыг нь тайлбарлуулсан бичлэг бичүүлмээр байвал бичлэгт санал сэтгэгдэлээ бичээрэй.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-8042085026443424921?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/8042085026443424921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2010/01/blog-post.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8042085026443424921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8042085026443424921'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2010/01/blog-post.html' title='Энэ вэбийг синхрон бишээр авья'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-1562076155785889248</id><published>2009-12-25T00:08:00.002+02:00</published><updated>2009-12-25T00:12:20.074+02:00</updated><title type='text'>Сайн тэсвэр хатуужилтай болмоор юм байна даа</title><content type='html'>Сүртэй аймар тэсвэр хатуужил бишээ, юмыг өөр зүйлд сатаарахгүй хянамгай уншиж дадах хэрэгтэй юм байна. Саяхан хийсэн хэрэглээний програмыг (&lt;a href="http://feeditor.com"&gt;feeditor.com&lt;/a&gt;) хийхэд хэд хэдэн стандартын бичиг баримт, мөн төчнөөн RFC унших хэрэгтэй боллоо. Зарим нэгнээс нь ойлгож мэдсэнээ тоймлож блогтоо тавихыг бодноо.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-1562076155785889248?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/1562076155785889248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/12/blog-post_25.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1562076155785889248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1562076155785889248'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/12/blog-post_25.html' title='Сайн тэсвэр хатуужилтай болмоор юм байна даа'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-477424774907993257</id><published>2009-12-24T23:59:00.004+02:00</published><updated>2009-12-25T00:14:13.473+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='код'/><category scheme='http://www.blogger.com/atom/ns#' term='Системийн програмчлал'/><category scheme='http://www.blogger.com/atom/ns#' term='Ассемблэр'/><title type='text'>Ассемблэр дээр програм бичих</title><content type='html'>Өчигдөр CodeWarrior татаж авлаа, үнэхээр лаг юмаа хэхэ. Ингээд доор сарыг аваад тухайн сар хэдэн хоногтойг A аккумляторт буцаадаг програс бичлээ. LCD цаг хийсэн лабораторт хэрэг болсон юм л даа. Илүү хурдан ажиллах кодны санаа байвал хуваалцаарай хүмүүсээ.

&lt;pre&gt;
MY_EXTENDED_RAM: SECTION
YEAR        DS.w 1
MONTH       DS.b 1
DAY         DS.b 1

MyCode:     SECTION
main:
_Startup:
Entry: 
            LDD    #2006
            STD    YEAR
            LDAA   #4
            STAA   MONTH
            LDAA    #5
            STAA   DAY
            JSR   DAYBYMONTH
            SWI

DAYBYMONTH:             ; returns # of days in ACC A
            LDAB   MONTH    
            CMPB   #2      
            BEQ   TSTLEAP  
                       
            CMPB   #8       
            BGE   AUTUMN   
            LDAA   MONTH     
            ASRA 
            BCC     D30
            LDAA    #31      
            RTS
AUTUMN:     
            LDAA   MONTH     
            ASRA 
            BCS     D30
            LDAA    #31
            RTS
D30:        
            LDAA    #30
            RTS
TSTLEAP:
            LDD   YEAR
            LDX   #4
            IDIV
            TBNE   D,NOTLEAP
            LDAA   #29
            RTS
NOTLEAP:
            LDAA   #28
            RTS

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-477424774907993257?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/477424774907993257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/12/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/477424774907993257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/477424774907993257'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/12/blog-post.html' title='Ассемблэр дээр програм бичих'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-2333503989829705918</id><published>2009-11-28T16:39:00.005+02:00</published><updated>2009-11-28T17:45:24.792+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Нийтлэл'/><title type='text'>Монгол хэл дээрх wikibook төслийг устгах гэж байна</title><content type='html'>wikibook төсөл нь wikipedia-гийн дүү төсөл бөгөөд хэрэглэгчдэд нээлттэй эх (дан ганц програм хангамж биш) дээр тулгуурласан ном хамтарч бичих боломж олгоно. Энэхүү төсөл нь дэлхийн олон хэл дээр байдаг ба амжилттай хэргэжиж олон ном бий болж хүн бүр үнэ төлбөргүй уншиж болно. Харин энэ төслийн Монгол хэл дээрх төсөл устгах гэж байна. Учир нь манайхнаас хэн ч юу ч бичиж эхлүүлэхгүй байжээ.

М.Эрдэнэчимэг багшийн орчуулсан &lt;a target="_blank" href="http://docs.google.com/fileview?id=0B9SHVnOYuzvpYmNmYTJhMDYtNTJiZS00MmI2LWE5ZjQtNTQ2ZDQ4M2Q4MmRj&amp;amp;hl=en"&gt;"Open Source" номын&lt;/a&gt; өмнөх үгийг уншиж байлаа. Тэнд энэ орчуулгаа &lt;a href="http://mn.wikibooks.org/" target="_blank"&gt;mn.wikibooks.org&lt;/a&gt; сайтад тавинаа гэж байна, тэгэхээр нь гоё санаа төрөөд энэний өмнө бичсэн &lt;a href="http://dagvadorj.blogspot.com/2009/11/blog-post_27.html" target="_blank"&gt;"Линүксийн цөмийн програмчлал"&lt;/a&gt; бичлэгээ бас тэнд тавиад аажим аажимаар ном болгьё гэж бодлоо. Тэгээд сайтанд бүртгүүлээд шинэ хуудас нээх гэсэн болсонгүйээ. Хэн ч ямарч өөрчлөлт гаргаж болохгүй юм байна. &lt;a href="http://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Mongolian_Wikibooks" target="_blank"&gt;Учир нь энэ оны 4-р сарын байдлаар Монгол хэл дээрх төслийг хаахаар болсон байна&lt;/a&gt;.

Бүгдээрээ энэ талаар хамтарч үгээ хэлж байгаад буцааж нээх хэрэгтэй байна. Бас чадах чинээгээрээ ном нэмж байх хэрэгтэй байна. Бид чинь бүхэл бүтэн нэг үндэстэн улс шүү дээ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-2333503989829705918?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/2333503989829705918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/wikibook.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2333503989829705918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2333503989829705918'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/wikibook.html' title='Монгол хэл дээрх wikibook төслийг устгах гэж байна'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-6845252857620556089</id><published>2009-11-27T13:20:00.025+02:00</published><updated>2010-11-18T01:20:55.516+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Системийн програмчлал'/><category scheme='http://www.blogger.com/atom/ns#' term='Линүкс'/><title type='text'>Линүксийн цөмийн програмчлал</title><content type='html'>&lt;p&gt;Юникс (Unix) үйлдлийн систем нь маш их алдар хүндийг олсон боловч академээс гадуур хэрэглэхэд маш их өндөр өртэгтэй худалдагддаг байсан бөгөөд лиценз нь AT&amp;amp;T, Novell зэрэг томоохон компаниудын гар дамждаг байж л дээ. Тиймд хакерууд нээлттэй эх буюу үнэгүй тараагддаг "Юникстэй төстэй" (Unix-like) үйлдлийн системүүдийг хийж эхэлжээ. Ингээд Minix, BSD, Linux, Darwin гэх мэт үйлдлийн системүүд гарч ирлээ. Эдгээрээс Линүкс (Linux) нь нээлттэй эхийн хамт олны дунд маш их амжилтийг олж хөгжүүлэгдэж иржээ. Анхлан Линүкс үйлдлийн системийн цөмийг бичсэн, тухайн үедээ Финланд улсад оюутан байсан Лайнус Тровалдс нь одоог хүртэл Линүксийн цөмийг хөгжүүлэх явцад идэвхтэй оролцсоор байгаа юм.

&lt;p&gt;Линүксийн хөгжүүлэлтэнд бусад нээлттэй эхийн хөгжүүлэлтийн үйл явцын адил байнгын оролцогч цөөн тооны мэргэжилийн хакерууд байх ба илүү олон тооны мэргэжилийн болон сонирхогч програмистууд оролцоно. Гэхдээ эдгээр нь Линүксийн цөм буюу kernel-ийг програмчлан нээлттэй эх кодыг нь &lt;a href="http://www.kernel.org/" target="_blank"&gt;kernel.org&lt;/a&gt; вэбсайтаар тараана. Үүн дээр үндэслээд хувь хүмүүс, албан байгууллагууд, ашгийн бус байгууллагууд, товчхондоо бол хүссэн хэн боловч өөрийн гэсэн Линүксийг бий болгон хэрэглэж болно. Эдгээрийн жишээ гэвэл: Red Hat Enterprise Linux, Mandriva, Debian, Ubuntu, ArchLinux, Puppy Linux, Knoppix, Damn Small Linux, Backtrack гээд өчнөөнийг дурдаж болно.

&lt;p&gt;Цөмийг нь шинээр суулгахдаа өөрчилж болно. Энд нэгэн жишээг авч үзье.

&lt;p&gt;Эхлээд зарим нэгэн юмыг тодорхой болгъё:

&lt;p&gt;Програм нь хэрэглэгчийн түвшинд ажиллаж болно, эсвэл системийн түвшинд ажиллаж болно. Тиймч учраас хэрэглээний програм болон систеийн програм гэж нэршил байдаг боловуу. Хэрэглээний програм нь системийн дуудлага (system call) ашиглан системийн хэсэг болон техник хангамжтай харьцана. Жишээ нь энгийн C програманд &lt;span style="font-family:courier new;"&gt;fopen&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;printf&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;scanf&lt;/span&gt; зэрэг коммандууд нь цаанаа &lt;span style="font-family:courier new;"&gt;open&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;write&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;read&lt;/span&gt; системийн дуудлагуудыг ашиглан файл нээх, дэлгэцэнд бичих, дэлгэцнээс үсэгт авах зэрэг үйлдлийг хийнэ.

&lt;p&gt;Юниксийн төрлийн үйлдлийн системүүдэд &lt;span style="font-family:courier new;"&gt;top&lt;/span&gt; гэсэн комманд ашиглаж санамжинд суурьлагдсан процессуудыг харж болдог билээ. Энэ нь Виндовс үйлдлийн системийн Task Manager гэсэн үг л дээ.

&lt;p&gt;Тэгэхээр нэг ийм юм хийж туршиж үзье; системийн дуудлага ашиглан ажилж буй процессийг &lt;span style="font-family:courier new;"&gt;top&lt;/span&gt; дээр харагддаггүй болгодог.

&lt;p&gt;Би Дэбиан (Debian) үйлдлийн систем дээр ажиллаж байгаа. Ингээд доорх коммандуудаар зарим програмуудыг татаж авья. # гэсэн тэмдэг нь &lt;span style="font-family: courier new;"&gt;root&lt;/span&gt; хэрэглэгчээр орсон гэсэн үг. Ер нь бол бүх юмаа тэгж хийсэн.

&lt;p&gt;Програмуудынхаа листийг шинэчилэнэ:
&lt;pre&gt;
# apt-get update
&lt;/pre&gt;

&lt;p&gt;Линүксийн цөмийг татаж авна. Миний цөм Linux kernel 2.6.26 учир мөн адил цөмийг татна. Хэрэв таны ажилж буй Линүксийн цөм нь өөр бол тохирох цөмийг татаж авна уу.
&lt;pre&gt;
# apt-get install linux-source
&lt;/pre&gt;

&lt;p&gt;Цөмийг суулгахад хэрэглэгдэх багцыг татаж авна.
&lt;pre&gt;
# apt-get install kernel-package
&lt;/pre&gt;

&lt;p&gt;Мөн доорх туслах багажуудыг татаж авна:
&lt;pre&gt;
# apt-get install fakeroot
# apt-get install libncurses5-dev
&lt;/pre&gt;

Ингээд хэрэгтэй зүйлсээ татаад суулгачихлаа. Линүксийн цөмийн эх код /usr/src/ хавтасанд хадгалагдсан байгаа. Түүнийг задална:
&lt;pre&gt;
# tar xjvf linux-source-2.6.26.tar.bz2
# cd linux-source-2.6.26
&lt;/pre&gt;

/usr/src/linux-source-2.6.26 хавтас үүсэх бөгөөд энд Линүксийн хэрэгтэй файлууд бий. Одоо бидэнд тохиргооны .config файл хэрэгтэй. Энэ файлын тусламжтайгаар үйлдлийн систем маань ямар, ямар файл системийг дэмжих үү, ямар ямар техник хангамж дэмжих вэ гэдгийг тохируулж болно. Та өөрийн урьтаж бэлдсэн .config файлыг хэрэглэж болно, эсвэл үйлдлийн системийн /boot/ хавтасанд орших config-2.6.26-x-xxx файлыг хуулж тавиад нэрийг нь .config болгож өөрчилсний дагуу хэрэглэж болно. &lt;pre&gt;mv /boot/config-2.6.26-2-686 /usr/src/linux-source-2.6.26/.config&lt;/pre&gt;

Одоо кодоо өөрчилж эхэлье.

Туршилтаа одоо илүү нарийн дэтальчилж доорх шатуудад хуваая:
&lt;ol&gt;
&lt;li&gt;Процессийн бүтцэд visible гэдэг шинж чанар өгөөд анхны утгыг 1 гэж өгье&lt;/li&gt;
&lt;li&gt;Тодорхой нэгэн ажилж буй процессийн pid нь өгөгдсөн байхад visible утгыг нь 0 эсвэл 1 болгодог системийн дуудлага хийе&lt;/li&gt;
&lt;li&gt;Ажилж буй процессуудын visible утгуудыг нь шалгаад 1 байвал л top дээр харагддаг болгьё&lt;/li&gt;
&lt;li&gt;Хэрэглээний түвшинд ажиллаад шинэ системийн дуудлагыг ашигладаг шалгах програм бичье&lt;/li&gt;
&lt;/ol&gt;

Доорх алхамууд дээр /usr/src/linux-source-2.6.26 хавтасан дотор ажиллана. Жишээ нь include/linux/ гэдэг нь үнэндээ /usr/src/linux-source-2.6.26/include/linux/ хавтас юм. Харин / тэмдэгтээр эхэлсэн бол Линүкс үйлдлийн системийн үндсэн (/) файлаас эхэлж байна гэж ойлгоно уу.

&lt;p&gt;
&lt;span style="font-weight:bold;"&gt;1-р шатны ажилаа хийе&lt;/span&gt;. Процессийн бүтэц нь &lt;span style="font-weight:bold;"&gt;include/linux/sched.h&lt;/span&gt; файлан доторх "struct task_struct {}" тодорхойлолтонд багтана. Тэр бүтцийн тодорхойлолтын хамгийн дор нь "int visible;" гээд нэмнэ. Ингэснээр доорх шиг харагдах болно.

&lt;pre&gt;
struct task_struct {
    volatile long state; /* -1 unrunnable, 0 runnable, &gt;0 stopped */
    void *stack;
    atomic_t usage;
    unsigned int flags;
        ...
        int visible;
};
&lt;/pre&gt;

Шинэ процесс үүсэхэд &lt;span style="font-weight:bold;"&gt;kernel/fork.c&lt;/span&gt; файлан доторх copy_process() функц хэрэглэгдэнэ. Тэнд visible утгаа 1 гэж зааж өгнө. Ингэснээр доорх шиг харагдах болно.

&lt;pre&gt;
static struct task_struct *copy_process(unsigned long clone_flags,
     unsigned long stack_start,
     struct pt_regs *regs,
     unsigned long stack_size,
     int __user *child_tidptr,
     struct pid *pid)
{
    ...
    struct task_struct *p;
    ...
    p = dup_task_struct(current);
    p-&gt;visible = 1;
    ...
}
&lt;/pre&gt;

&lt;p&gt;
&lt;span style="font-weight:bold;"&gt;2-р шатны ажилаа хийе&lt;/span&gt;. 

&lt;ul&gt;
&lt;li&gt;Интэл (Intel) чиптэй компьютерт &lt;span style="font-weight:bold;"&gt;arch/x86/kernel/syscall_table_32.S&lt;/span&gt; файлд доорхыг нэмнэ.&lt;br /&gt;
&lt;pre&gt;long sys_set_visibility&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span style="font-weight:bold;"&gt;include/linux/syscalls.h&lt;/span&gt; файлд системийн дуудлагын прототипийг нэмнэ.&lt;br /&gt;
&lt;pre&gt;asmlinkage int sys_set_visibility(pid_t pid, int flag);&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
arch/x86/include/asm/unistd_32.h файланд системийн дуудлагын бүртгэлийг хамгийн сүүлийн бүртгэлийг нэгээр нэмэгдүүлж оруулна.&lt;br /&gt;
&lt;pre&gt;
#define __NR_...            332
#define __NR_set_visibility 333
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
mycall хавтасыг үүсгээд &lt;span style="font-style:italic;"&gt;set_visibility.c&lt;/span&gt; файлыг үүсгэж доорхыг нэмнэ.
&lt;pre&gt;
#include &amp;lt;linux/kernel.h&amp;gt;
#include &amp;lt;linux/sched.h&amp;gt;
asmlinkage long sys_set_invisibility(pid_t pid, int flag) {

     struct task_struct *task = &amp;init_task;
 
     do {
         if(task-&gt;pid == pid){
              task-&gt;visible = flag;
              return 0;
         }
     } 
     while ( (task = next_task(task)) != &amp;init_task );
     return -1;
}
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
Эцэст нь цөмийг компайл хийхэд ашиглагдах Makefile-уудад өөрчлөлтүүдээ мэдэгдэнэ. &lt;span style="font-weight:bold;"&gt;/usr/src/linux-source-2.6.26/Makefile&lt;/span&gt; файлд доорхыг нэмнэ.&lt;br /&gt;
&lt;pre&gt;
core-y := ... mycall/
&lt;/pre&gt;
&lt;span style="font-weight:bold;"&gt;mycall/Makefile&lt;/span&gt; үүсгэж доорхыг нэмнэ.
&lt;pre&gt;
obj-y := set_visibility.o
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;span style="font-weight:bold;"&gt;3-р шатны ажилаа хийе&lt;/span&gt;. Ажиллаж байгаа хэсгүүдийн /proc хавтасанд үүссэн мэдээллийг авдаг хэсгийн код нь &lt;span style="font-weight:bold;"&gt;fs/proc/base.c&lt;/span&gt; файлын proc_pid_readdir() функцэнд байна. Доорх мэдээллийг нэмж бичнэ:
&lt;pre&gt;
...
int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir)
{
    ...
    struct tgid_iter iter;
    ...
    iter.task = NULL;
    ...
    for (iter = next_tgid(ns, iter);
        iter.task;
        iter.tgid += 1, iter = next_tgid(ns, iter)) {
            if (iter.task-&gt;visible == 1) {
                filp-&gt;f_pos = iter.tgid + TGID_OFFSET;
                if (proc_pid_fill_cache(filp, dirent, filldir, iter) &lt; 0) {
                    put_task_struct(iter.task);
                    goto out;
                }
            }
     }
     ...
}
...
&lt;/pre&gt;

&lt;p&gt;
&lt;span style="font-weight:bold;"&gt;4-р шатны ажилаа хийе&lt;/span&gt;. Шалгах програмыг (test.c) бичээд Desktop дээр хадгалаад компайл хйинэ.
&lt;b&gt;test.c&lt;/b&gt;
&lt;pre&gt;
#include &amp;lt;sys/unistd.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#define __NR_set_invisibility 328

int main(void) {
    int x,y,z=-1;
    while (1) {
        printf("Hello! You can set visibility of a process with this program.\n");
        printf("Enter '&amp;lt;pid&amp;gt; &amp;lt;flag&amp;gt;' and hit! &lt;pid&gt;: Process ID, &lt;flag&gt;: 0 to make invisible ");
        printf("and 1 to make it visible again.\n");
        scanf("%d %d", &amp;x, &amp;y);
  
        z = syscall(__NR_set_invisibility, x, y);  
        if (z == 0) {
             printf("&gt;&gt;&gt; Your modification was successful! Please review with 'top'!\n");
        } else {
             printf("&gt;&gt;&gt; Error! There was a problem. Most probably, the process with this pid doesn't exist!");  
        }
    }
}
&lt;/pre&gt;

Дээрх кодоо компайл хийгээд програм болгочихье.

&lt;pre&gt;
/home/dagvadorj/Desktop # gcc test.c -o test
&lt;/pre&gt;

Ингээд Линүкс цөм дээр хийх өөрчлөлтүүдээ хийж дууслаа. Одоо ингээд Линүкс цөмөө компайл хийе.

Эхлээд цөм дээрээ тохиргоогоо хийнэ. Энд Линүксийн ямар техник хангамж, файлын систем дэмжих вэ гэдгийг тохируулж болно. 

&lt;pre&gt;
# cd /usr/src/linux-source-2.6.26
# make menuconfig
&lt;/pre&gt;

&lt;span style="font-style:italic;"&gt;Жич: &lt;/span&gt;Дараа дараагийн алхмуудын дараа шинэ Линүксийн үйл ажиллагаанд ямарваа нэгэн алдаа гарвал хуучин тохиргоогоо &lt;code&gt;make oldconfig&lt;/code&gt; гэсэн коммандаар сэргээж болно.

Дараагийн алхамд хуучин компайлаас үлдсэн зүйлийг устгана. 

&lt;pre&gt;
# make-kpkg clean
&lt;/pre&gt;

&lt;span style="font-style:italic;"&gt;Жич: &lt;/span&gt;Анх удаа компайл хийж буй тохиолдолд ингэж хийх шаардлагагүй гэдгийг анхаарна уу.

Дараа нь Линүксийг компайл хийнэ. Доорх нь 20 минутаас 1 цаг үргэлжилж болно. Энэ хугацаа нь Линүксийн ямар техник хангамж, файл систем дэмжиж ажиллахаар тохируулагдсанаас шалтгаална. Илүү олон зүйл дэмжвэл илүү удна гэсэн үг. "harbin" гэдэг үгийн оронд таны өөрийн дурын нэр байж болно. Монгол хэл дээрх анхны сонин Харбинд хэвлэгдэж байсан, тэнд Гадаад Монголын мэргэжилтэн гар бие оролцож байсныг санан ийн нэрлэсэн билээ.

&lt;pre&gt;
# fakeroot make-kpkg -initrd -append-to-version=-harbin linux_image linux_headers
&lt;/pre&gt;

Ингэсний дараа /usr/src хавтасанд 2 ширхэг .deb өргөтгөлтэй файл үүснэ. Тэдгээрийг доорх коммандуудаар суулгана.

&lt;pre&gt;
# dpkg -i linux-image-2.6.26-harbin-2.6.26-harbin-10.00.Custom_i386.deb
# dpkg -i linux-headers-2.6.26-harbin-2.6.26-harbin-10.00.Custom_i386.deb
&lt;/pre&gt;

/boot хавтасанд Линүкс асахад хэрэгтэй initrd.img-2.6.26-harbin, vmlinuz-2.6.26-harbin ба бусад файлууд үүссэн байна.

Зарим тохиолдолд /boot/initrd.img-2.6.26-harbin файл үүсээгүй байж болно. Энэ үед:

&lt;pre&gt;
mkinitramfs -o /boot/initrd.img-2.6.26-harbin
&lt;/pre&gt;

/boot/grub/menu.lst файлд доорх эхлүүлэх сонголт нэмэгдсэн байгаа.

&lt;pre&gt;
title   Debian/GNU Linux, kernel 2.6.26-harbin
root    (hd0,1)
kernel  /boot/vmlinuz-2.6.26-harbin root=/dev/hda2 ro quiet
initrd  /boot/initrd.img-2.6.26-harbin
&lt;/pre&gt;

Одоо компьютерээ reboot хийхэд эхлэх сонголт дээр harbin гарч ирэх бөгөөд сонгоод орно уу!

top програмыг ажиллуулна уу!

&lt;pre&gt;
# top
&lt;/pre&gt;

Доорх дэлгэц гарч ирнэ:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gv39U_UEX20/SxE0PBNQpUI/AAAAAAAAAEM/cmym2yp0M90/s1600/1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 351px;" src="http://4.bp.blogspot.com/_gv39U_UEX20/SxE0PBNQpUI/AAAAAAAAAEM/cmym2yp0M90/s400/1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5409162060075410754" /&gt;&lt;/a&gt;

Desktop дээр байгаа test програмыг ажиллуулсны дараа:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gv39U_UEX20/SxE0h7qZsVI/AAAAAAAAAEU/4XT2wnuQM9g/s1600/2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 290px;" src="http://4.bp.blogspot.com/_gv39U_UEX20/SxE0h7qZsVI/AAAAAAAAAEU/4XT2wnuQM9g/s400/2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5409162385004540242" /&gt;&lt;/a&gt;

1,2,3 бүхий процессууд харагдахгүй байгааг анхаарна уу!

За ингээд Линүксийн цөмийг жаахан ч гэсэн өөрчилөөд ажиллуулж үзлээ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-6845252857620556089?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/6845252857620556089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/blog-post_27.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/6845252857620556089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/6845252857620556089'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/blog-post_27.html' title='Линүксийн цөмийн програмчлал'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_gv39U_UEX20/SxE0PBNQpUI/AAAAAAAAAEM/cmym2yp0M90/s72-c/1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-5458973005243852579</id><published>2009-11-14T19:56:00.002+02:00</published><updated>2009-11-14T20:00:15.848+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ассемблэр'/><category scheme='http://www.blogger.com/atom/ns#' term='MC6800'/><title type='text'>Моторолла 6800</title><content type='html'>Моторолла 6800 бол нилээн дээхний 8 бит дээр ажилладаг бичил схем билээ. Өмнөх бичлэг дээр Intel x86 дээр бичсэн Фибоначийн дараалал олдог бодлогыг MC6800 дээр бичье.

&lt;pre class="brush: plain"&gt;
  org $0000
  clra
  clrb  
  ldaa #6  ; find F6
  staa $001E  ; n=6
  ldaa #1  ; A=F0
  ldab #1  ; B=F1
start: staa $001F  ; Fn=A
  aba   ; A=A+B  
  dec $001E  ; n=n-1  
  tst $001E  ; test if n=0
  bne notyet ; if not branch to notyet   
  swi   ; software interrupt  
notyet: ldab $001F  ; b=Fn
  jmp start  ; jump to start


&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-5458973005243852579?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/5458973005243852579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/6800.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/5458973005243852579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/5458973005243852579'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/6800.html' title='Моторолла 6800'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-5629500047778156687</id><published>2009-11-11T00:10:00.016+02:00</published><updated>2009-11-28T16:39:03.102+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ассемблэр'/><category scheme='http://www.blogger.com/atom/ns#' term='Intel x86'/><title type='text'>Ассемблэр дээр код бичих</title><content type='html'>Ассемблийн хэл дээр бичигдсэн програм нь машины хэлрүү хялбархан хөрвүүлэгдэнэ. Энд NASM ашиглан жишээнүүд авч үзье. NASM нь &lt;a target="_blank" href="http://en.wikipedia.org/wiki/X86_instruction_listings"&gt;Intel x86&lt;/a&gt; хэл дээр ажиллана.

Доорх програмыг авч үзье:
&lt;pre class="brush: plain"&gt;
segment .data                   ; used for assigned variables
  msg  db   "Hello, world!",10
  len  equ  $ - msg             ; macro to calculate length of msg
                                ; equ for constant, ($-msg) means substract
                                ; msg's head address location from current address location

segment .text

global _start

_start:                         ; starting point

  mov  eax,4                    ; print system call
  mov  ebx,1                    ; standard output
  mov  ecx,msg                  ; the message to print
  mov  edx,len                  ; the length
  int  80h                      ; software interrupt

  mov  eax,1                    ; exit system call
  mov  ebx,0                    ; successful
  int  80h                      ; software interrupt

&lt;/pre&gt;

гэж бичээд foo.asm нэр өгч хадгалья.

Дээрх програмын обьект файлыг Линүксд зориулж үүсгэхдээ:
&lt;pre&gt;
nasm -f elf foo.asm -o foo.o
&lt;/pre&gt;
Одоо доорх коммандаар машины хэл дээрх кодыг нь харья:
&lt;pre&gt;
nasm -f elf foo.asm -l foo.lis
&lt;/pre&gt;
Ингэхэд foo.lis файл үүссэн байна. Агуулгыг нь харвал:

&lt;pre class="brush: plain"&gt;
1                                  segment .data
2 00000000 48656C6C6F2C20776F-     msg  db   "Hello, world!",10
3 00000009 726C64210A         
4                                  len  equ  $ - msg
5                                  
6                                  segment .text
7                                  global _start
8                                  
9                                  _start:
10 00000000 B804000000                  mov  eax,4
11 00000005 BB01000000                  mov  ebx,1
12 0000000A B9[00000000]                mov  ecx,msg
13 0000000F BA0E000000                  mov  edx,len
14 00000014 CD80                        int  80h
15                                  
16 00000016 B801000000                  mov  eax,1
17 0000001B BB00000000                  mov  ebx,0
18 00000020 CD80                        int  80h
&lt;/pre&gt;

эндээс компьютэрийн RAM санамж дээр бичигдэж ажиллах машины код харагдаж байна. Хэдийгээр эхний хаяг 0x00000000 гэж харагдаж байгаа ч санамжинд хуулагдах үед үйлдлийн систем хоосон буй өөр хаягаа оноож өгнө.

Дээрх машины коп нь програмаас гараад software interrupt хийж байгаа учир линкэр ашиглан уншигддаг програм болгож болно:

&lt;pre&gt;
ld foo.o -o foo -e _start
&lt;/pre&gt;

Тэгээд шууд &lt;code&gt;./foo&lt;/code&gt; гээд ажиллуулж болно.

Одоо өөр нэг жишээ авч үзье. Доорх жишээнд C хэл дээр бичигдсэн програмаас ассемблэрийн хэл дээр бичигдсэн рутинийг ажиллуулах болно.

&lt;strong&gt;bar.c&lt;/strong&gt;
&lt;pre class="brush: c"&gt;
#include &lt;stdio.h&gt;

int star();
int fibo(int k);

int main() {
 int k,i;
 k = star();
 printf("Number is: %d\n", k);
 k = fibo(5);
 printf("5-th Fibonacci number is: %d\n", k);
 for(i=0;i&lt;=8;i++) {
  printf("%d ", fibo(i));
 }
 printf("\n");
 return 0;
}
&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;bar.asm&lt;/strong&gt;
&lt;pre class="brush: plain"&gt;
global star
global fibo

segment .bss
 sum resb 1

segment .text

star: mov ecx,8
 mov edx,9
 add ecx,edx
 mov [sum],ecx
 mov eax,[sum] 
 ret
fibo: push ebp
 mov ebp,esp
 mov eax,1
 mov ebx,1
 mov edx,[ebp+8]
 cmp edx,1
 jle fstop
 dec edx
fstep: mov ecx,eax
 add eax,ebx
 dec edx
 mov ebx,ecx
 cmp edx,0
 jne fstep 
fstop: pop ebp 
 ret
&lt;/pre&gt;

Ажиллуулахдаа:
&lt;p&gt;
1 - Ассемблэр кодноос обьект файл үүсгэнэ:
&lt;pre&gt;    nasm -f elf bar.asm -o barasm.o&lt;/pre&gt;
2 - C кодноос обьект файл үүсгэнэ:
&lt;pre&gt;    gcc -c bar.c -o barc.o&lt;/pre&gt;
3 - Обьект файлуудыг холбоно:
&lt;pre&gt;    gcc barasm.o barc.o -o bar&lt;/pre&gt;
4 - Програмыг ажиллуулна:
&lt;pre&gt;    ./bar&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-5629500047778156687?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/5629500047778156687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/5629500047778156687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/5629500047778156687'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/blog-post.html' title='Ассемблэр дээр код бичих'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-4293502167022453055</id><published>2009-11-10T23:37:00.004+02:00</published><updated>2009-11-10T23:55:16.115+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><category scheme='http://www.blogger.com/atom/ns#' term='Damn Small Linux'/><title type='text'>USB дээр Damn Small Linux суулгах</title><content type='html'>&lt;ol&gt;&lt;li&gt;&lt;a target="_blank" href="http://distro.ibiblio.org/pub/linux/distributions/damnsmall/current/"&gt;dsl-&lt;version&gt;[version]-embedded.zip&lt;/version&gt;&lt;/a&gt; файлыг татаж аваад форматласан USB санамжийн төхөөрөмжид задална&lt;/li&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.kernel.org/pub/linux/utils/boot/syslinux/"&gt;syslinux&lt;/a&gt; -ma G: гэж USB төхөөрөмжөө Bootable болгоно&lt;/li&gt;&lt;li&gt;BIOS дээр компьютерээ USD төхөөрөмжөөс эхэлж Boot хийдэг болгоод асаана&lt;/li&gt;&lt;/ol&gt;Damn Small Linux нь маш жижиг хэмжээтэй (~50MB) бөгөөд Knoppix дээр суурилсан учир RAM дээр шууд ачааллана. mydsl-load комманд ашиглаад tar.gz, tar.bz2, dsl гэх мэт өргөтгөлтэй програмуудыг хялбархан суулгаж болно.

mount /dev/hda1, mount /dev/sda1 гээд хатуу диск болон USB дисктэйгээ холбогдчихно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-4293502167022453055?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/4293502167022453055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/usb-damn-small-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/4293502167022453055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/4293502167022453055'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/11/usb-damn-small-linux.html' title='USB дээр Damn Small Linux суулгах'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-3634638267016245745</id><published>2009-08-10T15:33:00.003+03:00</published><updated>2009-11-27T13:50:34.604+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><title type='text'>Android дээр хэрэглээний програм хөгжүүлэх</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gv39U_UEX20/SoAUa0Ixt2I/AAAAAAAAAEE/J8KQgtodG_U/s1600-h/Preview.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 271px; height: 400px;" src="http://3.bp.blogspot.com/_gv39U_UEX20/SoAUa0Ixt2I/AAAAAAAAAEE/J8KQgtodG_U/s400/Preview.png" alt="" id="BLOGGER_PHOTO_ID_5368313206730241890" border="0" /&gt;&lt;/a&gt;
Android нь анхлан Google-ийн зүгээс хөгжүүлэгдэн нээлттэй эх кодтой болгогдсон гар утсанд зориулагдсан үйлдлийн систем юм.

Android нь Linux кернел дээр ажилладаг. Кодыг Java програмын хэл ашиглан хөгжүүлнэ. SDK нь JSON, SQLite, HttpClient гэх мэт маш хэрэгцээтэй бүтээгдэхүүнүүдийг агуулдаг учир програм хөгжүүлэхэд тун хялбар болгож байна.

Энд Android SDK ашиглан програм хөгжүүлье. Гэхдээ алхам алхам явахгүй, гүйцэд код тайлбарлах маягаар урагшлах болно.

&lt;h2&gt;Програм&lt;/h2&gt;

UBList нь түрээслүүлэх болон зарах үл хөдлөх хөрөнгө хайх Android системтэй үүрэн телефонд зориулсан хэрэглээний програм (үүнээс хойш "програм" гэнэ) юм.

UBList програмыг ашиглан ямарваа нэгэн хот дотор дүүрэг, хороолол, хайж буй үл хөдлөх хөрөнгийн төрөл болон үнийн дээд хязраарыг сонгосны (хоосон орхиж болно) дагуу хайлт хийн хайлтан дотроосоо зар сонгон илүү их мэдээллийг олж авах мөн газрын зураг дээр байршлыг нь харах, зар тавьсан этгээдрүү залгах боломжтой.

Энэхүү програм нь Улаанбаатар болон дэлхийн бусад том метрополь хотуудад үл хөдлөх хөрөнгө хайгсадад хэрэгцээтэй байх боловуу.

&lt;blockquote&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Энэ бичлэгийг дуусгаагүй байгаадаа хүлцэл өчье!&lt;/span&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-3634638267016245745?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/3634638267016245745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/android_10.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/3634638267016245745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/3634638267016245745'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/android_10.html' title='Android дээр хэрэглээний програм хөгжүүлэх'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_gv39U_UEX20/SoAUa0Ixt2I/AAAAAAAAAEE/J8KQgtodG_U/s72-c/Preview.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-7828632481293440689</id><published>2009-08-10T15:25:00.000+03:00</published><updated>2009-08-10T15:26:09.597+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><title type='text'>GMail дээр уншаагүй майлүүдээ харах</title><content type='html'>GMail дээр уншаагүй майлүүдээ олох гэж зовдог байж билээ. Search mail дээр нь in:unread гээд таагаад бичээд хайсан болчихлоо. :P&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-7828632481293440689?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/7828632481293440689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/gmail.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/7828632481293440689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/7828632481293440689'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/gmail.html' title='GMail дээр уншаагүй майлүүдээ харах'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-526149415625510621</id><published>2009-08-10T15:21:00.003+03:00</published><updated>2009-08-10T15:24:38.556+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><title type='text'>Counting sort буюу Тоолж жагсаах алгоритм</title><content type='html'>&lt;a target="_blank" href="http://www.cse.iitk.ac.in/users/dsrkg/cs210/applets/sortingII/countingSort/countingSort.html"&gt;Энэ адилтгах програмыг&lt;/a&gt; харж байгаад Тоолж жагсаах алгоритмыг бичлээ.
&lt;pre class='brush: cpp'&gt;
#include &lt;iostream&gt;

using namespace std;

void countingsort(int *from, int *to, int size) {

    int bound;

    //calculate the bound
    bound = from[0];
    for(int i=1; i &lt; size; i++) {
        if(bound &lt; from[i]) bound = from[i];
    }
    bound = bound+1;

    // counting elements to temporary array
    // of bound length
    int *tmp = new int[bound];
    for (int i=0; i &lt; bound; i++) {
        tmp[i] = 0;
    }
    for (int i=0; i &lt; size; i++) {
        tmp[from[i]]++;
    }

    // processing temporary array
    for (int i=1; i &lt; bound; i++) {
        tmp[i] += tmp[i-1];
    }

    // moving elements to final array
    for (int i=0; i &lt; size; i++) {
        tmp[from[i]]--;
        to[tmp[from[i]]] = from[i];
    }

    delete tmp;
}

int main() {
    int from[8] = {0,4,5,0,3,4,9,4};
    int to[8] = {0};

    cout &lt;&lt; "The initial array is: " &lt;&lt; endl;
    for(int i=0; i &lt; 8; i++) {
        cout &lt;&lt; from[i] &lt;&lt; " ";
    }
    cout &lt;&lt; endl;

    countingsort(from, to, 8);

    cout &lt;&lt; "The final array is: " &lt;&lt; endl;
    for(int i=0; i &lt; 8; i++) {
        cout &lt;&lt; to[i] &lt;&lt; " ";
    }
    cout &lt;&lt; endl;

    system("PAUSE");
    return 0;
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-526149415625510621?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/526149415625510621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/counting-sort.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/526149415625510621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/526149415625510621'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/counting-sort.html' title='Counting sort буюу Тоолж жагсаах алгоритм'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-7818405785988913473</id><published>2009-08-10T15:21:00.001+03:00</published><updated>2009-08-10T15:21:23.002+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Developer Challenge 2</title><content type='html'>&lt;div class="entry"&gt;     &lt;div class="snap_preview"&gt;&lt;p&gt;&lt;img src="http://code.google.com/android/adc/images/android_adc.png" alt="" align="left" /&gt; &lt;a href="http://code.google.com/android/adc/" target="_blank"&gt;Android Developer Challenge 2&lt;/a&gt; найман сард бүртгэл нь эхлэх юм байна.&lt;/p&gt; &lt;/div&gt;   &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-7818405785988913473?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/7818405785988913473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/android-developer-challenge-2.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/7818405785988913473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/7818405785988913473'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/android-developer-challenge-2.html' title='Android Developer Challenge 2'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-3615167326108198893</id><published>2009-08-10T15:11:00.002+03:00</published><updated>2009-08-10T15:19:12.820+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><category scheme='http://www.blogger.com/atom/ns#' term='Anroid'/><title type='text'>Android дээр явцыг хянах</title><content type='html'>&lt;p&gt;JavaScript, ActionScript болон бусад хэлүүд дээр debug хэрэглэхгүйгээр UI эсвэл лог ашиглан програмын run-time дахь явцыг хянах нь маш үр ашигтай болдог билээ.&lt;/p&gt; &lt;p&gt;Тэгвэл Android дээр ингэж хийдэг юм байна.&lt;/p&gt; &lt;p&gt;Эхлээд яаж dialog box гаргаж ирэх вэ гэвэл:&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;
&lt;pre class='brush: java'&gt;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;

private AlertDialog.Builder alert;

alert = new AlertDialog.Builder(this);
alert.setPositiveButton("OK", null);
alert.setCancelable(true);

alert.setMessage(R.string.alert_msg);
alert.create().show();
&lt;/pre&gt;
&lt;p&gt;
Програмаа бичээд алдаагүй компайл хийсэн ч гэлээ “The application … has stopped unexpectedly. Try again!” гээд бүдүүлэг бээрэгхэн мессеж гарч програм ажиллахгүй байх нь элбэг. Тэгвэл
&lt;/p&gt;
&lt;pre&gt;
adb catlog
&lt;/pre&gt;
&lt;p&gt;
гэж лог ажиллуулаад хянаж байх ашигтай.
&lt;/p&gt;
Эндээ бас доорх кодыг run-time хэрэглэж өөрөө хянах мессеж харж байж болно.

&lt;pre class='brush: cpp'&gt;
import android.util.Log;

Log.w("My warning message &gt;&gt;&gt; ", "My message goes here!");
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-3615167326108198893?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/3615167326108198893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/3615167326108198893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/3615167326108198893'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/android.html' title='Android дээр явцыг хянах'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-1967539051356198182</id><published>2009-08-10T14:56:00.001+03:00</published><updated>2009-08-10T14:57:48.704+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><title type='text'>Windows дээр Apache Ant суулгах</title><content type='html'>&lt;div class="entry"&gt;     &lt;div class="snap_preview"&gt;&lt;p&gt;Юун түрүүн JDK суулгагдсан байх хэрэгтэй.&lt;/p&gt; &lt;ol&gt;&lt;li&gt;Apache Ant програмын binary хувилбарыг &lt;a href="http://ant.apache.org/" target="_blank"&gt;http://ant.apache.org&lt;/a&gt; сайтнаас &lt;a href="http://www.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.zip" target="_blank"&gt;татаж авна.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Татаж авсан &lt;span style="color: rgb(51, 51, 153);"&gt;apache-ant-1.7.1-bin.zip&lt;/span&gt; файлаа задална. &lt;span style="color: rgb(51, 51, 153);"&gt;C:\Ant&lt;/span&gt; гэсэн байрлалд задалсан гэж үзье.&lt;/li&gt;&lt;li&gt;Виндовс үйлдлийн системийн &lt;span style="color: rgb(51, 51, 153);"&gt;Control Panel&lt;/span&gt; дотор &lt;span style="color: rgb(51, 51, 153);"&gt;System&lt;/span&gt;-рүү ороод &lt;span style="color: rgb(51, 51, 153);"&gt;Advanced&lt;/span&gt; табд ороод &lt;span style="color: rgb(51, 51, 153);"&gt;Environment Variables&lt;/span&gt; товчлуур дээр дарна.&lt;/li&gt;&lt;li&gt;Гарч ирсэн цонхонд доорх өөрчлөлтүүдийг хийнэ. User variables-д &lt;span style="color: rgb(51, 51, 153);"&gt;ANT_HOME&lt;/span&gt; хэсэгт &lt;span style="color: rgb(51, 51, 153);"&gt;C:\Ant&lt;/span&gt;, &lt;span style="color: rgb(51, 51, 153);"&gt;CLASS_PATH&lt;/span&gt; хэсэгт &lt;span style="color: rgb(51, 51, 153);"&gt;C:\Ant\lib;&lt;/span&gt; гэж оруулна.&lt;/li&gt;&lt;li&gt;Мөн &lt;span style="color: rgb(51, 51, 153);"&gt;System variables&lt;/span&gt;-д &lt;span style="color: rgb(51, 51, 153);"&gt;Path&lt;/span&gt; хэсэгт &lt;span style="color: rgb(51, 51, 153);"&gt;C:\Ant\bin;&lt;/span&gt; гэж оруулна.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Одоо &lt;span style="color: rgb(51, 51, 153);"&gt;C\:&gt;ant&lt;/span&gt; гэхэд ажиллах ёстой.&lt;/p&gt; &lt;/div&gt;   &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-1967539051356198182?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/1967539051356198182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/windows-apache-ant.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1967539051356198182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1967539051356198182'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/windows-apache-ant.html' title='Windows дээр Apache Ant суулгах'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-1023209430336156363</id><published>2009-08-10T14:54:00.001+03:00</published><updated>2009-08-10T14:56:15.466+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Нийтлэл'/><title type='text'>Вэб буюу Мэдээллийн Сүлжээ</title><content type='html'>&lt;div style="text-align: justify;" class="entry"&gt;     &lt;div class="snap_preview"&gt;&lt;p&gt;Вэбийн тренд гэж яригддаг. Гэхдээ энэ ухагдахуунд бизнесмен биш, харин инженер үүднээс хандсан богинохон танилцуулга хийе гэж бодлоо.&lt;/p&gt; &lt;p&gt;Интернэтийн үүсэл хөгжлийн талаар зөндөө нийтлэл байдаг. Товчхон дурдах хэрэгтэй болов уу. Анхлан АНУ-гийн DoD (U.S. Department of Defense) буюу Батлан Хамгаалах Яамны зүгээс гүйцэтгэгдсэн ARPANET төсөл нь академийн ертөнцөд хэрэглэгдэж эхэлснээр яваа яваандаа Интернэтийн эх болжээ. Интернэт нь олон тооны суурин сүлжээг холбосон илүү өргөн хэмжээний сүлжээнүүдийн цогц юм. Интернэтийн тусламжтайгаар дэлхийн өнцөг булан дахь компьютерын ард сууж буй хүн бүхэн мэдээ, мэдээлэл солилцож чадах боллоо. Гэхдээ Веб гэж тэр үед байхгүй байлаа.&lt;/p&gt; &lt;p&gt;Өнгөрсөн жил Big Bang буюу Том Тэсрэлтийг батлах оролдлогоороо нэлээн цуу тарьсан Шведцарь дахь Европийн Цөмийн Судлалын Төвд (CERN) ажилж асан Их Британы эрдэмтэн Тим Бэрнэрс-Ли (Tim Berners-Lee) Интернэтэд мэдээлэл дамжуулах Өндөр Хурдтай Текст (HyperText) гэгчийг сэджээ. Энэ онолдоо зохицуулан мэдээлэл илэрхийлэх HTML (HyperText Mark-Up Language) болон мэдээлэл дамжуулах протокол HTTP (HyperText Transfer Protocol) боловсруулсан байна. HTML болон HTTP нь өнөөг хүртэл Веб дэх мэдээлэл дамжуулах үндсэн технологиуд юм. Вэбийн стандартчилалыг зохион байгуулах үүднээс W3C (Worldwide Web Consortium) консорциум байгуулагдсан ба сүүлд мөн Вэбийн үр ашигтай зөв хэрэглэх үүднээс SemanticWeb байгууллага ажиллаж байгаа бөгөөд хийсэн ажлаараа Их Британы хатан хаанаас Sir цол авч язгууртан болсон Сир Тим Бэрнэрс-Ли аль аль байгууллагад идэвхтэй оролцож байна.&lt;/p&gt; &lt;p&gt;Америкт HTML болон HTTP-д зориулж хэрэглэгчийн компьютер дээр ажиллах хэсэгч програм (бравзр) Mosaic түгэж хойноос нь Netscape гарч иржээ. Харин Microsoft корпораци өөрсдийн бүтээгдэхүүн Internet Explorer-ыг Windows 95 үйлдлийн системтэй үнэгүй тарааж эхэлснээр “Бравзрын Дайн”-д Netscape ялагдаж интернэтийн агуулгын томоохон тоглогч AOL-д зарагдан удалгүй Netscape Navigator програм нээлттэй эхтэй болсноор Mozilla Firefox болон Mozilla сан гарч ирэн Microsoft-ийн толгой дээр цахиур хагалсан гэж болно. Харин сүүлийн үед гарч ирсэн Google Chrome нь мөн шинэлэг бөгөөд маш чадвартай технологи болсон билээ.&lt;/p&gt; &lt;p&gt;Өндөр хурдтай текст буюу HTML-ийг боловсруулах технологи ч мөн хөгжиж ирлээ. Мэдээж HTML-ээр илэрхийлэгдсэн хуудас дан ганц текст харуулахгүй, зурагнаас авхуулаад төрөл бүрийн обьектийн илэрхийлэл дамжуулж, бравзр буюу бравзр дээр суурилсан програм тэднийг хэрэглэгчид харуулна. HTML хуудас статик бус динамик буюу програмын хэлээр урьдчилан боловсрогддог болсон нь шинэ зүйл биш билээ. Perl, CGI, PHP, ASP, CFM нар нь бүгд HTML хуудас боловсруулна. Мөн илүү дэвшилтэт Java, C#, Python, Ruby зэрэг хэлүүдийг ашигладаг Java 2 EE, ASP.NET, Ruby on Rails, JSF зэрэг платформууд байна. Веб хуудас бүхлээрээ эсвэл нэг хэсэг нь урьдчилан програмчлагдан сүлжээгээр дамжуулагдсанаар веб хуудсаар дамжуулан өгөгдлийн сантай харьцах гэх мэт олон боломж гарч ирнэ. Ийм төрлийн програмчлалыг сервер-талт програмчлал гэнэ.&lt;/p&gt; &lt;p&gt;Вэб хуудаснуудын болон обьектуудын байрлах компьютерыг сервер гэх ба Интернэтээр дамжуулан веб хуудсыг бравзр дээр харуулж буй компьютерыг клайнт буюу хэрэглэгч гэнэ. Вэб хуудас бравзр дээр ачаалласаны дараа мөн програмчлал агуулж байж болно. Энэ нь ихэвчлэн Netscape-ээс гаралтай JavaScript хэлээр гүйцэтгэгдэнэ.&lt;/p&gt; &lt;p&gt;Сүүлийн үед AJAX буюу Web 2.0 (цаашлаад SaaS, RIA гэх мэт олонг дурьдаж болно) гэж их сонсогдох боллоо. Орчин үед веб сайтууд компьютер дээр суурилагдсан програмын хийж чадах бүх юмыг хийдэг болсноор барахгүй, шинэ үйл болсон бүрийд хуудас тэр чигээрээ дахин ачааллах хэрэггүй болж хэрэглэгчид хялбарчлал болон цаг хугацаа ихийг хожуулж байна. AJAX (Asynchronous JavaScript And XML) технологиийн тусламжтайгаар ачааллагдсан вэб хуудсан дээрх JavaScript програм далдуур өөр хуудас ачааллан гарсан хариуг буцааж хүлээж авах боломжтой болжээ.&lt;/p&gt; &lt;/div&gt;   &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-1023209430336156363?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/1023209430336156363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/blog-post_10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1023209430336156363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1023209430336156363'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/blog-post_10.html' title='Вэб буюу Мэдээллийн Сүлжээ'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-3440917617502010358</id><published>2009-08-10T14:51:00.003+03:00</published><updated>2009-08-10T15:15:13.346+03:00</updated><title type='text'>Stack</title><content type='html'>&lt;p&gt;Stack нь компьютерийн програмчлалд их хэрэглэгдэх өгөгдлийн бүтэц юм. Ажиллах зарчмын хувьд LIFO (last in first out) буюу “сүүлд нэмэгдсэн нь эхэлж гарна” гэж тайлбарлагдана.  Монгол хэлээр юу гэж хэрэглэж болох вэ гэж бодоод &lt;a href="http://www.bolor-toli.com/index.php?pageId=10" target="_blank"&gt;“Болор Толь”&lt;/a&gt;-руу орж үзвэл “бухал”, “овоо”, “тавиур” гэсэн үгүүд байж болох.&lt;/p&gt; &lt;p&gt;Энд нэг жишээ тавья! Уул нь генерик өгөгдөл дээр жишээ бол сайн байх ч, одоохондоо зөвхөн бүхэл тооны жишээ тавья:&lt;/p&gt;
&lt;strong&gt;stack.h&lt;/strong&gt;
&lt;pre class="brush: cpp"&gt;
#ifndef _STACK_H
#define _STACK_H

typedef struct {
   int logiclen;
   int alloclen;
   int * elems;
} stack;

void StackNew(stack * s);

void StackDispose(stack * s);

void StackPush(stack * s, int value);

int StackPop(stack * s);

#endif
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;strong&gt;stack.c&lt;/strong&gt;
&lt;pre class="brush: cpp"&gt;
#include &lt;stdio.h&gt;
#include "stack.h"

void StackNew(stack * s) {
    s-&gt;logiclen = 0;
    s-&gt;alloclen = 4;
    s-&gt;elems = malloc(4*sizeof(int));
}
void StackDispose(stack * s) {
    free(s-&gt;elems);
    free(s);
}
void StackPush(stack * s, int value) {
    s-&gt;elems[s-&gt;logiclen] = value;
    s-&gt;logiclen++;
}
int StackPop(stack * s) {
    s-&gt;logiclen--;
    return s-&gt;elems[s-&gt;logiclen];
}

&lt;/pre&gt;
&lt;strong&gt;program.c&lt;/strong&gt;
&lt;pre class="brush: cpp"&gt;
#include &lt;stdio.h&gt;
#include "stack.h"

int main() {
    stack s;
    StackNew(&amp;s);
    StackPush(&amp;s, 4);
    StackPush(&amp;s, 5);
    StackPush(&amp;s, 6);
    printf("%d\n", StackPop(&amp;s));
    printf("%d\n", StackPop(&amp;s));
    printf("%d\n", StackPop(&amp;s));
    StackDispose(&amp;s);
    system("PAUSE");
    return 0;
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-3440917617502010358?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/3440917617502010358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/stack.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/3440917617502010358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/3440917617502010358'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/stack.html' title='Stack'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-445150257232507565</id><published>2009-08-10T14:36:00.003+03:00</published><updated>2009-08-10T14:50:35.133+03:00</updated><title type='text'>Google Wave</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gv39U_UEX20/SoAJRFL_gUI/AAAAAAAAAD8/9TVZtQzZg1A/s1600-h/3575380674_b6451519e0_o.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 258px; height: 170px;" src="http://2.bp.blogspot.com/_gv39U_UEX20/SoAJRFL_gUI/AAAAAAAAAD8/9TVZtQzZg1A/s320/3575380674_b6451519e0_o.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5368300944880533826" /&gt;&lt;/a&gt; 
Google-ийн шинэ бүтээгдэхүүн Google Wave үнэхээр электрон шуудангаас авахуулаад олон юм өөрчилж чадах байхаа.

Google I/O 2009 семинар дээр болсон танилцуулах видеог &lt;a target="_blank" href="http://www.youtube.com/watch?v=v_UyVmITiYQ"&gt;эндээс үзнэ үү&lt;/a&gt;!

“Icland is an icland.” -&gt; “Iceland is an island.” :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-445150257232507565?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/445150257232507565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/google-wave.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/445150257232507565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/445150257232507565'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/google-wave.html' title='Google Wave'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_gv39U_UEX20/SoAJRFL_gUI/AAAAAAAAAD8/9TVZtQzZg1A/s72-c/3575380674_b6451519e0_o.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-2973309138287887916</id><published>2009-08-10T14:28:00.002+03:00</published><updated>2009-08-11T16:27:32.718+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><title type='text'>Обьект хандлагат програмчлал</title><content type='html'>&lt;pre class='brush:cpp'&gt;
#include &lt;string.h&gt;
#include &lt;iostream&gt;

using namespace std;

class Fraction {
 unsigned int num;
 unsigned int denom;
 public:
  Fraction() { }
  Fraction(unsigned int , unsigned int );
  Fraction(const Fraction &amp; );
  bool operator==(const Fraction &amp; z) {
   return (z.num == num &amp;&amp; z.denom == denom);
  }
  bool operator&lt;(const Fraction &amp; z) const {
   if ((float)num/denom &lt; (float)z.num/z.denom)
    return true;
   else
    return false;
  }
  void setDenom(int new_denom) {
   denom = new_denom;
  }
  unsigned int getNum() const {
   return num;
  }
  unsigned int getDenom() const {
   return denom;
  }
};

Fraction::Fraction(unsigned int new_num, unsigned int new_denom) {
 num = new_num;
 denom = new_denom;
}

Fraction::Fraction(const Fraction &amp; z) {
 num = z.num;
 denom = z.denom;
}

template&lt;class Type&gt;
class MyArray {
 int mysize;
    Type * content;
    public:
        MyArray(int);
  MyArray(const MyArray &amp; z) {
   mysize = z.mysize;
   content = z.content;
  }
  Type &amp; operator[](int i)  {
   if (i &lt; 0) throw string("index out of bounds");
   else if (i &gt; mysize) throw string("index out of bounds");
   return content[i];
  }
  const Type &amp; operator[](int i) const {
   if (i &lt; 0) throw string("index out of bounds");
   else if (i &gt; mysize) throw string("index out of bounds");
   return content[i];
  }
  bool contains(Type elem) const {
   int i;
   for (i=0; i &lt; mysize; i++) {
    if(content[i] == elem) return true;
   }
   return false;
  }
  const Type &amp; operator!() const {
   int i=0;
   for (int j=1 ; j &lt;= mysize; j++)
    if (content[i] &lt; content[j]) i=j;
   return content[i];
  }
};

template&lt;class Type&gt;
MyArray&lt;Type&gt;::MyArray(int size) {
 mysize = size;
    content = new Type[size];
}

ostream&amp; operator &lt;&lt;(ostream&amp; out, const Fraction&amp; z)  // Overloading &lt;&lt;
{
 out &lt;&lt; "( " &lt;&lt; z.getNum() &lt;&lt; "/" &lt;&lt; z.getDenom() &lt;&lt; " )";
 return out;
};
&lt;/pre&gt;
&lt;pre class='brush:cpp'&gt;
int main(int argc, int ** argv) {
    int i;
 MyArray&lt;int&gt; m1(5); // creates an empty 5-element-integer array inside the object m1;
 MyArray&lt;int&gt; m2(3); // creates an empty 3-element-integer array inside the object m2;
 for (int i = 0; i &lt;= 5; i++ ){
  try{
   m1[i] = i;
  }
  catch(const string &amp; err_msg){ // exception handler
   cout &lt;&lt; err_msg &lt;&lt; endl; //writes "index out of bounds"
  }
 }

 MyArray&lt;int&gt; m3 = m2 = m1;

 for (i = 0; i &lt;= 5; i++ ){
  try{
   cout &lt;&lt; m3[i] &lt;&lt; " ";
  }
  catch(const string &amp; err_msg){ // exception handler
   cout &lt;&lt; err_msg &lt;&lt; endl; //writes "index out of bounds"
  }
 }

 if (m1.contains(3))
  cout &lt;&lt; "Element 3 is contained in the array" &lt;&lt; endl;
 else
  cout &lt;&lt; "Element 3 is not contained in the array" &lt;&lt; endl;

 cout &lt;&lt; "The largest element in the array: " &lt;&lt; !m1 &lt;&lt; endl ;

 MyArray&lt;fraction&gt; m4(3); // An array with two empty spaces

 Fraction cObj1(3, 5); // A Fraction object with an unsigned numerator and unsigned denominator
 Fraction cObj2 = cObj1;
 Fraction cObj3 (3,4);
 cObj2.setDenom(7); // sets the denomenator of the Fraction object as 7

 try {
  m4[0] = cObj1;
  m4[1] = cObj2;
  m4[2] = cObj3;
 }
 catch(const string &amp; err_msg){ // exception handler
  cout &lt;&lt; err_msg &lt;&lt; endl; //writes "index out of bounds"
 }

 for (i = 0; i &lt; 3; i++ ){ // NOTE: burada yanlislikla i&lt;=3 yazildigini sanip degistirdim
  try{
   cout &lt;&lt; m4[i] &lt;&lt; " ";
  }
  catch(const string &amp; err_msg){ // exception handler
   cout &lt;&lt; err_msg &lt;&lt; endl; //writes "index out of bounds"
  }
 }
 if (m4.contains(Fraction(3,7)))
  cout &lt;&lt; "The element is contained in the array" &lt;&lt; endl;
 else
  cout &lt;&lt; "The element is not contained in the array" &lt;&lt; endl;

 cout &lt;&lt; "The largest element in the array: " &lt;&lt; !m4 &lt;&lt; endl ;

    return 0;
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-2973309138287887916?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/2973309138287887916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/blog-post.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2973309138287887916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2973309138287887916'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/blog-post.html' title='Обьект хандлагат програмчлал'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-2566077663590842383</id><published>2009-08-10T14:21:00.000+03:00</published><updated>2009-08-10T14:24:03.623+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HOWTO'/><category scheme='http://www.blogger.com/atom/ns#' term='Haskell'/><title type='text'>Windows дээр Haskell ажиллуулах</title><content type='html'>Haskell програмын хэлийн хамгийн алдартай компайлэр нь GHC буюу Glasgow Haskell Compiler юм байна.

Энэ интэрпрэтэр буюу компайлэрийг Windows дээр хэрэглэснээ бичиж үлдээе!

&lt;pre&gt;
Prelude&gt; :cd C:/Haskell/
Prelude&gt; :load Main.hs
*Main&gt; main
&lt;/pre&gt;

C:/Haskell/Main.hs файлын агуулга нь доорх шиг байна.

&lt;pre&gt;
module Main where

main = do
     putStrLn "Hello, World!"
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-2566077663590842383?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/2566077663590842383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/windows-haskell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2566077663590842383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/2566077663590842383'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/windows-haskell.html' title='Windows дээр Haskell ажиллуулах'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-8579184355004861543</id><published>2009-08-10T13:39:00.003+03:00</published><updated>2009-08-10T14:28:16.698+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><category scheme='http://www.blogger.com/atom/ns#' term='ipc'/><category scheme='http://www.blogger.com/atom/ns#' term='semaphore'/><category scheme='http://www.blogger.com/atom/ns#' term='shared memory'/><title type='text'>Процесс хоорондын харилцаа буюу IPC</title><content type='html'>&lt;pre class="brush: cpp"&gt;
#include &lt; stdio.h &gt;
#include &lt; stdlib.h &gt;
#include &lt; string.h &gt;
#include &lt; sys/sem.h &gt;
#include &lt; sys/shm.h &gt;
#include &lt; sys/types.h &gt;
#include &lt; sys/ipc.h &gt;
#include &lt; time.h &gt;

#define SEMKEY (1492)
#define SHMKEY (1493)
#define SHMKEY2 (1494)

int obid() {
 int shmid2;
 int * bestbid;
 if ((shmid2 = shmget(SHMKEY2, sizeof(int), 0666)) &lt; 0) {
  exit(-1);
 }
 if ((bestbid = shmat(shmid2, NULL, 0)) == (int *) -1) {
  exit(-1);
 }
 if (*bestbid == -1)
                printf("Үнэ хаялтын шийдвэр хүлээгдэж байна.n");
 while (*bestbid == -1)
                sleep(1);
 return 0;
}

int main(int argc, char **argv){
 int n;
 int semid;
 int shmid, shmid2;
 pid_t pid;
 int retval;
 int i; // for iteration i.e., C99 standard
 struct sembuf operations[1];
 int * bids, * bestbid;
 int semval;
 int rndnum;
 int min;
 int processid;

 if (argc &lt; 2) {
  printf("Алдаа: Ажиллуулмаар байгаа процессийн тоо хэмжээг оруулаагүй байна.n");
  exit(-1);
 }
 n = atoi(argv[1]);

 /* Semaphore */

 semid = semget(SEMKEY, 1, 0666 | IPC_CREAT);
 if(semid &lt; 0)
 {
  exit(-1);
 }

 union semun {
  int val;
  struct semid_ds *buf;
  ushort * array;
 } argument;
 argument.val = n;

 if( semctl(semid, 0, SETVAL, argument) &lt; 0) {
                printf("Алдаа: Сэмафорын утгыг өгч чадсангүй.\n");
                exit(-1);
        }

 /* Shared memory for bids */

 if ((shmid = shmget(SHMKEY, n*sizeof(int), IPC_CREAT | 0666)) &lt; 0) {
  exit(-1);
 }

 if ((bids = shmat(shmid, NULL, 0)) == (int *) -1) {
  exit(-1);
 }

 /* Shared memory for the minimum bid */

 if ((shmid2 = shmget(SHMKEY2, sizeof(int), IPC_CREAT | 0666)) &lt; 0) {
  exit(-1);
 }

 if ((bestbid = shmat(shmid2, NULL, 0)) == (int *) -1) {
  exit(-1);
 }

 *bestbid = -1;

 for (i=0; i &lt; n; i++) {
  pid = fork();
  if (pid &lt; 0) {
   printf("Алдаа: Хүүхэд процесс үүсгэхэд алдаа гарлаа.\n");
  } else if (pid == 0) { //child process
   processid = i;
   semval = semctl(semid, 0, GETVAL, argument);

   rndnum = (abs((getpid() * rand())) % 1000) + 10;

   *(bids+semval) = rndnum;

   printf("Процесс #%d: %d MNT Үнэ санал болголоо. ", i, rndnum);

   operations[0].sem_num = 0;
   operations[0].sem_op = -1;
   operations[0].sem_flg = 0;

   if (semval == 1) {
    printf("Шийдвэр хүлээгдэж байна.\n");
                min = *(bids+i);
    for(i=1; i &lt;= n; i++) {
     if (min &gt; *(bids+i+1) &amp;amp; i+1 &lt;= n) {
      min = *(bids+i+1);
     }
    }
    *bestbid= min;
    printf("Хамгийн бага үнийн санал: %d MNT. obid функцд хүлээгдэж байсан процессууд ажилна.\n", *bestbid);
   }

   retval = semop(semid, operations, 1);

   if(retval == 0)
   {
    if (obid() == 0) {
                    printf("Процесс #%d: obid функцээс буцлаа. \n", processid);
                }
    exit(0);
   }

  } else { //parent process
   if (semctl(semid, 0, GETVAL, argument) == 0) {
    semctl(semid,0,IPC_RMID,0);
                shmctl(shmid,IPC_RMID,0);
                shmctl(shmid2,IPC_RMID,0);
                exit(0);
   }
  }
 }

 printf("n");
 return 0;
}

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-8579184355004861543?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/8579184355004861543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/ipc.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8579184355004861543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8579184355004861543'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/ipc.html' title='Процесс хоорондын харилцаа буюу IPC'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-8639795230218279118</id><published>2009-08-10T13:19:00.003+03:00</published><updated>2009-08-10T13:23:41.943+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><title type='text'>Insertion Sort Algorithm буюу Нэмж Жагсаах Алгоритм</title><content type='html'>&lt;pre class="brush: cpp"&gt;
void insertionsort(int * input, int n) {
     int j;
     int i;
     int key;
     for(j=1; j &lt; n; j++) {
        key = input[j];
        i = j-1;
        while(i &gt;= 0 &amp;&amp; input[i] &gt; key) {
            input[i+1] = input[i];
            i--;
        }
        input[i+1] = key;
     }
}

int main() {
    int i;
    int array[] = {9,8,7,6,4,2};

    insertionsort(&amp;array, 6);
    for (i=0; i&lt;6; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
    system("PAUSE");
    return 0;
}

&lt;/pre&gt;

&lt;p&gt;
Дээрх алгоритм нь массивт байгаа тоонуудыг хоёр дахиас нь эхлэн тоо тус бүрийг өмнөх тоонуудтай нь харицуулан өмнөх тооноосоо бага бол байрыг нь сольж үргэлжлүүлэн итерацаар ажилна.
&lt;/p&gt;
&lt;p&gt;
Хамгийн муугаар бодож байж алгоритмын үнэ цэнийг олж авна. Жишээ нь дээрх “нэмж жагсаах” алгоритмийн хувьд массив дахь тоонууд эсрэгээрээ (ихээсээ багаруу) жагсаагдсан байрлалтай бол n2 үйлдлийн дараа алгоритм ажилаа хийж дуусан байна. Өөрөө хэлбэл O(n2).
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-8639795230218279118?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/8639795230218279118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/insertion-sort-algorithm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8639795230218279118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/8639795230218279118'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/insertion-sort-algorithm.html' title='Insertion Sort Algorithm буюу Нэмж Жагсаах Алгоритм'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-6462440666802717335</id><published>2009-08-07T16:10:00.003+03:00</published><updated>2009-08-10T13:15:40.503+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='код'/><title type='text'>Шугаман хайлт буюу lsearch</title><content type='html'>&lt;p&gt;C хэлний санамжийг яаж ашигладагийг анзаарахын тулд шугаман хайлт буюу lsearch алгоритмыг авч үзье!
Энэ алгоритм нь “генерик” буюу буюу бүхий л өгөгдлийн төрөл дээр ажиллана. (Жишээ нь: int, char, short гэх мэт)&lt;/p&gt;&lt;p&gt;
&lt;pre class="brush: c"&gt;
void * lsearch(void * key, void * base, int n, int elemSize,
                int (* cmpfn)(void *, void *))
{
    int i;
    for(i=0; i &lt; n; i++) {
        void * elemAddr = (char *)base + i*elemSize;
        if(cmpfn(key, elemAddr) == 0)
            return elemAddr;
    }
    return NULL;
}
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Дээрх функц нь доорх 5 параметрийг авч байна:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;key – хайх түлхүүр &lt;li&gt;base – санамжинд хайж эхлэх хаяг &lt;li&gt;n – санамжин дахь хайх урт &lt;li&gt;elemSize – элементийн хэмжээ &lt;li&gt;cmpfn – тэнцүү эсэхийг шалгах функцийн прототип &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Зарчмын хувьд энэхүү алгоритм нь компьютерийн санамж буюу RAM дээрх нэгэн байршилаас (void * base) эхлэн тус бүр өгөгдсөн ижил урттай (int elemSize) тодорхой тооны (int n) элемент дунд нэг обьект (void * key) байгаа эсэхийг шалгана.
6-р мөрөнд void * elemAddr=(char *)base + i*elemSize; гэж зааснаар base-ийн зааж буй нэг byte мэдээллээс хойш i*elemSize алхам хойно гэсэн утга заажээ.&lt;/p&gt;&lt;p&gt;Харин өгөгдсөн элементүүдийн төрөлөөс шалтгаалан тэнцүү эсэхийг шалгах функц нь өөр өөр байж болох учир функцийн прототипийг зааж өгсөн (int (* cmpfn)(void *, void *)) байгаа ба алгоритмийг хэрэглэгч өөрөө тэр функцыг тодорхойлох хэрэгтэй.
Жишээ нь өгөгдсөн массив дотор тодорхой нэгэн тоо байгаа эсэхийг шалгах програм бичье.

&lt;pre class="brush: c"&gt;
int IntCmp(void * elem1, void * elem2) { 
    int *ip1 = elem1; 
    int *ip2 = elem2; 
    return *ip1-*ip2; 
} 

int main(int argc, char * argv[]) { 
    int array[] = {4,2,3,7,11,6}; 
    int size = 6; 
    int number = 7; 

    void * found = lsearch(&amp;amp;number, array, size, sizeof(int), IntCmp); 

    if (found == NULL) 
        printf("Not found!\n"); 
    else
        printf("Found.\n"); 

    system("PAUSE"); 
    return 0; 
}
&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-6462440666802717335?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/6462440666802717335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/lsearch.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/6462440666802717335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/6462440666802717335'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/lsearch.html' title='Шугаман хайлт буюу lsearch'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-4365708012826954906</id><published>2009-08-07T15:56:00.001+03:00</published><updated>2009-08-07T15:58:57.845+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cliche'/><title type='text'>Cliché</title><content type='html'>Ихэвчлэн алгоритм бичихэд хэрэг болдог өгөгдлийн бүтцүүд байдаг. Жишээ нь: stack, queue, heap гэх мэтчилэн.

Яг хэрэг болохоор зарчмыг нь санаад кодыг нь санадаггүй, эсвэл ахиж бичих хэрэгтэй болчихоод байхын энэ болон бусад хэрэгтэй кодуудын өөрт хэрэгтэй санагдсаныг нь эмхлээд хадгалаад байя гэж бодлоо.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-4365708012826954906?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/4365708012826954906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/cliche.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/4365708012826954906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/4365708012826954906'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/08/cliche.html' title='Cliché'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-7041878005852947287</id><published>2009-07-19T13:53:00.010+03:00</published><updated>2009-08-11T16:42:27.265+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python програмын хэл</title><content type='html'>Python их таалагдлаа. Python нь функсионел ч, обьект хандлагат ч аль альнаар нь хэрэглэгдэж болдог. “Мад шалгах” (&lt;a href="http://icpcres.ecs.baylor.edu/onlinejudge/external/101/10196.html" target="_blank"&gt;“Check the Check” problem&lt;/a&gt;) бодлогыг бодсон кодоо толилуулья:


&lt;pre class="brush: py"&gt;

import sys

#шатрын хөлгийг оруул
fin = open(sys.argv[1], "r") #аргумент дээр зааж өгсөн файлыг унш
lineList = fin.readlines()
fin.close()

#үндсэн код
i = 0
count = 1
matrix = []

for line in lineList:
  if line == '\n': #хоосон мөр байвал
     checkBlack = check(matrix,x,y,0) #хар ноён мадлагдсан эсэх
     checkWhite = check(matrix,x1,y1,1) #цагаан ноён мадлагдсан эсэх
     if checkWhite == True and checkBlack == True:
         print("Тоглоом# " + str(count) + ": Хоёр ноён мадлагдсан.");
     elif checkWhite == True and checkBlack == False:
         print("Тоглоом# " + str(count) + ": Цагаан ноён мадлагдсан.");
     elif checkWhite == False and checkBlack == True:
         print("Тоглоом# " + str(count) + ": Хар ноён мадлагдсан.");
     else: print("Тоглоом# " + str(count) + ": Аль нь мадлагдаагүй.");
     i = 0
     count = count+1
     matrix = []
  else: #хоосон мөр биш бол матрикст нэм
     matrix.append(line)
     if str.find(line, 'k') != -1: #хар ноён байвал байршлыг тогтоо
         x = i
         y = str.find(line, 'k')
     if str.find(line, 'K') != -1: #цагаан ноён байвал байршлыг тогтоо
         x1 = i
         y1 = str.find(line, 'K')
     i = i + 1
&lt;/pre&gt;
Дээрх кодонд check гээд нэг функц байна. Үүрэг нь ноёны мадлагдсан эсэх. Код нь:

&lt;pre class="brush: py"&gt;
toys = ['p','n','b','r','q','k','P','N','B','R','Q','K']

def contains(toys, item):
    i = 0
    while i &lt; 12:
        if toys[i] == item: return True
        i = i+1
    return False

def check(matrix,x,y,n): # n=1: цагаан, n=0: хар

    if n==0: index = 6
    else: index = 0

    p = toys[index+0]
    n = toys[index+1]
    b = toys[index+2]
    r = toys[index+3]
    q = toys[index+4]
    k = toys[index+5]

    # бэрсийн хөл дээр шалгах
    if x+2 &lt;= 7:
        if y-1 &gt;= 0 and matrix[x+2][y-1] == n: return True
        if y+1 &lt;= 7 and matrix[x+2][y+1] == n: return True
    if x+1 &lt;= 7:
        if y-2 &gt;= 0 and matrix[x+1][y-2] == n: return True
        if y+2 &lt;= 7 and matrix[x+1][y+2] == n: return True

    # хүү болон ноёны хөл дээр эсэхийг шалгах - диагонал
    if x-1 &gt;= 0 and y+1 &lt;= 7 and (matrix[x-1][y+1] == p or matrix[x-1][y+1] == k): return True;
    if x-1 &gt;= 0 and y-1 &gt;= 0 and (matrix[x-1][y-1] == p or matrix[x-1][y-1] == k): return True;
    if x+1 &lt;= 7 and y+1 &lt;= 7 and (matrix[x+1][y+1] == k): return True;
    if x+1 &lt;= 7 and y-1 &gt;= 0 and (matrix[x+1][y-1] == k): return True;

    # ноёны хөл дээр эсэхийг шалгах
    if x+1 &lt;= 7 and matrix[x+1][y] == k: return True;
    if y+1 &lt;= 7 and matrix[x][y+1] == k: return True;
    if x-1 &gt;= 0 and matrix[x-1][y] == k: return True;
    if y-1 &gt;= 0 and matrix[x][y-1] == k: return True;

    # тэрэг эсвэл бэрсийн хөл дээр эсэхийг шалгах
    toys[index+4] = '*'; # бэрсийг массиваас арилгах
    toys[index+3] = '*'; # тэргийг массиваас арилгах

    i = y+1
    while i &lt;= 7:
        if contains(toys, matrix[x][i]) == True: break;
        elif matrix[x][i] == r or matrix[x][i] == q: return True;
        i = i+1

    i = y-1
    while i &gt;= 0:
        if contains(toys, matrix[x][i]) == True: break;
        elif matrix[x][i] == r or matrix[x][i] == q: return True;
        i = i-1

    i = x+1
    while i &lt;= 7:
        if contains(toys, matrix[i][y]) == True: break;
        elif matrix[i][y] == r or matrix[i][y] == q: return True;
        i = i+1

    i = x-1
    while i &lt;= 7:
        if contains(toys, matrix[i][y]) == True: break;
        elif matrix[i][y] == r or matrix[i][y] == q: return True;
        i = i-1

    toys[index+3] = r; # тэргийг массивт буцааж нэм
    # бэрс болон тэмээний хөл дээр эсэхийг шалгах
    toys[index+2] = '*'; # тэмээг массиваас арилгах

    i = x+1
    j = y+1
    while i &lt;= 7 and j &lt;= 7:
        if contains(toys, matrix[i][j]) == True: break;
        elif matrix[i][j] == b or matrix[i][j] == q: return True;
        i = i+1
        j = j+1

    i = x-1
    j = y-1
    while i &gt;= 0 and j &gt;= 0:
        if contains(toys, matrix[i][j]) == True: break;
        elif matrix[i][j] == b or matrix[i][j] == q: return True;
        i = i-1
        j = j-1

    i = x-1
    j = y+1
    while i &gt;= 0 and j &lt;= 7:
        if contains(toys, matrix[i][j]) == True: break;
        elif matrix[i][j] == b or matrix[i][j] == q: return True;
        i = i-1
        j = j+1

    i = x+1
    j = y-1
    while i &lt;= 7 and j &gt;= 0:
        if contains(toys, matrix[i][j]) == True: break;
        elif matrix[i][j] == b or matrix[i][j] == q: return True;
        i = i+1
        j = j-1

    toys[index+2] = b; # тэмээг массивт буцааж нэм
    toys[index+4] = q; # бэрсийг массивт буцааж нэм
    return False
&lt;/pre&gt;

&lt;h2&gt;Програмын ажиллах горим&lt;/h2&gt;

Дээрх програм нь текст маягаар бичигдсэн шатрын хөлгийг аргументээр авна. Жишээ нь хөлөг доорх маягаар өгөгдсөн байхад:

&lt;pre&gt;
..k.....
ppp.pppp
........
.R...B..
........
........
PPPPPPPP
K.......

rnbqkbnr
pppppppp
........
........
........
........
PPPPPPPP
RNBQKBNR

rnbqk.nr
ppp..ppp
....p...
...p....
.bPP....
.....N..
PP..PPPP
RNBQKB.R

........
........
........
........
........
........
........
........

&lt;/pre&gt;
гаралт нь доорх шиг байна:

&lt;pre&gt;
Тоглоом #1: Хар ноён мадлагдсан.
Тоглоом #2: Аль нь мадлагдаагүй.
Тоглоом #3: Цагаан ноён мадлагдсан.
&lt;/pre&gt;

&lt;h2&gt;Кодыг ажиллуулах&lt;/h2&gt;

Дээрх эх кодыг ажиллуулахдаа Linux дээр Python суулгагдсан бол:

&lt;pre&gt;
$ python ./check.py "input.txt"
&lt;/pre&gt;

гээд л ажиллуулчихна. Харин Windows дээр бол эхлээд binary executable файл үүсгэх хэрэгтэй:

&lt;pre&gt;
&gt;&gt;&gt; import py_compile
&gt;&gt;&gt; py_compile.compile("check.py")
&lt;/pre&gt;

Ингэснээр check.py файлын байгаа хавтаст check.pyc гэсэн executable файл үүсэх болно. Дараа нь Windows cmd prompt дээрээ:

&lt;pre&gt;
check.pyc input.txt
&lt;/pre&gt;

гээд ажиллуулчихна.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-7041878005852947287?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/7041878005852947287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/07/python_19.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/7041878005852947287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/7041878005852947287'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/07/python_19.html' title='Python програмын хэл'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6017707773995652599.post-1870111820585917171</id><published>2009-07-19T12:58:00.000+03:00</published><updated>2009-07-19T13:01:57.656+03:00</updated><title type='text'>Сайн уу, дэлхий</title><content type='html'>Сайн байцгаана уу? Энэ бол энэ блогийн маань printf("Hello, World!"); бичлэг маань. Тэгээд одоо бичээд байна даа.  :D

Уул нь энэхүү блогоо "Хаалган хот" нэрээр Wordpress дээр хөтөлж байснаа Blogspot-д дассанаас болснуу энд бичмээр санагдлаа.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6017707773995652599-1870111820585917171?l=dagvadorj.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dagvadorj.blogspot.com/feeds/1870111820585917171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dagvadorj.blogspot.com/2009/07/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1870111820585917171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6017707773995652599/posts/default/1870111820585917171'/><link rel='alternate' type='text/html' href='http://dagvadorj.blogspot.com/2009/07/blog-post.html' title='Сайн уу, дэлхий'/><author><name>Dagvadorj</name><uri>http://www.blogger.com/profile/03814131120480971593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp1.blogger.com/_gv39U_UEX20/SEWcTpykTHI/AAAAAAAAAA0/_WDSjiT5ySk/S220/adm.jpg'/></author><thr:total>0</thr:total></entry></feed>
