• Хронология изучения spring и в частности boot и rest. Для чего используют Spring Boot?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Boot - это просто автоконфигуратор и запускалка, позволяющий не писать конфигурацию контекста вручную и не разворачивать приложение на сервере приложений.
    Ответ написан
    Комментировать
  • Возможно ли восстановить данный txt файл?

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

    Прежде всего, если нет резервных копий данных (включая облачные хранилища), то шансы восстановить очень малы.
    Но если информация очень дорога компании, то надо обращаться к специалистам по информационной безопасности. Порой у компаний антивирусов есть программы-дешифраторы, способные восстановить данные. Нужно доложить отделу ИТ и начальству, теперь это должна быть их забота.
    Ответ написан
    Комментировать
  • Try catch или then catch для rest api?

    profesor08
    @profesor08
    Используй try/catch, про колбеки можешь забыть. Раньше только так можно было отловить какие-то исключения во время выполнения, теперь в них нужды нет.

    Код чище, понятнее.
    async getAll(req, res) {
        try {
           const { rows, rowCount } = await db.query(query)
           return res.status(200).send({ rows, rowCount })
        } catch (error) {
           return res.status(400).send(error)
        }
      }
    Ответ написан
    4 комментария
  • Как перестать говнокодить и принимать неверные архитектурные решения?

    miraage
    @miraage
    Старый прогер
    как писать поддерживаемый код?

    Если уж очень коротко, то соблюдать SOLID/GRASP. Мне понравился твит одного из авторов React Router:
    https://twitter.com/mjackson/status/1171524189850701825

    Most common mistake software developers make: putting stuff in the wrong place. Coupling responsibilities and concepts that should be kept separate.
    For me, this is 95% of software development. Just figuring out *where* things belong.


    Что гуглить, что учить?

    Фундаментальные знания, вроде вышеупомянутых SOLID/GRASP, паттерны (не только классические паттерны, но и вообще, общеизвестные решения определённых задач), базовые структуры данных. Фреймворки/библиотеки всегда будут приходить/уходить, что-то будет забываться. А фундаментальные знания всегда актуальны.

    Может литературу какую почитать посоветуете?

    Скажу за себя. Ни одной из этих известных книжек за свою жизнь не прочитал. Писал много говнокода дома, очень много. Удалял, переписывал. Смотрел код других людей, анализировал, пытался перенять то, что считал правильным.

    Можно ли себя называть миддлом, если твой код говно?

    Не пытайтесь себя оценить. В каждой компании свои понятия миддла. А если кто-то 35 лет на лиспе кодил, а потом прыгнет на Angular - кто он, джун или сеньор?
    И, да, все мы в какой-то степени пишем говнокод. Если кто-то Вам доказывает, что он пишет супер чистый код - не слушайте.

    И ответ на главный вопрос.
    Как перестать говнокодить и принимать неверные архитектурные решения?

    Это невозможно. Все проекты, которые чуток сложнее CRUD-ов, рано или поздно обрастают говнокодом. Никто не пишет идеальный код. Код должен работать и решать проблемы бизнеса.
    Ответ написан
    6 комментариев
  • Как научиться писать такой ООП код?

    @Copperfield
    Android dude
    Мне в школе физрук говорил:"Чтобы много подтягиваться - нужно много подтягиваться".
    Ответ написан
    Комментировать
  • Сколько стоит час веб-разработчика-фрилансера?

    @deliro
    Ты веcь такой кругом молодец, то знаешь, это знаешь. А теперь представь себе среднестатистический проект, который должен приносить бизнесу деньги. За две недели работы ты едва напишешь хлипкий CRUD для данных, неправильно смаппив бизнес-сущности в объекты ORM, ещё через месяц натянешь какой-то слайдер на jQ, попутно захватив 2мб JS кривых библиотек, а через два заказчик поставит тебе плохую оценку, потому что твой ценник он оплатил не за то, что ему нужно, а потому что ты знаешь монады, которые ему даром не сдались.

    А теперь давай представим простого программиста. Из алгоритмов он с трудом вспоминает сортировку пузырьком, а двусвязный список — предел его знаний о структурах данных, и даже этим списком он пользовался два раза в жизни. Хаскель он никогда не видел в глаза, C++ учил только в школе, вместо этого пишет неэффективный код на PHP. И у него есть опыт. За день он распишет сущности, за второй сделает универсальный CRUD, на третий день поднимет фронт на React'е с SSR. Да, внутренности проекта будут "медленными". Вместо O(logN) что-то будет выполняться за O(N) или даже O(N^2), но всем похер. Пока всё работает на приемлемом уровне — бизнес радуется.

    Кстати, к чему эта поучительная лапша? Я хотел сказать, что всеми этими модными словами можно пугать друзей и преподавателей, но в реальной жизни все алгоритмы уже реализованы, все типы данных уже подобраны оптимально. Знать их полезно для себя (чтобы мозг не атрофировался), но не для работы. Для работы тебе нужны такие навыки как:

    * Оптимальный баланс между говнокодом и идеальным кодом
    * Оптимальный баланс между скоростью разработки и оптимизацией кода
    * Оптимальный баланс между поддерживаемым кодом и костылями
    * Умение использовать те инструменты, с которыми ты работаешь. Опять же, для того, чтобы писать быстро, при этом имея минимальное количество говнокода и обеспечивая максимальную поддерживаемость (в пределах сроков). Например, можешь выкинуть в помойку свой Vim, как бы круто ты себя не чувствовал, разрабатывая в консольном редакторе, если продукты от JetBrains позволят за это же время сделать что-то лучше или чего-то больше
    * Чувство "знаю больше менеджеров". Это то чувство, когда тебе кажется, что "вот эта фича скоро изменится" и надо сделать архитектуру заранее более гибкой. Или "вот эту фичу мы через месяц выпилим" и не надо тратить на неё силы — напиши костыль и через месяц с чистой совестью удали его
    * Знания, как сделать ту или иную фичу. Потому что фичи повторяются (немного видоизменяясь) от проекта к проекту. И если ты сделал что-то за два дня, в следующий раз ты похожее сделаешь за три часа

    Что касается инструментов, выбери любой полноценный фреймворк, который умеет решать 90%+ потребностей "из коробки": Symfony, Django, Laravel

    Всякие "минималистичные" поделия вроде Falcon, Flask (в PHP не знаю, я на питоне пишу) оставь хипстерам. Пусть они говорят: "Мой фалкон такой быстрый, он написан на Cython". Тебя это не должно волновать, потому что бизнес с твоей скоростью разработки уже заработал достаточно денег, чтобы купить ещё десять серверов, пока фалконисты неделю гуглили, как прикрутить миграциии и запустить юнит-тесты на VPSке за пять баксов.
    Ответ написан
    5 комментариев
  • Чем практически отличаются два типа VIRTUAL и STORED?

    Melkij
    @Melkij
    PostgreSQL DBA
    В случае VIRTUAL:
    - результат операции будет высчитываться каждый раз при чтении;
    - индекс по этому полю будет храниться в оперативной памяти.

    Индекс так же будет храниться как обычный индекс.
    Через virtual generated column ранее можно было эмулировать функциональный индекс. Сейчас в этом необходимости уже нет.

    Разница только в том, что stored хранится как часть таблицы, но вычисляется только при записи. А virtual не хранится и вычисляется при чтении.
    Ответ написан
    Комментировать
  • С чего и как начать продажу команды разработчиков с нуля без портфолио?

    @PavelFokeev
    pavl1k.ru
    опыт работы на удаленке стремится к нулю

    Работать "на портфолио", естественно, не буду, за копейки тоже

    Команды пока нет

    Хмм...
    Буду очень рад абсолютно любым советам

    Иди на завод)
    Ответ написан
    9 комментариев
  • Слишком быстрая программа,всё так?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Добро пожаловать в асинхронность.
    request() выполняется асинхронно. Вот вы его вызвали, он внутри себя запомнил, по какой ссылке нужно (будет) обратиться и куда вернуть результат. И внешний вызов request() всё, отыграл.

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

    Все запросы пойдут выполняться почти параллельно. Поэтому и длительность десяти запросов примерно равна длительности одного.

    Хинт не по теме вопроса, а
    про число записей на стене ВК

    ВКонтакте есть хороший API. В том числе, есть метод wall.get() для получения записей со стены и общего числа записей.

    Чтобы выполнить запрос к АПИ ВК, понадобится сначала получить токен. Для метода wall.get() годится сервисный токен или токен пользователя.
    Ответ написан
    2 комментария
  • Может ли моб-оператор прослушивать как жучок простую кнопочную звонилку когда она просто включена?

    Dr_Elvis
    @Dr_Elvis
    В гугле забанен
    Про точность определения местоположения по вышкам GSM есть много статей, например
    По следам мобильного телефона. Геолокация с помощь...
    А вообще симкарта, без телефона, которая лежит в кармане это для спецслужб тоже маячек и только по симкарте можно отследить.
    Ответ написан
    2 комментария
  • Что значит "--" флаг во многих git операциях?

    Lynn
    @Lynn
    nginx, js, css
    По довольно распространённому соглашению, все параметры после двойной черты считаются позиционными (чаще всего это имена файлов). git придерживается этого соглашения.

    Например кто-то случайно создал файл с именем -n, а вы хотите вывести все файлы в папке командой cat
    $ ls -l
    total 8
    -rw-rw-r-- 1 lynn lynn 6 Apr 19 12:34 file1
    -rw-rw-r-- 1 lynn lynn 6 Apr 19 12:33 -n

    если просто выполнить cat *, то получится странное:
     $ cat *
         1	file1

    потому что bash раскрыл звёздочку и получилась команда can file1 -n, т.е. вывести файл file1 с нумерацией строк.
    А вот так всё выведется правильно:
    $ cat -- *
    file1
    a
    b
    c

    Потому что раскроется в cat -- file1 -n, но по соглашению, после -- не может быть ключей команды, только имена файлов.

    Конкретно в git есть ещё более строгое соглашение, по которому параметры после -- могут быть только путями.
    Например если у вас есть файл test и ветка test, то будет так:
    $ git branch 
    * master
      test
    
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
    	modified:   test
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    $ git reset test
    fatal: ambiguous argument 'test': both revision and filename
    Use '--' to separate paths from revisions, like this:
    'git <command> [<revision>...] -- [<file>...]'
    
    $ git reset -- test
    Unstaged changes after reset:
    M	test
    Ответ написан
    Комментировать
  • Можно ли преобразовать имена переменных в символы?

    DevMan
    @DevMan
    гуглим что такое обфускаторы, и какие есть для пхп.
    как человек с многолетним опытом (не только в пхп), замечу, что это нафиг не нужно.
    Ответ написан
    Комментировать
  • Как переименовать процесс на андроид? Например: Chrome > Instagram?

    thelongrunsmoke
    @thelongrunsmoke
    Программист
    Важно не имя процесса, а адреса серверов, куда ходят запросы. Ничего с этим не поделаешь.
    Ответ написан
    2 комментария
  • Как реализовать личный кабинет?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    подскажите как реализовать личный кабинет на сайт ?

    Так же как и любую другую задачу:
    1. Подготовить продуктовые требования
    2. По продуктовым требованиям написать техническое задание
    3. Техническое задание раздробить на задачи
    4. Выполнить задачи

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

    какой курс пройти для этого ?

    Вы правда думаете, что есть курсы по написанию личных кабинетов?
    Ответ написан
    Комментировать
  • Что такое Service Container и Service Provider?

    @alvery
    Backend Developer
    Чтобы разобраться в этом одного даже развернутого ответа не хватит. Вам нужно сперва почитать про принцип инверсии зависимостей - один из принципов SOLID. Затем разобраться что из себя представляет паттерн проектирования dependency injection и как к нему вообще пришли (service locator также упоминается). И затем собственно приходим к реализации этого паттерна в laravel. Также на заметку можно взять php di библиотеку - просто другая реализация.
    Ответ написан
    Комментировать
  • Как сделать анимацию трансформирующую один элемент в другой?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Является ли желтая квадратная форма в конце анимации видоизмененной кнопкой или же это совершенно другой элемент разметки?

    По смыслу - это другой элемент. Если мы говорим про более-менее компонентный подход к верстке, то это должно быть очевидно. Кнопка - один компонент. Всплывающее окошко - другой компонент. Набросал небольшую заготовку:


    С такими анимациями можно долго играться, самое главное - проверить в конечном итоге кроссбраузерность. А то в хроме и FF работает, а в каком-нибудь IE всякое может случиться.

    P.S.: Но в целом - я голосую за реализацию таких вещей целиком на JS. Практика показывает, что в проектах с такими анимациями очень быстро собирается большое количество одновременно анимирующихся значений у большого количества элементов, которые нужно синхронизировать между собой. На CSS голова лопнет все это делать. И да, чем больше всего меняется в CSS-анимациях в единицу времени, тем выше шанс найти какой-нибудь редкий баг и долго ломать себе голову в поисках проблемы. Лучше уж взять какую-нибудь библиотеку вроде anime.js или любимый многими GSAP и использовать их.
    Ответ написан
    Комментировать
  • Что происходит с github?

    Lynn
    @Lynn
    nginx, js, css
    Ответ написан
    Комментировать
  • Синхронная репликация: MySQL NDB Cluster, Percona XtraDB, MariaDB Galera, mysql group replication (innodb cluster). В чем отличия?

    @vlarkanov
    Сравнивать все вышеизложенное не могу, т.к. не все пробовал, поделюсь схемой которая год в проде.

    Используется Galera-кластер на базе Percona Xtradb. В нем две физические ноды (база живет на SSD в mdadm RAID1), разнесенные по городам (~200км) + арбитратор на виртуалке (нужен для кворума т.к. кластер не должен содержать четное кол-во нод). Любой INSERT\UPDATE\DELETE апрувится всеми нодами и только тогда считается закоммиченым. Запросы разруливаются с помощью живущего на виртуалке прокси Maxscale. Одна из нод является мастером, на нее идут запросы на запись, вторая - слейв, получает запросы на чтение. В случае падения одной из нод вторая автоматически берет на себя ее функции (точнее, сами ноды о своих ролях знать не знают, рулит процессом Maxscale). Когда нода поднимается, она всасывает в себя произошедшие с момента падения изменения IST (Incremental State Transfer) если объем произошедших изменений не превышает размер galera cache (просто файл, размер указывается в конфиге mysql) или, в худшем случае загружается вся база. При этом нода-донор продолжает обрабатывать запросы клиентов как ни в чем не бывало. Присоединившаяся нода становится слейвом, т.к. смена мастера приводит к обрыванию соединений и ее лучше делать вручную, ночью.

    Для повышений надежности у обеих нод есть по одному слейву, куда в реальном времени реплицируются все изменения. С них удобно делать бекап в любой время, не боясь нагрузить базу (используем нативный перконовский Innobackupex, который очень быстро и без блокировок бекапит базу налету) или же выполнять тяжелые селекты.

    Если есть вопросы - задавайте, постараюсь ответить.
    Ответ написан
    2 комментария
  • Как правильно проектировать Interactor-классы в разработке под Android?

    @red-barbarian
    полазь по сайту
    поспрашивай в телеграмме
    Ответ написан
    Комментировать