Pull to refresh
  • by relevance
  • by date
  • by rating

Работа с буфером обмена

.NET *
Прочитав заголовок, Вы, наверное, очень удивились.
Ведь казалось бы, все предельно просто — есть объект Clipboard, есть его статические методы (вроде SetText/SetData и GetText/GetData), чего еще для счастья нужно?

Однако, на практике все просто лишь до тех пор, пока Вы копируете или вставляете только базовые объекты, вроде текста или bitmap-картинки. Что же случается, когда нужно оперировать более сложной структурой?

Лично я недавно столкнулся с необходимостью копировать «гиперссылки», которые потом должны легко вставляться в Word/Outlook/любую другую программу. Причем, не полагаясь на то, что программа-получатель сама определит во вставленном тексте ссылку и не преобразует в нужный формат. Поэтому и рассмотрим работу на примере гиперссылки (алгоритм действий для любого другого формата будет аналогичным).

Итак, с чего же начать?
Читать дальше →
Total votes 22: ↑20 and ↓2 +18
Views 16K
Comments 15

Оккамом резаные

Lumber room
Большинство советов создателям веб-проектов сводится, по сути, к банальному здравому смыслу: думай о пользователе, не злоупотребляй. Тем не менее порой приходится сталкиваться с кошмарными гримасами Web2.0 в тех местах, где их совсем не ждешь.

Вот, к примеру, есть простой как бревно и полезный сервис readbag.com. Он позволяет одним кликом направлять открытые в браузере страницы в специальный список, который потом можно открыть в дороге и дочитать интересные статьи.

Казалось бы, ну что тут можно испортить?

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

Во-вторых, у них там есть суперудобный интерфейс для мобильников. Эта падла открывает все мои драгоценные странички в специальном «мобилизаторе» Google. Если кто видел этот мобилизатор, ужаснется вместе со мной: кривая кодировка, отказ открывать страницы хабра, в общем, нахрена мне весь этот тюнинг в Опере Мини, которая идеально открывает любые страницы? А ведь все нормальные люди давно открывают вебы в мобильнике через Оперу Мини.

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

А ведь многие конкурирующие сервисы вообще позволяют не создавать пароль. Если подумать — зачем он здесь нужен-то?

Без фанатизма, господа, умоляю вас. Законы Мерфи и для Гугля никто не отменял.

UPD Для всех заинтересованных в оптимизации процесса прочтения новостей — в комментах подсказали отличный сервис www.laterloop.com, сделанный для людей. Рекомендую: именно благодаря откладыванию статей я справился с мультитабозом и рсс-неврозом :)
Total votes 30: ↑27 and ↓3 +24
Views 1.4K
Comments 16

C++/CLI — «клейкий» язык

Programming *
В этом топике я расскажу про C++/CLI — промежуточный язык для склеивания кода на C/C++ и .NET

Это довольно распространённая задача, ведь на C/C++ написаны тонны проверенного временем высокопроизводительного кода, который невозможно переписать на управляемые языки.

Наша задача — обеспечить .NET-интерфейс к этим библиотекам. Но как это сделать, если они написаны на C/C++?

Microsoft предлагает два варианта решения проблемы.
 
Читать дальше →
Total votes 46: ↑43 and ↓3 +40
Views 36K
Comments 17

.NET Interop на примере работы с сокетами

.NET *
Хватит мне уже гнать про теорию, вы мне практику давайте, практику!


У нас есть множество технологий. Одни неимоверно быстры, другие неимоверно удобны. Одни позволяют летать со скоростью света, другие позволяют разрабатывать со скоростью света.

Споры насчёт того, какой же подход лучше, утихают редко. Сейчас я покажу, как можно скрестить ежа с ужом. У нас есть .NET, которым можно быстро делать и есть Native, который может быстро делать.

В образовательных целях мы будем скрещивать эти два направления. У статьи есть ещё одна цель. В её основе лежит написанная мною и Arwyl'ом программа под названием DuSter. Эта программа представляет собой сервер-пустышку, который позволяет тестировать сетевые программы. Сервер очень прост в использовании, достаточно гибко настраивается, поддерживает файлы описания протоколов, которые позволяют более-менее автоматизировать тестирования работы любых протоколов. Я занимался разработкой сетевого уровня, мой друг — бизнес-логикой и парсингом протоколов. Получилось что-то неимоверно хорошо вылизанное и приятное. Мы гордимся своей программой, и хотим предоставить её сорцы миру, для некоммерческого использования.
И так, приступаем
Total votes 35: ↑29 and ↓6 +23
Views 6.6K
Comments 50

.NET в unmanaged окружении – использование и родовые проблемы

.NET *
Managed код и .NET Framework – совершенно замечательная вещь с точки зрения программиста, которому надо кровь из носу выдавать максимально стабильно работающие программы. Использование .NET позволяет очень сильно сократить затраты на разработку, тестирование и сопровождение программных продуктов, особенно по сравнению с C++ или Delphi.

Однако, managed код имеет одну очень серьезную родовую травму, которая прямо проистекает из его достоинств – он изначально несовместим с unmanaged средой, в которой вынужден работать. Boxing, поля памяти, отсутствие прямой адресации и прочие ухищрения, призванные облегчить жизнь программисту, приводят к тому, что взаимодействие managed и unmanaged кода становится проблемой.

Однако нет такой проблемы, которую нельзя решить (пусть даже с помощью топора и лома). Сегодня у нас краткий обзор возможностей организации взаимодействия между managed и unmanaged кодом. Многие C# и особенно VB.NET программисты боятся этого, но на самом деле в этом нет ничего страшного. Начнем мы с самых примитивных методов, которые будут интересны разве что новичкам (поэтому матерые волки .NET могут с чистой совестью первую часть статьи пропустить), и закончим описанием того, что делать, если хочется написать программу на .NET, но сделать это невозможно (а такое тоже бывает). Естественно, к каждому случаю будут приведены конкретные примеры, быть может, хабрачеловеки расскажут мне о моей собственной велосипедности. Параллельно я скажу пару слов о подводных камнях при работе с VSTO и Windows Shell.
Читать дальше →
Total votes 41: ↑35 and ↓6 +29
Views 6.1K
Comments 32

P/Invoke и 64-битная разработка

.NET *
Недавно в моем WPF-приложении снова возникла потребность в ClearType постпроцессинге, т.е. добавлении ClearType-образных свойств графике которая изначально рендерится «обычным» способом. Снова был выбран unmanaged код (Intel C++ stack, OpenMP), но в этот раз взаимодействовать захотелось в 64-битной среде. Вот рассказ о том, насколько это было «весело».

Читать дальше →
Total votes 17: ↑11 and ↓6 +5
Views 2.2K
Comments 36

Шпаргалка по OPC DA 2 в .NET

.NET *
На днях пришлось крепко повозиться с настройкой вызова удалённого сервера по протоколу OPC DA 2.05a, и эта информация бы очень пригодилась, знай я её заранее.

1. Что такое OPC DA и в частности OPC DA 2.05a


В общем случае OPC — это набор открытых протоколов, регламентирующих взаимодействие между собой различных объектов автоматизации, таких как SCADA-системы, к примеру. OPC DA (Data Access) — это один из таких протоколов, он обеспечивает обмен данными с устройствами или программными компонентами. В моем случае по этому протоколу нужно было периодически забирать данные со SCADA-системы. И самое важное — OPC DA работает на базе технологии COM, так что взаимодействие с OPC сервером по сути сводится к взаимодействию с COM сервером.

2. Какие есть библиотеки


Читать дальше →
Total votes 10: ↑8 and ↓2 +6
Views 49K
Comments 4

Automation: быстрый старт или «А ну-ка, Excel, пиши за меня сам!»

Visual Basic for Applications *
Небольшой топик-шпаргалка для быстрого написания скриптов для автоматической обработки документов ms office'а. А так же для помощи в преодолении синдрома чистого листа.

Как правильно заметили в недавнем топике, сама работа скрипта может быть и не быстрой, но чаще важнее сам результат, да и объёмы далеко не всегда такие большие. Зато Automation позволяет написать скрипт практически на любом языке. Здесь я выдам заготовки для JavaScript и IronPython, но, надеюсь, в комментариях найдётся место и для других языков (например, на PowerShell).
Поехали
Total votes 8: ↑5 and ↓3 +2
Views 23K
Comments 2

Интегрируем clojure-библиотеку в java-приложение

Java *Lisp *Clojure *
Язык Clojure отличается очень тесной интеграцией с Java. Прямое использование Java-библиотеки в приложении на Clojure — дело совершенно простое и обыденное. Обратная интеграция несколько сложнее. В этой статье указаны некоторые варианты интеграции кода на Clojure в Java-приложение.
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Views 6.5K
Comments 5

Генерация P/Invoke сигнатур в C#. Нецелевое использование Interface Definition Language и OLE Automation Type Libraries

Abnormal programming *.NET *C# *
Sandbox
Это НЕ очередная статья о том что такое P/Invoke.

Итак, допустим в сферическом C# проекте необходимо использовать какую-либо технологию, отсутствующую в .NET, и все что у нас есть это Windows SDK 8.1 в котором имеется лишь набор заголовочных файлов для C/С++. Придется объявлять кучу типов, проверять корректность выравнивания структур и писать различные обертки. Это большое количество рутинной работы, и риск допустить ошибку. Можно конечно написать парсер заголовочных файлов… Тут просто и понятно все кроме количества требуемых на это человекочасов. Поэтому этот вариант отбрасываем и постараемся как либо иначе свести к минимуму количество необходимых действий для взаимодействия с unmanaged кодом.

Кроме того, полученный в результате код не будет зависеть от разрядности процесса, будет сохранена строгая типизация, будет применено автоматическое тестирование.
Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Views 14K
Comments 3

C#/WPF + Pascal + Assembler: как я восстанавливал свою первую игру

Abnormal programming *.NET *C# *


Рылся я как-то раз в своих исходниках школьных времён, и обнаружил там следующее:
  • Игру на QBasic про космический корабль, расстреливающий астероиды. Жуткий код под дос, зато спрайты анимированы в 3ds Max.
  • Графическую библиотеку на Pascal/Assembler с неплохой скоростью работы
  • Лицензионный компилятор TMT Pascal, который может собирать код под Win32

Не пропадать же добру! Далее — история всего этого, немного ностальгии, и детали реализации «современной» версии игры с использованием старых спрайтов и кода для графики.
Читать дальше →
Total votes 36: ↑36 and ↓0 +36
Views 18K
Comments 5

Позиционирование в сетях Wi-Fi с высокой точностью

Cisco corporate blog Website development *
Одна из самых популярных категорий мобильных приложений сегодня та, что предоставляет сервисы с определением местоположения устройства. Многие люди используют системы позиционирования на своих навигационных устройствах, смартфонах и планшетах. Слабая сторона этих решений в том, что использование системы Global Positioning System (GPS) недоступно внутри помещений из-за сильного погашения сигналов стенами и перекрытиями зданий. Таким образом открывается ниша для надежных решений с позиционированием в помещениях.

Сегодня существует ряд подходов и технологий для решения этой задачи. Компания Cisco уже несколько лет работает над позиционированием с помощью технологии Wi-Fi, учитывая распространенность сетей (практически в каждом помещении) и устройств (практически у каждого человека).

Первые разработки начались в 2007 года, когда была приобретена компания Cognio, чей механизм спектрального анализа был встроен в точки доступа Wi-Fi Cisco Aironet. Возможность анализировать эфир на наличие помех и определять их влияние на производительность сети Wi-Fi открыла новые возможности по обеспечению надежности и производительности беспроводных сетей. Появились и новые задачи – понять где находятся источники помех, т.к. найти их не всегда просто, особенно если помехи намеренно создаются злоумышленниками.

С тех пор алгоритм и портфель решений многократно усовершенствовались и сейчас, в 2015 году, Cisco предлагает новейшее решение позиционирование с высокой точностью, позволяющее определить координату Wi-Fi устройства с точностью до 1м. В ближайшие дни Cisco откроет это решение к заказу в России.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Views 40K
Comments 8

Интересные международные мероприятия апреля

Growth Hacking *
Каждый месяц по всему миру происходят десятки, если не сотни, IT-ориентированных конференций, выставок и других мероприятий.

В третий раз мы собираем все наиболее интересные международные даты этого месяца для того, чтобы представить читателям «Мегамозга» в одном месте.
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 1.7K
Comments 8

Dart Developer Summit 2016: главные новости из мира Dart

Wrike corporate blog Website development *JavaScript *Programming *Dart *


26-27 октября в Мюнхене прошел Dart Developer Summit. Он проводится компанией Google уже второй год подряд и неизменно собирает всех неравнодушных к молодому языку разработчиков.


Как вы, возможно, знаете, команда Wrike активно использует в своем проекте Dart в связке с новым фреймворком Angular 2 (Dart).


На текущий момент в Wrike работает более 45 фронтенд-разработчиков, пишущих Dart, а количество строк кода уже перевалило за несколько сотен тысяч строк. И хотя конференция была рассчитана в большей степени на тех, кто либо начал пользоваться Dart и Angular 2 не так давно, либо пока только рассматривает Dart как возможную опцию, для нас было важно из первых уст узнать новости о развитии платформы, а также пообщаться с разработчиками языка лично.


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


Читать дальше →
Total votes 29: ↑26 and ↓3 +23
Views 4.8K
Comments 3

.NET-обёртки нативных библиотек на C++/CLI

.NET *C++ *C# *
Sandbox

Предисловие переводчика


Данная статья представляет собой перевод главы 10 из книги Макруса Хиге (Marcus Heege) «Expert C++/CLI: .NET for Visual C++ Programmers». В этой главе разобрано создание классов-обёрток для нативных классов C++, начиная от тривиальных случаев и до поддержки иерархий и вирутальных методов нативных классов.

Идея этого перевода появилась после статьи «Unmanaged C++ library в .NET. Полная интеграция». Перевод занял больше времени, чем ожидалось, но, возможно, подход, показанный здесь, также будет полезен сообществу.
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Views 14K
Comments 2

Конвертация xls в xlsx и xml на C#

.NET *C# *Development for Office 365 *
Tutorial

В этой статье я постараюсь рассказать об одном из возможных путей конвертации документов формата xls в xml.


Непосредственно моя задача выглядела примерно так:


Дано:


  1. 1-2 дня времени на поиск и реализацию решения
  2. Найденное решение должно быть настолько бесплатным, насколько это возможно
  3. Известна примерная структура, размер и содержание файла, которые должны быть обработаны, что снимает необходимость читать графики, диаграммы и иные медианные из документа.
  4. Использовать Interop, равно как и иные библиотеки, которые требуют установки Office нельзя, так как это создает лишнюю нагрузку на сервер и требует дополнительной установки офисного пакета.
Читать дальше →
Total votes 17: ↑13 and ↓4 +9
Views 10K
Comments 19

Android interop with SWIG (a guide). From simple to weird. Part 1 — simple

Java *C++ *Development for Android *
Sandbox
Tutorial

SWIG is a tool for generating cross-language interfaces - it provides interoperability of C++ and other languages (C++ and Java in our case). SWIG just simplifies and automizes cross-language interaction; otherwise, you may end up with thousands of lines of handwritten JNI code - but SWIG covers this for you.

This guide is for newbies (Part 1) and for those who experienced in SWIG (part 2). I'm starting from basic setup and usage and ending with complex & weird cases encountered in development. The latter cases are not so complex, rather usual for modern languages, which SWIG doesn't support yet (as lambdas).

This guide is practical. In opposition to overcomplicated huge-volume SWIG documentation, this guide is showing the cases practically. The bits developed by myself while working on the different projects or taken from StackOverflow. This guide allows you to quick-start an Android Studio project and giving practical examples of using SWIG. The link to the Android Studio project is here.

This guide is Android-first. The goal was to make it simple to onboard for Android developers. There are many articles about SWIG, but they are mainly for desktop Java applications, and it is quite an overhead to just try them on Android to check if the solution for the particular problem is working. While this guide includes an Android Studio project, with which you can play around instantly. Of course, all the information given here applies to any Java application.

Warning! I should warn you, that nowadays cross-platform development offers powerful tools. If you are developing a new application it is much more cost-efficient in practice to use ReactNative, Flutter of Kotlin-Native than the SWIG. While SWIG is more suitable to connect the C++ library or existing C++ application core.

Read more
Total votes 3: ↑3 and ↓0 +3
Views 1.1K
Comments 0

extendr: вызываем rust из R (и наоборот)

R *Rust *

R, как и большинство подобных ему высокоуровневых скриптовых языков, часто полагается на код, написанный на более низкоуровневом языке. Библиотеки R - пакеты (packages) - нередко содержат код, написанный на C, C++ или FORTRAN. Нативный код позволяет обойти различные ограничения (например, однопоточность) и ускорить выполнение сложных алгоритмов за счет оптимизаций, попросту недоступных из самого R. Вся эта вычислительная мощь, тем не менее, получает удобный и совместимый с другими инструментами интерфейс на стороне R.

Разработка пакетов с C/ C++ кодом давно налажена благодаря сторонним библиотекам, включая {usethis}, {devtools}, {pkgbuild}, {cpp11} и т.д. Но что насчет других низкоуровневых языков? Ведь R всего-навсего динамически подгружает и вызывает библиотеки, поэтому если соблюсти все необходимые условия, можно, например, создать пакет с кодом, написанном на Rust. Несмотря на то, что на практике это действительно работает, разработка, поддержка и внедрение таких инструментов - довольно трудоемкий процесс. Точнее был трудоемким до этого момента.

Enter extendr, проект, который позволяет соединить R и Rust и с легкостью интегрировать Rust код в пакеты R, одновременно предоставляя возможность хостить R сессию в Rust. extendr находится в разработке довольно давно (больше полугода активной фазы) и представляет собой MVP (minimum viable product), но до сих пор был обделен вниманием. Rust-крейт уже какое-то время доступен на crates.io, а R-пакет ожидает проверки на CRAN.

extendr - отличный способ наладить взаимодействие между разработчиками, пишущими на Rust и R. Если вы знаете один из языков и хотели бы познакомиться со вторым, или же хотите портировать свои R-пакеты с проблематичных C/ C++ на модный Rust, добро пожаловать под cut.

Читать далее
Total votes 9: ↑9 and ↓0 +9
Views 942
Comments 0
1