• Можно ли восстановить document.domain?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Если вы разработчик этих доменов, то вы можете отменить CORS для них. Например, как это делается на php:

    https://ru.wikipedia.org/wiki/Cross-origin_resourc...

    <?php
        header("Access-Control-Allow-Origin: http://example.com");
    ?>


    т.е. суть просто в заголовке. Не браузер запрещает кросс-доменные запросы, а сервер может не разрешать делать запросы к себе от другого домена и по-умолчанию домены не выставляют этот параметр. Но если домены ваши, то вы можете выставить им взаимные разрешения читать друг у друга.
    Ответ написан
  • JS Как оптимизировать поиск объекта в массиве?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Внесу свои пять копеек, вдруг пригодиться: https://github.com/jayway/JsonPath
    Типа xPath, только для json.
    Ответ написан
    Комментировать
  • Часто ли вы используете интерфейсы?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    У каждого своё понимание интерфейса и в зависимости от этого и пишутся программы с использованием тех или иных шаблонов. Обычно для задачи выбирается стек технологий и если выбран удачно, то программа будет жить долго и счастливо. Ну, а если нет, то... не повезло.
    Ответ написан
    Комментировать
  • Как в JavaScript дотянуться до переменной?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    В принципе можно. Вот так, например:

    var get_myvar;
    var set_myvar;
    window.map.on('draw:created', function (e) {
        var type = e.layerType,
            layer = e.layer;
    
        if (type === 'marker') {
            // Do marker specific actions
        }
    
         var myvar = "foo"; // вот переменная
         get_myvar = function(){
             return myvar;
         }
         set_myvar = function(val){
             myvar = val;
         }
    });
    console.log( "myvar="+ get_myvar() );
    set_myvar("new_value");
    console.log( "myvar="+ get_myvar() );
    Ответ написан
    Комментировать
  • Можно ли попросить Вас о code review?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    По мне так очень даже прилично написано, а у всех остальных свой опыт разработки. Лично мне не трудно было читать. Для удобства добавьте несколько скринов, чтобы было понятно о чём речь.
    Ответ написан
  • Как правильно обновлять ресурсы сайта?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Обычно надо править заголовки в отдаваемых ресурсах, чтобы ресурсы не проксировались.
    1. Для java, например выставляю:

    response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
    response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
    response.setDateHeader("Expires", 0);

    обычно их бывает достаточно.

    2. можно трафик через nginx прогонять и выставлять эти заголовки и т.д.
    Ответ написан
  • Как просмотреть активность apache?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Для тестовых условий можно использовать Fiddler. Да, да. Я не оговорился. Именно fiddler. И именно для отладки на сервере. Только нужно немного поколдовать. Ставите перед apache реверс прокси (скорее всего это будет nginx), который будет перенаправлять запросы на fiddler, в fiddler разрешить доступ снаружи:

    10285392485b4bb1bda8df4daac02a4a.png

    , а в fiddler нужно перенаправлять redirect-ы на ваш сайт apache. (вот описание этого кодунства в fiddler). Теперь у вас все запросы к apache видны как на ладони со всем содержимым, куками, паролями и пр.

    Вкратце: пользователь делает запросы на nginx, nginx редиректит на ваш локальный комп с запущенным fiddler, fiddler редиректит на apache. Вы наблюдаете жизнь запросов к апачу вместе с трафиком вживую. Профит.
    Ответ написан
    Комментировать
  • Перебор древовидного объекта?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Честно говоря меня напрягают следующие вещи в вашем коде:

    1. options = options[ obj ]; // <--- WTF??? Это что за извращённый способ рекурсии?

    2. Цикл for ( var obj in options ) { без проверки владения:
    if( options.hasOwnProperty( obj ) ){
    ... бизнес-логика ...
    }

    3. Самое главное. КАК ПРОИЗВОДИТСЯ РЕКУРСИЯ??? (Видимо ошибка из п.1). Нигде внутри parse_args не производится вызов её самой!
    Конец бородатого анекдота: "Думай, Петька, думай"!
    Ответ написан
  • Как запустить Main-класс из Jar?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Попробуйте перед lib поставить точку (текущий каталог), а то, наверное, java не очень понимает где же всё-таки находится lib (ну и *.jar убрать):

    java -classpath application.jar;./lib;. org.company.application.Launcher
    Ответ написан
    Комментировать
  • C#, требуется отправить сырой HTTP(S) запрос?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Разобрался!
    Маленькая тонкость - сервером выступает ElasticSearch.

    Действительно, решение через
    new Socket()
    правильное. Но! Нужно ООООЧЕНЬ внимательно следить за тем, что пишется в заголовках, а особенно за заголовком "Content-Length: NNN":
    1. Обязательно его вставлять, даже если он не указан!
    2. Правильно считать длину тела запроса. Не по символам, а по байтам.

    Вот переработанный пример кода MS из совета Петр, который уже нормально заработал:

    private void btnRequest_Click(object _sender, EventArgs e)
            {
                /* Текстовое поле, из которого я беру текст вида:
    GET http://HOST:9200/_search HTTP/1.1
    Host: HOST:9200
    
    {
    ....
        "highlight" : {
            "fields" : {
                "*" : {}
    
            }
        }
    }
               */
                string str = request_text.Text; 
                byte[] bytes = new byte[100024];  // Примерное число, которое надо поменять, если требуется! Мне для экспериментов подошло. В дальнейшем можно будет сделать какой-нибудь ByteStream
    
                // Connect to a remote device.
                try
                {
                    string str_first = str.Split(new char[] { '\r', '\n' })[0];
                    string[] arr_str_first = str_first.Split(' ');
                    string[] arr_str_address = arr_str_first[1].Split('/');
                    Uri uri = (new Uri(arr_str_first[1]));
                    string new_str_first = arr_str_first[0] + " /" + arr_str_address.Last() + " " + arr_str_first[2];
    
                    // разделить запрос на две части - заголовки и тело:
                    string str_headers = str.Substring(str_first.Length + 2, str.IndexOf("\r\n\r\n") - str_first.Length - 2);
                    string str_body = str.Substring(str.IndexOf("\r\n\r\n") + 4);
    
                    int index_substring_content_length = str_headers.IndexOf("Content-Length:");
                    if (index_substring_content_length >= 0)
                    {
                        string tmp = str_headers.Substring(index_substring_content_length);
                        string[] arr_temp = tmp.Split(new char[] { '\r', '\n' });
                        string sub_string_content_length = arr_temp[0];
                        sub_string_content_length = "\r\n" + sub_string_content_length;
                        Regex regex = new Regex(sub_string_content_length);
                        str_headers = regex.Replace(str_headers, "", 1);
                    }
    
                    // Establish the remote endpoint for the socket.
                    IPHostEntry ipHostInfo = Dns.GetHostEntry(uri.Host);
                    IPAddress ipAddress = ipHostInfo.AddressList[0];
                    IPEndPoint remoteEP = new IPEndPoint(ipAddress, uri.Port);
    
                    // Create a TCP/IP  socket.
                    Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                    // Connect the socket to the remote endpoint. Catch any errors.
                    try
                    {
                        sender.Connect(remoteEP);
    
                        Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString());
    
                        string raw_request = new_str_first+"\r\n"+str_headers+ "\r\nContent-Length: "+ Encoding.UTF8.GetBytes(str_body).Length+"\r\n\r\n"+str_body;
    
                        // Encode the data string into a byte array.
                        byte[] msg = Encoding.UTF8.GetBytes(raw_request); // + "<Client Quit>");
    
                        // Send the data through the socket.
                        int bytesSent = sender.Send(msg);
                        Console.WriteLine("bytesSent = {0}", bytesSent.ToString());
    
                        // Receive the response from the remote device.
                        int bytesRec = sender.Receive(bytes); 
                        Console.WriteLine("Echoed test = {0}", Encoding.UTF8.GetString(bytes, 0, bytesRec)); // bytesRec));
    
                        // Release the socket.
                        sender.Shutdown(SocketShutdown.Both);
                        sender.Close();
    
                    }
                    catch (ArgumentNullException ane)
                    {
                        Console.WriteLine("ArgumentNullException : {0}", ane.ToString());
                    }
                    catch (SocketException se)
                    {
                        Console.WriteLine("SocketException : {0}", se.ToString());
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Unexpected exception : {0}", ex.ToString());
                    }
    
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }


    Вот результат, который было нужно получить в ответе от сервера:
    e9834dff7f9d4bfa849a2f10ae73a9a6.png

    Результат получен.

    P.S.
    Понял, почему не получалось с самого начала. Посмотрев, как Fiddler2 достаточно вольно обращается с синтаксисом запросов в разделе Composer, я и подумал, что и мне так можно. Но, скорее всего, в фоне Fiddler2 всё-таки перерабатывает запрос, стараясь максимально приблизить его к стандарту. Вот пример разницы того, что записано в Composer уменя и что показывает Inspector:

    cbe1feb2544f445e8b99fa03a5f306eb.png
    Ответ написан
  • Зачем нужен void initialize?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Обычно такие "штуки" делают не для "обычных" конструкторов объектов, а для сложных классов. Например, в C# initialize используются в конструкторах GUI-шных компонентов, если вы, например, их расширяете. В этом случае требуется установка многих значений по умолчанию, смысл которых иногда не ясен, да и пока не важен (особенно, когда нужно хоть как-то запустить для примера). Но если вы пишите свои собственные классы, то с вероятностью 99% вы напишите свой инициализатор и валидатор, если он вам вообще понадобится. Так что принципиальной разницы в листингах в вашем примере нет. Результат же получен одинаковый? Просто разными способами.
    Ответ написан
    Комментировать
  • Как посмотреть на сайте другой сайт?

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

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Детально изучил вопрос.
    Эта проблема касается только конкретно репозитория https://github.com/inuyaksa/jquery.nicescroll

    a2411bee859442a59668b378184ee3d2.png

    Загружаю его и вижу в каталоге, что этого же файла не достаёт:
    99d818711f0940d6adf7e8a481322507.png

    ОООчень странно. Больше всего вводит в заблуждение то, что везде понаставлены номера версии 3.6.8:
    089a255825354b61b7feba6c061188a8.png

    Исследуем репозиторий на наличие тегов и имён веток и тут-то находим кое-что "неправильное":
    a9f6b160646f4d638c2806aed34f584b.png
    а ведь именно ветку 3.6.8 с отсутствующим файлом и грузит bower!!! И делает он свою работу правильно. Т.е. не распознав тег v3.6.8-fix как версию большую, чем 3.6.8, то и использует ветку с тегом 3.6.8, где файла нет.

    Теперь проведём "эксперимент" и попросим не версию 3.6.8, а v3.6.8-fix:
    b5628c3134cd4a4c8764c4bbbcd22b2d.png

    Теперь поправим файл bower.json:
    bf74341134ee4526ae0709b351b42d0d.png

    И проверим результат:
    31f0e836e89d4665baf28d313e7b43b0.png

    Остался открытым вопрос - а как же быть со знаками >= в настройках bower.json? А никак. Надо будет помнить про это и как только автор плагина исправит теги, то можно будет снова работать с версиями.
    Ответ написан
    Комментировать
  • Работа с изображением в php и js, как передать изображение от сервера без "браузерного" скачивания?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Если вы имеете в виду вставку исходного бинарного представления картинки в html, то есть такая тема img src base64
    Ответ написан
    Комментировать
  • Приложение собранное с помощью nw.js не запускается на windows 10. В чем может быть проблема?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Возможно, что сама nw.dll имеет неразрешённые зависимости. Вот список приложений, которые, возможно, помогут вам выяснить, что требуется для загрузки этой dll: https://www.raymond.cc/blog/check-what-dll-or-ocx-...
    Мне в своё время помогала утилитка Dependency Walker. Больше всего нравилась.
    Или посмотрите какие файлы читаются при запуске всего приложения с помощью Procmon.exe
    Ответ написан
  • Почему в Elasticsearch неправильно ищутся некоторые слова?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Не совсем ответ, но есть форум, где осуждают проблемы с ES и морфологией в частности на русском (если существенно): https://discuss.elastic.co/c/in-your-native-tongue...

    И стоит посмотреть issue проекта этого плагина (больше закрытые, т.к. по открытым нет ответов):
    https://github.com/imotov/elasticsearch-analysis-m...
    cdc966297e6b49d98b84b76618bcfc7b.png

    Автор плагина Игорь Мотов, я ему задавал вопросы.
    У меня была близкая проблема при использовании wildcard, но оказалось, что это не проблема морфологии.
    Ответ написан
    Комментировать
  • API аутентификация, безопасна?

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

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Вроде всё ок. Ситуация аналогична той, если бы у вас этот репозиторий лежал на одном компе в нескольких разных каталогах.
    Ответ написан
    Комментировать
  • Стоит ли приступать к изучению Jquery, если ты занимаешься Javascript 2 недели?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Обычно правило простое - чем хуже вы программируете, тем больше вам надо писать своего кода, чтобы понять тонкости. Чем лучше вы программируете, тем увереннее надо использовать чужие библиотеки и чужой код, потому что прочитать/поправить чужой код и понять, что он делает можно быстрее, чем написать с нуля свой. Кроме того известные библиотеки лучше оттестированы. Так что в вашем случае надо пока больше писать самому. Вы сами поймёте, когда "можно" переходить на сторонние библиотеки, но это не достигается через две-три недели. Нужно быть упёртым.
    Ответ написан
    Комментировать