Ответы пользователя по тегу Программирование
  • Часто ли программистам приходится составлять таблицы истинности?

    kumaxim
    @kumaxim
    Web-программист
    Расширенный поиск по параметрам - классический пример.

    Открой hh.ru и перейди на страницу со списком параметров: город, з/п, тип занятости, права, инвалидность и т.п.
    Таблица истинности там будет строиться в виде объекта и уже он будет использоваться для выборки. Вариация на тему - зависимые параметры, например, мне нужен сотрудник с правами, но только категории С. Значит, я должен искать категорию прав только тогда, когда у меня есть отметка о наличии прав. Можно сюда же добавить опыт вождения и подобные вещи.

    С ходу как это работает под капотом я тебе не расскажу, но в целом любая система расширенного поиска будет являться таблицей истинности по своей сути.
    Ответ написан
    Комментировать
  • Проверка на антиплагиат дипломной работы уменьшилась, как быть?

    kumaxim
    @kumaxim
    Web-программист
    Сделай рерайт обычного текста и рефакторинг программного кода. Все, твоя проблема решена.
    Ответ написан
    Комментировать
  • Не работает INSERT PDO?

    kumaxim
    @kumaxim
    Web-программист
    Оберни вызов метода в
    try {
    .........            
    } catch (Exception $err) {
       print_r($err)
    }

    и попробуй его исполнить еще раз.
    Ответ написан
    Комментировать
  • Как монетизируются языки программирования и бесплатные фреймворки?

    kumaxim
    @kumaxim
    Web-программист
    Первое: стоимость обучения(вхождения) нового программиста в проект значительно снижается. За частую компания сразу пишет, что крайне желательно знать фреймворк/библиотеку N и в первую очередь рассматривает людей, которые имеют с ней какой-либо опыт работы.

    Второе: решения каких-то затыков, например, по функционалу или производительности. Любой код с точки зрения не программиста, либо работает либо нет. Однако, код написанный одним человеком будет выполнять задачу за 10 сек расходуя 100 Мб памяти, а код другого человека будет делать ровно тоже самое за 7 секунд и 60 Мб памяти. Помножим это на количество запросов в сутки и получим достаточно хорошую экономию в продакшине на горизонте от 1 года.
    Ответ написан
  • На чём писать CRM?

    kumaxim
    @kumaxim
    Web-программист
    Пишите на том, что лучше всего знайте. Это первое и единственное что нужно учитывать.

    Уровень вхождения. Специалисты не должны быть на "вес золота".

    Открываем hh.ru по Вашему региону и ищем резюме с ключевыми словами C#, Java, PHP и т.д. Исходя из количества потенциальных кандидатов и их запросов понимаем будут ли они на "вес золота" или нет.

    Десктоп!important, \(смартфон, web)?\

    Не понимаю в чем проблема сделать приложение в браузере, т.е. чтобы Ваша CRM открывалась через любой бразуер. По этому принципу работает Мегаплан, Амо и т.д. Да почти любая соверменная CRM. Возьмите на основу этот же путь, как вариант.

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

    Разрабатывая любое десктопное приложение рано или поздно Вы столкнетесь с проблемой его корректной работы на разных машинах. К примеру, создали Вы програмку под Windows. На одной машине с Win 7 она работает прекрасно, а на Win 7 SP 1 уже выдает какую-то ошибку. Еще пример, на 5 машинах стоит одинаковая ОС. На 4-х из них Ваша программа работает прекрасно, а на 5-й какое-то там окно не отображается... Почему так? Надо садиться и разбираться, копаясь конкретно в настройках этой машины, выесняя что там не так, чего там не стои или стоит лишнего....

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

    Писать и поддерживать приложение по второму варианту гораздо сложнее и более затратно как по времени, так и по деньгам. Решением здесь как раз является облако, причем совсем не обязательно Вам где-то покупать сервер в дата-центре и т.д. В локальной сети своей организации ставите самый обычный системный блок, на котором будет стоять Debian + Apache + MySQL. Все, для CRM до 50 человек, Вам такой кофигурации будет более чем достаточно. Любая Ваша CRM, будь она самописной или купленной, теперь должна работать только на одной машине, а все остальные - тонкие клиенты, которые взаимодействуют с ней используя лишь браузер. Такую конфигурацию легче и дешевле поддерживать со всех известных мне точек зрения.
    Ответ написан
  • Как правильно генерировать псевдослучайные числа?

    kumaxim
    @kumaxim
    Web-программист
    Судя по Вашему комментарию к ответу Ivan Sokolov Вы несколько не понимайте суть своего же вопроса.

    Любое, повторюсь, абсолютно любое, псевдослучайное число будет находиться в какой-то последовательности, причем сама последовательность будет строиться по какой-то формуле.

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

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

    Возьмем, например, функцию rand() из любого языка программирования. Она будет генерировать псевдослучайное число основываясь на метки времени в unixtime. На сколько она предсказуема? Хм, думаю не менее чем на 100%. Хорошо, получается что зная приблизительное время запуска функции rand(), скажем, с точностью до 1 минуты, мы можем получить точно такое же псевдослучайное число. Отлично, т.е. вот от этого нужно и копать.

    Давайте предположим, что мы вытянули список компаний из ЕГРЮЛ по Москве и взяли их ОРГН. Далее, наша функция генерирует unixtime и из него мы вычитаем этот самый ОГРН, причем последние две цифтры в unixtime и ОГРН должны совпадать(к примеру, условие выбора ОГРН может быть любое). Чего мы добились? Зная время работы функции rand() мы не можем сгенерировать второе точно такое же псевдослучайное число. Вы мне можете сейчас возразить, что давайте возьмем тот же ОГРН и повторим процедуру. На этом месте я хочу задать Вам вопрос: а от кого мы вообще строим защиту? Злоумышленник является создателем системы и знает о ней 100%? Я думаю любая защита в этом случае просто бессмысленна.

    Вы должны внести в свою формулу генерации некое неожиданное поведение, которые будет отличаться от того, что есть в стандартной реализации. Будет это какой-то ОГРН, дни рождения Ваших коллег, ID юзеров в ВК и т.п. Внешнему атакующему эта особенность не известна.

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

    Резюмируя все выше сказанное - чтобы сделать Ваш ряд псевдослучайных чисел более случайным, нужно в формулу его генерации добавить число из другого ряда чего-то псевдослучайного. Также сильно рекомендую получившиеся псевдослучайное число проверять на простоту, если Вы его собирайтесь использовать как значение в генерации секретного ключа для ГОСТ или RSA
    Ответ написан
    2 комментария
  • Как вы относитесь к тестовым заданиям на Upwork?

    kumaxim
    @kumaxim
    Web-программист
    Тестовые задание на фрилансе, на мой взгляд, это бред. Ты свою работу либо можешь делать либо не можешь. Сделанная тобою работа либо решает задачу компании либо нет. Вот за решение задач ты как специалист и получаешь свои деньги.

    Бесплатно я клиенту максимум формочку с заглушкой на отправку рисовал. Все остальное шло уже за оговоренную сумму.
    Ответ написан
    Комментировать
  • Что скажете об архитектуре?

    kumaxim
    @kumaxim
    Web-программист
    Как сказал lubezniy посмотри авторизацию. Ты пишешь про то, что к ней "минимальное количество запросов", ок, давай так считать, а ты учел вариант, что тебя кто-то брутить будет, что могут целенаправлено валить сервис авторизации? Авторизация легла - считай легло все остальное. Обрати на этот сервис доп.внимание. Продумай механизм возможного масштабирования, способы защиты от перегрузки/падения.

    Далее ты пишешь, что у тебя chat & battle фактически одно и то же. Так у меня вопрос, зачем их тогда связывать с глобальными сервисами? Сделай общий тип room, который в зависимости от типа будет привязываться либо на chat либо на battle service.
    Ответ написан
  • Какова значимость диплома в бизнесе по СНГ (IT индустрия)?

    kumaxim
    @kumaxim
    Web-программист
    Фишка ВУЗа не в том, чтобы научить Вас использовать какой-то язык/библиотеку/фреймворк.
    Я когда сам был на 1-2 курсах, задавался сильно вопросом: "А для чего мне этот С++? Сейчас для веба PHP & CodeIgniner используют очень широко, заказов на фриланс-биржах на этот стек много, в описаниях вакансий часто эти ключи встречаются. Вот зачем спрашивается мне этот Ваш С++ с его управлением памятью и прочими ненужными вещами..." Но минуло 4 года, я получил диплом. К этому времени CI уже сдулся, активно все стали использовать альтернативные языки - Python, Ruby. Фреймворки для PHP тоже поменялись - Yii, Laravel...

    Это я все к чему... Универ должен заложить в Вас основу, базу, которая не устареет через 3-4-5 лет к тому моменту, когда Вы получите диплом. А что является этим фундаментом? Скажем интерпритаторы PHP, Ruby, Python написаны C, и зная С/С++ можно очень легко выучить любой вышестоящий язык, синтаксис по большому счету там везде один и тот же. Зная как работает интерпритатор в приницпе, можно написать свой язык программирования. И если язык может часто и не нужен, то вот парсеры с чего-нибудь куда-нибудь мне приходится писать очень часто, а любой парсер имеет упрощенную грамматику языка программирования. Вы думайте необходимость в парсерах скоро вымрет? Что т мне так не кажется...

    Сейчас очень популярна стала тема нейронных сетей, искуственного интелекта, машинного обучения... А что лежит в самой основе этого? Да банальная теория графов. Любая нейронная сеть и ИИ это по большому счету граф, да, со сложной структурой, да, порой в нем может начать творитья просто магия, но тем не менее эта структура и базовые операции с ней были предложены и изучены еще в середине прошлого века. Когда устареет теория графов? Графов вокруг нас больше чем Вы думайте - маршрут движения общественного транспорта, хотя бы например. "Как добраться из пункта А в пунт Б" - типичная задача комивояжера. Когда это уйдет? Думаю только с изобретением устройства для телепортации, и то не факт что полностью.

    ВУЗ преде всего должен заложить в тебя базу, а на заочном/вечернем отделениях ты получаешь не знания, которые составляют вот этот твой фундамент, а кусок бумаги, необходимость которого сомнительна в текущих реалиях на постсоветском пространстве.

    Говоря о том, что "актуальные сейчас для бизнеса технологии вообще не изучаются, ВУЗ дает устаревшие знания и т.д.", я могу сказать только одно - для бизнеса всегда будет актуально только одно - решение его операционных задач с минимально возможными ресурсами. А вот какие именно инструменты помогают оптимизировать операционную деятельность компании - Java, Python или что-то еще в диапазоне 2-3 лет может сильно варьироваться. Новый язык/фреймворк реально выучить и начать решать на нем задачи за 2-6 недель, если Вы не дурак конечно. Какой именно язык/фреймворк это будет - нужно смотреть задачи компании и имеющиеся на рынке инструменты для решения онных и их изучанием уже и заманиматься.
    Ответ написан
    1 комментарий
  • Какова практическая ценность магистратуры в IT?

    kumaxim
    @kumaxim
    Web-программист
    Первый плюс - отсрочка от армии. На сколько это для Вас актуально не знаю.

    Насчет имиграции в развитые страны тут могу с Дмитрий Энтелис не согласится. К примеру в USA лечге въехать по студенческой визе, для последующего обучения там в магистратуре. Вопрос лишь в необходимой сумме на твоем банковском счете, которую ты готов заплатить учебному заведению.
    Ответ написан
    Комментировать
  • Можно ли считать это "говнокодом"?

    kumaxim
    @kumaxim
    Web-программист
    Чтобы не сильно говнокодить, нужно сначала прочитать Роберта С Матртина "Чистый код".
    А пишите Вы на Go, Java, C#, PHP, Python, Ruby и т.д. - это уже десятое дело...
    Ответ написан
    2 комментария
  • Как реализовать граф принятия решений?

    kumaxim
    @kumaxim
    Web-программист
    Единственная "секретная" техника, которая тут мне приходит на ум - патерн "Цепочка обязанностей", вместо Ваших if - elseif - else - switch - case -default, которые в графах будут в огромнейшем количестве...
    Хотя это детали реализации, сама теория графов от этого не меняется.
    Ответ написан
    Комментировать
  • Что учить для адаптивной верстки?

    kumaxim
    @kumaxim
    Web-программист
    Для верстки подавляющего большинства шаблонов(фиксированных или адаптивных) Вам понадобится:
    • SublimeText
    • NodeJS: Bower и Grunt
    • LESS/SASS(на выбор)
    • Bootstrap


    По всему что перечислено выше есть куча видеоуроков. Лично мне нравится как рассказывают ребята из loftblog'а. Заходите на их сайт, в строку поиска вбивайте любое из ключевых слов что выше и получайте список подкастов, где они Вам все подробнейшим образом разжуют.
    Ответ написан
    Комментировать
  • Какие методы Вы используете, чтобы быстро найти участок в проекте с сотней тысяч строк?

    kumaxim
    @kumaxim
    Web-программист
    1)Ctrl + F
    2)PHPStorm автоматически может перекидывать на определение функции
    3)Отладчик

    Если мы упоролись по хардкору, тогда любой hex-редактор
    Ответ написан
    Комментировать
  • Где найти разработчика в команду?

    kumaxim
    @kumaxim
    Web-программист
    Берете одну Вашу большую задачу, соц.сеть у Вас там или второй Яндекс - особо значения не имеет.
    Теперь, описывайте весь функционал, который Вы хотите видеть в проекте. Сортируйте этот функционал в порядке важности, устанавливайте зависимости.
    Как пример, я сейчас конструктор сайтов пилю, проект большой... Так вот, без возможности регистрации пользователей, я не смогу реализовать учет пользователей, без учета пользователей я не смогу реализовать выписку счетов, без счетов я не сделаю прием платежей и т.д. Это все делается на уровне Вашей идеи, анализа предметной области и требований внешних сервисов, если они предусмотрены. Для такого планирования Вам знания в программировании не нужны, только здравый смысл.
    Так вот, теперь у Вас есть список, обычно он называется product backlog - это то, что должно быть сделано в проекте. Далее, строите работу на основе спринтов. Один спринт - 30 часов, что примерно равно одной недели нормальной продуктивной работы, а не "наматывания" кода на "вилку"... Далее, Вы вместе с разработчиком обсуждайте сколько задач он может вытянуть за эти 30 часов. Если объем Вас устраивает - начинайте работать, нет - ищите другого. Это если мы говорим про найм самого первого девелопера.
    Человек отработал 30 часов, Вы ему заплатили денег, отработал еще 30 - заплатили и так пока у Вас не закончатся бабки...

    Теперь насчет крутизны идеи, ее уникальности и т.д. Я столько этих соц.сетей повидал... Столько программировал их... Проблемы всегда возникает две:
    1)На стадии разработки - плохая архитектура, не продумал мелкий девелопер архитектуру, а сразу начал писать код. Потом понял что написал, а переписать это - еще два месяца работы. И вот тут начинают в код добавлять баг-фиксы, накрывать это какими-то костылями и т.д. В конечном итоге приходим к тому, что автор проекта остается с плохой кодовой базой, которую развивать невозможно и без разработчиков.
    2)Сам автор допустил ошибку при планировании. Вы кого опрашивали? Ваши родственники, знакомые, друзья? Они чтобы не обижать Вас могут сказать мол "Да, круто". И Вы этим вдохновитесь... Это близкие Вам люди, они не хотят лишний раз на Вас грязь лить, говорить Вам в лицо неприятные вещи и т.д. Выход тут один - найди независимую аудиторию, которой на тебя плевать. Закажи тот же опрос на МДК(2к руб стоит у них пост на стене, могу ошибаться) или любой другой группе, где сидит твоя потенциальная аудитория. Это тебе позволит намного лучше понять для кого ты это пилишь.

    P.S.: желаю Вам успехов с Вашим проектом
    Ответ написан
    Комментировать
  • Какие существуют современные аналоги "Искусства программирования" Дональда Кнута?

    kumaxim
    @kumaxim
    Web-программист
    Чем же Вам не угодила КЛАССИКА!!!
    В том что книга сложная, особенно для начинающего программиста(я ее впервые открыл на 2-м курсе) - согласен на все 100%. Я ее читал в несколько заходов где-то на протяжении года, но осилил.
    Если хотите что-то по проще... Читали Роберт С. Мартин Чистый код или РРР?
    Ответ написан
    Комментировать
  • Как лечится кризис начинающего программиста?

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

    Возьмем, как пример, тот же бух.учет на предприятии. Как Вы думаете, почему 1С Бухгалтерия так широко распространилась в РФ и СНГ? Эта программа позволяет бухгалтеру в 2-3 клика мышки сформировать отчет для регулятора(ФНС, ПФР и т.д.), вместо того чтобы человеку сидеть руками искать платежные поручения, вычислять налоги и т.п. Софт просто подтягивает выписку из банка, анализирует ее и выдает готовую для печати бумажку, что экономит бухгалтеру сильно много времени. Расчет заплатанный налогов и отчеты в соц.фонды это вообще красота - 8 кликов мышкой и все готово :-)

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

    И вот, далее Вы для себя определитесь, какая Ваша основная цель? Какой Ваш основной посыл обществу?

    Личной мой посыл - "Я помогаю людям экономить: время, деньги, нервы и т.д.".

    Как я это делаю?
    У меня сначала был маленький интернет-магазин по продаже катализаторов для бензина(в поиск "кондиционеры метала для а/м"). При соблюдении определенных условий, расход топлива на малометражках снижался от 20% до 45%
    Вторым моим проектам было небольшое мобильное приложение для отслеживания хода исполнительного производства в ФССП(для взыскательней, уже сдохло). Мне и моим знакомым(не юристы) это экономило достаточно много времени на ругань с приставами, чего они должны делать и т.д. Кто сталкивался с этой службой должен знать эффективность и оперативность их работы, особенно в регионах...
    Сейчас я пишу небольшой конструктор сайтов, который поможет одной дружественной мне веб-студии сильно оптимизировать процесс создания низкобюджетных сайтов визиток

    К чему я все здесь это пишу? Я пытаюсь донести до Вас, что нет Вам смысла учить программирование на какой бы то ни было языке ради самого программирования. Нет смысла Вам учить алгоритмы, структуры, паттерны и т.д. ради их самих.

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

    Если говорить о чисто практических инструментах(функции стандартной библиотеки, фреймворки и т.д.)... Лично я могу считать себя профессионалом в какой бы то ни было технологии, ни когда я прочитал 1-2 книги и/или написал 1,5 задачи оттуда же. С таким уровнем я не могу сказать что я знаю язык/технологию в принципе, просто знаком - да, но я ее не знаю. Считать себя профессионалом я могу после того как решу не менее сотни задач, используя эту технологию и написал не менее 1 млн строк кода, именно написал, а не сгенерировал rake/gii/artisan или чем-то там еще.

    Вам же я желаю не останавливаться, развивайтесь. Мастерство приходит с опытом.

    P.S.: от холиваров на тему 1С прошу всех воздержаться
    Ответ написан
    11 комментариев
  • Как составить уравнение?

    kumaxim
    @kumaxim
    Web-программист
    Элементарно же все:
    1. Генерируем случайное число от 0 до 10. Делим его на 10(назовем это N1)
    2. Генерируем случайное число от 25 до 325(назовем это R1)
    3. Прибавляем N1 + R1. Округляем до целого значения(вверх или вниз смотри сам)
    4. Вычисляем остаток от деления N1 + R1 на 25. В большинстве языков эта операция идет через "%"
    5. Если остаток от деления равен нулю - результат найден, выход
    6. Если остаток от деления не равен нулю - повторить шаги 2-4. Про цикл, думаю, говорить не надо
    Ответ написан
  • Как пояснить клиенту что такое технический долг и рефакторинг?

    kumaxim
    @kumaxim
    Web-программист
    Для начала скажите зачем Вы вообще хотите рефакторить код? Моральное удовлетворение?! Технический долг?! Вам что, приятнее трахаться с функциями в коде, чем со своей девушкой?

    Работает код - не трогайте его, пусть дальше работает.

    А вот если клиенту нужно сделать какую-то специальную фишку, для чего тебе нужно влезть в N*100 классов, добавить обработку новых входных параметров, прописать формирование и контроль выходных данных... Вообщем создает много гемороя, вот тогда ты говоришь клиенту, что это встанет в столько-то часов твоего времени и вот такой будет ценник и, если тот соглашается, уже начинаешь рефакторить.

    Вообще где-то я видел мнение(тут на тостере или на codenet) что клиенту вообще не надо знать, что ты занимаешься рефакторингом, с чем лично я согласен. Ты показываешь ему свои почасовые отчеты, клиент видит что ты работаешь, все. Остальное уже те мелочи, от которых ты его избавляешь как специалист.
    Ответ написан
    2 комментария
  • Ребята, вопрос к умеющим, как лучше: сначало изучать теорию потом кодить когда она прочно закрепится в голове либо сразу начать кодить?(Html/css/js)?

    kumaxim
    @kumaxim
    Web-программист
    Любой язык, любой фреймворк, любую технологию лично я изучаю так:
    1)Ставится задача
    2)Под задачу находятся готовые решения
    3)Гуглятся проблемы и непонятные мне места
    4)Что-то пишется, возможно пятое колесо, возможно очередной велосипед, но это работает
    5)Написал п.4, осмыслил. Погуглил на тему похожих решений. На этом шаге в голове уже появляются правильные слова(термины, название библиотек) для гугла
    6)Либо нашел свой идеал в чем-то готовом, либо написал "совершенный" код(на текущий момент)

    Шаги 1-6 повторяются бесконечно. Алгоритм выше я активно использовал, когда после PHP учил Ruby.
    Ответ написан
    3 комментария