• Как (чем) парсить огромный JSON-файл?

    К счастью существует отличная библиотека для парсинга больших JSON файлов: https://github.com/kuma-giyomu/JSONParser

    Вот еще одна:
    https://github.com/salsify/jsonstreamingparser
    Ответ написан
    Комментировать
  • Кто что думает о перфекционизме в работе?

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    В общем, нужно знать меру


    Меру Вам подскажут срок выполнения и цена работы. По принципу - любые капризы за Ваши деньги. Однако, строить свою работу и брать заказы надо так, чтобы не приходилось лепить как попало.
    Ответ написан
    Комментировать
  • Какие тонкости существуют при заключении трудового договора с оплатой в % от продаж с сайта?

    buttersmai
    @buttersmai
    Юридически, на мой взгляд, вы описали теневой бизнес. Легально может что-то продавать из интернет-магазина либо ИП, либо ООО(и прочие организации). Если физическое лицо совершает действия, направленные на систематическое получение прибыли, то это смахивает на незаконное предпринимательство.

    Про подводные камни:
    1. Команда существует лишь на договоренности(но не юридически). Соответственно, неясно, к кому на работу(в юридическом смысле) вы нанимаетесь(если уж все являются физ. лицами).
    2. Опять же, ваши 15% с дохода можно интерпретировать как угодно. Это могут быть 15% с дохода, или 15% с "доход-расходы", и так далее.
    3. Вы бы, помимо процента, попросили еще и некий фикс за работу(либо фикс в месяц, либо фикс в час). Понимаете, продажи в электронной коммерции зависят от многих факторов. В упрощенном варианте это (трафик)*(конверсия). То есть, количество посетителей помноженное на процент купивших товар. Первый параметр зависит от SEOшников и/или людей, настраивающих контекстную рекламу, и прочих. Второй зависит от дизайнера, веб-аналитиков, цены на товар. Кратко: на ваши 15% от продаж вам, как серверному программисту, очень сложно повлиять. Если вышеупомянутые специалисты будут не очень компетентны, вы можете получить 15% от нуля, потратив силы впустую.
    Ответ написан
    Комментировать
  • Вы в браузере набрали адрес сайта, нажали Enter. Расскажите максимально подробно о технических процессах происходящих далее?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Действительно, уважаемый. Это слишком. Вряд ли я затрону все тонкости, но попробую наметить примерный путь:

    0) Пользователь вбивает в адресную строку браузера адрес сайта (нажимая клавиши на клавиатуре, которые замыкают определённую дорожку в матрице, по которой происходит определение нажатой клавиши, что через шину USB в какой-то момент передастся OS, где это поймает HID-драйвер и вызовет определённое прерывание, что OS передаст как событие/или_ещё_как в программу, которая вызовет соотвествующую функцию из API менеджера окон, которая изменит содержимое строки и в результате когда-то будет перерисован UI-элемент, а если нажат был Enter, то начнётся следующее).
    1) Браузер вытащит из input'а строку с запросом и посмотрит, похоже ли это на адрес. Если да, то добавит недостающие уточнения (например, http или file протокол, порт и подобные довольно стандартные вещи). Если нет - то скорее всего создаст запрос в поисковую систему, установленную по умолчанию (я более не буду опускаться до таких бессмысленных деталей, как вызовы API-функций, иначе я буду набирать это сообщение ОЧЕНЬ долго). В любом случае на выходе мы по сути получим URL, который надо загрузить. Протокол file:// мы рассматривать не будем, ftp далеко не везде есть, https:// на не хватит вечности, так что остановимся на http, который по сути есть tcp/ip по умолчанию на 80 порту с определённым форматом общения.
    2) Окей, url есть. Теперь нам нужен адрес, к которому обращаться. Так как http это tcp/ip - нам нужен ip адрес. Здесь нам помогают dns-сервера. Обычно, нормальный провайдер устанавливает у себя кэш-сервера dns, которые не обращаются по стопицот раз за vk.com к ответственному серверу com-зоны. Давайте не будем отвлекаться на то, как происходит там общение, если что - вот (вики тем хороша, что часто содержит внизу релевантные ссылки). Скажу лишь то, что на выходе мы получаем ip адрес(а).
    3) Имея адрес мы можем запросить страницу. Собственно, всё что после первого слэша - это как-бы параметры для http-сервера: какую именно страницу запрашивать, он всё же не телепат. Конечно, можно было бы немного схитрить и отправить читать про tcp/ip, но ведь существует и shared-hosting. Ограничемся лишь его упоминанием. Собственно, по полученному адресу отправляется GET запрос, который и обрабатывает сервер, находящийся по полученному IP-адресу.
    4) Сервер же, получив адрес, начинает распарсивать строку, медленно вытягивая нужные данные из баз-данных и настроек, выполняются сотни скриптов, иногда делается ещё не одна сотня различных запросов на другие сервера (здесь и разного вида метрики и разного вида HADOOP и т.д.). Пройдя сквозь скрипты и темплейторы в самом конце мы получаем html-страницу, готовую к употреблению. Её-то сервер и отправит в ответе (после заголовков, конечно).
    5) Вот и началось самое интересное. Получив html страницу браузер начинает жутко надругаться над CPU, HDD и GPU, попутно сжирая тонны RAM и мусоря в swap. Виной всему нереальные для полного соблюдения стандарты от небезызвестной w3c.org. Для облегчения многие делают костыли, вроде webkit, а некоторые и вовсе забивают на него и пилят свой стандарт с преферансом и картёжницами (впрочем, в последнее время становиться лучше). Здесь снова начинаются сотни вызовов API ОС, windows manager'а и прочих библиотек, вроде boost, qt или libpng. В ходе работы в RAM строится макет, по которому потом строится нечто вроде PDF (тоже сильно векторный), что, потом, обрабатываясь быстрыми шейдерами на GPU, выдаётся на экран. Опять же, многое пропущено, но вряд ли кому-либо, кроме парня в свитере с оленями, действительно интересно, как работает GDI, DirectX или OpenGL.
    6) Ах да, мы же забыли про тысячи js-скриптов, миллионы картинок и анимации с котиками, а также о таких дополнительных плюшках, как flash-player или java-weblets. В кратце, что js, то и flash и java - это виртуалка, со специальной архитектурой. Они, виртуалки, конечно разные (хотя flash и js довольно похожи, ещё бы - ECMAScript один и тот же). JS - самый интегрированный внутрь браузера, он же и самый медленный чисто визуально (ибо последние два имеют доступ к быстрому GPU), хотя самый быстрый в попугаях. Второй постепенно вымирает и представляет из себя, так же как и третий специальную shared-библиотеку, о которой браузер как-нибудь узнал и которой скармливает специальное содержимое помечанное специальным тегом html. Третий уже почти умер и встречается лишь изредка или в каком-нибудь энтерпрайзед со страшным legacy-базой. Ну здесь из сылок разве только гугл. Ибо сколько всего - даже не сообразишь. Да и вообще, эта тема ещё скучнее GDI, DirectX и OpenGL и к свитеру с оленями требуются ещё очки с толстенными стёклами, дающие стопицот к терпению и задроству над матаном. Если в кратце, то в случае JS, всё что было загружено в память и не думает выгружаться и формирует этакое дерево - DOM, над которым с помощью специального API и происходят модификации. При этом, перед тем как исполниться, весь JS-код компилируется, в нативный для VM байт-код. То же самое в общем-то и со вторым и третьим, разве только они не имеют доступа к DOM и организовать его - дело тех ещё костылей. Ах да, забыл ещё про Silverlight (или как оно там пишется), который сдох, не успев родиться. Так же как и Java, жив в серьёзном энтерпрайзе, не поскупившийся не "дешёвую" поддержку MS.
    7) Ну... А дальше пользователь нажимает на нужную гиперссылку и всё по новой.

    За кадром остались такие костыли, как ajax, websockets и прочая асинхронная ересь. С ней всё в миллионы раз сложнее. И к очкам со свитером потребуется ещё и... а чёрт их знает, что они там ещё носят. Ну да ладно, я искренне завидую тем парням (и девушкам), которые разбираются во всей этой машине. Целиком. Ибо это лишь верхушка айсберга. Разбавленная не лучшей памятью и ужасным гуглом.

    P.S. Не бейте сильно за грамматические и синтаксические ошибки. Спеллчекер приказал долго жить, да и 5 утра как никак.

    UPDATE
    На хабр выложили неплохой перевод дающий некоторое представление, как браузер ругается над памятью и процессором. Хотя и весьма поверхностное,
    Ответ написан
    26 комментариев
  • Какими условными операторами лучше воспользоваться если функция имеет 2 определенных сценария и третий сценарий по умолчанию?

    shineblu
    @shineblu
    Добрый день,

    +1 за switch-case, т.к. мало ли какие-новые параметры/типы книг Вы захотите добавить

    Успехов!
    Ответ написан
    Комментировать
  • Как вы (программисты) учились в ВУЗах?

    15432
    @15432
    Системный программист ^_^
    Все нижесказанное относится к ВМК, МГУ.
    Многие считают, что обучение программиста это, в основном, изучение языка программирования. Это не так. Программист, прежде всего, должен быть математиком - мало знать КАК писать код, нужно ещё понимать алгоритмы, способы решения тех или иных задач. Потому если решили быть программистом - готовьтесь к тоннам математики. Вычислительные методы,дифференциальные уравнения, основы логики, теория вероятности... Я насчитал больше восьми видов математики в нашем курсе. Побочные, но обязательные предметы типа экономики и философии сдаются легко, преподаватели понимают что это нам не сильно необходимо и принимают экзамены довольно лояльно. Самое сложное у нас - поступить. Вылететь крайне сложно - очень много попыток передач, в крайнем случае - академический отпуск и на второй заход.
    Ответ написан
    9 комментариев
  • Как вы (программисты) учились в ВУЗах?

    dsadasdad
    @dsadasdad
    lol
    Херово учился, так подучивал, чтобы не деградировать совсем, не учился даже предметам по специальности, С++ как то не очень интересен был, да и плееры в билдере делать отстойно. Бухал, курил, проводил время со шлюхами, 18 лет че уж там. С вуза поперли, пошел работать на 7 тыщ. Понял, что жизнь гавно, где-то 2010 год был. Выучил английский, немецкий и php, сейчас получаю 70 тыщ+ищу заказы и выполняю их сам и жизнь все равно гавно
    Ответ написан
    12 комментариев
  • Стоит ли давать ссылку на свой профайл на фриланс биржах?

    nowm
    @nowm
    Огромное спасибо Службе психологической помощи «Тостера» за то, что помогли восстановить текст ответа, который я отправлял в дубликат этого вопроса.

    Я бы на вашем месте опасался не того, что кто-то из России что-то за уши притянет. Вы лучше позаботьтесь о том, чтобы у вас в стране вашего проживания всё было честно с законом и налогами. Или, во всяком случае, старайтесь не светиться сильно.

    Ситуация с налогами в России. Если вы уехали из России меньше, чем 180 дней назад, то всё равно должны платить налоги на любой доход. Как только пройдут 180 дней, вы освобождаетесь от уплаты налогов, полученных от нерезидентов РФ (тех, кто в России не живёт больше 180 дней, или вообще не имеет Российского гражданства). Но вы всё так же должны платить налоги на те суммы, которые вы получили от резидентов Российской федерации. Чтобы вас гарантированно не притянули за уши в России, постарайтесь не получать деньги из России.

    Следующий момент: практически в любой стране нужно разрешение на работу, и нужно платить налоги в этой стране. Если вы фрилансер, который зарабатывает через Интернет, вас тяжелее поймать за руку, по сравнению с нелегальным гидом или фотографом, но тоже возможно. Если вы упорно не хотите честно оформляться в стране проживания/нахождения, не хотите заморочки с оформлением всех пермитов и т.д., то рано или поздно можете поиметь проблемы. Если не будете сильно светить свою деятельность и расклеивать на улицах рекламу своих услуг, то будет больше шансов, что всё и дальше будет нормально.

    Просто не надейтесь, что в Юго-Восточной Азии умственно недоразвитые люди живут, которые не понимают, что доход полученный через Интернет — тоже доход. Я про Юго-Восточную Азию упоминаю потому, что фраза «Я в России не живу, следовательно, налоги не плачу» чаще всего встречается от тех людей, которые живут именно там.

    Так что (если вы больше полугода не были в России), замените слово «Россия» в вашем вопросе на название страны, где вы находитесь.
    Ответ написан
    8 комментариев
  • Каким образом хранить большой (2400*1800) двумерный массив в БД?

    @rPman
    Ваша задача очень эффективно решается обычным файлом на диске (открытый с запретом lazy writes, либо принудительным flush после каждой записи). Если инструментарий (язык программирования и библиотеки) позволяет - откройте файл маппингом на память.
    Индекс для таких запросов не нужен, ведь ячейки можно индексировать примитивно - (x+maxx*y). запрос 100x100 блока превращается в 100 быстрых чтений по 100байт. Если это оправдано, можно хранить не ячейки а блоки 100x100, тогда при чтении будет читаться в 4 раза больше данных но четырьмя чтениями. Но если блок данных экрана влезает в буфер опережающего чтения операционной системы (драйвере файловой системы) то такой метод хранения будет неактуален.

    Любой другой метод будет медленный либо по записи (например хранить в базе не ячейки а блоки 100x100, соответственно при запросе блока будут считываться четыре соседних), либо медленный по чтению (хранить по одной записи на ячейку) и не эффективный по месту на диске.
    Ответ написан
    2 комментария
  • CMS для высокой нагрузки?

    valemak
    @valemak
    Фрилансер
    Textpattern, ФП получается быстрее чем у CMS на ООП
    Jekyll, все страницы генерируются статическими
    Ответ написан
    Комментировать
  • Есть ли разница между виртуальным хостингом и выделенным сервером?

    виртуальный хостинг - это как автобус - вроде и по скорости иногда быстрее чем на своем авто - но тесновато
    Ответ написан
    2 комментария
  • Существует ли аналог Cron с распределением задач между серверами?

    icelaba
    @icelaba
    Знаю и умею всё
    Что вам мешает держать открытые процессы на серверах висящие на rabbitMQ очереди используя ack:true, prefetchCount:N ,
    и управлять задачами с одной машины - управляющий процесс запускать cron ом,
    Раббит решит такие ваши задачи как контроль выполнения
    (если сервер отвалится или процесс упадет то задача будет перевыставлена автоматически),
    насчет перевыставлять по таймауту - если сервер работает и не упал (то какой смысл - задача также повесит другой сервер)
    Задачи равномерной загрузки и тп
    Раббит очень удобная штука, и на 1000 задач в минуту будет работать великолепно.
    Ответ написан
    Комментировать
  • Как найти значения в огромном массиве?

    @tadex
    XOR через весь массив - на выходе будет одинокий элемент
    Ответ написан
    7 комментариев
  • Какая есть программа для вставки костюма в фото, не вырезая его?

    AMar4enko
    @AMar4enko
    Жесть. Я скучаю по старым добрым Q&A
    Ответ написан
    Комментировать
  • Как задать траекторию движения для материальной точки в двумерном пространстве?

    1. Кусочно : сплайнами по 4-5- и т.д. точкам. Идея заключается в том чтобы в точках "сшива" совпали не только значения самой функции, но и значения ее первой производной, тогда сшивка происходит незаметно. (А для этого простыми словами приходится для задания отрезка кривой например между двумя точками, "захватывать" в расчеты еще по одной точке слева и справа, чтобы выровнять еще и производную).

    2. Сразу на весь путь : от параметра t в двух осях : x=X(t) и y=Y(t), где X(t) и Y(t) - полиномы нужной Вам степени. Их коэффициенты Вы можете найти решая систему по N известным точкам. В отличие от кусочного задания, метод немасштабируемый, то есть добавление следующих точек пути заставляет Вас пересчитывать оба полинома целиком, при этом нет гарантии, что результат не окажется совсем другим на первоначальном участке.

    Собственно вариант 1 - усеченный, но более удобный на практике случай варианта 2.

    3. Любую функцию от времени Вы можете разложить в ряд по базисным функциям. Например, Фурье. Соответственно у Вас получится два ряда Фурье ФХ(t) и ФY(t) - для функций движения по X и по Y.
    Ответ написан
    Комментировать
  • MySQL: Как определить является ли значение числом?

    Вариант А. SELECT CONCAT( '', column1 * 1) = column1
    Неправильно обработает нестандартные форматы чисел типа 156. (оканчивается на точку), 1e3, 1.25e5

    Вариант Б. Регулярными выражениями в лоб: SELECT column1 REGEXP('(^[0-9]+$)');
    Тут даже числа с десятичной точкой не пройдут, правда.
    Ответ написан
    1 комментарий
  • MySQL: Как определить является ли значение числом?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    SELECT '1234.464' REGEXP '^[0-9]+(\.[0-9]+)?$'
    Ответ написан
    2 комментария
  • Как организовать коллективную разработку социальной сети?

    dizballanze
    @dizballanze
    Software developer at Yandex
    Подписать NDA и дать человеку спокойно работать.
    Ответ написан
    4 комментария