Pull to refresh
3
0.1
Георгий Хромченко @Mox

Team Lead

Send message

Нижняя панель навигации Flutter с вложенной маршрутизацией (автомаршрутизация)

Reading time15 min
Views11K

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

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments1

Дайджест интересных материалов для мобильного разработчика #151 (25 апреля-3 мая)

Reading time3 min
Views7K
В праздничном дайджесте – рендеринг капель и виртуальная реальность, первый спад Apple и новости Xamarin, психология цвета и автострахования. Все это и многое другое в очередной подборке!

Читать дальше →
Total votes 6: ↑5 and ↓1+4
Comments2

Как я искал (и нашел) разницу в двух побайтово идентичных файлах

Reading time4 min
Views71K
Есть у нас одно .NET-приложение, которое умеет загружать и использовать плагины. Плагины — дело хорошее. Можно функционал расширять, можно оперативненько обновлять их со своего сайта, можно даже юзерам дать SDK и позволить писать свои плагины. Мы всё это и делали. Наши плагины представляли собой обычные .NET-сборки, которые нужно было подкинуть в определённую папку, откуда основное приложения их загружало и использовало. Ну, вы, наверное представляете как — Assembly.Load(), дальше ищем класс, реализующий необходимый интерфейс, создаём объект этого класса и т.д. Всё это работало давно, стабильно и ничто не предвещало беды. Но вдруг в какой-то момент появилась необходимость создать плагин, состоящий из нескольких файлов. В связи с этим было решено считать плагином не просто .NET-сборку (1 файл), а zip-архив, в котором может быть как одна сборка, так и несколько файлов. В связи с этим пришлось научить билд-сервер паковать плагины в архивы, а основное приложение — разархивировать их в нужное место. В общем-то задача на 10 строк кода. Ничто не предвещало беды. И вот скачиваю я с билд-сервера собранный архив с плагином, разархивирую его в нужную папку, запускаю приложение, и… не работает! Стоп, как не работает? Это ведь тот же плагин!

Дальше — больше. Прошу проделать ту же самую процедуру моего коллегу, на его компьютере. Он пробует — и у него всё работает! Но как же так? Одна версия приложения, один и тот же файл с билд-сервера. Какая-то разница в окружении? Сажусь за компьютер коллеги, пробую ещё раз — не работает! Он в этом время пробует на моём — работает! То есть получается, что файл «помнит», кто его разархивировал! Зовём третьего коллегу понаблюдать этот цирк. Последовательно, на одном и том же компьютере, по очереди делаем одни и те же действия: скачиваем архив с плагином, разархивируем в нужную папку, запускаем приложение. Когда это делаю я — программа не видит плагин, когда это делает коллега — всё работает. На третьем круге этих интересных экспериментов вдруг замечаем разницу в действиях: я разархивировал плагин стандартными средствами Windows, а мой коллега — с помощью 7-Zip. И то и другое вызывалось нами из контекстного меню архива, так что разницу в клик по не тому пункту вначале никто не замечал. Ну ок. Получается, файл, извлечённый из zip-архива с помощью 7-zip, отличается от того же файла из того же архива, извлечённого с помощью стандартного архиватора Windows?

Кстати, пока вы не открыли статью под катом, ответьте-ка сами для себя на вопрос, может ли такое быть, что содержимое файлов валидного zip-архива при разархивации 7-zip и через проводник Windows будет разным?
Читать дальше →
Total votes 189: ↑176 and ↓13+163
Comments88

Google тестирует «беспарольный» вход

Reading time2 min
Views34K
Один из пользователей получил приглашение протестировать новый метод аутентификации и сообщил об этом в одной из групп на Reddit.
Рохит Пол (Rohit Paul) был приглашен поучаствовать в тестировании нового метода. Сейчас для него, чтобы войти в свою учетную запись на Google достаточно просто ввести свой логин и подтвердить вход на своем телефоне.
Рохит любезно поделился скриншотами: процесс беспарольного входа выглядит так:
Читать дальше →
Total votes 21: ↑18 and ↓3+15
Comments55

Управление температурой в дата-центре: почему иногда можно и погорячее

Reading time6 min
Views8.3K
Сегодня мы поговорим об охлаждении ЦОД. Группа ученых Университета Торонто опубликовала исследование метода охлаждения дата-центров, при котором температуру специально повышают. Мы решили разобраться, в чем суть этой работы и проанализировали ситуацию.

Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments0

Миллион строк плохого кода

Reading time4 min
Views48K
«No pain, no gain», как гласит древняя восточная мудрость. И даже если мудрость не древняя и не восточная, лично для меня самый ценный жизненный опыт чаще всего был и самым болезненным. Недавний пост Дэвида Робинсона — аспиранта, занимающегося программированием в стенах Принстонского университета — посвященный код ревью, не только поднял важный вопрос повседневного быта каждого, кому волей (или неволей) приходится передавать свой опыт другим. Оригинальный текст был относительно «беззубым», однако, пост перестал быть томным после того, как в комментариях появился Джон Кармак.

Это история о плохом коде, который однажды написал ваш покорный слуга.

На одном из первых курсов университета я писал программу на Java, которая должна была читать файл весом в 6 MB в строку (этим файлом был геном бактерии в формате FASTA). Выглядел мой код следующим образом:

BufferedReader reader = new BufferedReader(new FileReader (file));
String line = null;
String text = "";

while( ( line = reader.readLine() ) != null ) {
    text = text + line;
}

Построение строки при помощи серии конкатенаций подобным образом крайне неэффективно — у меня, без преувеличения, уходило около 40 минут на чтение файла (с тех пор я узнал несколько способов получше). Самое главное — после чтения файла весь оставшийся алгоритм в программе отрабатывал секунд за 10. Два дня я так и работал: делал изменения в коде, запускал программу и успевал посмотреть целый эпизод LOST, прежде чем программа завершала выполнение. «Черт, на двенадцатой строчке ошибка! Опять все по-новой...»
Читать дальше →
Total votes 52: ↑45 and ↓7+38
Comments50

20 отличных цитат о конверсии от «гуру»

Reading time4 min
Views19K
image
Среди огромного количества блогов и статей, посвященных тематике конверсии и отдачи от интернет-магазинов, встречаются фразы и утверждения, которые по емкости не уступают целой статье, а порой превосходят их. Многие из них должны быть высечены в камне и мозгах.

Авторы приведенных цитат — люди с огромным опытом работы в сфере SEO, веб-дизайна, копирайта, юзабилити и д.р. Каждый из них успел заслужить уважение своих коллег и высоко ценится как специалист, к мнению которого стоит прислушаться.

1 Брайан Айзенберг

Брайан Айзенберг – специалист в сфере поисковой оптимизации и маркетинга, автор New-York Times, один из самых востребованных авторов.

Там, где есть трение, есть возможности. Либо вы что-то сделаете с этим сегодня, либо это сделают ваши конкуренты.

Читать дальше →
Total votes 62: ↑35 and ↓27+8
Comments6

Новые подходы к валидации в Rails 3

Reading time4 min
Views8.7K

Введение


Как вы уже знаете из поста тов. Yehuda Katz об ActiveModel абстракции, в Rails 3.0, ActiveRecord отныне содержит в себе некоторые аспекты ActiveModel, среди которых модули валидации.

И прежде чем мы начнем, давайте вспомним, какие методы валидации у нас уже есть:
  • validates_acceptance_of
  • validates_associated
  • validates_confirmation_of
  • validates_each
  • validates_exclusion_of
  • validates_format_of
  • validates_inclusion_of
  • validates_length_of
  • validates_numericality_of
  • validates_presence_of
  • validates_size_of
  • validates_uniqueness_of
Все они по прежнему в строю, но Rails 3 предлагает несколько новых отличных альтернатив.
Читать дальше →
Total votes 44: ↑39 and ↓5+34
Comments8

Information

Rating
2,430-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity