• Как сделать итерацию по вложенному хешу?

    0xD34F
    @0xD34F
    data.each_value{|n|
      puts("#{n[:name]}: вес #{n[:weight]} г., количество #{n[:qty]} шт.")
    }
    Ответ написан
    1 комментарий
  • Мне 39 лет, возможно ли с нуля изучив php найти работу?

    Fockker
    @Fockker
    Потомок старинного рода Ипатьевых-Колотитьевых
    Тут важен бэкграунд.
    Лет двадцать назад - действительно, после 40 для основной массы населения уже наступал период "кино, вино и домино", в 50 - "кефир, клистир, и тёплый сортир", и в 60 на вечный покой.
    Но в современном же мире и 50, и 60 - это не возраст. Вполне себе ещё "водка, лодка и молодка".

    Но опять же - всё зависит от бэкграунда.
    Если в анамнезе нет запойного пьянства, а есть хоть какая-то физическая активность и привычка к умственному труду, то и "за 60" - вполне продуктивный возраст. Взять хоть титанов советской инженерии. Льву Керберу в 1963 году - 60 лет. А он зам. Туполева. Сам Туполев только в 1966 году оставил руководство КБ, а ему было 78 лет в этот момент! Борису Чертоку в 1974 году - 62 года. Он зам генерального конструктора РКК "Энергия". И примеров можно найти миллион.

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

    PHP не зря считается языком для нубов. Это ОЧЕНЬ лёгкий язык. Основы можно схватить буквально за пару часов. Но нужно иметь хотя бы минимальную склонность к программированию, логическое мышление, абстрактное мышление, умение учиться, минимальную целеустремлённость. То есть программирование - оно, вообще-то, не для всех. И в этом смысле не стоит рассматривать его как некий гарантированный источник дохода. Есть способности - будет доход, и 40 лет не помеха. Нет способностей - тут и 20-летних нытиков полно в теге "Карьера вайти!", которым "ой как всё сложна, а можно чтобы многа денег, но при этом не очень напрягаться?"
    Ответ написан
    Комментировать
  • Мне 39 лет, возможно ли с нуля изучив php найти работу?

    @SantaDelToro
    Мне 39 лет, возможно ли с нуля изучив php найти работу?

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

    Я знаю о чём говорю, потому что сам ищу уже 3 года работу, мне 36. Я не с нуля, я сайты делал всю жизнь на фрилансе (на php и js). Сейчас сайты на фрилансе готовы делать за 500 рублей + отзыв, масса желающих, это и выпускники курсов, и выпускники вузов без опыта, и такие как я, кто раньше на этом пытался заработать на жизнь.

    Сейчас клиентов на сайты поубивилось, этому есть целый ряд причин:
    • мелкие/средние сайты в целом сдают позиции на фоне Youtube, Instagram и т.д.
    • многие отрасли заняли крупные игроки (напр взять вакансии - если раньше были сайты с вакансиями в каждом городе, то сегодня это несколько крупных федеральных игроков, если взять интернет-магазины - то сейчас всё подминают под себя федеральные площадки, имеющие федеральную логистическую сеть, где вам проще стать их партнёром и продавать всё с их площадки, т.к. весь народ тусуется там, это и озон, и вайлдбериз и т.д., в сша ранее всё аналогично было до тех пор, пока не остался один амазон и walmart и так во всех сферах)
    • всю остальную мелочевку под себя взяли wix'ы и прочие конструкторы сайтов, где все сами себе лепят сайты либо заказывают слепить что-нибудь на этих площадках фрилансеров, а это, как я уже писал, 500 рублей + отзыв и 2 дня работы (но это надо ещё конкурс выиграть на эту работу, т.к. желающих попотеть за эти деньги немеряно).


    Так что на фрилансе не от хорошей жизни, а от того, что на работу никого не берут. Моя ошибка была в том, что я вовремя не ушёл из этой отрасли в более перспективную, нужно было уходить либо с PHP, либо с сайтостроения (пытаться устраиваться в финтех джуном лет 10 назад, пока ещё это было возможно, ибо в сайтостроении как программист не прогрессируешь, наоборот - деградируешь, стек технологий устаревает), либо вообще из IT. Меня не берут из-за отсутсвия опыта работы в команде и опыта коммерческой разработки на том или ином фреймворке. Я бы и рад получить этот опыт, но негде. Работодатели дообучать старичков не готовы. Если вам за 30, вы не будете сидеть сутки решать ненужную вам задачку из спортивного интереса (а в 20 я с удовольствием сам это регулярно проделывал).

    Джунам без знания готового стека компании двери сейчас везде закрыты, если только по знакомству. Там, где вы в вакансиях видите джун, по факту на собесе будут спрашивать за миддла. Т.е. ООП, паттерны проектирования, GIT, работа в команде, опыт работы с фреймворком X, будут смотреть, можно ли сразу вам будет кинуть задачу и ждать результат, не контролируя каждый шаг. Т.е. им нужен готовый человек, которого не нужно обучать, на это сейчас работодатели уже не идут, ибо нет надобности. Конкурс - по 100 человек на одну вакансию джуна. Из 100 точно найдётся тот, кто уже работал с их стеком в другой конторе, нет смысла кого-то обучать, дураков нет, деньгами работодатели не разбрасываются. А джун сейчас везде указывают лишь для того, чтобы платить по-джуновски. Когда указывают миддл, знайте, что спрашивать будут по знаниям на senior'а, а платить как миддлу.

    откуда ветер дует

    В интернете есть куча "реальных" историй успешных успешников, вкатившихся в айти, но ответьте себе честно, вы сами то в это (тыц, тыц, тыц) верите? Не чувствуете, чем это всё попахивает? Подумайте, куда побежит добрая половина желающих вкатиться, вдохновившись подобными историями и "честными" комментариями под ними? Не на курсы ли какие-нибудь? Более того, разоблачали уже и кучу таких "вкатышей" и в youtube (да-да, пропаганда не ограничивается текстовыми постами). Сегодня в IT больше всех зарабатывают продавцы лопат. Золота для самих золотоискателей нет.

    Подытожим:
    1. Игнорируйте в интернете истории успешных успешников (не важно, посты ли это, или комментарии под ними, или это в youtube "Канал вкатившегося в IT 60 летнего таксиста"), всё, что вам нужно, это мониторинг сайтов вакансий и понимание того, как там всё происходит на самом деле, т.е. немного поэкспериментируйте, не начиная изучать само программирование, прощупайте почву.
    2. Не смотрите на количество самих вакансий. Хрюши отрабатывают свои копейки. Им нужно показывать видимость своей работы. По факту, когда начнёте рассылать отклики, то увидите, что лишь 60% откликов вообще ими открываются (hh показывает, открывали или нет отклик), т.е. почти половину ваших откликов вообще никто не увидит. Но иногда вас могут даже пригласить на собеседование, однако если вы не миддл, то будет пара каких-нибудь вопросов, не имеющих отношение ни к джуну, ни к программированию вообще, и фраза "если что мы вам перезвоним", а хрюша отметит у себя в тетрадке +1 к списку проведённых за день собеседований (при этом за результатом собеседования вы ещё будете бегать неделю, а там как правило про вас уже забывают сразу по его окончании).
    3. Отговариваю ли я вас изучать программирование? Нет, вовсе нет, но подходить к этому вопросу со стороны экстренного поиска нового источника средств к существованию нужно с трезвой головой и пониманием некоторых вещей, упомянутых мной выше. Иначе можно остаться вообще с голой задницей. Программисты низшего звена (высшего - это своего рода управленцы, их много и не нужно, это как в отделке - нужны Равшан, Джамшут и 1 насяльника), коих большинство, сегодня примерно в том же положении, что и таксисты/риелторы. Только в таксомоторку и агентство недвижимости проще устроиться на работу.

    Ответ написан
    122 комментария
  • Vue-tables-2. Как выводить данные из вложенных объектов?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Поиск по свойствам вложенных объектов "из коробки" не предусмотрен. Так что без костылей не обойтись.

    Вижу три варианта:
    • Перенос свойств вложенных объектов непосредственно в объект строки таблицы. То есть, сейчас у вас есть { user: { city: { name: "..." } } } , а будет { userCityName: "..." } или { user_city_name: "..." }, как-то так.
    • Создание кастомных фильтров по столбцам, созданным с помощью templates. Всё вручную - создание фильтра, написание логики его работы и т.д. Также из минусов данного подхода - элементы управления кастомных фильтров находятся за пределами таблицы, в отличие от встроенных. Нагуглил пример реализации, на его основе сделал пример поиска по свойствам вложенных объектов.
    • Наконец, можно обернуть данные в Proxy. Определять templates в этом случае не нужно, всё работает так, будто интересующие нас свойства принадлежат не вложенным объектам, а непосредственно объекту строки таблицы. Соответственно, и встроенный поиск тоже доступен. Идея в чем: делаем get-ловушку, в ней режем имя свойства, например "user.city.name", на куски, идём вглубь по полученной цепочке имён, достаём значение. Опять же, сделал небольшой пример.
    Ответ написан
    Комментировать
  • Как реализовать подзагрузку страницы перед переходом на нее в Vue JS?

    0xD34F
    @0xD34F Куратор тега Vue.js
    В интересующем вас компоненте определяете хук beforeRouteEnter - в нём и инициируете получение данных. Как оно конкретно выглядит - непосредственно выполнение запроса, или вызов экшена - тут вам виднее. После получения данных дёргаете next. Всё.

    UPD. Не, не всё. Если не очень поняли, о чём я - сделал небольшой пример. Три роута, первые два ни о чём, последний - показывает данные из хранилища. И при каждом переходе инициирует их обновление.
    Ответ написан
    Комментировать
  • Как правильно реализовать вызов множества диалоговых окон во Vue (Vuex, Element UI)?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Передавайте в мутацию вместо просто состояния диалога объект вида { имя_диалога: состояние }. Тогда при обновлении состояния диалогов не будет необходимости обращаться к ним поимённо:

    mutations: {
      dialogShow: (state, payload) => Object.assign(state.modals, payload),
    },

    В компоненте, вместо вычисляемого свойства modal, отвечающего за работу с одним диалогом, будет свойство modals, обеспечивающее получение состояния всех диалогов. А чтобы изменение состояния диалога по-прежнему выглядело как присваивание, воспользуемся Proxy, где будем перехватывать установку значений и вызывать мутацию:

    modals() {
      return new Proxy(this.$store.state.modals, {
        set: (target, prop, value) => {
          this.$store.commit('dialogShow', { [prop]: value });
          return true;
        },
      });
    },

    Соответственно, в шаблоне заменяем установку значения просто свойства на установку значения свойства объекта:

    <el-button @click="modals.dialogSignIn = true">sign in</el-button>
    
    <el-dialog :visible="modals.dialogSignIn" @close="modals.dialogSignIn = false">
      <span slot="footer" class="dialog-footer">
        <el-button @click="modals.dialogSignIn = false">Закрыть</el-button>
      </span>
    </el-dialog>

    Посмотреть живьём.
    Ответ написан
    1 комментарий
  • Как сделать фильтрацию по нескольким значениям в VueJS?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Сложно это всё. Четыре селекта - очень похожие, четыре вычисляемых свойства - очень похожие. Многовато копипасты. Надо упростить.

    Первым делом внимательно посмотрим на все эти похожие куски кода, найдём, где они отличаются, и на основе этих отличий сделаем описание фильтров:

    filters: [
      { name: 'calculator.brand_filter', getter: obj => obj.brand.name, value: '' },
      { name: 'calculator.company_filter', getter: obj => obj.company.name, value: '' },
      { name: 'calculator.country_filter', getter: obj => obj.brand.country, value: '' },
      { name: 'calculator.side_filter', getter: obj => obj.sides, value: '' },
    ],

    Затем сделаем собственно фильтрацию, пропустим данные через массив фильтров (если значение фильтра выставлено - производится фильтрация, нет - оставляем данные как есть):

    computed: {
      filteredProfiles() {
        return this.filters.reduce((profiles, { value, getter }) => {
          return value
            ? profiles.filter(n => getter(n) === value)
            : profiles;
        }, this.profiles);
      },
    },

    Далее, надо дать пользователю возможность задавать значения фильтров. Сделаем компонент фильтра:

    Vue.component('filter-select', {
      props: [ 'name', 'items', 'value' ],
      template: `
    <div>
      <p>{{ name }}<p>
      <select :value="value" @change="$emit('input', $event.target.value)">
        <option value="">-</option>
        <option v-for="n in items">{{ n }}</option>
      </select>
    </div>`
    });

    И метод, с помощью которого будем получать массивы уникальных значений для селектов:

    unique(arr, getter) {
      return [...new Set(arr.map(getter))];
    },

    Наконец, создадим сами фильтры:

    <filter-select
      v-for="f in filters"
      v-model="f.value"
      :items="unique(profiles, f.getter)"
      :name="trans(f.name)"
    ></filter-select>

    Также не будем забывать про обнуление значений фильтров. Так что вот метод сброса фильтров и кнопка, по клику на которую он будет вызываться:

    resetFilters() {
      this.filters.forEach(n => n.value = '');
    },

    <button @click="resetFilters">{{ trans('calculator.reset_filter') }}</button>

    Демо можно посмотреть здесь (да, тут меньше фильтров, чем у вас - ну так вы свои данные не показали, а у меня воображения на большее не хватило).
    Ответ написан
    1 комментарий
  • Как рендерить слоты в списке?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Честно говоря, не очень понятно - а зачем тут вообще слоты. Передавайте в компонент данные обычным параметром, на их основе создавайте список.

    Но если всё-таки нужно использовать именно слот - пишите собственную render-функцию. Т.е., вместо шаблона, который есть у вас сейчас, будет что-то вроде

    export default {
      render(h) {
        return h('ul', this.$slots['list-item'].map(n => h('li', [ n ])));
      },
    };


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

    components: {
      SlotWrapper: {
        functional: true,
        render: (h, context) => context.props.node,
      },
    },

    <li v-for="n in $slots['list-item']">
      <slot-wrapper :node="n"></slot-wrapper>
    </li>
    Ответ написан
    5 комментариев
  • Почему массивы выводятся именно так?

    0xD34F
    @0xD34F
    Через запятую указываются не конкретные индексы, а задаётся интервал индексов. Первое число - начальный индекс, второе - сколько элементов надо взять. Читайте документацию.
    Ответ написан
    Комментировать
  • Как сделать downcase только для первых букв в руби?

    0xD34F
    @0xD34F
    str.gsub(/\b\w/){|m| m.downcase}
    Ответ написан
    Комментировать
  • Как посчитать буквы в строке и вывести на экран список букв и их количество в предложении?

    0xD34F
    @0xD34F
    str
      .delete(' ')
      .split('')
      .reduce(Hash.new(0)){|acc, n| acc[n] += 1; acc}
      .each{|k, v| puts "#{k}: #{v}"}
    Ответ написан
    4 комментария
  • Какая IDE для Ruby?

    DevMan
    @DevMan
    Ответ написан
    Комментировать
  • Как можно протестировать FizzBuzz с помощью рубиевского MiniTest`a?

    oh_shi
    @oh_shi
    Это не тру Ruby Way FizzBuzz, оно могло бы выглядеть как-то так:
    puts ((1..100).map do |i|
      str = ''
      str << 'Fizz' if i % 3 == 0
      str << 'Buzz' if i % 5 == 0
      str.empty? ? i : str
    end)

    А по тестам, вам не нужно тестировать каждое из 100 значений. Достаточно минимального, максимального и по тесту под каждую ветку в if. Лучше избегать while и заводить нужное число итераций в метод через параметр, и по нему уже идти через each/map.
    Ответ написан
    Комментировать
  • Какой двигатель выбрать?

    @rPman
    Конструкция уже есть? Нужно просто все посчитать.
    Обычными кухонными весами, зацепившись за колесо крючком, начни раскручивать колесо с тем ускорением, скоростью и рабочей нагрузкой что тебе нужна, на весах будет число в ньютонах. Теперь бери двигатель (если есть с редуктором то с ним), закрепи веревку к оси и, накручивая ее на ось, поднимай груз, закрепленный с другой стороны, равный весу, который показывали весы. Собственно все что нужно ты поймешь.

    И да, потом плюсуй 2х запас.
    Ответ написан
    Комментировать
  • Как в руби удалить массив с пустым элементов из массива массивов?

    0xD34F
    @0xD34F
    arr.delete_if{|n| n.include?('')}
    Ответ написан
    Комментировать
  • Как разбить массив на равные части?

    vabka
    @vabka
    Токсичный шарпист
    Ответ легко ищется поисковиком

    a = [0, 1, 2, 3, 4, 5, 6, 7]
    a.each_slice(3) # => #<Enumerator: [0, 1, 2, 3, 4, 5, 6, 7]:each_slice(3)>
    a.each_slice(3).to_a # => [[0, 1, 2], [3, 4, 5], [6, 7]]

    https://rdoc.info/stdlib/core/Enumerable#each_slic...
    Ответ написан
    2 комментария
  • Интересует мнение об онлайн школе Скиллбокс?

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

    @mkone112
    Начинающий питонист.
    Каков минимальный порог вхождения в программирование?

    Минимальные моторные функции. Полным паралитикам думаю будет сложно писать код только движением глаз.

    Функциональная сенсорная система - минимум осязание, лучше слух, в идеале - зрение с возможностью различать текст.

    Наличие цнс(хотя судя по тому коду что я пишу - это опционально).
    Ответ написан
    Комментировать
  • Создание сайта нарушение прав?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Трансляция любого фильма разрешена только по лицензии правообладателя/дистрибьютора.

    Если я буду качать контент в свободном доступе

    Если ты нашел на улице наркотики (в свободном доступе лежали на улице) и потом пошел их продавать, будет это нарушением?
    Ответ написан
    1 комментарий
  • Легально ли майнить на домашнем пк в РФ в 2021?

    bestowhope
    @bestowhope
    Печатает...
    Тут.
    И тут

    Краткий ответ: Майнинг запрещен, но разрешен. Устроит?)

    Как всегда знай закон по тематике ОТ и ДО, и к тебе не будет вопросов.
    Крипта - НЕ является средством платежа или валютой в нашей стране. Соотв. делай ты что хочешь.
    У нас Биток - это имущество...

    Но смысла в этом просто ноль. Если конечно ваш домашний пк не представляет из себя станцию из сотки карт и дом ваш загородный "бункер" с топ проводкой.

    Приход и уход невозможно отследить, в этом весь и смысл. Соотв. если ты будешь сидеть через забугорскую биржу - никто и никогда не узнает что у тебя там на кошельке. "Да и твой ли он?".

    Если кошелек у компании в РФ - уже сложнее. Т.к теперь по закону только пару компаний могут чето там делать. Однако даже если тебе на кошелек и упадет с сотню битков - встанет вопрос: "А вы уверены что я что-то майнил?".

    При условии что ты конечно не будешь потреблять тонны киловатт энергии/соседка баба зина не будет жаловаться что ей зимой вдруг жарко под твоей хатой/твои карты не пополняются миллионами от некого "CryptoMakingHome Company"
    Ответ написан
    1 комментарий