Страницы

Поиск по вопросам

четверг, 28 февраля 2019 г.

Какую функцию использовать для подстановки значений в строку запроса?

Как сделать тоже самое на PHP?
`API_URL = "https://api.similarweb.com/v1/website/{site}/" \ "total-traffic-and-engagement/visits?api_key={api_key}" \ "&start_date={start_date}" \ "&end_date={end_date}" \ "&main_domain_only=false" \ "&granularity={granularity}".format( site='cnn.com', api_key=MY_API_KEY, start_date="2017-09", end_date="2017-10", granularity="monthly" )`


Ответ

Ну, как вариант с помощью eval
$string = 'API_URL = "https://api.similarweb.com/v1/website/{site}/" \ "total-traffic-and-engagement/visits?api_key={api_key}" \ "&start_date={start_date}" \ "&end_date={end_date}" \ "&main_domain_only=false" \ "&granularity={granularity}".format( site="cnn.com", api_key=MY_API_KEY, start_date="2017-09", end_date="2017-10", granularity="monthly" )';
$site = 'test.ru'; $api_key = 'superkey';
$start_date = 'ONE'; $end_date = 'TWO';
$granularity = 'variable';
preg_match_all('#\{(.*?)\}#', $string, $matches, PREG_SET_ORDER);
foreach ($matches as $m) { eval('$string = str_replace($m[0], $'.$m[1].', $string);'); }
echo $string;
В результате данные в формате {параметр} заменяются на значение переменной $параметр
В итоге получаем такую строку:
API_URL = "https://api.similarweb.com/v1/website/test.ru/" \ "total-traffic-and-engagement/visits?api_key=superkey" \ "&start_date=ONE" \ "&end_date=TWO" \ "&main_domain_only=false" \ "&granularity=variable".format( site="cnn.com", api_key=MY_API_KEY, start_date="2017-09", end_date="2017-10", granularity="monthly" )
UPD: Решение чуть попроще:
$string = str_replace('"', '\"', preg_replace('#\{(.*?)\}#i', '\$$1', $string)); eval('$string = "'.$string.'";');
echo $string;
Или вместо функции str_replace возьмем addcslashes для экранирования кавычек:
eval('$string = "'.addcslashes(preg_replace('~\{(.*?)\}~i', '\$$1', $string), '"').'";');
echo $string;

Slick slider свайп не работает

Всем привет.
Есть slick-slider на странице целых 4 .
Проблема очень экстрординарная так как все слайдеры работают кроме 3-го.У всех прописан один и тот же стиль
$(function(){ try { $( 'section.cinema .slider, section.news .slider, section.shopping .slider, section.restaurants .slider' ).slick({ dots: false, infinite: true, speed: 300, centerMode: false, variableWidth: true, swipe:true, slidesToShow: 3, slidesToScroll: 1, responsive: [ { breakpoint: 400, settings: { slidesToShow: 1, slidesToScroll: 1 } }, { breakpoint: 768, settings: { slidesToShow: 2, slidesToScroll: 1 } },
{ breakpoint: 1140, settings: { slidesToShow: 3, slidesToScroll: 1 } } ] }); } catch( $e ){} });
section.cinema .slider, section.news .slider section.shopping .slider слайдер которое не работает section.restaurants .slider
Третий работает только стрелками а swipe не работает.У других все работает. Очень прошу помогите.
Мои попытки.
1.Вместо $( 'section.cinema .slider, section.news .slider, section.shopping .slider, section.restaurants .slider' ). этого проста написать $(.slider' ).
2.Изменить версию слайдера я поставил 1.8.0 также 1.9.0 тоже не помогло
3.Также добавить для каждого класса свою функцию слайдера тоже не помогло
Правка.
Я пробовал добавить версию 1.5.9 тогда свайп работал только один раз
Ссылка на слайдер slick


Ответ

А не работает всё потому-что разная ширина слайдов, у всех остальных слайдеров всё в display:block + img и соответственно variableWidth параметр отрабатывает верно, а в 3-м варианте background-image + flex-wrap: wrap
Это те изменения которые вам необходимо ввести для корректной работы в css и scripts.min.js . На 3-м слайдеры стоит display:flex , скиньте его в display:block, в целом flex не нужен и уж если используешь flex то flex-wrap:wrap в слайдере не должно быть, элементы в 3 ряда падают. Также убираем variableWidth: true. Тестируйте, у меня всё завелось.
$(function () { try { $("section.cinema .slider, section.news .slider, section.restaurants .slider").slick({ dots: false, infinite: true, speed: 300, centerMode: false, variableWidth: true, slidesToShow: 3, slidesToScroll: 1, draggable: true, touchMove: true, swipe: true, touchThreshold: 100, swipeToSlide: true, responsive: [{breakpoint: 400, settings: {slidesToShow: 1, slidesToScroll: 1}}, { breakpoint: 768, settings: {slidesToShow: 2, slidesToScroll: 1} }, {breakpoint: 1140, settings: {slidesToShow: 3, slidesToScroll: 1}}] }) } catch ($e) { } }); $(function () { try { $("section.shopping .slider").slick({ dots: false, infinite: true, speed: 300, touchThreshold:1, slidesToShow: 3, slidesToScroll: 1, draggable: true, touchMove: true, touchThreshold: 100, swipeToSlide: true, responsive: [{breakpoint: 400, settings: {slidesToShow: 1, slidesToScroll: 1}}, { breakpoint: 768, settings: {slidesToShow: 2, slidesToScroll: 1} }, {breakpoint: 1140, settings: {slidesToShow: 3, slidesToScroll: 1}}] }) } catch ($e) { } }); $(document).ready(function () { if ($.fn.customScrollbar) $(".shops-list").customScrollbar(); selectActiveMapArea() }); $(document).on("pjax:success", function () { selectActiveMapArea() }); function selectActiveMapArea() { if ($(".map svg") !== undefined) { $(".map svg a").on("click", function (e) { $.pjax({container: "#p0", url: $(this).attr("href")}); e.preventDefault(); return false }); if ($("h1").attr("data-shop-id") !== undefined) { $(".map svg a[data-shop-id=" + $("h1").attr("data-shop-id") + "] polygon").addClass("active") } } } $(window).on("scroll", function () { var body = $("body"), position; if (body.attr("data-parallax") === undefined) body.attr("data-parallax", body.css("background-position-y")); position = parseInt(body.attr("data-parallax")) - parseInt($(window).scrollTop()) / 5; body.css({"background-position-y": position}) }); $(document).on("click", ".search", function (e) { if ($(this).hasClass("active")) { if ($(e.target).attr("name") !== "search") { if ($(this).find("input").val() === "") { $(this).removeClass("active"); $("nav .mini-logo").removeClass("hide") } else $(this).closest("form").submit() } } else { $(this).addClass("active"); $("nav .mini-logo").addClass("hide") } }); $(document).ready(function () { stickyNavTop = $("nav").offset().top - 15; stickyNav(); $(window).scroll(function () { stickyNav() }); $["ui"]["autocomplete"].prototype["_renderItem"] = function (ul, item) { return $("

  • ").data("item.autocomplete", item).append(item.label).appendTo(ul) } }); var stickyNavTop; function stickyNav() { var header = $("header"); var logo = $(".logo > a > img"); if ($(window).scrollTop() > stickyNavTop) { header.css({height: header.innerHeight()}); $("nav").addClass("sticky"); logo.hide(); $(".c").addClass("container"); if (window.innerWidth > 766) { $('.navbars').addClass('navbar-reverse content-center'); $('.second').addClass('auto-width'); $('.actions').addClass('display-none'); // let elem = document.querySelector("rect[data-shop-id='" + document.querySelector("h1[data-shop-id]").getAttribute("data-shop-id") + "']"); // if (elem === null) // { // elem = document.querySelector("polygon[data-shop-id='" + document.querySelector("h1[data-shop-id]").getAttribute("data-shop-id") + "']"); // } // elem.setAttribute("stroke", "red"); } } else { $("nav").removeClass("sticky"); logo.show(); $(".c").removeClass("container"); if (window.innerWidth > 766) { $('.navbars').removeClass('navbar-reverse content-center'); $('.second').removeClass('auto-width'); $('.actions').removeClass('display-none'); } } } #w1 {display:block !important}

    c# множество асинхронных HttpWebRequest [дубликат]

    На данный вопрос уже ответили: Увеличить скорость парсера 1 ответ Пытаюсь сделать множество асинхронных запросов HttpWebRequest. Подготовил мини тест:
    class Program { static void Main(string[] args) { Test(); Console.ReadLine(); }
    public static async void Test() { for (int i = 0; i < 10; i++) { int val = i; await Task.Run(() => WR(val)); } }
    static async void WR(int msg) { Console.WriteLine(msg + " begin");
    string url = "https://stackoverflow.com"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; var response = (HttpWebResponse)await Task.Factory.FromAsync (request.BeginGetResponse, request.EndGetResponse, null);
    Console.WriteLine(msg + " status code: " + response.StatusCode); Console.WriteLine(msg + " end"); } }
    Но вот что получилось:
    0 begin 1 begin 2 begin 3 begin 4 begin 5 begin 6 begin 7 begin 8 begin 9 begin 0 status code: OK 0 end 1 status code: OK 1 end
    А после 1 end вообще ничего не происходит. Где-то через 30 секунд в output вылазит:
    The thread 0x6634 has exited with code 0 (0x0). The thread 0x5620 has exited with code 0 (0x0). The thread 0x4d08 has exited with code 0 (0x0). The thread 0x39b8 has exited with code 0 (0x0). The thread 0x3454 has exited with code 0 (0x0). The thread 0x99c has exited with code 0 (0x0). The thread 0x6be0 has exited with code 0 (0x0).
    Но никаких ошибок в дебаге не вываливается. Подскажите где я ошибся и как исправить?
    UPDATE: Затык происходит при запуске в Visual Studio. Интересно что с включенным Fiddler все работает нормально.


    Ответ

    Переписал немного ваш код. Все прекрасно работает
    void Main() { Test(); Console.ReadLine(); }
    public static async Task Test() { var tasks = new List(); for (int i = 0; i < 10; i++) { int val = i; var task = WR(val); tasks.Add(task); } await Task.WhenAll(tasks); }
    static async Task WR(int msg) { Console.WriteLine(msg + " begin");
    string url = "https://stackoverflow.com"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; var response = (HttpWebResponse)await Task.Factory.FromAsync (request.BeginGetResponse, request.EndGetResponse, null);
    Console.WriteLine(msg + " status code: " + response.StatusCode); Console.WriteLine(msg + " end");
    response.Dispose(); }
    Вывод
    0 begin 1 begin 2 begin 3 begin 4 begin 5 begin 6 begin 7 begin 8 begin 9 begin 3 status code: OK 3 end 5 status code: OK 5 end 0 status code: OK 0 end 6 status code: OK 6 end 2 status code: OK 2 end 7 status code: OK 7 end 1 status code: OK 1 end 8 status code: OK 8 end 9 status code: OK 9 end 4 status code: OK 4 end
    UPD
    Не забываем диспозить респонс
    static async Task WR(int msg) { Console.WriteLine(msg + " begin");
    string url = "https://stackoverflow.com"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET";
    using (var response = (HttpWebResponse) await Task.Factory .FromAsync(request.BeginGetResponse, request.EndGetResponse, null)) //// <<<<< { Console.WriteLine(msg + " status code: " + response.StatusCode); Console.WriteLine(msg + " end"); } }

    Как в C объявить функцию с переменным числом аргументов?

    Функция printf может принимать разное количество аргументов. Например: printf("Hello!
    "); или printf("Hello, %s!
    ", "world"); Как это делается?


    Ответ

    Есть стандартный заголовок , который позволяют объявлять подобные функции. #include
    void _printf(char *format, ...) { va_list argp;
    va_start(argp, format);
    printf(format, argp);
    va_end(argp); }

    Кнопки изменения рейтинга на ajax

    Нужно реализовать ajax-запросы голосования "за" и "против" к комментариям, по аналогии как на Баше: т.е. при нажатии на кнопку не происходит перезагрузка страницы, а только меняется рейтинг. И как это событие обработать в джанговском представлении? Спасибо.


    Ответ

    В общем сделал так: навесил на кнопки функцию: function voite(id, action){ $.post("/quote/", {comment_id: id, comment_action: action}); } А на адрес '/quote/' навесил обработчик во вьюхе, обрабатывающий пост-запрос. Если нужно(интересно) - могу привести более детальный код. Дополнение. Скажу заранее, что обработчик лежит в отдельном приложении и обрабатывает страницу '/quote/', т.е. в urls.py есть такая строчка: (r'^quote/$', 'ajax.views.quote'), где 'ajax.views.quote' - путь к обработчику. Вот сам текст обработчика: def quote(request):
    message = "This is a technic page" if request.method == 'POST': if 'comment_id' in request.POST and 'comment_action' in request.POST: #обрабатываем запрос, повышаем/понижаем рейтинг и т.д.
    return HttpResponse(message) В обработчике проверяем метод, далее извлекаем из запроса (request) параметры и делай все что нам нужно.

    Как снизить уровень взаимодействия с сетью в WCF до Stream?

    Технология WCF хорошо решает проблему с брандмауэрами при разработке распределённых приложений, так как предоставляет уровень абстракции над стандартными протоколами и готовые механизмы аутентификации. Но нижний уровень упаковки данных в WCF - это контракты данных. Мало того, что wsdl накладывает много ограничений на формат данных, так ещё и эффективность xml-упаковки оставляет желать лучшего. Я сделал обёртку, чтобы надстроить бинарный формат данных поверх xml, но это тоже не самое эффективное решение. Да, объём передаваемых данных уменьшился примерно на порядок, исчезли падения на превышении немаленьких квот при получении списка объектов на видимом прямоугольнике карты, но зато и перепаковка выполняется дважды - сначала объектная модель сериализуется в бинарник, а потом бинарник размазывается в xml. Когда операций перепаковки много, это заметно. В идеале для сервисов внутреннего пользования (т.е., не предназначенных для интеграции с внешними системами) вместо контрактов я бы хотел иметь Stream, который отвечает за взаимодействие Endpoint'ов, разруливает поддержку стандартных сетевых протоколов и аутентификацию, но в который можно писать / читать любые данные. То есть, я хотел бы снизить уровень взаимодействия с сетью, но сохранив то хорошее, что есть в WCF. Поточные контракты данных здесь не подходят, так как если сервис инстанцирован локально, никаких перепаковок происходить не должно. Есть ли статьи на эту тему? Есть ли альтернативные технологии? Может, есть настройки WCF, которые бы позволяли сериализовывать данные не через xml, а прямо гонять сформированные бинарные массивы?


    Ответ

    В WCF можно собрать свой customBinding, включив туда альтернативный кодировщик сообщений. выглядит как то, что вам нужно.

    Добавить вершину в граф, для построения кратчайшего обхода всех вершин

    Есть неориентированный полный граф. Значения длины всех ребер заданы. Необходимо добавить вершину к графу или использовать уже существующую. Причем эта вершина должна иметь такое значение ребер, что бы начиная обход графа с нее, можно было обойти все вершины графа и длина пути обхода - минимальная.
    Прошу, помогите ответом. Мне подойдет как полностью раскрытый ответ, так и ссылка на источник с материалом по вышеописанной теме или даже небольшой намек: "в какую сторону копать"...


    Ответ

    Это задача о поиске кратчайшего гамильтонова пути. Так как граф полный, то очевидно не имеет смысла добавлять новую вершину - она только увеличит длину пути, также очевидно что такой путь всегда существует. Решение с помощью обхода в глубину будет давать неполиномиальную асимптотику. Посмотри в сторону переборов с отсечениями ...

    Разработка http-радио-проигрывателя Android

    Здравствуйте. Направьте пожалуйста на библиотеки, которые позволят: Получать поток с http Воспроизводить его непосредственно в программе И желательно, как сделать виджет Точно не знаю, название этого протокола, поэтому приведу дампы данных из сниффера: Запрос: GET /server.128 HTTP/1.0 Host: radio.server.fm User-Agent: WinampMPEG/5.61, Ultravox/2.1 Ultravox-transport-type: TCP Accept: */* Icy-MetaData:1 Connection: close Ответ: HTTP/1.0 200 OK Content-Type: audio/mpeg icy-br:128 icy-description:Server.FM icy-genre:Public Radio icy-name:Server icy-pub:1 icy-url:http://server.fm Server: Icecast 2.3.2 Cache-Control: no-cache icy-metaint:16000 Ну а дальше уже идут блоки данных по 1400-1460 байт. Т.е. обычный http, считывать все это не составит труда, но как это отдать проигрывателю и как достать всю интересующую информацию? Название трека и т.п. Подскажите описание всему этому делу?


    Ответ

    Может пригодиться: Radio-T Client Custom Audio Streaming with MediaPlayer

    Как создать и установить службу Windows при помощи WinApi на C/C++

    У меня есть задача создать службу Windows при помощи WinApi и ее установщик на C/C++. Это должен быть Win32-проект. Буду очень признателен, если кто-нибудь прольет свет в этом вопросе.


    Ответ

    Служебные приложения Windows Создание своего Windows Service Создание службы Windows с помощью программы sc.exe A Windows Service Application Google лучше всех проливает свет. )

    Работа с DLL, способы вызова функций

    У меня очень "новичковый" вопрос (никогда в жизни не работал с DLL) и состоит он в следующем: У меня есть 3 файла f1.c f2.c f3.c. В каждом из них вот по таким функциям: // f1.c int f1() { return 2; }
    // f2.c int f2() { return 4; }
    // f3.c int f3() { return 10; } потом я получил три отдельных объектных файла, с помощью команды (использую mingw по windows): gcc -c f1.c f2.c f3.c и далее я создаю DDL-ку, командой: gcc f1.o f2.o f3.o -o test1.dll -shared получился файл test1.dll С помощью DLL Export Viewer я открыл и посмотрел свой DLL файл: Как я теперь могу динамически или статически (вот это я еще плохо понял) обращаться к этой библиотеки, для вызова функций f1(), f2() ( а если бы в функции были бы параметры входные? ) например из своего C++ приложения? Что я вообще могу делать с этим файлом? Извиняюсь за немного глупый вопрос


    Ответ

    Случайно удалил свой ответ, что смог восстановил. Давно уже не работал, там все очень просто, разбираться не сложно, примерно так: если динамически, загружаете dll, получаете ссылку на функцию по имени (напр. "f1"), используете функцию по ссылке; если статически, подключаете библиотеку к проекту, объявляете внешнюю функцию и сразу можно вызывать в программе. В обоих случаях надо знать прототип функции. Более подробно см.: http://www.firststeps.ru/mfc/winapi/r.php?22 http://www.firststeps.ru/mfc/winapi/r.php?41 Надо еще разобраться с методами вызова функций: http://ru.wikipedia.org/wiki/Соглашение_вызова

    Вызов конструктора из класса

    В языке программирования Java конструктор класса из него самого можно вызывать с помощью конструкции: this(<список параметров>) Есть аналог в C#? Заранее спасибо! P.S.1: Зачем это нужно? Можно оч. удобно перепрыгивать между конструкторами избегая лишнего кода. В любой момент можно "обнулить" экземпляр вызвав конструктор по-умолчанию. P.S.2: Создавать отдельную функцию, выполняющую роль конструктора и вызывать ее(как это часто делают в С/С++) не предлагать.


    Ответ

    да, конечно есть: class Territory//Класс описывает логику игры { ... //Конструкторы класса public Territory(Point size) : this(size.X,size.Y) { }
    public Territory(int width, int hight) { _size = new Point(width, hight); Clear(); } ... } ещё можно добавить пустой конструктор: public Territory() : this(new Point())//или this(0,0) { }

    Плагин jquery. Создание нового метода для элемента.

    Народ, признаюсь честно: я ничегошеньки не понял в создании плагинов к jquery. мне стыдно, но надо исправляться. В теме кратность-значений-в-input я создал внутренности метода для изменения инпута. Подскажите, пожалуйста, как ЭТО превратить в
    $("SELECTOR").correct_value(quantity_per_pack);
    Чтобы работало с любым инпутом.


    Ответ

    Посмотрите ссылку, разберите пару плагинов. Если окажется мало, я попробую расписать подробнее. =) Добавлено

    eeeee

    eeeee

    eeeee


    Добавлено еще 1) Через $ работать тоже будет. Но для совместимости с другими библиотеками лучше использовать jQuery ($ - это псевдоним, его можно переопределить). 2) var opts = jQuery.extend(defObj, options); Из defObj jQuery сама перетягивает пары ключ:значение в options, если таких ключей нет в options. Доступ к свойствам opts осуществляется через opts.param или opts['param']. 3) options задается при вызове функции, а defObj пишется разработчиком. Все параметры являются необязательными, но если без каких-то из них ваш плагин не будет работать, их придется задать в defObj.

    Принцип многопоточности в Java

    Здравствуйте. Не могу разъяснить для себя принцип организации и работы потоков в Java. Постараюсь вкратце объяснить суть проблемы. Есть класс MyClass public MyClass { public void method1(int n) { int c = method2(n); // Ещё что-то } public int method2(int n) { // что-то делает } } Создаю единственный экземпляр этого класса под названием myObject. Создаю Runnable, в который передаю ссылку на мой объект и в run() выполняю следующие действия: public void run() { while (true) { myobject .method2(someInt); } } После чего запускаю несколько потоков с этим Runnable. Обратите внимание, что методы не синхронизированы, вообще ничего не синхронизировано. Первый поток заходит в метод1 и вычисляет С = С1, после чего вытесняется, после этого в метод1 заходит второй поток, считает С= С2 и вытесняется. После этого просыпается первый поток и продолжает выполнение метода1, чему будет равно значение C для продолжающегося потока #1?


    Ответ

    C1. Ведь C - локальная переменная. PS: разумеется, если method2 не имеет побочного эффекта, а то иначе сам процесс вычисления c будет подвергнут гонке. И кстати этот вопрос не по организации потоков в Java, а вообще многопоточности.

    Схожие css-свойства

    visibility: hidden; display: none; opacity: 0.0; В чем разница между этими css свойствами?


    Ответ

    visibility:hidden прячет еллемент, но он по прежнему может участвовать в расположении html елементов, т.е. он есть но его не видно. opacity:0.0 примерно тоже самое, только к тому-же свойство CSS3 т.е. не является кроссбраузерным. diplay:noneелемент не отображается и никак не влияет на отображение видимых елементов.

    Ajax запрос для HttpContext

    Создаётся ли новый экземпляр HttpContext.Current.Items при Ajax запросе (Ajax с использованием __doPostBack() из JavaScript)? Т.е. если в предыдущем ajax-запросе Items что-то содержало, то будет ли Items содержать это что-то при новом ajax-запросе?


    Ответ

    HttpContext.Items - коллекция, сохраняющаяся в пределах одного запроса (не важно: обычного, PostBack или Ajax). Между запросами элементы не сохраняются. Если нужно сохранить данные между запросами, воспользуйтесь HttpContext.Session

    Как извлечь дробную часть из числа на sql в oracle?

    Как извлечь дробную часть из числа на sql в oracle?


    Ответ

    Все просто: select mod(12.345, 1) from dual; выдаст 0.345

    Алгоритм оптимального раскроя линейных материалов

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


    Ответ

    Эта задача в англоязычной литературе носит название Cutting stock problem и является одной из разновидностей задачи о рюкзаке, когда рюкзаков несколько. Решать можно по-разному - динамическим программированием или приблизительными эвристиками. Эвристическое решение вам, судя по всему, не подходит (нужно точное решение), поэтому стоит смотреть в сторону динамики.

    Кроссбраузерная автоматическая печать изображения (решено)

    Задача: сделать на сайте так, чтобы графический файл автоматически отправлялся на принтер. Сама печать легко запускается через window.print(), но при этом распечатанный результат получается разного размера из разных браузеров: из IE печатается, как и задумано, на весь лист А4, из Firefox картинка занимает меньше четверти листа, из Opera и Chrome — нечто среднее. Пробовал устанавливать размер картинки через CSS, указывая в качестве единицы измерения дюймы (in) — не помогает. Как сделать, чтобы рисунок печатался на полный лист из любого браузера? UPD: Решил проблему, установив для рисунка width:100% через css media=print


    Ответ

    Браузеры практически не дают управлять параметрами печати. Для Опреы и Хрома можно указать отступы в CSS: @media print{ @page: {margin: 0%} } Остальные браузеры это игнорируют, подставляют значения, указываемые пользователем (или по дефолту). То же касается колонтитулов - полностью пользовательская настройка. А так печать картинки при выставленных одинаковых параметрах отступов, колонтитулов и галки "по ширине страницы" печатается одинаково. Устанавливайте картинке width:100% в правилах для @media print, дальнейшее будет зависеть от пользователя.

    Разрешение зависимостей для орграфа с циклами

    Балуюсь, хочу сделать транслятор из BNF в код-грамматику для LEPL. Парсер написал, код для отдельных правил генерируется, но дальше подзастрял с порядком правил.
    Есть набор правил, ссылающихся друг на друга. Зависимости можно просто представить в виде орграфа, в котором есть циклы:

    Нужно разрешить зависимости относительно заданной вершины, получив список, в котором следует записывать правила так, чтобы последующие правила уже «видели» все требуемые им предыдущие. Если возникает цикл — нужно перед первым употреблением поместить «предварительную декларацию.» Т.е., для примера графа выше, если, упрощая, считать, что вершины содержат просто строки, получить что-то в духе:
    >>> deps_dict = { ... "A": {"B", "C"}, ... "B": {"D", "E"}, ... "C": {"A", "E"}, ... "E": {"E", "D"} ... } >>> resolve_deps(deps_dict, "A") [ "D" # {} Predeclare("E"), # ref'd by {E, B} "E" # {D, E} "B" # {D, E} Predeclare("A"), # ref'd by {C} "C" # {A, E} "A" # {B, C} ]
    (То, что это не единственный вариант удовлетворяющего условиям результата — понятно.)
    Положение в списке предварительных деклараций не очень важно — в худшем случае, можно их вытащить наверх, хотя лично мне хочется размещать их не раньше самого необходимого (т.е. перед первой отсылкой).
    Если бы циклов не было — все было бы, вроде как, понятно — про топологическую сортировку я нашел и почитал. Но как справиться с циклами — честно говоря, пока не соображу.


    Ответ

    Поскольку БНФ оперирует контекстно-свободными грамматиками, то самое простое - это использовать соответствующий раздел теории синтаксического анализа. Самое неприятное, что может быть в произвольно взятой КС-грамматике G - это левая рекурсия, которая, нестрого говоря, делает грамматику G недетерминированной.
    При этом шаги алгоритма избавления от левой рекурсии включают в себя избавление от циклов. Поскольку вы, судя по всему, пытаетесь достичь детерминированности соответствующей грамматики, то лично я рекомендовал бы сразу же заимплементировать алгоритм избавления от левой рекурсии.
    Простое описание подхода избавления от левой рекурсии можно найти здесь, более же обзорная публикация по разным алгоритмам избавления от левой рекурсии расположена тут.
    Если вы действительно знаете, что делаете и хотите только избавиться от циклов, то воспользуйтесь только шагами (1) и (2) из публикации Eliminating left-recursion: three steps
    Из дополнительных референсов могу порекомендовать пост Эрика Липперта по поводу CFG и циклов в них вообще, а также набор хороших презентаций по теории формальных языков.

    Двоичный циклический сдвиг

    Здравствуйте, друзья. Подскажите, пожалуйста, оптимальный способ реализации двоичного циклического сдвига (вращения) 32-разрядного значения влево на 11 разрядов на языке МК-61.


    Ответ

    Встроенные битовые операции тут не помогут, т.к. нет даже нециклического сдвига. Поэтому делаем в десятичной системе: в одном из регистров старшие 16 бит, в другом - младшие. Из старших 16 бит отделяем левые 11 бит (делением нацело на 2 в 5 степени), запоминаем. Остальные 5 бит тоже отделяем (для этого надо как-то остаток от прошлого деления получить), умножаем на 2 в 11 степени. Из младших 16 бит точно так же выделяем старшие 11 бит, прибавляем их к старшему байту. Остаток опять же умножаем на 2 в 11 степени, прибавляем те 11 бит, которые сохранили в самом начале.

    Отношение к работе программистом [закрыт]

    Добрый вечер! В последнее время меня всё сильнее стал интересовать следующий вопрос: почему для людей возрастной категории (от 50 и выше) перспектива работы программистом не расценивается, как серьёзная профессия? То есть, если им сказать: "Я хочу работать программистом" или "Мне нравится заниматься программированием и зарабатывать этим на жизнь" - для людей вышеуказанной возрастной эти фразы практически эквивалентны какому-то лентяйству... Мне не совсем ясна эта реакция. Интересно, почему по-вашему работа даже младшим специалистом технической поддержки, меняя картриджы и устанавливая оргтехнику, кажется людям в возрасте намного перспективнее, нежели чем работа программистом (в любой сфере, кроме, скорее всего, 1С-разработчика)? P.S. @avp, так как вопрос уже закрыт модератором, я не могу ответить на Ваш вопрос. конечно это были люди не из IT-сферы. Опрос вызвал неоднозначную реакцию, что, скорее всего, вызвано тем, что именно я изложил суть вопроса не так. вообще тема интересная для обсуждения, но не совсем удачно мной сформулированная.


    Ответ

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

    среда, 27 февраля 2019 г.

    Android in-app billing: как проверить статус покупки?

    Я пытаюсь использовать сервис покупок внутри приложений. Проблема состоит в том, что я не знаю как проверить, куплен ли данный предмет на данном аккаунте. Это нужно на тот случай, если пользователь сменит телефон или сделает хард-ресет, и т. п. Мне нужно узнать статус предмета (куплен и ли не куплен) именно из плей маркета, а не с локальной базы данных. Так же я использую robotmedia / AndroidBillingLibrary для упрощения процесса.


    Ответ

    Воспользуйтесь опцией RESTORE_TRANSACTIONS. Позволяет получить историю операций/покупок клиента - по сути выдергивает записи из Play Market'а

    Компиляция скрипта на Java SE7 в Sublime Text 2

    Как скомпилировать скрипт на Java SE7 в Sublime Text 2?
    Как там настроить компилятор под Java?


    Ответ

    Я все таки рекомендую использовать eclipse/idea/emacs/vim. Но если сильно-сильно хочется... В принципе ничего не нужно настраивать - все уже есть. После того, как откроете свой жава файл, просто зайдите в меню Tools-> Build System и убедитесь, что там выбрано JavaC. Если нет - выбирайте. Все, теперь можно жать Ctrl+B и саблим запустит javac для компиляции. Установить жаву конечно же нужно. И настроить, что бы она была в путях. На моем ноуте под Fedora все завелось сразу.

    Клонирование лицензионной Windows 7 Starter

    Имею 10 идентичных машин с предустановленной лицензионной Windows 7 Starter. При первом запуске машины, получаю уже активированный Windows, т.е. лиц. ключ не надо вводить. Образ системы уже активированный лежит на жестком диске машины. Задача, установить и настроить софт на одной машине, затем клонировать образ системы на другие 9 машин. Вопрос, как произвести переактивацию Windows или сменить ключ в системе на склонированных машинах?


    Ответ

    Вопрос решился. Чтобы удалить ключ из системы надо запустить командную строку(cmd.exe) от имени администратора и в ней пишите: slmgr.vbs /upk Эта команда удалит ключ из системы. Затем можно перезагрузить систему и пройти процедуру ввода ключа и активации. Но можно еще написать: slmgr.vbs /ipk [ваш лицензионный ключ] ` Эта команда добавит ключ в систему, после перезагрузки, нужно будет только активировать систему ` символы "[" и "]" писать необязательно ps: вопрос можно закрывать

    Как сделать скриншот главной страницы сайта?

    Как сделать скриншот главной страницы сайта не используя никакие сторонние сервисы?


    Ответ

    запустить виртуальную машину с нужной ОС и браузером, выполнить скрипт, который зайдёт на нужный сайт и сделает скриншот — так работают сервисы по оскриншочиванию во всех моделях браузеров, включая вымершие версии; Adobe Air простое приложение, в нём банально компонент браузера, и снятие копии его же экрана в файл.

    Использовать ли “use strict”? [дубликат]

    На данный вопрос уже ответили: Что значит “use strict”? 2 ответа Доброго времени суток. Есть ли сейчас смысл использовать выражение "use strict" и какие вкусности он дает?


    Ответ

    "use strict" допустим помогает избежать случайного пропуска new или var, или в таких случаях var func = function(){ this.value = 'value'; var a = function(){ console.log(this.value); } a(); } new func(); "проблем" с this, но почему-то у меня получается избежать этого самостоятельно, возможно потому что изначально поставил за правило использовать new, var, точки с запятой и не использовать eval и with

    Структура таблицы в БД (денормализация)

    В рамках базы данных (в данном случае - PostgreSQL, но это не суть) есть несколько небольших таблиц, которые содержат практически неизменяемые, но очень часто используемые данные: группы страниц (pagegroups), страницы (pages), шаблоны (templates), позиции на страницах (positions), модули (modules), группы пользователей (usergroups). В каждой из таблиц есть поля ID, название, алиас и порядок показа. Между данными есть связи: группы пользователей имеют разные права доступа, модули могут встречаются на разных позициях разных страниц, каждой странице может быть задан свой шаблон, шаблон состоит из позиций (header, sidebar_left, canvas, sidebar_right, footer), которые могут отображаться или нет и т.п. (список связей должет остаться открытым) Хочу свести все данные в одну таблицу, где представить данные в виде "ключ/значение". Сломал всю голову. Пример базы (PostgreSQL): CREATE TABLE core ( id serial primary key, level int, group int, parent int references core, key text, value text ); Фрагмент данных: INSERT INTO core (id, level, group, parent, key, value) VALUES (1, 0, 1, 0, 'type', 'coreelements'), (2, 0, 1, 0, 'name', 'Компоненты системы'), (3, 1, 2, 1, 'type', 'page'), (4, 1, 2, 1, 'name', 'Страницы'), (5, 1, 2, 1, 'order', ''), (6, 1, 3, 1, 'type', 'template'), (7, 1, 3, 1, 'name', 'Шаблоны'), (8, 1, 3, 1, 'order', ''), (9, 1, 4, 1, 'type', 'position'), (10, 1, 4, 1, 'name', 'Позиции'), (11, 1, 4, 1, 'order', '18,19,20,21,22'), (12, 1, 5, 1, 'type', 'module'), (13, 1, 5, 1, 'name', 'Модули'), (14, 1, 5, 1, 'order', ''), (15, 2, 18, 4, 'name', 'Шапка'), (16, 2, 18, 4, 'alias', 'header'), (17, 2, 19, 4, 'name', 'Рабочая зона'), (18, 2, 19, 4, 'alias', 'canvas'), (19, 2, 20, 4, 'name', 'Левый сайдбар'), (20, 2, 20, 4, 'alias', 'sidebar_left'), (21, 2, 21, 4, 'name', 'Правый сайдбар'), (22, 2, 21, 4, 'alias', 'sidebar_right'), (23, 2, 22, 4, 'name', 'Подвал'), (24, 2, 22, 4, 'alias', 'footer'); Помимо общего вопроса о структуре таблицы смущает меня вот что: В необходимости поля level не уверен, убрать? Поскольку родитель и зависимые записи имеют по несколько пар "ключ/значение", как организовать связь? по ID, по group или третьим способом? Иными словами, что должно быть в поле parent? Как связать, скажем, страницы, модули и шаблоны? Пример к последнему вопросу: Страница 'settings', в header имеет модуль 6, в canvas - модули 1, 3 и 2, в остальных - ничего. Вполне допускаю, что после того, как такая таблица получится, вернусь к первоначальному - нормализованному - варианту. Но поскольку есть возможность попробовать разные варианты - хочу попробовать и этот тоже.


    Ответ

    Нафиг такую структуру. Разным сущностям - разные таблицы! Что за извращенное стремление впихнуть все в одно? Даже если сейчас Вы чудом это все слепите так, чтобы работало, в будущем будут большие проблемы с масштабированием и изменением каждой сущности.

    Работа с кассовым апаратом

    Требуется написать программу для работы с кассовыми аппаратами (хотя бы печать чека). Подскажите в какую сторону копать. Есть ли программные эмуляторы кассовых аппаратов для отладки такого рода программ?


    Ответ

    Для каждого торгового оборудования у разных производителей свои драйвера. Самые распространенные регистраторы - Штрих-М. Идем на сайт, находим свой регистратор, качаем драйвера. Есть еще АТОЛ, тоже популярны довольно. Доступ к драйверу идет через COM, в комплекте с драйверами есть примеры для 1C, delphi и билдера.
    По поводу эмуляторов, то скорее всего нет. В любом случае проверять надо на реальном аппарате, т.к. в самом регистраторе существуют настройки - кассиры, отделы, виды оплаты, строки для печати в начале и в конце чека... Обычно тестируют на нефискализованном аппарате (стоимость штрихов, например, от 14к рублей), затем фискализуют его просто.
    UPD Пару лет назад сделал класс для Delphi для работы с разными ККМ. uKKMClass.pas. Там же реализация для регистратора Феликс-РК. Печать чека, снятие отчетов и т.д.

    Php socket write => java socket write

    В пхп эта строка выглядит так: fwrite($socket, "\xFE\x01"); Нужно выполнить это же действие на Java. Не знаю, что передать вместо something методу writeBytes(something). p. s. есть writeChars(string), writeChar(char), если нужно.


    Ответ

    String charsetName="UTF8"; // или какая там кодировка на выходе вам нужна OutputStream ous=socket.getOutputStream();
    byte[] bytes = string.getBytes(charsetName); ous.write(bytes); Если вам много строк передавать, то Writer ouw = new BufferedWriter(new OutputStreamWriter(ous, charsetName)); ouw.write(string, 0, string.length()); но только не совмещайте эти 2 способа записи - если вы передали OutputStream ous в конструктор OutputStreamWriter, то не пользуйтесь ous напрямую.

    Оператор & в функциях и const

    Немного подзабыл C++ , а может просто раньше и не сталкивался с этим, но на вид всё очень легко. Просто прошу напомнить следующее (можно в кратце, я всё понимаю, но вспомнить не могу, а гугл не воспринимает символ & в поисковой строке): const после метода, насколько я знаю, означает защиту значений *this, а что значит const перед методом? Что значит оператор "&" в шаблонном типе? Это ведь оператор взятия адреса, здесь он причем? Правильно ли я понял, что "=0" в конце означает, что это pure метод? Если так, то зачем ему реализация в данном классе, если этот класс абстрактный, а сам метод будет переопределен в дочерних классах? Или я что-то путаю? Не люблю код, в котором опущены кавычки, вот и запутался... Заранее спасибо! Вот, кстати, и сам код :) template < class UnknownType > class MyClass { public: virtual const UnknownType& method() const throw () = 0; };


    Ответ

    всё просто UnknownType& это тип: ссылка на UnknownType а const для того чтобы нельзя было изменить то что возвращается да это pure метод, вот только вы не показали что там есть реализация

    Возможно ли создание ЧПУ?

    Возможно ли создание ЧПУ на пхп(связь с БД) без внесения изменении в htaccess? Есть примеры?


    Ответ

    Вообще без .htaccess практически не возможно. Исключение - вы сконфигурируете свой сервер соответствующим способом. Хотя не думаю, что это легкий выход из положения. А вот избежать лишней головной боли с mod_rewrite можно. Я уже говорил тут об этом, но не могу найти этот пост, поэтому вкратце повторюсь. Создается правило, с помощью которого все запросы перенаправляются на морду, если директории или файла не существует физически на сервере. Например, так: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L] Теперь, вы ловите такие запросы в php: $request = $_SERVER['REQUEST_URI']; Разбираете полученную строку "на запчасти": по слешу для определения основных частей URI, учитывая окончание, если допустим адрес может быть /some_path/page.html и в зависимости от полученных данных, выводите ту или иную информацию.

    Поиск перекрестных совпадений с помощью регулярных выражений

    Добрый вечер. Понимаю, что вопрос очень глупый, но голова уже не варит. Да, начинается время зачетов :) Для N-ной лабы по матстату нужно посчитать количество вхождений подстроки в строку. Банальщина. Чтобы эту банальщину хоть как-то приукрасить, пишем extension method для string: public static int P(this string baseStr, string inputStr) { return new Regex(inputStr).Matches(baseStr).Count; } Для справки - в задании строка из N 0 и 1, первым этапом надо посчитать вероятности появления пар в строке. Собственно, мой глупый вопрос: почему описанный метод, вызванный от строки "1111" возвращает 2? Ну не могут же регулярки последовательно считать... UPD: пример вызова метода: string data = "1111"; Console.WriteLine(data.P("11")); //2


    Ответ

    Всё верно: в строке 1111 всего два вхождения подстроки 11. Регулярные выражения анализируют текст слева направо. При совпадении внутренний "курсор" (индекс) устанавливается на его начальную позицию. Следущее совпадение система начинает искать с позиции, находящейся сразу после текущего совпадения. Таким образом, перекрёстные совпадения невозможны при использовании обычных шаблонов.
    Как верно заметил ReinRaus, необходимо воспользоваться механизмом опережающей проверки, т.е. конструкцией (?=...), которая используется для проверки того, что следует после текущей позиции в строке. Несмотря на то, что такие блоки не "поглощают" текст при совпадении (т.е. при нахождении подстроки индекс остаётся на прежнем месте во входной строке), внутри них возможно использование захватывающих подмасок типа (...)
    Тут мы подходим к решению проблемы:
    string data = "1111"; string sub = "11"; Console.WriteLine(data.P(string.Format("(?=({0}))", Regex.Escape(sub)));
    Здесь пример использования данного подхода

    Как сделать визуализатор аудио на js?

    Надо сделать визуализатор музыки: столбцы, высота которых бы менялась в зависимости от частоты. Как это сделать на js?


    Ответ

    Да тут вообще много всего понаписано. Попробуйте например dancer.js, даже есть по настоящему красивые результаты
    Можете посмотреть здесь куча рекомендаций

    Алгоритм нарезки прямоугольника на равные меньшие прямоугольники

    Дан исходный прямоугольник N×M. Задача: определить сколько раз можно полностью "уложить" (ориентация любая) меньший прямоугольник n×m в исходный. Возможно, для будущих ходоков будет интересно КАК. Спасибо.


    Ответ

    Задачка решается просто. Если нужен ответ на вопрос КАК // Возвращает массив расположения блоков [ { x, y, w, h } ] function calc(W, H, w, h) {
    var hor = pack([], W, H, w, h, 0, 0); var ver = pack([], W, H, h, w, 0, 0);
    // сортировка блоков в порядке сверху-вниз, слева-направо // если не планируется нумеровать блоки - можно удалить return (hor.length >= ver.length ? hor : ver).sort(function(a, b) { return (a.y - b.y) || (a.x - b.x); });
    function pack(pieces, W, H, w, h, x0, y0) { var x, y; var nx = W / w | 0; // число блоков, умещающееся по ширине var ny = H / h | 0; // по высоте var n = nx * ny; // всего for (y = 0; y < ny; y++) for (x = 0; x < nx; x++) { pieces.push({ x: x0 + x*w, y: y0 + y*h, w: w, h: h }); } if (W % w >= h && H >= w) { // осталось полезное место справа pack(pieces, W % w, H, h, w, x0 + nx*w, 0); } else if (H % h >= w && W >= h) { // осталось полезное место снизу pack(pieces, W, H % h, h, w, 0, y0 + ny*h); } return pieces; }
    } Если нужен ответ на вопрос СКОЛЬКО // Возвращает число блоков function calc(W, H, w, h) {
    return Math.max(pack(W, H, w, h), pack(W, H, h, w));
    function pack(W, H, w, h) { var n = (W / w | 0) * (H / h | 0); if (W % w >= h && H >= w) { n += pack(W % w, H, h, w); } else if (H % h >= w && W >= h) { n += pack(W, H % h, h, w); } return n; }
    } Демо: http://jsfiddle.net/RHq23/

    Применить функцию ко всем дивам в блоке

    Сразу скажу чтобы в дальнейшем не было вопросов. Вроде "А что так уже не делают?!, разве нельзя просто сделать вот так?! и т.д". В js я полный нуб. И естественно сформировать свой вопрос я не могу(Так сам бы нагуглил)
    В чем весь сабж. Есть код
    $(document).ready(function() { var margin = $("#image1").width() / 2; var width = $("#image1").width(); var height = $("#image1").height(); $("#image2").stop().css({ width: '0px', height: '' + height + 'px', marginLeft: '' + margin + 'px', opacity: '0.5' }); $("#reflection2").stop().css({ width: '0px', height: '' + height + 'px', marginLeft: '' + margin + 'px' }); $("#image1").mouseover(function() { $(this).stop().animate({ width: '0px', height: '' + height + 'px', marginLeft: '' + margin + 'px', opacity: '0.5' }, { duration: 500 }); window.setTimeout(function() { $("#image2").stop().animate({ width: '' + width + 'px', height: '' + height + 'px', marginLeft: '0px', opacity: '1' }, { duration: 500 }); }, 500); }); $("#image2").mouseout(function() { $(this).stop().animate({ width: '0px', height: '' + height + 'px', marginLeft: '' + margin + 'px', opacity: '0.5' }, { duration: 500 }); window.setTimeout(function() { $("#image1").stop().animate({ width: '' + width + 'px', height: '' + height + 'px', marginLeft: '0px', opacity: '1' }, { duration: 500 }); }, 500); }); });


    Сейчас все эффекты применяются только к первому диву vizitka(ко внутренним изображениям). А таких дивов на странице несколько. Как сделать, что бы функция применялась к каждому image1,image2 Которые лежат в vizitka. Я думаю нужно id поменять на класс...НО нужно что-то еще. Все мои попытки оказались тщетными(


    Ответ

    Пробуйте var doNicely = function (this_) { var $imgs = $('img', this_), $img1 = imgs.eq(0), $img2 = imgs.eq(1);
    var margin =$($img1).width()/2; var width=$($img1).width(); var height=$($img1).height();
    $($img2) .stop() .css({width:'0px',height:''+height+'px',marginLeft:''+margin+'px',opacity:'0.5'});
    $("#reflection2") .stop() .css({width:'0px',height:''+height+'px',marginLeft:''+margin+'px'});
    $($img1).mouseover(function(){ $(this) .stop() .animate({width:'0px',height:''+height+'px',marginLeft:''+margin+'px',opacity:'0.5'},{duration:500}); window.setTimeout(function() { $($img2) .stop().animate({width:''+width+'px',height:''+height+'px',marginLeft:'0px',opacity:'1'},{duration:500}); },500); }); $($img2).mouseout(function(){ $(this) .stop() .animate({width:'0px',height:''+height+'px',marginLeft:''+margin+'px',opacity:'0.5'},{duration:500}); window.setTimeout(function() { $($img1) .stop() .animate({width:''+width+'px',height:''+height+'px',marginLeft:'0px',opacity:'1'},{duration:500}); },500); }); }
    $(document).ready(function () { $('.vizitka').click(function () { doNicely(this); }); });

    Завис Sublime Text 3 при работе с внушительным php файлом при сохранении

    Собственно, вопрос, что делать? Кто виноват — понятно. Есть ли возможность спасти скрипт? Может, у Сублайма есть местечко, куда он сохраняет временные файлы? Или другие варианты? ОС — Ubuntu 14.04.


    Ответ

    Вопрос решился. Сперва полез смотреть где бы subl мог хранить сессии. Обнаружил их в домашней папке пользователя в каталоге /home/user/.config/sublime-text-3/local. В файле *.sublime_session. Открываю и вижу JSON массив. И, о чудо, вижу знакомый код. Правда идет он одной строкой и символы конца строки проставлены как /n. Отлично, скопировав, решил уйти в ребут, т.к. субл намертво завис и закрываться не хотел даже через htop. После ребута открыл subl и случилось самое величайшее во всей этой истории - последний экземпляр кода висел как несохраненная вкладка. Спасибо команде Sublime! Обновление Ах и еще вот что https://github.com/akalongman/sublimetext-autobackups. Замечательный антисединный плагин.

    Длина соли и длина выходной стройки алгоритма blowfish

    Здравствуйте. В мануале php сказано, что Blowfish-шифрование использует соль след. формата: "$2a$", весовой параметр из двух цифр, "$" и 22 цифры из алфавита "./0-9A-Za-z" . Но на деле вместо 22 у меня почему-то используется только 21 символ. $var = "1111111111111111111112";//22-й символ помечен двойкой
    echo strlen($var);//выводит 22
    echo crypt("12345", "$2a$11$".$var);// выводит $2a$11$111111111111111111111uDWduZDJM79lPV0duPxKCR2XEmS5ly2q Как видно 22-й символ обрезался и не попал в соль. Вопрос1: Как объяснить выше описанное поведение? Вопрос2: У меня на php длина выходной строки (хэша с солью) всегда равна 60 байт (ну или 60 символов латинского алфавита). Это общий стандарт? стандарт php? Если да, то где описан? Спасибо.


    Ответ

    Соль задается из алфавита "./0-9A-Za-z" (64 символа), т.е. каждый символ представляет из себя 6 бит. Это напоминает кодировку BASE64. Вы задаете 22 символа это 22*6 = 132 бита. Для Blowfish соль используется 128 бит из-за этого последние 4 бита не используется. Когда выводится результат, то 128 бит также дополняются 4 нулевыми битами, т.е. от последнего символа остается только 2 старших бита. В вашем примере: 2 (111000) -> u(110000), т.е. последний символ Вы можете задавать любой с точность до 2-х старших битов и это не будет влиять на хэш.

    Как продолжить выполнение цикла, если словили исключение?

    Здравствуйте. Имеется вот такой цикл. String s; while ((s = in.readLine()) != null) { System.out.println(s); } Метод readLine() бросает IOException. Я могу конечно обернуть весь цикл в try-catch, но тогда при возникновении исключения цикл прервётся. Могу в методе, в котором находится этот код дописать throws IOException, но всё равно цикл прервётся. А как сделать, чтобы не прерывался? Неужели только так? String s; while (true) { try { s = in.readLine(); } catch (IOException e) { System.out.println(e); } if(s == null) {break;} System.out.println(s); } Это же как-то не красиво..


    Ответ

    Да, только так. Если вас смущает конструкция try/catch внутри цикла, можете вынести её в отдельный метод, не бросающий исключений, и глушить исключения там: public void doSth() { // ваш код
    String s; while (true) { s = readNextLine(in); if(s == null) {break;} System.out.println(s); }
    // ваш код }
    private String readNextLine(Reader in) { String s; try { s = in.readLine(); } catch (IOException e) { System.out.println(e); } return s; }

    Как программно определить, размыто ли изображение?

    Доброго времени суток. Как программно определить, размыто ли фото? Нужно определить, размыто ли фото, и если да, то не дать отправить его на сервер. Возможно, есть какие-то библиотеки или готовые решения? Заранее спасибо.


    Ответ

    Для этого применяется т.н. алгоритм преобразования Фурье - для обыденного понимания достаточно рассматривать это как разложение сигнала на набор синусоид (сейчас закидают тапочками математики...). Изображение надо рассматривать как двумерный сигнал и, соответственно, разложить его в двумерный ряд Фурье, полученный сигнал проанализировать. В реальных вычислениях применяется дискретное преобразование Фурье - принято обозначать это как FFT - Fast Fourier Transformation. Если в сигнале слишком мало высокочастотных компонент, значит изображение размыто. Что такое слишком много или слишком мало - устанавливайте сами. Для упрощения анализа опять-таки принято полученный сигнал (а по сути новый битмап) проинтегрировать (например, Лапласом) и получить одномерный вектор, который-таки более удобен для анализа. В общем, как-то так. Гуглите по ключевому слову FFT+Java - авось повезет.

    Создание Android приложений. Sockets

    Здравствуйте. Возникла проблема использования сокета. Вот отдельный от проекта файл Client.java, который служит для проверки соединения в консольном режиме:
    import java.net.Socket; import java.net.UnknownHostException; import java.io.*;
    public class Client { static AffableThread mSecondThread; public static void main(String[] args) { mSecondThread = new AffableThread(); mSecondThread.start(); } } class AffableThread extends Thread { @Override public void run() { System.out.println("Абракадабра"); try{ Socket socket = new Socket("127.0.0.1", 5555); }catch(UnknownHostException e){}catch(IOException e){} System.out.println("Подключайся любезнейший!"); } }
    Работает на ура, подключается к серверу без проблем. Но стоит мне распихать элементы этого кода по моему основному коду, то выдает ошибкy:
    > FATAL EXCEPTION: main > java.lang.NullPointerException


    Ответ

    Без логов ошибки сложно сказать, но вот мои предположения: Нет разрешения в манифесте на интернет Работа с сетью идёт в основном потоке (т.е. в onCreate() активити или фрагмента). Так с определённой версии андроида низзя. Надо делать в отдельном потоке. Например в Service или AsynkTask. Если всё же использовать Service, то надо про него почитать доки И делать как-то так: Создаём класс, расширяющий класс android.app.Service public class MyService extends Service { @Override public void onCreate() {
    }
    @Override public int onStartCommand(Intent intent, int flags, int startId) { //вот тут можно работать с сетью без проблем. return super.onStartCommand(intent, flags, startId); }
    @Override public void onDestroy() { }
    @Override public IBinder onBind(Intent intent) { return null; } } Теперь его надо прописать в манифесте: И наконец, теперь можно вызвать всё это из активити: Intent intent = new Intent(this, MyService.class); this.startService(intent);

    Mp3 аудио продолжает играть при переходе по страницам

    Есть скрипт, который проигрывает музыку на одной странице: Но при переходе на другую страницу сайта музыка обрывается и начинает играть с самого начала вместо того, чтобы продолжить играть дальше. Три часа поисков в гугле ничего не дали, кроме замечаний в разных блогах, что "музыка на сайте - это плохо". Вдобавок ко всему, когда закрываешь сайт на планшете, музыка продолжает играть! И исчезает только при перезагрузке! Как это понимать? Подскажите, пожалуйста, плагин для бесконечного проигрывания фоновой музыке, которая продолжается при переходе по страницам. Заранее спасибо!


    Ответ

    Судя по всему, у вас каждая страница подгружается самостоятельно. Т.е. при переходе между страницами каждый раз происходит загрузка страницы. Отсюда и сбрасывание текущего воспроизведения - плеер ведь не знает о том, что вы перешли между страницами. Для него каждая страница - это новое открытие страницы. Отсюда вывод: надо либо сказать плееру, что мы проигрывали через куки (не знаю, есть ли плеер, который это может), либо делать автоподгрузку страниц (т.е. использовать шаблоны). При использовании шаблонов у вас будет одна страница, контент которой меняется через AJAX-запросы. В таком случае ваш плеер можно будет расположить вне динамического контента, тогда он будет играть постоянно, даже при переходах между страницами. Но плагин, который привел я, вроде как имеет один недостаток: все страницы доступны только по одному адресу. Поэтому нельзя будет дать ссылки на разные страницы (например, на контакты, меню и т.д.) - все ссылки будут вести только на главную страницу. Но и это не проблема: некоторые плагины для jquery (и не только для него) поддерживают изменение строки браузера, при этом сам механизм работы остается прежним. Таким образом у каждой страницы будет свой собственный адрес (через хэштеги), но фактически работать вы будете по-прежнему с одной страницей. Т.е. ваш плеер будет продолжать играть без перерыва. Так, например, сделано у VK и OK. Насчет плеера, который через куки ловит, что надо проигрывать: не уверен, что такие вообще есть, т.к. в данном случае каждый раз при переходе между страницами придется загружать один и тот же аудиофайл (что не быстро). Даже если файл будет быстро загружен, то при переходе между страницами все равно будет заикание, т.к. в момент перехода текущий dom будет уничтожен, а новый с плеером еще не загрузился. А про фоновое воспроизведение на планшете: сам давно уже не работаю с html/js, поэтому точно не помню. Вроде как страница не закрывается, а просто сворачивается, поэтому воспроизведение и продолжается. Все, что надо, - ловить момент сворачивания и ручками останавливать воспроизведение, при разворачивании - продолжать воспроизведение. Хотя еще раз - уже давно не работал с этим, может быть, там какие-то другие особенности.

    Как питоном загрузить ресурс из jar файла?

    Всем привет. Я в python/jython новичок. Возникла проблема: надо загрузить файлы из определенного каталога. Локально, никаких проблем for name in glob.glob("%s/*.json" % some_path): log.debug(name) definition = json.loads(file(name).read()) Проблемма вот в чем: основная аппликация на java распространяется как jar(s), и все ресурсы тоже сидят в jar'e. Путь к папке ресурсов определяется в jave: URL resourceURL = CommonMethods.class.getClassLoader().getResource(resourceName); String resourcePath = resourceURL.getPath(); String dirPath = resourcePath.substring(0, resourcePath.lastIndexOf("/")+1); Если ресурс в jar'e, то получаем dirPath="file:/opt/lib/core-lib-1.0.jar!/rulz/" И glob.glob() не работает, думаю, что file(name).read() тоже. :( Подскажите, как читать файлы питоном из jar'a?


    Ответ

    А вот так не подойдет?
    def show_jar_classes(jar_file): """prints out .class files from jar_file""" zf = zipfile.ZipFile(jar_file, 'r') try: lst = zf.infolist() for zi in lst: fn = zi.filename if fn.endswith('.class'): print(fn) finally: zf.close()
    То есть действуем так как-будто jar эквивалентен zip (взял здесь).

    Открытие ассоциированных с программой файлов в уже запущенном экземпляре программы (вместо запуска нового)

    Для того, чтобы открыть ассоциированный файл, программа проверяет при запуске были ли переданы в нее какие-либо параметры. Для простоты можно представить, что открывается текстовый файл.
    private static void Main(string[] args) { if(args != null && args.Length > 0) { string fileName = args[0]; // дальше что-то делаю с файлом } }
    Проблема в следующем. Если я открываю с помощью проводника очередной файл, то открывается новая копия программы, а мне надо, чтобы файл открывался в уже открытой копии, если она есть или открывал, если нет.


    Ответ

    Есть следующий способ запуска только одной сущности любого .NET приложения:
    При запуске создаем и пытаемся залочить мьютекс. Если это удалось -- это первый инстанс приложения. Если взять лок не удалось -- значит, наше приложение уже запущено (поскольку мьютекс является объектом ОС и шарится между всеми процессами). Если мы обнаружили, что приложение уже запущено, нам нужно передать сообщение (в вашем случае -- путь к файлу) запущенному процессу. Это можно сделать любым из способов межпроцессорного взаимодействия: сообщения Windows, веб-сервис и т.д. При любом выходе из приложения (нормальном или аварийном) не забываем освобождать мьютекс. Пример правильного использования мьютекса -- тут
    В случае Windows Forms приложения есть более простой способ, описанный на StackOverflow

    Слияние в GIT и командная работа

    Помогите, пожалуйста, разобраться с командной работой в Git. Пока работа настроена так: 2 программиста: 1 делает работу, другой проверяет.
    Тот который делает получает таски, для выполнения каждого таска создает новую ветку после после того как выполнил задание пушит эту ветку на сервер, сливает ветку со своим мастером делает новую ветку для таска и т.д.
    Проверяющий забирает ветки с сервера и делает проверку если все ок вливает их в мастер отправляет на сервер. Если сделаны ошибки возобновляет таск.
    Это все как-то коряво, я думаю можно сделать лучше, подскажите как, наведите на правильный путь!
    Сейчас проблемы возникают на этапе проверки при слиянии веток. Как можно слить только те комиты которые были сделаны в сливаемой ветке ?


    Ответ

    Как можно слить только те комиты которые были сделаны в сливаемой ветке ?
    В git под термином «ветка» (branch) подразумевается указатель на коммит, а не набор коммитов, как в некоторых других системах управления версиями файлов.
    Иными словами, это точка, а не отрезок
    Вам требуется перенести несколько коммитов (отрезок), а для этого нужно указать две точки
    К примеру: одобренная задача решалась в ветке task125, а предыдущая, пока не одобренная задача, решалась в ветке task124.
    Тогда для включения (в текущую ветку) одобренных коммитов (отрезка между этими двумя точками) можно использовать такую, например, команду:
    git cherry-pick task124..task125

    Свой атрибут/описание для public поля класса

    Есть у меня классы, у них открытые переменные. Я через reflection добираюсь до их значений для последующего отображения/изменения.
    По умолчанию - есть некоторый диапазон для изменения, условно -+20%.
    Но для некоторых переменных есть свои особенности: -10%/+20% или 0..100. Это исключения, они не многочисленны, но они есть.
    Мне хочется, когда буду перебирать переменные, чтобы можно было прямо в коде задать для переменной свой атрибут или не знаю как это называется - описание, которое я мог бы пропарсить:
    public int Length;
    // Min: 0. Max: 100 public int Size;
    [Range:20%] public int Weight;
    Чтобы было более наглядно: у Unity3D есть HideInInspector. Что-то похожее хочу сделать, но более информативно.


    Ответ

    Используйте для этого кастомные классы атрибутов, они для того и созданы, чтобы предоставлять мета-информацию об объектах в отражениях.
    Например, вот атрибут, позволяющий задавать диапазон для полей:
    [AttributeUsage(AttributeTargets.Field)] class RangeAttribute : Attribute { public int Percent { get; set; }
    public RangeAttribute (int percent) { Percent = percent; } }
    Задавать значение диапазона на поле можно так:
    class Foo { [Range(20)] public int Bar; }
    Ну а дальше — отражения:
    FieldInfo barField = typeof(Foo).GetField("Bar"); RangeAttribute barRange = barField.GetCustomAttribute(); int range = barRange != null ? barRange.Percent : 20; var foo = new Foo(); barField.SetValue(foo, 10);
    См.:
    Attributes Tutorial (MSDN) Writing Custom Attributes (MSDN) Creating Custom Attributes (MSDN)

    Статистика по вопросам, сгруппированная по меткам (Data.SE)

    Дано:
    Posts — сообщения двух типов: вопросы и ответы, связаны через ParentId, тип указан в PostTypeId (1 — вопрос, 2 — ответ). Вопрос закрыт, если ClosedDate is not null Вопрос отвечен, если AcceptedAnswerId is not null или есть ответ со Score > 0 Вопросы содержат счётчики AnswerCount, ViewCount, CommentCount — количество ответов, просмотров, комментариев. Tags — текстовые метки, связанные многие-ко-многим с вопросами через PostTags
    Требуется:
    Собрать статистику по вопросам, сгруппированную по меткам: сколько всего вопросов, сколько закрыто, сколько имеет хоть какой-то ответ, сколько отвечено. А также собрать статистику: сколько в среднем ответов, просмотров, комментариев. Статистика должна быть за некоторый временной период (например, за последние 8 недель, кроме последних 3 дней).
    Решение:
    declare @IncludeRecentWeeks int = 8 declare @ExcludeRecentDays int = 3
    declare @LastDate datetime = (select max(CreationDate) from Posts) declare @StartDate datetime = dateadd(week, -@IncludeRecentWeeks, @LastDate) declare @EndDate datetime = dateadd(day, -@ExcludeRecentDays, @LastDate)
    ;with
    Questions as ( select q.*, pt.TagId from Posts as q inner join PostTags as pt on pt.PostId = q.Id where q.PostTypeId = 1 -- question and q.CreationDate > @StartDate and q.CreationDate < @EndDate ),
    TagStats as ( select t.TagName as [Tag], ( select count(q.Id) from Questions as q where q.TagId = t.Id ) as [QuestionCount], ( select count(q.Id) from Questions as q where q.TagId = t.Id and q.ClosedDate is not null ) as [ClosedQuestionCount], ( select count(q.Id) from Questions as q where q.TagId = t.Id and q.AnswerCount > 0 ) as [AnsweredQuestionCount], ( select count(*) from ( select q.Id from Questions as q inner join Posts as a on a.ParentId = q.Id where q.TagId = t.Id and (a.Score > 0 or q.AcceptedAnswerId = a.Id) group by q.Id ) as _ ) as [UpvotedAnsweredQuestionCount], ( select sum(AnswerCount) from Questions as q where q.TagId = t.Id ) as [TotalAnswerCount], ( select sum(ViewCount) from Questions as q where q.TagId = t.Id ) as [TotalViewCount], ( select sum(CommentCount) from Questions as q where q.TagId = t.Id ) as [TotalCommentCount] from Tags as t )
    select top 50 Tag, QuestionCount as [Qs], format(1.0 * ClosedQuestionCount / QuestionCount, 'p') as [Qs Closed %], format(1.0 * AnsweredQuestionCount / (QuestionCount - ClosedQuestionCount), 'p') as [Qs with As %], format(1.0 * UpvotedAnsweredQuestionCount / (QuestionCount - ClosedQuestionCount), 'p') as [Qs with + As %], format(1.0 * TotalAnswerCount / QuestionCount, 'f') as [Avg As], format(1.0 * TotalViewCount / QuestionCount, 'f') as [Avg views], format(1.0 * TotalCommentCount / QuestionCount, 'f') as [Avg Cs] from TagStats order by QuestionCount desc
    Запрос на Data.StackExchange.com, где можно посмотреть результаты выполнения.
    Вопрос:
    В получившемся вопросе присутствует большое количество подзапросов, что вряд ли положительно сказывается на производительности. Можно ли оптимизировать запрос и избавиться от такого большого числа подзапросов?
    Предупреждение:
    Этот запрос — продукт технологий программирования SODD (Stack Overflow Driven Development) и CPDD (Copy-Paste Driven Development). SQL я не умею, поэтому любые замечания по качеству кода приветствуются.


    Ответ

    На самом деле разница если и получится, то не очень большая. Проблему составляет выборка "вопросы помноженные на метки", которые нужны все для сортировки и они занимают около 100% времени выполнения. Остальные операции занимают сущие копейки. Тем не менее, данные можно получить одним запросом (ну почти), код просто будет короче и местами быстрее:
    declare @IncludeRecentWeeks int = 8 declare @ExcludeRecentDays int = 3
    declare @LastDate datetime = (select max(CreationDate) from Posts) declare @StartDate datetime = dateadd(week, -@IncludeRecentWeeks, @LastDate) declare @EndDate datetime = dateadd(day, -@ExcludeRecentDays, @LastDate)
    select top 50 tagname Tag, cnt Qs, format(1.0*closed/cnt,'p') [Qs Closed %], format(1.0*answered/(cnt-closed),'p') [Qs with As %], format(1.0*accepted/(cnt-closed),'p') [Qs with + As %], format(avganswers, 'f') [Avg As], format(avgviews, 'f') [Avg views], format(avgcomments,'f') [Avg Cs] from ( select t.tagname, count(pt.postid) cnt, sum(iif(q.ClosedDate is not null,1,0)) closed, sum(iif(q.AnswerCount>0,1,0)) answered, sum(iif(q.AcceptedAnswerId is not null or a.upvotedanswers>0,1,0)) accepted, sum(q.AnswerCount) answers, avg(q.AnswerCount+0.0) avganswers, sum(q.ViewCount) views, avg(q.ViewCount+0.0) avgviews, sum(q.CommentCount) comments, avg(q.CommentCount+0.0) avgcomments from postTags pt join Tags t on pt.tagid = t.id join Posts q on pt.postId = q.id join (select qq.id postId, sum(isnull(aa.id,0)) upvotedanswers from Posts qq left join Posts aa on qq.id = aa.parentid and aa.score>0 where qq.CreationDate between @StartDate and @EndDate group by qq.id ) a on q.id = a.postid where q.CreationDate between @StartDate and @EndDate group by t.tagname ) aggtags order by aggtags.cnt desc
    http://data.stackexchange.com/ru/query/313286/tags-stats-mod
    ЗЫ Добавил также фильтр по дате для вопросов с заплюсованными ответами, но (лень план запроса разбирать подробно) индекса либо нет, либо он не используется - разницы не заметил.

    Заработает ли Intel C++ Compiler на AMD процессоре?

    Кто нибудь устанавливал его не на процессоры семейства Intel?


    Ответ

    AMD и Intel базируются на одной архитектуре x86 или amd64. Хотя в новейших процессорах у них и могут быть разночтения в наборе команд, большая часть оных одинакова. Разумеется никто в здравом уме не станет использовать такие инструкции, которые не позволят запускать компилятор на процессоре конкурента. Это потеря рынка равноценна экономическому самоубийству, учитывая тот факт, что компилятор от Intel, мягко говоря, не на ведущих ролях. Таким образом ответ на вопрос - да, заработает и по другому быть не может.
    Генерирует ли компилятор от Intel такой код, что он будет быстрее на Intel? Лучше этот вопрос адресовать разработчикам от Intel, но вероятность этого есть, хотя и небольшая.

    navigation drawer: тормоза при выбор элемента списка

    Всем привет. В качестве меню в приложении использую navigation drawer. Всё делала согласно туториалам. При свайпе всё отлично, всё красиво, меню выдвигается и прячется на место очень гармонично. Но если я выбираю элемент из списка, то меню прячется скачками. Кто-нибудь сталкивался? В чём может быть проблема?
    Что у меня есть: ParrentActivity extends ActionBarActivit,
    Стандартный макет для него



    При выбор элемента списка открывается один из фрагментов.
    Fragment fragment = null; Bundle args = new Bundle(); switch (position){ case 1: fragment = NewsFeedFragment.newInstance(); args.putString("arg","arg"); break; case 2: fragment = ArticlesFragment.newInstance(); args.putString("arg","arg"); break; case 3: fragment = BlogsFragment.newInstance(); args.putString("arg","arg"); break; case 4: fragment = Research2Fragment.newInstance(); args.putString("arg","arg"); break; case 5: fragment = AuthorsFragment.newInstance(); args.putString("arg","arg"); break; default:break; } fragment.setArguments(args); FragmentManager frgManager = getSupportFragmentManager(); frgManager.beginTransaction().replace(R.id.content_frame, fragment) .commit();


    Ответ

    В отдельном потоке фрагменты заменяю. Теперь всё окей.
    private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView parent, View view, final int position, long id) { mDrawerLayout.closeDrawer(mDrawerList); new Handler().postDelayed(new Runnable() { @Override public void run() { selectItem(position);
    } }, 300); } }

    Qr коды(создание/чтение) android

    Хочу научится работать с QR кодами. Решил сделать так: создать QR, и считать QR. Для создания QR-кода, я решил использовать библиотеку zxing. Скачал zxing-1.3.jar и подключил. Все вроде работает, но когда я создаю qr с русскими символами, то мне выдает непонятную штуку, я решил ее так:
    final QRCodeWriter writer = new QRCodeWriter();
    //картинка где выводить ImageView tnsd_iv_qr = (ImageView)findViewById(R.id.qrImage);
    //кодировка Charset charset = Charset.forName("UTF-8"); CharsetEncoder encoder = charset.newEncoder();
    byte[] b = null;
    try { // кодирую строку ByteBuffer bbuf = encoder.encode( CharBuffer.wrap( phone + "/" + name + "/" + id ) );
    b = bbuf.array(); } catch (CharacterCodingException e) { Log.e(e.toString(), e.toString()); }
    String data;
    try { data = new String(b, "ISO-8859-1"); Hashtable hints = new Hashtable(2); hints.put(EncodeHintType.CHARACTER_SET, "ISO-8859-1");
    ByteMatrix bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, 512, 512, hints);
    int width = 512; int height = 512;
    Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { if (bitMatrix.get(x, y)==0) { bmp.setPixel(x, y, Color.BLACK); } else { bmp.setPixel(x, y, Color.WHITE); } } } //создаю qr tnsd_iv_qr.setImageBitmap(bmp); } catch (WriterException | UnsupportedEncodingException e) { e.printStackTrace(); }
    Проблема решилась(я так думал), русские символы зашивает, пока я не протестировал код на других устройствах, получается та же проблема с кодировкой русских символов.
    Читаю я QR библиотекой ZBarScanner вот так:
    //при нажатой кнопке Intent intent = new Intent(getApplicationContext(), ZBarScannerActivity.class); intent.putExtra(ZBarConstants.SCAN_MODES, new int[]{Symbol.QRCODE}); startActivityForResult(intent, ZBAR_SCANNER_REQUEST);
    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { String contents = data.getStringExtra(ZBarConstants.SCAN_RESULT); int format = data.getIntExtra(ZBarConstants.SCAN_RESULT_TYPE, 0);
    Log.e("add sale", contents);
    if(format == 64) { setInformClient(contents); } } else if(resultCode == RESULT_CANCELED) { Toast.makeText(this, "Camera unavailable", Toast.LENGTH_SHORT).show(); } }
    Хочу спросить, какие библиотеки используете вы для создание qr с использованием русских символов? И подскажите почему у меня проблема с кодировками?
    UPD
    При чтении некоторых qr где есть русские символы некоторые слова выводило нормально, а некоторые типа такого плана: ミ籍スムひセミス ミ漬セミサム糊エム糊コミセ (в гугл трансейт даже можно перевести =) ). Начал использовать для чтения QR библиотеку zxing, все хорошо, только не нравится что когда я запускаю на телефоне, на телефоне вместо одного приложения ставятся 2, одно мое приложение, а второе с аналогичным названием и иконкой, только когда я его запускаю то сразу включается сканер


    Ответ

    Судя по коду, вы:
    Создаете строку в UTF-8 Преобразуете её в массив байт Читаете получившийся масив байт обратно в строку, указывая что у вас в массиве лежит строка в кодировке ISO-8859-1. И уже эту новую строку вы пишете в QR-код.
    Собственно в этом и есть вся проблема. Уберите это мягко говоря странное преобразование, и тупо записывайте строку в UTF-8. Если строка содержит не латинские символы, то для записи в QR лучше использовать именно её:
    private BufferedImage getQRImage(String phone, String name, int id) throws WriterException { QRCodeWriter writer = new QRCodeWriter();
    Hashtable hints = new Hashtable(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    String contents = phone + "/" + name + "/" + id; BitMatrix matrix = writer.encode(contents, BarcodeFormat.QR_CODE, 512, 512, hints);
    return MatrixToImageWriter.toBufferedImage(matrix); }
    Выдает картинку, которая читается всеми имеющимися у меня устройствами.

    Зафиксировать отображение в WebView

    Есть простой WebView mWeb:

    в который я передаю стороку html:
    mWeb.loadData(myhtml, "text/html; charset=utf-8", "UTF-8");
    Все работает нормально, но когда при прокрутке нечайно сделаешь свайп влево или прово, текст начинает съезжать. Так вроде и ничего, но тут тоже проблема, текст стает не на прежнее место после свайпа. Как можно зафиксировать отображение содержимого в WebView чтобы не свайпилось по бокам?


    Ответ

    Вам нужно указать действие на свайп:
    findViewById(R.id.html).setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_MOVE) return false; } });

    Где в реестре Windows указывается браузер по умолчанию?

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


    Ответ

    Дефолтный бразузер может быть разным для разных протоколов.
    Ассоциации протоколов работают так же, как ассоциации файлов:
    HKEY_CLASSES_ROOT\http\shell\open\command
    где HKEY_CLASSES_ROOT - это результат мержа HKEY_CURRENT_USER\Software\Classes и HKEY_LOCAL_MACHINE\Software\Classes
    UP: начиная с висты, ассоциации протоколов пишутся еще и в
    HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http
    так что стоит проверять оба варианта.
    Длинная статья с подробностями: How Does Your Browser Know that It’s Not The Default.

    Чем смотреть исполняемый код .net приложения?

    Хочу полазить по скомпилированному приложению, чтобы увидеть оптимизации, производимые jit-компилятором.
    Какие программы использовать, чтобы получить листинг нативного кода после прохода jit и их меппинг на инструкции il-кода? В идеале бы ещё меппинг на C#-код.


    Ответ

    Запустите или присоединитесь к своему приложению отладчиком Visual Studio, установите брекпойнт в интересующем месте, и когда он сработает - выберите пункт меню "Debug/Windows/Disassembly".
    Опции для показа IL там нет. Можно только установить галочку "Show source code", и тогда будет показан маппинг машинного и исходного кода(на C#, VB.NET, или на другом языке, на котором вы программируете).

    Как в Golang прервать выполнение кода?

    Как в Golang прервать выполнение кода? Аналог exit()/die() в PHP.
    Есть
    func Index(w http.ResponseWriter, r *http.Request) { parametr=0 if parametr!="1" { fmt.Fprintln(w, "Параметр=1") } fmt.Fprintln(w, "текст после проверки") //Я хочу это не отображать,если parametr!="1" }
    Нужно, если параметр не 1, то выйти из функции (но не из приложения вообще). Можно, конечно, поставить else, но везде тогда делать обёртки? Или можно как-то выйти из функции?


    Ответ

    выход
    func os.Exit(code int)
    Exit causes the current program to exit with the given status code. Conventionally, code zero indicates success, non-zero an error. The program terminates immediately; deferred functions are not run.
    мой вольный перевод:
    Exit вызывает завершение текущей программы с указанным кодом завершения. принято считать, что код 0 означает успешное завершение, а не-нулевой код означает ошибку. программа завершается немедленно, отложенные функции не вызываются.
    возврат
    return [ ExpressionList ]
    A "return" statement in a function F terminates the execution of F, and optionally provides one or more result values. Any functions deferred by F are executed before F returns to its caller.
    мой вольный перевод:
    оператор "return" в функции "F" прерывает выполнение "F" и (опционально) возвращает один или более результатов. любые функции, «отложенные» функцией "F", выполняются перед тем, как управление вернётся в вызывавшую "F" функцию.
    примеры:
    func noResult() { return }
    func simpleF() int { return 2 }
    func complexF1() (re float64, im float64) { return -7.0, -4.0 }

    PHP. Регулярное выражение, допускающее отсутствие некоторых частей

    Есть текст, типа: "Осталось 10 часов 15 минут 12 секунд". Некоторые компоненты (часы, минуты, секунды) могут отсутствовать. Нужно выдернуть циферки и соотнести с часами, минутами, секундами. Делаю так:
    Осталось\s+(?!(\d+)\s+(час).*?)(?!(\d+)\s+(минут).*?)(?!(\d+)\s+(секунд).*?)
    Текст подходит под регулярное выражение, но от него всегда остается только "Осталось " при любых комбинациях час., мин., сек.
    P.S. Нашел информацию по (?!...). Они, оказывается, используются только для проверки, но ничего не выводят.
    Каким образом можно одновременно проверить наличие фрагментов и выдернуть данные?


    Ответ

    Нужно использовать комбинацию из проверяемой части и захватывающей части. Примерно вот так:
    Осталось\s+((?\d+)\s+час(а|ов)?\s*)?((?\d+)\s+минут(а|ы)?\s*)?((?\d+)\s+секунд(а|ы)?)?
    После обработки в именованных группах будут требуемые значения.
    Демо тут (спасибо за наводку @stribizhev)

    Передача в метод обобщенных интерфейсов

    Имеется такой код:
    public interface IInterface { IDictionary GetData(); }
    public class Base { }
    public class A: Base { }
    public class B : Base { }
    public class ADA: IInterface { public IDictionary GetData() { return new Dictionary(){ {0, new A() }}; } }
    public class BDA : IInterface { public IDictionary GetData() { return new Dictionary() { { 0, new B() } }; } }
    public class MyClass { public static void Fill(params IInterface[] @interface) { foreach (var access in @interface) access.GetData(); } }
    Он не компилируется, вопрос такой: Как можно передать несколько реализаций интерфейса IInterface в метод Fill ? Есть разные способы, хочется узнать какой правильный. Если ошибка в проектировании, подскажите пожалуйста как будет верно ? Классы Base, A, B изменять нежелательно.


    Ответ

    Т.к. строгой типизации все равно не получить, то есть несколько вариантов:
    dynamic:
    public static void Fill(params dynamic[] interfaces) { foreach (var access in interfaces) { object data = access.GetData(); } } dynamic с маркер-интерфейсом:
    public interface IInterface { }
    public interface IInterface : IInterface { IDictionary GetData(); }
    public static void Fill(params IInterface[] interfaces) { foreach (dynamic access in interfaces) { object data = access.GetData(); } } Реальный интерфейс с неявной реализацией в ADA и BDA
    public interface IInterface { IDictionary GetData(); }
    public interface IInterface : IInterface { new IDictionary GetData(); }
    public class BDA : IInterface { public IDictionary GetData() { return new Dictionary() { { 0, new B() } }; }
    IDictionary IInterface.GetData() { return (IDictionary)this.GetData(); } }
    public static void Fill(params IInterface[] interfaces) { foreach (var access in interfaces) { IDictionary data = access.GetData(); } }
    В последнем случае типизация какая-никакая будет. В первых двух - object.

    Как динамически создать массив, не зная количества его элементов? [дубликат]

    На данный вопрос уже ответили: Как создать динамический массив? 3 ответа В цикле читаю некоторый блок данных по частям различных размеров. Требуется учитывать размеры этих частей - думаю загонять их в массив. Как создать этот массив, если я не знаю сколько частей будет? Возможно ли реализовать такое в языке С стандартными методами?


    Ответ

    Вам нужно будет использовать функцию realloc, определенную в заголовке , если окажется, что выделенной памяти или количества элементов в динамически размещенном массиве недостаточно.
    Другой подход - это использовать список, который вы либо сами напишите, либо возьмете чью-то готовую реализацию. В стандарте C списки не определяются.

    Возможно ли в datagrid вывести подстроки?

    У меня есть коллекция объектов, каждый объект имеет в себе коллекцию других объектов. Возможно ли эту коллекцию вывести в DataGrid. Мой код: //ViewModel
    public class ObladnanViewModel { public ObservableCollection Collection { get; set; } public ObservableCollection Electromotors { get; set; }
    public ObladnanViewModel() { Electromotors =new ObservableCollection() { new ElectromotoruModel(){Id= 1,Marka = "AO2",Name = "Main"}, new ElectromotoruModel(){Id=2,Marka = "4",Name = "Main"}, new ElectromotoruModel(){Id=3,Marka = "AO2",Name = "Main"} }; Collection=new ObservableCollection() { new ObladnanModel(1,"Obl1",Electromotors), new ObladnanModel(2,"Obl2",Electromotors) }; } }
    Класс ElectromotoruModel:
    public class ElectromotoruModel { public int Id { get; set; } public string Name { get; set; } public string Marka { get; set; } }
    public class ObladnanModel { public int Id { get; set; } public string Name { get; set; } public ObservableCollection Elektromotors { get; set; }
    public ObladnanModel(int id, string name, ObservableCollection electromotors) { this.Id = id; this.Name = name; this.Elektromotors = electromotors; } }
    И пробивал так XAML:

    Но в Motors выводит просто пустую строку. Возможно ли сделать так:


    Ответ

    Нашел решение. Правда не в DataGrid а в ListBox но и так пойдет) Моя ViewModel:
    public class ObladnanViewModel {
    public ObservableCollection Collection { get; set; }
    public ObladnanViewModel() { Collection=new ObservableCollection() { new ObladnanModel(1,"Obl1",new ObservableCollection() { new ElectromotoruModel(){Id= 1,Marka = "AO2",Name = "Main"}, new ElectromotoruModel(){Id=2,Marka = "4",Name = "Main"}, new ElectromotoruModel(){Id=3,Marka = "AO2",Name = "Main"}}),
    new ObladnanModel(2,"Obl2",new ObservableCollection() { new ElectromotoruModel(){Id= 1,Marka = "36",Name = "Main"}, new ElectromotoruModel(){Id=6,Marka = "4",Name = "Vent"}, new ElectromotoruModel(){Id=3,Marka = "AO6",Name = "cooling"}, new ElectromotoruModel(){Id = 4,Marka = "C03",Name = "movement table"}} ) }; } }
    Код Xaml:






    Результат: