Автосмена темы и обоев на Windows: делаем красиво

Вчера Google выкатили апдейт Chrome OS, который вносит в систему темную тему оформления. Хотя еще 2018 году Apple представили macOS Mojave, одной из ключевых нововведений в которой стала темная тема и динамические обои. Фишка оказалась настолько бомбезной, и её добавили в iOS 13 через год. Вскоре темная тема появилась и в Android 10… И вроде бы все хорошо, но в Windows (более распространенной десктопной ОС) темная тема оформления появилась в 2016 году в Unniversary Update и до сих пор эту функцию не довели до ума. Итак, в этом гайде я расскажу как допилить темную тему, плюс как сделать динамические обои.

Пишем скрипт

Итак, как происходит изменение темы и обоев на Windows? Правильно, через реестр. Его мы можем редактировать через командную строчку или же через PowerShell. Через командную строку, сколько бы я не пробовал, мне не удалось что-либо изменить. Поискав на форумах нашел способы редактирования реестра через PowerShell. Итак, осталось найти где же хранятся записи для смены темы и обоев.

В данной записи реестра хранится путь к установленным обоям
А в этой записи хранится параметр, отвечающий за тему приложений

В папке HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize содержится несколько записей, AppsUseLightTheme отвечает за темы приложений, а SystemUsesLightTheme за систему (панель пуск и таскбар). По желанию мы можем менять темы системы и приложений.

Кстати говоря, вот здесь можно задать настройки

В PowerShell менять реестр для смены обоев можно следующим образом:

Set-ItemProperty -Path HKCU:\Control Panel\Desktop -Name wallpaper -Value $path

Где вместо $path указывается путь к файлу. А тему:

Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -Value $value -Type Dword -Force

Где вместо $value указывается 0 для темной темы, а 1 для светлой.

Эти настройки применяются при логине пользователя, так что чтобы после изменения записей реестра параметры считались нужно перезайти в систему или же запустить следующую строчку в PowerShell:

RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters ,1 ,True

Собираем скрипт

К сожалению последняя строчка срабатывает не с первого раза, так что запишем её в цикл. Ну и для удобства впишем предыдущие команды в отдельные функции:

Function Set-WallPaper($Value){
Set-ItemProperty -Path HKCU:\Control Panel\Desktop -Name wallpaper -Value $value
}
Function Set-Theme($Value){
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -Value $value -Type Dword -Force
}
Set-WallPaper -value "path to your dark wallpaper"
Set-Theme -value 0 # dark theme
for ($i = 0; $i -lt 5; $i++) {
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters ,1 ,True
}
view raw dark.ps1 hosted with ❤ by GitHub

Собственно осталось автоматизировать процесс запуска данного скрипта. Можно было бы конечно два раза запускать один скрипт, который в зависимости от времени выбирал бы тему и обои, но у меня нет ни малейшего желания изучать как работать со временем в PowerShell. Так что напишем два скрипта, итак, второй скрипт для включения светлой темы:

Function Set-WallPaper($Value){
Set-ItemProperty -Path HKCU:\Control Panel\Desktop -Name wallpaper -Value $value
}
Function Set-Theme($Value){
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize -Name AppsUseLightTheme -Value $value -Type Dword -Force
}
Set-WallPaper -value "path to your light wallpaper"
Set-Theme -value 1 # light theme
for ($i = 0; $i -lt 5; $i++) {
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters ,1 ,True
}
view raw light.ps1 hosted with ❤ by GitHub

Если при запуске скрипта у вас не всегда меняются обои, то стоит увеличить количество итераций в цикле (вместо 5 вписать 10 например)

Автоматизация запуска скрипта

Для того что бы автоматизировать весь процесс я воспользовался планировщиком заданий.

Планировщик можно найти в меню Пуск в папке Средства администрирования Windows
В планировщике жмем правую кнопку мыши, затем создать простую задачу…
Выбираем название
Триггер ставим на Ежедневно
В данном случае задача для переключения на темную тему и обои, по этому выбираем удобное время
Действие: запустить программу
В качестве программы выбираем интерпретатор PowerShell, а в качестве аргументов указываем путь к скрипту

На этом все, осталось создать такую же задачу для включения светлой темы и обоев. Все бы хорошо, но как говорится нет предела совершенству. При запуске задания на секунду появляется окно интерпретатора, а хотелось бы чуда. Я нашел скрипт для скрытого запуска PowerShell-скрипта. Вместо pathToYourScrpt.ps1 пишем путь к скрипту, придется создавать два VBScript файла для каждого PowerShell-скрипта:

Dim objShell,objFSO,objFile
Set objShell=CreateObject("WScript.Shell")
Set objFSO=CreateObject("Scripting.FileSystemObject")
'enter the path for your PowerShell Script
strPath="pathToYourScrpt.ps1"
'verify file exists
If objFSO.FileExists(strPath) Then
'return short path name
set objFile=objFSO.GetFile(strPath)
strCMD="powershell -nologo -command " & Chr(34) & "&{" &_
objFile.ShortPath & "}" & Chr(34)
'Uncomment next line for debugging
'WScript.Echo strCMD
'use 0 to hide window
objShell.Run strCMD,0
Else
'Display error message
WScript.Echo "Failed to find " & strPath
WScript.Quit
End If
view raw script.vbs hosted with ❤ by GitHub

В планировщике, вместо PowerShell.exe указываем путь к скрипту, не забываем очистить аргументы

На этом все! В интернете можно найти кучу парных обоев, часто это будут обои из macOS и iOS. Ссылка на этот проект на Githubе. Всем добра!

Источники

  1. https://www.androidcentral.com/chrome-os-finally-getting-dark-mode
  2. https://en.wikipedia.org/wiki/Android_10
  3. https://en.wikipedia.org/wiki/IOS_13
  4. https://en.wikipedia.org/wiki/MacOS_Mojave
  5. https://trashbox.ru/topics/101690/yubilejnoe-obnovlenie-windows-10-obzor-novovvedenij#chapter-4
  6. https://docs.microsoft.com/ru-ru/powershell/scripting/learn/ps101/09-functions?view=powershell-7
  7. https://social.technet.microsoft.com/Forums/ie/en-US/72a9b4bf-071b-47cd-877d-0c0629a9eb90/how-change-the-wallpaperbackground-with-a-command-line-?forum=w7itproui
  8. https://levashove.ru/temnaya-tema-interfejsa-windows-10-ruchnoe-i-avtomaticheskoe-vklyuchenie/
  9. http://web.archive.org/web/20070216074902/http://blog.sapien.com/current/2006/12/20/schedule-hidden-powershell-tasks.html

Реляционные базы данных. Введение

В этой статье поговорим о реляционных базах данных и теоретических основах баз данных.

Данные и программы

Данные живут дольше программ. Программы часто меняются (именно поэтому существуют понятие версии ПО). Иногда с одними и теми же данными работают несколько программ одновременно. Поэтому данные принято отделять от программ, храня их в базах данных.

База данных — представленная в объективной форме совокупность самостоятельных материалов (статей, расчётов, нормативных актов, судебных решений и иных подобных материалов), систематизированных таким образом, чтобы эти материалы могли быть найдены и обработаны с помощью электронной вычислительной машины (ЭВМ).

Википедия

Базой данных, пускай и примитивной, могут выступать текстовые файлы.

Что не так с файлами?

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

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

В файлы очень легко записывать информацию в самый конец, однако сложно отредактировать запись в середине. Кроме того, чтобы что-то найти в файле, приходится его сканировать от начала до конца. Ситуация еще больше усложняется, если наш файл гигантского объема и просто не убирается на одном компьютере. И вот у вас уже несколько файлов, которые хранятся на нескольких компьютерах.
Что бы искать что-то в них, придется писать свой софт. А что делать если необходимо реализовать параллельное редактирование данных?

Для решения этих проблем были созданы программные надстройки, так называемые системы управления базами данных (СУБД). Более подробно здесь.

Основы реляционных баз данных

Данные в реляционных базах данных организованы в виде таблиц, каждая таблица имеет уникальное имя.

Пустая таблица

Строки в таблицах представляют отдельную сущность, их так же называют записью, иногда кортежем. Столбцы же представляют собой составляющий элемент данных, атрибут кортеж; аналог поля объекта если вы знакомы с ООП. Данные одного столбца имеют один и тот же тип. Все столбцы таблицы должны иметь уникальные для таблицы имена. Порядок следования столбцов определяется при создании таблицы. В любой таблице должен быть как минимум один столбец. В отличие от столбцов, строки не имеют определенного порядка, так как запись грубо говоря представляется как экземпляр заданного множества. Таблица так же может быть пустой, что означает что в ней нет записей, но она сохраняет заданную структуру.

Не удивляйся именам и датам, ведь в Скайриме шел 250 год 4 эры…

Так как строки в таблицах не упорядочены, то мы не можем получить запись по номеру строки, в таблице нет нумерации строк. В правильно построенных таблицах выделяют специальный столбец или группу столбцов — первичный ключ (primary key) — значения столбца (или комбинации столбцов) во всех строках должны быть уникальны. Таблица, в которой все строки уникальны, может быть интерпретирована как отношение (на англ. relation), что и объясняет название данной модели данных.

Связи между таблицами

В реляционных СУБД связь «потомок-предок» реализована посредством двух значений хранящихся в двух таблицах. Столбец одной таблицы, значения в котором совпадают со значениями столбца, являющегося первичным ключом другой таблицы, называется внешним ключом (foreign key). Одним из главных преимуществ реляционных баз данных — возможность извлекать связанные между собой данные, используя эти отношения.

race_id — внешний ключ, id в таблице Races первичный ключ

Транзакции

В приложении многое может пойти не так:

  • Может отказать аппаратное обеспечение
  • Может произойти исключительная ситуация внутри приложения, возможно последовательность операций над БД выполнена наполовину
  • разрыв сети может отрезать приложение от базы данных, при использовании клиент-серверных бд
  • несколько клиентов могут одновременно изменять одни и те же данные

Все эти проблемы обычно решаются при помощи транзакций. Транзакции — это способ группировки приложением нескольких операций записи и чтения в одну логическую единицу. По сути все операции записи и чтения в ней выполняются как одна: вся транзакция либо целиком выполняется успешно (с фиксацией изменений) или целиком завершается неудачно (с прерыванием и откатом к исходному состоянию). Транзакции обеспечивают выполнение требований ACID.

Принцип ACID

ACID описывает требования к системе, обеспечивающие надежную и предсказуемую ее работу. Принцип ACID состоит из четырех требований: Atomicity, Consistency, Isolation и Durability.

Atomicity — Атомарность

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

Consistency — Согласованность

Согласованность означает выполнение бизнес-правил: при выполнении транзакции БД должна переходить из одного нормального состояния в другое. Другими словами транзакция фиксирует только допустимые значения. К примеру в бухучете кредит должен сходится с дебетом. Если транзакция выполняется в базе данных удовлетворяющей данному правилу, то после выполнения транзакции она (база данных) должна удовлетворять этому правилу.

В ходе выполнения транзакции согласованность не требуется. Скорее всего между двумя подоперациями транзакции будет переход БД в несогласованное состояние. Однако, в силу атомарности и изолированности эта промежуточная несогласованность не будет видна.

Isolation — Изолированность

Во время выполнения транзакции параллельные транзакции не должны оказывать влияние на её результат. То есть параллельные транзакции выполняются будто бы последовательно. Требование изолированности вычислительно дорогое, поэтому современные СУБД предоставляют режимы работы не полностью изолирующие транзакцию.

Durability — Стойкость

Независимо от проблем на низком уровне (сбои в оборудовании или обесточивание системы) изменения, сделанные успешно выполненной транзакцией должны сохраняться. Другими словами, пользователь получивший подтверждение СУБД, об успешном выполнении транзакции может быть уверен, что при сбое сделанные им изменения не отменяться.


С развитием веба, резко возросло количество пользователей и данных. К современным системам обращаются тысячи, а то и миллионы пользователей. Сколько бы мы не улучшали наш сервер, он физически не может обслуживать столько подключений, не может хранить так много данных. Рано или поздно придется разместить БД на нескольких серверах. При использовании распределенных систем нужно обеспечить ее устойчивость к сбоям.

CAP-теорема

CAP-теорема гласит что в любой реализации распределенных вычислений гарантированно можно обеспечить только два из трех следующих свойств:

  • Согласованность данных — во всех вычислительных узлах в один момент времени данные не противоречат друг другу
  • Доступность — любой запрос к БД завершается корректным откликом, то есть БД всегда имеют считывать и записывать данные.
  • Устойчивость к разделению — расщепление распределённой системы на несколько изолированных секций не приводит к некорректности отклика от каждой из секций.

Подробнее

Вместо вывода

Это все что необходимо знать для работы с реляционными базами данных, в дальнейшем попробую пройтись по синтаксису SQL.

Мой первый опыт создания «большой» программы

Человек так устроен, что запоминает наиболее яркие моменты своей жизни. Одним из таких моментов для меня было преодоление психологической метки в 1000 строк кода. Описываемый проект разрабатывался чуть менее года назад, в рамках курса «Проектирование человеко-машинного интерфейса». И хотя педагоги объявляли целью данного проекта приобретение навыков проектирования и разработки интерфейсов программ, я немного вышел за рамки курсовой работы и столкнулся с некоторыми проблемами разработки, о которых будет этот блог.

Итак, прежде чем будем углубляться в подробности, замечу что большая часть требований относилась к оформлению курсовой работы, нежели к самой программе. Основные требования к ПО были:

  • язык программирования — Java
  • платформа интерфейса — JavaFX
  • под запретом использование любых баз данных
  • понятный интерфейс
  • вход по паролю, иерархия пользователей

Предметную область я выбрал «Успеваемость студентов на факультете».

Тема выдвигала следующие дополнительные требования к системе:

В системе должны поддерживаться режимы учета учащихся и результатов сдачи экзаменов, анализа сессии по семестрам, по факультетам, специальностям, генерации отчетов отличников и двоечников.
Teacher's main window
Преподавательское окошко

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

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

Схема «базы данных»

Паттерны проектирования я ещё не знал, и у меня получился громадный и ужасный код. К примеру, у каждого файла был свой класс, свой тип данных, и свой механизм записи. Таким образом я получил набор классов, отличающихся только по количеству и типу полей, а в остальном идентичных, к слову эти классы не были даже объединены интерфейсом. В конце концов я начал путаться в коде, код стал сложен для редактирования или добавления нового функционала. Сдал до конца недоделанную курсовую работу. Так как отпало желание, что-либо делать: каждое малейшее изменение порождало цепь других.

Посмотреть на проект можно тут: https://github.com/SirojiddinSaidmurodov/StudSystem

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

Вместо выводов

  1. Если реализация программы требует несколько сущностей, классов, стоит задуматься о применении того или иного паттерна. Так как при увеличении количества кода, рано или поздно что-либо придется менять. Паттерны проектирования позволяют выделить код расположенный к изменению таким образам, что это коснется только данной части программы.
  2. Базы данных, неважно выделенные или встроенные, весьма интересная технология упрощающая жизнь программиста. При использовании БД нет надобности о беспокойстве как будут сохранены данные, а когда данных много, а их в последнее время очень много, это становится критичным.

Атакуем social-media или как автоматизировать репост в соцсети на примере Telegram

Мой блог работает на WordPress, и здесь как и в большинстве сайтов небольшой трафик, почему так происходит? Большая часть трафика сейчас приходится на мобильные устройства. Кроме того, большая часть мобильного трафика исходит из мобильных приложений — клиентов соцсетей и мессенджеров. Крупные компании и организации давно ведут свои соцсети, обновляя свои сайты только важной информацией. К примеру в КФУ на сайте имеется довольно много статичных данных: информация о преподавателях, учебные программы, время работы и адреса подразделений и тд. Большая часть новостей постится в сообществах ВКонтакте.

Статистика распределения трафика via gs.statcounter.com

Увеличению мобильного трафика способствует два крупных фактора: увеличение количества мобильный устройств и человеческая лень (нам легче тапнуть по иконке приложения, чтобы получить контент, нежели набирать название сайта в поисковой строке). Что бы там ни было, сегодня расскажу как я пытался автоматизировать репост в соцсети и что из этого вышло

Встроенные средства репоста WordPress

Если вы покупаете подписку, то WP предоставляет обширную базу все различных плагинов, среди которых можно найти плагины для репоста в нужные вам сети. Ну а если вы пользуетесь бесплатной версией, как и я, то в WP есть встроенные средства интеграции с соцсетями. Настройки расположены во вкладке Инструменты -> Маркетинг -> Подключения. Можно так же просто wordpress.com/marketing/connections/ и доменное имя сайта. К сожалению WP публикует лишь начало поста и ссылку на нее.

В WP можно подключить Facebook Pages, Twitter, LinkedIn и Tumblr

Набор доступных соцсетей весьма скуден, что делать если я, к примеру, захочу репостить посты в Telegram канал?

Репост в Telegram

Конечно никто не мешает копировать весь материал и оформлять его в виде поста в канале, но это же скучно, да к тому же можно автоматизировать. Когда я вел свой блог в Telegram (в 2016 году), существовало несколько платформ бот-менеджеров (Manybot, Chatfuel), а так же множество ботов репостеров с WP или RSS. К сожалению Manybot и Chatfuel мертвы, боты репостеры тоже, большинство существующих платформ платные либо не могут парсить WP-сайты. До сих пор жив IFTTT, скорее всего из-за того что поддерживается средствами Telegram Inc.

Логика сервиса крайне проста, выбираем событие триггер, и действие.

Начать работу с сервисом крайне легко, регистрируемся, логинимся в необходимые сервисы, и создаем апплет. Для работы в Telegram нужно запустить официальный бот @IFTTT, и добавить его в свой канал как администратор. На сайте IFTTT можно настроить структуру отправляемого сообщения в Telegram.

Но к сожалению, почему-то репост в телеграм в нем работает криво, и текст кодируется в URL-encoding.

Я думал что это скорее всего на стороне WP, не найдя там настроек кодировки решил попробовать RSS. Да в WP есть RSS-лента, к слову большинство CMS тоже поддерживают RSS. Ссылка на RSS в WP: доменное имя сайта /feed/ .

К примеру ссылка на RSS моего блога:

https://keepeasy.tech.blog/feed/

Но RSS тоже не заработал, и к тому же RSS проверяется раз в час на предмет новых данных.

Кстати IFTTT хорошо справился с репостом в Facebook Pages, Даже текст отформатировал.

Instant View

Я решил не сдаваться и протестировать отправку ссылок на пост, вместо текста поста и все заработало. Но учитывая то, что вероятность перехода по ссылке на внешний сайт весьма мала, и именно из-за этого в Telegram ввели Instant View, я попытался сделать свой шаблон парсинга блога, так как изначально мой блог не поддерживал Instant View. Добавить свой шаблон не сложно, открываем страницу создания своих . Вставляем страницу, наподобие которой будет отслеживать Instant View.

Страница редактирования шаблона

Минимальный шаблон состоит из полей title и body. С помощью оператора @remove можно удалить с Preview нежелательные объекты, к примеру я удалил блок комментариев и лайков с WP. Подробнее можно почитать в документации. Если вы не знакомы со структурой сайта для которого пишете шаблон, то можете воспользоваться инструментами разработчика вашего браузера (на Chromium-подобных браузерах горячая клавиша — F12).

Итак, чтобы начать пользоваться шаблоном, нужно привести вашу ссылку на пост к следующему виду:

https://t.me/iv?url={{ссылка на пост}}&rhash={{хэш шаблона}}

Хеш шаблона, да и всю подобную ссылку можно получить нажав на кнопку View in Telegram наверху справа.

Ну а дальше можно встроить свой шаблон Instant View прямо в IFTTT, для этого в шаблоне сообщения Telegram необходимо вставить ссылку полученную на сайте Instant View вместо ссылки поста указать поле {{PostUrl}}. Не забываем включить предпросмотр ссылок (web page preview).

Вот так выглядит мой шаблон

На этом всё, прикрепляю использованные ресурсы:

0-post

Что там пишут люди в первом посте? Самое сложное в любом деле — это начать делать. Первые шаги в любой сфере наиболее трудные. Помню как сам некоторое время не мог сначала понять что такое процедуры и функции в Pascal, а позже не понимал велика ли разница, чтобы их синтаксически различать. Думаю прежде чем писать что-либо в блоге, неплохо бы представиться. Итак, первый пост начнем по доброй традиции:

Who is this guy?

Меня зовут Сирожиддин. Я студент Казанского Федерального Университета, направление обучения — прикладная информатика. Родом я из солнечной Ферганы. Вне стен университета, люблю читать, обожаю Айтматова и Солженицына; смотрю фильмы, очень много фильмов. Прежде чем поступить в КФУ, я учился в филологическом лицее, изучал иностранные языки, как-то английский и немного французский. У меня семья филологов: родители познакомились учась в педагогическом, но только мама работала по специализации (родители для меня ярчайшие примеры того, что не всегда удается работать по специализации, жизнь диктует свои правила). Учась в лицее увлекся компьютерами, некоторое время вел микроблог с новостями мобильного рынка и обзором приложений, но пришлось его забросить, так как нужно было готовиться к поступлению в вуз, а в филологическом лицее не преподавались точные науки.

Это я

В первые же дни учебы в вузе я понял что, подготовился весьма плохо, Паскаль не знал, математику не понимал, да и стресса добавляло и то, что уехал далеко от родных краев, и почти никого вокруг не знал. Долгое время во мне жило желание вернуться, то что ничего не получится. После первой сессии немного успокоился, хотя и закрыл её на тройки: платникам можно, к слову некоторые контрактники вообще не парятся по этому поводу, главное чтобы не было пересдач. Со второго семестра начал что-то схватывать, стал понимать на какие предметы стоит потратить больше времени, появился кое-какой подход к учебе.

Почему веду блог?

На одной из лекций по истории, лектор как-то сказала, что вуз по большому счёту направляет студентов, и за большую часть образования ответственны сами студенты, если студент сам не старается, то вуз вряд ли сможет чем-то помочь. Эта мысль была прямым отражением изменений в моем подходе к обучению. В лицее, в школе нам вели уроки и давали домашние задания, участие на уроке и успешное выполнение ДЗ гарантировали хорошую оценку (знаю что оценка не показатель образования, но всё же). В вузе такое не прокатило, обучение в вузе потребовало навыка, которому нигде не обучают — умение учится. К сожалению, даже сейчас не могу сказать что у меня хорошо получается учиться, и главная проблема, которую я не могу преодолеть — это мой излишний идеализм, иногда переходящий в максимализм. Что бы там ни было, новый подход предполагал то, что кроме чтения учебников, участия в лекциях/семинарах и выполнения домашних задания (практических работ?), нужно черпать знания из других источников. Первые такие источники для меня были форумы и статьи с различных сайтов. Позже начал смотреть некоторые видео с Youtube, смотрел некоторые курсы на Stepik и Coursera. А сейчас чаще заглядываю в документацию того или иного продукта, возможно изменилась проблематика, а возможно и подход.

Все это привело к тому что приходится обрабатывать огромное количество информации. Что-то запоминается сразу, а что-то упускается, что-то забывается, а что-то требует осмысления, глубокого анализа. Я конечно записываю лекции в блокнот; проходя онлайн курсы, конспектирую. Но в этом случае нет других читателей, кроме меня. Я пишу конспекты для себя, иногда без капли ответственности могу опускать то, что считаю не нужным, в итоге получается набор несвязных предложений, а иногда и проста схема, что бы быстро что-то вспомнить при необходимости.

Ведение блога, это своего рода knowledge sharing, попытка что-то рассказать, и что бы этот рассказ был рассказом, а не конспектом, нужна структура. Когда приходится что-то кому-то объяснять, нужно самому быть хорошо подготовленным, кроме того если вы усваиваете материал с целью преподавать, то данный материал усваивается лучше (источник). Так же по идеи этот блог должен меня замотивировать что-либо изучать: чтобы писать о чем либо, нужно самому разбираться в этом, да люди читающие блог возможно оставят свой комментарий, как можно что-то сделать лучше. Ну а на выходе мы имеем блог-сборник статей, а может коротких постов о том что я изучал, а может только собираюсь.

Так о чем всё-таки будет блог?

В основном в блоге будет излагаться моё глубоко субъективное мнение, иногда стереотипное😀. Ну а если серьёзно, блог будет посвящен IT-сфере, программированию и Computer science в целом; возможно буду писать над чем работаю/работал. В основном это будет оформлено в виде статей, которые будут поститься раз в неделю, возможно чаще, возможно реже. Пока есть несколько идей серий статей, но они пока в планах, возможно что в ближайшее время не смогу их написать. Гораздо чаще в блоге будут появляться мини-посты, скажем так обновления моего текущего состояния, может просто tips and tricks. Возможно так же буду постить обзоры курсов, которые прошел, или книг, оставивших впечатления. На данном этапе мои видения блога весьма расплывчаты. Одно дело репостить новости, другое дело пытаться писать что-то свое.

Кто мой потенциальный читатель?

Все желающие, в основном мой блог будет интересен тем, кто только учится, студентам. Возможно кто-то найдет решение своей проблемы. Аудитория в широком аспекте ограничена теми, кто интересуется разработкой ПО, информатикой (никогда не понимал почему Computer science переводят как информатика, ну да ладно, об этом позже) и смежными науками. Я буду всем рад!

Есть что мне сказать?

Не стесняйся, пиши мне на почту, или отправь сообщение прямо в WordPress (без регистрации и СМС). Кроме того можешь написать в любой соцсети, контакты прикреплены в шапке сайта. Можешь оставлять комментарии к постам. Так же в скором времени попытаюсь продублировать блог в соцсетях, сможешь читать меня там где тебе удобней.