• Как деплоить небольшие проекты?

    @Stqs
    senior software developer
    вопросы у вас философские, на каждый можно отвести часы обсуждения
    Полноценный CI/CD поднимать не вижу смысла ввиду размеров

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

    1) git не есть инструмент для развертывания по, git лишь для версионирования кода
    и по-идее результатом вашей работы должен быть не код в гитхабе, а какой-то вменяемый артефакт, готовый к деплою (docker-image, pip пакет, npm пакет, deb пакет, jar, war, zip в крайнем случае, и тд и тп). Если производить артефакты то вопрос с тегами отпадет сам собой - у вас будет артефакт какой-то версии и все
    сервер не должен знать ни про какие гиты и ни про какие-то теги в нем
    Здесь я бы рекомендовал паковать все в докер-имеджи хотя бы только потому, что сервер в итоге не будет знать ничего о зависимостях приложения, нужных библиотеках, ниочем вообще, вам нужно установить только докер
    Огромное преимущество использование докера - в Dockerfile вы вынуждены волей/неволей описать точно и явно все шаги требуемые для установки приложения. И что самое замечательное - это все будет храниться в том же репозитории, под контролем гит - шикарно.
    Артефакты желательно хранить в каком-то артефактории,
    но если реально все просто - то можно хранить несколько последних версий прямо на сервере в какой-нибудь папочке

    2) как только вы получили артефакт - его можно деплоить
    неплохо было б знать особенности вашего проекта, но грубо говоря допустим что достаточно его зааплоадить на сервер, положить в нужное место
    опять же с этим дженкинс справится на ура и займет у вас это все дело 10 минут . Если вы опишете логику в Jenkinsfile вы выиграете еще раз потому что процесс развертывания(алгоритм) будет описан опять же ЯВНО. И будет тоже под контролем гита. (Jenkins должен знать только в каком репозитарии и в каком месте ему искать Jenkinsfile)
    Если же вы будете крутить какой-то спрятанный cron скрипт на сервере - о нем никому ничего не будет известно. Поверьте уже через короткое время все это дело начнет усложнятся, что-то забудется, что-то измениться и это все вместе больно ударит вас по яйцам.

    В чем еще преимущество такого подхода: если вам нужно сделать roll-back на предыдущую версию вам не нужно собирать проект заново выкачивая все с гита, ведь у вас есть предыдущие артефакты, ролбек в таком случае вообще не проблема - просто указываем предыдущую версию артефакта и деплоим еще раз и все

    3) Env Variables
    когда приложение стартует - считывает все что ему нужно из переменных окружения
    деплой джоба может каждый раз эти переменные устанавливать перед тем как деплоить - это было бы тоже круто потому что вы сделали бы это знание так же явным

    Итого имеем
    - логика сборки проекта описана в Dockerfile и находится под гитом
    - логика деплоя находится в Jenkinsfile и находится под гитом, и что самое главное является кодом (Jenkinsfile пишем на груви, для простых вещей вам понадобиться 30 минут изучения и все)
    - на сервере мы ничего не устанавливали совершенно кроме самого докера
    - мы храним несколько версий нашего приложения на всякий случай и можем быстро откатиться не прибегая к гиту вообще
    - сервер не знает ничего о гитах
    - на сервере нет НИКАКОЙ дополнительной логики по разворачиванию вашего приложения
    - имея все это очень легко добавлять другие сервера для деплоя - что нам нужно - грубо говоря указать другой айпи и набор env variables к нему ( если они конечно отличаются)
    giphy.gif
    Ответ написан
    5 комментариев
  • Cookie или localStorage?

    @artinnok
    бекенд-программист
    Тут нет оптимального варианта - надо смотреть на бэкэнд и фронтенд совокупно.
    Далее, считаем что фронтенд SPA, бэкэнд чистое API.

    Если выбор за Cookies:
    1. На сервере необходимо реализовать защиту от CSRF
    2. На фронте также надо будет реализовать обвязку под передачу CSRF-токена
    3. Вся авторизация будет обрабатываться бэкэндом - т.е. он ставит куку через Set-Cookie с httpOnly и secure и сам же читает из куки для аутентификации / авторизации
    4. Фронтенд не имеет доступа к кукам - не думает об авторизации и об XSS
    5. Обычно, XSS используют чтобы украсть авторизационный токен через JS - если авторизационная кука httpOnly - нет доступа к кукам через JS, нет проблем

    Если выбор за localStorage:
    1. Не надо делать CSRF защиту на сервере - нет кук, нет проблем
    2. Экранировать потенциально опасные данные бэкэндом на входе - обеспечит дополнительную защиту от XSS при рендере данных
    3. Надо делать защиту от XSS на фронте, т.е. экранирование данных при рендере - чтобы потенциально вредоносный JS код превращался в строку, а не вставлялся в DOM
    4. На фронте надо сделать обвязку под сохранение / передачу / валидацию токена
    5. Всегда остается человеческий фактор - забыли сделать экранирование при рендере на фронте, JS код имеет доступ к токену и он утек


    Могу посоветовать использовать фреймворки, как на бэкэ, так и на фронте - они обычно имеют уже реализованную защиту от основных типов атак. Мы на проекте юзаем localStorage и React, ну и верим в лучшее :)
    Ответ написан
  • Каковы реалии веб-разработки?

    @Pseudonym
    Я по своему опыту скажу, что работа может нравиться, и она жестко должна нравиться. Я видел в жизни много людей, которым работа нравилась, они не сразу стали работать в хороших компаниях с хорошей зарплатой, а кто-то сразу благодаря престижному образованию и стажировкам в лучших компаниях. Я про людей из разных сфер, с которыми работал.
    Ниже неприятная информация для тех, кто сомневается:)
    www.psychologies.ru/story/10-pravil-uspeha-ot-ksen...
    https://www.youtube.com/watch?v=nIFClfBXuIQ
    https://www.youtube.com/watch?v=VrEsICvkbT4
    https://www.youtube.com/watch?v=8EAXS6VGVKU
    https://www.youtube.com/watch?v=cc4HyLJzyWc

    Работа не только для заработка, заработать можно много где и по разному.
    Ответ написан
    3 комментария
  • Что вы делаете если не укладываетесь в срок?

    @ponaehal
    Упрощаю вопрос:
    Я запланировал сделать это за две недели, но ошибся в оценке. Что делать?
    Ответ на мой взгляд очевиден:
    Извиниться, признать ошибку, сделать выводы. Все остальное (типа привлечение доп ресурсов, введение ночных смен и т.п.) это попытка прикрыть свою ошибку как менеджера за счет компании.
    Ответ написан
    2 комментария
  • Как сделать такую панораму?

    profesor08
    @profesor08 Куратор тега CSS
    Сфорткали панораму, с помощью коптера нарпимер, и нарисовали на canvas на webgl. Используется вот это: https://krpano.com/docu/html5/
    Ответ написан
    2 комментария
  • Возможно ли найти работу в вебе, если тебе 14 и ты понимаешь JavaScript ( как клиентский, так и серверный )?

    Вы слышали об эффекте даннинга-крюгера?
    Ответ написан
    Комментировать
  • Почему так много удаленки на Bitrix?

    Gorky
    @Gorky
    Веб-разработчик
    Так, мой комент с матом удалили. Напишу без мата (хотя это очень сложно) - много удаленки потому что битрикс очень плохая система и никто не хочет с ней работать кроме ушлых разрабов которые берут за это басновсловные деньги. А распространена она так, потому что продавая лицензии студии и частники получают партнерские отчисления. Втюхивают и подсаживают на этот ад, заламывая цены, если отказываются платить - бросают и привет мытарства по фрилансу. Одна и та же доработка например формы обратной связи обойдется на битриксе в два-три-двадцать раз дороже чем на условном вордпрессе. Бесплатных плагинов и готовых решений очень мало. Отвратительная документация, архитектура, комьюнити. Я 15 лет в веб-разработке и единственное что могу посоветовать - никогда не связывайтесь с этим ужасом если вы клиент и хотите себе сайт. А вот если вы разраб и хотите хорошо заработать на несчастных - то вперед, битрикс самое то.
    Ответ написан
    10 комментариев
  • Как правильно релизиться в больших компаниях?

    darqsat
    @darqsat
    PM
    Как правильно релизиться в больших компаниях?

    То что ты описал указывает на слабое планирование. Должен быть менеджер проекта который организует процесс планирования в котором будет участвовать Продакт Овнер, Тимлиды всех групп и он сам. Результатом планирования должна получится диаграмма ганта или Roadmap в котором будут учитываться взаимосвязи и будут заложены адекватные риски. Я это делаю всегда, и у меня на проектах почти никогда не бывает таких вот блокеров как ты описываешь.

    По поводу релизиться есть разные методики.
    Версионность это хорошо если вы работаете через API, а если у вас несколько команд бекенда которые пилят один и тот же монолит то нужно внедрять практику GitFlow и ставить техлида который будет заниматься мержами веток в релизы и правильно построит адекватный GitFlow.

    Версионность апи это отличная практика, ей нужно учиться и не слушать тех кто говорит что это сложно. Это не сложно. А версионность позволит релизить бекенд не дожидаясь фронтенд и не ломая его на продакшене.

    Что бы релизы проходили плавно нужно погрузить себя в книжки по Continues Delivery и занятся докеризацией своих сервисов или монолита.
    Ответ написан
    Комментировать
  • Как изучить язык баз данных SQL?

    @poimanoo
    Я перед собеседованием на должность sql-джуна будучи полным нулем за ночь порешал задачки на этом сайте и на следующий день решил все предложенные задачи и был принят) Скажу так - я бы посоветовал порешать эти задачи, они там предлагаются по нарастанию сложности и подкреплены теорией, за которой вам не нужно лишний раз лезть в учебники. Уверяю, с каждым десятком решенных задач Вы будете чувствовать себя гуру sql) Спустя задачек 30, когда у Вас сформируется представление о том, что из себя представляет SQL на деле, тогда можно приступать к литературе, поверьте, после практики гораздо легче воспринимать материал, ибо уже имеется представление, о чем речь.
    По литературе(с небольшими пояснениями):

    1. Введение в системы баз данных(Автор C.J.Date) - на мой взгляд очень доступное и максимально компактное описание того, на чем базируется SQL, разжеваны основные понятия, рассмотрены нормальные формы, а после предлагаются задачки.

    2. SQL Полное руководство - тут понятно по названию, здесь можно найти описание всех возможностей. Ищите наиболее позднее издание(у меня третье, для примера, это 2015 год).

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

    Если вы выбрали MS SQL Server:

    1. Microsoft SQL Server 2012 Руководство для начинающих - там хоть и не сильно углубляясь, но описано почти все что нужно на начальных этапах. Там и про индексы, и про оптимизацию, и про бизнес-аналитику, в общем, рекомендую.

    2. Microsoft SQL Server 2012 Создание запросов - просто и исчерпывающе(на момент издания) о том, как можно и нужно писать запросы на t-sql(расширение sql для MS SQL Server) с закреплением материала предлагаемыми заданиями.

    Если Вы выбрали Postgresql, то официальное руководство там исчерпывающее.

    По Oracle и MySQL советов дать не могу, ибо дела не имел. Удачи!
    Ответ написан
    1 комментарий
  • Как правильно вести разработку php приложения в docker?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Разделите понятия DEV контейнер и PROD контейнер.
    DEV образ не содержит в себе код вашего проекта, он содержит только окружение, а код маунтится через volume. Инженер делает правки у себя лакально, sftp не требуется.
    PROD контейнер содержит в себе конкретную версию код со всем и зависимостями, он только запускается для работы в связке с DEV контейнерами.

    Например у вас есть сервисы: sa, sb, sc.
    В docker-compose.yml вы прописываете 6 сервисов: sa_dev, sa_prod, sb_dev, sb_prod, sc_dev, sc_prod.
    Пары *_dev и *_prod живут на одинаковых ip с одинаковыми DNS алиасами, это нужно для того, что бы обеспечить жесткую связь между вашими сервисами и не перехреначивать половину docker-compose.yml

    Например вы хотите сделать правки на sb, но sa и sc используются sb. Вы поднимаете:
    sa_prod, sb_dev, sc_prod.
    Делаете свои правки, проверяете. Когда все ок - коммитите правки и собираете новый образ sb_prod, пушите его в регистр и обновляете версию в docker-compose.yml
    Ответ написан
    Комментировать
  • Какое самое короткое выржение на JS, выдающее в результате True?

    @asdz
    function _send (s) {
    	var input = document.getElementById("input");
    	input.value=s;
    	var evt = document.createEvent("HTMLEvents");
    	evt.initEvent("input", false, true);
    	input.dispatchEvent(evt);
    	var t = document.querySelector('.well span')
    	console.log("%s => %s", s, (t.textContent.search ("true") > -1) );
    }
    
    for(var code = 0; code < 1000; code++) {
      _send (String.fromCharCode(code));
    }
    Ответ написан
    2 комментария
  • Как понять сколько примерно имеет доход сайт?

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

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Прежде всего, для менеджера важно понимать людей. Всё что они говорят, что не говорят. Чётко улавливать интонации, язык тела. Понимать их мотивы.
    Не менее важно умение убеждать. Разными способами - договариваясь, запугивая, манипулируя нежными чувствами, всё что угодно. Отдельно выделю, относящиеся к этому пункту навыки, грамотной речи, поставленного голоса и умения правильно держать себя.
    Эти умения лучше развиваются не в стерильной корпоративной среде со стандартизированной культурой поведения, а в жизни повседневной. Заставь 6-летнего племянника перестать баловаться, заставь ханыгу соседа перестать курить в подъезде, запрети подруге ПМС и фразы "Ничего не случилось!" и "А мама сказала..."

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

    Имея базу необходимых навыков, можно приступить к теории. Во-первых, теории управления ИТ-службами - ISO 20000, ITIL, PMBoK и Agile. Во-вторых, очень ценно знать прикладную область - например, бизнес-процессы розничных и оптовых продаж, основы учёта, в том числе бухгалтерского, основные законы, регламентирующие деятельность и прочее. Бизнес-литературу и книги по личностному росту сразу в помойку. Не то чтобы в них не встречалось ничего хорошего, но крайне редко и очень мало.

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

    rockon404
    @rockon404
    Frontend Developer
    Отфильтровать по условиям можно так:
    var sell = [
        {"breed": "sosna", "size": "20x100x6000", "cost": 1500},
        {"breed": "sosna", "size": "30x100x6000", "cost": 2500},
        {"breed": "sosna", "size": "40x100x6000", "cost": 3500},
        {"breed": "sosna", "size": "20x100x6000", "cost": 4500},
        {"breed": "sosna", "size": "30x100x6000", "cost": 5500},
        {"breed": "sosna", "size": "40x100x6000", "cost": 6500},
    ];
    
    var breed = ["sosna"];
    var size = ["30x100x6000", "20x100x6000"];
    var params = { breed, size };
    var activeKeys = Object.keys(params).filter(function(key) {
      return params[key].length;
    });   
      
    var filtered = sell.filter(function(item) {
      return activeKeys.every(function(key) {
        return params[key].indexOf(item[key]) != -1;
      });
    });

    С использованием ES6:
    const sell = [
        {"breed": "sosna", "size": "20x100x6000", "cost": 1500},
        {"breed": "sosna", "size": "30x100x6000", "cost": 2500},
        {"breed": "sosna", "size": "40x100x6000", "cost": 3500},
        {"breed": "sosna", "size": "20x100x6000", "cost": 4500},
        {"breed": "sosna", "size": "30x100x6000", "cost": 5500},
        {"breed": "sosna", "size": "40x100x6000", "cost": 6500},
    ];
    
    const breed = ["sosna"];
    const size = ["30x100x6000", "20x100x6000"];
    const params = { breed, size };
    const activeKeys = Object.keys(params).filter(key => params[key].length);
         
    const filtered =
      sell.filter(item => activeKeys.every(key => params[key].includes(item[key])));


    Найти минимум можно так:
    var min = sell.reduce(function(acc, el) {
      return acc < el.cost ? acc : el.cost;
    }, Infinity);

    или:
    var values = sell.map(function(el) {
      return el.cost;
    });
    
    var min = Math.min.apply(Math, values);


    С использованием ES6:
    const min = sell.reduce((acc, el) => acc < el.cost ? acc : el.cost, Infinity);

    или:
    const min = Math.min(...sell.map(el => el.cost));
    Ответ написан
    8 комментариев
  • В чем концептуальный смысл ухода с jQuery на более современные front end инструменты?

    NightmareZz
    @NightmareZz
    Нищий разработчик из Симферополя
    Зачем они это делают? Хипсторы, сэр!
    Ответ написан
    Комментировать
  • Как называется паттерн обучения пользователя интерфейсу?

    nikitanaz
    @nikitanaz
    UX Lead and DesignOps @EPAM
    Tour, wizard, steps, etc - это всё инструменты, частные варианты.

    Этот процесс называется Onboarding.
    Поэтому можно гуглить что-то из серии "web site onboarding best practice"
    Ответ написан
    Комментировать
  • Кто работает на upwork только по верстке?

    vicodin
    @vicodin
    Имею некоторый опыт
    Работаю не только верстальщиком, но некоторые проекты на чистую верстку в работе имею. Без всяких натяжек на WordPress. Конкуренция низкая, так как хороших верстальщиков на Upwork мало(по той же причине не могу делегировать свой поток заказов - просто некому).
    Сейчас верстаю за 50$/hr.
    Английский может быть начальным, но должен не быть таким, если хочется иметь хороший рейт.
    Ответ написан
    32 комментария
  • Как решить проблему с концентрацией?

    @nomta
    1. Отключить внешние раздражители - очень важно. Телевизор и подобное лучше вообще убрать подальше.
    2. Научиться правильно отдыхать, в том числе - чтобы голова отдыхала. Закончили работу - переключайтесь на то, что происходит вокруг, общайтесь, забудьте вообще о работе. Можете 10 минут удерживать "пустоту" в голове, не думать ни о чем? Чтобы ни одна мысль не пролезла в голову? Дайте мозгу "проголодаться", сразу станет интереснее.
    3. Ваша проблема - не только Ваша, с ней сталкиваются практически все так или иначе. Приходится учиться, находить свой ритм работы и отдыха. Допустим, отдыхаете каждые полчаса. Каждый раз, завершив какую-то подзадачу, ставите отметку "выполнено". В связи с этим - полезная техника: составляйте план из микрозадач и, по мере их выполнения, ставьте галочки напротив каждой выполненной задачи. Мелочь, а хорошо помогает в плане концентрации.
    4. Одной из причин может быть то, что Вы ставите перед собой сразу много обязанностей, мозг воспринимает это как неподъемную задачу и блокирует ее выполнение. Разбивайте задачу на более мелкие и не обещайте себе выполнить непременно все. Отдыхайте, переключайтесь, развлекайтесь.
    5. Не держите все в голове - записывайте. Разгружайте голову. Когда занимаетесь - ведите подробные конспекты. Это помогает структурировать информацию. На экзамене очень выручает - Вы вспоминаете не информацию из учебника, а то, что сами записали в конспект, как будто это Ваше творение. Вам остается только воссоздать свой конспект на листочке, что обычно происходит легко, как будто само собой.
    6. Лучший отдых - это перемена занятий. Найдите противоположный вид деятельности, например, спорт, и работайте с реальной отдачей, до изнеможения. Уровень концентрации в вашей основной области повысится в разы.
    Пробуйте, ищите, учитесь. Есть целое направление - brain fitness, посмотрите, может, найдете что-то полезное и для себя.
    Ответ написан
    Комментировать
  • Как решить проблему с концентрацией?

    saboteur_kiev
    @saboteur_kiev Куратор тега Организация работы
    software engineer
    Мозг работает так, как он привык работать.

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

    Нарабатывать умение концентрироваться на неприятных и неинтересных вещах делается таким же способом - стараетесь через силу регулярно это делать. Через несколько лет мозг привыкнет к новому поведению.
    Можно это назвать силой воли - умение осознанно приспособиться к некомфортным условиям.

    P.S. С детства такие вещи тренируются. Чем взрослее тем сложнее, и даже факт того что ты осознаешь конкретный недостаток не облегчает того, что избавиться от него тяжело.
    Ответ написан
    2 комментария
  • Где можно фрилансить без лишних затрат?

    search
    @search
    мама говорит что я особенный
    На любой бирже. Если вы сделаете комиссию проблемой заказчика, а не своей проблемой. Как заказчик, потративший более стони тысяч на апворке и как разработчик, заработавший более сотни тысяч через апворк, скажу - что эти 10, 20 и 30% комиссии - это крохи, которые заказчик вполне может себе позволить. Буржуи идут на апворк, потому что нанимать девелопера у себя в стране им будет в несколько раз дороже и накладнее в любом случае. Вы можете честно сказать заказчику: "Мой рейт (например) 30 долларов в час, но апворк удерживает комиссию 20% (или сколько там, я сейчас не знаю), так что с вас $37 в час". Для большинства заказчиков это мелочь. Если для них это не мелочь. То и всё остальное для них тоже не мелочь и вас ждет работа на shared хостинге с заливкой файлов по ФТП. Оно вам надо?
    Ответ написан
    Комментировать