Search
Write a publication
Pull to refresh
32
0
Send message

Что именно происходит, когда пользователь набирает в адресной строке google.com? Часть 1

Reading time7 min
Views143K
Перевод первой части материала с github, обстоятельно объясняющего работу интернета: что именно происходит, когда пользователь набирает в адресной строке google.com?

Кнопка «ввод» возвращается в исходное положение


Для начала отсчёта выберем момент, когда кнопка «ввод» утоплена. В этот момент замыкается контур, отвечающий за эту кнопку. Небольшой ток проходит по логическим контурам клавиатуры. Они сканируют состояние всех переключателей, гасят паразитные электрические импульсы, и преобразовывают нажатие в код клавиши 13. Контроллер кодирует код для передачи в компьютер. Теперь это почти всегда делается через USB или Bluetooth, а раньше в процессе участвовали PS/2 или ADB.
Читать дальше →

Архитектурный дизайн мобильных приложений: часть 2

Reading time7 min
Views48K
Чтобы направить всю энергию системы в необходимом направлении, нужно эту систему ограничить правилами.


Привет, Хабр! Продолжаем серию статей об архитектурном дизайне мобильных приложений. Под катом поговорим о проектировании слоёв UI. Добро пожаловать!
Читать дальше →

Методы сжатия данных

Reading time16 min
Views104K
Мы с моим научным руководителем готовим небольшую монографию по обработке изображений. Решил представить на суд хабрасообщества главу, посвящённую алгоритмам сжатия изображений. Так как в рамках одного поста целую главу уместить тяжело, решил разбить её на три поста:
1. Методы сжатия данных;
2. Сжатие изображений без потерь;
3. Сжатие изображений с потерями.
Ниже вы можете ознакомиться с первым постом серии.
Читать дальше →

Гибридные приложения в Qt на примере использования D3.js

Reading time6 min
Views29K
D3 — мощная JavaScript библиотека для визуализации данных. На мой взгляд — просто рай для web-разработчика, казалось бы недоступный для Qt-программиста. Но гибкость фреймворка Qt позволяет интегрировать web-frontend в толстый клиент с помощью механизма Qt Web Bridge. Такие приложения получили наименование гибридные (Qt Hybrid Apps).

Для JavaScript-программистов хорошая новость заключается в том, что их решения можно легко интегрировать в Desktop приложения, что потенциально может увеличить целевую аудиторию пользователей разрабатываемых библиотек (во всяком случае это верно для мира Qt приложений).

На скриншоте ниже изображен виджет Dependency Wheel (Круг Зависимостей), отрисовка которого осуществляется с помощью D3.js а управление данными и отображением — с помощью Qt. При нахождении указателя над соответствующей дугой её взаимосвязи «подсвечиваются», а остальные становятся полупрозначными. Данный виджет можно использовать для визуализации различного рода зависимостей (например библиотек).

В отличии от оригинального JS решения диаграмма динамически изменяет размер под размер виджета, а данные устанавливаются на стороне Qt, а не с помощью загрузки JSON-файла.

Статья больше ориентирована на Qt-программистов, но также может быть интересна и JS программистам.


Читать дальше →

86 бесплатных площадок для продвижения стартапов на международном рынке

Reading time4 min
Views104K


Мы дополнили и адаптировали оригинальную подборку, выбрав исключительно бесплатные ресурсы для продвижения стартапов на международном рынке. Помимо этого мы переработали первоначальную классификацию, ввели ранжирование по потенциальному охвату аудитории (для площадок с обозначенным охватом) и распределили соответствующие ресурсы в тематические категории.
Читать дальше →

Указатели, ссылки и массивы в C и C++: точки над i

Reading time10 min
Views632K
В этом посте я постараюсь окончательно разобрать такие тонкие понятия в C и C++, как указатели, ссылки и массивы. В частности, я отвечу на вопрос, так являются массивы C указателями или нет.

Обозначения и предположения


  • Я буду предполагать, что читатель понимает, что, например, в C++ есть ссылки, а в C — нет, поэтому я не буду постоянно напоминать, о каком именно языке (C/C++ или именно C++) я сейчас говорю, читатель поймёт это из контекста;
  • Также, я предполагаю, что читатель уже знает C и C++ на базовом уровне и знает, к примеру, синтаксис объявления ссылки. В этом посте я буду заниматься именно дотошным разбором мелочей;
  • Буду обозначать типы так, как выглядело бы объявление переменной TYPE соответствующего типа. Например, тип «массив длины 2 int'ов» я буду обозначать как int TYPE[2];
  • Я буду предполагать, что мы в основном имеем дело с обычными типами данных, такими как int TYPE, int *TYPE и т. д., для которых операции =, &, * и другие не переопределены и обозначают обычные вещи;
  • «Объект» всегда будет означать «всё, что не ссылка», а не «экземпляр класса»;
  • Везде, за исключением специально оговоренных случаев, подразумеваются C89 и C++98.


Указатели и ссылки


Указатели. Что такое указатели, я рассказывать не буду. :) Будем считать, что вы это знаете. Напомню лишь следующие вещи (все примеры кода предполагаются находящимися внутри какой-нибудь функции, например, main):

int x;
int *y = &x; // От любой переменной можно взять адрес при помощи операции взятия адреса "&". Эта операция возвращает указатель
int z = *y; // Указатель можно разыменовать при помощи операции разыменовывания "*". Это операция возвращает тот объект, на который указывает указатель

Читать дальше →

Межпроцессная репликация объектов с помощью QtRemoteObjects

Reading time7 min
Views12K
7 октября 2014 года в публичном доступе появились исходники Qt-модуля QtRemoteObjects. Модуль создан в недрах Ford Motor Company (автор Brett Stottlemyer). Вещь, на мой взгляд, очень перспективная. Модуль позволяет, например, передавать сигналы между объектами по сети. Но этим возможности модуля не ограничиваются. Более точно суть модуля описывает его предыдущее наименование — Replica, так как объекты «реплицируются» между процессами.



Ключевой идеей QtRemoteObjects, которая качественно отличает его от других способов межпроцессного взаимодействия/удаленного вызова процедур, является идея полностью продублировать Qt-объект в другие процессы. Это значит, что все изменения свойств (properties) в объекте — источнике отражаются (с уведомлением посредством сигналов) в объекте-реплике. Любые сигналы, которые эмитируются объектом-источником будут также эмитированы в каждом объекте-реплике. Также можно устанавливать свойства, вызывать слоты и в объекте-реплике, при этом запросы отправляются объекту-источнику, который их обрабатывает и затем изменения отражаются в других объектах-репликах посредством сигналов или с помощью изменения свойств. В результате все объекты (включая объект-источник) синхронизируются. При этом вся сложность межпроцессного взаимодействия скрыта внутри QtRemoteObjects.
Читать дальше →

Оптимизация ASP.NET — практические советы по работе с IIS

Reading time12 min
Views102K
В данной публикации речь пойдёт о настройке важных параметров пула ASP.NET-приложений при вызове удалённых веб-сервисов и активной работе с сетью на стороне сервера через стандартные классы .NET.



Введение


Приходилось ли вам когда-нибудь самим настраивать производственные веб-сервера (production servers) под управлением ОС Windows Server 2008 R2/IIS 7.5 и выше? Для системных администраторов, имеющих большой опыт работы с IIS, скорее всего, это тривиальная задача, но вот для веб-разработчиков, которым по различным причинам порой приходится самим участвовать в настройке «боевых» серверов, данная информация может оказаться весьма полезной.

Итак, приступаем. Ускоряем сайт на ASP.NET — экономим деньги предприятия и нервы администратора.
Читать дальше →

PC buyer's guide 2015: Материнские платы, чипсеты и сокеты

Reading time9 min
Views88K
Кризис кризисом, а «железо» рано или поздно обновлять надо. Иногда просто потому, что производительности не хватает, а иногда и по более печальным причинам: например, что-то померло, а покупать под старое железо новый процессор по текущим ценам может показаться сумасшествием — проще уж всё сразу обновить и забыть про эту проблему на несколько лет.



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

Шифрование SQLite базы данных в Qt

Reading time2 min
Views24K
Для шифрования в SQLite были найдены следующие возможные решения:

  • SEE — официальная реализация.
  • wxSQLite — c++ wxWidgets обертка для шифрования SQLite.
  • SQLCipher — использует в реализации openSSL.
  • SQLiteCrypt — модифицированная реализация API.
  • botansqlite3 — шифрующий кодек для SQLite3 использующий библиотеку botan.
  • SQLiteCrypto — java API для Android, использует AES-256 и SHA-256.
  • QtCipherSqlitePlugin — SQL плагин для Qt с поддержкой шифрования.

Из рассмотренных решений SEE, SQLiteCrypt and SQLiteCrypto требуют приобретения лицензии. SQLCipher доступен в версии Community Edition, но требует libcrypto.

Наиболее интересным решением из представленного списка, на мой взгляд, является QtCipherSqlitePlugin.
Плагин шифрует «на лету» и полностью интегрирован в API Qt.
хочу шифровать SQLite

Компьютерные интерфейсы в кино — эволюция воображения

Reading time10 min
Views84K
TL;DR. Мы пытались охватить многое, поэтому статья получилась пугающе объемной. Но, надеюсь, познавательной. А еще под нее ностальгировать можно.



У интерфейсов в поп-культуре — целая история, которая заслуживает отдельного внимания. Сегодня поговорим о том, как люди представляли и изображали интерфейсы в кино. Приоритет будет за компьютерами (от домашних до бортовых) однако стоит понимать, что любая система, с помощью которой человек взаимодействует с другой системой — это интерфейс.
Читать дальше →

Архитектура Android-приложений… Правильный путь?

Reading time5 min
Views95K
От переводчика: Некоторые термины, которые использует автор, не имеют общепринятого перевода (ну, или я его не знаю:), поэтому я решил оставить большинство на языке оригинала — они всё равно понятны и для тех, кто пишет под android, но не знает английский.
Куда писать об ошибках и неточностях, вы знаете.


За последние несколько месяцев, а также после дискуссий на Tuenti с коллегами вроде @pedro_g_s и @flipper83 (кстати говоря, 2 крутых Android-разработчика), я решил, что имеет смысл написать заметку о проектировании Android-приложений.

Цель поста — немного рассказать о подходе к проектированию, который я продвигал в последние несколько месяцев, и также поделиться всем тем, что я узнал во время исследования и реализации этого подхода.
Удиви меня

Что каждый программист должен знать про оптимизации компилятора

Reading time17 min
Views81K
Высокоуровневые языки программирования содержат в себе много абстрактных программистских конструкций, таких как функции, условные операторы и циклы — они делают нас удивительно продуктивными. Однако одним из недостатков написания кода на высокоуровневом языке является потенциальное значительное снижение скорости работы программы. Поэтому компиляторы стараются автоматически оптимизировать код и увеличить скорость работы. В наши дни логика оптимизации стала очень сложной: компиляторы преобразуют циклы, условные выражения и рекурсивные функции; удаляют целые блоки кода. Они оптимизируют код под процессорную архитектуру, чтобы сделать его действительно быстрым и компактным. И это очень здорово, ведь лучше фокусироваться на написании читабельного кода, чем заниматься ручными оптимизациями, которые будет сложно понимать и поддерживать. Кроме того, ручные оптимизации могут помешать компилятору выполнить дополнительные и более эффективные автоматические оптимизации. Вместо того чтобы писать оптимизации руками, лучше бы сосредоточиться на дизайне архитектуры и на эффективных алгоритмах, включая параллелизм и использование особенностей библиотек.

Данная статья посвящена оптимизациям компилятора Visual C++. Я собираюсь обсудить наиболее важные техники оптимизаций и решения, которые приходится применить компилятору, чтобы правильно их применить. Моя цель не в том, чтобы рассказать вам как вручную оптимизировать код, а в том, чтобы показать, почему стоит доверять компилятору оптимизировать ваш код самостоятельно.
Читать дальше →

Оформление научных результатов: интеграция LaTeX и Gnuplot

Reading time6 min
Views45K
«Если ваш единственный инструмент — молоток, то каждая проблема становится похожей на гвоздь»

Абрахам Маслоу


Введение


Научное творчество само по себе процесс не тривиальный, требующий некоторого отрешения от внешнего мира. И нелинейный в плане распределения интенсивности во времени — порой проболтаешься впустую полгода, чтобы потом, в течение месяца-полутора решить большую часть беспокоящих тебя вопросов.

И вот, ты на 100% использовал возможности посетившей тебя «эврики», закончил основную работу и пришла пора опубликовать свои результаты в журнале, доложить их на конференции, да и просто порадовать своего научного руководителя/консультанта красивым отчетом. И ты приступаешь к мучительной фазе оформления статьи/доклада/отчета. И насколько мучительной будет эта фаза, зависит от того, какие инструменты ты решил использовать для этой работы.

Вспоминаю времена, когда молодым и глупым аспирантом, я писал первый вариант кандидатского «кирпича», предназначенный для тщательного «вычитывания» мной и моим научным руководителем. Тогда я не знал о формате EPS, а поэтому экспортировал графики, построенные в Maple в *.bmp-растр и вручную… обводил их в MS Visio для последующей вставки в Word. Были и другие, не менее топорные глупости. Не удивительно, что тогда я проклял всё, и дал себе слово следующую диссертацию писать совершенно по другому.

Путем последовательных итераций, на сегодняшний день я пришел к такому вот решению:



И настало время отдать накопленный опыт людям. Интересующимся, добро пожаловать под кат.
Читать дальше →

Чтобы распознавать картинки, не нужно распознавать картинки

Reading time18 min
Views237K
Посмотрите на это фото.



Это совершенно обычная фотография, найденная в Гугле по запросу «железная дорога». И сама дорога тоже ничем особенным не отличается.

Что будет, если убрать это фото и попросить вас нарисовать железную дорогу по памяти?

Если вы ребенок лет семи, и никогда раньше не учились рисовать, то очень может быть, что у вас получится что-то такое:
Осторожно, тяжелые гифки

Карманный HiFi плеер Hidizs AP100

Reading time6 min
Views46K
image

Hidizs AP100 относится к классу компактных Hi-Fi плееров для ценителей качественного портативного звука. AP100 занимает промежуточный вариант между компактными и крупногабаритными Hi-End плеерами. Про AP100 можно сказать, что это разумная золотая середина среди плееров Hi-Fi класса.
Читать дальше →

Искусственный рассвет

Reading time9 min
Views234K
Началось всё год назад. Перед Новым 2014 годом несколько пришел в упадок жизненный тонус. Процесс самокопания привел к следующей мысли:



— А, что ж так темно-то, Господи? © День радио.

Впрочем, для человека, живущего зимой по летнему времени — мысль вполне естественная.
Что же делать?

Типобезопасные идентификаторы и фантомные типы

Reading time4 min
Views17K
Довольно часто в программе, работающей с базой данных, в качестве идентификаторов сущностей используются значения целочисленного типа (например, long). Но людям свойственно ошибаться, и программист может по ошибке использовать идентификатор одного типа сущности для адресации другой. Такая проблема может долго оставаться незамеченной, если идентификаторы сущностей пересекаются, а такое бывает довольно часто. К счастью, в языках, позволяющих манипулировать типами, коим является C++, есть довольно простое решение этой проблемы.
Читать дальше →

Делаем игру 2048 на AngularJS

Reading time32 min
Views50K
Наверное, вам, как и многим коллегам, пришлась по вкусу игра «2048», в которой необходимо достичь плитки с числом 2048, собирая вместе плитки с одинаковыми числами.

В этой статье мы вместе построим клон этой игры при помощи фреймворка AngularJS. По ссылке можно посмотреть демонстрацию конечного результата.
Читать дальше →

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 6 из 6

Reading time6 min
Views61K

Содержание основного курса




Улучшение кода






Official translation (with a bit of polishing) is available here.




Shadow mapping


Ну вот наш краткий курс подходит к концу, задача на сегодня — научиться отрисовывать тени (внимание, просчёт полутеней — это отдельная тема):



Как всегда, код доступен на гитхабе
Читать дальше →

Information

Rating
Does not participate
Location
Barcelona, Barcelona, Испания
Date of birth
Registered
Activity