Ответы пользователя по тегу Программирование
  • Как проверить баланс сим-карты МТС на PHP?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    У них есть Личный кабинет и мобильное приложение. Там доступен баланс.

    А. Решение через "Личный кабинет"
    1. имитировать логин в личный кабинет с помощью curl с сохранением кук и прочей мишуры
    2. имитировать запрос в личный кабинет на страницу баланса с помощью curl
    скорее всего эта страница содержит баланс
    https://login.mts.ru/profile/header?ref=https%3A//ihelper.sib.mts.ru/selfcare/welcome.aspx&scheme=https&style=2015v2&updat&updat&updat

    3. парсить HTMl баланс через XML или регулярку
    https://monosnap.com/file/DLyZ0XcQfjQykKLxS4fVkJWP...

    Б. Решение через мобильное приложение
    1. Снифить трафик между андроидом и сервером через прокси
    2. Имитировать такие же пакеты
    3. В итоге получить пакет, в котором есть баланс
    Ответ написан
  • Исходники каких PHP-проектов лучше поизучать для примера отличного PHP-кода?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Проголосую за Yii (первый или второй) и Zend Framework 2. Александр Макаров только не надо про срезание углов :) Laravel нигде не срезал, все паттерны реализовал, очень гибкий. За это его обхожу стороной, огородами. Для начала надо что-то попроще.

    В Yii/Zend всё можно раскопать (на тостере пример про компоненты, и роутинг). Не очень много кода, в большинстве случаев не сложные реализации классических паттернов проектирования, довольно простая навигация по классам и разбор стека ошибок.

    Дополнение к ответу:
    Хотелось бы увидеть примеры отличного кода в работе реальных проектов. Изучение исходников Yii2 и Laravel многое дали, но не все.

    Не заметил сразу.

    А что не дали эти фреймворки?
    Я не слишком шокирую, если скажу, что в реальных проектах код не очень отличный? Высокопроизводительные нагруженные веб-проекты стараются обходить стороной сложные шаблоны проектирования, потому что всякие там поздние связывания, декораторы, рефлексии и прочая ерунда жрёт ресурсы, которых постоянно не хватает. Вместо красивого класса-декоратора просто вызывают метод класса, вместо DI напрямую вызывают классы. Классные проекты отличаются классностью для пользователя, делают полезные штуки, все такие веб-два-нольные, материал-дизайные, юзер-френдные. А внутри там ......... ааааа! Каждый раз, когда в классный проект решают внести ещё одну классную штуку, то один, то другой программист говорит: "там надо переписывать, лучше заново". Чем старше проект, тем чаще звучат слова "говнокод", "костыли" и "рефакторинг".

    В общем, если Yii и Symphony и шаблоны проектирования уже пройденный этап, то нужны другие книги :)
    Ответ написан
  • Что это была за статья на habrahabr о том, чем лучшие программисты отличаются от остальных?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Нашёл? Год прошёл уже :)

    Может быть не статья, а фрагмент книги?

    Вот в этой куча историй про программистов и технарей
    97 вещей, которые должен знать каждый программист
    97 Things Every Programmer Should Know
    copist.ru/books/97things-dev
    Ответ написан
  • Поиск ментора - это нужно?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Страсть к программированию. Глава 13. Найди ментора из книги "The Passionate Programmer: Creating a Remarkable Career in Software Development" автора Chad Fowler.
    Если я спрошу нескольких музыкантов: «Кто твой ментор?», у многих найдётся ответ. Но если я задам тот же вопрос программистам, они ответят только «Что?».

    Понимаю, что автору ответ уже не интересен, но оставлю для других

    Менторские программы по веб-технологиям webmentor.pro
    Всё самое основное по программам: где, на чём, как и почему?
    Ответ написан
  • Поможете наставить на верный путь начинающего программиста?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    • прежде чем писать, надо читать
    • прежде чем читать «Чистый код», надо научиться писать грязный неуклюжий код
    • прежде чем правильно проектировать большие программные системы, надо неправильно спроектировать свою маленькую программу
    Read more
    Ответ написан
  • Нужно ли тратить кучу времени на задачу, которую знаешь как можно решить, но не до конца получается самому реализовать решение?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Есть негласная рекомендация по использованию чужого кода, найденного в интернет: нужно посмотреть решение, понять его, заглянуть в мануалы, уточнить неясные места у автора ответа, закрыть и повторить решение по памяти.

    Копипаст - это зло. Иначе когда-нибудь нарвёшься на ```rm -rf /``` с 100 плюсами и выбранный как решение и получишь попоболь.

    Более продуктивным считаю отдавать свой рабочий или нерабочий код на ревью коллегам. Тебе укажут на ошибки, дадут ссылки на документацию, может быть даже поправят.
    Ответ написан
  • Где проектировать структуру сайта?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    gliffy.com Online Diagram Software and Flowchart Software
    Ответ написан
  • Как найти репетитора/наставника/ментора по программированию?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Понимаю, что автору ответ уже не интересен, но оставлю для других

    Менторские программы по веб-технологиям webmentor.pro/secrets
    Всё самое основное по программам: где, на чём, как и почему?
    Ответ написан
  • Сидячий образ жизни кодера на самом деле ухудшает здоровье?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Вес потихоньку набирается, потому что сладкое обожаю. Спасибо Дмитрий Макаров за совет с кашами, но какие именно?
    Если совсем не шевелиться, то из-за застойных процессов нарушается кровообращение и как следствие плохо варит котелок. А так же боли в спине и шее. Ленивый кишечник. Дискомфорт в ногах.

    Бегать на улице не в кайф. Велика нет. Лыжи редко и вообще только зимой. Вот моё решение:
    PSM-Od3RUCE.jpg
    Пробежка 30-40 минут + гимнастика на растяжения + гантели/пресс/подтягивания + прохладный душ. В лучшем случае управляюсь за час.
    Голова работает отлично. Сплю 6 часов в сутки, не устаю. Кстати, режим сна 5 часов + 4 * 15 минут днём.

    Раз в квартал нанимаю массажистку для спины, плечей и шеи. 10 сеансов.

    На мониторе на стене смотрю фильмы или сериалы во время пробежки. Ещё там можно читать книги, но я предпочитаю читать бумажные и делать пометки на полях.

    Плавно мигающее световолокно перед глазами позволяет расслабить зрение. На столе лампа 2*18Wt очень яркая. Под потолоком 4*20Wt 4200K дневной свет.

    Два очистителя воздуха с ионизаторами. Один чистит внутренний воздух ультрафиолетом. Второй, приточный, чистит уличный воздух. Кондиционера нет.

    Играю (очень-очень редко, по разным причинам) в XBox Kinect. Специально играю только в кинектовские игры, подвижные. "Звёздные войны" очень разминают руки, а "Adventures" - ноги и спину.

    Часть времени работаю стоя. Ноут стоит на крышке террариума, а я рядом.
    Ответ написан
  • Какие методы/библиотеки/технологии использовать в web-проекте?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Общий ответ: вебсокеты и асинхронные сообщения через pub/sub
    В гугле искать по фразам "socket.io rabitmq" "php rabbitmq" "php websocket" "php pub/sub"

    Вариант реализации с использованием PHP
    На клиентском приложении: socket.io + javascript
    На сервере: socket.io + RabbitMQ + PHP

    Чтобы следить за игровым процессом:
    Скрипт PHP будет посылать сообщения в очередь на RabbitMQ
    socket.io будет читать очередь RabbitMQ и пересылать в веб-сокеты

    Клиентское приложение в браузере будет создавать постоянное соединение к сервером по протоколу веб-сокетов и читать из него всё, что пришлёт сервер socket.io. Всё, что присылается, нужно будет показывать в веб-интерфейсе.

    Чтобы управлять игровым процессом
    Из клиентской части веб-приложения нужно будет отправлять команды управления через AJAX или через то же соединение веб-сокет.
    В случае "через AJAX" нужно будет создать серверное микро-приложение, которое будет принимать команды через AJAX и затем передавать в основной игровой процесс через RabbitMQ или иным способом.
    В случае "через веб-сокет" серверная сторона socket.io должна будет отрабатывать полученные команды и передавать в основной игровой процесс через RabbitMQ или иным способом.

    На сервере нужно будет периодически делать дамп состояния основного серверного игрового процесса и сохранять в какую-нибудь базу. Я бы предложил дамп хранить в формате JSON в базе NoSQL, например, Mongo, CouchDB, Redis.
    При перезапуске основного серверного игрового процесса нужно будет восстанавливать состояние из этого дампа.

    Игрокам нужно будет выполнять авторизацию. У нескольких игроков может быть один игровой мир или отдельный микро-мир на несколько пользователей или на отдельный сеанс игры (например, одна шахматная доска на двух игроков и несколько зрителей). Поэтому надо будет хранить данные о пользователях и мирах. Вот тут подойдёт SQL база, например, MySQL или PostgreSQL. Хотя и NoSQL тоже можно использовать.

    Ну как то так.
    Выглядит замысловато, а на деле реализуется очень просто.
    Ответ написан
  • На чем писать конструктор?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Дельный совет: посмотри как реализованы уже работающие современные конструкторы landing page
    https://www.google.ru/search?q=landing+page+online...

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

    Если ты делаешь LP под заказ, то тебе, может статься, тебе вполне хватит возможностей таких конструкторов.

    Моё предположение: весь конструктор - это JS, а на сервере весь шаблон и его настройки хранятся в NoSQL базе, например Mongo.

    Всё веселье начинается когда на странице попросят вывести грид из динамических данных, например, каталог товаров. Погугли в направлении BaaS (backend as service). Это может решить вопрос с хранением данных.
    Ответ написан
  • Что нужно первично выучить для джуниора по JS/Node?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Какие задачи нужно уметь выполнять на JS начинающему (для NodeJS разработчика надо то, что помечено "важно", включая операции над DOM)

    Для укрепления навыков backend разработки - многопользовательское приложение с сервером на Node и клиентском на JS (angular, durandal, aurelia, backbone), например, игру какую-нибудь, хотя бы шашки или морской бой.
    Ответ написан
  • Как пишется программа под определенную систему?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Решения есть.
    Пишется общая часть с использованием библиотек (SDK). Код программы при этом один на все платформы. Почти один. А у этого SDK есть вторая часть - компилятор, которая обеспечивает исполнение программы на конкретной платформе. Свой программный код нужно либо под каждой платформой откомпилировать, либо эта вторая часть занимается конвертированием промежуточного кода (байткод) в конкретного процессора.

    Для мобильных: Обзор 7 самых популярных кроссплатформенных мобиль..., Выбираем мультиплатформенный движок для разработки... и часть 2
    И вот это ещё: www.develop-online.net/tools-and-tech/the-top-16-g...

    В гугле искать по фразам:
    кроссплатформенные игровые движки
    кроссплатформенная мобильная разработка
    cross platform engine
    Ответ написан
  • Каким алгоритмом (функцией PHP) лучше получить хэш строки для последующего сравнения по базе данных?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    sha1 - там коллизий меньше, вычисляется не намного дольше md5, длина 40 байт

    Активно используется в протоколе BitTorrent и Git
    Ответ написан
  • Что подразумевается под маленьким, небольшим, крупным проектом на PHP?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Зависит от количества технологий, которыми придётся воспользоваться для его реализации.
    Я сейчас сам себе условно поставлю задания на разработку проектов 4х уровней сложности.

    Простейший сайт-визитка.
    Технологии:
    1. Дизайн: типовой, картинки со стоков или вообще нет, всего несколько страниц
    2. Реализация: HTML, CSS, может быть JS
    3. Средства разработки: очень простые, вплоть до notepad.exe
    4. Хостинг: бесплатный shared hosting
    5. Обновление: вручную, по FTP
    Интернет-магазин средней сложности
    1. Дизайн: заказной, картинки, цены и описание конкретных товаров
    2. Реализация: HTML, CSS, JS, серверный язык программирования, база данных, кэширование. Возможно, интеграция с внешними системами, например, 1С, платёжные системы или доставка. В качестве базового решения использовать готовое, типа OpenCart
    3. Многопользовательский режим: несколько редакторов, посетители сайта, покупатели
    4. Средства разработки: графический пакет, IDE, клиентское приложение для базы данных
    5. Хостинг: платный shared или virtual dedicated
    6. Обновление: вручную
    Информационный портал повышенной сложности
    1. Дизайн: заказной, штатный дизайнер, художник, фотограф
    2. Реализация: CSS/SCSS/LESS, сложный Javascript c фреймворками типа Angular, несколько серверных языков программирования, база данных с горизонтальным и вертикальным массштабированием, дублированием, распределённая файловая система, кэшированием, очереди заданий, фоновые задачи.
    3. Многопользовательский режим: любой может добавлять статьи с мульти-медиа контентом, многопользователькие чаты realtime, внутренняя система сообщений
    4. Средства разработки: графический пакет, IDE, клиентское приложение для базы данных, репозиторий кода
    5. Хостинг: virtual dedicated или dedicated + тестовый и демонстрационный сервера меньшей мощности + резервный + балансировка нагрузки
    6. Сервис поддержки пользователей, модерация статей и чатов
    7. Почтовые рассылки, подписки на отдельные темы или авторов, внутренняя система сообщений с дублированием на электронную почту
    8. Авто-тесты
    9. Обновление: автоматическое, через Chef, Capistrano или иной способ
    Запредельно сложный сервис
    1. Дизайн: уникальный, специальный, заказной, несколько штатных дизайнеров, все непрерывно работают над улучшением и разрабокой новых возможностей
    2. Реализация: Reach Client Application, передовые клиентские технологии, реализация многопользовательского онлайн 3D мира, несколько серверных языков программирования, несколько типов баз данных с горизонтальным и вертикальным масштабированием, дублированием, кэшированием, очереди заданий, фоновые задачи; части системы общаются между собой по разным протоколам и асинхронно
    3. Многопользовательский режим: международный сервис, количество пользователей просто зашкаливает, они работают круглосуточно, нет периода однозначного снижения нагрузки на сервер для технического обслуживания
    4. Специфический фукционал: пользователи могут совместно делать необычные вещи, например, конструировать и выпускать реальные автомобили онлайн
    5. Средства разработки: чего только не используешь, лишь бы разобраться в коде и документации, который состоит из множества кусков и зависимостей, на разных диалектах разных версий языков, ежедневно изменяемый сотней программистов, тестовые сервера под каждую отдельную фичу; в разработке сразу несколько фич, и они конфликтуют между собой
    6. Хостинг: облачные сервера, много-много серверов, под все части системы резервирование, свой датацентр, свой оптоволоконный канал связи
    7. Авто-тесты, мониторинг, метрики, системы оповещения о сбоях и автоматического устранения аварий
    8. Резервные источники энергии, своя электростанция
    9. Круглосуточный сервис поддержки пользователей
    10. Управление персоналом: администраторы, электрики, программисты разной специализации, менеджеры, маркетологи, аналитики, тестировщики, бухгалтерия, отдел персонала, психолог, стоматолог, поликлиника, столовая, ресторан, фитнес-зал, спорт-комплекс, автопарк
    11. Внутрисистемная виртуальная валюта, возможность взаиморасчётов, найм, покупки
    12. Холдинг: подчинённые компании различных отраслей и сфер экономики или фирм, расположенные в различных регионах, с общей информационной системой
    13. Почтовые рассылки на миллионы подписчиков
    14. Мультиплатформенность: под разные операционные системы отдельная версия программного продукта
    15. Обновление: автоматическое, с бакапами до и после, авто-восстановлением при неудачном обновлении, специфическая система обновления; у каждой версии или модуля своя логика обновления; распределённое одновременное обновление большого количества серверов


    Что из этого Гугль? Ничего. Он зашкаливает по сложности.
    Ответ написан
  • Python/Django-кидди, SQL-мартышка, Web-негр — что перспективнее (Ага, «Pre-Junior»)?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Мне очень понравился твой вопрос. Это лучший вопрос новичка, который я видел на Тостере, я бы дал "Приз Года", честно, без сарказма. Ты уже сделал выбор, когда начал искать место, куда пристроиться. Мне кажется, у тебя получится пробиться дальше, даже если ты сейчас *нечаянно* выберешь не то место для старта.

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

    И меняй работу (ага) регулярно, скажем так через год-два. Не через месяц-три, а именно через год-два. Чем ты будешь заниматься эти два года - частично зависит от работодателя, а больше от тебя лично. А запись "2 года честно оттрубил от рассвета до заката" помогут тебе в будущем.

    P.S. В Краснодаре удалённо работает мой коллега по компании Icons8 - ничто не мешает ему жить в краю с тёплым климатом и получать хорошую зарплату. До этого мёрз на Дальнем Востоке.

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