Technologique
660 subscribers
143 photos
3 videos
42 files
945 links
Deeply involved developers about various aspects, tendencies & conceptions of programming technologies, FLOSS, Linux, security, cloud infrastructures & DevOps practices, distributed systems, data warehousing & analysis, DL/ML, web3, etc.
Author: @andrcmdr
Download Telegram
Весьма интересная и познавательная, и даже отчасти реверс-инжениринговая, статья об алгоритме работы KeePass версий 1x и 2x с БД паролей и о формате самих баз kdb и kdbx

Статья для тех, кто хочет реализовать работу с парольными базами KeePass или даже сделать свой клиент, совместимый с KeePass и форматами баз паролей kdb и kdbx

https://habrahabr.ru/company/thirdpin/blog/307982/
Ура! Наконец-то я проникся разработкой через тестирование (test-driven development, TDD) - это просто нужно попробовать самому руками и на вкус! Иначе - не поймёшь!
Вы не поверите как это произошло - решаю тестовые задания на HackerRank.com! 😅👍
Теперь всё начинаю покрывать unit-тестами на ввод-вывод функций и методов перед написанием кода! И так легче следовать конкретным техзаданиям и спецификациям, данным архитекторами проекта, например при разработке API или модулей и библиотек!
Спасибо Роме Кононову (@rkononov) за точную наводку, Research In Development (RID, @lucky_rider 😄) за интересные мысли, Вадиму Глебову (@glebov), Максиму Косякову (@maxkosyakov) и Данияру Керимджанову (@kerimdzhanov) за советы данные мне в своё время.
А теперь страшная сказка на ночь... Аж абс...
Про абстракции!
😅😆😂👍

Это выжимка из очень умной книги, написанной Джоном Митчеллом - "Концепции в языках программирования", параграф 6.4, "Полиморфизм и перегрузка" (https://telegram.me/technologique/96).

PS: Читаем внимательно и вдумчиво - такие вопросы ("чем отличается абстрактный класс от интерфейса?") мне задавали уже дважды на собеседованиях и интервью!
Technologique
John C. Mitchell. Concepts in Programming Languages. — Cambridge University Press, 2002. — 540 p. — ISBN 978-0-521-78098-8. 6.4. Polymorphism and overloading, p. 145-151 Пожалуй лучшее описание концепций полиморфизма в языках программирования!
Losing the elegance...
Too much abstractions - this is Java!
Сейчас посидел, покодил и вспомнил, что такое абстрактный класс, он же абстрактный/базовый тип, используемый для реализации полиморфизма включения (ad-hoc) во многих случаях - это класс не порождающий объектов-экземпляров и порождающий только другие классы, конструктор классов, в Ruby и Python есть похожие по функциональности абстракции, это суперклассы в Ruby и метаклассы в Python, они часто используются для реализации фреймворков и библиотек.
Абстрактный класс может иметь абстрактные свойства и абстрактные методы, которые могут быть только описаны в абстрактном классе, но могут быть наследованы и реализованы только в классах-потомках.
Абстрактные методы могут быть виртуальными, наследоваться классами-наследниками и переопределяться (перегружаться) в них, для определения типа объекта, экземпляра такого класса-наследника от абстрактного класса, в runtime (во время исполнения) и таким образом реализуют ad-hoc полиморфизм включения, что повышает повторное использование этого полиморфного кода для разных типов данных и задач.
В свою очередь абстрактный класс содержащий только виртуальные методы называется интерфейсом.
В Java, Python все методы виртуальные по умолчанию, кроме приватных с ограниченной областью видимости.
А ещё есть виртуальный класс (в C++ например), базовый класс (суперкласс, метакласс), который используется при множественном наследовании и реализует виртуальное наследование - не включается в классы-потомки, а наследуется в них только по ссылке, во избежание дублирования методов и свойств.
Вообще в этой ООП трясине легко завязнуть и заплутать! 🙀😅
Technologique
GIF
Синтаксический сахар (syntactic sugar) - больше лучше! 😄😆😂👍

https://ruby-lang.org/en/

Всё таки я советую многим изучить и попробовать Ruby и JRuby 👍
Technologique
Perfect Linux machine overview Lenovo ThinkPad X1 Carbon 4th Gen 2016 http://www.notebookcheck.net/Lenovo-ThinkPad-X1-Carbon-2016-Core-i7-WQHD-Ultrabook-Review.162631.0.html http://www.notebookcheck.net/Lenovo-announces-ThinkPad-X1-Carbon-Yoga-and-Tabl…
13.3" bare-metal ультрабук Xiaomi Air

Установлено 8GB ОЗУ DDR4

Если будет версия полностью на Intel (с Intel HD Graphics или даже Intel Iris) - это будет просто мечта линуксоида! И никаких макбуков! 😆😂

А пока для линуксоида серия Thinkpad от Lenovo остаётся вне конкуренции!

https://youtu.be/3KGk_qGdwv8 - Ubuntu на 12.5" модели Xiaomi Air

http://www.mi.com/mibookair/specs/ - технические характеристики лэптопов

Купить с доставкой, оплатив картой, можно на сайте магазина GearBest:
http://www.gearbest.com/laptops/pp_421980.html

http://www.gearbest.com/laptops/pp_425390.html

http://www.gearbest.com/laptops/pp_416105.html
Отличный митап и скринкаст получился! 👍
Парни хорошо рассказали про Spring Boot - такая автоматизация многое упрощает и отменяет много ручной работы! А для Java ведь нет стандартизированного и принятого всем сообществом менеджера jar пакетов и единого репозитория (хотя Maven умеет подтягивать зависимости из репозиториев), типа pip, gem и npm, и контроля зависимостей как у инструментария для Go...
Но это уже другая история...
А в этой истории рассказ про Spring Boot и сессия live coding demo в процессе повествования - это вдвойне интереснее!
Если коротко, Spring Boot это слой автоматизации Java фреймворка Spring для быстрого конфигурирования всех компонентов проекта и его развёртывания.
Именно об этом тема - про автоматизацию конфигурации и развёртывания проектов на фреймворке Spring с использованием Spring Boot.
Спасибо Руслану Молчанову (@ruslanys) и Максиму Кливенко (@klivenko), что так хорошо подготовились и рассказали, показали и в целом очень классно провели онлайн скринкаст-митап!
Как раз именно практики в конкретных технологиях на канале очень не хватает!

https://youtu.be/I_LC4dUhBVI
Как Golang помог в становлении технологий контейнеризации (изоляции окружения приложений) и популяризации экосистемы Docker.

http://thenewstack.io/go-programming-language-helps-docker-container-ecosystem/

Весьма интересная к прочтению статья, учитывая тот факт, что Docker активно использует системные вызовы ядра, а это уже proof of concept того, что Golang может использоваться и уже используется в очень крупных разработках системного ПО.

Go 1.7 по абсолютному большинству тестов и бенчмарков уже очень близок к Си и C++ по оптимизации и скорости исполнения кода (и уже обогнал Java и C#), при этом расход памяти ниже, а безопасность памяти выше, всё таки статическая типизация и компиляция плюс GC многое решают!

Также с версии 1.5 уже можно писать нативные приложения и библиотеки для Android и iOS, плюс десктопные кроссплатформенные приложения с GUI интерфейсом используя библиотеки Qt/QML.

https://github.com/golang/go/wiki/Mobile

https://talks.golang.org/2015/gophercon-go-on-mobile.slide#1

На Go создаётся много приложений, работающих с сетевым стеком, серверов и веб-фреймворков, облачных веб-сервисов, сервер-сайдных облачных инфраструктур, платформ и middleware (IaaS, PaaS, MaaS).

Go действительно постепенно становится языком общего назначения и экосистема вокруг языка растёт!

Но, многие возможности пока отсутствует, как в языке (многое решаемо, но бОльшим объёмом кода), так и в экосистеме.
В угоду обратной совместимости серьёзных нововведений в самом языке до версии 2.0 ждать не стоит.
Сейчас мы находимся на финальном этапе формирования привязки разработки к вендорам и их экосистемам:
Java - Oracle
C# - Microsoft
Go - Google
Swift - Apple

http://www.tiobe.com/tiobe-index/

http://www.tiobe.com/tiobe-index/programming-languages-definition/

http://redmonk.com/sogrady/2016/07/20/language-rankings-6-16/

При этом конкуренция между Java и C#/Mono, Java и Go, а Go с C#/Mono на Android и в сервер-сайде на Linux будет только нарастать.
Microsoft выходит на поле Linux, Android и Open Source, купив Xamarin и платформу Mono, а также создав совеместно с Canonical слой shim (https://en.wikipedia.org/wiki/Shim_(computing)) в ядре своей ОС для трансляции POSIX системных вызовов ядра Linux в WinAPI вызовы ядра Windows, для практически нативного запуска бинарных файлов ELF формата Linux приложений в среде ОС Windows. Есть информация, что разработка адаптивного интерфейса и конвергентного рабочего стола Continuum для разных типов устройств с экранами разных размеров и разрешений - это также совместная разработка с Canonical, которая разрабатывает аналогичную технологию в Unity 8 UI для Ubuntu ещё со времён перевода всего дитрибутива на оболочку Unity и начала работ над графическим оконным сервером Mir, как универсальной альтернативы Xorg и Wayland для всех типов устройств.

Google будет стараться заменить Java на Go там где это возможно в Android, чтобы избежать всех патентных трений с Oracle.

Swift и экосистема Apple самодостаточны, как и Oracle с Java, которая продолжает развиваться (см. GraalVM).

А тут ещё рынок и целая экосистема IoT на подходе, которая даст ещё и второе дыхание вебу и облачному сервер-сайду.
http://scalalaz.ru

Интерсные подкасты, записываемые московскими скалистами, о многих аспектах программирования на языке Scala, императивной и функциональной парадигме программирования, объединённых в одном уникальном языке
С 256-м (2^8) днём года - днём программиста! 😄👍

python3 << codersday

import time as t

import math as m

from datetime import datetime, timedelta


year = t.localtime(t.time()).tm_year


day = 24*60*60

hour = 60*60


if t.localtime(t.time()).tm_yday < 256:

    daysto256 = datetime(year, 1, 1) + timedelta(255) - datetime.now()

    timeto256 = daysto256 / timedelta(seconds=1)


    print('There are', m.floor(timeto256/day), 'days', m.floor(timeto256%day/hour), 'hours', m.floor(timeto256%day%hour/60), 'minutes', m.floor(timeto256%day%hour%60), 'seconds', "'till the programmer's day!")


elif t.localtime(t.time()).tm_yday == 256:

    daysto256 = datetime(year+1, 1, 1) + timedelta(255) - datetime.now()

    timeto256 = daysto256 / timedelta(seconds=1)


    print('Today is', str(t.localtime(t.time()).tm_yday) + "'th", "day of the year - happy programmer's day!")


    print('There are', m.floor(timeto256/day), 'days', m.floor(timeto256%day/hour), 'hours', m.floor(timeto256%day%hour/60), 'minutes', m.floor(timeto256%day%hour%60), 'seconds', "'till the next programmer's day!")


elif t.localtime(t.time()).tm_yday > 256:

    daysto256 = datetime(year+1, 1, 1) + timedelta(255) - datetime.now()

    timeto256 = daysto256 / timedelta(seconds=1)


    print('There are', m.floor(timeto256/day), 'days', m.floor(timeto256%day/hour), 'hours', m.floor(timeto256%day%hour/60), 'minutes', m.floor(timeto256%day%hour%60), 'seconds', "'till the next programmer's day!")


codersday
Вслед за Facebook и Google, Яндекс отключает свои сервера Jabber и таким образом закрывает один из крупнейших сервисов протокола XMPP в рунете и интернете вообще

https://geektimes.ru/post/280366/
Доклад Дениса Аникина на конференции HighLoad++ 2015 года.

Шикарный ликбез по масштабированию баз данных с простым объяснением буквально на пальцах и в картинках слайдов! Це для лiнивих! 😄👍

Хорошо объясняется что данные бывают горячие и холодные, т.е. востребованные и не очень.
Также объясняется почему современные реляционные БД финансово не эффективны под большой нагрузкой при их масштабировании, почему шардинг и репликация реляционных БД не решают проблему высокой нагрузки.

И дело не в реляционной модели данных...

Только представьте себе сколько решений-костылей порождает современная (пока ещё Фон-Неймановская) архитектура компьютеров с памятью по прежнему разделенной на ОЗУ, которое работает быстро, но не имеет постоянства памяти (persistence of memory) и ПЗУ, которое имеет постоянство хранения, но не имеет достаточной скорости работы.
Полагаю многие решения уйдут в прошлое с применением мемристорной технологии для конвергенции памяти и созданием на базе этой технологии общей памяти компьютеров и носителей - быстрой, объёмной и энергонезависимой с постоянным хранением. Уже есть прототипы, например технология носителей и памяти Intel Optane, но это уже другая история

https://vimeo.com/150101571

https://habrahabr.ru/company/oleg-bunin/blog/310690/ - стенограмма доклада

PS: Из недавнего - помните Яндекс перевёл почту с Oracle на PostgreSQL? У них свой способ экономии и повышения эффективности для почты и других сервисов. 😆😂
Technologique
Приложение мессенджера Google Allo стало доступно для установки в Google Play https://play.google.com/store/apps/details?id=com.google.android.apps.fireball
Google Assistant просто шикарен! 😄👍

Я использовал исключительно голосовой ввод.

Это уже AI, ассистент который умеет общаться, анализировать ввод, отвечать и давать различную информацию, запрашиваемую в свободной форме! 👍

Именно это и есть будущее поисковых движков!
Forwarded from Andrew Bednoff
Forwarded from Andrew Bednoff