Tuesday, December 27, 2011

База ресурсів)

  1. Html and Jquery playe - аудіо та відео плеєр
  2. Scroll bar - забезпечить прикольний скролінг як для роліка так і для тачскріна

Share links Twitter and Facebook

Для того щоб розшарити лінк в твітер достатньо написати так:
https://twitter.com/share?url=<потрібний урл>&via=<профіль користувача до якого належить лінк>

виглядати буде так: "http://URL с помощью @profile" профіль можна опустити і залишиться тільки урл. Для фесбуку вигляд такий:
https://www.facebook.com/sharer.php?u=<потрібний урл>

по замовчуванню буде взято фонове зображення і тайтл сайту, але їх можна задати власноруч користуючись мета тегами:
<meta property="og:title" content="Тайтл" />
<meta property="og:description" content="Опис" />
<meta property="og:image" content="Зображення" />

Для більш детального огляду тегів стосовно фб тут, для розгляду розшарювання на інші ресурси можливо вам згодиться це посилання!
Також можливий прикол коли мета теги задані, а реакції немає, для того щоб перевірити чи фейсбук отримав нашу сторінку і теги в цілосні і справності користуємось цим лінком! Зверніть увагу ще на те, що фейсбук кешує дані по разшарюваному лінку))

Sunday, December 25, 2011

Відновлення Grub

Да, Да, Да!
Знаю! Всі одним голосом кажуть шо в гуглі тони такого добра! Да тони, я бачив!
Але замість LiveCD я б радив загружатись з допомогою SuperGrub.
І плюс ось цей лінк! А то в мене після багатьох спроб просто запускалась консоль Grub> )))

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) {}
 }
}


Wednesday, November 30, 2011

Java UI in Eclipse

"Develop Java graphical user interfaces in minutes for Swing, SWT, RCP, XWT and GWT with WindowBuilder Pro’s WYSIWYG, drag-and-drop interface. Use wizards, editors and intelligent layout assist to automatically generate clean Java code, with the visual design and source always in sync." Тут!

Sunday, November 27, 2011

Незапускається Update Manager

Якщо ви добавили якийсь карявий репозиторій через консольку чи щось в тому дусі, що призвело до відмови в запуску Update Manager. То не потрібно падати в відчай, а просто з допомогою пошуку і ключового слова "sources.list" все виправити))
Можливо вам знадобиться цей лінк!

Thursday, November 24, 2011

Корисні кусочки Jquery

$.each( { name: "John", lang: "JS" }, function(i, n){
 alert( "Name: " + i + ", Value: " + n );
});



Результат:
Name: name, Value: John
Name: lang, Value: JS

... was not found in haystack

Повідомлення яке ви бачите в заголовку може з'явитись в тому випадку, якщо ви використовуєте мульті-елементи форми Zend  і вони передають масиви даних. Збудником помилки є валідатор масивів який включений по замовчуванню, виключити його можна ось так: 
$your_form_element->setRegisterInArrayValidator(false);

Замітка по ajax і jquery

Так приблизно виглядає запит ajax для спілкування js із сервером на якому у вас працює скоріш за все php.
 $.ajax({
      url: "необхідні урл",
      data: (необхідні дані),
      success: function(data){
                   обробляємо успішну відповідь
      },
      error: function(msg){
                  обробляємо помилку що виникла
      },
      dataType: "необхідний тип даних",
      type: "МЕТОД ПЕРЕДАЧІ",
});


По заголовку ($.ajax ) зрозуміло що використовується jquery. Про сам ajax і про той же jquery і про них разом можна багато чого почитати користуючись гуглом).
Я хотів тільки привернути увагу до обробки відповідей від сервера, а саме якщо ви використовуєте передачу даних в форматі JSON який вказується в dataType, то не потрібно сподіватись що дані повернуться в якомусь іншому форматі). Записати дані форми найпростіше так: $("#form_name").serialize(). Отримані дані поміщаються в змінну data що передається в функцію в якості аргумента, щоб побачити ці дані вам не вистачить написати alert(data) так як це виведе тільки [object Object] чи щось в тому дусі, отже пишемо alert(JSON.stringify(data)) що і виведе нам всю структуру json об'єкта, що прийшов із сервера. При невдалому опрацюванні запиту буде викликатись функція з error, а в якості аргумента буде передаватись відповідь, та вона на відміну від попереднього випадку не змінюється від типу передачі, і дані з неї можна отримати написавши так: alert(msg.responseText).
І того маємо наступне:
$.ajax({
      url: "mysite.com/mypage",
      data: ($("#form_name").serialize()),
      success: function(data){
                   alert(JSON.stringify(data));
      },
      error: function(msg){
                  alert(msg.responseText);
      },
      dataType: "JSON",
      type: "POST",
});


А ось лінк по даній темі): api.jquery.com/jQuery.ajax

Friday, November 4, 2011

Працюємо з core в magento і залишаємо його буз змін

Із серії тих же заміток для початківців:

Напевно ви вже знаєте що вносити будь які зміни в ядро magento не є хорошим тоном і взагалі неправильним варіантом користування magento оскільки вона передбачає модульність і надає всі можливості для того щоб в ядро не вносити взагалі ніяких поправок.

Для такого типу файлів як блоки все дуже просто, а саме потрібно продублювати їєрархію папок до до тих файлів які ви хочете поміняти або підкорегувати в LOCAL, ну і не забути розмістити в вашій локалній ієрархії самі файли які ви вже змінили, але якщо ви бажаєте щоб і блоки і модулі були не просто продубльовані в локал, а містились в каталозі вашого модуля то потрібно дещо також змінити файл конфігурації і розмістити файли в відповідному місці, але про це згодом тому що контролери мене більше цікавлять на даний момент))

Отже що до такого типу файлів як контролери то тут трохи складніше, оскільки просте дублювання в локал навіть і не розглядається, для мене підійшов наступний метод розширення контролера,  в моєму випадку це був контролера ядра CustomControler, який можна знайти в контролерах Adminhtml.

Thursday, November 3, 2011

Нюанси Magento для початківців (Attribute)

Це перша і сподіваюсь не остання із із серії записок про Magento для початківців:

Припустимо ви добавили атрибут( розгляну на прикладі customer) і наш атрибут добавляється прекрасно в усі необхідні таблички (eav_attribute, customer_eav_attribute), але в мене постало запитання в тому як добавити даний атрибут до конкретного користувача??
я намагався вирішити питання так:


$customer = Mage::getModel('customer/customer')->load($customerId);
$customer->setMyattribute(myvalue);
$customer->save();


але дане рішення не буде ніяк впливати) якщо атрибут ще не є створеним в певній табличці (customer_entity_int, customer_entity_text і т.д.) тобто його ще не було для даного користувача і ніяких даних цей атрибут ще не зберігає. В такому випадку потрібний наступний блок:

$customer = Mage::getModel('customer/customer')->load($customerId);
$customer->setMyattribute(myvalue);
$customer->getResource()->saveAttribute($customer, 'myattribute');


ось цей запис додасть ваш атрибут у відповідну табличку в залежності від типу атрибуту( якщо інт то в табличку атрибутів інт і т.д.)
Після того як наш атрибут вже є доступним, то його можна змінювати і першим методом!


Friday, August 19, 2011

Нюанс .css(jquery) і .style(js)

Це замітка відносно нюанів між методами style в JavaScript і css в JQuery. На даний момент я найшов одну розбіжність, але в подальшому я буду доповнювати дану замітку якщо ще щось знайду.
Отже перша розбіжність це те що .css('background') нічого не поверне на відміну від .style.background який повертає всі значення даного атрибуту до прикладу url() no-repeat і т.д.
Для того щоб отримати дані атрибути з допомогою .css потрібно писати кожний атрибут роздільно, припустимо якщо вам треба дізнатись url() то пишемо .css('background-image').
На цьому і все, продовження буде))

Sunday, August 14, 2011

Глюк Eclipse+PDT на Linux

Можливо не у всіх, але в моєму випадку спостерігалась дивна поведінка екліпса яка виражалась в тому що ніби ні з того ні з сього переставали працювати функціональні клавіші такі як Ctrl+A,S,V,.. Незнаю як кого, а мене такий глюк бісив, а потім десь незамітно все ставало на совї місця. А одного разу я все ж таки зрозумів чого воно так стаєтся, та не треба лякатися бо все набагато простіше ніж я думав, а саме такий баг виклакався тим що коли переводилась мова на російську або українську клавіші змінивше своє призначення переставали виконувати інше функціональне призначення окрім набору літер.
Вирішення просте: переведіть розкладку на USA і буде вам щастя))

Чому не визначається висота елемента з допомогою JS

Це скоріше не стаття а замітка яка стосується визначення висоти елемента з допомогою JavaScript. Всі знають що є багато способів це зробити, а саме з допомогою методу в jQuery .height() або стандартними способами типу .offsetHeight, .clientHeight потрібного елемента також можна отримати дані з CSS відповідного елемента getComputedStyle або currentStyl. Якщо висота елемента є динамічною то її можна визначити першим способом але тільки в тому випадку якщо елемент є видимим!!!
Отже якщо display встановлений в none, то висота такого елемента буде 0, саме на цьому я і хотів наголосити даною заміткою щоб ви не наступали на такі граблі)
Але якщо все ж таки потрібно визначити висоту елемента і прицьму щоб його ніхто не бачив то можна використати такий спосіб:
position: absolute;
left: -9999px;
top: -9999px;

це якщо потрібні якісь ємнісні операції, а інакше можна просто показати елемент, визначити його характеристики і сховати при цьому користувач просто на просто не встигне побачити те що йому і не треба було бачити))


Tuesday, June 7, 2011

Не працює .htaccess

Чому може не працювати .htaccess?
Є декілька причин за яких він може не працювати:
  • система навіть не задумується про те що такий файл є
  • помилки в самому файлі .htaccess
Про те як має виглядати об'єкт дискусії я розказувати не буду адже матеріалу на дану тему вистачає. Я хочу звернути увагу на файли конфігурацій і те що в них має бути аби даний файл виконував своє призначення, а також свій випадок по якому я нічого не знайшов в гуглі.
Поїхали!
Є такий файл як httpd.conf який містять інформацію про конфігурації сервера. Даний файл не є секретний і його можна як завантажити так і найти різні приклади його виконання (гугл рулить). Але для того щоб працював .htaccess потрібно щоб були в даному файлі конфігурації певні пункти.
AccessFileName - ім'я файлу в якому будуть зберігатись команди керування доступу та інші... Має мати наступний вигляд:

AccessFileName .htaccess 

AllowOverride - дана директива може бути встановлена в None, але нам потрібно щоб там було All, також ця директива розміщується в тегах Directory з вказаним шляхом до каталогу вашого веб ресурсу, в моєму випадку це має такий вигляд:
 
 
Blogger Templates