• Посоветуйте сервис СМС-оповещений для магазина

    KEKSOV
    @KEKSOV
    Совсем недавно развернуто ответили в этом хабра обсуждении
    Мой любимый SMSPilot сводится к двум строчкам:

    $sms = new SMSPilot( 'ключ API' );
    $sms->send( '79031112233', utf8_encode( 'Мама мыла раму и упала' ), 'boo.ru' );
    
    Ответ написан
    Комментировать
  • Поиск одинаковых подстрок в строке?

    KEKSOV
    @KEKSOV
    Один из простых вариантов — построение частотного словаря. Более сложный вариант двоичное упорядоченное дерево. Примеры применения в статье про LZW или в статье про сжатие изображений
    Ответ написан
    Комментировать
  • Как вы оцениваете взломоустойчивость такой капчи

    KEKSOV
    @KEKSOV
    Идея прикольная, но при объединении кадров буквы становятся вполне осязаемыми. Можно будет обучить тессеракт этому шрифту. Защита простая — не ставить буквы в строчку и вращать их под разными углами. Хотя, при сохранении неизменного шрифта, можно будет сделать полный перебор картинки и подобрать наиболее похожий вариант. Иными словами, еще используйте разные шрифты для каждой буквы.
    Ответ написан
    8 комментариев
  • Как общатся со службой в windows через php?

    KEKSOV
    @KEKSOV
    Если просто GET с параметрами, то и обычный fopen справится, если что-то более сложное, то curl или SOAP
    Ответ написан
    Комментировать
  • Принудитальная очистка памяти PHP?

    KEKSOV
    @KEKSOV
    Приведите пожалуйста минимально-законченный кусок кода с циклом, где Вы удаляете переменную при помощи unset
    Ответ написан
  • Bring to front в Paper.js

    KEKSOV
    @KEKSOV
    Если залезть в исходники paper.js, то там видно, что addChild вызывает insertChild, который сначала удаляет объект из списка своих детей, а потом добавляет этот же объект в этот список, а потом вызывает redraw. Очевидно, что последний объект будет отрисован поверх всех остальных.
    Ответ написан
    1 комментарий
  • Как не завянуть программисту?

    KEKSOV
    @KEKSOV
    Спорная это штука. Как всегда, wiki нам поможет.

    Цитата:
    Independent verification
    The non-profit Lighting Research Center, a group of utility companies, experts and government agencies, established the National Lighting Product Information Program (NLPIP) in the USA to provide objective information about the effectiveness of different lighting systems. According to the NLPIP, full-spectrum light does not provide any improved benefits over similar light systems.[3][4]
    A Cornell University study reached mixed conclusions on the use of full-spectrum lighting in restaurants to promote sales.[5]
    The National Research Council of Canada Institute for Research in Construction, a Canadian government research and development agency, has published several scientific articles about full-spectrum lighting, collected on their web page. The authors of these papers also have concluded that full-spectrum lighting (~5000 K, CRI>90) does not confer any benefits on performance, mood, or health compared to typical cool-white fluorescent lighting.[6][7]


    И по ссылкам в подвале пройдитесь. Думаю, эффект, если и будет, то больше от самовнушения :)

    Ну а купить можно тут на eBay. Понравился девайс для морского аквариума, с его помощью можно сымитировать полный суточный световой цикл от восхода луны, до заката солнца.
    Ответ написан
    2 комментария
  • Посоветуйте сервер трансляции видео (картинками) под linux?

    KEKSOV
    @KEKSOV
    В одном из проектов я реализовал следующую схему — картинки от камер льются на сервер (один-два, кадра в секунду) и записываются в структуру директорий — год, месяц, день, час. Для просмотра был написан javascript, который делал из этого слайдшоу с возможностью прокрутки вперед назад в пределах часа.

    В принципе, можно подумать о преобразовании jpeg в flv. На стеке обсуждался аналогичный вопрос.

    Если не секрет, а какими камерами пользуетесь?
    Ответ написан
  • 3D графики в браузере без флеша, неужели нет?

    KEKSOV
    @KEKSOV
    Я правильно понимаю, что вопрос не просто о 3D, а о 3D для визуализации некоей статистики/матфукций?

    Видимо, Three.js Вы уже нашли (примеры) А для матфункций может подойти MathBox, который на этом Three.js и основан.

    В качестве альтернативы можно посмотреть в сторону processing.js

    Офтоп 2D: пока гуглил, наткнулся на d3.js, классные примеры у них…
    Ответ написан
    2 комментария
  • Почему тормозит mysql при insert и update?

    KEKSOV
    @KEKSOV
    Пожалуй, вот хорошая статья о проблемах больших таблиц.

    И с чего, вдруг, такая «боязнь» партиционирования? Вот живой пример из подсистемы статистики на сайте одного из моих заказчиков. За год там накопилось около 5.000.000 записей, все прекрасно работает и ничего не тормозит:

    SET NAMES cp1251;
    DROP TABLE IF EXISTS stat_event;
    CREATE TABLE stat_event
    (
    -- Общие поля
        `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Ключ записи',
        `oid` BIGINT UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID Объекта',
        `created` DATETIME NULL COMMENT 'Время создания записи',
        `changed` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT 'Время последнего изменения записи',
        `uid` BIGINT UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID пользователя, сделавшего последние изменения',
        `comments` BLOB COMMENT 'Примечание',
    
    -- Поля объекта
        `event_time` DATETIME NOT NULL COMMENT 'UNIX timestamp события (может отличаться от значения в поле created)',
        `event_type` ENUM (
              'UNKNOWN'     -- тип события не определен
            , 'INDEX'       -- загрузка заглавной страницы
            , 'PRODUCT'     -- загрузка страницы с описанием товара
            , 'CATEGORY'    -- загрузка страницы с описанием категории
            , 'GROUP'       -- загрузка страницы с описанием группы категорий
            , 'SITEMAP'     -- загрузка роботом карты сайта
            , 'ORDER'       -- оформление заказа через сайт
            , 'OTHER'       -- прочее событие
            , '404'         -- страница не найдена
            , '301'         -- редирект страницы
            , 'VIEW_CART'   -- просмотр корзины заказов
            , 'OFFLINE_MSG' -- Отправка сообщения через Форму пожаловаться
            , 'ONLINE_MSG'  -- Отправка сообщения через Форма помощь онлайн
            , 'PAGE_LOAD'   -- Страница загружена в браузер
        ) NOT NULL DEFAULT 'UNKNOWN' COMMENT 'Тип события',
        `server_name` ENUM('0','foo.ru','boo.ru','goo.ru') NOT NULL DEFAULT '0' COMMENT 'Сервер, на котором произошло событие',
        `shop_object_id` BIGINT UNSIGNED DEFAULT 0 COMMENT 'идентификатор объекта магазина, если событие связано с ним',
        `request_uri` TEXT NULL COMMENT 'строка запроса',
        `query_string` TEXT NULL COMMENT 'параметры запроса',
        `bot` ENUM('0','1') NOT NULL DEFAULT '0' COMMENT 'В строке USER_AGENT встречается bot',
        `remote_addr` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'IP-адрес клиента',
        `referer` TEXT NULL COMMENT 'Адрес страницы, с которой пришел клиент',
        `user_agent` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'название браузера, переданного серверу',
        `server` TEXT NULL COMMENT 'php-переменная $_SERVER',
        `session` TEXT NULL COMMENT 'php-переменная $_SESSION',
        `cookie` TEXT NULL COMMENT 'php-переменная $_COOKIE',
        `request` TEXT NULL COMMENT 'php-переменная $_REQUEST',
        `event_params` TEXT NULL COMMENT 'Дополнительные параметры события, как правило это JSON',
        `profiler` TEXT NULL COMMENT 'json счетчиков производительности',
        `profiler_total` DECIMAL(8,5) NOT NULL DEFAULT 0 COMMENT 'время, за которое был выполнен запрос',
        `db` TEXT NULL COMMENT 'json счетчиков SQL-запросов',
        `tephlon` TEXT NULL COMMENT 'json статистики кеша SQL-запросов',
        
        PRIMARY KEY (`id`, bot, event_time )
    ) ENGINE=MYISAM DEFAULT CHARSET=cp1251 COMMENT 'События, происходящие на сайте'
    PARTITION BY RANGE COLUMNS( event_time ) 
    SUBPARTITION BY LINEAR KEY( bot )
    SUBPARTITIONS 2
    (
          PARTITION p2011_09 VALUES LESS THAN ( '2011-10-01 00:00:00' )
        , PARTITION p2011_10 VALUES LESS THAN ( '2011-11-01 00:00:00' )
        , PARTITION p2011_11 VALUES LESS THAN ( '2011-12-01 00:00:00' )
        , PARTITION p2011_12 VALUES LESS THAN ( '2012-01-01 00:00:00' )
    
        , PARTITION p2012_01 VALUES LESS THAN ( '2012-02-01 00:00:00' )
        , PARTITION p2012_02 VALUES LESS THAN ( '2012-03-01 00:00:00' )
        , PARTITION p2012_03 VALUES LESS THAN ( '2012-04-01 00:00:00' )
        , PARTITION p2012_04 VALUES LESS THAN ( '2012-05-01 00:00:00' )
        , PARTITION p2012_05 VALUES LESS THAN ( '2012-06-01 00:00:00' )
        , PARTITION p2012_06 VALUES LESS THAN ( '2012-07-01 00:00:00' )
        , PARTITION p2012_07 VALUES LESS THAN ( '2012-08-01 00:00:00' )
        , PARTITION p2012_08 VALUES LESS THAN ( '2012-09-01 00:00:00' )
        , PARTITION p2012_09 VALUES LESS THAN ( '2012-10-01 00:00:00' )
        , PARTITION p2012_10 VALUES LESS THAN ( '2012-11-01 00:00:00' )
        , PARTITION p2012_11 VALUES LESS THAN ( '2012-12-01 00:00:00' )
        , PARTITION p2012_12 VALUES LESS THAN ( '2013-01-01 00:00:00' )
    
        , PARTITION p2013_01 VALUES LESS THAN ( '2013-02-01 00:00:00' )
        , PARTITION p2013_02 VALUES LESS THAN ( '2013-03-01 00:00:00' )
        , PARTITION p2013_03 VALUES LESS THAN ( '2013-04-01 00:00:00' )
        , PARTITION p2013_04 VALUES LESS THAN ( '2013-05-01 00:00:00' )
        , PARTITION p2013_05 VALUES LESS THAN ( '2013-06-01 00:00:00' )
        , PARTITION p2013_06 VALUES LESS THAN ( '2013-07-01 00:00:00' )
        , PARTITION p2013_07 VALUES LESS THAN ( '2013-08-01 00:00:00' )
        , PARTITION p2013_08 VALUES LESS THAN ( '2013-09-01 00:00:00' )
        , PARTITION p2013_09 VALUES LESS THAN ( '2013-10-01 00:00:00' )
        , PARTITION p2013_10 VALUES LESS THAN ( '2013-11-01 00:00:00' )
        , PARTITION p2013_11 VALUES LESS THAN ( '2013-12-01 00:00:00' )
        , PARTITION p2013_12 VALUES LESS THAN ( '2014-01-01 00:00:00' )
    
        , PARTITION p2014_01 VALUES LESS THAN ( '2014-02-01 00:00:00' )
        , PARTITION p2014_02 VALUES LESS THAN ( '2014-03-01 00:00:00' )
        , PARTITION p2014_03 VALUES LESS THAN ( '2014-04-01 00:00:00' )
        , PARTITION p2014_04 VALUES LESS THAN ( '2014-05-01 00:00:00' )
        , PARTITION p2014_05 VALUES LESS THAN ( '2014-06-01 00:00:00' )
        , PARTITION p2014_06 VALUES LESS THAN ( '2014-07-01 00:00:00' )
        , PARTITION p2014_07 VALUES LESS THAN ( '2014-08-01 00:00:00' )
        , PARTITION p2014_08 VALUES LESS THAN ( '2014-09-01 00:00:00' )
        , PARTITION p2014_09 VALUES LESS THAN ( '2014-10-01 00:00:00' )
        , PARTITION p2014_10 VALUES LESS THAN ( '2014-11-01 00:00:00' )
        , PARTITION p2014_11 VALUES LESS THAN ( '2014-12-01 00:00:00' )
        , PARTITION p2014_12 VALUES LESS THAN ( '2015-01-01 00:00:00' )
        
        , PARTITION p2015_01 VALUES LESS THAN ( '2015-02-01 00:00:00' )
        , PARTITION p2015_02 VALUES LESS THAN ( '2015-03-01 00:00:00' )
        , PARTITION p2015_03 VALUES LESS THAN ( '2015-04-01 00:00:00' )
        , PARTITION p2015_04 VALUES LESS THAN ( '2015-05-01 00:00:00' )
        , PARTITION p2015_05 VALUES LESS THAN ( '2015-06-01 00:00:00' )
        , PARTITION p2015_06 VALUES LESS THAN ( '2015-07-01 00:00:00' )
        , PARTITION p2015_07 VALUES LESS THAN ( '2015-08-01 00:00:00' )
        , PARTITION p2015_08 VALUES LESS THAN ( '2015-09-01 00:00:00' )
        , PARTITION p2015_09 VALUES LESS THAN ( '2015-10-01 00:00:00' )
        , PARTITION p2015_10 VALUES LESS THAN ( '2015-11-01 00:00:00' )
        , PARTITION p2015_11 VALUES LESS THAN ( '2015-12-01 00:00:00' )
        , PARTITION p2015_12 VALUES LESS THAN ( '2016-01-01 00:00:00' )
        
        , PARTITION p2016_01 VALUES LESS THAN ( '2016-02-01 00:00:00' )
        , PARTITION p2016_02 VALUES LESS THAN ( '2016-03-01 00:00:00' )
        , PARTITION p2016_03 VALUES LESS THAN ( '2016-04-01 00:00:00' )
        , PARTITION p2016_04 VALUES LESS THAN ( '2016-05-01 00:00:00' )
        , PARTITION p2016_05 VALUES LESS THAN ( '2016-06-01 00:00:00' )
        , PARTITION p2016_06 VALUES LESS THAN ( '2016-07-01 00:00:00' )
        , PARTITION p2016_07 VALUES LESS THAN ( '2016-08-01 00:00:00' )
        , PARTITION p2016_08 VALUES LESS THAN ( '2016-09-01 00:00:00' )
        , PARTITION p2016_09 VALUES LESS THAN ( '2016-10-01 00:00:00' )
        , PARTITION p2016_10 VALUES LESS THAN ( '2016-11-01 00:00:00' )
        , PARTITION p2016_11 VALUES LESS THAN ( '2016-12-01 00:00:00' )
        , PARTITION p2016_12 VALUES LESS THAN ( '2017-01-01 00:00:00' )
        
        , PARTITION p2017_01 VALUES LESS THAN ( '2017-02-01 00:00:00' )
        , PARTITION p2017_02 VALUES LESS THAN ( '2017-03-01 00:00:00' )
        , PARTITION p2017_03 VALUES LESS THAN ( '2017-04-01 00:00:00' )
        , PARTITION p2017_04 VALUES LESS THAN ( '2017-05-01 00:00:00' )
        , PARTITION p2017_05 VALUES LESS THAN ( '2017-06-01 00:00:00' )
        , PARTITION p2017_06 VALUES LESS THAN ( '2017-07-01 00:00:00' )
        , PARTITION p2017_07 VALUES LESS THAN ( '2017-08-01 00:00:00' )
        , PARTITION p2017_08 VALUES LESS THAN ( '2017-09-01 00:00:00' )
        , PARTITION p2017_09 VALUES LESS THAN ( '2017-10-01 00:00:00' )
        , PARTITION p2017_10 VALUES LESS THAN ( '2017-11-01 00:00:00' )
        , PARTITION p2017_11 VALUES LESS THAN ( '2017-12-01 00:00:00' )
        , PARTITION p2017_12 VALUES LESS THAN ( '2018-01-01 00:00:00' )
        
        , PARTITION p2018_01 VALUES LESS THAN ( '2018-02-01 00:00:00' )
        , PARTITION p2018_02 VALUES LESS THAN ( '2018-03-01 00:00:00' )
        , PARTITION p2018_03 VALUES LESS THAN ( '2018-04-01 00:00:00' )
        , PARTITION p2018_04 VALUES LESS THAN ( '2018-05-01 00:00:00' )
        , PARTITION p2018_05 VALUES LESS THAN ( '2018-06-01 00:00:00' )
        , PARTITION p2018_06 VALUES LESS THAN ( '2018-07-01 00:00:00' )
        , PARTITION p2018_07 VALUES LESS THAN ( '2018-08-01 00:00:00' )
        , PARTITION p2018_08 VALUES LESS THAN ( '2018-09-01 00:00:00' )
        , PARTITION p2018_09 VALUES LESS THAN ( '2018-10-01 00:00:00' )
        , PARTITION p2018_10 VALUES LESS THAN ( '2018-11-01 00:00:00' )
        , PARTITION p2018_11 VALUES LESS THAN ( '2018-12-01 00:00:00' )
        , PARTITION p2018_12 VALUES LESS THAN ( '2019-01-01 00:00:00' )
        
        , PARTITION p2019_01 VALUES LESS THAN ( '2019-02-01 00:00:00' )
        , PARTITION p2019_02 VALUES LESS THAN ( '2019-03-01 00:00:00' )
        , PARTITION p2019_03 VALUES LESS THAN ( '2019-04-01 00:00:00' )
        , PARTITION p2019_04 VALUES LESS THAN ( '2019-05-01 00:00:00' )
        , PARTITION p2019_05 VALUES LESS THAN ( '2019-06-01 00:00:00' )
        , PARTITION p2019_06 VALUES LESS THAN ( '2019-07-01 00:00:00' )
        , PARTITION p2019_07 VALUES LESS THAN ( '2019-08-01 00:00:00' )
        , PARTITION p2019_08 VALUES LESS THAN ( '2019-09-01 00:00:00' )
        , PARTITION p2019_09 VALUES LESS THAN ( '2019-10-01 00:00:00' )
        , PARTITION p2019_10 VALUES LESS THAN ( '2019-11-01 00:00:00' )
        , PARTITION p2019_11 VALUES LESS THAN ( '2019-12-01 00:00:00' )
        , PARTITION p2019_12 VALUES LESS THAN ( '2020-01-01 00:00:00' )
        
        , PARTITION p2020_01 VALUES LESS THAN ( '2020-02-01 00:00:00' )
        , PARTITION p2020_02 VALUES LESS THAN ( '2020-03-01 00:00:00' )
        , PARTITION p2020_03 VALUES LESS THAN ( '2020-04-01 00:00:00' )
        , PARTITION p2020_04 VALUES LESS THAN ( '2020-05-01 00:00:00' )
        , PARTITION p2020_05 VALUES LESS THAN ( '2020-06-01 00:00:00' )
        , PARTITION p2020_06 VALUES LESS THAN ( '2020-07-01 00:00:00' )
        , PARTITION p2020_07 VALUES LESS THAN ( '2020-08-01 00:00:00' )
        , PARTITION p2020_08 VALUES LESS THAN ( '2020-09-01 00:00:00' )
        , PARTITION p2020_09 VALUES LESS THAN ( '2020-10-01 00:00:00' )
        , PARTITION p2020_10 VALUES LESS THAN ( '2020-11-01 00:00:00' )
        , PARTITION p2020_11 VALUES LESS THAN ( '2020-12-01 00:00:00' )
        , PARTITION p2020_12 VALUES LESS THAN ( '2021-01-01 00:00:00' )
        
        , PARTITION p2021_01 VALUES LESS THAN ( '2021-02-01 00:00:00' )
        , PARTITION p2021_02 VALUES LESS THAN ( '2021-03-01 00:00:00' )
        , PARTITION p2021_03 VALUES LESS THAN ( '2021-04-01 00:00:00' )
        , PARTITION p2021_04 VALUES LESS THAN ( '2021-05-01 00:00:00' )
        , PARTITION p2021_05 VALUES LESS THAN ( '2021-06-01 00:00:00' )
        , PARTITION p2021_06 VALUES LESS THAN ( '2021-07-01 00:00:00' )
        , PARTITION p2021_07 VALUES LESS THAN ( '2021-08-01 00:00:00' )
        , PARTITION p2021_08 VALUES LESS THAN ( '2021-09-01 00:00:00' )
        , PARTITION p2021_09 VALUES LESS THAN ( '2021-10-01 00:00:00' )
        , PARTITION p2021_10 VALUES LESS THAN ( '2021-11-01 00:00:00' )
        , PARTITION p2021_11 VALUES LESS THAN ( '2021-12-01 00:00:00' )
        , PARTITION p2021_12 VALUES LESS THAN ( '2022-01-01 00:00:00' )
    )
    ;
    
    -- ALTER TABLE `stat_event` ADD UNIQUE `oid` (`oid`);
    ALTER TABLE `stat_event` ADD INDEX `shop_object_id` (`shop_object_id`);
    ALTER TABLE `stat_event` ADD INDEX `event_type` (`event_type`);
    ALTER TABLE `stat_event` ADD INDEX `time_bot` (`event_time`, `bot`);
    ALTER TABLE `stat_event` ADD INDEX `time_bot_type` (`event_time`, `bot`, `event_type`);
    ALTER TABLE `stat_event` ADD INDEX `shop_object_id` (`shop_object_id`);  
    
    Ответ написан
    Комментировать
  • Варианты организации корпоративной почты для малого предприятия

    KEKSOV
    @KEKSOV
    Gmail

    В gmail можно делать вложенные ярлыки и перемещать туда письма при помощи фильтров
    Создание вложенных ярлыков. Чтобы установить иерархию, разместите вложенный ярлык под более общим. Например, у вас есть ярлык для обозначения писем, связанных с отпусками, а вы хотите использовать еще один, который будет относиться к поездке в Болгарию. В этом случае создайте ярлык «Болгария» внутри ярлыка «Отпуск». Для этого нужно добавить наклонную черту к названию основного ярлыка. Вложенный ярлык будет таким: «Отпуск/Болгария».

    Чтобы систематизировать сообщения, можно настроить автоматическое присвоение ярлыков поступающим письмам. Они будут удаляться из папки «Входящие», но вы сможете просмотреть их позже. Для этого во время создания фильтра выберите Пропустить входящие (архивировать) и Применить ярлык:.


    Outlook
    Что бы первый пользователь не скачивал всю почту нужно перейти на использование протокола IMAP. Почту лучше пропускать через gmail для борьбы со спамом и для автоматического создания резервной копии переписки компании

    Свой сервер
    Из нескольких вариантов я остановился на hmail server Очень легко интегрируется с антиспамом и антивирусом. При желании можно прикнрутить веб интерфейс, больше других мне нравится roundcube

    Из личного опыта могу сказать, что в Вашей ситуации gmail наиболее предпочтительный вариант. Не забудьте, что Вы можете использовать свой домен для работы с gmail
    Ответ написан
  • Gigabyte ga-h55m-ud2h + 16Gb памяти стартует, но виснет при загрузке windows x64?

    KEKSOV
    @KEKSOV
    Была аналогичная ситуация, оказалось, что глючила мать. Вычислил путем взаимной последовательной замене всех компонентов с другой матерью, благо было два одинаковых комплекта. В СЦ подтвердили это и заменили по гарантии.
    Ответ написан
    Комментировать
  • Лучший ЯП для парсинга веб-сайтов

    KEKSOV
    @KEKSOV
    Появилась хорошая хабро статья по этой теме
    Ответ написан
    Комментировать
  • Веб-морда для batch скриптов?

    KEKSOV
    @KEKSOV
    Ну, ВЕБМОРДА так вебморда… извольте:

    <?php
    set_time_limit(0);
    
    $bat = $_REQUEST[ 'mybat' ];
    $allowedScripts = array( 'foo.bat', 'moo.bat', goo.bat' );
    if ( !isset( $allowedScripts[ $bat ] ) ) {
        echo 'Go away you dirty хацкер!'
        exit;
    }
    
    echo '<xmp>';
    passthru( $bat );
    echo '</xmp>';
    ?>
    


    И страничка соответствующая:
    <html>
    <body>
    <a href="bat.php?foo.bat">foo.bat</a><br/>
    <a href="bat.php?boo.bat">boo.bat</a><br/>
    <a href="bat.php?goo.bat">goo.bat</a><br/>
    </body>
    </html>
    


    Сер желает еще что-нибудь — казино, блекджек, массажистки? ;)
    Ответ написан
  • Как сделать свой элемент управления и взаимодействовать с ним?

    KEKSOV
    @KEKSOV
    Боюсь, что в рамках короткого ответа этого не описать. В приведенной Вами задачке соединяются вместе несколько технологий, каждая из которых — свой огромный мир. В какой пропорции их соединить зависит от очень большого числа факторов. Перечислю в порядке возрастания сложности эти технологии со ссылками на учебные материалы:

    1. HTML
    2. CSS3
    3. HTML DOM
    4. JavaScript
    5. Писать многие вещи с нуля на голом JS интересно будет только для целей самообразования. В большинстве случаев, можно и нужно воспользоваться готовыми фреймворками. Один из таких популярных пакетов — JQuery

    Пожалуй, вот тут сделали хороший пример, демонстрирующий некоторые приемы объединения всех этих технологий в рабочий элемент управления.

    Альтернативный вариант, это взять что-нибудь готовое и допилить под свои нужды. Полезно покопаться в чужом коде и подсмотреть как оно там работает. Отличный кандидат для вскрытия по Вашей задачке это Raphaël
    Ответ написан
    3 комментария
  • кем бы вы хотели быть?

    KEKSOV
    @KEKSOV
    Чем больше ЯП сумеете изучить, тем лучше. Ассемблер это очень правильно и хорошо, но в 99% случаев это тупиковая ветвь с точки зрения основной деятельности. Я бы уделил больше внимание так сказать текущему мейнстриму — C/С++, JavaScript, Erlang, SQL (MySQL или PostgreSQL), NoSQL. Обязательно познакомьтесь с UNIX, рекомендую два-три раза «собрать-разобрать» свой дистрибутив по инструкциям LinuxFromScratch. Соберите из исходников и настройте Apach, Nginx, MySQL на разных платформах. Чем больше технологий освоите, тем лучше.

    PS. И постоянно читайте на английском языке — без этого никуда.
    Ответ написан
    2 комментария
  • Веб-морда для batch скриптов?

    KEKSOV
    @KEKSOV
    Есть такая штука — ssh. Это как RDP, только в текстовом режиме. Среди прочих плюшек, эта система позволяет осуществлять удаленный запуск программ. Выглядит это так — ssh root@server_ip c:\bin\script.bat и Вы получите в свою консоль stdout script.bat, которая физически запускается на сервере. Можно настроить все так, чтобы не вводить каждый раз пароли. Одним словом, если Вы занимаетесь администрированием, то ssh ваш первейших друг и товарищ для автоматизации ваших рутинных действий.

    Под Винду есть замечательный порт UNIX среды Cygwin при установке укажите sshd и следуйте вот этот краткой инструкции. На клиентах можно обойтись plink из набора PuTTY Но рекомендую поставить тот же Cygwin в качестве консоли, будет удобнее.
    Ответ написан
    5 комментариев
  • Ищу мини-ПК для коптера

    KEKSOV
    @KEKSOV
    На всякий случай, вдруг, эта хабро-статья и эта прошли мимо Вас. Похоже, что чудеса иногда случаются.
    Ответ написан
    1 комментарий