• Фронтенд это настоящее программирование?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    1) Фронтенд это настоящее программирование? - НЕТ
    2) Фронтендер это настоящий программист? - НЕТ
    3) -

    Те, кто ответил, что фронтенд - программисты - сами фронтендщики. И им обидно, что их не называют программистами.
    Ещё и в решения отметили.
    Ответ написан
    7 комментариев
  • Как извлечь APK файл уже купленного приложения?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Root-права не обязательно иметь.
    Подключаешь провод к компу и далее через adb:

    1. adb devices
    adb shell pm list packages
    2. adb shell pm path com.xxx.app
    3. \Android\Sdk\platform-tools>adb pull /data/app/com.xxx.app-dfbERdfDGnhdghD==/base.apk myapp.apk
    4. переименовать myapp.apk в myapp.zip для доступа к данным
    Ответ написан
    Комментировать
  • Не могу определиться: PHP или Python?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Склоняюсь к пхп, но боюсь, что загнется и придётся перепрыгивать на новый ЯП

    Во-первых, пхп не загнётся.
    А во-вторых, у тебя какая-то странная боязнь языков. Тебе всё равно ПРИДЁТСЯ учить другие языки. И это хорошо.
    Так что учи оба языка - и пхп, и питон. И не забудь выучить ещё пять-десять языков. Я серьёзно
    Ответ написан
    Комментировать
  • Можно конвертировать код pascal в C#?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Можно. Разрешаю
    Ответ написан
    1 комментарий
  • Как реализовать выдачу рандомного элемента из массива с учетом рейтинта?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Если я правильно понял задачу, то я решал бы её так.
    1. Отсортировать масси по убыванию значения оценки. P.S. На самом деле оказалось, что не обязательно.
    2. Далее исходим из таких соображений. Пусть сумма всех оценок sum(M(i)) будет равна S и примем это за 100% вероятность. То есть, со 00% вероятностью один из элементов нашего массива будет выбран.
    Тогда вероятность выпадания i-го элемента будет пропорциональна его оценке: P(i) = M(i)/S
    3. Будем проходить по каждому элементу отсортированного массива и будем вычислять вероятность P(i). Выбираем случайное число P = random()*N, где N - оставшееся число непройденных элементов. Если P < P(i), то показываем этот рандомный элемент i и завершаем цикл.
    4. Пересчитываем S = sum(M(i)) для всех оставшихся элементов.
    Сложность алгоритма получается O(N^2)
    Это так, сходу решение.
    Но его можно улучшить ка минимум до О(N), а, возможно, и до O(1). Но тогда придётся ввести дополнительное поле вероятности.

    UPD: Вынесу пример из комментариев:

    Пусть у нас массив из оценок [5, 5, 3, 2]
    Сумма всех оценок S = 5+5+3+2 = 15
    Вероятности выбора каждого элемента:
    [5/15, 5/15, 3/15, 2/15] = [0.33333, 0.33333, 0.2, 0.133333], в сумме они дадут 1, как и должно быть.
    1. Берём первый элемент с оценкой 5 и с вероятностью 0.3333 выбираем его: P = random()*1.0
    Если P<0.333, то выбираем 1-й элемент и заканчиваем работу. Иначе идём дальше
    2. Берём 2-й элемент с оценкой 5. Теперь у нас вероятность изменилась и мы её пересчитываем, чтобы в сумме была 1:
    S = 5 + 3+ 2 = 10
    Пересчитываем вероятности:
    [5/10, 3/10, 2/10] = [0.5 ,0.3, 0.2] - в сумме опять 1, как и должно быть.
    Теперь с вероятностью 0.5 определяем, берём ли мы 2-й элемент в качестве результата или нет: P = random()*1.0
    Если P< 0.5, то заканчиваем работу. Иначе, идём дальше.
    3. Пересчитываем общую сумму оценок: S = 3 + 2 = 5
    Новые вероятности для оставшихся оценок: [3/5, 2/5] = [0.6, 0.4], в сумме опять 1
    С вероятностью 0.6 определяем, оставляем ли 3-й элемент в качестве результата или нет.
    Если нет, то дальше
    4. Пересчитываем сумму оставшихся оценок: S = 2.
    Новые вероятности для оставшихся оценок: [2/2] = [1].
    То есть, со 100% вероятностью забираем последний элемент.
    Но вот чтобы добраться до последнего элемента надо продраться через тернии более высоких оценок. Сложно, маловероятно, но в принципе это возможно.

    UPD: Для оптимизации расчёта новой суммы S просто вычитаем из предыдущей S значение оценки i-го элемента. Сводим алгоритм к O(N)

    UPD2: Если надо инвертировать и сделать так, чтобы элементы с минимальными оценками показывались чаще, то надо инвертировать вероятность: 1-P

    UPD3, решение за время O(1) Я тут ещё раз подумал и решение оказалось ещё более простым.
    Пусть у нас массив из оценок [5, 5, 3, 2]
    Сумма всех оценок S = 5+5+3+2 = 15
    Вероятности выбора каждого элемента:
    [5/15, 5/15, 3/15, 2/15] = [0.33333, 0.33333, 0.2, 0.133333]
    Строим отрезок, откладывая на нём эти четыре значения.
    Берём случайное число от 0 до 1 и смотрим, в какой из этих четырёх отрезков он попадает. Вот и решение.
    Если надо, чтобы маловероятные оценки выпадали, то строим инвертированные вероятности:
    [0.6666, 0.6666, 0.8, 0.8666666]
    Ответ написан
  • Как пандемия коронавируса и кризис повлияли на рынок джуниоров и стажеров?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Мы пока не набирали джуниоров в последнее время.
    Т.к. я уже насмотрелся на джунов, то могу только предположить, что с этим стало тяжелее. Джуниору нужен наставник, который всегда рядом. На удалёнке джуна натаскивать очень сложно.
    Поднимаются требования к джуниору, он должен владеть нужными инструментами уже сразу. Гит, хорошее владение основными командами, настройка VPN, поднять IDE, настроить окружение... Всё это он должен сделать сам. А в офисе ему дадут уже готовую машину, а коллеги помогли бы сразу. И при этом дома джун должен иметь достаточно мощную рабочую машину, необходимое оборудование. Тестировщикам и разработчикам мобильных приложений не позавидуешь - нужно иметь парк доступных мобильных устройств...
    И не каждый Джун владеет средствами, чтобы купить мощную машину для работы. На работе её просто выдадут.
    Добавлю ещё, что в неформальном общении в курилке, на обеде, у кофе-автомата, у кулера происходит обмен зачастую ценнейшей информацией, которую не только джун, но и любой другой сотрудник больше нигде не получит.
    Ответ написан
    2 комментария
  • Кто заводил второй аккаунт Upwork?

    opium
    @opium
    Просто люблю качественно работать
    Да куча народу, там же все правила известны обойти не проблема
    Ответ написан
    4 комментария
  • Как заставить nginx смотреть в нужную папку Laravel проекта, обернутого в Docker?

    @Fortop
    Tech/Team lead
    Понятия не имею зачем вы вынесли nginx отдельно, но самое простое решение вашей проблемы это смонтировать только код в контейнер nginx.
    Ответ написан
    2 комментария
  • Как защитить JS код?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Защитить JS нельзя, т.к. он выполняется на клиенте, а не на сервере.
    Можно усложнить чтение с помощью обфускации. Это отсеет 90% любителей, но особо упорных это не остановит и они прочтут твой код. Тем более, что есть инструменты, помогающие в деобфускации: деобфускаторы, бьютифайеры и пр.
    Хочешь скрыть код - уходи из фронтенда и добро пожаловать в бэкенд, на сервер.
    Ответ написан
    Комментировать
  • Задача для собеседования?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Это уровень от миддла и выше.
    И вообще, это слишком затратное по времени задание. Поэтому, если и делать, то только за деньги
    Ответ написан
    Комментировать
  • Существует ли сайты с установкой «платной» капчи к себе на сайт?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    https://hCaptcha.com как раз именно для этого и разработан
    Ответ написан
    1 комментарий
  • Как называются такие анимации, и как их делать?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Это изолинии.
    https://ru.wikipedia.org/wiki/%D0%98%D0%B7%D0%BE%D...
    Срез 3D-поверхнисти по оси Z с определённым шагом.
    Итеративно смещаешь Z и получаешь плавную анимацию
    Ответ написан
    3 комментария
  • Как защитить код от просмотра?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Всё надо выносить в бэкенд и обращаться через API.
    На стороне фронта на 100% защитить код невозможно по определению, т.к. весь код на клиенте и в полном распоряжении пользователя. Можно только усложнить чтение кода через обфускацию, которая остановит 80% любопытных. Но особо упорных это не остановит.
    Ответ написан
    Комментировать
  • Android: Как актуализировать deviceId в GCM?

    konstantin_berkow
    @konstantin_berkow
    Начинающий разработчик
    По новым гайдам нужно зарегистрировать ресивер который запустит сервис для обновления, если с плэй сервисами все в порядке они вызовут обновление токена когда это потребуется GCM'y. И насколько я помню выдается совсем не deviceId, а производный от него по усмотрению GCM'a.
    Ответ написан
    Комментировать
  • Android: Как актуализировать deviceId в GCM?

    LeEnot
    @LeEnot
    Енот-андроид
    Используйте XMPP сервер. В таком случае он автоматически вернет вам новый registration_id, при попытке послать сообщение со старым.
    См. документацию
    Ответ написан
    Комментировать
  • Почему GPS бесплатен?

    @malcontent
    GPS - это разработка военных США, изначально предназначена для использования теми же военными. Однако после крупной авиакатастрофы из-за того что самолет сбился с курса (подробнее в Википедии) GPS решили открыть для гражданского применения.
    GPS использует беззапросный метод передачи данных, то есть ваш приемник рассчитывает координату на основе принятых от спутников данных, сам же никакой информации спутникам не передает. Поэтому использование вами GPS не создает нагрузки для спутников и сетей GPS и ничего не стоит налогоплательщикам США.
    Ответ написан
    Комментировать
  • Китайская капча, как ввести заветные иероглифы

    Error_403_Forbidden
    @Error_403_Forbidden
    Ответ написан
    Комментировать