Pull to refresh
24
0
Send message

Биомастерская: Новый взгляд на биологические науки как инженерные дисциплины

Reading time 4 min
Views 11K
Здравствуйте все.

Сегодня мы предлагаем вашему вниманию очередную экспериментальную публикацию. Кажется, впервые нам удалось найти в активе О'Рейли не столько техническую, сколько научно-популярную книгу.

Несомненно, в нашем веке доктор Моро и доктор Сальватор сильно уступают по популярности доктору Хаусу, однако наука не стоит на месте, вслед за Димой появляется Люба, а в издательстве «O'Reilly» выходит вот такая работа:



Материал об этой книге с «Радара О'Рейли» является уже не первой публикацией Майка Лукидеса на завораживающую тему синтетической биологии, однако мы полагаем, что именно этот краткий обзор станет самой запоминающейся статьей, которую вы прочитаете сегодня. При этом будем весьма благодарны за конструктивную критику и участие в опросе.
Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Comments 3

Беззнаковая арифметика в Java

Reading time 5 min
Views 93K
Как известно, в Java нет беззнаковых типов. Если в Си вы могли написать unsigned int (char, long), то в Java так не получится. Однако нередко возникает необходимость в выполнении арифметических операций именно с числами без знака. На первый взгляд кажется, что беззнаковые типы в принципе-то и не особо нужны (подумаешь, MaxInt для чисел со знаком меньше в два раза, если нужны числа больше, я просто возьму long и далее BigInteger). Но основное различие на самом деле не в том, сколько различных неотрицательных чисел можно положить в signed или unsigned int, а в том, как над ними производятся арифметические операции и сравнения. Если вы работаете с бинарными протоколами или с двоичной арифметикой, где важен каждый используемый бит, нужно уметь выполнять все основные операции в беззнаковом режиме. Рассмотрим эти операции по порядку:

Преобразование byte в short (int, long)


Обычный каст (int) myByte выполнит расширение до 32 бит со знаком — это означает, что если старший бит байта был установлен в 1, то результатом будет то же самое отрицательное число, но записанное в 32-битном формате:

0xff -> 0xffffffff (-1)

Часто это не то, чего бы мы хотели. Для того, чтобы выполнить расширение до 32 бит без знака и получить 0x000000ff, в Java можно записать:

int myInt = myByte & 0xff;
short myShort = myByte & 0xff;

Сравнение без учёта знака


Для беззнакового сравнения есть лаконичная формула:

int compareUnsigned(int a, int b) {
    return Integer.compare( a ^ 0x80000000, b ^ 0x80000000 );
}

Для byte, short и long, соответственно, константы будут 0x80, 0x8000 и 0x8000000000000000L.
Читать дальше →
Total votes 46: ↑44 and ↓2 +42
Comments 27

.NET/Mono в Java? Легко!

Reading time 11 min
Views 20K
Здравствуйте. Хочу представить свой проект – компилятор .NET/Mono в Java. Целью проекта является создание компилятора, и набора стандартных библиотек позволяющих переносить написанные приложения и библиотеки на платформу Java, версии 1.6 и выше. Из аналогичных проектов мне известен лишь проект dot42. Но он заточен под Android и имеет собственную стандартную библиотеку не совсем совместимую с .NET/Mono.

Пока есть только альфа версия, и поэтому для реального использования компилятор пока не годится, однако уже частично работоспособен, генерирует валидный код Java и поддерживает часть стандарта ECMA-335.

Исходные коды на github.com: https://github.com/zebraxxl/CIL2Java

Подробнее о том, что не поддерживается, что поддерживается и как это все работает.
Total votes 74: ↑71 and ↓3 +68
Comments 36

Пробуем Xcode Live Rendering

Reading time 6 min
Views 15K
Как вы знаете, в Xcode 6 и iOS 8 SDK Apple добавила возможность рендеринга кастомных компонентов и редактирования их свойств прямо в стандартном Interface Builder (здесь должно быть едкое упоминание о том, что это было еще в Delphi древних версий).

Основы


Для начала нам понадобится какой-то самодельный наследник UIView, чтобы заставить Xcode рендерить его в Interface Builder. Для этого его нужно пометить атрибутом IB_DESIGNABLE (технически в Objective-C это макрос, ну раз Apple называет это атрибутом, и в Swift это атрибут, так тому и быть):
IB_DESIGNABLE
@interface XXXStaticPriceView : UIView

@property (nonatomic, copy) IBInspectable NSNumber *price;
@property (nonatomic) IBInspectable NSUInteger amount;
@property (nonatomic) IBInspectable NSNumberFormatterRoundingMode roundingMode;

@property (nonatomic, getter = isHighlighted) IBInspectable BOOL highlighted;

@property (nonatomic, copy) IBInspectable UIColor *textColor;
@property (nonatomic, copy) IBInspectable UIColor *outlineColor;

@end

Теперь можно создать storyboard (или xib) и разместить там наш view, и Xcode должен будет его успешно отобразить (предварительно собрав проект):

Читать дальше →
Total votes 22: ↑20 and ↓2 +18
Comments 18

Обзор Windows­-приложений для наведения порядка в фотоархивах

Reading time 9 min
Views 246K
Задавшись вопросом найти все фотографии близкого человека, или разбирая фотки из похода, турпоездки и т.д. мы часто начинаем мониторить папки на компьютере. Однако, уже спустя час-другой многие бросают эту затею, пройдя меньше половины фотоархива и устав от поиска ненужных снимков среди сотен «Новых_папок_222» и десятков «DCIM».

image

Мы торопимся жить. Наши воспоминания складируются в папки, сливаются с флешек фотоаппаратов, синхронизируются cо смартфонов и… забываются. В этом обзоре постараюсь отметить сильные и слабые стороны приложений, доступных обычным людям с Windows, которые могут подарить нашим воспоминаниям вторую жизнь.
Читать обзор
Total votes 45: ↑36 and ↓9 +27
Comments 80

Стивен Вольфрам: “Внедряя вычисления повсюду”

Reading time 24 min
Views 38K
Перевод доклада Стивена Вольфрама, прочитанного им на фестивале SXSW 2014.
Оригинальный текст вы можете найти здесь.

sw-sxsw.png

Две недели назад я выступал с речью на конференции SXSW в Остине, Техас. Эта статья является немного доработанными тезисами доклада (это конспект текста, включающий демонстрации, от которых пришлось отказаться в процессе выступления):

Итак, на этот час запланировано довольно много.

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

Мне всегда нравилось представлять программы вживую. Но сегодня я собираюсь рискнуть больше обычного и продемонстрировать многие вещи, находящиеся еще на стадии тестирования. Надеюсь, что хотя бы большая часть из них работает.

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

Можно сказать, я гонялся за этой идеей 40 лет. Я уже давно балансирую на стыке науки и технологий — создаю все более масштабные строительные блоки и строю из них все более высокую башню. И каждые несколько лет мне удается увидеть куда она будет расти дальше. По-моему, получается здорово. Однако, в последние несколько лет случилось нечто удивительное — своего рода великая унификация, которая ведет к технологическому Кембрийскому взрыву. И сегодня я впервые вам частично её представлю.

Но, для начала, немного истории. 40 лет назад я был 14-летним юнцом, который впервые прикоснулся к компьютеру (он тогда еще был размером со стол). Я не часто использовал его как нечто фундаментальное, но пытался с его помощью понять некоторые вещи из физики, которая меня по-настоящему интересовала. В тот момент я открыл для себя некоторые важные вещи, которыми пользуюсь до сих пор. Но сейчас я понимаю что самая важная вещь, которую я понял тогда относилась вовсе не к физике: чем лучше инструменты, которые мы используем, тем глубже мы сможем копнуть. Мне не очень хорошо давалась “математика на бумаге”, а в то время это было серьезной проблемой для тех, кто хотел заниматься физикой. Однако, я осознавал, что расчеты можно делать на компьютере и начал создавать инструменты для этого. Очень скоро я с моими программами был лучше всех в математических расчетах для физики.

Вернемся в 1981-й год. В этом году случилось нечто восхитительное для 21-летнего ученого — я превратил все это в свой первый продукт и свою первую компанию. Важно то, что это заставило меня осознать — программные продукты могут стимулировать интеллектуальное мышление. Предстояло выяснить как создать язык для математических расчетов на компьютере, и мне потребовалось многое понять о вычислениях чтобы достигнуть цели. А потом я снова погрузился в основы науки уже с использованием созданных инструментов.

В итоге, я понял, что в то время как с математикой все хорошо, её фундаментальная концепция нуждается в обобщении. Я начал изучать всю вселенную всевозможных формальных систем, которая по сути является всеобщей вычислительной вселенной возможных программ. Я ставил небольшие эксперименты — как бы направлял свой вычислительный телескоп на части этой вселенной и смотрел что там было. То что я увидел, было потрясающе. Ниже я покажу вам несколько простых программ.
Читать дальше →
Total votes 107: ↑102 and ↓5 +97
Comments 56

АнтиБлог: дневник только для себя

Reading time 4 min
Views 14K


Предисловие


Друзья, я, к моему глубочайшему сожалению, не умею писать красивые, длинные и складные статьи. Я всего лишь разработчик на C++. Некоторые даже говорят, что хороший. И вот случилась со мной неприятность — написал я программу, но рассказать о ней толково не могу. Рассказать так, чтобы люди захотели ей пользоваться. Нет, Вы не подумайте, это не первая моя программа, у меня за спиной восемь лет опыта на C++, десять лет программирования в принципе на многих языках. Просто именно сейчас я захотел разрабатывать не ради разработки, а ради того, чтобы моей программой пользовались люди, чтобы она была кому-то, кроме меня, полезной. Чтобы я знал, что я это делаю не только ради получения опыта, хотя это тоже очень ценно само по себе, но и ради того, чтобы кто-то, может в соседнем доме, а может на другом конце планеты, кликал по иконке моей программы. Мне бы, от осознания этого, было чертовски приятно. И не важно, какую именно задачу эта программа выполняет, важно лишь то, что она работает. Работает на благо людям. Ведь разработчики именно для того и есть на свете, чтобы их творения приносили пользу другим людям.
Читать дальше →
Total votes 63: ↑44 and ↓19 +25
Comments 53

Создание и использование плагина для Clang в Xcode

Reading time 9 min
Views 6.4K

Данный туториал описывает создание плагина для Clang и покрывает следующие шаги:


  • настройка окружения
  • создание базового плагина
  • создание Xcode-проекта для разработки плагина
  • генерирование предупреждений
  • генерирование ошибок
  • интеграция плагина в Xcode
  • интерактивные подсказки по устранению предупреждений и ошибок


TL;DR

Готовый плагин можно найти здесь
Читать дальше →
Total votes 23: ↑22 and ↓1 +21
Comments 0

Бесплатные книги

Reading time 3 min
Views 60K
Несколько книг по разным темам, которые находятся в открытом доступе.

Основы программирования
Читать дальше →
Total votes 243: ↑239 and ↓4 +235
Comments 32

Ломаем iOS-приложение. Часть 1

Reading time 13 min
Views 72K
Вы хорошо поработали, и вот ваше приложение в App Store!

  • Храните учётные записи юзеров?
  • Используете встроенные покупки?
  • Не хотите показывать своё ноу-хау?

Повод задуматься о безопасности кода и данных! Мы будем искать уязвимости в тестовом приложении. В этой статье поговорим о безопасности данных, а в следующей — перейдём к коду.
Много текста и картинок
Total votes 63: ↑51 and ↓12 +39
Comments 22

Lock-free структуры данных. Основы: откуда пошли быть барьеры памяти

Reading time 22 min
Views 93K

Как только я заинтересовался lock-free алгоритмами, меня стал мучить вопрос – а откуда взялась необходимость в барьерах памяти, в «наведении порядка» в коде?
Конечно, прочитав несколько тысяч страниц руководств по конкретной архитектуре, мы найдем ответ. Но этот ответ будет годен для этой конкретной архитектуры. Есть ли общий? В конце концов, мы же хотим, чтобы наш код был портабелен. Да и модель памяти C++11 не заточена под конкретный процессор.
Наиболее приемлемый общий ответ дал мне мистер Paul McKenney в своей статье 2010 года Memory Barriers: a Hardware View of Software Hackers. Ценность его статьи – в общности: он построил некоторую упрощенную абстрактную архитектуру, на примере которой и разбирает, что такое барьер памяти и зачем он был введен.
Вообще, Paul McKenney – известная личность. Он является разработчиком и активным пропагандистом технологии RCU, которая активно используется в ядре Linux, а также реализована в последней версии libcds в качестве ещё одного подхода к безопасному освобождению памяти (вообще, о RCU я хотел бы рассказать отдельно). Также принимал участие в работе над моделью памяти C++11.
Статья большая, я даю перевод только первой половины. Я позволил себе добавить некоторые комментарии, [которые выделены в тексте так].
Передаю слово Полу
Total votes 123: ↑117 and ↓6 +111
Comments 19

Lock-free структуры данных. 1 — Начало

Reading time 12 min
Views 144K

Я надеюсь, что эта статья станет началом цикла заметок о lock-free структурах данных. Я хочу поделиться с хабрасообществом своим опытом, наблюдениям и размышлениями о том, что такое lock-free структуры данных, как их реализовывать, подходят ли концепции контейнеров стандартной библиотеки STL к lock-free контейнерам, и когда стоит (и стоит ли вообще) применять lock-free структуры данных.

Читать дальше →
Total votes 165: ↑161 and ↓4 +157
Comments 39

Lock-free структуры данных. Основы: Атомарность и атомарные примитивы

Reading time 15 min
Views 106K

Построение lock-free структур данных зиждется на двух китах – атомарных операциях и способах упорядочения доступа к памяти. В этой статье речь пойдет об атомарности и атомарных примитивах.

Анонс. Спасибо за теплый прием Начал! Вижу, что тема lock-free интересна хабрасообществу, это меня радует. Я планировал построить цикл по академическому принципу, плавно переходя от основ к алгоритмам, попутно иллюстрируя текст кодом из libcds. Но часть читателей требует зрелищ не мешкая показать, как пользоваться библиотекой, особо не рассусоливая. Я согласен, в этом есть свой резон. В конечном счете, и мне не так интересно, что там внутри boost, — опишите, как его применять! Поэтому свой эпический цикл я разделю на три части: Основы, Внутри и Извне. Каждая статья эпопеи будет относится к одной из частей. В Основах будет рассказываться о низкоуровневых вещах, вплоть до строения современных процессоров; это часть для почемучек вроде меня. Внутри будет освещать интересные алгоритмы и подходы в мире lock-free, — это скорее теория о том, как реализовать lock-free структуру данных, libcds будет неисчерпаемым источником C++ кода. В Извне будут статьи о практике применения libcds, — программные решения, советы и FAQ. Извне будет питаться вашими вопросами/замечаниями/предложениями, дорогие хабражители.

А пока я судорожно готовлю начало Извне, — первая часть Основ. Статья во многом не о C++ (хотя и о нем тоже) и даже не о lock-free (хотя без atomic lock-free алгоритмы неработоспособны), а о реализации атомарных примитивов в современных процессорах и о базовых проблемах, возникающих при использовании таких примитивов.
Атомарность — это первый круг ада низкий уровень из двух.
Читать дальше →
Total votes 119: ↑116 and ↓3 +113
Comments 37

Что не так с ссылками в С++

Reading time 6 min
Views 35K

Disclaimer: На данный момент я не располагаю достаточным опытом работы с С++11, поэтому все рассуждения следует рассматривать исключительно в контексте С++03, однако буду рад обсудить в комментариях взаимодействие нововведений С++ с рассмотренными в статье проблемами.

Ссылки в C++ появились чтобы удовлетворить синтаксические потребности механизма перегрузки операторов. В чистом С нет ссылочных типов, вместо этого есть понятие lvalue, которое описывается размытой формулировкой «то, что может стоять слева от оператора присваивания».

// Чистый C
int a;
int foo(int);
a = 7; // тип a - int
5 = 7; // и тип 5 - int
foo(42) = 7; // и тип foo(42) - тоже int 

В этом маленьком примере три выражения: переменная a, литерал «5» и вызов функции foo(42) — имеют одинаковый тип — int, но только переменная является lvalue и может стоять слева от оператора присваивания.

С точки зрения С программиста, выражение «foo(42) = 7;» лишено здравого смысла и не должно компилироваться, однако с появлением перегрузки операторов, возникла потребность именно в таких выражениях.

Читать дальше →
Total votes 28: ↑18 and ↓10 +8
Comments 24

Information

Rating
Does not participate
Location
Украина
Registered
Activity