Thursday, December 22, 2011

Links for Ruby on Rails

1)    Хороший туторіал для знайомства з Ruby on Rails
       "Ruby on Rails Tutorial Изучение Rails на Примерах Майкл Хартл"
2)    Доступно і внятно, можна ще й попитати якщо дуже хочеться
       "Ruby on Rails по русски"

Thursday, December 8, 2011

Консоль ZF

Створення проекту:
zf create project <name_project>

Створити форму,контролер, вигляд чи модель
zf create form|model|view|controller <name_form>

Створює каталог application/layouts/scripts і поміщує в нього layout.phtml, а також обновляє application.ini добавляючи в секцію [production] 
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
zf enable layout

Хочете більше тоді пишете в консолі # zf -h, але на багато сподіватись не варто, вашу роботу ніяка консоль за вас не зробить і звідси моя вам порада - те що навіть я тут написав, краще виконувати руками))

Замітки по Linux

Для того щоб визначити який процес знаходиться на конкретному порті можна виконати наступну команду:
lsof -i :<номер порат>

Для завершення процесу можна використати:
kill -9 <номер PID>

Якщо ви щось установлюєте, а система вам каже що немає чим скомпілювати, або просто в лог файлі все стопориться в g++ і дальше error, то можливо вам потрібно саме це:
sudo apt-get install g++
sudo apt-get install build-essential



permission
R = 4
W = 2
X = 1


sudo chsh -s /bin/zsh <username> - щоб поміняти шел для користувача

Пригоди ROR + MySql

Ящо в вас при виконанні команди "# bundle install" вискакує подібне повідомлення
...
...
Gem files will remain installed in /var/lib/gems/1.8/gems/sqlite3-1.3.5 for inspection.
Results logged to /var/lib/gems/1.8/gems/sqlite3-1.3.5/ext/sqlite3/gem_make.out
An error occured while installing sqlite3 (1.3.5), and Bundler cannot continue.
Make sure that `gem install sqlite3 -v '1.3.5'` succeeds before bundling.

то це означає що не все в гаразд з драйверами для БД, чи то mysql чи то sqlite3 немає різниці, помилка всерівно буде подібною). Інтересне те що  # gem install sqlite3 -v '1.3.5'  нічим не допоможе, хоча і буде показувати що все встановлює. Для того щоб позбавитись цієї помилки для драйвера mysql потрібно поставити наступний пакетик "libmysqlclient-dev", робиться це так:
sudo apt-get install libmysqlclient-dev

і відповідно:
# gem install sqlite3 -v '1.3.5'
# bundle install

Для інших БД майже те саме))

Ставимо Ruby та RoR

Як постaвити рубі? Відповідь на це питання я думаю ви уже знайшли, а якщо ні то це робиться так:
# sudo apt-get install ruby

При установці рубі разом з ним ставиться ще і gem! Для того щоб поставити останню версію RoR потрібно скористатись саме ним. Робиться це так:
# sudo gem install rails

можна ще вказати версію добавивши "-v=3.1.3". Ящо після цього ви введете
# rails -v

то побачите версію RoR, але якщо ви поставили рельси з репозиторія то версія не буде останньою, в мене це була версія 2.5.4). Особисто мені не підійшла версія з репозиторію по тій причині що команда "# rails server" не виконувалась і не запускала мій проект, а створювала новий з назвою "server". Нагадаю що в версії 3.0.0 така команда вже доступна і для створення нового проекту потрібно написати так "# rails new my_project".
Після того як я видалив RoR із репозиторія, захотівши подивитись версію я отримав відповідь про те що система незнає що таке "rails" хоча нова версія вже була поставлена з допомогою гема. Переустановка результату не дала, але пізніше я зрозумів що RoR є за наступною адресою "/lib/gems/1.8/bin/rails" якраз сюди його і кидав gem. Для того щоб рельси стали доступними ми можемо зробити символьний лінк на потрібний файл ось так:
# sudo ln -s /var/lib/gems/1.8/bin/rails /usr/bin/rails,

Friday, December 2, 2011

Java і сокети

Приклад реалізації серверної частини:

import java.io.*;
import java.net.*;
public class Provider{
  ServerSocket providerSocket;
  Socket connection = null;
  ObjectOutputStream out;
  ObjectInputStream in;
  String message;
  Provider(){}
  void run()
  {
    try{
      //1. creating a server socket
      providerSocket = new ServerSocket(2004, 10);
      //2. Wait for connection
      System.out.println("Waiting for connection");
      connection = providerSocket.accept();
      System.out.println("Connection received from " + connection.getInetAddress().getHostName());
      //3. get Input and Output streams
      out = new ObjectOutputStream(connection.getOutputStream());
      out.flush();
      in = new ObjectInputStream(connection.getInputStream());
      sendMessage("Connection successful");
      //4. The two parts communicate via the input and output streams
      do{
        try{
          message = (String)in.readObject();
          System.out.println("client>" + message);
          if (message.equals("bye"))
            sendMessage("bye");
        }
        catch(ClassNotFoundException classnot){
          System.err.println("Data received in unknown format");
        }
      }while(!message.equals("bye"));
    }
    catch(IOException ioException){
      ioException.printStackTrace();
    }
    finally{

      //4: Closing connection
      try{
        in.close();
        out.close();
        providerSocket.close();
      }
      catch(IOException ioException){
        ioException.printStackTrace();
      }
    }
  }
  void sendMessage(String msg)
  {
    try{
      out.writeObject(msg);
      out.flush();
      System.out.println("server>" + msg);
    }
    catch(IOException ioException){
      ioException.printStackTrace();
    }
  }
  public static void main(String args[])
  {
    Provider server = new Provider();
    while(true){
      server.run();
    }
  }
}

Відповідно для нього приклад клієнтської частини:

import java.io.*;
import java.net.*;
public class Requester{
  Socket requestSocket;
  ObjectOutputStream out;
  ObjectInputStream in;
  String message;
  Requester(){}
  void run()
  {
    try{
      //1. creating a socket to connect to the server
      requestSocket = new Socket("localhost", 2004);
      System.out.println("Connected to localhost in port 2004");
      //2. get Input and Output streams
      out = new ObjectOutputStream(requestSocket.getOutputStream());
      out.flush();
      in = new ObjectInputStream(requestSocket.getInputStream());
      //3: Communicating with the server
      do{
        try{
          message = (String)in.readObject();
          System.out.println("server>" + message);
          sendMessage("Hi my server");
          message = "bye";
          sendMessage(message);
        }
        catch(ClassNotFoundException classNot){
          System.err.println("data received in unknown format");
        }
      }while(!message.equals("bye"));
    }
    catch(UnknownHostException unknownHost){
      System.err.println("You are trying to connect to an unknown host!");
    }
    catch(IOException ioException){
      ioException.printStackTrace();
    }
    finally{
      //4: Closing connection
      try{
        in.close();
        out.close();
        requestSocket.close();
      }
      catch(IOException ioException){
        ioException.printStackTrace();
      }
    }
  }
  void sendMessage(String msg)
  {
    try{
      out.writeObject(msg);
      out.flush();
      System.out.println("client>" + msg);
    }
    catch(IOException ioException){
      ioException.printStackTrace();
    }
  }
  public static void main(String args[])
  {
    Requester client = new Requester();
    client.run();
  }
}

Java і DB


Щоб мати можливість працювати з базою даних в Java потрібно знайти потрібний коннектор для вашої бази данх, після того як ви скачаєте конектор в моєму випадку це був "mysql-connector-java-5.1.18-bin.jar" ви маєте зробити його доступним для вашої майбутньої програми.
Дальше можна створити такий простенький клас:
import java.io.*;
import java.sql.*;
  public class Database
  {
    Connection conn = null;
    String userName;
    String password;
    String url;
   
    public Database (String host, String user, String pass, String database)
    {

    try {
     userName = user;
     password = pass;
     url = "jdbc:mysql://" + host + "/" + database;
     Class.forName("com.mysql.jdbc.Driver").newInstance();
     conn = DriverManager.getConnection(url, userName, password);
     System.out.println("Database connection established");
   }
   catch (Exception e) {
     System.err.println ("Cannot connect to database");
     e.printStackTrace();
   }
 }

 public Connection getConnection()
 {
   return conn;
 }
 public void closeConnection()
 {
   try {
     conn.close ();
   }catch (Exception e) {}
 }
}