Udemy — можно ли чему-то научиться бесплатно?

Если кратко: шансов у вас очень мало, проходите мимо.

Есть у меня в городе один магазин, который я ласково называю «грязи». На самом деле он называется Grazie. Udemy напоминает мне его своей ценовой политикой, там пока не увидишь скидку в 90% не стоит ничего покупать. Разница только в том, что в магазине обувь в целом чуть лучше рынка, а Udemy часто демонстрирует дно.

Основная проблема платформы — низкий порог входа, прям вообще низкий. Udemy готова продавать любого автора, отвечающего минимальным требованиям качества. Любой может зайти и опубликовать свой курс. Любой. Любой, кто думает, что сможет легко заработать денег. Если там можно про продавать курсы по $100 и на некоторых курсах можно наблюдать тысячи зачисленных, очевидно становится, что заработать $100’000 можно с небольшими усилиями. Записать кое-как звук со слайдами — небольшая техническая проблема. (далее…)

Всемирный DevOps

Картинка из свежего курса по DevOps.

С одной стороны авторы хотели визуально охватить весь мир, чтобы показать как всё глобально, но менеджеры находятся где-то в Германии, а разработчики — где-то в Индии.

OpenSAP или чему можно учиться бесплатно в мире SAP

В мире SAP эта платформа MOOC хорошо известна, такой узкопрофильный аналог Coursera. Как они сейчас пишут на своём баннере: «5 millions course enrollments». Это если сложить все курсы, можно проверить, но это тема другого разговора.

Например: из недавнего был очень хороший курс Building Apps with the ABAP RESTful Application Programming Model. 25000 зачисленных это много, средний курс на платформе собирает примерно 5000-10000 зачисленных. Это в целом немного, а если с Coursera сравнивать — то эти цифры унизительно малы, впрочем миллионы регистраций на Coursera есть на курсах широкой специализации (типа Python), а тут у нас язык даже не из первой двадцатки TIOBE. В этом рейтинге ABAP сейчас находится на 35-ом месте с долей 0.35%. Совпадение чисел — действительно совпадение.

Кстати, давайте посчитаем если у Python 11,03% против 0,35% у ABAP, то это означает 30-кратную разницу. Значит 25000 регистраций ABAP сравнимо было бы с 750`000 регистраций у Python. Очень достойный результат.

Большое отличие платформы OpenSAP — курсы полностью бесплатные только в момент запуска. По завершении курса бесплатная карета превращается в бесплатную тыкву, примерно такую же как Аудит у Coursera. То есть: нет тестов и сертификата, можно только «смотреть видосики в интернете».

Для меня режим «аудит» не подходит, так как отсутствие кнута(тестов) и пряника(сертификата) существенно снижает мотивацию и концентрацию на материале.

Есть один интересный курс на Writing Testable Code for ABAP, я его пропустил в своё время. А за реактивацию (превращение тыквы обратно в карету) они обычно просят $59, с редкой 50% скидкой по праздникам.  В прошлом году в честь сами-знаете-чего-когда-все-стали-сидеть-дома OpenSAP открывали обратно за бесплатно многие свежие курсы, но этот конкретный курс под акцию не попал.

Если вам жалко столько денег, то есть метод получить один курс бесплатно на выбор.

Для этого надо пройти курс SAP’s Integrated Intelligent Suite, вполне годный обзорный курс. Этот курс надо завершить и запостить об этом запись в твиттере с правильными хештегами. Для этого даже завёл себе аккаунт в твиттере: я способен и на такие непотребства, если это сэкономит мне целых $59. И вот примерно через месяц пришло письмо счастья с кодом для реактивации, который я знаю куда применить.

Следите за обновлениями на OpenSAP, ловите интересные курсы, пока они бесплатные.

Например: буквально завтра уже запускается курс Efficient DevOps with SAP. Налетай!

Краткое содержание:

  • Week 1: Introduction to DevOps
  • Week 2: CI/CD with ABAP (On-Premise)
  • Week 3: Delivery of Cloud Applications
  • Week 4: Hybrid Change and Test Management
  • Week 5: Operation of Your Solution and Summary
  • Week 6: Final Exam

The Social Dilemma и Google-Яндекс

Посмотрите сабж, если не видели.

И раньше в этом маленьком уютном бложике не было рекламных баннеров (Яндекса и Google) ни сверху, сбоку, ни снизу. Может даже не сколько из-за альтруистических мотивов и любви к вам, мои дорогие, а сколько из-за веры в то, что больше 10 долларов в год на вас всё равно не заработаешь.

Если мы с вами получаем что-то бесплатно, то как известно, товаром являемся мы с вами.

В этом же бложике для того чтобы убедиться, что меня читают, были установлены до недавнего времени счётчики Яндекса и Google.

Но вот какой информации я их лишил — раньше они знали, сколько посетителей приходит от конкурирующих поисковиков. Знали и все детали вашего поведения на сайте — быстро ли вы уходили с сайта, смотрели ли вглубь, на каких фрагментах вы останавливались особенно, какие блоки вы выделяли мышью. Уйма информации.

Теперь они этого не знают, ну и не знаю этого и я. Поэтому оставляйте комментарии, пишите мне.

Счётчики-то я убрал, однако в поисковых системах по-прежнему числюсь. Они по-прежнему будут меня индексировать и показывать меня в результатах вашего поиска. Они знают, как часто показывают вам меня и с каким нетерпением вы кликаете по ссылке на мою статью.

И вот интересный вопрос: если я убрал счётчики Яндекс-Метрики и Google-Аналитики, то повлияет ли это на посещаемость, если 95% посещений на этот обеспечиваются поисковыми запросами в Яндекс и Гугл в долях примерно 50 на 50. Может я стреляю себе в ногу…?

Let’s dive into Data science

How would you define a data scientist and data science?

Data science is what data scientists do. That’s what smart guys say.

«Data» because this is all about data, obviously. And «Science» beacause it is an open field and no fixed objective. We have to make assumptions and refute them. We do the guess-work and and try to back them up with evidence.

Yeah science bitch! (c) Jesse Pinkman

On the contrary, programming is mostly crafting than science. Because often programmer have objective in mind. Also he have tools and sequence of steps to obtain that objective.

What industry are you passionate about and would like to pursue a data science career in?

I’m a developer in ERP software for 15 years. I like accounting, linked documents — it’s perpetual blood flow of any company. Non-finance operations are often finance, because they are somehow affect final profit/loss. How and why? I hope Data Science will give me some insights on that subject.

What are the ten main components of a report that would be delivered at the end of a data science project?

 

  • At first, cover page is ultimate face of your work. Prepare your costume before performing. It should not confuse anybody.
  • Table of content — for easy navigation.
  • Abstract or summary — quick overview of document in three paragraphs.
  • Introduction — like setup in comedy, introduces cast and scene.
  • Literature overview — you are not first who dig around, reader may be interested in your story in context of the other stories. You-name-it-verse. Sure, your report will give new insights, not described before.
  • Methodology — as always Sherlock Holms did: you shoud explain to DrWatson what data you paid attention to and what method you applied to. Deduction is not the only method for you.
  • Results — like punch-line in comedy, your reader should catch your joke here.
  • Discussion — you must be prepared, that not all readers will be impressed by your story in a flash. You should answer them in advance.
  • Conclusion — story never ends, nice section to place cliffhanger.
  • Acknowledgements — this section helps to place list of people you are grateful. It will be useful when you receive an award for this work.
  • References — the same as in the previous paragraph, but for documents.
  • Appendices — bonus section, storage for materials, referenced from body of your report. Please do not include here jokes that didn’t work.

 

What is Data Science?

Попал в подкаст «За чашкой чая», эпизод 16. Можно слушать на любых доступных платформах.

Попал в подкаст «За чашкой чая», эпизод 16. Можно слушать на любых доступных платформах: Anchor, Apple, Yandex.

Под катом текстовая расшифровка моей части. Хотите — слушайте, хотите — читайте.

(далее…)

Внедрение вредоносной команды интерпретатора (ABAP)

Эффект старой плёнки.

Есть в SAP HCM стандартная транзакция PAR1 (Гибкие данные сотрудников). Но при внедрении у пользователей были хотелки, которые в стандарте невозможны. Скопировали транзакцию в Z-область. Допилили её так, как хотелось пользователям. Добавили инфотипы, ещё кое-что по мелочи. Дело нехитрое.

Затемнение.

Прошло десять лет.

(далее…)

Про Shared Memory Objects и немного про память, SHMA, SHMM

В обычной жизни мы не паримся с памятью в ABAP, сборщика мусора как бы нет, глобальной памяти нет.

В самом простом случае у нас есть то, что называется транзакцией (не путать с транзакцией базы данных), что можно определить как «приложение» на нашем собственно говоря сервере приложений. Транзакция всегда ассоциирована с определённой именованной программой.

И вот пока приложение работает, оно потребляет память в виде переменных, экземпляров классов, массивов (также известных как «внутренние таблицы»). И если посмотреть на стек вызовов, то он упирается во входную точку начала этой программы. Ничего ABAPовского за пределами этой точки не существует. Одно приложение не может получить доступ к данным другого приложения, только через какие-то обходные манёвры, например: через постоянное хранилище (СУБД), через взаимные блокировки и прочие костыли. Как только приложение завершает работу, вся его память высвобождается. А приложения долго не работают, потому что они уже в некоторой степени атомарны (то есть как бы уже не монолит, но ещё не микросервисы).

Есть уже случае чуть посложнее, например: есть веб-сервис, слушающий входящие соединения, или одно «приложение» вызывает другое «приложение» через SUBMIT REPORT . Но подход вы уже уловили, это и называется SAP LUW, то есть Logical Unit of Work. Получается, что стек вызовов и контекст существуют неразрывно только внутри него.

И как обычно бывает, изредка появляется необходимость перепрыгнуть заборы.

Один из известных костылей -оператор IMPORT/EXPORT MEMORY ID,  который позволяет перебрасывать переменные (структуры, массивы) между приложениями, но только если они существуют в одной пользовательской сессии. Например Приложение-А вызывает Приложение-Б, Приложение-Б генерирует данные, закидывает их в ячейку памяти X, после чего завершает работу, управление возвращается в Приложение-А, которое считывает данные из ячейки памяти X, профит!

Разговор был бы не так интересен, если бы мы остановились на этом. Но перепрыгнув забор, мы обнаруживаем ещё один забор!

А если мы хотим перебросить данные между разными пользовательскими сессиями?

Для примера кейс будет таким: есть чистый слушающий HTTP-сервис, в котором мы хотим организовать что-то вроде сессии.

HTTP-сессии в ABAP могут быть как stateless, так и stateful. По сути их отличие в том, что этот пресловутый SAP LUW растягивается на всю пользовательскую сессию (stateful) или только на один http-вызов (stateless). В stateful-режиме сервис работает со своими причудами, например: обновлённый код сервиса не подхватывается на лету, чтобы изменения в сервисе вступили в силу нужно завершить сессию. Так же и в обычном ABAPe: пока запущена программа со всеми диалоговыми шагами обновлённый код не подхватывается — необходимо перезайти в транзакцию. Получается в рамках HTTP необходимо сделать log-off, что очень редко случается целенаправленно в жизненных реалиях, гораздо чаще сессия умирает по таймауту.

И вот кривая дорожка сомнительных архитектурных решений привела нас к небольшому челенджу — организовать хранение данных сессии при stateless-сессии HTTP.

Окей, вызов принят. Представим типичный сценарий:

  • Пользователь первый раз заходит на страницу => нет куки сессии => выставляем новый случайный куки (надо его куда-то записать) => рендерим страницу с формой для пользователя => Всё закончилось и очистилось, развязка сезона
  • Ура новый сезон => Пользователь что-то сабмитит => открывается другая страница => есть куки сессии => (надо значения сессии достать) => проверить что пользователь насабмиттил => (положить насабмитенное в сессию) => отрендерить страницу для пользователя, что насабмитилось успешно => снова апокалипсис, миру конец
  • Пользователь чего-то тыкнул => ещё одна страница => есть куки сессии => (надо значения сессии достать) => отрендерить значения на странице => и непонятно, продлит ли пользователь этот бесконечный сериал на следующий сезон или нет

Обыкновенным ABAPом красные места можно тупо реализовать через БД или другой как-мы говорим-у нас-в-деревне «персистент сторэдж», мы же это умеем. Но мы же дошли досюда не за простыми решениями.

Существует возможность создать экземпляр объекта и положить его в какую-то суперглобальную область памяти, существующую вечно внутри сервера приложений. Соответственно, в любой момент можно попробовать взять этот объект во временное пользование (на чтение или на изменение). И это будет тот-же-самый-объект со всеми его атрибутами. Он будет существовать до перезагрузки сервера или до его ручного уничтожения через кнопку в админке (SHMM). Вот вкратце история. А под катом немного подробностей.

(далее…)

Если вас добавили в телеграмм-группу, но вас это не обрадовало…

Вот такой Бумеранг Добра:

Всем добра и любви.

Есть в мире доброхоты, которые лучше вас знают, в каких группах вам участвовать.

Если вас добавили в группу Телеграм, но вас это не обрадовало, то отметьте эту группу как спам, а после этого самостоятельно покиньте группу. Вполне вероятно, что этого хватит на неделю-другую, а затем вас снова добавят.

Если вам и этого будет мало, то в настройках безопасности есть настройка, кому можно вас добавлять в группы. По умолчанию там может стоять «Everybody»(Все, Кто угодно), но вы можете выставить значения «My contacts»(Мои контакты).

Шлю всем лучи здоровья.

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

Интересно, можно ли как-то выяснить, кто добавляет меня в группу?

PS. Иногда, раз в год, бывает неудобно, но есть варианты. Вам могут прислать специальную ссылку, по которой вы можете вступить в группу самостоятельно. 

PPS. Если группа совсем левая, то один из косвенных способов — посмотреть, кто из ваших не очень давних контактов является её членом. Если там только одна риэлторша Гульчехра, то есть шансы что это она. Просто она так любит благотворительность, что всех своих контактов пытается добавить в группы, где это промотируется. 

PPPS. Отписался от многих каналов в телеге, через специальную прослойку я конвертирую Телеграм в RSS потоки (https://rsshub.app/) и добавляю их себе в Feedly. URL выглядит примерно так: https://rsshub.app/telegram/channel/<ChannelName>.

Таким образом, в телеге остались только те каналы, в которых мне требуется интерактив, их совсем немного. Так что читаю каналы только тогда, когда сам захочу. Пока работает.

PPPPS. Говорят, что «всем добра» это пассивная агрессия. Скорее всего, так оно и есть.