• Мобильное приложение: как знать, что юзер тот самый?

    Я, конечно, криптограф диванный, но, возможно :
    1. устанавливать соединение по HTTPS
    2. передавать пароль в POST
    3. сравнивать хеш пароля и сохранённый в БД хеш
    Не?
    Ответ написан
  • Мобильное приложение: как знать, что юзер тот самый?

    @SZolotov
    Asp.net core, MAUI,WPF,Qt, Avalonia
    Обычная практика после аутентификации на сервере передавать клиенту токен, который отправляется на сервер с каждым запросом клиента. По этому токену и проходит проверка. Для своих приложений oauth можно не использовать, это все таки больше для сторонних.
    P.S. Смотрите в сторону апи вконтакта и фейсбука
    Ответ написан
    3 комментария
  • Как сделать регулярное выражение, определяющее уровень вложенности циклов?

    @saltydogd
    Как вариант совместить регулярку и последовательное ее применение:
    Для получения "объемлющего" цикла (его тела)
    (?<=((for\s*(.*[;]{0,2}.*)\n?)|(do\s*)|(while\s*)))\{(?>\{(?<DEPTH>)|\}(?<-DEPTH>)|[^{}]+)*\}

    , потом вытаскиваем содержимое матча, и применяем этот же паттерн к нему, глубина +1, и т.д. пока контент по регулярке матчится
    ЗЫ регулярка из C#, на яве не проверял, но должна справиться
    Ответ написан
    2 комментария
  • Upwork - Конфискация всех заработков. Как избежать?

    @iSergios
    Python-разработчик
    Однако Вы себе напридумывали. Давайте разберемся по-порядку.
    Внимание! Будет многабукав и много юридической информации.

    Итак, как к нам поступают деньги от клиентов Upwok?

    1) Клиент передает деньги Upwok'у. Ну тут как бы все чисто, никаких проблем. Деньги-то не у нас. Де-факто (и де-юро тоже) деньги перечислены на счет в банке или иной кредитной организации, который принадлежит Upwork.

    2) Upwork зачисляет деньги на наш "счет". [s]И тут Вы впадаете в панику.[/s] Давайте начнем с того, что деньги, как таковые, никуда не двигались. Они как лежали на счету Upwork'a в банке, так и продолжают там лежать. Upwork лишь рисует небольшую циферку у Вас в профиле и все. Ни юридически, ни фактически эти деньги Вам не принадлежат*. Upwork не является ни банковском, ни кредитной организацией, ни фондом ни иным лицом, уполномоченным производить операции с чужими денежными средствами. Все денежные средства, поступающие на его счета от заказчиков становятся денежными средствами Upwork. А то, что Upwork выплачивает эти суммы Вам - это он распоряжается принадлежащими ему деньгами. Т.е. выступает не просто посредником, который передает деньги из одних рук в другие, а промежуточным собственником. Как если бы вы купили автомобиль у одного товарища, оформили его на себя, а потом продали/переоформили его другому товарищу. То, что в Вашем профиле отражаются какие-то суммы с обозначением валюты, это не отражение состояния какого-то пресловутого счета - у Вас его на Upwork'e нет и быть не может - чисто юридически это просто обещание Upwork'а выплатить Вам сумму, эквивалентную указанной. И все. К этому моменту Вы еще не собственник этих денег, вы не можете их потратить.

    3) Upwork "выводит Ваши деньги" (а де-юре просто перечисляет на Ваш счет из своих), и вот тут возможны варианты:

    3.1) Upwork перечисляет деньги на Ваш банковский счет - проблем нет, все чисто. С точки зрения налогообложения возможны трудности, если это счет в иностранном банке, но это не проблема, а именно трудности, и их тут разбирали.

    3.2) Upwork перечисляет деньги на Ваш счет в небанковской кредитной организации. Опять варианты:

    3.2.1) Это PayPal или иная небанковская кредитная организация, которая официально зарегистрирована на территории РФ и включена в соответствующие реестры - проблем нет, все чисто. Эти организации имеют право осуществлять операции с валютой (при наличии лицензии, при ее отсутствии они автоматически переведут эти средства в национальную валюту, т.о. доллары Вы не получите).

    3.2.2) Это Skrill или иная небанковская кредитная организация, которая на территории РФ не зарегистрирована. Проблем нет с точки зрения нарушения отечественного законодательства. Upwork перевел принадлежащие ему деньги на некий счет, который по документам незарегистрированной на территории РФ организации принадлежит Вам. Т.е. именно Вы никаких валютных операций не совершали. К слову, доказать само существование, а равно принадлежность такого счета Вам в случае с иностранной организацией очень непросто. Ваши деньги приобретают довольно интересный статус кво - вы можете ими управлять, но в правовое поле РФ (а равно под действие предусмотренных законами ограничений) они как бы не попадают.

    И да, статья 15.25 КоАП РФ фактически запрещает расчеты в валюте на территории России в обход банков. Вот и все.

    _____________
    * В соответствии с действующим отечественным законодательством (что, кстати, полностью согласуется с общепризнанными принципами и нормами международного права) право собственности включает в себя 3 элемента: владение (фактическое обладание, включая принадлежность депозита), пользование (возможность извлекать из вещи пользу) и распоряжение (возможность определять дальнейшую юридическую судьбу вещи; применительно к деньгам - тратить их). Нет хоть одного из элементов - нет права собственности. Нет права собственности - нет проблем.
    Ответ написан
    Комментировать
  • Есть ли аналоги vk.me для вотсап и вибер?

    riot26
    @riot26
    <:З )~~
    Возможно, получится сделать с помощью URL scheme
    <a href="viber://add?number=%2B79165555555">Viber</a>
    <a href="whatsapp://send?abid=%2B79165555555&text=Hello">WhatsApp</a>
    Ответ написан
    4 комментария
  • Как прикрутить обновление приложения на macOS?

    0xcffaedfe
    @0xcffaedfe
    Developer & Reverser
    Если публиковать будете в сторе, то и обновлять оттуда.
    Если дистром то есть Sparkle.framework гуглите.
    Ответ написан
    Комментировать
  • Безопасно ли так делать?

    @AndryG
    Опасно вот так:
    <?php
    
    include($_GET['lang']."/phrases.php");
    
    //тут пошел код
    
    ?>
    Ответ написан
    Комментировать
  • Как получить значение столбца ячейки в переменную из выборки, чтобы с ним по условию получить новую выборку?

    unitby
    @unitby
    Если id идут строго по порядку и нет пропусков то можно попробовать так:

    select id, value from table where id in (select id+1 from table where value > 10 and value < 20) and value > 10 and value < 20
    Ответ написан
    4 комментария
  • Как валидно расставить теги в head?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    1. Атрибут lang нужно указывать в элементах с текстовой информацией. Если вся страница содержит контент на одном языке, нужно указывать в html. Указать в head, и не указать в body — по меньшей мере странно.

    2. Ситуация, когда сервер не отдаёт кодировку в Content-Type, невероятно редка. Однако, если она-таки случится, а документ не содержит сигнатуру (например, выбран режим сохранения UTF-8 without BOM), то указание кодировки следует первым же тэгом meta в head, дабы браузер не парсил вторично текст, содержащий не ASCII символы.
    Подробнее про encoding sniffing

    3. Указание кодировки лучше указывать так (тип документа внутри документа не имеет никакого смысла):
    <meta charset="utf-8">

    4. Сначала стили, потом скрипты. Тут вы поступаете абсолютно верно. Если скрипту можно указать асинхронную загрузку — указывайте. Если же это невозможно, рекомендуется загружать синхронно в head только те скрипты, которые могут требоваться для других скриптов, а остальные ставить в конец body.

    5. Если есть стили, которые не требуются для стартового отображения страницы (например, только для подгружаемого контента), можно динамически загружать их (например, по окончании формирования DOM) с помощью скриптов. Как вариант — с помощью скриптов, стоящих в конце body, не ориентируясь на событие DOMContentLoaded.
    Советы по оптимизации от Google Developers

    6. Остальные meta и link тэги можно разделить на используемые для формирования страницы (например, meta name="viewport"), которые лучше ставить в начало head после кодировки, и второстепенные, которые можно ставить в конце head, что вы и сделали.

    7. Заголовок документа можно поставить после всех первостепенных meta тэгов.

    8. По умолчанию meta name="robots" имеет значение all (index,follow). Если вы не намерены запрещать что-то, писать его смысла нет.
    Ответ написан
  • Почему приложение x64 в два раза медленнее x86?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Отвечать на этот вопрос без какой-либо дополнительной информации - это как гадать на кофейной гуще. Какой CPU - если это древний Pentium D с допотопным конвейером и глупыми регистрами - одно дело, а если это новейший Core i7 на Haswell - другое. Что до настроек - вот честно, "стандартные" вообще ни о чём не говорит. Я уже не говорю, что было бы не плохо указать количество опытов с максимальным и минимальным - вполне возможно глупые ОС с планировщиком как-то неудачно распределяют время. Любой ответ, который можно тут указать может быть техническим грамотным, но совершенно не соответствующий истине.

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

    Теперь давайте вместе подумаем о том, какие различия между x86-64 и x86. На самом деле, вопрос поставлен не очень корректно - x86-64 почти полностью включает в себя x86. Из изменённого - размер указателя (адреса), да немного переделана логика регистров (хотя все они на месте, просто добавилось ещё лишние несколько десятков) - теперь часть аргументов в функцию передаётся через дополнительные регистры, тогда как в x86 все идут через стек. Однако получить здесь преимущество не так уж и просто - процессор тоже не дурак, в случае линейной обработки информации (или любая длительная работа с небольшими участками памяти) он прекрасно всё кэширует и работа со стеком в общем случае не сильно медленнее работы с регистрами.

    Теперь смотрим на код. Что там? Куча адресной арифметики, немного функций, да и аргументов почти нет. 8 миллионов слов? Не думаю что рекурсия вынудит вылезти стеку за пределы кэша, так что есть подозрение о паритете архитектур в данном случае. Однако большое количество адресной арифметики и увеличенный размер адреса в битах... во сколько раз? В два раза?

    Ну да ладно, ясное дело, сложение реализовано за 1 такт. Скорее всего. Конечно, здесь вопрос процессора, но даже узнав модель будет сложно узнать наверняка, разве только синтетическим тестом (много раз обращаться по адресу - сумме двух случайных чисел). Да и Windows 8.1 никогда не был стандартом производительности (скорее с точностью наоборот), и VC++ никогда не был лучшим компилятором.

    Попробуйте gcc (меня разве только интересует откуда на Windows взялся gcc) с флагом -O3. И посмотрите машинный код для 64 бита и 32 бита (можно пользоваться objdump из binutils или посмотреть машинный код в IDE Visual Studio - точно расположение кнопки не помню, но можно поискать в менюшках). Скорее всего причина не одна, их множество. Так, вызов функции сопровождается сохранением контекста, тогда как в x64 регистров больше, больше и контекст. Собираем такие моменты по крупицам... Вот и получаем.

    P.S. Давным давно, разговаривал с преподавателем. Простая перекомпиляция под 64 бита ускорила код на 30%. Это был колхозный кодек, немного похожий на libx264 (от туда была сдёрнута часть кода). Естественно, проект собирался со всеми оптимизациями, со всем расширениями инструкций - со всем, чем можно. И сборка под платформу x86-64 (с SSE, MMX, FMA и прочие). Жутко наукоёмкий разношёрстный код (писали все - от зелёных аспирантов, до ровесников Страуструпа и профессоров университета) - туева хуча функций, структур, объединений и очень, очень много параметров, многие из которых передают в аргументы функций. Ну и целевая платформа - жутко порезанный и переделанный Windows Embedded - там просто не чего было планировать.
    Ответ написан
    Комментировать
  • Почему стали популярны less, sass, ruby on rails, bower, grunt? И зачем они нужны?

    @Spaceoddity
    Почему стали? От лени и нежелания думать своим мозгом.
    Популярны они сталит благодаря продвижению Гуглом, Яндексом и иже с ними всяких "стандартов написания кода". При том, что и Яндекс и Гугл в этом плане очень далеки от идеала.
    Эти фреймворки хороши для сквозной разработки крупных проектов, когда все участники хорошо знакомы с данными методами, давно сотрудничают и т.п. Т.е. для тех же крупных компаний. При том, что в большинстве крупных компаний всё-таки имеются собственные стандарты.
    Ну а остальные уже, как обезьяны, подхватили. И требуют БЭМ, SASS, Angular для статичного одностраничника. Начинаешь выяснять для чего заказчику всё это надо - "а мне так наш дизайнер посоветовал"... Или когда берёшься доделывать чужой проект с кучей недоделанных хвостов в SASS - то ещё удовольствие и "оптимизация написания кода" - тупо вручную текстовым поиском приходится по фалам искать потерявшиеся переменные.
    Сама настройка, выработка общих стандартов и синтаксиса для этих фреймворков - занимает кучу времени.
    Так что по большому счёту вы ничего не пропустили. Браузеры все равно не понимают SASS и иже с ним))
    Пишите как вам удобнее. Если клиент настаивает - попробуйте выяснить причины такой настойчивости. Если случай клинический - шлите лесом!
    Ответ написан
    6 комментариев
  • Почему стали популярны less, sass, ruby on rails, bower, grunt? И зачем они нужны?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Просто вы потерялись в середине нулевых, а по некоторым вещам и в начале.
    Стоит немного наверстать.

    Писать конечно можно и в блокноте. Я в середине нулевых начал пользоваться eclipse, nusphere (phped), теперь же жизнь без PHPStorm не представляю. Для простого кода обычно использую sublime.
    Ну и конечно, я так же не представляю жизнь без препроцессоров, современных наработок и т.д. Все что вам кажется дикостью. К примеру вместо PHP на серверной стороне использовать NodeJS или вообще Go.

    Помните, в 90е сотовые телефоны были редкостью ? Они были в новинку.
    Но сейчас, жизнь без них (я про обычные сотовые, без чатиков) просто не могу представить.

    Все как и с любым другим направлением, технологии развиваются, человек привыкает к удобствам и обратно уже не хочет. Соответственно, компании ищут сотрудников, которые бы обладали набором современных знаний, т.к. для командной работы это очень спасает.
    Ответ написан
    1 комментарий
  • Как повлияет сетевой фильтр на пропускную способность сетевого канала?

    PavelK
    @PavelK
    Никак.
    Там защита простейшим способом реализована и в канал не вмешивается.
    У меня в CyberPower сделано как то так: habrahabr.ru/post/170985
    стёб конечно, но что-то в этом есть =)
    Ответ написан
    Комментировать
  • Как получить файл из архива без его распаковки?

    @Nc_Soft
    file_get_contents("zip://home/archive.zip#README.txt");
    Ответ написан
    Комментировать
  • Как научить Surface 2 Pro быть desktop-ом, а не tablet-ом?

    aenikitin
    @aenikitin
    Инфраструктурный администратор
    А Tablet Mode в 10ке включен?
    3dfGc75.png
    Ответ написан
    1 комментарий
  • Почему браузер во время разработки не обновляет измененные стили?

    @YemSalat
    Если работаете в Хроме (или Опере, или в Яндексе) - откройте девтулс -> настройки:
    4da26394c2f24532b3211614f0b9adbd.jpg

    И просто держите девтулс открытым пока работаете.
    Ответ написан
    Комментировать
  • Как изменить header?

    BuriK666
    @BuriK666
    Компьютерный псих
    Вам нужен file_put_contents вторым аргументом и будет Ваш XML.
    А вообще для этого лучше подходит curl
    Ответ написан
    3 комментария
  • Как оптимизировать парсинг комментариев в группе ВКонтакте?

    @IceJOKER
    Web/Android developer
    15 записей по 0.3с(ваш usleep(333333) --- 333333мс - это разве 0.3секунды? О_О )= 4.5

    Как минимум можно написать эти строчки:
    if (preg_match('/'.$getComm[$b]->id.'/', $log)) {
      }

    более грамотно
    if (strpos($log, $getComm[$b]->id) === FALSE) continue;

    и зачем ID хранить в файле.

    $file=fopen("log2.txt", "a");
      fwrite ($file, $getComm[$b]->id."\n");
      fclose($file);

    ^^^
    не лень? когда все это можно одной строчкой сделать
    file_put_contents();

    offset - используйте этот параметр грамотно и вы избавите себя от получения лишних комментов, что повысит быстродействие
    Ответ написан
    2 комментария