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

    Что со всем этим делать предлагаю читателям решать самостоятельно.


    Могу предложить на эту тему вот что:
    MyAndroidTools — позволяет посмотреть какие службы включает в себя приложение и часть из них безболезненно вырубить (обычно то что отвечает за рекламу так и называется ad/telemetry, хотя бывают исключения, конечно полностью от слежки так не избавиться, но часть зондов можно прибить в том числе те что работают в фоне).

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

    AFWall — файрволл, можно отдельно настроить разрешения на выход в сеть через VPN, по Wi-Fi и по мобильной сети для каждого приложения, как ограничит слив данных и избавит от рекламы, так и сэкономит батарею и траффик.

    Все три приложения требуют root, и некоторой начальной настройки, но если у вас стабильный набор используемых приложений и вы хотите получить от своего смартфона немного больше (и что бы маркетологи при этом получили меньше) оно того однозначно стоит.
  • 9 лучших опенсорс находок за сентябрь 2019
    +2
    Возможно, это слишком узкоспециализированная находка, но она меня несказанно порадовала. Если вдруг необходимо управлять Android-смартфоном по USB или TCP как по VNC (с графикой), попробуйте программу scrcpy.

    Быстрая, дерзкая, как пуля резкая, без всяких рюшечек и пердосвистелок. Работает по ADB и без рута: включил на телефоне режим отладки, подключил к компьютеру, запустил scrcpy и вперёд. Мышкой работаем как тачскрином (ПКМ == «назад», колёсико == «домой»), клавиатура, к сожалению, всегда печатает на английской раскладке (возможно, это можно исправить). На телефон ничего устанавливать не нужно, работает с минимальной задержкой и вообще я не верю что такой софт в опенсорсе. Замечательная вещь.
  • Что почитать тимлиду и СТО: подборка из 50 книг с оценками и не только
    +1

    "Человеческий фактор" — классика, эта книга must read для любого сеньора, да и вообще для любого программиста, который хочет поднять свою эффективность в 2-3 раза, а уж тем более руководителя. Я прочитал её ещё в 2007 году и с тех пор не устаю удивляться, как много людей не понимают таких простых истин как разница между рабочим временем и временем пребывания в офисе. Емнип, в книге их отношение называется фактор «С».
    А в целом, там каждая глава на вес золота.


    "Психбольница в руках пациентов" поможет понять почему программисты не понимают пользователей, почему меньше == лучше, и научиться всё-таки переключению в режим пользователя.


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

  • Особенности кэширования компонентов в Unity3D
    0
    Кстати, немного оффтоп — у себя в домашнем проекте использую самописный getComponent<>() на стероидах. Позволяет не только получить компонент, но создать его и/или проверить на наличие если он должен быть. Не смотря на некоторую громоздкость, семантически точно описывает ситуацию, впитывает в себя механические проверки и действия.

    Код
    class XUtils
    {
        // . . .
    	
        public enum AccessPolicy {
        	JustFind,
        	ShouldExist,
        	CreateIfNo,
        	ShouldBeCreated
        }
        
        public static T_Type getComponent<T_Type>(GameObject inGameObject,
        	AccessPolicy inComponentAccessPolicy = AccessPolicy.JustFind)
        	where T_Type : Component
        {
        	T_Type theComponent = inGameObject.GetComponent<T_Type>();
        	if (theComponent) {
        		check(AccessPolicy.ShouldBeCreated != inComponentAccessPolicy);
        	} else {
        		switch(inComponentAccessPolicy) {
        			case AccessPolicy.CreateIfNo:
        			case AccessPolicy.ShouldBeCreated:
        				theComponent = inGameObject.AddComponent<T_Type>();
        				break;
        
        			case AccessPolicy.ShouldExist:
        				check(false);
        				break;
        		}
        	}
        
        	return theComponent;
        }
        
        // . . .
    }
    



    Пример использования
    private void Awake() {
        //. . .
        rigidBody = XUtils.getComponent<RigidBody2D>(
            this, XUtils.AccessPolicy.ShouldExist
        );
        //. . .
    }
    


  • Дилетант в opensource — lessons learned за 3 года
    +13

    Есть очень простое правило — выкладывай и поддерживай только то, чем пользуешься сам и что интересно именно тебе. Остальные или подтянутся в процессе, или нет, но не критично, т.к ты сам являешься главным пользователем своих поделий. Примеры (да будет наглый пиар!):


    • Библиотечка тулзов — 221 звезда, существует с февраля 2016, делалась как набор вспомогательного кода, таскаемого по проектам. Библиотечка постоянно обрастала функционалом и толстела. Сейчас уже не дополняется и фиксятся только редкие баги, но это не мешает продолжать ей набирать звезды.
    • ECS фреймворк — 151 звезда, существует с конца декабря 2017. Разрабатывалась как легковесный аналог Entitas без кодогена (20кб против 0.5мб рантайма) и с сопоставимой производительностью. Поддерживается и расширяется.

    Документация отсутствует как класс, в ECS сделана в виде FAQ-секции по основным вопросам. Внутри кода комментарии есть только для публичных методов / полей. Сделан gitter / discord чаты для быстрого решения вопросов, некоторые неожиданно находят меня в телеграмме.


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


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

  • Михаил Бессмельцев с коллегой разработал новые алгоритмы для векторизации графики
    0
    Странно. Задача-то в принципе давно решена. Вот две софтины, которыми я пользуюсь по работе, основаны на active contour (snakes): JFilament (попроще) и SOAX (поточнее и 3D)
  • Старый компьютер, Windows XP, 512 Мб оперативки, Firefox и интернет
    +1
    Файл user.js в каталоге профиля сам запишет параметры в конфиг. Нужно только набить их в виде
    user_pref("network.captive-portal-service.enabled", false);
  • Тридцать шесть градусов красоты
    0
    На чуть менее скорую руку получилось такое демо (извиняюсь за качество кода).
  • Старый компьютер, Windows XP, 512 Мб оперативки, Firefox и интернет
    0
    Если кому интересно по вин 7 мой черновик для будущей статьи:
    Службы forum.mozilla-russia.org/viewtopic.php?pid=758605#p758605
    Всего остального по немногу forum.mozilla-russia.org/viewtopic.php?pid=751462#p751462
  • Как и почему мы написали свой ECS
    +2
    Из моего опыта разработки многопользовательских игр — дельта-компрессия серверного состояния мира (обычно только физического состояния мира — позиции/вектора объектов) хранит baseline (для каждого клиента) относительно которого и создаётся дельта-обновление. Клиент получает дельта-обновление и применяет его для получения нового baseline (=предыдущий baseline+delta) и в случае если этот baseline становится самым свежим — отправляет серверу ACK что теперь он имеет новый baseline (предыдущий baseline+delta). Сервер получив ACK задаёт данному клиенту новый baseline и далее уже относительно него умеет делать дельта-компрессию.
    Клиент должен буферизировать baseline (т.к. входящие дельта-обновления будут приходить не для самого свежего baseline ввиду сетевой задержки).
    Сервер должен буферизировать один baseline и последующие delta-обновления (чтобы в случае получения ACK на какое-либо дельта-обновление мог сделать baseline+delta и назначить его новым baseline).
    Передавать полностью стейт мира (кроме initial при подключении) нужды нет вообще — у клиента будет гарантированно такой же стейт мира за счёт применения дельта-обновлений (для защиты от криворукости в дебаг-версию игры можно добавить baseline checksum в дельта-обновление — чтобы при построении нового baseline на клиенте сверить его с серверным).
    Это довольно простой, но очень эффективный подход. Избыточность передаваемых данных крайне небольшая и компенсируется существенным выигрышем за счёт дельта-компрессии в целом.
  • Два раза в одну реку или (Не)много о профессиональном выгорании
    0
    Дисклеймер: это мои личные выводы-наблюдения.

    Причина — ощущение полной бесполезности занятия медитацией.


    Я полагаю, что вам данную «мыслеформу» транслирует мозг.

    Ну, в том смысле что он (мозг) как бы объясняет вам что «данное занятие бесполезно т.к. <причина>».

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

    Я костноязычно объясняю, но про это очень хорошо это описано у Экхарда Толле, про момент осознания «второго, другого, я». (в самой его дефолтной книжке, которая «Power of now», вроде)

    Очень похожий эффект, кстати, достигается от Power Nap

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

    В качестве конкретной пользы (опять же в моем случае): медитация сильно увеличивает время, которое я могу провести концентрируясь на одной задаче, т.е. без медитации у меня ресурс 1.5-2 часа сосредоточенной умственной работы, а с медитацией можно легко догонять до 5 часов. На сон очень положительное влияние.

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

    Поэмтому отвечая на вопрос в чем смысл: медитация положительно влияет на все стороны жизни.

    Для себя я думаю об этом как о сделке: куча бонусов за 1/24 жизни (2 раза по 25 минут в день). Супер выгодная сделка.
  • Два раза в одну реку или (Не)много о профессиональном выгорании
    0
    Спасибо, рад, что понравилось. Про тест:

    1. Запаситесь терпением!
    2. Скачайте сам тест (для Windows) media.stratoplan.ru/public/050d269bfc136a42d269980262085df4.php?lang=ru
    3. Распакуйте архив с тестом.
    4. Запустите файл mmpi.cmd (ярлык) из папки, в которую вы распаковали тест.
    5. Заходите в тест. Пользуйтесь для перехода по меню стрелками и клавишей ENTER.
    6. Если у вас не хватило терпения пройти тест за один заход, можете прерваться и продолжить тест в любой момент. Для сохранения временных результатов нажмите кнопку «F» и введите имя временного файла. Чтобы продолжить, выберите пункт «продолжить» и введите имя временного файла, в который вы сохранили промежуточные результаты.
    7. По окончанию выполнения теста переходите в ВЫВОД и введите имя файла result.dat (если имя файла будет другим, то на выходе вы получите пустой файл, утилита для смены кодировки настроена именно на это имя файла).
    8. Результат сохранился автоматически. Выходите из теста. Вы справились!


    Расшифровка результатов вот тут: drive.google.com/file/d/1RlUFQ4vM5CmhBJGUdHydUCbwe-2VZrLN/view?usp=sharing
  • Истерия вокруг GDPR, часть 2. Полезные советы
  • Кто на новенького? Мой первый опыт в разработке игры – от идеи до публикации
    0
    Когда как, в основном использую ETC, для текстур с альфа каналом беру ETC2.

    Если немного поговорить о формате:
    ETC это стандарт OpenGL ES 2.0, иными словами он поддерживается грубо говоря на всех андроид устройствах.

    ETC2 это обновленная версия, пришла вместе с OpenGL ES 3.0. Для обычного человека разница только в качестве текстуры, хотя в Unity используется ETC2 8bit, при сжатии в ETC2 вместе с качеством будет немного увеличиваться и размер текстуры по сравнению с ETC.

    К сожалению, не все Android устройства поддерживают OpenGL ES 3.0 (как и формат сжатия ETC2), как результат, если при запуске игры обнаружится, что устройство не поддерживает данный формат сжатия, то текстуры будут распакованы в RGBA32 в run time. Это приведет к тому, что будет занято больше оперативной памяти и снизится немного производительность, ибо на GPU придется отсылать текстуру, где каждый пиксель будет 32bit (вместо 4bit в ETC и 8bit в ETC2).

    Глянуть какие форматы поддерживают те или иные устройства можно здесь.
  • Конец прокрастинации или что такое ИКИГАИ?
    0

    Пришёл к некоторым похожим вещам.


    1. Сложные задачи/действия нужно разбивать на цепочки более мелких до тех пор, пока первое из них не будет проще сделать чем сомневаться.
    2. Прогулки 10-15 минут каждый час это вообще золотое открытие, кучу фич содержит:
      • взгляд "сверху" на то что делаешь. Могут прийти внезапные решения, можно вдруг понять что ты что-то делаешь не так, или наоборот, можно скорректировать направление, понять что что-то упущено, и т.д.
      • лучше концентрация в пределах этого часа (потому что до конца не "целый день", а "Х минут")
      • полезно для многих аспектов здоровья
  • Как расправиться с читерами и не переписать весь код
    0
    Работа с комьюнити — это всегда самый страшный ужас разработчика онлайн игр.
    Я играю в Лигу Легенд и могу описать до чего там эволюцилнировали систему чести. Все прошлые этапы эволюции описывать лень.
    1. После каждой игры на экране появляется 4 картинки персонажей своей команды (игра 5 на 5 игроков), где ты можешь похвалить (в течение 30 секунд) одного игрока или за хорошую игру (GG) или за коммуникацию или «не терял духа» (все проигрывают, а он подбадривал).
    2. После игры можно зарепортить игрока за фид, ругань и прочие непотребства (и читерство в тч). Не только своего, но и противника.
    В результате получаешь очки чести, которые повышают твой ранг чести от 0 до 5. Все начинают со 2 ранга. Если часто репортятся, то теряют очки и опускаются ниже и лишаются чата, возможности играть с приятными людьми. Если репортов нет, то получают условно 1 очко. За похвалу 2-3.
    3. За 3-4-5 ранг дают плюшки ввиде чемпионов на халяву (точнее осколков, которые можно собрать в полноценных дешевле, чем покупать новых).
    Это заставляет игрокова быть вежлевее/честнее. Самых отпертых негодяев (даже суперумелых) вышвыривают на год. Просто банят все учетные записи.
  • Интернет: всё очень плохо
    0
    А неужели нет плагина для браузера, режущего всё, кроме того, что в белом списке, включающем домены типа disney.com и официальные каналы Пеппы Пиг, Фиксиков и прочих Лунтиков на youtube? Плюс можно сделать чтоб после часа видеотрафика начинал резать видео до следующего дня — на сегодня хватит. А ещё можно сделать чтоб учили арифметику — плагин выдал задачку «сколько будет 2+5» и пока не введёшь 7 следующего видео не будет. Через 10 минут снова задачка.
  • История создания второй игры на Unity (или как я нашел силы после первого провала)
    +1
    Моделировал в Blender. Z-Brush-ем не пользовался, поэтому затрудняюсь сказать, как там. Что касается Blender, то как на картинке:
    — создаем примитивы
    — накидываем на них два модификатора Subdivision Surface (первый с режимом Simple, второй Catmull-Clark)
    — переходим в режим скульптинга и ставим галочку на Dyntopo (при таком режиме в активной области будут достраиваться полигоны в нужном количестве) и далее уже кистями вырисовываем нужные нам формы
    — как только визуально закончили, переключаемся в режим Vertex Color, красим камушки нужным цветом + применяем Dirty Vertex Color (чтобы трещины и царапины немного затемнились)
    — Ну и заключительный этап — применить модификатор Decimate, который сделает из высокополигональной модели — низкополигональную. Тут уже уменьшаем на свой вкус.
  • Человек, 20 лет зарабатывавший взломом онлайн-игр
    +17
    Долгое время играл в 1 игрушку(клиентская MMORPG), в какой-то момент надоело просто играть, начал заниматься сначала разработкой под нее разного рода аддонов/макросов, немного ковырял существующего бота, пробовал писать свои тулзы(собственно, на этой игре и учился кодить).
    В какой-то момент начал заниматься реверсом игры — оказалось весьма увлекательным занятием. Первый свой баг я нашел где-то через год игры и он базировался на чужом(можно было использовать некоторые низкоуровневые «гм»-команды, подправив память). Собственно, ничего шибко интересного там не было(поначалу) — но 1 из функций позволяла изучать рецепты удаленно, не подходя к NPC.
    Я запустил в цикле проходку по всем ID, которые были в игре(не только по рецептам). Представьте мое удивление, когда из ниоткуда у меня появилось что-то в районе миллиона игровой валюты.
    Позже мне попались в руки исходники сервера этой игры(утекли в паблик), из интереса посмотрел, в чем был прикол. Баг был довольно нетривиальным и работал так:
    Под каждый тип объектов(вещи, рецепты, NPC и т.д.) использовались специальные базы, которые считывались в union из кучи struct'ов под каждый тип объекта. Прикол был в том, что если скармливать функции левые ID, менялись оффсеты и типы данных. Для определенных данных это значение уходило в минус, что и позволяло получать миллиард валюты из воздуха.
    Это был самый легкий баг, который прожил около 4 лет. Но дальше было куда интереснее.
    2 баг мне подсказал знакомый, который нашел способ рисовать характеристики на вещах. В какой-то момент я экспериментировал с разными вещами и открыл так называемые «гаши»-специальные «пакеты», в которых на сервере утрамбовывалось до 8 вещей. ID вещей записывалось в «статы» «гаши» как ID_COUNT, что привело к тому, что в момент, когда я открыл несколько разных гаш, выпал какой-то левый квестовый предмет.
    В итоге можно было открывая эти «гаши» получать любые вещи(включая гм-овские, правда, на часть из них требовался класс «гм»), игровую валюту(в том числе и донатную) и прочие ништяки. Еще забавно было рисовать статы поверх яиц, из которых потом выводились питомцы, что позволяло из воздуха получать миллионы хп, атаки и прочих статов.
    Но это были цветочки. Следующим багом я обнаружил sql-inject. В клиентской ММО. По иронии судьбы, единственным местом, которое разработчики не додумались проверять на инжект(ну, как проверять, они тупо перегоняли все значения в hex, после чего cast'овали его обратно в строки в mssql), оказался mac-адрес, которые передавали для вычисления читеров и бана по маку. В 40 символов получилось втулить запрос, который позволял выставить себе максимального ГМа.
    Ну и последним(причем на данный момент рабочим на официальных серверах) багов оказался бэкдор от самих разработчиков, позволяющий легкой правкой клиента выставлять себе максимальные права.

    В-общем, забавные были времена, да.
  • Пошаговый план старта на Upwork
    +13
    На самом деле, самое важное, что нужно знать новичку, Вы не описали. Тостер битком набит преполезнейшими советами и ответами на вопросы новичков, которых у Вас тут нет.

    Чтобы не быть голословным, стоит ли новичкам знать, что:
    • за низкую конверсию заявок (proposals) они могут вполне неиллюзорно улететь в баню, причем достаточно перманентную? И что лычка Rising Talent спасает от этого, а потому она абсолютный мастхэв?
    • эта самая лычка будет защищать их не всегда, а только первые 5 или 8 заказов (сейчас не помню уже)?
    • советы, разбросанные по всему рунету о том, что внимание работодателя надо привлекать заявлениями, что Вы тут новенький и работаете на отзыв, а не на деньги, вредны, и можно крепко взяпаться, в т.ч. и перед апворком?
    • с заказчиками-индусами по первости (среди них встречаются нормальные, но по моему и не только опыту это скорее исключение) иметь дело категорически не рекомендуется, ибо шансы поработать бесплатно за посредственный отзыв или нарваться на конфликт, отказавших от выполнения бесконечных хотелок увеличиваются в разы?
    • вскоре после начала работы к ним постучатся от upwork и захотят проверить их личность, посмотрев на них через камеру, и побеседовав с ними голосом, к чему они обязаны быть готовы, или аккаунт будет приостановлен?
    • если они вдруг выяснили, что вляпались в проект, который не осилят по скилам/срокам/т.п., надо как можно быстрее раскланиваться с дичайшими извинениями и возвратом всей суммы (чтобы не выхватить отзыв)?
    • на предложения от заказчика (опять же, в основном индусов и пакистанцев) поработать в обход проекта, сделаенное в переписке на самом upwork, надо сразу отвечать отказом и тут же жаловаться, или это сделают они, и будет плохо всем, но индусам как-то пофиг?

    и еще много, много чего…