Заведём жабу? Часть 1.

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

Практические работы по Corel Draw также были отвергнуты мнением большинства и решили мы остановиться на каком-нибудь ЯП (ЯП в нашем случая — это не «я плакал,» а язык программирования). Поскольку многие слышали понятие «объектно-ориентированное программирование,» но дальше умного названия дело не пошло — было решено взяться за самый «простой» ООП язык — Java. Возьмёмся, посмотрим, что получится.

Честно скажу, в институте я экзамен по «жабке» чуть не завалил, похоже пришло время для реванша. Но сначала немного теории.

Жабки бывают разные.

  1. Java Standart Edition (J2SE) — стандартная версия, для настольных приложений.
  2. Java Micro Edition (J2ME) — для мобильничков — устройств с ограниченными ресурсами. Ох помню как было круто, когда смартфон на Nokia поддерживал и симбиан-игры и вот эти на java.
  3. Java Enterprise Edition (J2EE) — платформы серверные.

Мы начнём, естественно, с J2SE.

Особенности жабки.

  1. Виртуальная машина Java (JVM) — среда исполнения программного кода. Все программы запускаются внутри этой среды! И уже она «контролирует» безопасность работы программ, выделение ресурсов и прочие важные штуки, то есть выполняет служебную работу, дабы наша мегапрограммка работала без сбоев. Это промежуточный слой между операционной системой и вашей программкой. Java-программы не запускаются напрямую в операционной системе! Они работают в JVM. Вот, к примеру, популярную операционную систему для мобильный устройств Андроид вполне можно назвать минималистичной сборкой Linux, которая «крутит» эту самую JVM. А Вы думаете, отчего андроид такой прожорливый до ресурсов?
  2. Кроссплатформенность. Помните бессмертный диалог Кузьмича с капитаном подводной лодки из фильма «Особенности национальной рыбалки?» «Она (подлодка) у тебя что, на водке работает?» «Она у меня работает на всём, что горит! Лейте!»  Вот так и здесь. Код можно написать один раз и использовать его и под ОС Windows, и под Linux, и под MacOS. Использовать на любой ОС, для которой существует JVM. Для каждой версии ОС — своя JVM.
  3. Сборщик мусора (Garbage Collector).  Когда программка работает — идёт активное взаимодействие с оперативной памятью, что-то считывается, что-то записывается и т.д. Оперативка же разделена на ячейки определённых размеров и у каждой ячейки, есть свой адрес. Записанный объект занимает определённое количество ячеек в зависимости от своего размера. В процессе работы программы может создаваться много объектов, которые хранятся в памяти, а сама программа, соответственно, занимается определённые ресурсы операционной системы. Если оперативку только «забивать,» не очищая, то какой бы большой объём памяти не был бы установлен — придёт время, когда и он закончится, а программа завершит свою работу с ошибкой. Говорят: произошла утечка мозгов памяти. Кроме того, возможны попытки записи данных в занятую область, что приводит к нарушении целостности данных. В Java (в отличие от C++) JVM управляет объектами в оперативе, освобождая разработчика от данной рутины. Под мусором мы понимаем объекты программы, которые больше не используются. Сборщик мусора работает в фоновом режиме во время выполнения программы и освобождает память от таких объектов. (есть ссылка — на объект — работает, нет ссылки — «давай до свидания!»)

Важные понятия:

  1. Компиляция. Вспоминаем, как «видит мир» центральный процессор? Правильно, двоичным кодом — 0 и 1. Компиляция — это преобразование вашего программного кода в код, который «понимает» JVM. Грубо говоря в единицы и нолики. Напрямую JVM не работает с нашим программным кодом! Схема выглядит так: Исходный программный код (файлы с расширением java) — КомпиляцияБайт код (двоичный код, файлы с расширением class) — Виртуальная машина Java (JVM)Запуск программы.
  2. JDK и JRE. JDK — Java Development Kit — бесплатный пакет разработчика, доступный для скачивания. Включает в себя: Виртуальную машину Java, Компилятор, Библиотеки, Примеры, Документация, Утилиты. JRE (Java Runtime Environment) — среда выполнения программы. Включает в себя: виртуальную машину, библиотеку классов. В общем JRE — только для запуска, урезанная версия. Если пользователь не собирается разрабатывать на Java, но тем не менее виртуальная машина ему нужна для работы с каким-нибудь государственным сервисом — хватит с него и JRE.

Заявка №2. Простейший анонимайзер

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


<?php
$url = fopen ("https://makson.ru", "r");
$file = fopen ("site.html", "w");
$k = "";
while (!feof($url)) {
$i = fgets ($url);
$k = $k.$i;
}
fputs ($file,$k);
?>

Разберём по-строчно.
1. $url = fopen («https://makson.ru», «r»); — функция fopen открывает файл или url. Режим ‘r’ открывает файл только для чтения и помещает указатель в начало файла.

2. $file = fopen («site.html», «w»); — аналогично, но режим ‘w‘ открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует — пробует его создать.

3. Переменной $k пока задаём пустое значение.

4. while (!feof($url)) { — указывает PHP выполнять вложенные выражения повторно до тех пор, пока выражение в самом while является TRUE. Функция feof() проверяет, достигнут ли конец файла. Знак ‘!‘ в php является знаком отрицания, то есть цикл будет работать пока не будет достигнут конец файла.

5. $i = fgets ($url); — функция fgets читает строку из файлового указателя. В нашем случае указатель на файл — переменная $url. Указатель на файл должен быть корректным и указывать на файл, успешно открытый функциями fopen() или fsockopen() (и все еще не закрытым функцией fclose()).

6. $k = $k.$i; — переменная $k равняется самой себе плюс значение переменной $i (строка). То есть цикл накладывает содержимое строк файла друг на друга.

8. fputs ($file,$k); — функция известна также, как fwrite. Записывает содержимое в файловый поток. То есть в site.html будет записано значение переменной $k.

Простейший анонимайзер готов, конечно, для динамических сайтов оно не годится.
А вот для отображения в браузере нужно этот самый браузер сэмулировать путём передачи заголовков (HTTP/1.1 — RFC 2068). Как-нибудь напишу об этом.

Заявка №1. Кириллица в латиницу.

Потихоньку начинаем работать в рамках практики , как видите появилась новая рубрика «по заявкам.» Первая просьба оказалась довольно простой — нужно сделать перекодировщик русских букв в латинские. При этом никаких особых условий обговорено не было,а стало быть рассмотрим наиболее простой вариант, состоящий из маленькой web-формы и функции. Начнём с web-формы.

<!DOCTYPE html>
<html>
<head>
<title>Конвертер CYR-LAT</title>
</head>
<body>
 <form action="" method="post">
 <p>
 <textarea name="src" cols="50" rows="10"></textarea>
 </p>
 <p><input type="submit" value="Перекодировать">
 </form>
</body>
</html>

Здесь всё предельно просто, право не знаю стоит ли подробно описывать формочку. Хотя повторение — мать учения — так что кратко описываем по строкам.

1. <!DOCTYPE html> — доктайп (doctype) не является html-тегом в чистом виде. Это инструкция браузеру, указывающая версию языка разметки. В данном случае мы используем HTML 5.

2. <html> — ну тут всё понятно, тег-контейнер, содержащий в себе всё содержимое.

3. <head> — тег предназначен для хранения метатегов, использующихся для хранения информации, предназначенной поисковым системам и браузерам (например, заголовок страницы, ключевые слова, описание страницы и т.д.).

4.<title>Конвертер CYR-LAT</title> — здесь храним заголовок страницы.

5. </head> — соответственно закрываем тег «головы»

6. <body> — предназначен для хранения содержимого веб-страницы. «Тело» страницы.

7. <form action= » » method= «post» > — начало формы, action (действие) содержит в себе пустое строку, поскольку у нас скрипт в одном и том же файле, если бы мы передавали данные в какой-то другой файл,строка выглядела бы примерно так: form action= «myfile.php» . Ну а method = «post» указывает на то, как именно мы передаём данные, методом post или методом get. Само собой в данном случае предпочтительней post, поскольку не меняется адресная строка.

Читать дальше …

Нужна практика!

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

Отечественный процессор Эльбрус наконец выпускается на территории РФ

ЗАО «МЦСТ», разработчик универсальных высокопроизводительных российских микропроцессоров и вычислительных комплексов, объявляет о запуске в опытное производство компактных материнских плат «Монокуб-М» на базе первых отечественных двухъядерных микропроцессоров «Эльбрус-2СМ», произведенных по технологии 90 нм ОАО «НИИМЭ и Микрон»,  крупнейшим в России и СНГ производителем и экспортером микроэлектроники, входящим в отраслевой холдинг РТИ. Плата выполнена в форм-факторе mini-ITX, а перечень доступных интерфейсов выглядит следующим образом: PCI-Express 1.0, GigabitEthernet, USB 2.0, VGA, DVI, SATA 2.0, IDE (CompactFlash), RS-232, GPIO.

Ранее отечественные чипы производились на Тайване. Процессор наделен 2 МБ кэш-памяти и двухканальным контроллером памяти DDR2-533. Сообщается, что чип является глубоко переработанным вариантом микропроцессора «Эльбрус-2С+», адаптированным для производства на «Микроне».

Это, конечно, ну очень хорошо, что наконец-то в такой большой стране начали делать компьютеры, на которых дистрибутив Linux запускается, и даже какой-нибудь Quake II вполне себе будет играть. Понятно, что их назначение — исключительно государственные структуры, однако хочется пофантазировать, за сколько можно было бы купить такую продукцию, попади она на полки магазинов?

Читать дальше …

Социализацию да в мирных целях — ролевая игра по программированию

Робокоп и ТерминаторПри слове «социализация» у меня сразу всплывает картина средней школы, дома напротив и детишек с сигаретой и банками пива. Ведь именно из-за того, что человеку вдалбливается мысль «ты должен быть в коллективе, быть как все, не быть белой вороной» — он берёт первую сигарету, первую банку пиво, первый стакан водки. Именно из-за того, что ты «должен влиться в коллектив,» школьник бежит к матери с криком «я хочу новыый айфоннн!!» Конечно, ведь у его друзей есть такие, тема разговоров одна — у кого какие «мобилы». Учился, помню.  Дух соперничества, да не в том русле.

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

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

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

В качестве «полигона» для сражений наших программ мы выбрали форум Ретро-чата. Правила описаны здесь: http://maksonru.dlinkddns.com/viewtopic.php?id=27

Читать дальше …

Нарушители уже не те… Или версия для слабовидящих.

Ботан-нарушительМы живём в самой прекрасной стране, где с преступностью в привычном плане давно покончено. Любой гражданин может спокойно ночью гулять по улице, а трудовое законодательство соблюдается от и до, ведь так? Ну чем в такой ситуации заниматься единой федеральной централизованной системе органов, осуществляющих от имени Российской Федерации надзор за соблюдением Конституции Российской Федерации и исполнением законов, действующих на её территории? Новый мир — новые нарушители! Теперь прокуратура занимается… проверкой сайтов государственных учреждений на соответствие стандартов.

Нет, это не стандарты консорциума W3 (Боже, таких слов 80% жителей России и слыхом и не слыхивали) —  это определённые ГОСТ’ы, принятые внезапно с целью заботы о наших дорогих граждан. Вот один из них — ГОСТ Р 52872-2007 

Пункт 5.10 Альтернативная версия сайта для инвалидов по зрению
Для веб-сайта, предусматривающего значительное число элементов, к которым
значительно затруднен доступ инвалидов но зрению, необходимо обязательно предусмотреть
версию сайта имеющего минимальное число графических элементов. Для перехода на эту
версию сайта на главной странице веб-сайта необходимо разместить текстовую гиперссылку. 

Читать дальше …

100 гигабайт знаний

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

В настоящее время количество «отданных» уроков по программированию под Android превысило психологическую отметку в 100 гигабайт. Прикладываю скриншот. Как же приятно думать о том, что неким образом поспособствовал появлению новых приложений и игр на Андроид.

Раздача

А вот и скриншот, подтверждающий бесперебойную работа мини-компьютера Raspbrerry Pi B+. Как-нибудь постараюсь найти время и написать развёрнутую статью по настройке этого изделия.

Uptime

Время учить PHP.

Символ PHP

Я уже пытался вести образовательную колонку по HTML, урок 1 и урок 2, однако обстоятельства диктуют иное — не до образовательных страничек. А тут обратились с вопросом — как я вставляю галереи из Яндекс-фотками с прямыми ссылками на изображения? В этом мне помогает маааленький php-скрипт, написанный «на коленке.» А поскольку видеоуроки по программированию дают лишь весьма кратковременный эффект, а потом здорово забываются — лучше ставить конкретную практическую задачу, реализовывать её, а потом разбирать «по косточкам» решение. Так оно лучше запоминается и в перспективе позволяет наконец-таки в этом деле кое-как разбираться.

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

Читать дальше …