• Какой стек технологий лучше выбрать для гибридного приложения?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Интерфейсы же (API)! А там хоть на fiddler-е запросы/ответы пишите.
    Ответ написан
    Комментировать
  • ???????????????????????????

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Года 4 назад купил для работы дома игровой ASUS G75V (Core i7, HDD, 16 ГБ, 17-дюймовый экран). До сих пор пользуюсь им. Хорошая "машина".
    Ответ написан
    Комментировать
  • Chrome devtools. Была возможность запустить отладчик с точки входа в функцию. Не могу найти или отключено?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Нашёл в чём прикол:
    Эта особенность не работает, если я правлю код, который не загружен как .js, а внедрён на страницу .html. Если файл с кодом в отдельном .js-файле, то можно вносить изменения на лету и отладчик отматывается назад.

    c827c2dd8b114922927c8d727b96a502.gif

    Настроение улучшилось!
    Ответ написан
    1 комментарий
  • Пропадают свойства объекта, как такое возможно?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    А если наоборот сделать вывод?
    rxSubject.subscribe({
                next: (state) => {
                    console.log(JSON.stringify(state));
                    console.log(state);
                },
            });
    Ответ написан
  • Это не ВП чистый PHP. Как вывести дату текущей записи?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Судя по документации MySQL для вашего случая - никак:

    dev.mysql.com/doc/refman/5.5/en/create-table.html
    default value must be a constant


    f8d7fa93931a4f2390825291a003a13e.png
    Ответ написан
    Комментировать
  • Как компьютер понимает нули и еденицы?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    >> как вообще электросхема понимает символы(цифры) и преобразует их в буквы
    Я не настоящий сварщик, но буквы только у вас в голове. Всё остальное - результат передачи электрических сигналов из одного устройства в другое. Устройство, например, дисплей, не знает, что он показывает буквы, а принтер не знает, что он печатает буквы. Это просто светящиеся или отражённые точки или пылинки.

    >> Как электричество может вычислять
    Когда я ещё не знал, что такое компьютер, но слышал, что они есть, то думал, что программирование похоже на калейдоскоп. Глядишь в волшебную "трубочку", поворачиваешь её и смотришь на результат. Я даже представлял себе, что этот процесс "колейдоскопирование" программы можно делать просто включая/выключая кнопку питания, т.к. битики в памяти должны оказываться в случайных состояниях. Типа, это и есть программа. С тех пор прошло лет 35 из которых я больше 20 лет занимаюсь программированием/администрированием. Но чёрт возьми. Я ни хрена не понимаю, как электричество "считает" ))) Чтобы заставить электричество "считать" работает огромное количество учёных и инженеров в разных областях.
    Ответ написан
    Комментировать
  • Можно ли уведомить пользователя об ошибках в загрузке частей страницы?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Решение не совсем простое. Но меня утраивает. Надеюсь, что может помочь и кому-то ещё.

    <script type="text/javascript">
        // http://javascript.ru/blog/ilya-kantor/zagruzka-dannyh-cherez-script-s-otlovom-oshibok
        // https://learn.javascript.ru/onload-onerror
    
        // Ловим ошибки загрузки ресурсов:
        // Массив в который будут записываться результаты:
        var arr_loaded_resources = [];
    
        // Ловит ошибки и выводит их в приложение:
        function func_error_out(err){
            if( err!=null){
                console.warn( JSON.stringify(err));
                arr_loaded_resources.push( err );
    
                var app = document.getElementById("id_slip_application");
                var arr_error = [];
                for( var i=0; i<=arr_loaded_resources.length-1; i++){
                    arr_loaded_resources_i = arr_loaded_resources[i];
                    if( arr_loaded_resources_i.error==true ){
                        arr_error.push( JSON.stringify( arr_loaded_resources_i ) );
                    }
                }
                app.innerHTML = "<br/><br/><a href='javascript:location.reload(true);'>Перезагрузите</a> страницу."
                    + "<hr/><br/>Ошибка загрузки компонентов приложения: <br/><br/>"
                    + arr_error.join("<br/>")
                    ;
            }
        }
    
        var func_onload = function(obj) {
            //var obj = this;
            var err = null;
            if( obj.src ) {
                err = {"path": obj.src, "error": false};
            } else if( obj.href ) {
                err = {"path": obj.href, "error": false};
            }
            if( err!=null){
                console.warn( JSON.stringify(err));
                arr_loaded_resources.push( err );
            }
        };
    
        var func_onerror = function(obj) {
            //var obj = this;
            var err = null;
            if( obj.src ) {
                err = {"path": obj.src, "error": true};
            } else if( obj.href ) {
                err = {"path": obj.href, "error": true};
            }
            func_error_out(err);
        };
    
        // Проверка для IE, но для новых версий, кажется, не актуально. Пока не использую.
        var func_onreadystatechange = function() {
            var self = this;
            if (this.readyState == "complete" || this.readyState == "loaded") {
                setTimeout(function() {
                    self.onload()
                }, 0); // сохранить "this" для onload
            }
        };
    
        // Общий обработчик ошибок для скриптов:
        //      https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror
        window.onerror = function(messageOrEvent, source, lineno, colno, error){
            var err = null;
            // Такая ошибка иногда возникает в протоколе ssl, когда загружается только часть файла. Остальное обрезается и браузер генерирует синтаксическую ошибку.
            //if( error.stack=="SyntaxError: Unexpected end of input"){
                err = {messageOrEvent: messageOrEvent, source: source, lineno:lineno, colno:colno, _error:error, "error": true};
                console.warn("Ошибка в загрузке...")
            //}
            func_error_out(err);
        }
    </script>
    
    <script type="text/javascript" onload="func_onload(this)" onerror="func_onerror(this)" src="/jquery-1.9.1.min.js" onload="func_onload(this)" onerror="func_onerror(this)"></script>
    <!--
    <script type="text/javascript" onload="func_onload(this)" onerror="func_onerror(this)" src="js/err.js" onload="func_onload(this)" onerror="func_onerror(this)"></script>
    <script type="text/javascript" onload="func_onload(this)" onerror="func_onerror(this)" src="/jquery-1.9.1.err.min.js" onload="func_onload(this)" onerror="func_onerror(this)"></script>
    <script type="text/javascript" src="js/jquery-ui-1.10.2.custom.min.js"></script>
    <link type="text/css" rel="stylesheet" href="css/MonthPicker.min.css"/>
    <link type="text/css" rel="stylesheet" href="css/themes/smoothness/jquery-ui.css"/>
    <link type="text/css" rel="stylesheet" href="css/app.css"/>
    <script type="text/javascript" src="js/MonthPicker.min.js"></script>
    -->
    
    <script type="text/javascript" onload="func_onload(this)" onerror="func_onerror(this)" src="bower_components/jquery-ui/jquery-ui.min.js"></script>
    <script type="text/javascript" onload="func_onload(this)" onerror="func_onerror(this)" src="bower_components/jquery-ui-month-picker/src/MonthPicker.js"></script>
    <script type="text/javascript" onload="func_onload(this)" onerror="func_onerror(this)" src="bower_components/blockUI/jquery.blockUI.js"></script>
    <script type="text/javascript" onload="func_onload(this)" onerror="func_onerror(this)" src="bower_components/js-cookie/src/js.cookie.js"></script>
    
    <link type="text/css" rel="stylesheet" onload="func_onload(this)" onerror="func_onerror(this)" href="bower_components/jquery-ui-month-picker/src/MonthPicker.css"/>
    <link type="text/css" rel="stylesheet" onload="func_onload(this)" onerror="func_onerror(this)" href="bower_components/jquery-ui/themes/smoothness/jquery-ui.css"/>
    <link type="text/css" rel="stylesheet" onload="func_onload(this)" onerror="func_onerror(this)" href="bower_components/bootstrap/dist/css/bootstrap.css"/>
    <link type="text/css" rel="stylesheet" onload="func_onload(this)" onerror="func_onerror(this)" href="bower_components/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css"/>
    <link type="text/css" rel="stylesheet" onload="func_onload(this)" onerror="func_onerror(this)" href="bower_components/font-awesome/css/font-awesome.min.css">
    <link type="text/css" rel="stylesheet" onload="func_onload(this)" onerror="func_onerror(this)" href="css/app.css"/>


    Суть в следующем. В каждый компонент, который подгружается на страницу добавляем следующий код:
    onload="func_onload(this)" onerror="func_onerror(this)"

    Теперь все объекты прикрыты обработчиками ошибок при загрузке. В случае, если ресурс не загрузился, то пользователь увидит сообщение:

    665d3d7230664057899a45fac7493bf2.png

    На рисунке видно, что во время загрузки не произошла загрузка angular.js, поэтому пользователю предлагается перезагрузить страницу. Аналогичные сообщения наблюдаются при невозможности загрузки css или когда файл js содержит синтаксические ошибки:

    Синтаксическая ошибка:

    add74ff6b37f4d4a8015be22f09a73ca.png


    Ошибка загрузки css:

    6183a3476f9c4e6fa8993c879327b3c7.png


    P.S.
    Для справки. Аналогичные обработчики можно сделать и для загрузки изображений. см.: https://learn.javascript.ru/onload-onerror
    Ответ написан
    Комментировать
  • Как понять высшую математику?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    >> ибо идет обучение туго
    Если что-то идёт туго, значит вы неправильно это применяете. Если мозг туго воспринимает объяснение, то проблема как правило не в мозге. Начните с научно-популярных статей по теме, вдохновляйтесь, анализируйте, размышляйте. Не бойтесь ошибаться. Open your mind. Расслабьтесь. )))
    Ответ написан
    Комментировать
  • Как создать новый массив из существующего?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Просто цикл c шагом 2. Ничего другого и придумывать не надо.
    Ответ написан
  • Зачем мне все-таки maven?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    У меня в нём настроено несколько конфигураций - запуск локальной разработки (cargo), выгрузка на тестовый сервер, выгрузка на production. Как правильно заметил Толстый Лорри - для простых приложений он слишком сложен. Но становится нужен, когда вы хотите интегрировать разработку в какие-нибудь корпоративные процессы.
    Ответ написан
    Комментировать
  • [Решено] Shortcut Visual Studio 2015 выделить код в блоке между фигурными скобками когда курсор в произвольном месте блока?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Нашёл extension для 2015, который расширяет выделение от текущего места в коде сначала до слова, потом до строки, потом расширяет выделение на родительские блоки: HotCommandsforVisualStudio

    3b389c598f594cb889d6f7c916dfff98.gif
    Ответ написан
    Комментировать
  • Проблемы с чтением (на глаз) массивов и последующие проблемы?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Чтобы лучше проанализировать "на глаз" я бы предложил:
    1. перевести всё это в JSON и посмотреть где-нибудь в нормальном редакторе.
    2. Можно использовать xdebug/var_dump, но это на любителя.
    Ответ написан
    Комментировать
  • Как запустить скрыто .exe файл через батник?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Такое на подойдёт?
    stackoverflow.com/questions/23057448/open-program-...
    Start a program in Minimized window from batch file? : www.computerhope.com/forum/index.php?topic=63635.0
    Ответ написан
    Комментировать
  • Где можно найти разбор реальных проектов по языкам JavaScript/PHP,чтобы попрактиковаться в них?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Это вряд ли вам кто-то расскажет подробно. Одно могу сказать. Всё состоит из мелочей и каждую мелочь "что, зачем,почему" никто долго объяснять не будет. Нет одной технологии, которая может всё. Конечный продукт получается суммой технологий, но сколько от конкретной технологии вы возьмёте зависит только от вас.
    Да вот ещё. Все пишут примеры, как "правильно" делать, но никто не даст вам объяснения как не делать неправильно. Тут придётся самому поработать. И набивание шишек - обязательная составляющая ремесла. Поиск решения - итерационный процесс, требующий рефлексии и сосредоточенности.
    Ответ написан
    Комментировать
  • Как сделать переливающуюся SVG?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Я не занимаюсь svg, но вроде как блик иммитируется просто белой полупрозрачной полосой? Например:
    jsfiddle.net/yFthP
    b68d959c8605441dac97432492df3156.gif

    И вот вам ещё примеров: codinginparadise.org/projects/svgweb/samples/demo.html

    56fd03e71d644760816975d6ee1bf546.png
    Ответ написан
    Комментировать
  • Где взять практическое задание по xml?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Гляньте формат "Office Open XML" + docx4j. -> вот к чему может привести xml. Так что несколькими днями не отделаетесь. Можно и через год удивляться "а чё, так можно было?"
    Ответ написан
    3 комментария
  • Как реализовать подсвечивания отдельных частей карты\схемы при наведении на список?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    >> решение, которое поможет избежать как раз хардкодинга
    Координаты многоугольника, описывающего помещения, как вы думаете занести без хардкодинга ?
    Могу посоветовать воспользоваться leaflet-ом. Вот пример с подложкой-картинкой: leafletjs.com/examples/crs-simple/crs-simple.html. Поищите ещё примеров, есть очень интересные плагины для leaflet-а.
    Ответ написан
    Комментировать
  • Что такое ElasticSearch?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Знаете, я с вами соглашусь, что хорошую вводную по Elastic трудно найти. Пока сам не переварил доков и не набил шишек многие элементарные понятия оставались для меня неясными. Поэтому вот моя вводная: Elastic можно использовать как NoSQL БД, только надо быть внимательным, т.к. всё-таки его основная задача поиск, а не удовлетворение функций БД. Например, если вы не настроили хранение исходных данных, а только индексацию, то свои данные вы уже не извлечёте из него. НИКОГДА. Только отдельные выражения, удовлетворяющие условиям поиска. Всё, тупик. Так же нельзя повторно индексировать уже загнанные в него данные. Т.е. перед загрузкой данных надо грамотно настроить индексацию, т.к. перестроить индекс, как это делается в реляционной БД невозможно. Нужно придумать новую схему индексации и перезалить данные в Elastic. Именно поэтому основное использование Elastic - как дополнение к существующей БД из которой данные можно перезалить по одному или полностью в Elastic (можно, конечно сделать схему Elastic->Elastic, но тоже есть нюансы).
    Ещё пару слов про схему. Это ЛОЖЬ, что в Elastic нет схемы данных. Она как раз есть и ооочень жёсткая. Жёсткая до того, что однажды определив, вы не сможете её поменять. Изначально Elastic оказывает медвежью услугу, разрешая вам дополнять схему по-умолчанию, но когда вы разберётесь с этой темой, то можете обнаружить, что Elastic "понастроил" такого у себя внутри, что остаётся только охреневать и переделывать всё явно, отказавшись от его "услуг" по автоматическому добавлению полей в схему.
    Так же в Elastic очень непросто строить сложные запросы на поиск и агрегатные запросы. Совершенно неинтуитивно. Но если освоитесь, то будет вам счастье. )))
    Несмотря за такие "страшные" вещи - Elastic классная система и по производительности агрегатных запросов не уступает платной версии MSSQL в поиске в многопроцессорных системах (проверял на одинаковых аппаратных конфигурациях с 16 ядрами). Так что если вам хочется большую скорость в агрегатных запросах и главное - это бесплатность, то берите и осваивайте Elastic. Мощности и возможности у него огромные. Но... нужно потратить приличные усилия на изучение.
    Ответ написан
    1 комментарий
  • Режим работы php как модуль apache. Как обновить версию php?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    У меня прям вот сейчас похожая задача - нужно поднять версию php под старым порталом с php 5.4.45 до php 5.6.27 на Linux. Пересобираю из исходников.
    Ответ написан
    Комментировать
  • [Решено, Solved] Если linux-комп не в Active Directory, то он не считается компьютером домена?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Проблема решена.
    Вот небольшое расследование.

    Есть два сервера. test-0001/apache,php/Centos 7.2 (нормально аутентифицирует по kerberos) и test-0002/apache,php/OracleLinux 7.2 (сбой аутентификации kerberos).

    Анализ протокола обмена HTTP показал, что «почему-то» web-клиент (IE, FF, Chrome) как один отличают компьютер test-0002 от test-0001. Отличие состоит в том, что ключ аутентификации, которые web-клиент отправляет в качестве авторизации пользователя ооочень сильно отличается «размером»:
    Запрос к test-0002 (сбой аутентификации по Kerberos):
    96706c13d8894210bfe4d0fd2b2516e2.png080ede7e64b0434b9229c520d07af319.png

    Запрос к test-0001 (аутентификация Kerberos выполняется нормально):
    5825189ce16741359c1148fee30b70dd.pngb710650b34bf482d88f77adca35000ff.png

    Давайте всё-таки выясним, почему ключ от test-0002 короче test-0001 ??? Начну с того, что формат ключа - ASN.1 (если интересно, то гляньте https://ru.wikipedia.org/wiki/ASN.1 ). В инете есть просмотрщик этого формата:
    https://lapo.it/asn1js
    Анализ ключа в запросе от test-0002:
    1ceee5434ef44a08b17cee123e5ba515.png
    1. NEGOEX – насколько я понял именно этот формат обеспечивает «объединение» нескольких аутентификаторов одного и того же пользователя в разных протоколах. В данном ключе вложен только протокол NTLM
    2. Данные для протокола NTLM (который не поддерживается компонентом apache mod_auth_gssapi).

    Анализ ключа в запросе к test-0001:
    573bbcfea2e64351a1a27e4db461d303.png
    Как видим во втором ключе уже присутствует протокол Kerberos!!! Занятно! Т.е. проблема для test-0002 не на стороне сервера, раз клиент сразу не отдаёт ему ключ правильного формата!

    Хм. А давайте-ка посмотрим в журнал windows?
    c7d2f48555b348cdb239d1b40e36af8b.png

    0x7 KDC_ERR_S_PRINCIPAL_UNKNOWN
    0x19 KDC_ERR_PREAUTH_REQUIRED

    Опаньки! Это что такое??? Какая-то проблема с принципалом? И почему только с test-0002? (Записей, указывающих на другой компьютер, например, test-0001 не найдено). Получается, что браузер до ответа на запрос серверу уже что-то «подозревает», раз не отдаёт ему нужный ключ (ОЧЕНЬ БОЛЬШАЯ ПРОСЬБА: ЕСЛИ КТО-ТО ПОНИМАЕТ ПРОЦЕСС, КАК БРАУЗЕР ПРИНИМАЕТ РЕШЕНИЕ КАК СОЗДАТЬ КЛЮЧ ДЛЯ АУТЕНТИФИКАЦИИ - РАССКАЖИТЕ МНЕ НЕМНОГО ОБ ЭТОМ!!!).
    Если порыться в интернете, то вопросов по этой ошибке много (https://www.google.ru/search?q=KDC_ERR_S_PRINCIPAL...), но в основном они без ответа. Тупик? Ничего подобного! Давайте глянем в документацию Microsoft по поводу SPN: https://msdn.microsoft.com/en-us/library/ms677949%...
    b5334963f38a4f9ca87c087db77ed639.png
    Т.е. spn моего сервиса должен быть зарегистрирован только в одном аккаунте. ЗАПОМНИМ ЭТО!!! И вот ещё один интересный момент: https://msdn.microsoft.com/en-us/library/ms677601%...
    6545dfe4a1ad44b6acc6577a3163eeb3.png
    Тут написано, что SPN должен быть уникальным. Если он не уникален, то аутентификация даст сбой.

    А вот давайте проверим, а действительно ли SPN для сервера test-0002 уникален? На просторах интернета нашёлся простой скрипт powershell, который после небольшой модификации показывает интересующие нас SPN-ы: social.technet.microsoft.com/wiki/contents/article...
    #Set Search
    cls
    $search = New-Object DirectoryServices.DirectorySearcher([ADSI]“”)
    $search.filter = “(servicePrincipalName=HTTP/test-*)”
    $results = $search.Findall()
    
    #list results
    foreach($result in $results)
    {
           $userEntry = $result.GetDirectoryEntry()
           Write-host "Object Name = " $userEntry.name -backgroundcolor "yellow" -foregroundcolor "black"
           Write-host "DN      =      "  $userEntry.distinguishedName
           Write-host "Object Cat. = "  $userEntry.objectCategory
           Write-host "servicePrincipalNames"
           $i=1
           foreach($SPN in $userEntry.servicePrincipalName)
           {
               Write-host "SPN(" $i ")   =      " $SPN       $i+=1
           }
           Write-host ""
    }


    Результат:
    3e67af20a3d041779246cdaeb21598b9.pngWTF???

    ПОЧЕМУ В ДВУХ РАЗНЫХ АККАУНТАХ ОДИН И ТОТ ЖЕ SPN??? (Помните, чуть выше я просил запомнить правило, что spn должен быть уникален и присвоен только одному аккаунту?) Или может быть я что-то неправильно понял? Пойдём дальше и давайте посмотрим атрибуты для учёток test-0002 и test-0001, но не через оснастку AD, а через оснастку ADSI:
    2f16d1f71fcf40779ff6ac36b4824c2f.png
    test-0002 – OK.
    А вот для test-0001 нас ждёт СЮРПРИЗ (удивительно, что сюрприз связан с аккаунтом сервера на котором ВСЁ РАБОТАЕТ!!!):
    a04ac318d20c4844b68b1f7127f8a934.png
    Так, так!!! Оказывается, что spn для сервера test-0002 имеется в AD в двух экземплярах – в учётке test-0002_httpd и в учётке test-0001_httpd ! Чего по документации быть не должно! Вот это и был корень проблемы! Дубликат SPN.
    После удаления дубликата всё заработало!!!

    Всем спасибо за внимание.)))

    P.S.
    Рекомендация для заведения SPN. Нужно использовать команду setspn -S, а не servspn -A, т.к. setspn -S проверяет наличие дубликатов. Очень рекомендую к прочтению статью https://social.technet.microsoft.com/wiki/contents....
    Ответ написан
    Комментировать