• Как сделать редирект после завершения выполнения потока (Thread.new)?

    AMar4enko
    @AMar4enko
    Thread.new do
    ...
    end.join
    redirect_to :root

    Только смысла в этом нет, все равно поток веб-приложения будет занят в течение выполнения задачи внутри Thread.new
    Ответ написан
    Комментировать
  • Scala. Как правильно конкатенировать строки?

    @a1go1ov
    Scala fan, Java developer
    На самом деле действительно не хватает контекста. Возможно в задании были какие-то подробности, указывающие на правильный, с точки зрения задания, способ. Так как строки в Scala это строки из java, то к ним применяются все те же правила.
    Если вы используете `+` то, например вот такое выражение не вызовет ошибки:

    scala> "one" + null + 42
    res0: String = onenull42


    то есть при конкатенации строки с значениями других типов, эти значения за сценой переводятся к строке (вызывается метод toString())

    С другой стороны concat, принимает только строки:

    scala> "" concat null
    java.lang.NullPointerException
      at java.lang.String.concat(String.java:2027)
      ... 33 elided
    
    scala> "" concat 42
    <console>:11: error: type mismatch;
     found   : Int(42)
     required: String
           "" concat 42
                     ^


    С точки зрения производительности, строки в java (и как следствие в Scala) - imutable и оператор + при конкатенации каждый раз создает новую строку, что при конкатенации большого количества строк конечно же не очень эффективно и метод concat будет работать быстрее в такой ситуации. С другой стороны компилятор способен оптимизировать простые случаи использования оператора + и конвертировать их с использованием StringBuilder (который mutable) и он в свою очередь более производительный чем concat.

    В общем и целом, если в задании был намек на необходимость конкатенации большого количества строк и чувствительность к производительности, то необходимо было использовать StringBuilder. Если же необходимо было показать более scala way, то возможно лучшим вариантом было бы использовать интерполяцию:
    scala> val (one, two, three) = (1, "two", null)
    one: Int = 1
    two: String = two
    three: Null = null
    
    scala> s"$one $two $three"
    res11: String = 1 two null
    Ответ написан
    Комментировать
  • Как работает данный алгоритм?

    NTP
    @NTP
    Алфавитный быть во всем должен порядок!
    Приведенный код требует полного, абсолютного, тотального, всеобъемлющего и исчерпывающего рефакторинга... Если нужно "махнуть" элемент со следующим, то достаточно:
    1. Перейти по списку до текущего элемента
    2. Создать буфер под данные в текущем списке
    3. Скопировать данные из текущего элемента в буфер
    4. Скопировать данные из следующего элемента в предыдущий
    5. Скопировать данные из буфера в следующий элемент
    6. (опционально) Удалить буфер
    Это решение "в лоб" и далеко не оптимально, но, учитывая качество кода, говорить о перелинковке элементов считаю излишним.
    Ответ написан
    Комментировать
  • Насколько медленный Ruby on Rails?

    viktorvsk
    @viktorvsk
    Ваш вопрос вызван преждевременной оптимизацией, что в 97% случаев - плохо.
    Вывод - не задавайтесь такими вопросами, пока не станет очень узкоспециализированная задача.

    TL; DR:
    Ни руби, ни рельсы - не медленные в реальных задачах веб разработки

    Руби и рельсы могут считаться относительно медленными по таким причинам:
    1. Руби - интерпретируемый язык
    2. В руби - очень много сахара для продуктивной разработки и поддержки. Иногда это действительно отражается на производительности.
    3. В рельсах из коробки есть очень много вещей. Но не всегда они нужны. Так же, многие бест-практис да и просто ответы в разных источниках показывают самый читабельный\простой\поддерживаемый вариант, а не самый производительный.

    Обычно, тормозит не тот или иной язык, а код, что вы на нем написали. Сегодня задач, где необходимы определенные возможности языка \ фреймворка для достижения той или иной производительности - вопрос ну очень уж редкий и специфический: научный расчеты, визуализация, сетевые взаимодействия...

    Но на самом деле, пофиг, все равно, серьезное приложение будет размещаться на нескольких машинах. Говорят, что предел рельс - 16000 RPS (requests per second) на сервер.
    Ответ написан
    3 комментария
  • Как правильно оценивать стоимость своей работы?

    Оценить трудозатраты в часах и умножить их на свою часовую ставку.
    Ответ написан
  • Из "рядового" до "генерала"?

    @Evsign
    аммм... Может мозги и профессиональная компетентность помогут? А не кол-во макулатуры в картонной, лакированной обложке.
    Ответ написан
    Комментировать
  • Как лучше организовать серверную архитектуру для мобильных и десктоп приложений?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    REST. Прячите все за приятный интерфейс на основе http и вашим приложениям будет глубоко плевать, что там под ним, балансировщик нагрузок на класстер серверов или шаред хостинг. Опять же таким образом ваши клиенты так же не будут зависить от конкретной реализации сервера, им нужен только интерфейс.

    И еще, это статегически не верный шаг, подключать программистов уже после организации сервера, так как они должны предоставить вам требования.
    Ответ написан
    1 комментарий
  • Путь фрилансера. Как найти первый заказ?

    buttersmai
    @buttersmai
    Пишу свое мнение про Odesk и Elance, ибо работаю на них.
    1. Насчет "наладить поток заказов"-важно знать, что Вы вкладываете в это понятие. Ситуация "заказчики стучатся сами, а я только выбираю и программирую", как мне кажется, не совсем возможна. Так что готовьтесь, что часть времени Вы будете продавать себя. С другой стороны, если продадите на долгосрочный проект, то счастье Вам обеспечено.

    2. По поводу первых заказов: я брал первый заказ за 5$(за весь проект) и делал его по-максимуму, чтобы у заказчика и в мыслях не было поставить рейтинг ниже 5*.
    Первый отзыв-важный этап. После того, как добились его, начинайте просить более-менее сносные цены. На втором проекте я уже работал по 10$/час.
    Все Ваши рейты потом будут видны в профиле, поэтому чем больше платят сейчас-тем выше Вас ценят потом. Я еще как-то просил одного из первых заказчиков вместо 5 часов по 15$/час посчитать 3 часа по 25$/час(я заранее оговорил, что работы на 5 часов). Сумма для заказчика одна и та же, а у Вас в профиле уже хороший рейт светится и люди видят, что Вам уже платили такие деньги

    3. По поводу "стоит ли изучать в процессе то, что потребуется для выполнения".
    Я как-то встречал на хабре статью про фриланс, где писали что-то вроде "если Вы чего-то не знаете, но изучаете в процессе, то вы рискуете деньгами и временем заказчика". На мой взгляд, это не так. Вы не дворником работаете, в каждой задаче, скорее всего, придется изучать что-то новое: шаблонные заказы бывают, но вряд ли это про программирование. Так что, если уверены, что способны что-то изучить-смело берите заказ.

    4. По-моему, Вы зря используете "опытные фрилансеры" и "армия индусов" в одном предложении. Я месяц назад видел заказ, где было английским по-белому написано "only for native Russian speakers", где оставили биды один русский и два индуса.

    Чтобы конкурировать с ними, многие советуют оставлять заявку в числе первых. Для этого стоит организовать работу так, чтобы сразу видеть новые заявки по нужным ключевым словам в одном месте. Я для этого использую lancemonitor.com (возможно, это мини-PR, но я безумно благодарен автору за сэкономленное время). Сервис отправляет проекты по нужным Вам ключевикам на почту по мере их поступления: все собрано в одном месте и позволяет быстро реагировать

    5. Составляйте cover letter грамотно, под каждого заказчика, стараясь показать, что Вы вникли в проект. Можно задать 1-2 вопроса.
    Если на Odesk я первый проект делал за 5$, то на Elance первый был за 18$/час. Так что при хорошем профиле и подаче себя можно и без отзывов получить нормальный первый проект.
    Ответ написан
    Комментировать
  • Есть ли смысл в перезапуске Apache & Nginx по крону?

    @yokes
    Так делать нельзя.
    Apache сам умеет перезапускать child процессы, параметр MaxRequestsPerChild (см. гугл).
    MySQL начинает потреблять больше памяти потому что при запросах некоторая часть данных попадает в память чтобы в следующий раз быстрее ответить. И потребление памяти помогает повысить производительность.
    Nginx является связующим между внутренними процессами сервера и пользователями, он должен работать круглосуточно и поэтому работа с памятью там очень хорошо проработана, посмотрите модули и конфиг, может проблема в каких-то кешах.
    Ответ написан
    Комментировать
  • Почему Хабр несколько раз в день спрашивает капчу?

    AlexPTS
    @AlexPTS
    Full stack веб разработчик
    Вы не один такой ) Проблемы походу с хабром, вчера утром он лежал, потом данные просмотров потерялись, потом каждый заход стал логиниться просить.
    Ответ написан
    Комментировать
  • Ищется аналог веб интерфейса Dropbox на свой сервер

    Если мне не изменяет память, такое можно на seafile сделать.
    Ответ написан
    Комментировать
  • Систематизация MP3 библиотеки

    nazarpc
    @nazarpc
    Open Source enthusiast
    Пользовался и пользуюсь сейчас EasyTag, работает.
    Ответ написан
    Комментировать
  • YouTube считает, что я нарушил авторское право. Какие могут быть варианты действий?

    Matyushara
    @Matyushara
    Для меня очевидно, что нужно указывать вариант:

    «Используя это содержание, я не нарушаю требования к добросовестному использованию контента в соответствии с законодательством об авторских правах»

    Если есть возможность добавить комментарий при этом, опишите ситуацию: что это кавер, а не фонограма. Исполнение кавер-версий, насколько мне известно, не является нарушением авторских прав, если при этом исполнитель не извлекает из этого материальную выгоду.
    Ответ написан
    6 комментариев
  • Можно ли слушать музыку vkontanke без flash-плеера?

    Night_Coder
    @Night_Coder
    Уже давно вконтакте музыка работает без флеша.
    Ответ написан
    Комментировать
  • Маты и оскорбления в онлайн играх?

    lampa
    @lampa
    Очень часто такая штука, как антимат, блокирует совсем безобидные сообщения. Это очень не нравится.
    Я бы просто добавил кнопку «Пожаловаться на нецензурную лексику».
    Ответ написан
    2 комментария
  • Какую систему управления версиями посоветуете?

    charon
    @charon
    по описанию проблемы подходят все три. Я бы порекомендовал Git, как самый современный и распространённый.
    Ответ написан
    Комментировать
  • Перестал работать переход от одного нового комментария к другому: баг Хабрахабра или мои личные глюки?

    Haoose
    @Haoose
    Тоже самое и у меня. Проверил на двух браузерах.
    Ответ написан
    Комментировать
  • Очередной «умный» дом — коммуникации

    Kpblc
    @Kpblc
    Конечно интересно!
    Ответ написан
    Комментировать
  • $(...).attr('checked', 'checked') не работает?

    Mithgol
    @Mithgol
    Используйте $(…).prop("checked", true) и тем невозбранно достигнете желаемого.
    Ответ написан
    4 комментария