Pull to refresh
4
0
Send message
Угу, в моем случае книгами сильно изменившими представления о программировании (я самоучка) оказались:
«Совершенный код» Макконела;
«Чистый код»/«Чистая архитектура» дядюшки Боба;
«Код. Тайный язык информатики» Петцольда.

Ален Голуб "Веревка достаточной длины, чтобы выстрелить себе в ногу" - концептуальная книга не только о С++, содержит глубокие мысли о программировании в общем.

Шень. "Программирование - теоремы и задачи", 1995. Краткое и в тоже время интенсивное введение в алгоритмы. Почти все книги уже выкинул и раздал, эту оставил.

Вообще, список можно накидать на пару страниц. Хороших книг очень много.

Вот тут есть промышленное решение с нормальными задержками: https://tgraph.io/usage-05-10, и площадок поболее.
А еще есть глиса и адстреккер, тоже на базе телеги.
Основная сложность - поддерживать инфраструктуру прокси, тогда можно поддерживать частые обновления, типа раз в секунду. И то, в конкурентных рубриках типа телефонов и видеокарт статистически первым приходишь редко.

Наткнулся на полезное видео Проверяем б/у MacBook на брак! Обязательно к просмотру перед покупкой!
Оставлю здесь как себе на будущее, так и другим людям, которые собираются покупать бу мак :)

Кто любит сам покрутить новые настройки в Firefox, можете воспользоваться вот этими ресурсами:
cat-in-136.github.io — сравнение настроек вышедших стабильных версий и будущих бета версий.
github.com/earthlng/FFprefs-diffs — сравнение настроек вышедших стабильных версий.
searchfox.org — здесь можно найти краткое описание почти всех настроек.
UFO landed and left these words here
У браузера MyPal появился сайт www.mypal-browser.org

В новых версиях Flash player сделали так, что после 2020 года он перестанет работать, последняя версия без тайм-бомбы 32.0.0.371
forum.ru-board.com/topic.cgi?forum=5&topic=48998&start=1320#8
Архив со старыми версиями Flash компания Adobe удалила. Файл flashplayer11_2r202_235_win_32bit.exe загрузил пока на dropbox.

Сайт mpc-hc.org тоже начали коверкать. Но по старым ссылкам плеер ещё пока качается.

В расширении viewtube не работает запуск видео в стороннем плеере (Protocol). Из-за добавляемого «SEPARATOR» в код извлекаемой ссылки. Sebaro сказал, что это нужно для работы заголовка (непонятно в каком месте).
cmd
image

В скрипте я удалил «SEPARATOR», а вот в расширении и в родном скрипте Sebaro ничего не исправлял. Наверно в теме ViewTube оставлю описание только про скрипт.
В «Плагины — Shockwave Flash» дополнил:

В целях безопасности разработчики Firefox по умолчанию отключили в браузере некоторые функции Flash Player. И у вас могут возникнуть проблемы с запуском Flash-приложений. Можно попытаться это исправить, выставив на станице about:config значения опциям:
plugins.http_https_only * * — false
dom.ipc.plugins.sandbox-level.flash — 0
dom.ipc.plugins.flash.disable-protected-mode — true
plugins.flashBlock.enabled * — false
plugin.state.flash — 2
Был у меня как-то такой вопрос на собеседовании. И интервьюер как раз хотел услышать именно такой ответ, как вы и дали.
Пришлось ему объяснять, что
select count(g.id) 
  from group g 
  left join students s on s.group_id = g.id
 where s.id is null

как правило (но не всегда!), проигрывает в производительности
select count(g.id) 
  from group g 
 where not exists (select null
                     from students s 
                    where s.group_id = g.id)


Добавлю к этому очень немаловажный факт, что в разных СУБД и версиях этих СУБД (!), с разным количеством данных в таблицах и разными индексами на таблицах, могут быть разные планы и производительность этих двух запросов.

Вообще, тема anti-semi join довольно холиварная. Но я бы такой запрос, который вы привели как правильный, вежливо попросил бы переделать (откуда и для чего ограничение на подзапросы, если, конечно, речь не о какой-нибудь старенькой Firebird) — он предпочтительнее, чаще производительнее, так как нет тяжелого «left join» и, в конце-то концов, зачем вам тащить «студентов» наверх, если вы их используете только как условие для отбора данных?
Сама идея чистого и подконтрольного вам смартфона входит в противоречие с логикой и практикой жизни в современном обществе, где каждый продавец товаров или услуг имеет своё приложение, которое занимается сливом ваших данных, отслеживанием вашей активности и построением вашего цифрового профиля.

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


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

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

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

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

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

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


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


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

Кстати, немного оффтоп — у себя в домашнем проекте использую самописный 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
    );
    //. . .
}


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


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

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


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


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

Странно. Задача-то в принципе давно решена. Вот две софтины, которыми я пользуюсь по работе, основаны на active contour (snakes): JFilament (попроще) и SOAX (поточнее и 3D)
UFO landed and left these words here
На чуть менее скорую руку получилось такое демо (извиняюсь за качество кода).
Если кому интересно по вин 7 мой черновик для будущей статьи:
Службы forum.mozilla-russia.org/viewtopic.php?pid=758605#p758605
Всего остального по немногу forum.mozilla-russia.org/viewtopic.php?pid=751462#p751462
Из моего опыта разработки многопользовательских игр — дельта-компрессия серверного состояния мира (обычно только физического состояния мира — позиции/вектора объектов) хранит baseline (для каждого клиента) относительно которого и создаётся дельта-обновление. Клиент получает дельта-обновление и применяет его для получения нового baseline (=предыдущий baseline+delta) и в случае если этот baseline становится самым свежим — отправляет серверу ACK что теперь он имеет новый baseline (предыдущий baseline+delta). Сервер получив ACK задаёт данному клиенту новый baseline и далее уже относительно него умеет делать дельта-компрессию.
Клиент должен буферизировать baseline (т.к. входящие дельта-обновления будут приходить не для самого свежего baseline ввиду сетевой задержки).
Сервер должен буферизировать один baseline и последующие delta-обновления (чтобы в случае получения ACK на какое-либо дельта-обновление мог сделать baseline+delta и назначить его новым baseline).
Передавать полностью стейт мира (кроме initial при подключении) нужды нет вообще — у клиента будет гарантированно такой же стейт мира за счёт применения дельта-обновлений (для защиты от криворукости в дебаг-версию игры можно добавить baseline checksum в дельта-обновление — чтобы при построении нового baseline на клиенте сверить его с серверным).
Это довольно простой, но очень эффективный подход. Избыточность передаваемых данных крайне небольшая и компенсируется существенным выигрышем за счёт дельта-компрессии в целом.

Information

Rating
Does not participate
Registered
Activity