Ответы пользователя по тегу Программирование
  • Лучший ЯП для парсинга веб-сайтов

    @mithraen
    Как только возникает слово «парсинг», в первую очередь стоит вспоминать о Perl (Practical Extraction and Report Language). Для решения этой задачи там есть:

    • модули для работы с HTTP — как низкоуровневые, так и специальные, типа WWW::Mechanize — удобен, если надо написать скрипт, который последовательно выполняет какой-то набор операций (например надо автоматизировать какие-то действия пользователя web-интерфейсе, а API никакого не предусмотрено);
    • модули для асинхронной работы по HTTP (AnyEvent::HTTP) — позволяют написать робота, который без необходимости создавать множество тредов будет выполнять одновременно несколько запросов;
    • регулярные выражения — мощнейший инструмент для парсинга данных, и в perl его использование наиболее удобно (это часть синтаксиса языка);
    • библиотеки для разбора HTML в дерево (например HTML::Parser);


    Python хороший скриптовый язык общего назначения, но для задач разбора данных код на Perl будет куда проще.
    Ответ написан
    1 комментарий
  • Минимизация фактов выплат/перевозок?

    @mithraen
    Вы усложнили себе задачу.

    В этой задаче цепочки передачи денег не имеют смысла — они не уменьшают количество транзакций. Скажем у A и B баланс отрицательный, у C — положительный. A может передать деньги B, чтобы он передал C все одной транзакций, а могут передавать их каждый сам напрямую C, от этого ничего не изменится.

    Поэтому мы можем считать что нет никакой сети, у нас есть отправители денег (те у кого отрицательный баланс) и получатели (те, у кого он положительный). Каждый отправитель должен послать деньги одному или нескольким получателям.

    Я бы предложил простой алгоритм, хотя доказать его оптимальность я не могу:

    1. Ищем есть ли у нас пары получатель/отправитель с одинаковым по модулю балансу. Если есть — прекрасно, делаем платежку и обнуляем их балансы (забываем про них).
    2. Находим того, кто должен больше всех (отправитель)
    3. Находим того, кому должны наибольшую сумму (получатель)
    4. Делаем платежку на сумму, наименьшую из этих двух (если у нас есть отправитель который должен суммарно 20, а самый крупный получатель должен получить 11 — делаем платежку от отправителя к получателю на 11)
    5. Повторяем, пока не останется ни одной задолженности
    Ответ написан
    2 комментария
  • Shared library на D?

    @mithraen
    Похоже -fPIC компилятором просто игнорируется.
    На x86 возможна сборка shared libs без -fPIC. На x86_64 — нет.
    Ответ написан
  • Стоит ли учить пхп новичку?

    @mithraen
    Вы начали не с PHP а с JavaScript :)

    PHP в качестве первого языка при изучения программирования плох тем, что позволяет писать очень грязный код, и при этом весьма беден в плане возможностей как языка (а не библиотек).
    Человек, который имел опыт программирования на другом языке, на PHP часто пишет лучше.

    JavaScript как язык гораздо мощнее — в нем даже есть элементы функционального программирования. Для поднятия своих скиллов как программиста очень рекомендую с ними ознакомиться.

    Для web-разработчика сейчас знать PHP надо. Хотя бы потому, что код на нем наверняка придется в жизни не только писать, но и читать.

    Так что раз вам нужно делать web-сайт — изучайте PHP, и не напрягайтесь по этому поводу. Если же хотите в будущем выбиться в верхний ценовой сегмент по квалификации, даже если будете делать сайты на PHP, все равно ознакомьтесь с другими языками и предлагаемыми ими парадигмами.
    Ответ написан
    6 комментариев
  • Как организовать разработку программ?

    @mithraen
    1. Как писать автотесты — зависит от средств разработки. Скрипты на perl, десктоп приложения на Qt, и серверные приложения на Java тестируются, очевидно, по-разному.

    2. Как делать описания тестов (для тестировщиков) — для этого нанимается опытный тестировщик, который сам все объяснит.

    3. При работе с git — коммитить желательно отдельными логическими изменениями. Желательно перед коммитом проверять компилируемость. Не стоит крупные изменения делать одним коммитом, лучше разделять — вот сделали подсистему, вот мы ее используем в этом модуле, вот — в другом. Если какая-то функциональность развивается долго параллельно другой деятельности — git rebase позволит команде которая занимается этой подсистемой синхронизироваться с остальными, но не отправлять свои изменения пока не закончит работу. А потом отправить сразу группу коммитов.

    4. Как настроить среду на кодинг — я не думаю что получится установить это как стандарт. У каждого программиста свои привычки. Идеальной настройки emacs/vim не существует.

    5. По поводу DE — я лично фанат xmonad. Многие tiling WM не выносят, и для них он не подходит. Я не понимаю почему — но это факт. При найме программиста мне важно как он пишет код, а не какой window manager использует.

    6. Тут вот какая штука — в Linux легко организовать миграцию конфигов. Так что даже при использовании парного программирования элементарно обеспечить чтобы каждый работал с привычной ему средой.

    Стандартизировать надо не window manager, а требования к оформлению кода.
    Возможно даже используемые в интерфейсах цветовые схемы и шрифты — чтобы при парном программировании люди глаза не ломали. Но и тут я бы поостерегся, а скорее предоставил возможность людям тратить некоторую часть рабочего времени на тюнинг. Тогда они будут интересные идеи по настройке рабочего места утаскивать друг у друга. Результат будет лучше чем любой стандарт.
    Ответ написан
    Комментировать
  • Что бы вы хотели узнать о D?

    @mithraen
    1. Совместимость с C/C++
    — написание библиотеки на D, используемой из C/C++
    — использование из D библиотеки на C
    — использование из D библиотеки на C++

    2. Доказательства того, что это хорошая замена именно C (компактность)
    — примеры кода, начиная с hello world на D и C, сравнение у результата вывода ldd и размера бинарника :)

    3. Применимость на классических задачах, на которых хороши языки высокого уровня:
    — работа с regexp'ами (сравнение с perl)
    — работа с БД (сравнение с JDBC, perl DBI)
    — простой HTTP-клиент
    — простой HTTP-сервер

    4. Управление процессами
    — запуск процесса, перехват stdin/stdout/stderr

    5. Написание GUI-приложения
    — варианты простых диалогов на gtk
    Ответ написан
    2 комментария