• Какой комбинацией клавиш на Windows свернуть активное окно и все окна?

    Все окна - Win + D.
    Активное окно - Alt + space + C.
    P.S. Гуглится за одну трубку один чих.
    Ответ написан
    4 комментария
  • Как добавить внутрь кнопки изображение?

    background: url(...) no-repeat center #00a6e8;
    Ответ написан
    Комментировать
  • Какой самый быстрый способ получить номер ячейки массива?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Если массив не сортирован (и вообще, о нем ничего не известно) - линейный поиск.
    Если сортирован - бинарный поиск.
    Ответ написан
    5 комментариев
  • Как на самом деле передаются биты по сетевому кабелю?

    @0x131315
    Интернет - это целый мир. Этот мир состоит из миллиардов узлов, соединенных между собой линиями связи - это и есть сеть. Некоторые линии связи тонкие, они соединяют несколько узлов, например несколько компьютеров в здании, или несколько зданий в локальную сеть, некоторые средние - они соединяют одни подсети с другими подсетями, например несколько локальных сетей в пределах города, некоторые - очень толстые, магистрали, они соединяют целые сегменты сети, города, страны, и даже целые материки.
    Для того, чтобы разобраться во всех этих миллиардах связей, чтобы понять, кому и что отправлять, давно, еще за тысячи лет до интернета, придумали такую вещь, как маршрутизация.

    Что такое маршрутизация?
    Маршрутизация - это принцип, определяющий кому передать то или иное сообщение. Он довольно прост: если ты видишь получателя - передай сообщение ему, если не видишь, но знаешь того, кто видит - передай сообщение ему, если не видишь и не знаешь того, кто видит - передай сообщение узлу уровнем выше, дефолтному шлюзу, может быть он сумеет найти получателя.
    Таблица маршрутизации - список узлов, которые ты видишь, а также узлов, известных тебе, которые видят кого-то еще. Также в таблицу маршрутизации входит адрес вышестоящего узла - шлюза по умолчанию, на случай если ты не будешь знать, кому еще передать сообщение.
    Сообщений на узлах скапливается много, поэтому их упаковывают в контейнеры, и отправляют сразу по много штук. В сети такие контейнеры - протоколы, пакеты же - мельчайшие единицы информации, атомы, с которыми эти протоколы работают. В реале - это транспортные контейнеры размером с трейлер, а пакеты - мешки с письмами.
    Узел - любое устройство, подключенное к сети, имеющее заполненную таблицу маршрутизации, т.е. имеющее возможность участвовать в пересылке сообщений. Это не только серверы, аппаратные маршрутизаторы, но и даже твой компьютер.
    Отправители и адресаты же - конкретные приложения, работающие на твоем и других компьютерах, за которыми закреплены определенные номера портов. Именно по номерам портов и идет идентификация отправителей и получателей, номера портов - это адреса отправителей и получателей

    Представь, что тебе надо отправить письмо в другую страну. Письмо - это сообщение.
    Ты пишешь его, опускаешь в почтовый ящик, его забирает почтальон, доставляет на почту. На почту поступают письма от всех жителей района, все они сваливаются в одну большую кучу, и разбираются сортировщиками. Сортировщики - те, кто проверяет письма по таблице маршрутизации.
    Сортировщики, ориентируясь на индекс, разбирают кучу на две части: локальные сообщения и внешние.
    Локальные - предназначенные жителям того же района, почтовое отделение знает, где находятся получатели. Это так называемый localhost. Позже эти сообщения еще раз разбираются по домам: каждый дом обслуживает свой почтальон, он просто берет пачку писем для своих домов и разносит по адресам.
    Внешние - почтовое отделение не знает, где находятся получатели, поэтому отправляется эти сообщения машиной на дефолтный шлюз почтового отделения, городской почтовый узел, где они точно также все складываются в одну кучу, которую точно такие же сортировщики разбирают на те же две кучи: локальные сообщения и внешние.
    Локальные сообщения позже делят на несколько кучек - по одной на каждое почтовое отделение города, их заберут машины этих почтовых отделений, когда доставят новую порцию исходящих писем. Несколько локальных кучек - городской почтовый узел знает тех, кто знает, где находятся получатели - другие городские почтовые отделения.
    Внешние - на две больших группы: сообщения для тех городов, с которыми у этого города налажено регулярное почтовое сообщение - эти сообщения отправляются непосредственно в город, где живет получатель. Все остальные сообщения - их неизвестно куда отправить, поэтому они отправляются на дефолтный шлюз городского почтового отделения - в главпочтамп, в Москву.
    В Москве - центральный сортировочный узел, который имеет связь не только с другими городами и областями, но и с другими странами. Поэтому там письма сортируются на гораздо большее количество кучек, и каждая отправляется в свою сторону.
    Москва также - пограничный шлюз, шлюз между двумя разными сетями, например локальной сетью и городской, или между медью и оптикой, или между городами или материками, в реале - между разными странами.
    На пограничных шлюзах, помимо маршрутизации, осуществляется также конвертация сообщений - преобразование их из одного вида в другой, например из электричества в свет, или меняется адресация подсети, сам формат адресов или же просто смена номера подсети, в реале - проставляется международный штемпель. Также на пограничных шлюзах может идти перепаковка сообщений из одного контейнера в другой, например вместо автомобилей - погрузка на поезд, корабль, или самолет.
    Таким вот образом сообщение попадает на другой пограничный шлюз - центральное почтовое отделение страны назначения, откуда, сверяясь по индексам на конверте, отправляется в городское отделение города назначения, откуда переправляется в отделение с указанным индексом (читай - на компьютер получателя), откуда уже почтальон доставляет его непосредственно получателю - передается в конкретный порт, который слушает приложение, которому предназначено это сообщение.
    Ответ написан
    Комментировать
  • Что должен уметь веб-программист?

    @krypt3r
    Должен ли тру веб-программист, бэк-эндщик (PHP, ASP.NET, Node.js - неважно) уметь следующее:

    Моё имхо.
    0. Уметь сносить винду к чертовой матери и устанавливать Linux
    1. Умение установки чего-либо из исходников необязательно. Все, что нужно, есть в репозиториях.
    2. Этот пункт обязателен. Добавьте сюда PostgreSQL и OpenSSH. Устанавливать и настраивать вы все это обязаны уметь.
    3. См. пункт 0.
    Ответ написан
    2 комментария
  • Какие есть книги или статьи про то, что в коде делать не рекомендуют?

    @jkotkot
    режим сарказма
    Гуглите по с слову antipatterns
    Ответ написан
    Комментировать
  • Какие есть книги или статьи про то, что в коде делать не рекомендуют?

    uvelichitel
    @uvelichitel
    habrahabr.ru/users/uvelichitel
    Относительно алгоритмизации
    можно от обратного - если не нашли свой алгоритм у Кнута, значит он неправильный.
    название переменных одним символом и прочее
    линтеры проверяют
    Ответ написан
    Комментировать
  • Какие есть книги или статьи про то, что в коде делать не рекомендуют?

    Ищи ролики на youtube. Не ограничивай себя чтениям
    Ответ написан
    Комментировать
  • Какие есть книги или статьи про то, что в коде делать не рекомендуют?

    @NatK
    Junior Java developer, marketing specialist.
    1. Боб Мартин "Чистый код";
    2. Мартин Фаулер "Рефакторинг. Улучшение существующего кода".
    На обе книги есть множество положительных рецензий и обзорных статей, на том же хабре.
    Ответ написан
    8 комментариев
  • Какие есть книги или статьи про то, что в коде делать не рекомендуют?

    MaxLevs
    @MaxLevs
    Одна из лучших в этом роде, на мой взляд, - "Сlean Сode" Боба Матрина. Что-то вроде "Качество написанного кода определяется количеством ЧеЗаНах-ов в секунду вылетающих из офиса во время проведения unit-тест-ов"
    Ответ написан
    Комментировать
  • Является ли наличие двух одинаковых констант в коде признаком не оптимальности решения?

    @Eddy_Em
    Назову как минимум 1 случай, когда это нужно: если вы храните в микроконтроллере некоторые массивы констант и хотите заодно иметь возможность "отката" на "заводские". В этом случае один массив предусматривает перезапись и хранится либо в EEPROM либо в выровненной странице флеша (если у вас мелкоконтроллер без EEPROM). А второй просто размещается как компилятору будет угодно.
    А вот если вы для компьютера пишете, то тут уже разбираться надо, возможно, такое дублирование тоже будет иметь какой-то смысл.
    Ответ написан
    Комментировать
  • Какие ресурсы "экономить" при алгоритмизации?

    @ivkol
    вот цитата из книги по js:
    Я заостряю на этом внимание оттого, что слишком много начинающих программистов хватаются за эффективность даже в мелочах. Результат получается больше, сложнее и часто не без ошибок. Такие программы дольше писать, а работают они часто не сильно быстрее. Основное правило, которое уже не раз повторяли, и с которым я полностью согласен – не беспокойтесь насчёт быстродействия, пока вы точно не уверены, что программа тормозит. Если так, найдите те части, которые работают дольше всех, и меняйте там элегантность на эффективность.
    Ответ написан
    Комментировать
  • Является ли наличие двух одинаковых констант в коде признаком не оптимальности решения?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Зависит от длины константы. Что короче - загрузить её в регистр непосредственно в команде, или взять из памяти (указав в команде адрес)? Сильно зависит от процессора.
    В целом, одинаковые константы в алгоритме это не страшно. Хуже, когда одно и то же условие приходится проверять много раз. Или, что ещё страшнее, условия, следующие одно из другого (проверили, что a < b, а потом проверяем, что a+c < b+c). Такое часто встречается в геометрии. И в этом случае над алгоритмом стоит поработать.
    Ответ написан
    Комментировать
  • Является ли наличие двух одинаковых констант в коде признаком не оптимальности решения?

    Neuroware
    @Neuroware
    Программист в свободное от работы время
    что за константа такая свыше 1,5 килобайта?
    А если по сути если она используется часто то лучше их объеденить, т.к. если она одна она будет чаще попадать в кэш и соответственно будет выше производительность, если же их будет 2 она будет переписываться в кэше и больше времени нужно будет чтобы ее в кэш вернуть
    Ответ написан
    1 комментарий
  • Какие ресурсы "экономить" при алгоритмизации?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Если вы хотите экономить память, то проблема будет не в переменных, а в больших структурах (списки, массивы, словари...). Мне чаще всего встречаются такие ситуации:
    - память в обмен на время. Запоминать результаты или вычислять заново? Иногда здесь удаётся обменять экспоненциальное время на полиномиальное, или уменьшить степень полинома на 1 или на 2. Но чаще выигрыш идёт только в константу раз (хотя в узком месте это может быть немаловажно). Впрочем, иногда вычислить функцию оказывается быстрее, чем найти её значение в таблице - так что надо такие оптимизации проверять.
    - замена обработки большого массива в памяти на послойную обработку (когда очередной фрагмент/строка/двумерный слой трёхмерного массива... вычисляется, обрабатывается, а уже ненужный слой забывается). Здесь память экономится за счёт серьёзного усложнения кода - приходится писать всякие конвейеры. Зато появляется шанс сэкономить ещё и время с помощью параллельной обработки.
    - хранение данных, которые должны быть в памяти, в упакованном виде. Трудно читать, очень трудно писать, код усложняется, время теряется. Но появляется шанс уложиться в 3 ГБ и остаться в 32-битном режиме (если это важно).
    - хранение в памяти против чтения из файла. Либо будет теряться время, либо усложняться код (если сумеете воспользоваться асинхронным чтением/записью).
    - в тяжелых случаях - экономия байтов кода (это если пишете на ассемблере). Может пригодиться, если действительно пишете сервер для кофеварки. Но возможно, здесь лучше попытаться поставить процессор помощнее.

    Сначала пишите, как проще, но если есть риск развития проекта за пределы текущих ресурсов, предусмотрите возможность постепенного перехода на более экономные по памяти (или, там где надо - по времени) алгоритмы.
    Ответ написан
    2 комментария