суботу, 3 листопада 2018 р.

Нейронні мережі в R

Із CRAN можна звантажити декілька пакетів реалізацій нейронних мереж на R (nnet, neuralnet, deepnet), крім них доступні пакети в основі яких лежать реалізації на інших мовах. Це такі пакети як MXnet, darch, deepnet, h2o, Keras, TensorFlow.
Простий приклад використання neuralnet:

library("neuralnet")
input<-c(0,1,2,3,4,5,6,7,8,9,10)
output<-c(0,1,4,9,16,25,36,49,64,81,100)
mydata<-cbind.data.frame(input,output)
attach(mydata)
#навчити мережу базуючись на input та output
model=neuralnet(
  formula=output~input,
  data=mydata, #дані
  hidden=10, #кількість нейронів в прихованому шарі
  threshold=0.01 #поріг спрацювання
)
print(model)
#виводимо схему нейронної мережі
plot(model)
#Перевіряємо дані - фактичні та прогнозовані
final_output=cbind(input, output, as.data.frame(model$net.result))
colnames(final_output)=c("Input", "Expected Output", "Neural Net Output")
print (final_output)

Схема виведеної нейронної мережі:

неділю, 28 жовтня 2018 р.

Лінійна регресія в R

Загальний формат для лінійної моделі:
response~op1 term1 op2 term 2 op3 term 3…
де term — об’єкт або послідовність об’єктів, op — оператор, такий як +, -, що вказує як term буде включений у модель. Таблиця нижче включає деякі корисні приклади. Запримітьте, що математичні символи в колонці "Синтаксис" використовуються для визначення моделі, а не в в їхньому нормальному розумінні.

Приймемо, що Y - залежна змінна, A,B,C - незалежні змінні, що можуть впливати на Y. b1,b2, b3 - коефіцієнти моделі, що розраховуються.


Синтаксис
Модель
Коментарі
Y~A
Y=b0+b1A
Пряма лінія із неявно вказаним перетином осі y.
Y~-1+A
Y=b0+b1A+b2A
Пряма лінія без перетину осі y, тобто підігнана лінія проходитиме через (0,0)
Y~A+I(A^2)
Y=b0+b1A+b2A2
Поліномна модель, функція I() – дозволяє в модель включати нормальні математичні символи.
Y~A+B
Y=b0+b1A+b2B
Модель першого порядку, без взаємодії незалежних змінних
Y~A:B
Y=b0+b1AB
Модель, що містить лише взаємодії першого порядку між A та B
Y~A*B
Y=b0+b1A+b2B+b3AB
Повна модель першого порядку, еквівалентний код: Y~A+B+A:B
Y~(A+B+C)^2
Y=b0+b1A+b2B+b3C+b4AB+b5AC+b6AC
Модель, що включає всі явища першого порядку та взаємодії до n-го порядку, де n задається як ()^n. Еквівалентний вираз:
  Y~A*B*C-A:B:C.

Базовий синтаксис для розрахунку моделі в R методом найменших квадратів:
lm(Y~model)
де Y – об’єкт, що містить залежну змінну, що буде прогнозуватися, а model – це формула для вибраної математичної моделі (див. таблицю вище). Одержати сукупну інформацію про модель можна за допомогою функції summary().
mymodel=lm(Y~A)
summary(mymodel)
в результаті буде виведена інформацію про вид моделі та статистичні оцінки моделі.

Перевірити модель на нових даних можна з допомогою функції predict()

Джерело:
* Using R for Linear Regression

вівторок, 17 липня 2018 р.

Дозволи доступу в Android 6 та вище (Android permissions)

В андроїді 6 було переглянуто концепцію надання доступу. Раніше розробник у файлі manifest.xml вказував дозволи на доступ до компонентів мобільного таким чином:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.CAMERA"/>

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

Для отримання дозволу, які класифіковані як небезпечні, необхідно зробити декілька кроків:
1) Перевірити чи раніше не був даний такий доступ
2) Якщо доступ не надано, то запитати користувача
3) Перевизначити метод onRequestPermissionsResult(), який би перевіряв чи користувач прийняв запит чи відхилив і в залежності від того здійснити подальші дії.

Такі дії необхідно виконувати, якщо targetSdkVersion 23 або вище. Якщо цільова версія нижче 23, то ці програми працюють як раніше на новіших версіях андроїда. Щоправда, гугл плей зараз настійливо рекомендує націлювати програми на останні версії андроїда.

При написанні програми в маніфесті, як і раніше необхідно вказувати відповідні рядки з uses-permission.

Допустимо необхідно написати програму для доступу до контактів та камери користувача. Для цього зробимо просту активність із двома кнопками "Контакти" та "Камера":


суботу, 3 лютого 2018 р.

ListView з власним адаптером (Android)

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

Завдання
Реалізуймо список, який би відображав телефонну книгу і кожен пункт включав би фото, ім’я та номер телефону. Після натиснення на пункті списку виводитиметься відповідне повідомлення.

Підготовка
Спочатку створюємо проект з пустою активністю ListActivity.java 
У папочку res/drawable необхідно закинути зображення, які будуть використовуватися в якості фото.

Для того, щоб програма запрацювала нам знадобиться чотири файли:
ListActivity.java – головна активність програми
Person.java – клас, що містить інформацію про особу (фото, ім’я та телефон)
activity_list.xml – макет активності ListActivity.java (містить віджети TextView та ListView)
item_list.xml – макет пункту списку, в якому вказується як відображатиметься фото і текст, відображенням його на екран займатиметься адаптер, що буде внутрішнім класом у ListActivity.java.

суботу, 27 січня 2018 р.

Простий ListView (Android)

Віджет ListView – часто застосовуваний елемент графічного інтерфейсу користувача в Android. Він дозволяє виводити ряд елементів на екран у вигляді прокручуваного списку. При натисненні на елементі списку, може виконуватися певна дія, наприклад, відкриття нової активності з додатковими деталями списку.

Задача
Вивисте список пристроїв. При натисненні певного пункту виводитиметься відповідне повідомлення.
1. Створюємо нову активність ListActivity

неділю, 19 лютого 2017 р.

Activity (Android)

В Android основні елементи програми - активності (Activity) та макети (Layout).

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

Макет – це файл опису графічного інтерфейсу користувача в форматі XML.
 
Рекомендують називати файли активності використовуючи слово Activity, наприклад, HelloActivity, StartActivity і т.п. Макети називаються з малої букви, із словами у зворотньому порядку, з використанням символу підкреслення між словами. При використанні Android Studio макети автоматично найменуються, наприклад, activity_hello, activity_start.

Завдання:
Розробити програму, яка б складалася з однієї активності та містила кнопку(Button) і текстове поле(TextView). При натисненні кнопки напис текстового поля повинен змінитися на інший.

Рис. 1 - Результати виконання програми

Створення заготовки

Щоб створити заготовку програми достатньо скористатися готовими шаблонами в Android Studio. Вибираємо File.>new->New Project і вибираємо серед запропонованих шаблонів Blank Activity. Називаємо наш проект FirstApp, і при бажанні вводимо назву пакету і тиснемо фініш. В результаті буде створений проект, який просто буде виводити на екран «Hello, World!!!». Нас в даному проекті цікавить три файли.

вівторок, 27 вересня 2016 р.

Android Studio: Error:The number of method references in a .dex file cannot exceed 64K.

Error:The number of method references in a .dex file cannot exceed 64K.

Доволі часто помилка, якщо судити з обговорень.

Способів вирішення три:

1. Почистити код, позбутися лишніх інструкцій та відповідно лишніх імпортів

2. Прописати у скрипті gradle

// Enabling multidex support.
multiDexEnabled true

понеділок, 2 травня 2016 р.

Геокоди України

Наша пам’ять асоціативна і найкраще запам’ятовує людина те до чого вона може прив’язати певну асоціацію.  От цікаво, хто у нас займається введенням кодів? Свого часу мене дивувало чому у нас ввели номерні автомобільні знаки, які важко запам’ятати, адже взагалі у світі прийнято використовувати для таких речей мнемонічні позначення, які легко запам’ятовуються.  І от зараз дивлюсь на позначення наших областей згідно ISO-3166-2:UA. Ну Україна тут UA та UKR тут усе добре, а от позначення українських регіонів  UA-30 -Київ, UA-05 - Вінницька область, UA-74 - Чернігівська область і т.д. Які розумники це придумували? І явно тут же хтось з українців подавав ідеї для такого кодування. У всіх наших сусідів пішли нормально, так RO-B - Бухарест (Румунія), PL-LU - Люблінське воєводство (Польща), RU-MOW - Москва (Росія) і т.д. І лише в нас усе закодовано цифрами. Про людей, які згодом повинні працювати з цими кодами ніхто і не думав.

неділю, 3 січня 2016 р.

Git (пам’ятка)

Git — розподілена система керування версіями.

Базові команди 

 Створення репозиторія на локальному комп’ютері:
$git init
Подивитись поточний стан
$git status
Додати (підготувати) в репозиторій усі файли
$git add .
Додати окремий файл
$git add index.html
Остаточно передати в репозиторій підготовлені файли із коментарем до того що додається:
$git commit –m "Коментар"
Переглянути різницю між тим, що в репозиторію і файлами на диску:
$git diff
Забрати з git лишнє
$git rm –- cached LICENSE.PHP
відкат
$git checkout --license.php

Робота з гілками

створення нової гілки
$git branch new_style
переключитися на нову гілку
$git checkout new_style
подивитись гілки і яка поточна
$git branch
Злиття гілок
$git merge new_style

Робота з віддаленим сервером (GitHub) 


понеділок, 7 вересня 2015 р.

Параноїдальне програмування на Java

Як програмувати, щоб допускати менше помилок при програмуванні - ціла наука з якої виросли патерни і ряд нових віянь у Java як то Generics. Проте помилки на зразок випадкового небажаного присвоєння зустрічаються доволі часто. Хороша стаття як програмувати, щоб допускати менше помилок:



Особливо мені сподобалось, щоб уникнути випадкового присвоєння в умовах, краще ставити на перше місце літерал, а змінну на друге (5==variable), таким чином забувши написати замість подвійного дорівнює одинарне, зразу ж помилка буде локалізована. Інструкція присвоєння за любих умов не спрацює.:) Власне поради корисні не тільки Java програмістам.

Роберт Чалдині - Психологія впливу

Думаю усі стикалися з «попрошайками», які якимось чином умудрялися вибити якусь подачку з вас, навіть якщо ви не любити їм давати чи з продавцями які умудрялися продати вам щось за завищеною ціною чи взагалі непотрібну вам річ, а можливо з когось шахраї видурювали і справді значну суму. Якщо комусь цікаво як вони це роблять, то книга Роберта Чадлині «Психологія Впливу» саме для таких людей. Наткнувся я на книгу у книгарні «Є».  Доволі непогана науково-популярна книга і головне легко читається. 366 сторінок здолав я менше ніж за два дні. Крім того автор не просто описує якісь спостереження чи випадки з життя, а й вказує на ґрунтовні наукові дослідження базовані на експериментах з набором відповідної статистики.
Дещо з того що запам’яталось найбільше:

неділю, 26 липня 2015 р.

Великі дані (Big data)

Великі дані (Big data) - це просто величезна складна сукупність даних різноманітної природи. Вони складаються із структурованих і неструктурованих даних та ростуть так швидко, що з ними не справляються ніякі звичні системи управління базами даних та статистичні засоби.

Великі дані характеризуються:
- варіабельністю (великим різноманіттям, Variety)
- об’ємом (volume) - просто колосальні розміри даних з якими не справиться жоден комп’ютер
- інтенсивним ростом (velocity) - дані зростають колосально не те що щорічно чи щомісячно, а щоденно

неділю, 19 липня 2015 р.

Класи та об’єкти (відмінювання слів)

При описуванні класів та об’єктів необхідно знати як слова "клас" та "об’єкт" відмінюються в українській мові (я особисто з об’єктом до цих пір плутаюсь:) ):


клас - іменник, чоловічий рід, неістота, II відміна
відмінокоднинамножина
називнийкласкласи
родовийкласукласів
давальнийкласові, класукласам
знахіднийкласкласи
оруднийкласомкласами
місцевийна/у класіна/у класах
кличнийкласекласи


об'єкт - іменник, чоловічий рід, неістота, II відміна
відмінокоднинамножина
називнийоб'єктоб'єкти
родовийоб'єктаоб'єктів
давальнийоб'єктові, об'єктуоб'єктам
знахіднийоб'єктоб'єкти
оруднийоб'єктомоб'єктами
місцевийна/у об'єктіна/у об'єктах
кличнийоб'єктеоб'єкти


Джерело: www.slovnyk.ua

пʼятницю, 10 липня 2015 р.

Eclipse Mars та Lingvo x3

Оскільки своїми експериментами я довів Eclipse Luna до того, що вже відмовляється звертатися до власного офіційного репозиторію і відмовляється коректно встановлювати плагіни. Вирішив настав час переїзджати на Марс (Тобто поставити Eclipse JEE Mars). Поставив і .... не запускається. Оскільки уже були колись у мене проблеми з запуском NetBeans та JDeveloper (див: JVM creation failed та WindowBuilder Error: Unhandled event loop exception), тож зразу ж вигрузив ABBY Lingvo X3 і чудо сталося: усе запрацювало і я у всій красі побачив Марс:).

Мабуть пора обновити Lingvo до новішої версії, щоправда NetBeans, здається, чи це був JDeveloper не бажав запускатися і при відкритих PDF у Acrobat Reader.

PS. Цікаво, що з написання: WindowBuilder Error: Unhandled event loop exception пройшов майже рік без одного дня:))))

середу, 10 червня 2015 р.

Панель прокрутки JScrollPane

Для того щоб реалізувати прокручування вмісту існує клас JScrollPane (Scroll Pane можна перекласти як панель прокрутки). JScrollPane дозволяє в разі наявності вмісту для прокручування додати вертикальну та горизонтальну смуги прокрутки (англ. scrollbars), з якими добре знайомий кожен користувач комп'ютера. Додавання прокрутки здійснюється доволі просто. Достатньо лише при створенні екземпляру JScrollPane вказати для якої компоненти потрібні додати смуги прокрутки. Після чого панель прокрутки (а не компоненту!) додаємо у відповідний контейнер. Наприклад оточити текстову область смугами прокрутки, можна таким чином:

четвер, 5 лютого 2015 р.

Андроїд - не лінукс і джава - не джава


Короткі замітки і коментарі по 3- му розділу книги "Learning Android", 2-nd Edition by Marko Gargenta and Masumi Nakamura (2014). Думаю написати їх по кожному розділу (якщо вистачить духу). Можливо, колись такі замітки переростуть у щось більше.

Android - не Linux, проте є надбудовою над kernel. Так пишуть автори, хоча б я сказав би, що Android - це Linux, який спочатку обрізали, а потім доповнили новими можливостями :) Зокрема, у андроїда відсутні:

понеділок, 2 лютого 2015 р.

Конект до vmware з іншого комп’ютера

Тож: є два комп’ютери (ноутбук та нетбук). На нетбуці у віндовз встановлено віртуальну машина  VMware (Android). При чому з’єднання іде напряму з одного комп’ютера до іншого по Ethernet кабелю без посередництва якогось комутатора. Ідея в тому, щоб використовувати дану віртуальну машину для зневадження/наладгодження програм.  Тобто, на ноутбуці іде робота з eclipse, а перевірка роботи програм іде не на емуляторі (який тормозить комп’ютер), а на віртуальній машині. З віртуальною машиною як на мене легше працювати, але вона також нагружає комп'ютер, коли працювє разом з eclipse. Непогано б перевіряти програму на іншому комп'ютері. Для цього vmware було встановлено на нетбуці.

Пред початком, я на одному і другому комп’ютері (windows XP) налаштував з’єднання (IP1: 192.168.0.20, IP2:192.168.0.21(нетбук), Mask:255.255.255.0). Тож, міні-мережа була налаштована.

Теоретично мало б бути так: