Устраивался как-то на одну из первых работ. Откликнулся на вакансию программиста в компанию местного провайдера. В описании ничего необычного, требуются знания HTML, JavaScript и чего-то еще, уже не вспомню.
Устраивался как-то на одну из первых работ. Откликнулся на вакансию программиста в компанию местного провайдера. В описании ничего необычного, требуются знания HTML, JavaScript и чего-то еще, уже не вспомню.
Пришел на собеседование, меня без лишних слов отправили за компьютер сделать какую-то простую страничку. По сути это была верстка, даже не программирование. Что ж, задание есть задание. Сделал за 15 минут. Задание давал, как выяснилось исполнительный директор. После того, как я ему показал результат и его он устроил, был отправлен к другому директору, выше которого в компании уже никаких директоров нет.
Уселись с ним на диван, и он начал беседу: "Насколько хорошо ты знаешь Java". И делает паузу. Я напрягся. После двухсекундной паузы он все же произносит: "...script". Я с облегчением выдохнул: "Нет предела совершенству." Далее шел еще какой-то диалог, но не суть важно.
На первый рабочий день пришел другой программист и сразу выяснилось, что я нужен ему на замену, а он увольняется (или скорее его увольняют); поэтому он передает мне все дела, документацию и прочее. Когда он открыл проект, над которым работал в данный момент, то я покрылся холодным потом. Это был самый настоящий 100% натуральный код на Java. Он поинтересовался – с какого пункта надо объяснять. Я признался, что с нуля. Пути отхода я уже не видел. В голове промелькнули мысли про голодные дни, когда я снова ищу работу, и надо проходить собеседования. Поэтому я остался внимать суть по новому для меня направлению, тем более день собеседования уже был позади.
Дальше я неделю приходил на работу, где мне не давали никаких задач, я просто изучал проект и заодно азы Java. Познавал до набухания мозга что такое есть сервлет, зачем нужен TomCat и прочие явошные дела. Что-то у меня даже получалось, но это было копирование имеющегося кода с незначительными изменениями.
Наконец, менеджеры, которые работали с этим веб-приложением начали приходить с текущими проблемами. Видимо, решили что уже пора. Я их проблемы решить не мог, потому что там происходила непонятная магия с потоками. Предыдущий программист, с которым переписывались по скайпу, в этом деле не мог ничего подсказать, по всей видимости тоже не знал.
В итоге когда мозг совсем набух от влитых знаний, я принял самостоятельное волевое решение переписать проект на PHP, о котором никому не сообщил и принялся за переделку. На мой взгляд этот личный кабинет был очень простой и делать его на Java было неправильным решением. Я так понял, что тот, кто этим занимался, просто знал Java и ему было так удобно сделать. А то, что найти специалистов на замену будет сложновато как-то никто не думал. При этом я прибегнул к небольшой хитрости. Дело в том, что с этим проектом можно было работать только с ноутбука в офисе, во внутренней сети. Но я нашел лазейку, и отключил функцию засыпания ноутбука, когда крышка была закрыта. Уходя с работы, я просто закрывал крышку с незалоченным Windows, а из дома подключался к нему через удаленный рабочий стол и работал. Так я не был зависим только от рабочего времени и писал код вечером и ночью. Я только беспокоился на тему того, что кто-то надумает посмотреть что в ноуте в этом время, но вроде ничего такого не было.
За две недели все было готово. Новое веб-приложение на PHP я выкатил ночью в выходные. В понедельник ко мне прибежали менеджеры с разными проблемами. Вполне логично, что не все было сделано хорошо и некоторую бизнес-логику я упустил. Зато теперь я мог все это чинить, потому что код был полностью мой и я понимал все что он делает, поэтому за неделю все горячие проблемы разрешились.
В этой схеме все выглядело более менее гладко, если бы не человеческий фактор. Кое-какие функции я за незнанием бизнес-логики сделал по-своему, а большинство багов исправил. И это повлияло на то, что отдел операторов стал некачественно выполнять свою работу. Точнее они могли скрывать раньше свои косяки, ссылаясь на баги программы, но когда я эти баги исправил (но никому не сказал) - они продолжили это делать. Тут и случились нестыковки, но это уже другая история...
Отвечу постом чтобы максимально посеять мысль.
В общем вас хотят поиметь завлекая на айти курсы. То же было с акциями год назад. То же было со вкладами. То же было с криптой, с арбитражом крипты и тд. Когда маржинальность падает, вылезают такие клоуны с рекламой 100% успеха.
Не верьте, везде пиздеж.
Размер экрана — краеугольный камень мира современных смартфонов. Кто-то считает, что дисплеи должны становиться только больше, а рамки — меньше, кто-то любит «средние» дисплеи диагональю в 5+", ну а кто-то остаётся ярым поклонником и приверженцем компактных смартфонов с крошечными дисплейчиками. В наше время, купить новый смартфон с относительно небольшим дисплеем за приемлемые деньги почти нереально — самые бюджетные модели будут слишком тормозными для современного пользователя. Некоторое время назад, я купил себе бюджетный крошечный смартфон 2012 года выпуска — Samsung Galaxy Pocket, причём всего за 100 рублей. Конечно же мне захотелось довести его до ума — а доводить пришлось руками и навыками прожженного программера! Какой смартфон можно получить за 100 рублей? Читаем в статье!
Минутка предыстории
С самого появления смартфонов на рынке, весь мир шагал к тотальному увеличению дисплеев и уменьшению рамок. В какой-то момент, большие смартфоны даже получили отдельное название — падфоны или смартпэды. Такой ход событий было не трудно предугадать: ведь производители дисплейных матриц осваивали всё более и более высокие разрешения и предлагали больше вариантов производителям смартфонов.
Однако несмотря на всеобщее засилие больших «лопат», в мире всё ещё оставались поклонники маленьких и компактных телефонов, которыми очень удобно пользоваться одной рукой. Сейчас подобные устройства представляют только небольшие бренды, известные достаточно в узких кругах — в основном, их можно купить на маркетплейсах, в обычных салонах связи их не найти. Мне известно о нескольких подобных устройствах, которые сейчас присутствуют на рынке. Первый из них «закос» под iPhone — Soyes XS11:
Но тут уж, если честно, хочется назвать такой смартфон не просто компактным, а совсем малюсеньким. На нём вполне удобно выполнять задачи звонилки, но совсем неудобно набирать текст — поэтому под наши задачи, он не особо подходит. Кроме того, эти девайсы работают на базе бюджетного смартфонного железа 6-7 летней давности, поэтому их производительность будет достаточно невысокой по меркам современного пользователя. Конечно же есть и более серьёзные варианты — например, компания Unihertz (да, тот самый продолжатель идей BlackBerry) делает смартфоны Jelly 2: дисплей с диагональю 3", Helio P61 под капотом и Android 11 на борту. Вот только цена, мягко говоря, кусачая — 18 тысяч рублей на момент написания статьи. Это слишком дорого!
Но если душа прямо таки лежит к компактным смартфонам, почему бы не обратиться к рынку Б/У устройств и не присмотреть что-то из… прошлого десятилетия? А вариантов ведь реально много — тут и LG Optimus L3 (3.2"), и Samsung Galaxy Pocket Neo (2.8"), Samsung Galaxy Star (3"), Samsung Galaxy Fame (3.5"), Samsung Galaxy Young. Все перечисленные девайсы стоят реально копейки — можно купить живой вариант до 400-500 рублей!
Я решил взять себе целых два смартфона: Samsung Galaxy Mini и Samsung Galaxy Pocket первого поколения. Оба достались мне в одном лоте за 2.000 рублей (с 20 телефонами) и обошлись мне по сто рублей, причём оба смартфона были рабочими! Чуть позже я докупил отдельно Galaxy Star (250 рублей), Galaxy Fame (250 рублей) и Galaxy Pocket Neo (~400 рублей) для полноты коллекции — вышло совсем недорого. Итак, что за характеристики мы получаем в смартфоне за 100 рублей:
Android: 2.3 Gingerbread.
Чипсет: Broadcom BCM21553 с одним ядром Cortex-A5 на частоте 832мгц. Видеочип: VideoCore IV, он же использовался в Raspberry Pi.
ОЗУ: 256 мегабайт (предположительно — DDR1).
Встроенная память: 3 гигабайта + слот для SD.
Дисплей: 2.8", 240x320, емкостной тачскрин.
Сеть: Поддержка 2G/3G. Об LTE и речи не идёт.
Выглядит не особо густо, да? И разрешение весьма низкое — большинство софта не запустится, а о клиентах современных сервисов и мечтать не приходится… или приходится?
Конечно же шаловливым ручкам захотелось вернуть жизнь этому миниатюрному красавцу и я решил использовать его как второй смартфон — при этом с клиентом ВК и музыкой, которые я запилил сам.
Разработка под старые версии Android
На самом деле, разработка под старые версии Android не особо отличается от современных версий системы. Кое-где приходится костылить, велосипедить и юзать AppCompat для реализации современных фишек на старых версий системы, но, будем честным, подобного и в последних версиях Android достаточно.
Даже сейчас нет никакой проблемы скачать последнюю версию Android Studio, подключить смартфон с включенной отладкой и отлаживать приложение прямо на девайсе — logcat тоже есть. Единственный нюанс — поиск драйверов и ручное закрытие приложений в таскменеджере, если вы деплоите под Android 2.x (Android Studio не умеет сам закрывать приложение, чтобы переустановить пакет).
В целом, за всё время разработки под старые устройства, я пришёл к следующим выводам:
Поскольку большинство устройств имеет одно ядро, для плавности интерфейса нужно минимизировать любую работу в фоне.
Взаимодействие с современными веб-сервисами может быть осложнено из-за отсутствия поддержки TLS1.2 и устаревших сертификатов (проверка сертификатов легко обходится специальным костылем, а вот TLS — нет).
У Android до 3.0 вся отрисовка интерфейса программная и она опять же, будет сказываться на скорости работы фоновых служб. Чем менее интерфейс комплексный, тем лучше.
Пушей нет — да, вообще. Однако это ничуть не помешает нам сделать уведомления практически в реальном времени с помощью… очередного костыля!
Допиливаем ВК
Я уже писал клиент ВК в рамках одной из прошлых статей. Теперь нам нужно довести его до ума — подогнать под разрешение экрана и переработать интерфейс для большей удобности, а также добавить недостающие разделы — я тот ещё любитель полистать мемчики, сидя в автобусе.
Честно сказать, вся концепция интерфейса требовала полной переработки — боковое меню банально очень неудобно использовать на подобных устройствах из-за малых размеров каждой строчки. Поэтому я решил не изобретать велосипед, а обратился к дизайнерам Apple и первоисточнику: официальному клиенту ВК для iOS 6, родом из 2012 года!
Приложение для Android выглядело +- также в те годы. Видите вкладки с разделами снизу? Они то нам и нужны — это самый удобный способ навигации на таких смартфонах! Накидав макет в layout'е, я приступил к реализации:
Изначально мне хотелось, чтобы всё приложение было плавным и анимированным: для этого я обратился к фреймворку анимаций Android. Суть очень простая — это обычный интерполятор значений от a до b за определенный промежуток времени. При этом мы не можем анимировать произвольное свойство — только те, который уже реализованы в системе (переход, поворот, масштабирование, альфа-канал). Более наглядно это можно представить вот так:
Да, это всё анимация :) Получаем примерно такой результат:
Обратите внимание, что запуск большого количества анимаций будет вызывать перерисовку даже в том случае, если элемент не видно на экране — от чего у нас будут дикие тормоза! Осторожнее с этим.
После этого, я решил доработать раздел с музыкой: я все еще пользуюсь грязными хаками для получения доступа к API музыки, поскольку «левым» клиентам такой возможности не дают. Публично его расписывать не буду, поскольку это скорее всего нелегально, да и сами ребята из ВК об этом знают (но не думаю, что будут применять какие-то санкции по отношению к «маленьким» разработчикам) — но если нужно, пишите в личку, расскажу всю концепцию.
Во первых, мне хотелось добавить возможность скачивать треки на внутреннюю память/флэшку. А во вторых, мне хотелось добавить фоновое воспроизведение — до этого возможность свернуть приложение и послушать музыку уже была, однако Android мог в любой момент прибить окно с музыкой и оставить нас с носом, остаётся только реализация в виде foreground-сервиса:
В Android есть два типа служб: background (фоновые) и foreground (видимые пользователю). Первый тип служб система может прибить когда угодно — например мало памяти или экономия заряда АКБ. А вот второй тип служб система не прибивает практически никогда, поскольку они обозначают выполнение важной операции в фоне — например скачивание файла или обновление системы. Однако у них есть одно ограничение — они должны быть привязаны к собственному уведомлению, которое нельзя закрыть. В процессе реализации возникло еще пару проблем — Wakelock'и (механизм, предотвращающий уход девайса в «сон») и WiFiLock'и (тоже самое, но для WiFi).
Точно таким же способом я реализовал механизм уведомлений — как я уже говорил раньше, пушей на старых смартфонах нет вообще ни в каком виде, поэтому пришлось реализовывать свой механизм «обновления»: каждые 3-5 секунд запрашиваем список последних 5 диалогов с сервера и сравниваем с предыдущим результатом, если есть новые сообщения — создаём нотификацию (листинг слишком длинный - пришлось перезалить на pastebin):
После этого, я начал рутинную работу по реализации интерфейса для данных с сервера — паблики, друзья, профили, лента и.т.п. В некотором смысле, реализация лента весьма занимательна: вообще, для очень больших списков существуют т.н виртуализация ListView — это когда ListView отображает только видимый пользователю кусок датасета (набора данных — например, список записей на стене) и на старых версиях Android она доступна. Однако мне было интересно реализовать вариант, который потреблял бы минимальное количество ОЗУ и где я точно знал бы, когда пользователь видит тот или иной фрагмент приложения. Поэтому я реализовал… пагинацию свайпами! Вот так привет из нулевых!
Для этого я использовал GestureDetector — встроенный в систему класс для обнаружения простых жестов — свайпов и.т.п. ВК при запросе ленты отдаёт специальную метку для получения следующей страницы новостей (поскольку она может динамически меняться и нужно хранить её стейт), мы эти метки просто сохраняем и переключаемся по странницам новостей с помощью обычных свайпов вправо-влево:
Выглядит весьма забавно.
Юзабельно ли всё это на деле?
Давайте смотреть, может ли юзать такой смартфон в наши дни. Берём наш девайс в руки, логинимся и оцениваем его производительность «вхолостую».
Работает весьма шустренько, учитывая что это бюджетник 2012 года. Как насчет нашего самопального клиента ВК? Смотрим:
Работает весьма бодро. Не сказать что также плавно, как последний айфон, но и совсем плохим результат явно не назвать!
Смартфонный функционал у девайса тоже вполне ничего: 1-2 SIM (в зависимости от версии), нормальная синхронизация контактов с ПК (однако Kies вроде-бы не работает на Windows 10, но есть vcf):
Встроенный почтовый клиент продолжает работать без каких либо проблем. Однако настраивать некоторые почтовые сервисы нужно вручную и с помощью «паролей приложений» — напрямую залогинится возможности нет. В случае «покета», придется поставить стоковый клиент из Android 2.3 вручную.
Мультимедийные возможности тоже радуют: встроенный плеер тачвиза мне всегда очень нравился. Есть и настройки эквалайзера.
Единственное, что откровенно подводит — браузер. Последним вариантом осталась Opera Mini 7 — она позволяет смотреть сайты, но не поддерживает динамический контент, только статику. Ну, зайти на википедию или почитать статью на Хабре хватит. Родной браузер уже не в состоянии что либо загрузить :(
Ну а в общем, производителньость смартфона весьма радует, согласитесь? Нельзя сказать, что он уж слишком тормозной — по крайней мере, современные ультрабюджетные смартфоны (до 4-5 тысяч рублей) зачастую показывают себя гораздо хуже чем и флагманы прошлых лет, и даже бюджетники!
Заключение
И всё таки, я считаю что мне удалось в каком-то смысле вдохнуть новую жизнь в старенький девайс. Если использовать подобный девайс как второй — на случай, если сел основной смартфон, то такой миниатюрный красаввчик может неождианно выручить даже в довольно сложной ситуации. Кроме того, эти смартфоны всеядны к аккумуляторам — достаточно подпаять + и — и они будут работать хоть от BL-4C.
Главная ценность Galaxy Pocket — в его компактных размерах. А поскольку по настоящему дешевых, маленьких и шустрых смартфонов становится всё меньше и меньше, то нам остаётся лишь продлять жизнь моделям прошлых лет! Есть ли в этом смысл и получил ли смартфон новую жизнь? Пишите в комментариях!
Клиент ВК можно сказать на 4pda. Там лежит самая последняя версия (для скачивания нужна регистрация на форуме). Если по каким-то причинам не хотите регистрироваться на форуме — я выложил актуальную версию в комментариях.
Эта статья поддерживается командой ITGLOBAL.COM
Мы — первый облачный провайдер в России, а также интегратор, поставщик ИТ-услуг, продуктов, сервисов и разработчик собственного ПО.
• Наш сайт
• Наш блог про виртуализацию и Enterprise IT
• Истории успеха наших клиентов
Необязательно покупать дорогие курсы, чтобы научиться программировать на Java. Есть много хороших бесплатных курсов с тренажерами и актуальной теорией. С такими курсами вы не станете сразу сильными программистами, но основам явно научитесь.
Java — это один из наиболее распространенных языков программирования от компании Oracle, помогающий разработчикам по всему миру создавать digital-проекты любого уровня сложности: от обычных программ и приложений до крупного корпоративного софта.
Тренажер от Каталог-курсов.ру
Тип: тренажер состоит из блоков теории, после которого сразу идет практика с задачами прямо внутри тренажера.
Язык: русский.
Edabit.com
Тип: обучающий тренажер.
Язык: английский.
Codewars.ru
Тип: обучающий тренажер.
Язык: английский.
W3schools.com
Тип: обучающий тренажер.
Язык: английский.
“Консольные приложения на Java” от GeekBrains
Курс по консольным приложением Java для новичков и тех, кто уже владеет одним языком и хочет освоить новый. За 2 урока авторы программы планируют рассказать о 13 тематиках, а по окончании программы платформа GeekBrains выдаст электронный сертификат.
“Уроки Java Профи” от ItProger
Курс по программированию на Java для "продвинутых юзеров" от itProger. За 14 видеоуроков ведущий расскажет о потоках данных, коллекциях, а также даст подробную инструкцию по работе с базами данных.
“Java-разработка” от Skillbox
Курс по программированию на Java с нуля от платформы Skillbox с Даниилом Пилипенко в роли эксперта. За 8 видеороликов общей длительностью около 15 часов участники узнают все: как нюансы профессии Java-разработчика, так и секретные функции самого языка.
“Проектирование тестируемого ПО на Java” от GeekBrains
Бесплатный видеокурс по тестированию ПО на Java от GeekBrains. За два урока участники изучат методы проверки тестирования, верификации данных, овладеют библиотекой mockito и многим другим. В конце платформа выдаст электронной сертификат об успешном завершении программы.
“Java. Базовый курс” от Stepik
Базовый курс по Java-разработке от Computer Science Center. Для прохождения курса пользователям желательно иметь опыт программирования хотя бы на одном из языков: C, Python, Pascal и т.д.
“Введение в java” от LoftSchool
Видеокурс Константина Черненко как введение в Java-программирование. Программа на 9 уроков или 3,5 часа полезного материала. Для удобства все ролики также доступны на YouTube.
“Основы Java” от Stepik
“Основы языка Java” от Hexlet
“Уроки Android Studio” от ItProger
“Java: Многопоточность” от Hexlet
“Java. Быстрый старт” от GeekBrains
“Игры на Java” от GeekBrains
Java программирование / Уроки Java для начинающих
Во время своих авторских уроков по Java-разработке Гоша Дударь расскажет обо всем, что интересует начинающих программистов: от нюансов профессии до правильного использования свинг-пакетов. Вся программа состоит из 25 небольших видео на YouTube.
Уроки Java Андроид программирования
Курс YouTube-видео по основам Android-программирования на Java от портала itProger с комментариями автора — Гоши Дударя. Все материалы представлены в виде 18 коротких роликов, раскрывающих базовые навыки и понятия для работы с Android Studio.
Курс основы Java
Масштабный курс по основам Java-программирования на канале Follow the white rabbit. За 34 урока продолжительностью от 3 до 25 минут автор рассказывает о наиболее необходимых навыках для каждого новичка.
Разработка на Java (2019) от VK Team
На данный момент, согласно рейтингу TIOBE, Java занимает четвертое место по популярности, уступая место Python, C и С++. В то же время, рейтинг GitHub не согласен с TIOBE и ставит Java на второе место лишь после Python.
Такая популярность языка обусловлена широким спектром его применения. Как указано ранее, Java универсален и может задействоваться в проектах различного масштаба, например в создании:
Веб-приложений;
Банковских и платежных систем;
Облачных систем хранения;
Корпоративного софта;
Big-Data-программ и много другого.
Конечно, зарплата программиста зависит, в первую очередь, от уровня знания языка, однако портал ГородРабот.ру подсчитал средний доход Java-программиста в России. Согласно статистике, в январе 2023 года среднее значение достигло 142 480 рублей — хотя модальная (наиболее частая) зарплата почти в два раза ниже: всего 65 000 рублей. На старте карьеры компании готовы платить от 30 000 рублей, предлагая соискателям должность стажера-разработчика.
В силу своей популярности в коммерческой сфере найти соответствующую вакансию на рынке труда нетрудно. Так, например, согласно тому же порталу ГородРабот.ру, количество новых рабочих мест Java-программистов в крупных городах доходит до 116 каждый месяц, что на порядок больше по сравнению с C или C++.
Выступая практически универсальным решением в программировании, Java представляет собой:
Язык с понятной структурой — у Java несложный синтаксис;
Широкий выбор фреймворков — есть готовый набор решений для любых проектов;
Безопасный кодинг — JVM блокирует попытки навредить коду;
Обратно совместимый язык — все коды полностью функционируют вне зависимости от даты написания.
Один из вариантов обучения Java для начинающих — это специальные курсы по программированию от наиболее известных компаний: Яндекс, GeekBrains, Skillbox, Нетологии и т.д.
А любителям самостоятельного обучения прекрасно подойдут Youtube-каналы состоявшихся Java-программистов и обучающие книги, например, "Java для чайников" Барри Берда. Если же Java рассматривается как профессионально необходимый навык, то можно нанять и тьютора для индивидуальной подготовки: HH.ru находит около 4 000 подобных резюме.