Как стать автором
Обновить

Подсветка кода на android. Мой опыт

Java *Разработка под Android *
Tutorial

Во время разработки моего последнего приложения мне пришлось провести довольно много времени, экспериментируя с разными подходами к размещению span'ов в EditText. В этом посте хотелось бы подвести некоторый итог этого времяпрепровождения, а также сэкономить время тем, кто в будущем будет решать подобные задачи.

Кода будет немного, только основные моменты.

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

  • Несмотря на N ядер (каждое с огромной частотой), современный смартфоны все еще очень сильно уступают в производительности даже недорогим, но большим компьютерам.
  • Каждое приложении в андроиде имеет строго ограниченный размер выделяемой памяти. И он не велик.
  • Метод setSpan работает медленно.
  • Чем больше работы вы вынесете в Worker'ы, тем отзывчивее будет ваше приложение.
  • Держать подсвеченным весь текст не получится — только видимую его часть.
  • Довольно очевидно, но все же: поиск места размещения спана в UI потоке делать не получится.


Читать дальше →
Всего голосов 27: ↑27 и ↓0 +27
Просмотры 16K
Комментарии 14

Рисуем знак рубля в Android приложении

Разработка под Android *
Tutorial
В последнее время перед разработчиками все чаще ставится задача использовать символ рубля в тексте. Однако, символ рубля был утвержден относительно недавно, символ получил свой код в стандате Unicode еще позже. Естественно, гарнитура Roboto на текущих платформах еще не содержит знака рубля.
Читать дальше →
Всего голосов 30: ↑23 и ↓7 +16
Просмотры 27K
Комментарии 4

[DotNetBook] Span: новый тип данных .NET

Блог компании Семинары Станислава Сидристого Программирование *.NET *C# *
Tutorial

С этой статьей я продолжаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом (уже готово около 200 страниц книги, так что добро пожаловать в конец статьи за ссылками).


Как язык, так и платформа существуют уже много лет: и все это время существовало множество средств для работы с неуправляемым кодом. Так почему же сейчас выходит очередной API для работы с неуправляемым кодом если по сути он существовал уже много-много лет? Для того чтобы ответить на этот вопрос достаточно понять чего не хватало нам раньше.


Разработчики платформы и раньше пытались нам помочь скрасить будни разработки с использованием неуправляемых ресурсов: это и автоматические врапперы для импортируемых методов. И маршаллинг, который в большинстве случаев работатет автоматически. Это также инструкция stackallloc, о которой говорится в главе про стек потока. Однако, как по мне если ранние разработчики с использованием языка C# приходили из мира C++ (как сделал это и я), то сейчас они приходят из более высокоуровневых языков (я, например, знаю разработчика, который пришел из JavaScript). А что это означает? Это означает что люди со все большим подозрением начинают относиться к неуправляемым ресурсам и конструкциям, близким по духу к C/C++ и уж тем более — к языку Ассемблера.


Примечание


Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:


Читать дальше →
Всего голосов 38: ↑38 и ↓0 +38
Просмотры 28K
Комментарии 24

[DotNetBook] Span, Memory и ReadOnlyMemory

Блог компании Семинары Станислава Сидристого .NET *C# *
Tutorial

Этой статьей я продолжаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. За ссылками — добро пожаловать под кат.


Memory<T> и ReadOnlyMemory<T>


Визуальных отличий Memory<T> от Span<T> два. Первое — тип Memory<T> не содержит ограничения ref в заголовке типа. Т.е., другими словами, тип Memory<T> имеет право находиться не только на стеке, являясь либо локальной переменной либо параметром метода либо его возвращаемым значением, но и находиться в куче, ссылаясь оттуда на некоторые данные в памяти. Однако эта маленькая разница создает огромную разницу в поведении и возможностях Memory<T> в сравнении с Span<T>. В отличии от Span<T>, который представляет собой средство пользования неким буфером данных для некоторых методов, тип Memory<T> предназначен для хранения информации о буфере, а не для работы с ним.


Примечание


Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:


Читать дальше →
Всего голосов 40: ↑39 и ↓1 +38
Просмотры 11K
Комментарии 2

Memory and Span pt.1

Блог компании Семинары Станислава Сидристого Программирование *.NET *C# *

Starting from .NET Core 2.0 and .NET Framework 4.5 we can use new data types: Span and Memory. To use them, you just need to install the System.Memory nuget package:


PM> Install-Package System.Memory

These data types are notable because the CLR team has done a great job to implement their special support inside the code of .NET Core 2.1+ JIT compiler by embedding these data types right into the core. What kind of data types are these and why are they worth a whole chapter?


If we talk about problems that made these types appear, I should name three of them. The first one is unmanaged code.


Both the language and the platform have existed for many years along with means to work with unmanaged code. So, why release another API to work with unmanaged code if the former basically existed for many years? To answer this question, we should understand what we lacked before.


This chapter was translated from Russian jointly by author and by professional translators. You can help us with translation from Russian or English into any other language, primarily into Chinese or German.

Also, if you want thank us, the best way you can do that is to give us a star on github or to fork repository github/sidristij/dotnetbook.
Read more →
Всего голосов 22: ↑21 и ↓1 +20
Просмотры 3.2K
Комментарии 2

Memory and Span pt.2

Блог компании Семинары Станислава Сидристого Программирование *.NET *C# *


Span<T> usage examples


A human by nature cannot fully understand the purpose of a certain instrument until he or she gets some experience. So, let’s turn to some examples.


ValueStringBuilder


One of the most interesting examples in respect to algorithms is the ValueStringBuilder type. However, it is buried deep inside mscorlib and marked with the internal modifier as many other very interesting data types. This means we would not find this remarkable instrument for optimization if we haven’t researched the mscorlib source code.


What is the main disadvantage of the StringBuilder system type? Its main drawback is the type and its basis — it is a reference type and is based on char[], i.e. a character array. At least, this means two things: we use the heap (though not much) anyway and increase the chances to miss the CPU cash.


Another issue with StringBuilder that I faced is the construction of small strings, that is when the resulting string must be short e.g. less than 100 characters. Short formatting raises issues on performance.


This chapter was translated from Russian jointly by author and by professional translators. You can help us with translation from Russian or English into any other language, primarily into Chinese or German.

Also, if you want thank us, the best way you can do that is to give us a star on github or to fork repository github/sidristij/dotnetbook.
Read more →
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 2.9K
Комментарии 0

Memory and Span pt.3

Блог компании Семинары Станислава Сидристого Программирование *.NET *C# *


Memory<T> and ReadOnlyMemory<T>


There are two visual differences between Memory<T> and Span<T>. The first one is that Memory<T> type doesn’t contain ref modifier in the header of the type. In other words, the Memory<T> type can be allocated both on the stack while being either a local variable, or a method parameter, or its returned value and on the heap, referencing some data in memory from there. However, this small difference creates a huge distinction in the behavior and capabilities of Memory<T> compared to Span<T>. Unlike Span<T> that is an instrument for some methods to use some data buffer, the Memory<T> type is designed to store information about the buffer, but not to handle it. Thus, there is the difference in API.


  • Memory<T> doesn’t have methods to access the data that it is responsible for. Instead, it has the Span property and the Slice method that return an instance of the Span type.
  • Additionally, Memory<T> contains the Pin() method used for scenarios when a stored buffer data should be passed to unsafe code. If this method is called when memory is allocated in .NET, the buffer will be pinned and will not move when GC is active. This method will return an instance of the MemoryHandle structure, which encapsulates GCHandle to indicate a segment of a lifetime and to pin array buffer in memory.

This chapter was translated from Russian jointly by author and by professional translators. You can help us with translation from Russian or English into any other language, primarily into Chinese or German.

Also, if you want thank us, the best way you can do that is to give us a star on github or to fork repository github/sidristij/dotnetbook.
Read more →
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 2.2K
Комментарии 0

Отображение текста в Android

Блог компании red_mad_robot Разработка мобильных приложений *Разработка под Android *

Отображение текстовой информации — наверное, самая базовая и важная часть многих Android-приложений. В данной статье пойдет речь о TextView. Каждый разработчик, начиная с «Hello World», постоянно сталкивается с этим элементом пользовательского интерфейса. Периодически в работе с текстом приходится задумываться о реализации различных дизайнерских решений или улучшении производительности при отрисовке экрана.


Я расскажу об устройстве TextView и некоторых тонкостях работы с ним. Основные советы были взяты из докладов прошедших Google I/O.

Читать дальше →
Всего голосов 41: ↑41 и ↓0 +41
Просмотры 34K
Комментарии 8

Flow-протоколы как инструмент мониторинга безопасности внутренней сети

Блог компании Cisco Информационная безопасность *Сетевые технологии *
Когда речь заходит о мониторинге безопасности внутренней корпоративной или ведомственной сети, то у многих возникает ассоциация с контролем утечек информации и внедрением DLP-решений. А если попробовать уточнить вопрос и спросить, как вы обнаруживаете атаки во внутренней сети, то ответом будет, как правило, упоминание систем обнаружения атак (intrusion detection systems, IDS). И то, что было единственным вариантом еще лет 10-20 назад, то сегодня становится анахронизмом. Существует более эффективный, а местами и единственно возможный вариант мониторинга внутренней сети — использовать flow-протоколов, изначально предназначенных для поиска сетевых проблем (troubleshooting), но со временем трансформировавшихся в очень интересный инструмент безопасности. Вот о том, какие flow-протоколы бывают и какие из них лучше помогают обнаруживать сетевые атаки, где лучше всего внедрять мониторинг flow, на что обратить внимание при развертывании такой схемы, и даже как это все “поднять” на отечественном оборудовании, мы и поговорим в рамках данной статьи.
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 24K
Комментарии 3

Применение Flowmon Networks для контроля производительности распределенных приложений и баз данных

Блог компании TS Solution Информационная безопасность *Системное администрирование *Сетевые технологии *


Статью подготовил Dmitriy Andrichenko | Sales Executive, Russia & CIS | Flowmon Networks

Приветствуем Вас на странице нашей новой статьи, посвященной решению задач контроля производительности распределенных сетевых приложений и баз данных. Данная статья является продолжением цикла публикаций, посвященных решениям компании Flowmon Networks и, в частности, продолжением обзора «Сетевой мониторинг и выявление аномальной сетевой активности» с применением технологий безсигнатурного анализа.
Итак, начнем, но в начале скажем пару слов о компании Flowmon Networks и проблематике вопроса.

Для тех, кому лень читать, в ближайшее время состоится вебинар по решениям Flowmon Networks.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 3.1K
Комментарии 1

Эшелонированная защита. Fortinet & Flowmon Networks

Блог компании TS Solution Информационная безопасность *Системное администрирование *IT-инфраструктура *Сетевое оборудование


В последнее время все больше компаний дозревают до эшелонированной защиты, когда одно решение защищает периметр сети, другое — оконечные станции, третье — постоянно мониторит сеть, обнаруживая аномалии, четвертое сканирует сеть на предмет незакрытых уязвимостей и так далее. Одновременно с этим возрастает потребность в различных интеграциях и хорошо, когда они “из коробки”, то есть писать сложные скрипты не нужно.

Мы не так давно писали о новой услуге TS Solution — CheckFlow. Это бесплатный аудит сетевого трафика (как внутреннего, так и внешнего). Flowmon — решение по анализу телеметрии и мониторингу сети, которое дает ценную информацию как для сетевых администраторов, так и для «безопасников»: аномалии, сканирования, нелегитимные сервера, петли, нелегитимные взаимодействия, вторжения в сеть, атаки “нулевого дня” и многое другое.

Также рекомендую обратиться к статье 9 типовых проблем в сети, которые можно обнаружить с помощью анализа с Flowmon.

Интеграция Flowmon & FortiGate


Интеграция была упомянута в нашем блоге. В общем и целом она заключается в том, что Next-Generation Firewall (такой, как FortiGate) защищает периметр, а Flowmon мониторит сетевую инфраструктуру, тем самым заказчик получает полную видимость сети. Однако Flowmon позволяет лишь обнаруживать, но не предотвращать атаки и аномалии, ведь он работает на телеметрии, которая добывается с помощью Netflow/IPFIX. Для вноса в карантин подозрительного или зараженного хоста может использоваться NGFW или же NAC (Network Access Control) решение.

Так вот, вендор Flowmon выпустил shell скрипт, который в ответ на инциденты безопасности может выполнить следующие действия на FortiGate:

  • Заблокировать зараженный хост по IP адресу (IP Ban);
  • Внести в хост карантин с помощью FortiClient по MAC адресу (Quarantine with FortiClient);
  • Динамический карантин на все зараженные хосты по МАС адресам (Access Layer Quarantine);
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 2.2K
Комментарии 3

TAP или SPAN? Рекомендации по зеркалированию трафика для профессионалов

Блог компании НПП «Цифровые решения» Информационная безопасность *IT-инфраструктура *Сетевые технологии *Сетевое оборудование

Полная видимость сети — это основа мониторинга, управления и информационной безопасности. Если вы не можете увидеть проблемы, такие как сетевая атака, несанкционированное использование, неэффективность приложений и др., то как Вы собираетесь их выявлять и эффективно решать?

Сегодняшние сети становятся все больше и сложнее, передавая беспрецедентные объёмы данных с возрастающей скоростью. В современных сетях во много раз больше кадров, чем было 20 лет назад, и мы давно перешли с 10 Мбит/с на полнодуплексные 1, 10, 40, 100 Гбит/с. Наступила эра тотальной безопасности данных, глубокого исследования пакетов (DPI), соответствия законодательству и политикам, сетевого аудита и законного перехвата (СОРМ), для чего требуется отслеживание всех данных, а не просто их «выборка». Всё это делает проблематичным повсеместный доступ к трафику на уровне пакетов, в то время как киберугрозы становятся всё более изощренными. В результате полная видимость сети необходима «как воздух» для мониторинга, управления и защиты вашей сети. Доступ к данным в потоке вплоть до уровня пакетов является первым шагом к получению полной видимости сети, поскольку ничто другое не обеспечивает аналогичный уровень глубины и детализации. Двумя наиболее распространенными методами получения этой информации являются технологии SPAN и TAP.

В этой статье мы рассмотрим специфику доступа к трафику через TAP и SPAN, некоторые фундаментальные соображения, лучшие практики, требования и отфильтруем некоторую дезинформацию о SPAN или доступе к трафику через коммутаторы. А также покажем, что использование TAP является единственной жизнеспособной и надежной технологией в 99% случаев.

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Просмотры 11K
Комментарии 15

Проблемы использования SPAN для мониторинга в современной сети

Блог компании НПП «Цифровые решения» Информационная безопасность *IT-инфраструктура *Сетевые технологии *Сетевое оборудование

Ранее мы опубликовывали статью «TAP или SPAN? Рекомендации по зеркалированию трафика для профессионалов», в которой были описаны отличия подходов по съему трафика и проведен их анализ. Опрос и комментарии показали, что многие специалисты активно используют SPAN. Данной статьей мы дополним информацию о SPAN и расскажем, почему ее нельзя использовать для мониторинга и съема трафика в современной сети.

Читать далее
Всего голосов 2: ↑1 и ↓1 0
Просмотры 3K
Комментарии 7