Задать вопрос
  • Как реализовать новый Wordpress в поддиректории, но со связью с основным?

    kumaxim
    @kumaxim
    Web-программист
    Смотри в сторону Wordpress Multisite
    Ответ написан
    Комментировать
  • Нейронные сети pybrain. С чего начать?

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

    Из что посмотреть/почитать:
    1) Канал Artificial Intelligence and Machine Learning
    2) Книга "Нейронные сети. Полный курс". Авторов не помню. Как на харде у себя найду ее, обновлю ответ.

    В любом случае скачай для начала любой учебник по теории графов, сильно поможет для понимания материала по нейронкам.
    Ответ написан
    Комментировать
  • Как работает интерпретатор javascript на пальцах?

    kumaxim
    @kumaxim
    Web-программист
    Dragon book объясняет как работает вообще любой транслятор/интерпритатор/компилятор. Объем достаточно неслабый(1100 страниц, кажется), плюс вменяемого русского перевода я пока не видел, но после ее прочтения можешь с легкостью написать как свой язык, так и достаточно быстро выучить любой другой.

    P.S.: dragon book - гугли по этой фразе, один из аторов Аох, на обложке дракон с рыцарем.
    Ответ написан
    1 комментарий
  • Хорошо ли подходит NodeJS для парсинга сайтов?

    kumaxim
    @kumaxim
    Web-программист
    Посмотри в сторону ANTLR. Сам инструмент на Java, но есть targer в JS
    Ответ написан
    Комментировать
  • Как работать с заказчиками, если ты дотошный, а они мыслят "в общем"?

    kumaxim
    @kumaxim
    Web-программист
    У меня в одной из заметок есть следующая форлума "функционал = количество часов = количество денег". . Она означает, что конкретный функционал, например, интеграция сайта с facebook я делаю условно за 1,5 часа для стандартной CMS. Час моего времени стоит 600 рублей, значит, я эту задачу я должен взять с клиента 900 рублей = 600 руб/час * 1,5 часа.

    Расписывай максимально детально свой функционал, т.е. что ты делаешь. В любом случае есть какие-то общие детали, которые ты делаешь из проекта в проект. Выведи за них время на основе своего опыта, добавь в свой личный список. Потом, когда клиент тебе говорит мне нужно один, два, три - достаешь свой перечень и говоришь на его основе сумму. Можешь добавить к итоговому ценнику коэфиценты. У меня, например, их два: копание в самописном движке + 40% и оплата сразу 100% суммы контракта -10%. Можешь для себя также сделать за сумму договора, за лояльность к клиенту, за то, что он привел друга к тебе... Это ограничивается только твоей фантазией.

    Про договор ТЗ и растягивание сроков.
    Все чего нет в ТЗ делается за дополнительную сумму. Если ты неправильно понял ТЗ - это твоя проблема, надо было уточнить, дописать формулировку в договор/приложение. Хочет человек что-то сверху оговоренного ранее - нет проблем, за доп.плату сделаем. Подписал человек акт - работа закончена, возобновление только по новому контракту.

    Бесплатные правки и мелкие моменты...
    В свою ставку я кладу 10% на вот такие мелкие доработи по ходу или в конце. Получается, что если общий договор у меня на сумму в 10 часов, то где-то час я могу потратить на все эти "Мне синий не нравится, давайте сделаем зеленый" или "Поменяйте эти два блока местами, а то смотриться как-то плохо" и т.п. Если все это дело выходит за 1 час, причем выходит уже сильно, тогда очень прозрачно намекаешь человеку что либо пускай останавливается, либо платит сверху.
    Ответ написан
    Комментировать
  • Cornerstone не подхватывает css плагина?

    kumaxim
    @kumaxim
    Web-программист
    Вангую.... Вангую, что тебе проще залить проект куда-нибудь типа heroku, прикрепить к нему любой тестовый домен и дать доступ тех.поддержки купленной темы. Не видя код сказать что-то сложно.
    Ответ написан
    Комментировать
  • Как отключить определенный файл стилей когда происходит переход в админ панель WordPress?

    kumaxim
    @kumaxim
    Web-программист
    Идем в папку wp-contents/plugins, создаем там вложенную папку disable-bootstrap. Копируем в нее любой скелет плагина, хотя бы этот.

    В файле wordpress-plugin-boilerplate.php определеяем еще один произвольный метод, пускай это будет public function disable_css(), в теле которого используем функцию wp_dequeue_style. В качестве параметра нужно передать id того link-тега, которая Вам все ломает. Затем, в конструкторе делайте еще один вызов функции add_action, например, вот add_action('add_action', [$this, 'disable_css'])

    Профит!

    Замечание: мой способ срабоет только, если изначально Вы подключали скрипт через функцию wp_enqueue_style. Если Вы или до Вас там кто-то написал просто link-тег в .php-файл, то Вам поможет только полнотекстовой поиск по всем файлами WP'шки
    Ответ написан
    1 комментарий
  • Как правильно построить структуру IT-компании?

    kumaxim
    @kumaxim
    Web-программист
    Первое - определите максимально четко сферу ответственности продажников и проджектов. Продажник для Вас ищет нового клиента: Директ, Авито, холодный прозвон и т.д. Находит - подписывает договор, выставляет счет, может быть берет деньги (если наличные), закрывает акт.

    Задача от клиента "А мне вот тут нужно еще красную кнопочку" - это вопрос к проджекту. Пускай сейлз прямо говорит клиенту, что все что идет после первоначального ТЗ обсуждается с проджектом. Он только по бумаге поможет, если надо будет(доп.соглашение, счет, акт).

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

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

    То, что у Вас сейчас (выросли из 2-х профи в целую компанию) называется кризисом молодого руководителя. Проходит он через 6-12 месяцев, кучу нервов, потраченного в пустую времени и денег. Вы набивайте шишки, нарабатывайте управленческий опыт. Может быть Ваша компания развалится, но как минимум знание о том как делать не нужно, Вы из этого вынесите.
    Ответ написан
    Комментировать
  • Где хранить бесконечность записей (111 * 10^29)?

    kumaxim
    @kumaxim
    Web-программист
    Для начала проверь еще раз свой алгоритм. Скорей всего, у тебя там добрая куча дублей, если не 100%, то какие-то куски точно будут повторяться. Не верю я что все 100% будут какими-то прям очень уникальными.

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

    К вопросу где хранить. Что-то лучше жестких дисков для этого пока еще не придумали. В твоем случае будет разумнее использовать гибридное хранилище SATA + SSD + RAM. Данные, к которым обращение происходит чаще всего, лежат в Redis (т.е. RAM), просто часто используемые - на SSD, что-то редко необходимое - на SATA. Алгоритм подсчета частоты уже сам напиши, определив для своей задачи что такое часто, не очень и редко.

    Кто из провайдеров может обеспечить этим - на digitalOcean есть тарифы с гибридными винтам SATA + SSD, присмотрись к ним. Советую также глянуть в сторону docker, в твоем случае, думаю, нужно будет 10+ машин для хранения, а эта штука позволит тебе управлять их конфигурацией проще.

    По поводу времени на извлечение, поиск и т.д. - гугли на тему "хранение деревьев", "поиск в дереве" и т.д. Постарайся уйти от полных графов, постарайся уйти даже от циклов, даже скажу больше, НЕ ДЕЛАЙ полный граф или цикл в графе на таком объеме, ты выстрелишь себе в ногу просто.
    Ответ написан
    6 комментариев
  • Какие книги про стартапы?

    kumaxim
    @kumaxim
    Web-программист
    Давайте для начала разберемся что вообще такое "Стартап".

    Есть некая группа людей. Есть у них некая проблема, потребность, боль и т.п. Так вот, есть эти потребности явные, однако, иногда они явны не очень.

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

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

    К вопросу что почитать по этой теме и т.д. Гугли фразы "Тестирование ниши" и "Управление проектами". Конкретные книги или статьи рекомендовать не могу.
    Ответ написан
    Комментировать
  • Почему просиходит системная ошибка при создании класса наследованного из абстракного?

    kumaxim
    @kumaxim
    Web-программист
    Сперва обратите внимание на то, какое у Вас базовое пространство имен: какое-то Ваше или системное?
    Первое что меня смущает
    $this->_registry['settings'] = new Tools\Settings();

    Измени на
    $this->_registry['settings'] = new \Tools\Settings();

    *я добавил ведущий слэш перед Tools. Таким образом ты говоршь интерпритатору: "Класс Settings, который мне нужен, лежит в подпространстве Tools глобального пространства имен"

    И второе, напрмер, твой Tools\Settings
    namespace Vendor\Tools;
    
    use Vendor\Core\Loader\AbstractLoader;
    
    class Settings extends AbstractLoader 
    {
           //// ....
    }


    Поменяй на следующее
    namespace Vendor\Tools;
    
    class Settings extends \Vendor\Core\Loader\AbstractLoader 
    {
           //// ....
    }


    Когда ты наследуешь, именно наследуюешь, нет никакого смысла подключать сторонний namespace через use. Лучше прописать полный путь к базовому классу в заголовке(лично мое мнение). Другое дело, когда ты из стороннего namespace вызываешь классы, причем и не один, тогда да - стоит добавить через use.

    UPD:
    Увидел твою ошибку. Ты в use прописываешь путь до класса, например use Vendor\Core\Loader\AbstractLoader; Это неправильно! В use нужно указывать путь до namespace. Ты пишешь так:
    namespace Vendor\Tools;
    
    use Vendor\Core\Loader\AbstractLoader;
    
    class Settings extends AbstractLoader 
    { ///... }


    В твоем случае корректно будет так
    namespace Vendor\Tools;
    
    use Vendor\Core\Loader;
    
    class Settings extends AbstractLoader { ... }

    Используя use Vendor\Core\Loader говоришь интерпритатору - импортируй мне все классы из пространства имен Vendor\Core\Loader, для того чтобы я мог использовать их здесь. В твоем варианте use Vendor\Core\Loader\AbstractLoader ты говоришь - "Импортируй мне вложенные в класс AbstractLoader классы". Я вообще сомневаюсь, что из абстрактного класса через use можно что-то импортировать. Скорей всего тут у тебя и ругается на 500 ошибку.
    Ответ написан
    2 комментария
  • Нужна помощь гиков). Как отправить письмо через 15 лет?

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


    По умолчанию принимаем, что взломать сейф невозможно. Золото можно заменить на любое другое вознаграждение.

    Суть в чем - через 14,5 лет закончится срок хранения. Сразу банкиры замок пилить не будут, обычно они там ждут 2-3 месяца, пытаясь связаться с клиентом. Вскрыв Вашу ячейку банкир получит мотивацию, не важно что это будет - золото, облигации или что-то еще. Главное чтобы это что-то за 14,5 лет не потеряло своей ценности. Еще 2-3 месяца они будут искать адресата. Итог - примерно через 15 лет конечному адресату с большой долей вероятности принесут Ваше послание.

    Единственное узкое место алгоритма - на сколько хорошо Вы сможете вдолбить своему ребенку в голову заданную на сейфе ключевую последовательность.
    Ответ написан
    7 комментариев
  • Можно ли FlexBox использовать для адаптивной верстки, например в качестве замены bootstrap?

    kumaxim
    @kumaxim
    Web-программист
    Bootstrap'овский grid в 4-й версии уже работает через flex-box, хотя она пока еще и alfa.
    Ответ написан
    Комментировать
  • Как в browsersync перезагрузить только изменённую часть кода, а не рефрешить всю страницу?

    kumaxim
    @kumaxim
    Web-программист
    Если изменяйте html, особенно если он внутри php-файлов - тогда никак, только обновление всей страницы. Если изменен какой-нибудь css/js и нужно обновить изменения, тогда добавьте browserSync.stream(). Мой пример сборки bootstrap-sass в gulp
    gulp.task('bootstrap-sass', function() {
    	return sass(src.bootstrap.source, {
    			style: 'compressed'
    		})
    	    .on('error', sass.logError)
    	    .pipe(rename(src.bootstrap.dest.name))
    	    .pipe(notify('File ' + src.bootstrap.dest.folder + '/' + src.bootstrap.dest.name + ' was compiled'))
    	    .pipe(gulp.dest(src.bootstrap.dest.folder))
    	    .pipe(browserSync.stream())
    });
    Ответ написан
    2 комментария
  • Какова практическая ценность магистратуры в IT?

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

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

    kumaxim
    @kumaxim
    Web-программист
    В PHP 5.2 часть стандартных функций языка, которые внутри себя использует движок были помечены как "Устаравшие". Версия PHP 5.3 их еще поддерживала для обратной совместитомости. Из PHP 5.4 они были вовсе удалены.

    Проверить можно довольно легко - добавьте error_reporting(E_ALL) в index.php на сайте где все криво отображается и пройдитесь по страницам. С очень большой вероятностью Вы увидите что на что-то ругается PHP...

    Выход для Вас только один - обновляйте PHP на своих VPS'ках хотя бы до версии 5.5.
    Ответ написан
    1 комментарий
  • Возможно ли установить два одинаковых плагина на один сайт?

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

    1. Распоковать архив gimap.zip в папку gimap
    2. Создать копию папки gimap, назвав ее, например, gimap-v2
    3. Заходите в папку gimap-v2
    4. Открыть index.php
    5. Найти в заголовке /* Plugin name: gimap */ - это имя Вашего плагина
    6. Сменить gimap на gimap-v2 - имя, отображаемое у Вас в адмике на странице с плагинами
    7. Залить по ftp обе папки на сервер в папку плагинов: /wp-content/plugins


    После этих манипуляций заходите в амдинку WP на страницу "Плагины". Там будет отображается эти Ваши две копии. Активируйте их.

    Хотя если плагин работает с шорткодами в корректности работы одновременно двух его копий не уверен, они, возможно, будут перезатирать данные друг друга.
    Ответ написан
    2 комментария
  • Как добавить скрипт в исключения для WordPress?

    kumaxim
    @kumaxim
    Web-программист
    Создаешь в корне WP папку zip. Туда кладешь свой php-скрипт. В этой же папке zip создаешь файл .htaccess с содержимым
    RewriteEngine Off

    К самому скрипту потом обращаешься как wp-example-site.org/zip/zip-file/filename/27
    Разумеется, как плагин он у тебя уже не будет виден в WP, поэтому какие-то настройки из него, если они тебе нужны, придется тянуть руками.
    Ответ написан
    Комментировать
  • Качественный перевод книг по программированию, где взять?

    kumaxim
    @kumaxim
    Web-программист
    Есть всего два способа выучить иностранный язык:
    1. читать на нем
    2. писать на нем


    Переводы, особенно технической литературы, лично я, советую Вам не читать. Не, перевели может быть ребята нормально, но в теме переводчик, скорей всего, вообще не разбирается, поэтому часть контекста, который хотел донести до читателя автор оригинала, теряется.
    Пройдите любой интенсив по английскому и читайте книжки в оригинале с google translate. Намного больше поймете, чем из перевода.
    Ответ написан
    2 комментария
  • Не работает do_shortcode в WP?

    kumaxim
    @kumaxim
    Web-программист
    Не до конца все-таки понял суть Вашей проблемы, но если нужно отфильтровать что-то из стандартного вывода WP, то я всегда использую функцию add_filter(). Список всех возможных фильтров смотри здесь
    Ответ написан
    Комментировать