• Как получить имя/ID текущего слоя карты в Leaflet?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Как, как, читать документацию
    https://leafletjs.com/reference-1.6.0.html#layersc...
    Ответ написан
    Комментировать
  • Как закрасить зоны на карте России?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Можно воспользоваться overpass-turbo.eu/, чтобы отфильтровать из данных OSM то, что вам нужною Вот рассмотрены примеры запросов. Там есть экспорт в kml, geojson и другие форматы.
    Подрисовать что-то и наглядно поредактировать можно в онлайн-редакторе GeoJSON. Этот формат позволяет раскрашивать полигоны и линии, делать маркеры. Примеры гуглятся легко. Кроме того, geojson легко обрабатывать программно.
    Что-то более сложное имеет смысл делать в QGIS.
    Ответ написан
    Комментировать
  • Насколько востребованны функциональные языки программирования, и почему их мало используют в коммерческой разработке?

    myjcom
    @myjcom
    Вот смотри https://ruhaskell.org/links.html
    Там внизу есть ссылки на телеграм каналы, где обитает отечественное и не только сообщество ФП-шников.

    Если что заходи там тебе все объяснят в дружественной непренужденной обстановке)

    Работы если что полно, в том числе и удалённо.

    Да, не так много как на мейнстрим языках но все-же спрос постоянный.
    Ответ написан
    1 комментарий
  • Насколько востребованны функциональные языки программирования, и почему их мало используют в коммерческой разработке?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Функциональное программирование
    Седой и строгий
    Востребованы меньше, но зарплаты выше и условия лучше. Мало используют по нескольким причинам. Прежде всего из-за замкнутого круга: Для мало используемых языков мало программистов, а те языки, на которых мало программистов, мало используют. Но он постепенно "растягивается" и вполне может совсем разорваться через 5-10 лет. Кроме того, функциональный код выразителен и хорошо распараллеливается, но для многих компаний это не является значимыми достоинствами, а вот низкая скорость компиляции и высокое потребление ресурсов являются значимыми недостатками. Тем не менее, рекомендую выделить на ФП часть своих сил и времени. Как минимум это улучшит ваш алгоритмический аппарат. Как максимум даст полезную подготовку для будущего рынка труда. В конце концов, ООП тоже не сразу стал популярен.
    Ответ написан
    Комментировать
  • В чем преимущество Oracle перед другими СУБД?

    На ваш вопрос невозможно корректно ответить. Каждая СУБД обладает своими архитектурными особенностями и по сути является платформой, т.е. многие полезные вещи уже реализованы. Т.е. можно сравнивать две конкретные СУБД и рамках решения конкретной задачи. Как СУБД для ИС уровня предприятия, Oracle очень хороший выбор, т.к. обычно в таких системах нагрузка 50 на 50(50 запись\50 чтение). И в силу архитектурных особенностей Oracle(реализация транзакций и блокировок) справляется с такой эксплуатацией на ура. Плюс БД еще надо администрировать, заботиться о сохранности данных после сбоя(бэкапирование), туча функций и объектов для реализации бизнес-логики .... короче много всего что нужно делать, и это уже реализовано в Oracle. И как бонус, Oracle более лоялен к рукожопости разработчиков, которые считают, что все БД одинаково работают и устроены. Если данных много и надо быстро их обрабатывать, можно посмотреть в сторону Exadata. Более подробно об особенностях можно почитать в документации. А во всем остальном нужно смотреть под конкретную задачу. Самый большой минус- это стоимость.
    З.Ы.: И от себя лично добавлю, на заре карьеры я работал с MS SQL и возненавидел эту СУБД, как раз из-за реализаций транзакций и блокировок, и помогли мне в этом прежние разработчики. В MS SQL блокировки на уровне строк, но реализованы в общем пуле- общий пулл блокировок- это минус скорость(общий пулл надо блокировать, для записи или чтения этих блокировок) и плюс память. И чтобы не загружать особо сервер, прежние разрабы реализовали логику так, что процесс проходил мелкими транзакциями, конечно с коммитами. И были такие прецеденты, что данные удалились, а в другую таблицу не встали из-за ошибки в приложении. Потом дедлоки, это вообще отдельная тема, и приходилось разруливать изменением структуры данных, чтобы пользователи работали, только со своими данными. Короче вспоминаю, как страшный сон. Зато при разработке другой ИС где было решение взять Oracle как СУБД, через призму прошлого опыта, для меня было большое открытие, что там не будет такого гемороя, как с MS SQL. Конечно, может быть MS SQL сейчас сильно изменился в лучшую сторону, но осадочек у меня остался.
    Ответ написан
    Комментировать
  • Как записать данные в промежуточную таблицу Yii2?

    @KingstonKMS
    В модели Area есть свойство и rules для workAreas? Как они из post загружаются в модель?
    В rules workAreas должен быть safe, тогда массив загрузится и будет доступен. И ещё, его надо переводить в строку, чтобы сохранить в базу. worker_id должен быть соответствующего типа.
    Ответ написан
    1 комментарий
  • Пропадает память. Как тренировать?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Необходимо найти баланс. Это трудно.
    1. Охранять сон. Послать всех куда-подальше и начать высыпаться.
    2. Ограничить рабочее время. Привет режим с 8 до 5. Я серьезно.
    3. Физическая активность. Заставьте себя ходить хотя бы час в день. Полчаса на работу, полчаса с работы. Выходите на несколько остановок раньше и идите. Если добираетесь на своем транспорте - паркуйтесь дальше от офиса.
    4. Отдых со сменой обстановки - поехать в другой город, на дачу, навестить родителей. Например можно поехать в соседний город. В Москве - в район, где не были или в подмосковье. Обязательно, чтобы была смена обстановки и внешнего вида. В этом плане здорово влияет рыбалка с удочкой в одиночку. Помогает расслабиться, неспешно подумать обо всем. Успокаивает нервы.
    5. Отказаться от вредных привычек. Не переедайте, не курите, не бухайте чересчур. Полностью и резко отказываться не надо, а уменьшить можно.
    6. Жене один раз сказать, что если не перестанет на вас орать, то к 45 вместо вас у нее останется холмик сырой земли. И если у нее есть с этим проблемы, пусть идет к психологу.
    7. Выгружать мелочи из головы в семейный календарик, приучать жену к нему (у меня так много знакомых делает, у кого несколько детей, там секции, праздники, всякие расписания).
    Ответ написан
    1 комментарий
  • Как загрузить расширение для Yii2 на хостинг?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1. Узнайте установлен ли на хостинге composer. Если установлен, то вам повезло. У вас более удобная работа с проектом. Заливаете все файлы и файл composer.json. Далее php composer update И все. Проект установлен. Но радоваться не стоит. Установленный композер на хостинге это не всегда счастье. Так какое установлен глобально, а у вас нет прав админа, то он может не позволять создавать временные файлы типа .cache и другие. Тут вам придётся изворачиваться и менять пути хранения таких файлов а composer.json разделе config.

    2. Если у вас совсем печальный случай, то можете скачать последний пакет композера (composer.phar). Закинуть его в папку с проектом и устанавливать пакеты через него командой php composer.phar update

    3. Если ни то и не другое не получается, то устанавливайте пакеты на локальной машине и просто обновляйте папку вендор при каждом изменении. Надеюсь, до этого не дойдёт.
    Ответ написан
    Комментировать
  • Какие способы формирования запросов к БД в Yii2 лучше?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Если вам важна производительность и хороший код, то на все чтения делаем обычные SQL запросы или используем Query Builder от Yii2.

    ActiveRecord работает с объектами, поэтому он сильно «ударяет» по производительности при составлении больших и сложных запросов. Кроме того, в объектах AR не только сами данные, но и: поведения, события, валидация...

    Если брать CRUD (Cread Read Update Delete), то для CUD (модификация данных) использовать ActiveRecord. А там где R (чтение) - используем SQL и QB. В таком случае вы будете работать с данными в виде массива, либо в виде простых DTO, на которые вы сами «маппите» данными из запроса. DTO будет удобно использовать для работы. $dto->name вместо $items['name']. Хотя, если вы используете шаблонизатор twig, — Вам особо без разницы. Но на PHP объекты (DTO) вам ещё и удобно будет использовать в редакторе.

    При таком подходе код будет чище, а производительность выше!
    Ответ написан
    2 комментария
  • Что почитать по тестированию ПО?

    @Celeron404
    Многие работодатели сейчас утверждают, что Савина уже недостаточно и требуют более специфичных знаний. Одна из хороших книг - Станислава Куликова «Тестирование программного обеспечения. Базовый курс.» (распространяется бесплатно).
    Также один из работодателей мне советовал книгу Джеймса Уиттакера, Джейсона Арбона и Джеффа Каролло "Как тестируют в Google".
    UPD.
    Наткнулся на прекрасную статью о литературе для тестировщиков и не только. Там, в том числе, книгу "Как тестируют в Google" считают неоправданно рекомендуемой. Советую ознакомиться в первую очередь с этим списком.
    okiseleva.blogspot.com/2014/02/blog-post_6.html
    Ответ написан
    2 комментария
  • Symfony - в чём разница между listener и subscriber, и что означает теговать (tags)?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Listener — слушатель одного или более событий, некий такой атомарный исполнитель. Не знает на что он подписан, но легко управляется через конфигурацию. Если разные слушает — нужно самому логику разделения обработки писать.
    Subscriber — подписчик имеет реализацию интерфейса SubscriberInterface с методом getSubscribedEvents(), то есть сам объект слушателя знает, на что он подписан и какие методы какие события будут отрабатывать

    По сути одно и тоже, но такая разница иногда пригождается. Иногда нужно иметь контроль снаружи, иногда наоборот.

    Теги — отдельный механизм контейнера. Проставляя тег на набор сервисов — мы во время компиляции контейнера можем достать помеченные определенным тегом сервисы и заинжектить в др сервис (очень часто используется мной например), отсортировать по допатрибутам или сделать любую иную логику
    https://symfony.com/doc/current/service_container/...
    Ну например есть десяток сервисов, которые обрабывают каждый свой тип файла, еще и лежат в разных бандлах. Как получить их в одной фабрике? Правильно — проставить им тег, в компиляторе приложения достать все и в фабрику засунуть. При появлении нового сервиса с тегом - он автоматом будет в фабрике.

    В коде самого фркймворка этот механизм активно используется. Например есть разного рода констрейнты - добавить новый вы можете и автоматом зарегистрировать, проставив тег (на самом деле симфони-разработчики пошли дальше и тег навешивают по интерфейсу, но важен механизм) и данный констрейнт будет доступен коду, в котором требуются все констрейнты (опять той же фабрике)
    Ответ написан
    Комментировать
  • Определяемся с выбором беспроводного МФУ для дома?

    @Mark_Berkutov
    Специалист STMC-тестирования ВЕНЕТА СИСТЕМ
    Унылая картина -
    HP, в низшем сегменте, выставил аппарат как у всех - с немагнитной системой переноса тонера. При этом у HP цена страницы печати, на оригинале, зашкаливает за 4,2 руб.. При заправке картина тоже будет безрадостной - тонерка прослужит не более 3-5 раз, а блок фотобарабана пока не восстанавливается. Чипы на HP серии JI астрономической цены, а оставив старые теряется контроль за остатками тонера.
    Таким образом - HP в данном конкретном случае это будет выбор "бренда" - дорого и престижно.

    Samsung - качество пластика и конструкция картриджа (101,111) таковы, что нормально восстановить его могут не только лишь все - даже после первого цикла. Чип блокирует работу - либо менять, либо прошивать аппарат. Бренд так себе (их уже HP купил), стоимость владения может неприятно удивить.

    Ricoh - несмотря, на то что картриджи даже имеют пробку для самостоятельной заправки никаких запчастей для картриджей кроме фотовала нет. Через 3-5 циклов придётся купить новый картридж.
    При этом модель SP150 имеет только "верхнюю" подачу бумаги (лотка нет), вследствие этого необходимо всегда вынимать бумагу после печати и закрывать верхнюю подачу иначе все мелкие предметы в доме так и норовят туда незаметно упасть.
    Несомненное достоинство Ricoh перед остальными, в данном случае, это картридж "всё в одном", за исключением SP325 - там тоже раздельный картридж.

    Brother - картридж раздельный, тонерка заправляется, фотовалы на драм-юнит есть. Главное на стартовую тонерку установить флажок сброса счётчика - хотя опытные пользователи при открытой крышке блокируют датчик закрытия крышки и при включении отвёрткой нажимают на ответную часть флажка сброса счётчика в аппарате.

    Xerox - как не удивительно, но эти модели имеют самую низкую стоимость отпечатка на оригинале. Реальным неудобством является необходимость замены чипов, либо прошивка аппарата. Тонерка заправляется, драм восстанавливается.

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

    При малых объёмах печати ( до 500 стр./мес.) наиболее интересен Ricoh SP150 - самый дешёвый аппарат + бонус - имеет прямой тракт прохода позволяющий уверенно прогнать плотный носитель.
    При печати около 1000 стр./мес. наиболее интересен Brother
    Для печати более 2000 стр./мес. разумно взять Xerox или Ricoh SP220

    При подборе техники начального класса в плане производительности смотреть надо не на скорость печати, а на объём картриджа. Оптимальным будет замена тонерной части раз в 1-3 месяца.
    Ответ написан
    2 комментария
  • Как лучше добавлять дату добавления и редактирования в базу из yii2 для скорости, тригером БД или поведением?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Есть ли смысл использовать тригеры и есть ли прирост от этого, а может и наоборот?


    Зачем вам логику добавления даты куда-то перемещать?

    Если использовать поведения, то есть один из недостатков — у вас сохраняются данные всегда при создании и обновлении.

    Например, вы обновили счётчик поросмотров - у вас обновилась дата обновления. Хотя логически она должна изменятся приобновлении какой-то важной информации (контента). Если вы эта дату выводите на страницу, то будут проблемы. Вы обновили только счётчик просмотров контента, но не меняли контент. Такая дата дезинформирует пользователей. При любом просмотре пользователем дата будет обновляться.

    Я бы рекомендовал выстраивать логику таким образом, чтобы вы управляли датами на уровне бизнес логики. Если это дата создания, то передаёте дату при создании сущности. Если это дата обновления, то при изменении контента.

    Небольшой пример. Есть блог. С полями: заголовок, дата обновления, просмотры. Вы обновляете счётчик посещения - обновляется дата. Это не логично. Дата изменяться должна при обновлении контента.
    Ответ написан
    Комментировать
  • Как в GridVIew сокращать длиный текст?

    В $data хранятся все свойства, функцией mb_substr обрезаем строку до нужного кол-ва символов, если длина исходного текста меньше заданного, то выводим без изменений, иначе - сокращенную строку.
    В myattribute подставляйте свой атрибут.
    [
        'attribute' => 'myattribute',
        'value' => function($data) {
            $charsCount = 100;
            $croppedText = mb_substr($data->text, 0, $charsCount);
            return mb_strlen($data->text) > 100 ?  $croppedText : $data->text;
        }
    ],
    Ответ написан
    1 комментарий
  • Нормально ли для программиста быть трудоголиком, любить рутину, иногда быть уставшим и тупить от этого?

    @majstar_Zubr
    C++, C#, gamedev
    Предлагаю обобщить проблемы в одну и решить её.

    Обобщенная проблема называется дисциплинированность. Придерживание дисциплины - сложная работа для силы воли, и поэтому её сводят к формированию привычек и жёсткому следованию и слежению за исполнением того, что составляет привычку.

    Вам нужно привить себе привычку жёсткого ограничения времени на любую задачу.

    Мытьё посуды, ремонт чего-то, чтение книги, кода, контрибуция в пет/опенсорс проект, семья - для всего нужно ввести правило, уделять не менее N времени в день/неделю/месяц.

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

    Может уйти и больше времени, потому что привычка, поддерживающая дисциплинированность требует называть вещи своими именами и не обманывать себя.

    Производительность и занятость часто путают с продуктивостью и результативностью, и если вам очевидны симптомы того, что вы часто путаете первое со вторым, то значит пришло время остановится и:

    1) вернуться к азам - перечитать основополагающие для вас книги, например, для меня это Совершенный код, Экстремальное программирование и Тайм-менеджмент для системных администраторов; если есть подозрения, что вместо паттерна вы используете антипаттерн, то пришло время для тотальной работы над ошибками;

    2) начать записывать каждое решение задачи за день, самое важное - указывать время начала и время конца, если вы не ведёте ежедневник (в любом виде, достаточно весьма обобщенного лога деятельности за день);

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

    Для интеллектуальной деятельности и инженерного дела, связанного конструированием, проектированием, согласованием поток вреден, и нужно следить за тем, чтобы не забывать выныривать. Чередование видов деятельности и задач, позволяет медленнее накапливать стресс, потому что смена деятельности даёт отдых разным отделам мозга и частям организма в целом в разное время.

    Проблема зарывания в работу/задачу решается введением строгого ограничения на продолжительность работы. Поставьте на своем смартфоне беззвучные и без вибраций будильники с перерывами в час+8 минут со смещением 5 минут к последующему будильнику. Позже оптимизируете под себя, просто важно ввести привычку поставить все на паузу, выкинуть из головы все на бумагу или в текстовый файл и 5 минут подышать свежим воздухом, выпить чаю, etc.

    Проблема с жадностью выделения времени на оптимизацию работы решается обычным счётчиком 1-2-3. Если вы столкнулись с проблемой третий раз, то вы отдаете себе отчёт, что налицо закономерность, и поскольку математически доказано, что оптимизация сейчас сэкономит время, то вы спокойно в ежедневнике выделяет время на сегодня на оптимизацию.

    Когда вы начнёте прививать привычку, вас может поначалу демотивировать количество времени, которое вы тратите на тривиальные задачи, и количество свободных часов в будний день. Но вы должны понять, в этом и заключается мощь и сила дисциплинированности: время в сутках строго ограничено, физиологические и интеллектуальные ресурсы на день строго ограничены, каждый день вы в магазине, где вы и покупатель, и продавец, каждый день у вас торги, tradeoffs, что я сделаю сегодня, а что я откладываю, если я дело откладывал всю неделю, то почему не хватает времени будет очевидно, если вы ведёте лог, учёт трат времени а своем ежедневнике. Только так можно понять, то ли задача неадекватная, то ли просто месяц для этой задачи неподходящий.

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

    Для того, чтобы не перерабатывать, нужно делать лишь самое необходимое именно сейчас, чтобы брать как можно меньше рисков в текущий момент, откладывать принятие решений на как можно поздний срок - но тут надо уметь называть вещи своими именами - одно дело, когда вы избегаете риска, другое дело, когда вы избегаете ответственности. Если у вас нет ограничения по времени, что ещё может заставить вас попросить помощи или начать работу над ошибками, валидировать свои знания, привычки самого себя?

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

    @majstar_Zubr
    C++, C#, gamedev
    У вас должна быть цель стать профессионалом в области. Потому что только профессионал может выбирать, с кем работать, где работать, над чем работать - над крупными проектами для правительств, над банковским софтом, над веб-проектами или над играми.

    Вот это будет правильная установка. А что учить и в каком порядке вам никто не скажет, потому что требования меняются, возможности устроится на работу у всех разные, неизменно только одно - желательно знать все и вчера. Именно с этой установкой рисуются абстрактные Programming paths, но толку от них не будет никакого, если вы не сможете обобщать знания и не будете постоянно работать над строительством своего дерева знаний. Главное - пополнять свои знания концепциями, из которых потому выводятся базовые шаблоны, шаблоны проектирования, а из них, в свою очередь, архитектурные шаблоны, методология разработки, и непосредственно связь с рынком, экономикой, психологией и прочим, и так далее. И эти концепции не только в книгах по разработке ПО, их много в теор вере, дискретной математике, физике, которые дождаться в голову только в процессе получения высшего образования, системно.

    Любовь к учению - единственное, что может поддерживать на пути, потому что путь очень долгий. Многое будет непонятно и с первого раза, и со второго. Иногда и с третьего, потому что вы на самом деле не поняли базовые вещи. Или выбрали неправильную книгу. Или начали читать правильную книгу слишком рано. А узнаете вы расхождение между объективным знанием и собственным все равно не раньше, чем столкнетесь с проблемой на практике. А по-другому никак.

    Что вы можете сейчас сделать - взять прицел. Конкретно сформулируйте профессию и специализацию. Оптимизируйте процесс полученния знаний: как бы не ругали образование в ВУЗах СНГ, все же это нехилая экономия времени, если вы сразу будете получать профильное образование.

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

    А на самом деле надо. Вы должны получать удовольствие от получения знаний, потому что иначе вы не сможете сделать игры, которые могли бы приносить новый опыт игрокам. Чтобы транслировать новый опыт через генераторы опыта - игры - нужно уметь и любить этот опыт (субъективный и эмоциональный) получать, и представлять, как его давать людям. Разработка игр - всего лишь автоматизация этого процесса.

    Так что, запасайтесь попкорном и начните с языка Си. Освойте структурное программирование. Алгоритмы, структуры данных. Архитектуру компьютера, ОС. Не торопитесь как можно быстрее неправильно понять как можно больше вещей за кратчайший промежуток времени. Перечитывание и практикуете, пока не станет понятно так, что сможете научить кого-нибудь другого. Макконнелл, Роберт Мартин, Кент Бек, Эрик Эванс, Мартин Фаулер + 1 год дополнительного быдлокодинга на java и c# и c++ и у вас появится понимание ООП, ФП, типовые устройства моделей памяти и сборщиков мусора. Ещё за год научитесь писать настоящий ООП код, читать чужой код, даже если он написан в процедурно-макаронном стиле как книгу. Но надо ли вам эти три скучных года, потерянных полностью для личной жизни? Не проще ли получить solid knowledge и постепенно получать практику в среде опытных специалистов?

    Подытожу: становитесь профессионалом, на это у вас уйдёт ~10 лет после введения привычки учится в свободное время. Периодически смотрите на требования вакансий и составляйте себе древо знаний, которое хотите получить.
    Ответ написан
    Комментировать
  • Как сделать первую букву заглавной используя регулярные выражения в руби?

    У меня была подобная задача.
    Нужно было «имя отчество фамилия» преобразовывать в «Имя Отчество Фамилия».
    Решил через расширение стандартного класса `class String`.
    Метод `#capitalize_words` разбивает строку на массив из слов и проходит по каждому слову и делает ему «капитализацию».
    После этого собирает массив в исходную строчку.

    class String
      # @see String#capitalize
      def capitalize_words(separator = ' ')
        words = split(separator).map(&:capitalize)
        words.join separator
      end
    end


    Ниже тест `RSpec` для метода, на всякий случай.

    describe String do
      describe '#capitalize_words' do
        context 'with word' do
          let :one_word do
            'foo'
          end
    
          it 'return capitalized word' do
            expect(one_word.capitalize_words).to eq 'Foo'
          end
        end
    
        context 'with words' do
          let :words do
            'foo bar'
          end
    
          it 'return capitalized all words' do
            expect(words.capitalize_words).to eq 'Foo Bar'
          end
        end
    
        context 'with custom separator' do
          let :words do
            'foo$bar'
          end
    
          let :custom_separator do
            '$'
          end
    
          it 'return capitalized with custom separator' do
            expect(words.capitalize_words(custom_separator)).to eq 'Foo$Bar'
          end
        end
    
        context 'with empty' do
          let :empty do
            ''
          end
    
          it 'return empty' do
            expect(empty.capitalize_words).to eq empty
          end
        end
      end
    end
    Ответ написан
    Комментировать
  • Какие перспективы есть у Elixir?

    @yaBliznyk
    Язык действительно интересный и легкий. Есть русская документация в elixir school и достаточное количество библиотек. Есть русское сообщество в телеграмме @proelixir Есть курсы elixir и большое количество книг тоже на русском. Язык развивается, пусть не так быстро, но от того возможно качественно.
    Его активно используют за бугром, там найти работу не составит труда. У нас достаточно проблематично джуном. Но я бы сказал что джуном берут только в офис практически везде, поэтому вам должно либо повезти с местом жительства, либо вы должны будете продвинуть его на текущем месте работы.
    Я на чистом эликсире писал парсеры, многопоточность выручает очень сильно.
    Рассматривать elixir без phoenix не имеет смысла. Phoenix имеет смысл рассматривать только как очень быстрый микросервис. Как вариант для websockets. Вполне может выстрелить LiveView но до этого надо дожить. В большинстве компаний, на сегодняшний момент в России, предпочтут go вместо elixir.
    В купе за 10 лет он только разовьется, просто в России его еще толком не заметили.
    Как основной язык, возможно, но только там где уже работает erlang. Поэтому лучше потихоньку изучать как добавочный и прикручивать его там, куда go еще не прикрутили)
    Мышление меняет очень сильно, после пары месяцев работы с ним будете смотреть на другие языки уже совсем иначе, но точно не хуже!
    Ответ написан
    Комментировать
  • Стоит ли доверять Windows 10?

    15432
    @15432
    Системный программист ^_^
    Несколько сторонних антивирусов ставить точно не стоит, они друг другу мешают и грузят систему. Моё мнение - для продвинутого пользователя антивирусы не требуются, достаточно не запускать подозрительные файлы и не тыкать по ярким заманивающим ссылкам.
    Ответ написан
    Комментировать