Thursday, December 11, 2014

Octave ашиглах нь (part1)

Octave нь бүх төрлийн математик тооцоололд зориулагдсан дээд түвшний програмчлалын хэл юм. Шугаман болон шугаман бус хамаарал олох, рандом утгуудын олонлог үүсгэх, өгөгдлийн олонлогт шинжилгээ хийх, матриц тай холбоотой үйлдлүүд хийхэд нэн тохиромжтой юм. Ихэнх хүмүүст тухайн үйлдлүүдийг хийхэд тооны машин ᠌᠌"жолдож", програм авахад үнэтэй юм уу нүсэр санагддагийг ажигласан. Тэгвэл октав нь маш авсаархан бөгөөд хүчирхэг хэрэгсэл юм. Гэхдээ програмчлалын хэл учраас эхлээд дүрмийг нь сурах хэрэгтэй. Ялангуяа дээд тоо гэх мэт хичээл үзэж буй оюутнуудад чухал "шипи" болно.

Октавыг дараах сайтнаас хамгийн сүүлийн хувилбарыг татах боломжтой. Октав татах. Нээлттэй эх учраас том давуу талтай. 

Суулгасны дараа 2 янзаар ажиллуулж болно. Өөрийн GUI тай болон Command line хувилбар.

Ерөнхийдөө комманд цонх нь илүү ачаалал даах байх гэж боддог. Аль нь ч байсан октав дээр шууд бичээд ажиллаад явах боломжтой. Мөн бусад програмчлалын хэлүүдтэй адил файлаас комманд ажиллуулах, бичсэн команд болон хариуг файлд хадгалах боломжтой.
Хувьсагч зарлах шаардлагагүй шууд утгаа оноогоод явахад болно. Нэг команд бичигдэх болгонд хэвлэж харуулах ба харахыг хүсэхгүй бол үйлдлийнхээ дараа цэг таслал тавихад болно. 
Дараах дэлгэцнээс хувьсагчтай хэрхэн ажиллахыг харж болно. d нь 1 харьцах 6 хэмжээтэй, A нь 3 2 хэмжээтэй матрицууд байна. X матриц дээр өмнө утга оноосон a болон b хувьсагчуудыг ашиглажээ. Бүх ашиглан хувьсагчуудаа харах бол "whos" (хашилтгүй) коммандыг ашиглана. Мөн бүх хувьсагчуудыг чөлөөлөх устгах бол "clear" командыг ашиглана.













Мөн матрицыг үржүүлэх маш хялбархан. Энгийн * тэмдэгтийг ашиглаад үржүүлж болохуйц матрицуудын үржвэрийг гаргана. Дараах зурганд өмнө нь ашигласан X матрицыг шинээр үүсгэсэн 2x2 Y матрицаар үржүүлж байна. Түүнчлэн янз бүрийн логик үйлдлүүдийг ашиглах боломжтой.
1 == 1 гэвэл үнэн буюу 1 ийг буцаана.
1 ~= 1 нь тэнцэхгүй гэдэг нь худал
&& - AND
|| - OR
xor( a , b) - XOR
<=, >=, <, > гэх мэтээр ашиглана.







Мөн янз бүрийн матрицыг үүсгэх боломжтой. Жишээ eye нь диагноль матриц үүсгэнэ. Санамсаргүй тоо үүсгэх бол гаnd функцыг ашиглана. Дараах жишээнд 3 харьцах 3 хэмжээтэй санамсаргүй тоон матриц үүсгэж байна. randn функцыг ашигласнаар Гауссын санамсаргүй тоонуудыг үүсгэнэ. Мөн янз бүрийн хэлбэрт оруулж болно.

Жишээ нь Машин сургалттай ч юм уу, Өгөгдлийн олборлолт хийх шинэ програмаа туршиж үзэхэд дата олдохгүй байгаа гэж үзье. Сурагчдын дүнгийн хамаарлын олонлог үүсгэе.

dun = 75 + sqrt(9.5) * (randn(1, 10000));

дундаж дүн 75 тай олонлог үүсгээд гистограм аар харвал дараах байдалтай харагдаж байна.



гистограм гаргахдаа hist(dun,60) функцыг ашигласан. 60 нь нарийвчлал буюу 60 бүлгээр харж байна.
Энэхүү үүсгэх функцуудыг янз бүрийн програмчлалд ашиглаж болно. Тоглоомын баатрууд, тоглоомын объектууд, Сугалаа, Систем тестлэх болон хичээл дээрээ шипи байдлаар ч ашиглаж болох юм. 

Wednesday, September 24, 2014

Mongolian name application

Монгол нэрийн толийг өнгөрсөн нэг сарын хугацаанд хөгжүүллээ. Энэхүү гар утасны апп нь оруулсан латин болон кирил үсгээр бичсэн нэрийг Монгол бичиг рүү хөрвүүлэх боломжтой байх юм. Зөвхөн оноосон нэрийг хөрвүүлэх ба монгол бичгийн толь биш юм. За тэгээд хөрвүүлсэн нэрийнхээ зургийг хадгалах, өөр апп аар хуваалцах боломжтой байна. Энэхүү апп ыг хөгжүүлэхэд Болорсофт, МУИС ын Алтай судлалын тэнхимийн хөгжүүлсэн оноосон нэрийн баазыг ашигласан.

Дизайн нь дараах байдалтай байхаар зохиомжиллоо. Одоо кодынхоо зарим нэг алдааг засаад гүүгл плей дээр тавих болно.



Жич: Монгол нэртэй бол Монгол үсгээрээ хайхыг зөвлөж байна. Жишээ нь хайхдаа BAT биш  ‍БАТ гэж хайна уу. Харин латин нэрийг дуудлагын дагуу хайвал илүү зохимжтой

Tuesday, August 19, 2014

Дэлгэцийн харьцааг алдагдуулахгүйгээр харуулах нь

Хэд хоногийн өмнө ажил дээр хийж байгаа төсөлд маань төхөөрөмжийн дэлгэцийн хэмжээ өөрчлөгдсөн ч үзүүлэнгийн харьцаа алдагдахгүй байх даалгавар тулгарлаа. Энэ ажил вебд суурилсан үзүүлэн (presentation) бэлдэх програм бөгөөд гар утсан дээр мөн ажиллах ёстой. Дэлгэцийн хэмжээ өөрчлөгдсөн ч үзүүлэнгийн хуудсанд байх контентууд энд тэнд орохгүй томорч жижгэрэхгүй байх ёстой.

1. Арга нь pure css буюу цэвэр css ээр шийдэж болох ба гарах асуудал нь эмбэд датанууд‍(embed) дээр тус бүрчлэн css бичих шаардлагатай. Мөн урт өргөн нь хатуугаар заагдсан объектыг (Жишээ нь видео, флаш) харуулахад асуудал тулгарна.

2. Хоёр дахь арга нь zoom буюу scale хийх javascript бичих. Үүнийг хэрэгжүүлэхийн тулд wrapper div объект нь хатуугаар заагдсан байх ёстой. Түүний доторх объектууд нь хатуугаар заагдсан ба дэлгэцийн хэмжээ өөрчлөгдөхөд урт өргөн өөрчлөгдөхгүй бидэнд харагдах хэсэг өөрчлөгдөнө гэсэн үг.

Миний хувьд хоёр дахь аргыг хэрэгжүүлсэн. Хэрэгжүүлэхийн тулд html ийнхээ бүтцийг тэр чигээр нь өөрчлөх шаардлагатай боллоо. Програм хангамжийн архитектур гэдэг үг толгой руу буух нь тэр.

jquery ашиглавал илүү амархан бичигдэх боловч ангулар жаваскрипт ашиглаж байгаа болохоор ямар нэгэн сан ашиглалгүй зөвхөн ангуларын дэлгэц өөрчлөгдөх эвэнтэд бичлээ.

javascript хэсэг

app.directive('resize', ['$window', function($window) {
   return {
    link: function(scope, elem, attrs) {
     scope.onResize = function() {
      var page = document.getElementById('pages');
      var wWidth = $window.innerWidth;
      
      var pWidth = page.offsetWidth;
      var wHeight = $window.innerHeight;
      var pHeight = page.offsetHeight;
      if((pHeight/sHeight)  > (pWidth/sWidth)) 
       var m = sHeight / pHeight;
      else 
       var m = sWidth / pWidth;
   
      var cols = document.getElementsByClassName('page');
       for(i=0; i < cols.length="" angular.element="" bind="" cols="" function="" i="" m="" moz-transform="" pre="" resize="" scale="" scope.onresize="" style.zoom="m;" window="">}
}
     scope.onResize();

     angular.element($window).bind('resize', function() {
      scope.onResize();
     })
    }
   }
  }])

css хэсэг

.wrapper {
   margin: auto;
   width: 960px;
   height: 720px;

  }

Ашиглахдаа

Tuesday, April 8, 2014

Java EE7 прожект (Нэг олон холбоос DropBox гаргах асуудал)

Өгөгдлийн санд бүртгэхийн тулд хөрвүүлэх классыг үүсгэж өгөх шаардлагатай байдаг юм байна. Жишээ нь нэг сурагчийн ямар ангид сурдаг болохыг DropBox оос сонгуулж бүртгэхэд enterprise bean дээр асуудал гардаг. Энэ тохиолдолд нэг олон холбоос харгалзан анги сурагч болно. Ихэвчлэн parameter хүснэгтийн утгуудаас сонгож бүртгэл хөтлөхөд тулгардаг асуудал юм.

Манай тохиолдолд SelectOne буюу DropBox бүхий талбарыг өгөгдлийн сангаас уншиж бүрдүүлсэн бөгөөд бүртгэхэд харагдах мэдээллийг хөрвүүлэх шаардлагатай юм байна. Ингэхийн тулд өгөгдлийн сангаас харуулах сонголтын хэсэг тус бүрт java Converter хэрэгжүүлэх классыг үүсгэнэ. Session bean үүсгэсэн тохиолдолд дараах байдалтай байна.

//энэхүү нэрийг ашиглан face буюу page дээр ашиглах боломжтой
@FacesConverter(value="converterName")
public class PositionDegreeConverter implements Converter {

    @EJB
    private yourEntityFacadeLocal yourFacade;
    
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value){
        try{
              //хөрвүүлэх төрлөөс хамаарч Integer юм уу String байж болно
            Object result = yourfacade.find(new Integer(value));
            return result;
        }
        
        catch(Exception ex){
            System.out.println(ex.toString());
        }
        return null;
    }
    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value){
        try{
            yourEntityBean ybean = (yourEntityBean) value;
            return String.valueOf(ybean.getYourBeanMethodId());
        }
        catch(Exception ex){
            System.out.println(ex.getMessage());
        }
        return null;
    }
}

Үүнийг selectOne буюу dropbox ийн тагт дараах байдалтай оруулна.


  
                          
                         
                        
 

Friday, April 4, 2014

Glassfish сервер болон UTF 8 encode

Тэгэхээр глассфиш серверийн үндсэн encode нь ISO-8859-1 байдгийг мэдсэн биз ээ. Oracle GlassFish Server 3.0.1 Application Development Guide. Тэгвэл ихэнх хөгжүүлэгчид ялангуяа монгол хөгжүүлэгчид үргэлж UTF-8 encode ашиглах шаардлага гардаг.

Шийдэх арга нь: Серверийн тодорхойлогч буюу descriptor файлыг үүсгэх хэрэгтэй. Жишээ нь Netbeans 8 IDE дээр прожектдоо шинэ файл New -> Other -> Glassfish -> Glassfish descriptor үүсгэнэ. sun-web.xml юм уу glassfish-web.xml үүсэх ёстой ба XML edit хэсэгт parameter-encoding таг нэмэхэд хангалттай.

Дараах байдалтай харагдана

  
   
   
    
    
     
    Keep a copy of the generated servlet class' java code.  
     
    
    
    
  

Wednesday, April 2, 2014

JDBC glassfish

Өнөөдөр хуучин Netbeans 7,2 дээрх Java EE6 прожектоо Java EE7 болголоо. Өмнө нь ажиллаж байсан сервер glassfish 3.1.2 т Connection pool болон JDBC Resource ийг автоматаар үүсгэж байсан бол дараагийн хувилбар болох glassfish 4 open source edition д тийм боломж байдаггүй бололтой. Ямартай ч миний тохиолдолд. Ингээд Connection пүүл болон JNDI гаа Admin хэсгээс үүсгэх боллоо. Хамгийн гол асуудал нь org.postgresql.ds.PGSimpleDataSource классыг танихгүй Ping хийж чадахгүй байсан юм. Интернэтэд энэ асуудалтай холбоотой олон асуулт бас шийдэх олон аргууд байдаг юм байна. Харин хамгийн хялбар арга нь тухайн сангийнхаа JDBC driver ийг хуулж тавих юм. Жишээ нь PostgreSQL ашиглаж байгаа бол http://jdbc.postgresql.org/download.html энэ хаягаас сангаа авч болохнээ. Эсвэл jdbc.jar ийг өөрийнхөө Глассфиш ийн хавтсанд хуулж болох юм байна. Гэхдээ яг хэрэглэж буй өгөгдлийн сангийнхаа холболтын driver аа сонгохыг зөвлөж байна