• Клонирование объекта в Javascript

    Метод Object.assign() используется для копирования значений всех собственных перечисляемых свойств из одного или более исходных объектов в целевой объект. После копирования он возвращает целевой объект.

    Метод Object.assign() копирует из исходных объектов в целевой объект только перечисляемые и собственные свойства. Он использует внутренний метод [[Get]]на исходных объектах и внутренний метод [[Set]] на целевом объекте, так что он также вызывает геттеры и сеттеры. Именно поэтому он присваивает свойства вместо простого копирования или определения новых свойств. Это поведение может сделать метод непригодным для вливания новых свойств в прототип, если вливаемые исходные объекты содержат геттеры. Вместо него для копирования в прототипы определений свойств, включая признак их перечисляемости, следует использовать методы Object.getOwnPropertyDescriptor()и Object.defineProperty().

    Копируются свойства типов как String, так и Symbol.

    В случае возникновения ошибки, например, когда свойство является незаписываемым, возбуждается исключение TypeError, а целевой объект targetостаётся неизменным.

    Обратите внимание, что метод Object.assign() не выкидывает исключения, если в качестве исходных значений выступают null или undefined.


    Пример: клонирование объекта

    var obj = { a: 1 };
    var copy = Object.assign({}, obj);
    console.log(copy); // { a: 1 }

    Пример: слияние объектов

    var o1 = { a: 1 };
    var o2 = { b: 2 };
    var o3 = { c: 3 };
    var obj = Object.assign(o1, o2, o3);
    console.log(obj); // { a: 1, b: 2, c: 3 }
    console.log(o1); // { a: 1, b: 2, c: 3 }, изменился и сам целевой объект.

    Больше информации тут



  • Из старого: Схема организационно-технического построения системы оповещения на базе КТС П-166

    Схема была сделана для организации, занимающейся подготовкой пожарных и работников МЧС в качестве одного из интерактивных учебных пособий.

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

    Схема разработана на Adobe Flash. Интерфейс очень простой. Поскольку размер окна, где она будет отображаться, был слишком мал, а схемк должна быть читаемой, было решено сделать что-то вроде поэкранного скроллинга. Была добавлена анимация и всплывающие подсказки при наведении на узлы схемы.

    Схема не доделана, нарушен порядок слоёв и присутствуют еще несколько "артефактов". Не пригодилась, поэтому теперь лежит в архиве.



  • PHP + cURL. Парсинг сайта с формой авторизации. Шаг 2

    Итак, нам удалось подключиться к сайту, получать от него COOKIE и отдавать их обратно вместе с другими заголовками, создавая видимость работы обычного браузера. Но как мы узнаем, прошла ли авторизация? Самым простым способом мне показалось найти в полученном коде код кнопки "Logout", которая присутствует на странице, если пользователь успешно авторизовался.

    function isAuth( $data ) {
      $flag = false;
      preg_match_all( ′/<button[^>]+?[^>]+>(.*?)</button>/i′, $data, $m );
      foreach( $m[ 1 ] as $a ) {
        if ( $a == ′Logout′ ) {
          $flag = true;
        }
      }
      return $flag;
    }
    if ( isAuth( $data ) ) {
      echo ′Авторизованы!′;
    } else {
      echo ′Не авторизованы!′;
    }



  • PHP + cURL. Парсинг сайта с формой авторизации. Шаг 1

    Бывают ситуации, когда надо получить контент множества страниц сайта-каталога. Но, как назло, каталог виден только тем пользователям, которые прошли процедуру авторизации. Как же быть?  Использовать PHP+cURL.

    Сначала смотрим код формы авторизации и ищем названия переменных, которые передаются скрипку авторизации, и url самого скрипта:

    <form id="loginForm" action="/SignonMain.aspx" method="post">
      <div>
        <div class="login-module-label float-left">LOGIN</div>
        <div class="float-left login-label-margintop">Username *</div>
        <div class="float-left"><input class="login-module-inputs" type="text" id="menuUserName" name="menuUserName"></div>
        <div class="float-left login-label-margintop">Password *</div>
        <div class="float-left"><input class="login-module-inputs" type="password" id="menuPassword" name="menuPassword"></div>
        <button type="button" class="button ladda-button npa-btn" id="bMainMenuLogin" data-style="expand-right">
          <span class="ladda-label">LOGIN</span>
        </button>
      </div>
    </form>

    Ага, имена переменных - "menuUserName" и "menuPassword", путь к скрипту - "/SignonMain.aspx". 

     function connect() {
      $ch = curl_init();
      curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0" );
      curl_setopt( $ch, CURLOPT_URL, $site_url . ′/SignonMain.aspx′ ); // отправляем на
      curl_setopt( $ch, CURLOPT_HEADER, 0 ); // пустые заголовки
      curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); // возвратить то что вернул сервер
      curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 ); // следовать за редиректами
      curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 30 );// таймаут
      curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, 0 );// просто отключаем проверку сертификата
      curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, 0 ); // Не проверять Host SSL сертификата
      curl_setopt( $ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . ′/cookie.txt′ ); // сохранять куки в файл
      curl_setopt( $ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . ′/cookie.txt′ );
      curl_setopt( $ch, CURLOPT_POST, 1 ); // использовать данные в post
      curl_setopt( $ch, CURLOPT_POSTFIELDS, array(
        ′menuUserName′ => $username,
        ′menuPassword′ => $password
      ) );
      $data = curl_exec( $ch );
      return $ch;
    }



  • Редизайн сайта

    Наконец-то у меня дошли руки и до своего собственного сайта. А то, как говорится, "сапожник без сапог". Смешно, конечно, но так оно и было. Переделал всю структуру, сделал сайт в форме блога. Портфолио вынес отдельным разделом, а новостная лента теперь - непосредственно блог.

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

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

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



  • Мои сайты образца 2001 года

    Ковыряясь в веб-архиве (https://web.archive.org) по рабочей необходимости, внезапно решил проверить: а не сохранились ли в нем сайты, которые я делал на заре своей веб-деятельности? Самые старые сайты, я, к сожалению, не нашел, видимо, в то время "машина времени" еще не работала. Но парочку утерянных проектов все-таки удалось выцепить из цепких лап временного краулера ). Было принято решение возродить их к жизни.

    Один из этих сайтов, располагающийся ранее на домене http://movies.samara.ru, представлял из себя ни что иное, как банальный варезник с кучей пиратских цифровых версий фильмов. В начале 2000-х такие сайты были довольно актуальны, так как видеокассеты из обихода еще не вышли, а DVD - не совсем вошли. Перспектива смотреть фильмы на экране компьютера была очень заманчивой. Как раз стали входить в моду видеокодеки типа DivX, Xvid и т.п.

    Главной проблемой распространения фильмов через интернет в то время были маленькие скорости обмена информацией почти у всех, имеющих доступ в интернет. Как правило, это был модем на 33 или 56Кбит/с, до которых все равно не дотягивал по причине несовершенства телефонных сетей. 

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

    • Можно было попробовать сжать качество видео и звука, что превращало фильм в набор мутных слайдов и шипящим звукорядом, но зато уменьшало его объем в разы.
    • Самый распространенный способ - воспользоваться одним их бесплатных онлайн-хранилищ. Но, если учитывать, что места они предоставляли очень немного, в районе 5-10 мегабайт, приходилось делать 15-20 учетных записей для каждого фильма, разбивать видео на куски, архивируя с паролем, в котором хорошим тоном считалось указывать адрес своего варез-ресурса, и закачивать в хранилище. В итоге пользователю предлагалось скачать кучу маленьких файлов, потом собрать их в один файл в архиваторе, не забыв правильно ввести пароль. Если один из файлов был поврежден - сами понимаете, получалась большая печалька.
    • Были целые форумы, посвященные поиску публичных и не очень FTP-аккаунтов, на которые можно было закачать фильм. Жили такие аккаунты недолго, админы серверов, с которых в разы возрастал входящий и исходящий трафик (кстати, местами очень даже не бесплатный), быстренько прикрывали лавочку, оставляя десятки кинолюбителей с носом.

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

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

    Когда-то я был ярым фанатом сериала "Секретные материалы". Собирал книжки, видеокассеты, любую информацию о героях данного произведения Криса Картера. С появлением интернета стал собирать оцифрованные копии эпизодов, саундтреки сериала и фильмов, и в результате появился сайт, который я назвал "X-Files Forever". Там я постарался собрать информацию обо всем, что имелось у меня в наличии по теме "Секреток", и разбавлял все это новостями о паранормальном и непознанном, которые находил на разных тематических ресурсах. На сайте действовал небольшой интернет-магазинчик, где можно было купить сборник эпизодов, порой даже с моим переводом и дубляжом (да, парочку эпизодов я перевел сам, в сети было сложно достать русскоязычный перевод сериала).

    Пока я восстановил только главную страничку. Она лежит по адресу http://blackrid.ru/xfiles. Думаю, как будет время, восстановлю другие страницы. Это - гид по эпизодам, биографии персонажей сериала и актеров, которые их сыграли, сборники музыки, фотографии. Магазин, по понятным причинам, оживлять не буду ) В общем, посмотрим, как дальше пойдет дело.







  • Фриланс для программистов: подборка лучших сайтов

    Взято с сайта https://proglib.io - https://proglib.io/p/freelance/

    Многие ищут фриланс для программистов, но далеко не все знают, где искать. Мы составили список ресурсов, которые вас заинтересуют.

    Разберемся, что представляет из себя фриланс для программистов, и как быстро освоиться на приведенных ниже сайтах.

    1. FL

    Говорят, что фрилансеры здесь варятся в собственном соку. И это отчасти правда, ведь те, кто успел запрыгнуть в ТОП с самого начала работы сайта, прочно там засели. У вас, естественно, не будет столько заказов, сколько у «избранных», что, тем не менее, не означает отсутствие работы у «простых смертных».

    Для фрилансеров существует множество категорий, так что каждый найдет свою специализацию. Другое дело, что FL с давних пор платный. Если изначально лишь некоторые заказчики делали заказы доступными для исполнителей с PRO-аккаунтами, то теперь, чтобы оставить комментарий под любым заказом, нужно этот самый аккаунт иметь. А это ни много ни мало почти 1700 руб./мес. И ведь не факт, что отобьются…

    Куда комфортнее себя чувствуют работодатели: можно брать PRO, а можно и не брать. Ответов по проекту в любом случае будет море. Да и дешевле обходятся вебмастерам все эти PRO-плюшки.

    Несправедливо, да. Но привыкайте: золотое правило фриланса – заказчик всегда прав.

    Остальное - под катом )



  • PHP - как определить браузер пользователя?

    Нашел хорошее решение. Наряду с $_SERVER[ "USER_AGENT" ] можно использовать функцию get_browser().
    Чтобы она заработала, понадобится файл browscap.ini. Скачать его можно здесь - http://browscap.org/.

    PHP.ini:

    [browscap]
    browscap = "usr/local/php5/ext/browscap.ini" ; тут ваш путь

    Код PHP:

    echo $_SERVER[ "HTTP_USER_AGENT" ] . " ";
    $browser = get_browser( null, true );
    print_r( $browser );

    Вот, что получим в итоге:

    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.22 Safari/537.36
    Array
    (
     [browser_name_regex] =>^mozilla/5.0 (.*windows nt 6.1.*) applewebkit/.* (khtml, like gecko) chrome/48..*safari/.*$
     [browser_name_pattern] => Mozilla/5.0 (*Windows NT 6.1*) AppleWebKit/* (KHTML, like Gecko) Chrome/48.*Safari/*
     [parent] => Chrome 48.0
     [platform] => Win7
     [comment] => Chrome 48.0
     [browser] => Chrome
     [browser_maker] => Google Inc
     [version] => 48.0
     [majorver] => 48
     [device_type] => Desktop
     [device_pointing_method] => mouse
     [minorver] => 0
     [ismobiledevice] =>
     [istablet] =>
     [crawler] =>
    )
    

    Вот и все. Удачи!



Загрузка...

Войти на сайт

Регистрация