понеділок, 15 листопада 2021 р.

Інструкція Switch (Java)

Інструкція if/else може бути доволі громіздкою, якщо необхідно здійснити множинний вибір з багатьох альтернатив. Тож як і в С/C++ в java існує інструкція switch, яка здійснити вибір з багатьох варіантів. Щоправда вона дещо незграбна і деякі програмісти вважають за краще уникати її використання.

Наприклад, якщо Ви організовуєте певне меню і пропонуєте користувачу вибрати, номер конкретного пункту, то можна використати наступний код:
Scanner in = new Scanner(System.in);
System.out.print("Select an option (1, 2, 3, 4) ");
int choice = in.nextInt();
switch (choice) {
     case 1:
         . . .
         break;
     case 2:
         . . .
         break;
     case 3:
         . . .
         break;
     case 4:
         . . .
         break;
     default:
         // bad input
         . . .
         break;
}

суботу, 7 листопада 2020 р.

Прокрастинація (Джейн Б. Бурка, Ленора М.Юен)

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

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

З порад, які мені запам'ятались це:
- розбити роботу на дрібні етапи
- працюємо зосередившись на поточному етапі;
- якщо важко знайти час чи немає натхнення чи втомлені, то ставимо за мету попрацювати хоча б 15 хвилин, що краще ніж нічого;
 
Автори також розглядають те, як правильно ставити собі ціль, як навчитись планувати свою роботу і контролювати час. Даються також поради про те, як жити чи працювати з прокрастинатором, як з ним поводитись. Розглянено питання прокрастинації через потрапляння в нове соціальне або культурне середовище (що може трапитись, наприклад, при еміграції).

суботу, 27 червня 2020 р.

Програмування для дітей. Створюй відеоігри за допомогою скретч

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

Хто не в курсі Scratch - це проста візуальна мова програмування. За допомогою комбінації блоків ви можете створити власну відеогру.

Саме середовище розробки знаходиться за адресою https://scratch.mit.edu/. Проте є і офлайн версія, яку можна встановити на комп'ютері чи планшеті. Щоправда книжка передбачає натиснення на клавіші клавіатурі, тому для розробки на планшеті дещо не підходить оскільки там свої особливості розробки ігор, хоча після освоєння книги, можна попробувати зробити щось і на планшеті.

Ось так виглядає невеликий фрагмент програми:

В книжці надається послідовна інструкція для розробки шести простеньких відеоігор. Найпростіша "Розчави комарика" передбачає, що необхідно клацати по екрану мишкою, поки не розчавиш комара. Більш складніші вже передбачають управління героєм, захоплення або ж ухилення від летючих предметів.

Всі фрагменти коду поступово вводяться і роз'яснюються. Вкінці кожного розділу наводиться повний код відеоігри.

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

неділю, 21 червня 2020 р.

"Усе замахало, але надія є" Марк Менсон

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

Можливо ви прагнете створити свою релігію(ідеологію)? Може вас не задовільняють пануючі в суспільстві ідеологія і ви хочете впровадити свою з купою нових догм для новонавернених? Ця книга саме для вас. Для тих хто хоче творити нові проєкти. Автор надає відповідні рекомендації щодо бази релігії/ідеології і захисних механізмів для уникнення відходу новонавернених, при спробах критики ваших ідей. Варто звернути увагу на те, як захищаються різні релігійні люди від критики, а також різні прихильники конспірологічних теорій. У них завжди знайдуться залізобетонні, на їхню думку, аргументи проти ваших нападок.

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

В книзі піднімаються питання дорослішання. Що відрізняє дитину від дорослого? Основна справа тут в суспільних цінностях. Дитина керується бажаннями, в той час як дорослі керуються певними цінностями і обмежують відповідно до них свої бажання і дії. Проте деякі люди і в дорослому віці залишаються дітьми.

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

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

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

В книзі згадуються багато цікавих історичних подій. В цілому книга доволі цікава і головне легко читається. Перекладачі спробували наблизити переклад до українців замінивши деякі несуттєві для книги прізвища та назви установ більш знайомими українцям. Так, наприклад, згадується Василь Верестюк та "Пузата хата" :).

суботу, 9 травня 2020 р.

Android бібліотеки для побудови графіків (діаграм)

Задались питанням «Як побудувати графік (діаграму) у Android програмі?». Для цього існує вже ряд розроблених бібліотек для Android Java розробників. З тих, що я знайшов, більш менш пристойними є: SciChart, AndroidCharts, AChartEngine, AndroidPlot, GraphView, MPAndroidChart. Останні дві є найбільш популярними. Існують також дуже простенькі невеличкі бібліотеки, які зосереджуються на малюванні одного якогось графіку, найчастіше лінійного.

SciChart – платна багатоплатформна бібліотека для WPF, iOS, Android, Xamarin. Розробники стверджують, що вони зосереджуються на швидкості і високопродуктивності їхньої бібліотеки. Дозволяє будувати доволі складні динамічні графіки. Наявний непоганий посібник (Tutorial) для Android розробників. Проте дана бібліотека є платна і коштує від 850 до 3000 доларів США на одного розробника в рік.
SciChart library, example, Android Graph, Plot
Приклад програми з використанням SciChart

четвер, 7 травня 2020 р.

FileChooser (FilePicker) in Android Program

Якщо необхідно реалізувати вибір файлів у вашій Android програмі, то додати до своєї програми так званий FileChooser або ж його ще називають FilePicker можна декількома способами. Можна використати стандартні засоби API Android, а можна скористатися сторонніми бібліотеками, яких зараз є доволі багато.

Передусім можна використати стандартний Intent.ACTION_GET_CONTENT. Для цього достатньо додати в обробник події натиснення кнопки наступні рядки:
Intent myFileIntent=new Intent(Intent.ACTION_GET_CONTENT);
myFileIntent.setType("*/*");
startActivityForResult(myFileIntent,10);
Також необхідно замістити (@Override) метод OnActivityResult і додати в ньому:
if (requestCode == 10 && resultCode == RESULT_OK) {
    String path=data.getData().getPath();
    textView.setText(path);
}
В результаті після натиснення кнопки з’явиться стандартна активність, яка дозволяє вибрати звідки вибирати файли і навіть, які засоби встановлені у системі використати. Наявні елементи можуть відрізнятися в залежності від конфігурації системи Android.

На моєму мобільному це виглядає так:
ACTION_GET_CONTENT, FileChooser Android
Інший варіант реалізувати вибір файлів є підключення сторонньої бібліотеки до Андроїда. Я опробував дві бібліотеки.

Material FilePicker ('com.nbsp:library:1.8') Детальніше тут.

Як її застосовувати також наведено на цьому відео:

Дана бібліотека дозволяє створити простий FileChooser в Android. Проте особисто мені сподобалась інша бібліотека, яка має більше можливостей щодо налаштувань, більше функцій та кращий зовнішній вигляд.

Це Android-FileBrowser-FilePicker ('com.adityak:browsemyfiles:1.9'). Детальніше тут.

Якщо необхідний FileChooser/FilePicker, то додаємо в gradle:
implementation 'com.adityak:browsemyfiles:1.9'
В обробник події кнопки для реалізації множинного вибору:
Intent i2 = new Intent(getApplicationContext(), FileChooser.class);
i2.putExtra(Constants.SELECTION_MODE, Constants.SELECTION_MODES.MULTIPLE_SELECTION.ordinal());
startActivityForResult(i2, PICK_FILE_REQUEST);
А у заміщеному (@Override) методі OnActivityResult додаємо:
if (requestCode == PICK_FILE_REQUEST && data!=null) {
      if (resultCode == RESULT_OK) {
          ArrayList selectedFiles  = data.getParcelableArrayListExtra(Constants.SELECTED_ITEMS);
      }
}
Результат тестування усіх трьох способі наведено на наступному відео:

Початковий код розміщено тут: https://github.com/volodimirg/TestFileChooser. Дивіться код MainActivity. У Manifest було додано лише дозвіл доступу до зовнішнього сховища даних.

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

Дивіться також:

суботу, 2 травня 2020 р.

Як додати twitter card до блогу (blogger)

По замовчуванню коли твітнути статтю на платформі blogger, то в twitter з'являється не дуже привабливий tweet. Це можна виправити налаштувавши на нашому блозі twitter card (карточку твітера). 

Це можна зробити кількома способами. Спосіб один заходимо в налаштування блогу Тема/Редагувати html і додаємо такі рядки перед тегом </head> :

<meta content='summary_large_image' name='twitter:card'/>
<meta content='@your-name' name='twitter:site'/>
<meta content='@your-name' name='twitter:creator'/>

Інший спосіб надає більш розширенні можливості, зокрема можна вказали посилання на logo, яке буде з'являтися коли постити не пост, а головну сторінку, або сторінки блогу на blogger. Так же само додаємо наступний текст (взято тут):

<!--Twitter Card-->
<b:if cond='data:blog.pageType == "index"'> <!--homepage-->
    <meta name="twitter:card" content="summary" />
    <meta name="twitter:description" expr:content='data:blog.metaDescription' />
    <meta name="twitter:title" expr:content="data:blog.pageTitle" />
    <meta name="twitter:site" content="@username" />
    <meta name="twitter:image" content="YOUR_LOGO_URL" />
    <meta name="twitter:creator" content="@username" />
</b:if>
<b:if cond='data:blog.pageType == "static_page"'> <!--page-->
    <meta name="twitter:card" content="summary" />
    <meta name="twitter:description" expr:content='data:blog.metaDescription' />
    <meta name="twitter:title" expr:content="data:blog.pageTitle" />
    <meta name="twitter:site" content="@username" />
    <meta name="twitter:image" content="YOUR_LOGO_URL" />
    <meta name="twitter:creator" content="@username" />
</b:if>
<b:if cond='data:blog.pageType == "item"'> <!--blog post-->
    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:description" expr:content='data:blog.metaDescription' />
    <meta name="twitter:title" expr:content="data:blog.pageName" />
    <meta name="twitter:site" content="@username" />
    <meta name="twitter:image" expr:content="data:blog.postImageUrl" />
    <meta name="twitter:creator" content="@username" />
</b:if>
<!--End Twitter Card-->
@username заміняємо на власний логін на твітері.
Переглянути результат можна використавши Twitter card validator.

Інколи не завжди з першого разу карточка нормально відображається в твітері і потребується повторний твіт. Або ж спочатку необхідно переглянути на валідаторі карточки, а згодом твітнути в твітері. Результат виглядає в моєму випадку так:

: twitter card