Задать вопрос
  • Перебор древовидного объекта?

    AlexXYZ
    @AlexXYZ
    staffID: А что вас смущает в рекурсии на JS? Если нет требований, то не стоит и заморачиваться. На практике я не сталкивался с большим уровнем вложенности - два, три, четыре уровня. Всё остальное как правило - тесты на пограничные состояния. Если вы хотите из принципа разложить, то не советую этому уделять много времени. Разложить в итоге получится, но глубину вложенности нужно всё равно будет чем-то компенсировать. Например, сделать стек переменных с курсором бегающим по стеку как по уровням вложенности. Ну и зачем изобретать такой стек, когда JS умеет это делать за вас без всяких заморочек с обычным рекурсивным кодом?

    P.S.
    Когда делаете обход важно понять где остановиться - останавливать "проваливание" вглубь рекурсии надо на элементарных значениях.
  • А как вы реализовываете кроссдоменную авторизацию?

    AlexXYZ
    @AlexXYZ
    gubin_niko: Пожалуйста ) Если вам понравился ответ, который вы нашли, может кините сюда ссылку, чтобы другие могли его тоже почитать? Вдруг кому-то ещё пригодится. )
  • Перебор древовидного объекта?

    AlexXYZ
    @AlexXYZ
    staffID

    Вот пример рекурсивной функции:

    function jsonPaths1(obj, str, arr) {
    	if (!str)
    		str = "";
    	if (!arr)
    		arr = [];
    
    	if (typeof obj == "object" && obj instanceof Array ){
    		arr.push(str+"=[]");
    	}else if(typeof obj == "object" && obj instanceof Object){
    		arr.push(str+"={}");
    	}else{
    		arr.push(str+"="+obj+"");
    		return arr; // Такое происходит, если в функцию передаётся только примитивное значение, а не объект. Например, jsonPaths1(5, "obj")
    	}
    
    	function temp(){
    		var propPath = null;
    		if (isNaN(Number(o)) == false) {
    			propPath = str + "[" + o + "]";  // Если индекс является числом, то не брать его в кавычки
    		} else {
    			propPath = str + "['" + o + "']"; // Если индекс - "слово", то заключить его в кавычки.
    		}
    		var oobj = obj[o];
    
    		// Если свойство - функция, то ничего не делать. Функции не нужны.
    		if (typeof oobj == "function") {
    			return;
    		}
    		// Если свойство является массивом, то нужно войти в массив и пройтись по его свойствам
    		if (typeof obj == "object" && (obj instanceof Array || obj instanceof Object)) {
    			// Если элемент массива является массивом или json-ом, то нужно исследовать его:
    			if (typeof oobj == "object" && oobj instanceof Array || typeof oobj == "object" && oobj instanceof Object) {
    				jsonPaths1(oobj, propPath, arr);
    				return;
    			}
    			switch( typeof oobj ){
    				case "string":
    						arr.push(propPath+"=\""+oobj.replace(/\"/gi, "\\\"").replace(/\n/gi,"\\n")+"\"");  // только строку обрамить кавычками
    					break;
    				case "boolean":
    				case "number":
    				default:
    					arr.push(propPath+"="+oobj+""); // остальное печатать без кавычек, в том числе и булевы значения.
    					break;
    			}
    			/*
    			if( isNaN(oobj)==true || typeof oobj=="string" && oobj.length==0 ){
    				arr.push(propPath+"=\""+oobj.replace(/\"/gi, "\\\"")+"\"");  // только строку обрамить кавычками
    			}else{
    				arr.push(propPath+"=\""+oobj+"\""); // остальное печатать без кавычек, в том числе и булевы значения.
    			}
    			*/
    			return;
    		}
    	}
    
    	var arr_keys = [];
    	if (typeof obj == "object" && obj instanceof Array ){
    		for ( var i=0; i<=obj.length-1; i++ ) {
    			arr_keys.push(i);
    		}
    	}else{
    		for ( var o in obj ) {
    			arr_keys.push(o);
    		}
    		arr_keys.sort();
    	}
    	for ( var i=0; i<=arr_keys.length-1; i++ ) {
    		var o = arr_keys[i];
    		temp();
    	}
    	return arr;
    }


    Вот пример результата:
    jsonPaths1( {a: {c: {d: "v"}}, c: {d: "v"}, d: "v", e:["f", "g", "h"]}, "obj" ).join("\n")

    696a93f0da594923a3610a42b8352d29.png
  • А как вы реализовываете кроссдоменную авторизацию?

    AlexXYZ
    @AlexXYZ
    Вообще есть тема SSO (Single Sing-On). OAuth - частный случай.
  • Как планируют устанавливать личность в соц сетях?

    AlexXYZ
    @AlexXYZ
    АртемЪ: "но человеком не признающим очевидное прослыть можно" - за отрицание того, что Земля вертится вокруг Солнца раньше сжигали на костре. Всё зависит от времени и наличия инквизиции. "Очевидно" - это для инквизиции, которая как гиены огненной боится конкурентов и подрыва своего и без того шаткого авторитета.

    beduin01: Не бегите впереди паровоза. Это проблема следователя доказывать, что написали именно вы. Для начала исключите возможность свидетелей, которые бы могли подтвердить, что вы занимаетесь такими "публикациями". У нас, в России, можно получить срок на основе свидетельских показаний. Не обсуждайте для начала свои публикации с друзьями и коллегами, хотя свою позицию в разговорах с ними (пока) можете озвучивать. Поэтому, если не будет таких свидетелей, то всё технически усложняется на порядки.
    Если вас несколько пугают резонансные дела, то в них много чего не сообщается, чтобы создать "интригу", что якобы за пост посадили. Скорее всего довести до суда конкретное дело было не просто, но наши СМИ любят делать из мухи слона. Вот и складывается впечатление, что посадить раз плюнуть.
  • Как узнать, что в проекте(файлах и папках) были изменения?

    AlexXYZ
    @AlexXYZ
    Правильное направление, но только нужно быть готовым к тому, что FileSystemWatcher очень нетривиально мониторит и выдаёт события. Например, если вы сохраняете картинку из браузера, то получите два события - первое - создание файла, второе - изменение файла (наполнение содержимым). Программы MS Office вообще ведут себя неожиданно - сначала сохраняют изменения во временный файл, потому удаляют старый файл и переименовывают временный на старое имя. И это только небольшая часть странностей. Но другого метода нет.
  • C#, требуется отправить сырой HTTP(S) запрос?

    AlexXYZ
    @AlexXYZ Автор вопроса
    Петр: Теперь стал более лучше понимать суть HTTP-запросов. )
  • C#, требуется отправить сырой HTTP(S) запрос?

    AlexXYZ
    @AlexXYZ Автор вопроса
    Петр: Не прокатывало, пока не убрал из первой строки после GET имя сервера, которое уже указано в заголовке Host: . Да и заголовок "Content-Length" надо было добавить. Может другие сервера к этому спокойно отнесуться, но ElasticSearch оказался серьёзным малым!
  • C#, требуется отправить сырой HTTP(S) запрос?

    AlexXYZ
    @AlexXYZ Автор вопроса
    Пример выглядит многообещающим, но как в этом случае должен выглядеть запрос? Я хотел избавиться от необходимости парсить в тексте тип запроса (GET, POST и др.), адрес, параметры, заголовки/куки и пр. Нужен метод, куда можно вставить текст как в вопросе. Нужно избежать ручного добавления заголовков и прочей атрибутики http-запроса в коде приложения, т.к. всё это уже есть в тексте.
  • Elasticsearch 5 почему сразу 5-й релиз пока ещё выпускаются 2.х?

    AlexXYZ
    @AlexXYZ Автор вопроса
    Да, изменений очень много. Но как-то основная мысль от меня всё-таки ускользает. Будут ли 3.x-4.x?
  • Требуется получить информацию о дисковом разделе по имени файла?

    AlexXYZ
    @AlexXYZ Автор вопроса
    Спасибо. Функция QueryDosDevice подошла очень удобно. Если кому-то интересно расширить её применение на C#, то смотрите пример:
    https://www.virag.si/2010/02/enumerate-physical-dr...

    Только в моём случае забавный прикол случился. После обновления виндозы (у меня 8) вдруг стали вылезать события не только с физ. путями к разделам, но и обычные имена дисков. Непонятно!?
  • Windows 10 tray ballon notification. Можно ли отобразить как в старых версиях windows?

    AlexXYZ
    @AlexXYZ Автор вопроса
    Просто не очевидно, что сообщение всплывает, чтобы привлечь внимание к иконке в трее. Если я и напишу название и поставлю иконку, то как дать понять пользователю, что тут есть "астральная" связь с иконкой в трее? Простой баллон указывал стрелкой. Toast-ы никуда не указывают. :( Можно, конечно, подцепить допменю к toast, но ведь функционал нужен не только, когда toast всплывает. Поэтому всплывающий баллон, который раньге указывал на иконку в трее устанавливал в мозгу пользователя связь определённого сообщения с функционалом, но теперь этой связи нет. Как быть?
  • Windows 10 tray ballon notification. Можно ли отобразить как в старых версиях windows?

    AlexXYZ
    @AlexXYZ Автор вопроса
    С Sharp: В принципе я почитал, что даже на старую винду можно загнать toast:
    https://blogs.msdn.microsoft.com/tiles_and_toasts/...
    Вот хороший пример:
    https://blogs.msdn.microsoft.com/tiles_and_toasts/...

    Выглядит симпатично. Буду пробовать подключить. Позже отпишусь о результате.
  • Windows 10 tray ballon notification. Можно ли отобразить как в старых версиях windows?

    AlexXYZ
    @AlexXYZ Автор вопроса
    John Smith: Но вот стандартный popup, который в windows 10 "превратился" в toast как-то "не хочет" преображаться и по-умолчанию как-то связывать себя со старым приложением. В данном случае налицо неконсистентный UI у микрософт, а возможности toasts вообще гораздо более интересные, чем у popup baloons. Я сейчас про них "полистал", как-то моя критика к ним стала "мягче" что ли. )
  • Windows 10 tray ballon notification. Можно ли отобразить как в старых версиях windows?

    AlexXYZ
    @AlexXYZ Автор вопроса
    С Sharp: Я не проверял, можно ли повесить click на баллон, но мне не хотелось бы так делать. Обычно их нажимают, чтобы просто закрыть, а не ждать, когда он закроется сам. Вроде как "логичнее" вешать контекстное меню на иконку в трее?
  • Windows 10 tray ballon notification. Можно ли отобразить как в старых версиях windows?

    AlexXYZ
    @AlexXYZ Автор вопроса
    John Smith: "будет гораздо точнее указывать на оригинатора уведомления" - да??? Т.е. вместо общего впечатления от старого баллона "нажмите здесь" нужно, чтобы пользователь искал "такую же иконку" среди общего разнообразия иконок на рабочем столе Windows без видимой связи с ними? А если одинаковых приложений может быть запущено несколько, то какое из них выдало сообщение?
    Извините, не могу согласиться.
  • Sourceforge malware detection?

    AlexXYZ
    @AlexXYZ Автор вопроса
    xmoonlight: Сам доступ к файлам не мониторит, только создание/изменение/переименование. Ещё удаление, но только чтобы удалить из списка логов файл, раз его уже нет.
  • Sourceforge malware detection?

    AlexXYZ
    @AlexXYZ Автор вопроса
    xmoonlight:
    Для чего прога:
    Просто маленький сервис для рутинных действий.

    Понятно, что идея мониторить всё подряд не нова. Антивирусы в этом плане просто вне досягаемости.
    НО!
    Хоть я и программист, но если рассматривать меня как пользователя, то у меня есть архив с файлами, причём достаточно разветвлённый. Находится он на переносном диске. Объём у этого архива больше терабайта. Каталогов - несколько сотен. В течении дня у меня в этом "архиве" ведётся достаточно активная работа: загрузить картинку-иконку в проект, сохранить вложение из письма в определённый проект/каталог, загрузить сессию fiddler в файл и т.д. Т.е. за день таких файловых операция с архивом - дофига. И если при скачивании с интернета в Chrome или Mozilla появляется полезная кнопка "открыть папку со скачанным файлом", то в куче других программ такой функции вообще нет. А представьте, что вы только что из блокнота сохранили файл глубоко в иерархии и тут сталкиваетесь в вопросом... и... где он??? Вот просто, чтобы решить вопрос "а куда я только что сохранил файл?". )

    Что мониторит:
    Мониторит только указанные каталоги (с возможностью добавить исключения) и только указанные расширения (чтобы не делать popup на всё). Например, если проект собирается grunt или maven, то сообщений может быть много. Ставлю исключение на каталоги сборки.
  • Sourceforge malware detection?

    AlexXYZ
    @AlexXYZ Автор вопроса
    Техподдержка ответила, что они одобряют мой код и теперь он в белом списке. Спасибо.