Как сделать физический диск внутри виртуальной машины.

Недокументированный способ проброски реального диска внутрь виртуальной машины VMWare на хосте ESXi.

Мыльный калькулятор / Калькулятор щёлочи

Всех приветствую!

Несколько лет назад я стал учить Java Android. На работу меня программистом Java никуда не брали – то нет опыта работы в команде, то уровень Джун (т.е. если по-русски – младший специалист), то нужен молодой лет двадцати…Я как-то не привык в таких случаях отступать, по этому создал свой аккаунт плеймаркете, выбрал тему приложения близкую мне и опубликовал. Однако, в этом году Гугл стал немного не в адеквате, отключил монетизации, по тому я решил сменить платформу на Huawei. Этот поганец тоже оказался не лучше – нет работающего механизма монетизации для российских разработчиков. Остались НашСторе и РуСторе, но как я писал уже свою статью, НашСторе начал за здравие и потом йок…Остался РуСторе, хотя и у него тоже есть неразработчико-ориентированная позиция. Так вот…

Рис.1

Рис.1

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

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

Самое приложение на RuStore находится здесь, а на Play Market (только для Белоруссии и России) здесь.

Шахматы-онлайн (обновлено 18.02.2023)

Всех приветствую!

Сегодня произошло в моей творческой карьере достаточно важное событие. Я таки завершил разработку наиболее серьёзного (по моим меркам) мобильного приложения – “Шахматы-онлайн”, и довёл его до стадии альфа-тестирования

Кстати, мой шахматный сервер развернут на VPS – партнёрская ссылка:

https://beget.com/p1223557

Я действительно могу рекомендовать этого хостера как наиболее надежного и дружелюбного. За три года хостинга не было никаких проблем, а все вопросы к службе поддержки решаются быстро и профессионально. У хостера есть бесплатные платформы, такие как WordPress, Jumla, движки интернет-магазинов и т.п. На днях я решил перейти у него с хостинга на VPS. Процесс оказался настолько прост, что это мне удалось сделать самостоятельно за один день. И как было не сделать, если у Beget есть разные стандартные пресеты операционных систем, в частности такие как LAMP-сервер. VPS очень масштабируемы – можно начать сначала с самой скромной конфигурации, а затем расширить число ядер, объем оперативной памяти и т.п. Что меня ещё удивило, что компания эта сама является регистратором доменов, по этому когда я регистрировал свои домены, цены на них оказались значительно ниже остальных (возможно оно и сейчас так). В общем, кто меня знает – ради пары рублей я хрень рекомендовать не буду, и уж тем более ей пользоваться ради экономии этих самых пары рублей.

Приложение позволяет играть, что характерно, в шахматы, причем по двум правилам. Первые – классические (рис.1), о которых все знают и тут останавливаться особо не на чем; вторые – малоизвестные, но очень интересные на мой взгляд – это шахматы Фишера (рис.2) или как их иногда называют Шахматы-960. Предложенный некогда вариант 11-м чемпионом мира по шахматам – Робертом Фишером, очень понравился мне. Ради возможности играть по второму варианту, я и решил замутить это приложение. Правила шахмат Фишера практически ничего не меняют в обычных, кроме как начальную расстановку фигур на поле – они располагаются случайно, пешки расставляются аналогично классическим шахматам.

Рис.1. Классические шахматы

Рис.1. Классические шахматы

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

Рис.2. Один из 960 вариантов начальной позиции шахмат Фишера

Рис.2. Один из 960 вариантов начальной позиции шахмат Фишера

Подобная расстановка позволяет игроку продемонстрировать не шахматную эрудицию, а мышление. Ведь не секрет, что много в партии зависит от первых нескольких ходов, и многие шахматисты просто выучили наиболее частые шахматные дебюты, в следствии чего шансы на успех всей партии существенно возрастают. Расстановка Шахматы-960 умножает на 960 количество вариантов шахматных дебютов, выучить которые практически невозможно. По этому игрок оказывается каждый раз в новой для себя позиции, заставляющей по новому строить свою тактику.

Теперь немного по самому приложению

После открытия приложение запросит от вас никнейм (рис.3). Введите удобное для вас имя.

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

Рис.3. Начало работы с приложением

Рис.3. Начало работы с приложением

После установки соединения с сервером, вы оказываетесь в списке игровых столов (рис.4).

Рис.4. Список игровых столов

Рис.4. Список игровых столов

Здесь можно создать свой собственный со своими правилами удобным для вас цветом стороны (рис.5), либо присоединиться к уже существующему, приняв правила этого стола (рис.6).

Рис.5. Создание нового игрового стола.

Рис.5. Создание нового игрового стола.

Рис.6. Присоединение к существующему столу

Рис.6. Присоединение к существующему столу

Если вы присоединяетесь к пустому столу (за которым нет игроков), то у вас появляется возможность изменить его правила также, как если бы вы создавали новый игровой стол. Отсутствие игрока за столом отображается знаком “-//-” зелёного цвета на стороне той стороны-цвета, где игрока нет, либо с двух сторон, если за столом нет игрока. Полностью занятые столы двумя игроками могут в списке не отображаться совсем.

Оказываясь за столом, за которым кроме Вас никого нет, приложение находится в режиме ожидания присоединения другого игрока-оппонента (рис.7).

Рис.7. Приложение в режиме ожидания подключения оппонента.

Рис.7. Приложение в режиме ожидания подключения оппонента.

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

При этом, если вы просто стандартно закроете приложение или переключитесь на другое приложение, то партия будет продолжать находиться в режиме игры, однако, и игровое время будет также считаться (такое действие НЕ приведет к остановке или прерыванию игрового времени).

После присоединения другого игрока к партии, надпись “Ожидание подключения игрока” исчезнет и приложение перейдет в режим готовности каждого игрока (рис.8). В этот момент каждый из двух игроков должен сообщить о своём намерении играть партию, кликнув по кнопке “Предложить новую игру”. Если другой игрок уже опередил Вас в намерении начать партию, то кнопка приобретёт вид “Согласиться на новую игру”, сохраняя при этом тот же смысл.

Рис.8. Ожидание готовности каждого игрока

Рис.8. Ожидание готовности каждого игрока

После того как оба игрока выразили намерение играть партию, приложение переходит в режим игровой партии, а игровое время начнет счет (рис.9).

Рис.9. Ход игровой партии

Рис.9. Ход игровой партии

В это режиме доступны следующие действия: произвести ход, сдаться, предложить игру, покинуть игровой стол признав при этом своё поражение. Когда один игрок предлагает ничью, другой получает на экране уведомление (рис.10).

Рис.10. Уведомление, когда другой оппонент предлагает ничью.

Рис.10. Уведомление, когда другой оппонент предлагает ничью.

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

Для совершения хода кликните по своей фигуре один раз чтобы выделить ту фигуру, которой собираетесь ходить (рис. 11). При этом также буду подсвечены все доступные ходы этой фигуры. Если данной фигурой походить невозможно (либо нет свободных клеток, либо ход приведет к шаху “своего” короля), то подсвеченной будет только эта фигура (рис.12).

Рис.11. После клика на пешку e2. Подсвечиваются два возможных хода на e3 и e4, также подсвечивается сама клетка пешки e2.

Рис.11. После клика на пешку e2. Подсвечиваются два возможных хода на e3 и e4, также подсвечивается сама клетка пешки e2.

Рис.12. Слоном c1 невозможно походить, т.к. он заблокирован другими фигурами, по этому подсвечивается только клетка слона на c1.

Рис.12. Слоном c1 невозможно походить, т.к. он заблокирован другими фигурами, по этому подсвечивается только клетка слона на c1.

Повторный клик по подсвеченной фигуре снимает с неё выделение. Если в момент выделения одной фигуре кликнуть по другой, то выделение переставляется на другую фигуру, также подсвечивая доступные её ходы.

Для выполнения хода нужно кликнуть по одному из подсвеченных полей кроме поля, где находится сама фигура (Рис.13).

Рис.13. После того как была выделена пешка e2, клик по доступному полю на e4 привел к ходу пешки e2e4.

Рис.13. После того как была выделена пешка e2, клик по доступному полю на e4 привел к ходу пешки e2e4.

Для выполнения рокировки необходимо произвести “длинное нажатие” на соответствующую ладью пока это не приведет к перемещению фигур (рис.14). Если “недодержать” длительный клик, то программа “решит”, что вы хотите просто походить ладьёй вместо рокировки и выделит ладью.

Рис.14. Выполнение рокировки. Нужно длительно нажать на клетку h1, пока это не приведет к перестановке фигур.

Рис.14. Выполнение рокировки. Нужно длительно нажать на клетку h1, пока это не приведет к перестановке фигур.

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

Актуальные ссылки на скачивание:

RU-STORE:

https://apps.rustore.ru/app/com.elvinto.elvintochess

Play Market:

https://play.google.com/store/apps/details?id=com.elvinto.elvintochess

На моём домене:

https://chess.elvinto.ru/downloads/app-release.apk

Начало программирования вообще с нуля. Часть 1

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

К моменту прочтения этой статьи, вам желательно иметь навыки продвинутого пользователя. Это действительно необходимо, в ином случае вы несколько спешите заниматься программированием и даже погружаться в этот мир, так как сложно объяснить что такое спидометр, если человек не знаете в чём измеряется расстояние и как выглядят часы. Однако, если вы способны самостоятельно найти и прочитать в Дзене эту статью, то будьте уверены – вы на правильном пути, и понемногу уже можно начинать)).

Компьютеры сейчас практически в любых электронных устройствах – стиральные машины, холодильники, утюги, термометры, не говоря уже о мобильниках, моноблоках и т.п. В среде информационных технологий это принято называть ёмким словом «железо», а у программистов принято называть «устройство». С точки зрения программирования, компьютер – это обычный калькулятор с расширенным набором функций. Единственное, что отличает его от калькулятора, это то, что в компьютере вы одной командой можете запустить выполнение сразу миллиарда различных действий, а в калькуляторе только одно (умножить, разделить и т.д.). Такое получается по тому, что в любом компьютере действия выполняются по программе, т.е. заранее подготовленной последовательности команд. Вы их подготовили, убедились, что всё верно, и запустили выполнение. И вот этот набор команд начал выполняться до тех пор, пока не завершится выполнение всех команд, пока их выполнение кто-то не остановит специальной командой, либо пока в коде что-то не сломается, т.е. была ошибка, её не заметили, но проявилась она не сразу, а по мере выполнения. Такое поведение в компьютерах принято соответственно называть терминами «запустить программу», «прервать выполнение программы», «ошибка выполнения программы». Часто эти термины встречаются в англоязычном представлении:

run, exec, execute – запустить выполнение
break, abort, cancel, terminate, stop, exit, kill, die – прервать выполнение
run-time error – ошибка выполнения

Вообще, если строго говорить, то англоязычного очень много в программировании, если конечно вы не хотите изучать только язык 1С и ничего больше, но как правило, это маловероятно. Однако, английский язык вам специально изучать не нужно, просто в этом нет необходимости. Во время изучения какого-либо языка программирования, вам так или иначе нужно будет запоминать команды, что они делают, а их названия достаточно отождествлены с их смыслом. Например, команда input (пер.: ввод, подвод, подводимый) в языках программирования – это ввод данных, по смыслу подходит. Но если вы обладатель хороших знаний английского языка и встречаете команду print (пер.: печатать, напечатать, печатный), то чисто английский вам мало поможет, а может даже и навредит, т.к. на самом деле никуда на бумагу печатать ничего не будет, а это просто вывод на экран строки символов. Эта команда – история программирования, идёт с тех времен, когда на клавиатуре не писали, а печатали, а на экране синхронно выводился текст; говорили не «писать текст программы», а «печатать текст программы». Также лепту внес и древний язык бейсик, где команда, если не ошибаюсь PRINT#1, как раз выводила текст на тогда ещё матричный принтер. В общем, в современном мире программирования это вывод на экран строки текста, причём на большом количестве языков программирования. Ну привыкли все к этой команде, зачем менять. По этому нужен ли английский знать, ну так, нужен, но не в этом. Пригодиться язык может только для того, чтобы читать англоязычные форумы, где публикуют большое количество решений различных проблем, как то сделать, как это, а почему у меня не работает код, который написал, а что нужно написать, чтобы это заработало. Я часто бываю на этих форумах, но пользуюсь либо Гуглом для перевода, либо Яндексом))…Но уже сейчас замечаю, что что-то стал понимать и без переводчика, причём иногда даже если пишут фразу «Wt u know about…» (What you know about… – что вы думаете о…) или «I lkn 4…» (I looking for… – я ищу…). Опять таки, по многим языкам программирования есть огромное количество и русскоязычных форумов.

Что внутри компа?

Внутри любого компьютера (компа), есть следующие основные вещи:

1. Процессор, которым часто называют ящик на столе, который на самом деле системный блок. По факту процессор – это большая микросхема внутри системного блока, в которой и происходят все вычисления и координация действий всего компьютера.
2. Оперативная память, которая работает очень быстро, но способна хранить в себе данные только пока компьютер включен (синонимы – ОЗУ. RAM, DDR).
3. Постоянная память, которая работает намного медленнее оперативной памяти, но способна хранить информацию даже если всё выключено (жесткие диски – HDD, твердотельные диски – SSD, флешки)
4. Периферия – устройства соединяющие все внешние устройства (клавиатуры, мыши, принтеры, наушники, мониторы, очки виртуальной реальности, сетевые карты и т.п.) с процессором и оперативной памятью. Функционал периферии выполнен как правило на материнских платах (возможно этот термин вам уже встречался) и устройствах размещенные непосредственно на них. Однако есть и периферия, которая выполнена вне материнских плат, например, внешние жесткие диски, внешние аудио-карты для написания музыки, внешние устройства для захвата видео изображения и т.п.
С точки зрения программирования, всё что пишет программист – это написание функционала взаимодействия между этими устройствами. И вот тут есть важный момент, о котором чуть подробнее.
Работа компьютера с точки зрения программирования сводится к следующему принципу на протяжении многих десятков лет:

1. Ваша программа загружается из постоянной памяти в оперативную при помощи другой (системной) программы.
2. В оперативной памяти системная программа (которая загружала вашу) по ряду признаков определяет, где в вашей программе просто обычные данные, например обычные слова типа «Введите логин и пароль», которые вы часто видите на экране, и где в вашей программе код из набора команд, которые будут переданы процессору на выполнение.
3. Запускает выполнение кода программы.
4. Завершает выполнение кода программы
5. Стирает из оперативной памяти программу, освобождая драгоценное место (из постоянной не стирается)

Как из предыдущего можно понять, что пока программа находится в постоянной памяти на накопителе, это просто обычные данные, но как только они загружаются в оперативную память, часть из них становиться кодом выполнения, а часть продолжают оставаться в виде обычных данных. Чтобы такое происходило безотказно и компьютер всегда знал что у вас код, который нужно выполнять, а что есть просто данные типа фразы «Введите логин и пароль», нужно предварительно правильно подготовить вашу программу для запуска. Этот процесс называет компиляцией программы. Т.е. вы написали программу на языке программирования, но в таком виде процессор компьютера её не поймет. Теперь нужно её скомпилировать чтобы компилятор (программа, которая компилирует вашу программу) преобразовал её в тот вид, в котором процессор вашего компьютера её поймет и однозначно сможет определить где в ней находится код выполнения, а где простые данные. Как можно понять из вышеперечисленного, что в современном компьютере выполняется не одна какая-то программа, а одна программа передаёт выполнение другой, которая была загружена вами ранее или была загружена автоматически, и все внутри взаимодействует как большой электронный организм. Выполнение каждых программ регламентировано и происходит по разным правилам и с разными условиям. Например, вы по экрану водите мышкой и кликаете в браузере загрузить страницу, в этот момент происходит лавинный запуск сотен программ, одни грузят страницу из сети интернет, другие программы отображают её на экране, третьи проверяют не продолжаете ли вы двигать мышью по экрану, ещё одна продолжает отображать часы в углу экрана и ещё миллионы других действий. Всё это происходит в строгой последовательности со скоростью в десятки миллиардов раз за одну секунду, по этому кажется с виду, что всё запускается одновременно.
По этому знание и понимание этого очень важно для программирования. Сначала, когда вы включаете компьютер, запускается операционная система (Windows, Linux и т.п.), с точки зрения компьютера это тоже программа, которую писали программисты операционной системы. Потом, вы как программист, хотите написать свою первую программу. Для этого вам нужно загрузить среду разработки, это тоже некая программа, написанная другими программистами. Вы её загрузили, в ней написали свою программу, после этого запускаете в среде разработки компиляцию уже вашей программы. Теперь у вас есть готовый для запуска код, который вы уже можете запустить без среды разработки или передать друзьям знакомым, опубликовать в интернете и все, кто работает на такой же операционной системе как у вас, сможет выполнить написанную вами программу. Так и происходит весь этот процесс в общих чертах от программирования до конечного пользователя.
Как я уже ранее написал, в компьютере происходит взаимодействие различных программ. Их можно разделить на несколько типов с точки зрения уровня использования.
1. Операционная система. Это программа, которая является средством согласования различных пользовательских программ с конкретным вашим устройством. Например, вы наверно замечали, что в мире множество производителей мобильных устройств, ещё больше производителей микрочипов. Общего международного стандарта никакого нет, каждый производитель чипов как считает его функционал оптимальным, выгодным и конкуретноспособным, так и выпускает его. Получается так, что он определил какие команды будет этот процессор обрабатывать, а какие нет. При этом доминирующие операционные системы для мобильных устройств только две iOS и Android. Например, для Андроид зарегистрировано более 10 тысяч моделей различных телефонов на разных процессорах. И вот вы скачиваете на Samsung например приложение от Сбера, а ваш знакомый на Xiaomi скачивает это же приложение. И там и там оно работает. Как может быть такое чудо, ведь процессоры разные, команды делали их производители под то, как им удобно, а приложение выполняется и там и там. Это всё заслуга программистов операционных систем. Они написали специальные программы-драйверы для каждого процессора и каждого из 10 тысяч устройств. Эти драйверы являются частью операционных систем и являются промежуточным звеном к той же программе от Сбера, которые говорят, например «Слушай, Сбер, скажи пользователю, что я не могу оплатить покупку телефоном, т.к. в нем нет устройства NFC». А другой драйвер говорит, «Слушай, приложение камеры, предложи пользователю вариант включить свет на вспышке, т.к. уже темно в помещении». И это всё для каждого типа устройств писали программисты. Теперь понимаете, держа в руках телефон, какая титаническая работа десятков тысяч программистов была проделана, что бы каждый из нас мог пользоваться тем устройством, какое подходит под наш типаж, мировоззрение и комфорт? С точки зрения персональных компьютеров, всё примерно также как и в мобильных устройствах.
2. Драйвер устройства. Как уже упомянул, это программа часть операционной системы, но выделяет её в отдельную категорию лишь то, что поставляться драйвер устройства может отдельно от операционной системы. Такое раньше можно было часто встретить, например, при покупке новой мыши прилагался компакт диск с драйверами. В современных операционных системах большинство драйверов устройств уже есть изначально, но иногда их всё же нужно устанавливать. Правда, сейчас они чаще идут не на компакт-дисках, а находятся на официальных сайтах производителей оборудования. Например, купили видео карту, но операционная система поняла, что это видео карта и монитор показывает изображение, но производитель уже успел внести в её схему дополнения повышающее её производительность и возможности, но операционная система может об этом ещё не знать. По этому нужно этот драйвер скачать с официального сайта, установить и он станет частью операционной системы и откроет все возможности вашей видео карты.
3. Пользовательские программы. Это те программы, которые мы используем в повседневной жизни – текстовый редактор, калькулятор, бухгалтерские программы, компьютерные игры и т.п.

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


Что внутри программы?

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

1. Присвоение значения переменной. Нужно чтобы потом удобно было работать с формулами – вы меняете значение только вначале, а дальше в формуле оно будет вычислено автоматически. Иначе нужно будет менять число далее во всех формулах, где встречается, и можно тут где-то случайно пропустить или ошибиться. Грубо говоря – это аналог математической переменной (кто в школе учил математику в 5 классе). Присвоение значения переменной принято называть инициализацией переменной. В некоторых языка программирования это обязательное условие компиляции, т.е. компилятор не позволяет как-то использовать переменную, пока вы дадите ей какое-то начальное значение.

a = 1

Как правило имя переменной может быть различным:

result = 0

Есть некоторые негласные правила имен переменных. Они выработаны в долгих поисках и чтении чужого когда, да и своего тоже, и придуманы не мной, а огромной командой программистов всех времен.
Во многих языках программирования переменные можно писать только латинскими буквами с цифрами и знаками _ (подчеркивание). Другие символы запрещены. Если это правило есть и в том языке, который вы будете изучать, то тогда сами переменные называйте английскими словами.

MoiResultat = 0; // НЕПРАВИЛЬНО – тут человек может взгляд сломать. Возми гугл, переведи и дай название переменной на английском, что ли…

MyResult = 0; // ПРАВИЛЬНО – название переменной латинскими буквами на английском языке

МойРезультат = 0; // ПРАВИЛЬНО – если язык программирования позволяет вводить кириллицей (например язык 1С), то так будет правильно

МайРизалт = 0; // НЕПРАВИЛЬНО – ты что бюргер что ли?

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

myresultwhenigotinthemyfunctionfactorial = 1; // НЕПРАВИЛЬНО – Нормальный человек в здравом уме такое не прочитает…и не напишет…и представьте, что весь код такой и его сотни страниц…

MyResultWhenIGotInTheMyFunctionFactorial = 1; // ПРАВИЛЬНО – ну согласитесь, такое читать куда легче

myResultWhenIGotInTheMyFunctionFactorial = 1; // ПРАВИЛЬНО – первую букву иногда заглавной не делают, т.к. например в языке C и Java принято с заглавной буквы называть объекты, а с маленькой – их переменные.

ТаблицаВыгрузкиСальдоБухгалтерскихСчетовБезАналитикиСводноПоМесяцамКромеЗабалансовых = Неопределено; // ПРАВИЛЬНО – это 1С, товарищ, не хиханьки и не хаханьки! (это всё название переменной, без этого в 1С была бы засада)

В некоторых языках программировании при первой инициализации переменной необходимо обязательно указать тип данных, которые она будет хранить:

int a = 1; // Переменная a будет хранить только целые числа. Попытка запихнуть туда что-то другое, вызовет сначала недоумение компилятора и он попробует преобразовать это в целое число, например, 1.1922324 будет всё равно 1, либо просто начнет ругаться
string b = “Hello, world!”; // Норм! Так пойдёт! строку хранит переменная с типом строки
int a = “Hello, world!”; // СОВСЕМ НЕ НОРМ! – что за бодяга? как эта строка может быть целым числом??? С точки зрения компилятора – никак.


Разных типов может быть бесчисленное множество, так как программист может создавать свои собственные, но есть всё таки базовый набор простых типов, такие как:
Булево (bool) – тип переменной, которая может принять только одно из двух значений – истина или ложь
Целое число (byte, int, long, word, dword) – переменная может хранить только целые числа. Типов целого числа много, тут всё зависит от того до какого предельного значения вы хотите хранить целое число и нужен ли будет математический знак минуса (иногда необходимо хранить только положительные числа), это и определяет вариант.
Вещественное число (float, double) – числа, где нужно хранить дробную часть. Иногда их называют числа с плавающей точкой или плавающей запятой (оттуда и название float). Также их несколько и определяют точность дробной части.
Символ (char) – хранит символ
Строка (string) – хранит множество символов. В мире программирования постоянно происходят метания что при случае выбрать массив char или переменную string (см.далее массивы). Эти метания в основном связаны со спецификой работы каждого типа и функциональными особенностями языка, но по здравому смыслу это одно и тоже.

Переменная может быть массивом (о чем только что писал):

int p[100];

Это значит, что будет создано 100 переменных p, но доступ каждой из них будет по индексу, т.е. p[0], p[1] и т.д. Это удобно, когда нужно выполнить действия сразу над множеством значений одной смысловой группы, например, вы производили 10 замеров температуры на кухне до и после приготовления жаркого, и у вас есть 10 значений. Но вам нужно среднее, чтобы понять превышало ли это среднюю норму домашнего труда или нет. Можно конечно задать так:
a = 23;
b = 25;
c = 27;
d = 28;
….
j = 24;

и потом посчитать по формуле:
Tc = (a + b + c +…+ j) / 10;

а можно сделать так:

int temp[10];

temp [0] = 23;
temp [1] = 25;
temp [2] = 27;
temp [3] = 28;

temp [9] = 24;

Tc = 0; // Так надо, мы не начали ещё считать температуру, значение полинома равно нулю
for (i = 0; i < 10; i++) { // Перебирает от 0 до 9 значения i, а потом использует их как индексы массива для расчета среднего
Tc += temp [i] ;
}
Tc /= 10; // Взять из Tc значение и поделить на 10, а потом запихнуть обратно в Tc

Когда речь идет о сотнях или миллионах чисел, то массив – это единственное решение. Лично я, если чего-то такого больше двух, то как правило делаю массив. Процесс выбора правильного алгоритма, в каком случае взять массив, а в каком создать пару отдельных переменных, как назвать их чтобы потом было понятно, называется творчеством, по этому кто говорит, что программирование – это конвейерная рутинная работа – неправ!

2. Выражение. Иными словами, это формула с числами, переменными или иными величинами.

b = a+2

или

с = sin(alfa)

3. Условие. Когда при соблюдении какого-то условия нужно выполнить один код, а в ином случае его не выполнять. Например, для синтаксиса языка типа Си, это выглядит так

If (b == 2) {
// Что-то выполнить здесь, если вдруг окажется, что благодаря каким-то действиям компьютера это значение станет равным 2, то выполнить нужно код заключенный в эти фигурные скобки, в ином случае просто проигнорировать этот код и перейти дальше
}

Для языка 1С тоже самое:

Если Б = 2 Тогда
// Что-то тут
КонецЕсли;

Для Бейсика:

if b = 2 then
// ???
end

4. Циклы. Чтобы не быть как в анекдоте про нового русского, когда он летит в самолете, а стюардесса объявляет «Наш самолет летит в Баден-Баден», новый русский её останавливает и говорит «Слыш, тут чё лохи летят, зачем Баден два раза повторять?». Так вот чтобы не быть лохом, в программировании придумали циклы, т.е. конструкцию, которая позволяет выполнять одинаковую часть кода несколько раз.

Если делать неправильно, новый русский лохом бы назвал:

print(‘Мы летим в’);
print(‘Баден’);
print(‘Баден’);

А так правильно, новый русский бы оценил:

print(‘Мы летим в’);
for( i = 1; i < 3; i = i+1) { // Перебирать от 1 пока i будет меньше 3, т.е. только значения 1 и 2
print(‘Баден’);
}

Но как бы не делали, в результате на экране будет всё равно одно и то же:
Мы летим в
Баден
Баден

Всё как в анекдоте)))…ну, или не летим…))

5. Создание функций. Иногда они называются методами, иногда процедурами возвращающими значение, иногда подпрограммами, всё зависит от конкретного языка программирования. Это конструкции, которые позволяют делать что-то, что после некоторых манипуляций и алгоритмов будет возвращать результат какого-то выражения.

a = sin(alfa); // это стандартная функция вычисления синуса

function mySin(alfa) {
// Тут, если владеете математикой, раскладываете расчет синуса в ряд Тейлора-Маклорена, и пишите код, который будет вычислять его по вашему алгоритму. Например, если вам нужна бОльшая точность, чем вычисляет это стандартная функция
}

a = mySin(alfa); // А теперь можно наслаждаться результатом

6. Класс. Современные языки позволяют делать иерархию методов (см.п.5), когда несколько методов и/или переменных объединяются по смыслу в один объект – класс. Например, вы делаете приложение чем кормить ваших питомцев. Вам нужно по каждому из них хранить информацию, мол как зовут, что хавает, когда кормил последний раз, где нас***, да вообще как он чувствует себя после этого. Мы делаем класс и называем его ёмким словом «Питомец» (Pet)

class Pet {
string name = “???”
string type = “???”
string eat = “???”

function ThrowASlipperAtItBecauseItMadeAMess() {
// Тут какой-то код
}

function GiveCookies () {
// Тут какой-то код
}
}

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

Pet pet1 = new Pet();

pet1.name = ‘Петроний’;
pet1.type = ‘Кот’;
pet1.eat = ‘Захавал мою сметану – не поплохело’;

pet1. ThrowASlipperAtItBecauseItMadeAMess(); // Выполнить код, запускающий в него тапок

Pet pet2 = new Pet();

pet2.name = ‘Барбос;
pet2.type = ‘Пёс’;
pet2.eat = ‘Принёс назад тапок для запуска его в кота, дал печеньку’;

pet2. GiveCookies (); // Этот код даёт питомцу печеньку


В класса есть такая штука как расширение одного класс другим. Например, для кота Петрония и пса Барбоса есть общие переменные, такие как имя, тип и еда, но вот давать печеньки коту глупо, а пулять тапком в собаку не безопасно. Т.е. для пса выполнить метод ThrowASlipperAtItBecauseItMadeAMess() (переводится как «запустить тапком, так как съел сметану») можно только в шаговой недоступности. По этому эти методы по идее должны быть уникальными для каждого типа. Это можно делать так:

class Pet() {
string name = “???”
string type = “???”
string eat = “???”
}

class PetCat() extends Pet {
function ThrowASlipperAtItBecauseItMadeAMess() {
// Тут какой-то код
}
}

class PetDog() extends Pet {
function GiveCookies () {
// Тут какой-то код
}
}

Объявление их тоже будет немного по другому:

PetCat pet1 = new PetCat();

pet1.name = ‘Петроний’;
pet1.type = ‘Кот’;
pet1.eat = ‘Захавал мою сметану – не поплохело’;

pet1. ThrowASlipperAtItBecauseItMadeAMess();


PetDog pet2 = new PetDog();

pet2.name = ‘Барбос;
pet2.type = ‘Пёс’;
pet2.eat = ‘Принёс назад тапок для запуска его в кота, дать печеньку’;

pet2. GiveCookies (); // Этот код даёт питомцу печеньку

Но никто не мешает делать, конечно, и так:

Pet pet1 = new PetCat(); // Всё внимание на тип вначале! Найдите отличия.
Pet pet2 = new PetDog(); // pet2 тоже с тем же типом, хотя создаётся экземпляр другого объекта (уже расширенного)

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

Теперь уже не получится запульнуть в пса тапком и дать коту печеньку, т.е. например, так не выйдет – pet1. GiveCookies (); – этот метод теперь только для объекта PetDog(), компилятор скажет, что у этого объекта нет такого метода.

Как вы заметили, переменные объявляются только один раз в родительском классе (классе, функционал которого мы расширяем).

Этот способ позволяет делать библиотеки кода, когда вы компилируете свой класс, хотите поделиться им с кем-то, но не хотите чтобы кто-то узнал по какой формуле будет лететь тапок, и из какой химической гадости будут сделаны даваемые псу печеньки. Так вот, вы компилируете класс, создаете библиотеку, но позволяете другим программистам расширять ваш класс своими функциями, например общую для них – погладить по голове, или индивидуальные – почесать за ухом, дать ещё сметаны))). И если они сочтут, что ваш тапок летит в кота недостаточно быстро, то могут написать даже свой аналог функции ThrowASlipperAtItBecauseItMadeAMess(). Их компилятор увидит, что такая функция есть в вашей библиотеке, программист её расширяет, но у него тоже есть такая же функция, тут его компилятор и принимает решение, что код этого программиста всё-таки важнее вашего и даст ему расширить класс своим методом на замену.

7. Комментарии. Это те части кода, которые просто нужны чтобы программист сделал какие-то заметки для себя или других программистов, которые могут работать с этим кодом. Компилятор будет их полностью игнорировать.


Философия “Hello World!”

Когда-то в далёком эээ…уже не помню каком году, мы с одноклассниками сидели на табуретках с электрогитарами в руках и спорили нужно ли для хорошей игры учить пассажи известных музыкантов, таких как Джо Сатриани или Ван Халена. Мне говорили обязательно нужно, иначе не будешь знать основ и не сможешь нормально играть, а я говорил, что если я буду учить других, то мне сложно будет придумать своё, а в музыке это означает потерять индивидуальность. И как показала жизнь, у каждого была тогда своя правда. В программировании так же. Здесь нужно всего в меру, меньше неё будет недостаточно для написания рационального и лаконичного кода, а если будет слишком много – разрушит элементы творчества, ты просто превращаешься в великого комбинатора – взял там кусок кода, взял тут готовый метод…хотя, это тоже в некотором роде творчество. Приведу пример. Некогда я писал много и для души на ассемблере. Часто приходилось обнулять 32-битный регистр, т.е. записывать в него значение ноль. Я делал это таким способом, кстати, строго по умной книжке:

MOV EAX, 0

Эта команда занимала, если не соврать, 5 байт в режиме 32 битного режима процессора по умолчанию. Но потом дизассемблируя чей-то код из игрухи типа «Принц оф Персия», я увидел интересную конструкцию:

XOR EAX, EAX

которая занимала уже только 1 байт. Результат тот же, но логическое действие совершенно не очевидное, эта команда не помещает ноль в регистр, она берёт то, что там уже есть и исключает само себя. Согласитесь, это красиво как любимая женщина (с мужской стороны, как для милых дам написать, я не знаю, что для вас сравнимо по красоте)) ). Тут то я и понял, насколько важно всё-таки иногда заглядывать на то, как делают другие, и о чём в книгах могут не написать.
При изучении нового языка программирования, уже так повелось, люди первым делом пишут вывод фразы «Hello, world!», ну или «Привет, мир!» (кому как удобнее). И вот какой в этом смысл:
1. Вы понимаете, что у вас работает среда разработки
2. Вы понимаете, что у вас правильно настроен и работает компилятор
3. Вы понимаете какой именно код заставил миллиарды транзисторов вашего устройства выстроить такую последовательность сигналов, что это привело к написании на вашем устройстве этой фразы, и на этом этапе всё, что вы делали правильно, и это работает…кстати, иногда пишут и такую фразу «It’s work!» (это работает).
Моя рекомендация – начинайте всегда изучать языки программирования с этой фразы. Она даёт дозу того самого волшебного пинка – психологически, если сразу что-то начинает работать, хотя ты только начал изучать, сильно бодрит, внушает чувство власти тебя над вычислительной системой, она выполняет команды, которые ты вводишь как верный пёс)), как любовь с первого взгляда.

Соблюдайте следующие принципы программирования

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


Не делайте избыточные комментарии:

a = 0; // Поместить в a ноль чтобы проверить как на него делить – ПРАВИЛЬНО

b = 1 / a; // Поделить 1 на a, которое содержит ноль – НЕПРАВИЛЬНО (избыточно), и так ясно, что здесь 1 делиться на a, которое содержит ноль, что тоже указано в предыдущем комментарии


Не делайте код совсем без комментариев. Часто бывает, что текущий проект нужно отложить на время. Потом, когда вы сможете к нему возвратиться, вам точно будет сложно понимать некоторые вещи, особенно если проект большой. Если вы ведете командную разработку, то это может быть иногда даже обязательным условием – уважайте время других программистов, напишите почему вы делаете этот алгоритм именно таким, хотя бы вначале, вкратце.


Пишите комментарии в строгом стиле, не используйте личные окончания глаголов:

a = 0; // Поместим в a ноль и проверим как на него делить – НЕПРАВИЛЬНО – вы может и помещаете, а лично Мы – нет.

a = 0; // Помещаю в a ноль чтобы проверить как на него делить – НЕПРАВИЛЬНО – ну и хорошо, помещай дальше что хочешь, я тут при чём? Мне что за тобой следить нужно? И давай уже решайся быстрее что туда помещать!

a = 0; // Помещаем в a ноль чтобы проверить как на него делить –
НЕПРАВИЛЬНО – я уже ответил про вас, мы не помещаем ничего никуда, тем более в перманентном процессе, да, это будет, но только один раз…и без вас

a = 0; // Помести в a ноль и проверь как на него делить –
НЕПРАВИЛЬНО – как ты груб с компом, фу!

a = 0; // Поместить в a ноль чтобы проверить как на него делить – ПРАВИЛЬНО – да, нужно поместить, а уж пометит ли он на самом деле и определяет что ты за программист и на каком железе работаешь)).

Кстати, в математике нельзя поделить число на ноль, но в компьютерных процессорах – можно. Результат будет «не число». Но большинство программ отрабатывают этот результат деления как ошибку «Деление на ноль», ну чтобы не вводить в заблуждение рядового пользователя)).


2. На каком бы языке вы не программировали, делайте код таким, чтобы он был наиболее удобно читаемым.

ЕслИ а = 1 ТОгДА ЧтоТоОБъЯвляюЗдесьПотомВыход = Истина; КонЕцЕсли; // НЕПРАВИЛЬНО – буквы скачут, всё условие в одну строку. Это всё равно что программиста, который будет этот код читать, обматерить в грубой форме

// ПРАВИЛЬНО – удобно читать код, код аккуратен.
Если а = 1 Тогда
ЧтоТоОбъявляюЗдесьПотомВыход = Истина;
КонецЕсли;

Например, я когда пишу, могу для удобства даже разделять смысловые методы пустой строкой, так читать удобнее и искать нужное гораздо быстрее, когда часами проводишь за компом…или перед компом…

Так пишу я:

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

К моменту прочтения этой статьи, вам желательно иметь навыки продвинутого пользователя.

Хотя никто не запрещает писать так:

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

К моменту прочтения этой статьи, вам желательно иметь навыки продвинутого пользователя.-2

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

3. Сам язык программирования (любой) выучить не сложно, имеется ввиду его синтаксис, потому что выучить все методы современного языка физически невозможно, их десятки тысяч, да и кому это нужно. Например, зачем вам глубоко погружаться в специфику программирования для работы с устройствами Bluetooth, если вы никогда не будете их программировать в обозримом будущем, а только по этим классам сотни методов. С другой стороны, знание только языка вряд ли сможет закрыть вопросы решения современных задач. Так или иначе нужно изучать смежные технологии. Например, если вы решили сделать программу, которая передаёт файл по сети в другую такую же программу, то вам как минимум нужно будет понимать как работает сеть, чтобы знать логику и порядок выполнения тех или иных команд, их значения. Например, невозможно это сделать в ряде случаев, если вы не знаете что такое IP адрес, доменное имя или что такое сокет, не знаете, что сокет нужно открывать, а после использования закрывать. Даже не знание простых вещей иногда приводит к неверной работе программы. Например, вы в своей программе выделяете место в оперативной памяти, и как это сделать вам даст изучение языка, но нужно ли потом принудительно освобождать память и в каких случаях это нужно делать принудительно, а в каких система сама разберется с этим лучше, чем кто либо, знание только языка программирования вам не даст. Там например будет просто описание функции free() – освобождает память, а зачем она это делает, а зачем вообще это нужно, ни одно описание языка программирования вам это не скажет. Многие описания предполагают принцип «Вы конкретно знаете что хотите сделать, но определенно не знаете как это сделать».

Итог

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

Начало программирования вообще с нуля. Часть 2

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

Элементарной единицей информации является бит, который может принимать одно из двух состояний – истина и ложь. В электронных схемах истина выражается в виде напряжения 5 вольт, либо 3.3 вольта, либо ещё как-то больше нуля (всё зависит от параметров электронной схемы), а значение ложь в виде отсутствии напряжения. В цифровом виде истина представляется значением 1 (единица), а ложь значением 0 (ноль).

Биты принято объединять в группы. Элементарной группой является байт, который равен восьми битам. Почему именно 8 бит, а не 10 и не 100, станет понятно позже, а если не станет, то я расскажу.

Как мы обычно привыкли записывать число? Ну как? – Вот так:

123 – сто двадцать три

Но на самом деле, с точки зрения математики, это выглядит вот так:

123 = 1 * 100 + 2 * 10 + 3 * 1

где * (звездочка) – так обозначается знак умножения.

Т.е. цифры в своих разрядах, дают нам конечное число именно по такой формуле. Однако и это не полностью адекватная запись, по тому что ещё более правильно было записать так:

123 = 1 * 10 ^ 2 + 2 * 10 ^ 1 + 3 * 10 ^ 0

где ^ (галка) – степень числа

Вспоминаем математику, что любое число в степени ноль – это единица, и 10 ^ 0 – не исключение

Тут видим, что именно степень числа и определяет полностью разряд числа (за плюсом 1). Т.е. в школе учили нас, что справа стоит первый разряд числа, но в программировании это нулевой разряд. Заметьте, каждый разряд содержит основание 10, меняется только множитель и его степень, но степень зависит только от разряда. По этому наше число для наглядности выглядит так:

123 = ( 1 ) * 10 ^ 2 + ( 2 ) * 10 ^ 1 + ( 3 ) * 10 ^ 0

– наши цифры 1, 2 и 3 от числа 123 показаны в скобках, 10 – постоянный в каждом разряде, а степени 2, 1 и 0 – это просто номера разрядов числа (справа налево). Вот и всё – это наше число так выглядит. Теперь важный момент. За счет того, что везде основание стоит 10, эта наша система счисления, который мы пользуемся в повседневной жизни, называется десятичная; вот как раз по тому, что основание 10. Это означает, что цифры, которыми мы ведем счет (значения в скобках) могут быть только от 0 (нуля) до 9 (девять). Цифры 10 нет в нашей системе счисления, т.к. запись числа 10 уже не простая. 10 – это:

10 = 1 * 10 ^ 1 + 0 * 10 ^ 0

Вот по тому цифры 10 и нет в нашей десятичной системе счисления, потому что иначе бы запись стала не упрощённой.

Всё это хорошо, только для повседневной жизни, потому что мы к этому привыкли, нас с детства начинают учить считать до 10 (по числу пальцев на руках), но в мире информационных технологий хранение информации в десятичном представлении расточительно. Почему так – далее.

Как понимаете, если есть десятичное представление числа, то есть наверно и ещё какое либо. Что будет, если мы вместо 10 в основание поставим 2. Как будет выглядеть, например, число 6?

6 = 1 * 2 ^ 2 + 1 * 2

а теперь запишем по всем предыдущим правилам:

6 = ( 1 ) * 2^2 + ( 1 ) * 2^1 + ( 0 ) * 2^0

получается, что это число 110, но только в двоичной системе счисления, т.к. основание здесь 2, а не 10. Т.е. для записи используется только две цифры – ноль и один (по тому и система двоичная).

ВНИМАНИЕ! Число 110 в двоичной системе – это НЕ(!) сто десять(!!!),- это число один один ноль!

Чтобы как-то понимать, что это в двоичной системе, принято записывать это так:

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

Однако, в двоичной системе не всегда удобно записывать числа, особенно большие. Например, обычное для нас число 700120 (семьсот тысяч сто двадцать) в двоичной системе выглядит так:

10101010111011011000b

Ну, тут и без объяснения понятно, что сложно работать с числом в таком виде, и такая запись используется только в определенных случаях. По этому чаще числа представляются в другой системе счисления, в шестнадцатиричной. Т.е. системе, где счет цифр идёт от нуля до 15. Ну, подождите!- скажите вы. Что это за цифра такая 15, это число такое 15, а цифры такой нет; да и 14 такой цифры тоже нет, и вообще цифр больше 9 цивилизации не известно! Так то оно так, и вы в чём-то правы, но вы наверно не знали, что цивилизация уже придумала такие цифры, но только для программистов)). Откройте стандартный калькулятор в Windows и переключите его в режим “Программист”:

Для любого программиста знание что такое биты и байты, что такое системы счисления, является обязательным даже в современном мире. И значимость этого не меньше, чем много лет назад.-2

Получится так:

Для любого программиста знание что такое биты и байты, что такое системы счисления, является обязательным даже в современном мире. И значимость этого не меньше, чем много лет назад.-3

Введем число 700120:

Для любого программиста знание что такое биты и байты, что такое системы счисления, является обязательным даже в современном мире. И значимость этого не меньше, чем много лет назад.-4

А теперь переключим режим представления числа на Hex (шестнадцатиричную систему счисления, от слова Hexadecimal):

Для любого программиста знание что такое биты и байты, что такое системы счисления, является обязательным даже в современном мире. И значимость этого не меньше, чем много лет назад.-5

Вот так и выглядит это число. Правильные записи этого числа (понятные другим программистам) будут такие:

Для любого программиста знание что такое биты и байты, что такое системы счисления, является обязательным даже в современном мире. И значимость этого не меньше, чем много лет назад.-6

Часто шрифтом написать подстрочный текст 16 бывает невозможно, особенно в редакторах типа Блокнота, по этому предпочитают линейным текстом, т.е. AAED8hex, AAED8h (маленькими буквами признак системы счисления), но чаще всего выглядит так – 0xAAED8 (ноль икс перед числом).

Кто-то может догадался, что эти буквы означают, а кто-то нет. Ответ вот:

A – это цифра 10

B – это цифра 11

C – это цифра 12

D – это цифра 13

E – это цифра 14

F – это цифра 15

Получается, что наше число 700120 будет выглядеть при правильной записи так:

700120 = ( A ) * 16 ^ 4 + ( A ) * 16 ^ 3 + ( E ) * 16 ^ 2 + ( D ) * 16 ^ 1 + ( 8 ) * 16 ^ 0

Теперь возвращаемся к вопросу расточительности, запишем число 255 (двести пятьдесят пять) сразу в трех системах счисления:

Для любого программиста знание что такое биты и байты, что такое системы счисления, является обязательным даже в современном мире. И значимость этого не меньше, чем много лет назад.-7

В десятичной системе число занимает три разряда (разряды 0, 1, 2), в шестнадцатиричной системе – два разряда, а в двоичной 8 разрядов. Наиболее компактная запись получилась как раз в шестнадцатиричной системе счисления.

Но погодите! Вы же внимательно читали этут статью с самого начала! Я как раз писал, что бит имеет только два состояния 1 или 0 (истина или ложь), а в двоичной системе как раз тоже используется только две цифры 0 и 1, так может быть биты записывать было бы удобно в двоичной системе? О да! Это так, для этого и используют двоичную систему счисления, как раз в тех случаях, когда и нужно работать с какими-то данными именно в битовом представлении, т.е. когда сама информация важна с точки зрения отдельных битов, а числа целиком. Но что с нашим числом 255? Если вы были ещё более внимательны, то увидите, что число 255 – это как раз максимальное число, которое можно представить восемью битами, т.е. одним байтом. Мало того – это максимальное число которое можно представить двумя разрядами шестнадцатиричного числа, а именно – FF. Именно по этому, когда речь идет о каких-то хранящихся внутри системы данных, которые иногда называют бинарными данными, их принято представлять либо в шестнадцатиричном исполнении двумя разрядами, либо в двоичной системе, если важна именно битовая составляющая. Так наше число 700120 (0xAAED8) в виде бинарных данных по два разряда в каждом выглядело бы так:

0A AE D8

Заметьте, к левому разряду пришлось слева подставить ноль, который как вы понимаете, никак не влияет на результат ( 0xAAED8 = 0x0AAED8 ), а сами байты разделить пробелом для лучшего визуального восприятия. Теперь, глядя на эту запись стало понятно, что для хранения числа 700120 компьютеру потребуется выделить три байта памяти (как понимаете, все числа от нуля до 700120 в три байта тоже запихнуть получится). Теперь наоборот, а интересно какое максимальное число можно поместить в три байта? Конечно же это число FF FF FF, а “по-нашему” – 16 777 215. Т.е. любое число от 0 до 16777215 включительно можно сохранить в компьютере используя не более трех байт.

Вот для чего по прежнему используются системы счисления в современном мире – чтобы иметь полное представление сколько памяти нужно выделить для хранения той или иной информации, чтобы это было и не расточительно и перекрывало все необходимые требования (и забегая вперед – не только для этого). Вы скажите может быть,- Да что такое один байт в современном мире, его никто не будет считать?! А вот и нет. Все мы наверно часто работаем в сети интернет, читаем тексты, смотрим картинки, видео. Каждая картинка или один кадр видео – это набор пикселов, каждый представленный чаще всего тремя байтами – по одному байту на каждую компоненту цвета (красный, зеленый, синий). Если вы вместо трех байт выделите четыре, то это увеличит объём необходимых накопителей для хранения картинок и видео на 1/3, что примерно также увеличит и стоимость и обслуживание. Мало того, любое расточительное использование памяти, не вызовет уважение у ваших коллег, если они это заметят, т.к. каждый понимает, что в программировании расточительство ресурсов – это признак дурного тона, непрофессионализм, безалаберность, качества несолидного человека, разгельдяя. Делайте хороший код, старайтесь беречь ресурсы, демонстрируйте этим свой профессионализм!

Java Android. Урок 1 (“Студия”)

Сегодня я традиционно отмечаю день программиста. Потому что именно 5 сентября я первый раз оказался за ЭВМ ))…По этому поводу я решил отметить этот день выпуском первого урока программирования под Android. Прежде чем начать, вынужден сказать, что крайне желательно чтобы ваш компьютер был на базе процессора Intel. Дело в том, что виртуальная среда, где будут происходить запуски приложения, оптимизирована именно под эти процессоры. Информации о том, что процессоры AMD тоже оптимизированы, у меня нет (раньше такого не было). Как это произойдет, я уберу эту ремарку из этого урока. Если же у вас AMD процессор, то самым оптимальным будет использовать для тестов непосредственно ваш мобильный телефон, который необходимо переключить в режим откладки, подключить кабель к компу, и Android Studio должно успешно понять его. Некоторые телефоны и планшеты не могут быть опознаны, в этом случае нормальная комфортная разработка невозможна, нужно что-то делать с вашим железом. Дальнейшая настройка и уроки будут идти исключительно в контексте виртуальной среды.

Всё начинается с простого скачивания Android Studio на свой ПК по этой ссылке:

Download Android Studio & App Tools – Android Developers

developer.android.com

где кликаем по кнопке “Download Android Studio”.

Через некоторое время, когда файл будет скачан, браузер запустит его сам, либо вы должны его запустить вручную (тут всё зависит от ваших персональных настроек безопасности). Установка особо ничем не примечательна, по этому все некстим (ставим программу кликанием по кнопкам “Next” и “ОК”). На этом этапе нам нужно как можно быстрее всё поставить и попробовать сделать наше первое самое простое приложение. Когда всё завершится, мы окажемся перед выбором, что будем создавать.

При первом запуске студио у вас список будет пуст (это всё мои проекты).

Теперь нужно кликнуть кнопку “New Project” (Новый проект). Да, привыкайте, студио на английском, но особых неразрешимых трудностей это не вызовет, если хотя бы несколько раз ходили в школе на занятие иностранного языка. Откроется окно, которое будет уточнять у вас, что за проект вы хотите сделать. Но не торопитесь!

Это не тот выбор, который предлагается сначала, нужен другой.

Необходимо выбрать “Empty Views Activity”:

Это правильный выбор, который сейчас нужен

Всё дело в том, что эта среда разработки поддерживает два языка программирования Java и Kotlin. Мы будем делать проекты на Java. Google постоянно старается продвигать именно Kotlin, хотя лично я к этому не стремлюсь – просто не хочу делать в голове кашу из разного числа языков программирования. Дело в том, что Java Android, Javascript, Java Tomcat, C, PHP – это похожие по своему синтаксису языки, а Kotlin не похож на них. Не охота вводить диссонанс в голове. В общем, выбираем вариант указанный на картинке. Далее в новом окне даём название нашему приложению. Будем делать свою первую игруху на Android с названием “Быки и коровы”, но написать это нужно латинскими буквами. По этому чтобы не изобретать ещё один “Олбанский” язык, пишем название “Bulls And Cows App”, и убеждаемся, что проект будет на языке Java (поле Language):

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

А вот полезное окно слева с названием Structure лучше сразу открыть:

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

Одна из основных заповедей в работе на компьютере это “Не навреди!”. По этому первое время правильным будет примерно такой подход к кликанию мышью в Android Studio (это я утрирую):

Т.е. серьёзность понимаете? )).

Ну, шутки шутками, а всё-таки пока лучше в незнакомые опции не заходить. Сейчас задача запустить своё первое приложение. Как раз именно сейчас для этого уже всё и готово. Да, Android Studio сделал для нас Empty проект, т.е. пустой, с самым минимумом того чтобы создать приложение. Давайте сразу же и посмотрим что получилось от ничего не программирования. По этому нужно кликнуть в меню Tools->Device Manager:

Справа появится панель управления виртуальными устройствами (эмуляторы мобильного телефона и иных устройств):

При первом запуске панели список устройств будет пуст (это мой список устройств)

Теперь нужно создать новое устройство кнопкой “Create Device”, которая находится над этим списком. Далее опять всё некстим и океем не вдаваясь в подробности, просто проследив, что создаётся именно Phone (мобильный телефон), а не Андроид ТВ, планшет или ещё что. Другие параметры сейчас не так важны.

Далее посмотрите, что с выбором операционной системы:

Список операционных систем

Если кнопка “Next” доступна, то жмём на неё; это значит образ операционной системы уже установлен вместе со Studio, если не доступна, то слева будет значок скачивания. Посмотрите внимательно на этот список, который на скрине – у Pie (активная строка) нет такого значка потому что она уже скачана и кнопка “Next” доступна, а у других есть – они ещё не скачаны. Качать все сразу смысла нет, они занимают достаточно много места, а использоваться будут в работе только несколько. По мере надобности можно потом скачать. В следующем окне тоже особо ничего пока не нужно и нужно нажать “Finish”.

Будет создано ваше первое виртуальное устройство.

Теперь необходимо убедиться, что устройство с этим именем находится в выборе запуска, и если не так, то сделать этот выбор (возможно у вас будет другое название):

Выбор конфигурации виртуального устройства для запуска

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

Нижнее окно и окно менеджера устройств можно теперь свернуть и тогда это будет выглядеть так:

Вот ваш виртуальный мобильник, который практически тот же, что и был бы реальный, тоже с установленной системой Android (помните версии образов на скачивание, у меня была Pie – Android 9). И да, вот о чём я писал в этой статье

Начало программирования вообще с нуля

El Vinto1 сентября

про философию “”Hello, world!”. Благодаря этой надписи на экране вашего виртуального мобильника мы хорошо теперь знаем, что виртуальная среда настроена правильно, среда разработки настроена правильно, программа написана без ошибок (конечно же, мы ведь в ней ничего не меняли ещё), и вообще всё круто,- вы всё сделали правильно!

Теперь нужно перейти вот сюда (развернуть) и кликнуть двойным кликом по MainActivity.xml (если вы вдруг случайно закрыли эту вкладку):

После этого смените подвкладку на “Code” (скорее всего изначально будет открыта “Design”):

Замените надпись “Hello, world!” на “Привет, мир!” и снова перезапустите своё приложение кнопкой с зеленой стрелкой (кнопкой “Run”), которая может теперь быть завёрнутой стрелкой (см.далее):

Завернутая стрелка кнопки Run. Означает не запустить приложение, а перезапустить приложение. Фактически тоже самое, только в обновленном виде.

Должно получиться вот так:

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

Задание по уроку:

1. Попробуйте самостоятельно найти в иерархии проекта (Панель слева “Project”) место, где хранится название вашего приложения. Замените его на название на русском “Быки и коровы”

2. В виртуальном мобильном телефоне удалите установленное это ваше приложение и переустановите заново с новым именем. Добавьте на этом виртуальном устройстве в интерфейсе системы русский язык чтобы всё было так, как-будто язык Андроида русский (это делается через обычные стандартные настройки языка). Это скорее больше задания как для пользователя мобильного телефона, но умение этого будет необходимо в дальнейшем.

Если всё получилось как нужно – молодцы! Если нет, давайте разберёмся что не так.