неділя, 7 грудня 2025 р.

понеділок, 3 лютого 2025 р.

Наталка Ліщинська. Ворота у небо. Фантастичний феєрверк (відгук)


Так сталося, що придбав збірник оповідань Наталки Ліщинської "Ворота у небо. Фантастичний феєрверк". Ця українська письменниця була відкриттям для мене і переконанням, що цікаві книги можна знайти і в українському книгопросторі.

Збірка складається з 18 оповідань. Оповідання - різнопланові. Тут і наукова фантастика пов'язана з космосом і присутня містика та фентезі оповідання. Найбільше на мене справили враження такі оповідання як "ОС", що розшифровується як оцифрована свідомість. Про те, що інопланента цивілізація створює безсмертну оцифровану свідомість своєї представниці і як ця ОС здійснила вплив на розвиток людства.

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

Третє оповідання - "ШіВа". Воно про межі розвитку штучного інтелекту створеного людьми та війну з інопланентним штучним інтелектом. 

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

понеділок, 13 березня 2023 р.

Речі, що змінили світ. Історія економіки в 50 винаходах (Тім Гарфорд)


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

Так, наприклад, в розділі присвяченому маркетинговим дослідженням ми можемо взнати, що небіж Зігмунда Фройда Едвард Бернейс переконав жінок США курити, заявивши,  що цигарки - це "факели свободи" для жінок, символ емансипації жінок.

В розділі "Універсальний магазин" ви можете познайомитись з історією появи сучасних супермаркетів та різноманітних прийомів щодо продаж.

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

вівторок, 24 січня 2023 р.

Вивчаємо англійську з Duocards (флеш-картки)

 Duocards - застосунок для вивчення англійських слів з допомогою флеш-карток, зручного та ефективного способу вивчення англійських слів та фраз. Доступна Android версія для телефон та веб-версія. Також існує додаток для хрому, щоб зручно додавати слова прямо при читанні текстів у браузері. Існує доволі багато аналогів з яких найвідоміші Quizlet, Anki та інші.

Графічний інтерфейс 

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

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

неділя, 30 жовтня 2022 р.

Навчитися вчитися. Як запустити свій мозок на повну (Барбара Оклі)

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

Спочатку авторка приділяє увагу самому процесу запам'ятовування. Говорить про утворення стійких нейронних зв'язків і утворення фрагментів пам'яті. Також авторка зачіпає тему різних режимів навчання: сфокусованого та розпорошеного режиму. Час від часу необхідно перемикатися з одного режиму в інший для опрацювання вивченого матеріалу.

Ще однією з проблем, яку зачіпає авторка є проблема відкладання на потім. Авторка пропонує вести планер і перетворити навчання на звичку. Інколи постає потреба знаходження тихого, спокійного місця як то бібліотечний читальний зал. Корисним є застосування методу помідора, коли ви на певний час занурюєтесь суто в роботу без відволікання, виставляючи таймер, наприклад, на 25 хвилин. 

В книзі наведено багато корисних застосунків (веб, ПК, мобільний телефон) для планування часу та проведення процесу навчання.

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

Подані поради щодо організації навчання, повторення, виконання задач та проходження тестів. 

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

пʼятниця, 16 вересня 2022 р.

Мета. Процес безперервного вдосконалення (Еліягу Ґодратт і Джефф Кокс)


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

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

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

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

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

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

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



пʼятниця, 2 вересня 2022 р.

Пол Екман - Теорія Брехні

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

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

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

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

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

Виявлено, що окремі люди справді можуть визначати брехню з точність до 80% випадків. З поміж усіх дослідних груп суддів, розвідників, поліцейських, психологів найкраще себе зарекомендували члени секретної служби США. 

Також піднімається питання брехні у політиків. Автор розглядає брехню навколо таких подій як брехню Гітлера Чемберлену, Вотергейський скандал президента Річарда Ніксона, брехню Ліндона Джонсона про війну у В'єтнамі, катастрофу космічного човника "Челленджера" та інші цікаві випадки.

Пол Екман приділив увагу дослідженням на "детекторі брехні". Здійснений огляд досліджень з даної галузі. Дослідження показують переважно не 100 % точність результатів. Десь приблизно 10- 30% оператори детектора брехні можуть помилятися в обидві сторони. Тобто можуть брехуна визначити правдивим, а можуть, навпаки, безневинну людину визначити брехливою. Вся проблема в тому, що безневинні люди при контрольних питаннях можуть починати хвилюватися, що їх визнають винними і тому не проходять детектор брехні. Окремі брехуни можуть майстерно приховувати хвилювання. Тож автор піднімає деякі аспекти, як покращити точність виявлення через підбір правильних запитань.

Екман виводить дев'ять мотивів брехні виходячи із співбесід з дітьми та анкетування дорослих:

1. Аби уникнути покарання. Це найбільш поширений мотив для дітей або дорослих. Покарання може бути за поганий вчинок або випадкову помилку.

2. Аби отримати нагороду, яку інакше здобути нелегко. Це другий найбільш часто згадуваний мотив як дітьми, так і дорослими.

3. Аби захистити іншу особу від покарання.

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

5. Аби викликати захоплення у інших.

6. Аби вийти з незручної соціальної ситуації. Наприклад, збрехати про проблеми з нянею, аби залишити нудну вечірку, або збрехати про дзвінок у двері, аби закінчити телефонну розмову.

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

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

9. Аби керувати іншими, контролювати доступну їм інформацію.

Мінус книги в тому, що книга писалась в кінці 80х-початку 90х і, відповідно, немає огляду нових резонансних подій та наукових досліджень присвячених детектору брехні і брехні в цілому. Трішки згладжує це негативне враження, більш новіший останній розділ, де автор розглядає деякі останні його з колегами дослідження проведені в 90-х та двотисячних роках.

На основі досліджень Пола Екмана знято однойменний з книгою телесеріал "Теорія брехні"



понеділок, 8 серпня 2022 р.

Винятки Java

'''Виняткова ситуація''' або просто '''виняток''' (англ. exception) – це аварійний стан, який відбувається саме під час виконання програми. Прикладом є — ділення на нуль, помилки читання з файлу та мережі тощо. Іншими словами – це помилки які можуть виникнути при виконанні програми. В ряді мов програмування необхідно заздалегідь передбачити можливість тієї чи іншої помилки і передбачити шлях її обробки. В java для цього передбачений спеціальний механізм винятків.

Винятки в java
Виняток в java – це об'єкт, який описує виняткову (тобто, помилкову) ситуацію, що відбулась в певному місці коду. Коли така ситуація виникає створюється об'єкт, який передається («вкидається») в метод, в якому виникла помилка. Далі в методі даний виняток може оброблятися, або бути переданий ще кудись для обробки.

Розглянемо для прикладу наступну програму '''DivZero.java'''
public class DivZero {
    public static void main(String[] args) {
        int my = 0;
        int medium = 44 / my;
        System.out.println("medium=" + medium);
    }
}
Як бачимо в програмі присутнє ділення на нуль. При компіляції ми не отримаємо помилок. Проте, після запуску програми, отримаємо наступне:

понеділок, 1 серпня 2022 р.

HashMap

HashMap розширює AbstractMap та реалізує інтерфейс Map. Клас не додає власних методів. Клас використовує хеш таблиці для зберігання зіставлення. HashMap не гарантує порядок елементів.

HashMap має наступні конструктори:

HashMap( )

HashMap(Map<? extends K, ? extends V> m)

HashMap(int capacity)

HashMap(int capacity, float fillRatio)

Перший створює HashMap по замовчуванню. Другий створює хеш зіставлення використовуючи елементи m. Третій задає ємність хеш зіставлення. Четвертий задає ємність(по замовчуванню 16) та коефіцієнт заповнення (по замовчуванню 0.75).


понеділок, 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

Клас EnumSet (Java)

EnumSet, Java, Collection, Колекції, Коллекции
Клас EnumSet — це одна з спеціалізованих реалізацій інтерфейсу Set для використання з перелічуваним типом даних (enum). EnumSet розширює AbstractSet та реалізує Cloneable та Serializable інтерфейси Java. EnumSet заміщує більшість методів інтерфейсів Set та Collection. EnumSet доволі швидка реалізація Set, швидша за HashSet, тому що всередині використовуються побітові операції, а не хеш-коди об’єктів.

EnumSet не синхронізований і повинен бути синхронізований ззовні, наприклад з використанням методу Collections.synchronizedSet(java.util.Set).

Всі елементи enum множини мають походити від єдиного перелічуваного типу, що вказується, коли множина створюється явно або неявно. EnumSet не дозволяє додавати значення null. Елементи зберігаються в порядку в якому їх подано в переліченні (enum).

EnumSet використовує безвідмовний (fail-safe) ітератор, що працює з копією EnumSet, тобто ітератор не буде викидати виняток ConcurrentModificationException, в разі зміни даних множини поза ітератором.

четвер, 30 квітня 2020 р.

Клас ArrayDeque (Java)

ArrayDeque, Java, Колекції, Коллекции
ArrayDeque (читається як еррейдек) – це клас який забезпечує двосторонню чергу. Іншими словами - це автоматично зростаючий масив, що дозволяє нам додавати або видаляти елементи з обох боків черги. ArrayDeque може бути використано як стек (LIFO, останній ввійшов - перший вийшов) або ж як черга (FIFO, перший ввійшов - перший вийшов).

ArrayDeque не може містити в якості елемента null.

Клас ArrayDeque швидший за клас Stack, якщо використовувати його в якості стеку і швидший за LinkedList, якщо використовувати в якості черги.

ArrayDeque розширює клас AbstractCollection та реалізує інтерфейси Deque, Cloneable, Serializable. Таким чином ми можемо використовувати для роботи з даним класом, як методи інтерфейсу Deque (який розширює інтерфейс Queue) так і методи інтерфейсу Collection.

Якщо використовується ітератор, то він буде викидати виняток ConcurrentModificationException, якщо вміст ArrayDeque був модифікований після створення ітератора. Таким чином ітератор необхідно з обережністю використовувати з ArrayDeque.

вівторок, 28 квітня 2020 р.

Як зберегти dataframe у csv файл (python)

save, dataframe, python, csv, зберегти, сохранить
CSV (від англ. comma-separated values 'значення, розділені комою', іноді character-separated values 'значення, розділені символом') — файловий формат для представлення табличних даних, у якому поля відокремлюються символом коми (або крапкою з комою) та переходу на новий рядок. Поля, що містять коми, декілька рядків, або лапки (позначаються подвійними лапками), мають обмежуватися з обох боків лапками. CSV формат простий та зручний для програмної обробки, тому його часто використовують для збереження різноманітнийх табличних даних з метою подальшої обробки їх різноманітними програмами. Практично усі сучасні мови, які займаються обробкою даних, мають зручні функції для читання даних у даному форматі.

Для збереження DataFrame у csv файл у Python використовується метод(функція) to_csv() класу pandas.DataFrame. Наприклад так:
import pandas as pd
df=pd.DataFrame({"Years": [1990, 1991, 1992, 1993, 1994, 1995, 1997],
    "Price1": [1, 5, 6, 10, 8, 9, 2],
    "Price2": [5, 6, 7, 8, 9, 15, 12],
    })
df.to_csv(r"C:\data\report_df.csv", index=False, sep=";")
r спереду адресу означає, що не потрібно враховувати службові символи у рядку шляху. Без r у windows шлях прийшлось би писати через дві косі риски, так:
df.to_csv("C:\\data\\report_df2.csv", index=False, sep=";")
Найбільш корисні аргументи методу to_csv наведено в таблиці.

Сценарій
Аргумент
Приклад
Змінити розділювач по замовчуванню
sep
df.to_csv(…, sep=';')
Записати без індексів
index
df.to_csv(…, index=False)
Записати без заголовків
header
df.to_csv(…, header=False)
Записати підмножину стовпчиків
columns
df.to_csv(…, columns=['x', 'y'])
Кодування формату файлу
encoding
df.to_csv(…, encodings='utf-8')
Стиснути   CSV
compression
df.to_csv(…, compression='gzip')
Задати формат часу
date_format
df.to_csv(…, date_format='%d/%m%Y')
Зберегти NaNs as "N/A"
na_rep
df.to_csv(…, na_rep='N/A')

понеділок, 27 квітня 2020 р.

Клас PriorityQueue (Java)

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

PriorityQueue має наступні конструктори: