пʼятницю, 31 жовтня 2014 р.

Важливість базових знань



Чим більше вивчаєш, тим більше розумієш, що якщо спочатку щось не зрозумів, вірніше, якщо не засвоїв базові (основні, елементарні) знання з певної галузі, то згодом це може становити значну проблему у розумінні складнішого матеріалу. Так, для прикладу візьмемо, програмування і Java. Якщо ти не освоїв базові концепції об'єктно-орієнтованого програмування і те як це все реалізовано в Java (так зване Java Core) до найменших деталей, то рух дальше буде важкий.  Переважно з таких програмістів стають так звані "бидлокодери", які просто ліплять куски коду докупи до кінця не розуміючи, що кожен рядок коду означає. До певних пір це працює, але лише до певних. Крім того після таких людей розібрати код просто нереально. Що правда через цей етап мабуть проходять усі спочатку:), оскільки, часто, щоб зрозуміти щось, потрібно спробувати хоч щось запрограмувати і пройтися дальше в матеріалі, а згодом повернутися.

Те ж саме стосується математики, якщо добре не освоїти шкільної математики, то в університеті максимум що зможеш, то автоматично застосовувати формули по якомусь накатаному алгоритму. Проте, коли поставити якусь задачу по обробці конкретних даних експерименту, то може бути повний тупик, або ж неправильне застосування певних методів і т.п. Цим грішать багато наукових досліджень. Зокрема, доволі мало людей має хороше уявлення про елементарні речі, які давно знають деякі статисти: в біології, медицині, психології і у всьому що пов'язано з людьми і живими організмами, не можна покладатися на окремі випадки і спостереження. А ще крім того, людський мозок часто забуває певні нюанси і те що не використовується довго і все це потрібно повторювати, якщо не хочеш забути.

середу, 29 жовтня 2014 р.

Освоюємо Java: Цикл For (відеоурок)

 
У відеоуроці: 
види циклів у Java, класичний цикл For та покращений цикл for (for each), 
вивід елементів масиву, безкінечний цикл, інструкція break у циклі for

Інші відеоуроки: тут
Все стосовно Java: тут

четвер, 16 жовтня 2014 р.

Для чого освіта?

Цікаві дані, які я зустрів в книзі "Статистика для Чайников". Книга хороша для початківців, але в російському перекладі є проблема із шрифтами: грецькі букви не були добре надруковані, що дещо унеможливлює нормальне читання тих частин тексту, де ідеться про формули з грецькими літерами. Щоправда формули там не такі вже й важливі, переважно елементарні і їх доволі мало. Мене вона зацікавила передусім цікавим викладом матеріалів та великою кількістю ілюстрацій. Ось один з цікавих графіків про залежність зарплати в США від рівня освіти.
Як видно з графіка, що чим кращий рівень освіти тим вища зарплата. Щоправда, не забуваємо, що це все в середньому. Цілком може людина без вищої освіти, при певних здібностях і відповідному характеру заробляти набагато більше ніж більшість людей з вищою освітою. Проте в середньому чим краща освіта тим більше ви можете заробляти. На тим кращі посади та зарплати ви можете претендувати із меншою кількістю зусиль ніж люди з нижчим рівнем освіти. Навіть якщо людина лише протирала штани в інституті, усе рівно щось та відкладалось в голові, як мінімум в неї більший кругозір. Звичайно диплом не гарантує успіху, але це хороший старт. Усе решта залежить від реальних знань, персональних якостей та цілей в житті.

вівторок, 9 вересня 2014 р.

Патерн «Фабрика»

Вирізка із книги "GoF Design Patterns - with examples using Java and UML2" by: Benneth Christiansson (Ed.) Mattias Forss, Ivar Hagen, Kent Hansson, Johan Jonasson, Mattias Jonasson, Fredrik Lott, Sara Olsson, and Thomas Rosevall. License: Creative Commons Attribution-ShareAlike 3.0 License.

Визначення
Патерн Фабрика (Factory Pattern) надає шлях використання екземпляру як об’єктну фабрику. Фабрика може повертати екземпляр одного з декількох можливих класів (у ієрархії класів), в залежності від заданих даних.

Де використовується:
  • Коли клас не може передбачити, який об’єкт, якого класу потрібно створити
  • Ви хочете вказати, екземпляр якого клас хочете створити
  • Коли ви маєте класи, які походять від одних і тих же класів, або ж класи, які ділять один інтерфейс.  Тобто, методи у екземплярів цих класів одні і ті ж самі і можуть використовуватися взаємозамінно.  
  • Коли ви хочете ізолювати клієнта від актуального типу, що ініціалізується.

середу, 27 серпня 2014 р.

Отримуємо шлях до файлу в кирилиці

Є виконуваний jar файл, поряд з ним у каталозі є підкаталог у якому є файл help.txt. Необхідно запустити jar файл і при виборі із меню пункту "Help" запустити файл help.txt.

Тож все це робиться так:
File currentJavaJarFile = new File
     (Test.class.getProtectionDomain()
     .getCodeSource().getLocation().getPath());
String path=currentJavaJarFile.getParent();
String comand="notepad.exe " + path+"\\Resources\\help.txt";
Runtime.getRuntime().exec(comand);

Проте як виявлось усе працює правильно, якщо шлях до файлу латинськими літерами. Як тільки у шляху з'являється кирилиця, видає помилку знаходження файлу.

Отримати правильно шлях допоможе UrlDecoder:
currentJavaJarFile=new File(java.net.URLDecoder.decode(
            (Test.class.getProtectionDomain().getCodeSource()
            .getLocation().getPath()).toString() ,
            "UTF-8"));




get path with cyrillic

вівторок, 26 серпня 2014 р.

Вибір подальшого шляху (MindMap)

Написанню даної замітки посприяла стаття "Роздоріжжя навколо нас".

Постійно приходиться нагадувати собі що головне, а що другорядне. Хочеться багато чого освоїти, проте реально приходиться зосереджуватися на найбільш актуальному і потрібному для себе в даний час. Вирішив якось промалювати свою інтелект карту в яких напрямках рухатись дальше. В результаті вирішив що краще розділити на декілька невеличких, але основних. У мене вийшло аж 4 основні інтелект карти: Англійська, Математика, Програмування, Java (як підкарта програмування). У перших трьох розгалужень не так і багато, а ось Java вийшла доволі розкішна:) Постарався представити те що я освоїв, але ще варто закріпити знання, або уже почав освоювати, або збираюсь освоїти найближчим, або ж просто є велике бажання в майбутньому освоїти (як то Android SDK). Результат того, що накидав десь за хвилин 20-ть:

Java - My Mind Map

Можна звичайно деталізувати безкінечно, так у Java EE багато цікавого чого хотілось б освоїти, але поки що зобразив як на мене основне.

середу, 13 серпня 2014 р.

Як показати діалог "зберегти" з допомогою JFileChooser

Як показати діалог "зберегти" з допомогою JFileChooser

Якщо вашій програмі потрібно зручно вказати положення файлу, папки або ж місцезбереження файлу, то для цих цілей Swing надає клас javax.swing.JFileChooser. Виклик діалогу збереження файлу схожого на той що використовується у віндовз, здійснюється через метод showSaveDialog():

  public int showSaveDialog(Component parent)

Де parent - це батьківський компонент діалогу, переважно JFrame. Коли користувач введе ім'я файлу і натисне ОК або Cancel, метод повертає одне з наступних значень:

   
   JFileChooser.CANCEL_OPTION // користувач відмінив вибір файлу
   JFileChooser.APPROVE_OPTION // користува здійснив вибір файлу
   FileChooser.ERROR_OPTION // якщо користувач закрив вікно
                            // кнопкою закриття Х.

Після того як користувач здійснив свій вибір, ми можемо використати метод getSelectedFile() щоб взяти нам об'єкт файлу:

    File getSelectedFile()

Перед викликом методу showSaveDialog(),  ви можливо захочете встановити деякі опції для діалогу:
  
    setDialogTitle(String) // встановлює заголовок вікна.
    setCurrentDirectory(File) // встановити директорію для збереження

Приклад коду:

// батьківський компонет діалогового вікна
JFrame parentFrame = new JFrame();
 
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Вкажіть як зберегти файл");   
 
int userSelection = fileChooser.showSaveDialog(parentFrame);
 
if (userSelection == JFileChooser.APPROVE_OPTION) {
    File fileToSave = fileChooser.getSelectedFile();
    System.out.println("Зберегти як: " + fileToSave.getAbsolutePath());
}

Можна встановити фільтр для задання розширень файлу:

 
FileNameExtensionFilter filter = 
                      new FileNameExtensionFilter("csv файл","csv");
fileChooser.setFileFilter(filter);

Вікно може виглядати так:


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

 При написанні було використано матеріали із codejava.net