Обновить
1417.76

Программирование *

Искусство создания компьютерных программ

Сначала показывать
Порог рейтинга
Уровень сложности

«Лицо без шрама» или первые шаги в Multicad.NET API 7 (для Nanocad 8.1)

Время на прочтение14 мин
Охват и читатели12K
Волею судеб сложилось так, что для одного из моих хобби, мне понадобилось ковыряться в API к отечественной САПР Nanocad, при этом, не имея каких-то практических навыков в разработке для САПР.

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

В память и со всем уважением к Михаилу Николаевичу, можно сказать: «Наберите воздуха в грудь…» эти американцы разместили у себя на сайте в открытом доступе… инструкцию по началу работы! Какие же они там все ту… в общем вы поняли, это вам не «лук в колготках хранить».

Но мы с вами как порядочные люди не будем ругать людей, которые дали нам бесплатно вполне вменяемый продукт и доступ к средствам разработки, просто попробуем им немножко помочь, тем более что последняя публикация по MultiCad. NET API была в блоге Nanosoft на Хабре, почти два года назад и надо немного заполнить вакуум.

К сожалению, как полный новичок в этом вопросе я не смогу дать вам материал действительно достойного качества, но по крайней мере мы рассмотрим те вопросы, на которых у меня сразу случился «затык». Получится, как и в прошлом цикле по Data Science статья от новичка – новичкам.

План примерно такой: пару слов о Нанокад, немного в целом о программировании под Нанокад и в конце написание примитивной команды с помощью MultiCAD .NET API 7 (для Nanocad 8.X).

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


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

Как создать блокчейн-проект на Exonum: краткое руководство

Время на прочтение14 мин
Охват и читатели22K
Exonum — это фреймворк с открытым исходным кодом для создания приложений на основе блокчейна. Он ориентирован на работу с закрытыми блокчейнами и применим в любых сферах: FinTech, GovTech и LegalTech.

Сегодня мы проведем небольшой обзор решения, а также в рамках образовательного формата разберемся с тем, как построить простой блокчейн-based проект на Exonum. Весь код, приведенный ниже, вы найдете в репозитории на GitHub.

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

Обновляемые смарт-контракты Ethereum

Время на прочтение4 мин
Охват и читатели11K
Почти перед каждым программистом, который пишет смарт-контракты Ethereum встают вопросы: «Что делать, если нужно будет расширить функционал контрактов? Как быть, если в контракте найдется баг, который повлечет за собой потерю средств? Что делать, если обнаружится уязвимость в компиляторе solidity (что бывало уже не раз)?» Ведь, контракты, которые мы загружаем в сеть, не могут быть изменены. Поначалу довольно сложно осознать: как это код нельзя обновить? Почему? Но в этом отчасти и сила смарт-контрактов Ethereum — пользователи, возможно, меньше бы стали доверять контрактам, которые можно менять.

Постараемся разобрать несколько подходов, которые все же позволяют менять смарт-контракты.
Читать дальше →

Варианты operator<< для логгера

Время на прочтение3 мин
Охват и читатели8.5K

Уважаемые хабровчане, у меня родилась публикация — вопрос. С удовольствием выслушаю вашу критику в комментариях.


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

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

Как программисты-самоучки в реальности получают работу

Время на прочтение4 мин
Охват и читатели180K

Вопрос с Quora:


Как программисты-самоучки в реальности получают работу?

Мне 17 лет и я занимаюсь программированием с 14-ти. Основной упор на Java, я получил 5 баллов по предмету AP Computer Science. Я довольно хорошо разбираюсь в Java (синтаксис, основные классы, GUI/JFrame и т.д.) и неплохо знаком с HTML5 и CSS3. Кажется, мне не хватает многих знаний, чтобы реально претендовать на работу в индустрии (например, как работают СУБД и какую из них следует использовать), и мне интересно, как другие программисты изучают такие вещи. Я планирую пойти в колледж по специальности «Разработка программного обеспечения», но меня начинает расстраивать мысль, что колледж — необходимое условие, чтобы получить работу. Есть ли какие-то курсы, которые я пропустил, хотя должен был изучить их, или что-то другое, чего я не сделал?


Мой ответ:


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

У программиста-самоучки много общего с тем, кто самостоятельно научился игре на гитаре. Не знаю, играл ли ты когда-нибудь на гитаре, так что объясню, как происходит обучение.
Читать дальше →

Симулятор машинок Брайтенберга

Время на прочтение9 мин
Охват и читатели16K
Просто захотелось написать симулятор машинок Брайтенберга. Корни у этой вещи растут из идей построения простеньких роботов, но также она интересна с точки зрения развития сложных систем.


Итак, что же это такое?

(Осторожно, в статье чрезвычайно много картинок и анимаций!)
Читать дальше →

Java EE 8: краткий и весьма оптимистичный обзор новых возможностей

Время на прочтение8 мин
Охват и читатели22K


Автор снимка — Сабине Хюрдлер / Fotolia.com

Привет, Хабр!

Когда-то давно, знойным летом 2013 года вы и именно вы убедили нас взяться за работу над замечательной книгой "Изучаем Java EE 7" Энтони Гонсалвеса, которая выдержала 6 тиражей и стала настоящим бестселлером. Теперь мы всерьез рассчитываем еще до конца года приступить к работе над книгой по Java EE 8 от грамотного и симпатичного специалиста Себастьяна Дашнера.



7 ноября господин Дашнер опубликовал статью с собственными размышлениями о перспективах и плюшках Java EE 8. Под катом вашему вниманию предлагается перевод этой статьи с немецкого языка
Читать дальше →

Тестирование глазами разработчика: инструменты, мифы, ситуации

Время на прочтение10 мин
Охват и читатели22K


Евгений Сафронов, Senior Developer, DataArt

«Тестирование можно использовать для того, чтобы доказать наличие ошибок в программе, и никогда — для того чтобы доказать их отсутствие!»
Эдсгер Дейкстра


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

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

Универсальный cмарт-контракт мультиподписи в Ethereum

Время на прочтение4 мин
Охват и читатели6.5K
Несколько дней назад мы в компании BitClave прочли о недавнем инциденте с мультиподписными кошельками компании Parity Technologies, решили пригляделся к коду их смарт-контракта. Свежий пост в блоге компании Zeppelin Solutions детально описывает произошедший инцидент с технической стороны, поэтому мы хотели бы в нашей статье больше сфокусироваться на принципах проектирования смарт-контрактов.

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

Запуск/отладка Python скриптов в контейнерах LXC/LXD из под VS Code

Время на прочтение12 мин
Охват и читатели12K
Привет, Хабр!

В этой статье хочется поделится с вами настройкой девелоперского окружения под разработку скриптов на Python и запуск их в изолированном окружении, практически за пару кликов в редакторе VS Code.

В качестве изолированного окружения будет рассмотрена первичная настройка и создание контейнера на базе LXC под управлением ОС Ubuntu 17.10. Почему не Docker? Сложно ответить, выдать какие-то аргументы. От части концепция виртуализации ОС субъективно ближе по духу, чем виртуализация процессов, но принцип который здесь будет изложен, с некоторыми поправками, подойдет к запуску кода в Docker-контейнерах.



Что вы получите?


  • Научитесь запускать в один клик python-скрипты в контейнере, а также удаленный debug из VS Code
  • Узнаете как установить LXD, настроить сеть и запустить первый контейнер
  • Ознакомитесь с установкой и настройкой редактора исходного кода VS Code, набором расширений которые позволят комфортно писать и отлаживать код.

Чего здесь не будет?


  • Не будет полного обзора LXC/LXD, вам придется самостоятельно найти дополнительную информацию о Linux-контейнерах.
  • Не будет рассмотрен python модуль virtualenv для создания виртуального окружения на хосте разработчика как альтернатива контейнерам.
  • Не будет сравнения в духе Docker vs LXD, выводы вы сделаете самостоятельно на основании вашего опыта.
Читать дальше →

Проектируем микросервисную архитектуру с учётом сбоев

Время на прочтение10 мин
Охват и читатели17K
Перевод статьи Designing a Microservices Architecture for Failure.

Микросервисная архитектура благодаря точно определённым границам сервисов позволяет изолировать сбои. Однако, как и в любой распределённой системе, здесь выше вероятность проблем на уровне сети, оборудования или приложений. Как следствие зависимости сервисов, любой компонент может оказаться временно недоступен для пользователей. Чтобы минимизировать влияние частичных сбоев, нам нужно построить устойчивые к ним сервисы, которые могут корректно реагировать на определённые типы проблем.

В этой статье представлены самые распространённые методики и архитектурные шаблоны для построения и оперирования высокодоступной микросервисной системой.
Читать дальше →
Количество материалов по блокчейну просто зашкаливает: онлайн-курсы, вебинары по ICO, новые криптовалюты, инвестиции и многое другое. В этом разобраться сложно даже тому, кто пытался майнить на домашних тачках в середине десятых. А новичкам-разработчикам проще отвернуться, чем начать работать в этом направлении. В сентябре Binary District в Digital October запустил собственный курс Blockchain Developer, направленный исключительно на разработчиков. Инсайдеры утверждают, что это серьезный, даже суровый интенсив, дающий неплохие результаты. Мы решили проверить.
Подробности проверки – под катом

Каков должен быть размер у Thread Pool?

Время на прочтение5 мин
Охват и читатели9.2K
В нашей статье Stream API & ForkJoinPool мы уже рассказывали про возможности изменять размер пула потоков, который мы можем использовать в параллельных обработчиках, использующих Stream API или Fork Join. Надеюсь эта информация вам пригодилась, когда находясь на должности Senior Java Developer, вы смогли увеличить производительность разработанной вами системы, изменив размер пула по умолчанию. Так как наши курсы, в целом, заточены на переход ступеньку выше от джуниора и миддла выше, то часть программы строится исходя из основных вопросов задаваемых на собеседованиях. Один из из которых звучит так: «У вас есть приложение. И есть задача использующая Stream API или Fork Join, которая поддается распараллеливанию. При каких условиях вы можете счесть разумным изменить размер пула потоков заданный по умолчанию? Какой размер вы предложите в этом случае?»

Можете попробовать ответить на этот вопрос сами, прежде чем читать дальше, чтобы проверить собственную готовность к подобному интервью на данный момент.

Чтобы теоретические рассуждения подкрепить настоящими цифрами предлагаем погонять небольшой бенчмарк для стандартного метода Arrays.parallelSort(), реализующего разновидность алгоритма merge sort, и исполняемого на ForkJoinPool.commonPool(). Запустим этот алгоритм на одном и том же большом массиве с различными размерами commonPool и проанализируем результаты.


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

Ближайшие события

UB-2017. Часть 1

Время на прочтение14 мин
Охват и читатели12K
От переводчика:
Переводы статьи про неопределённое поведение в языке C от Криса Латтнера, одного из ведущих разработчиков проекта LLVM, вызвали большой интерес, и даже некоторое непонимание со стороны тех, кто не встречался с описываемыми явлениями на практике. В своей статье Крис даёт ссылку на блог Джона Реджера, и на его статью от 2010 года, посвящённую UB в C и C++. Но в блоге Реджера есть и гораздо более новые статьи на эту тему (что не отменяет ценность старых, однако).

Я хочу предложить вашему вниманию свежую статью «Undefined Behavior in 2017». Статья в оригинале имеет очень большой объём, и я разбил её на части.

В первой части речь пойдёт о разных инструментах поиска UB: ASan, UBSan, TSan и т.д.
ASan — Address Sanitizer от компании Google, разработанный на основе LLVM.
UBSan — Undefined Behavior Sanitizer, предназначен для обнаружения различных UB в программах на C и C++, доступен для Clang и GCC.
TSan — Thread Sanitizer, предназначен для обнаружения UB в многопоточных программах.
Если вам эта тема покажется далёкой от практики, я рекомендую дождаться продолжения, потому что в конце вас ждёт поистине огромный список UB языка С++ (их должно быть около 200!)
И я рекомендую прочитать также старые статьи Реджера, они не утратили актуальности.
Об авторе: Джон Реджер является профессором Computer Science в университете штата Юта в США.


Мы часто слышим, что некоторые люди утверждают, что проблемы, вытекающие из неопределённого поведения (UB) в C и C++ в основном решены путём широкого распространения инструментов динамической проверки, таких, как ASan, UBSan, MSan и TSan. Мы здесь покажем очевидное: несмотря на то, что в последние годы произошло множество прекрасных улучшений в этих инструментах, проблемы UB далеки от разрешения, и рассмотрим ситуацию в деталях.


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

Предметно-ориентированные языки для бизнес-приложений — пользовательские интерфейсы

Время на прочтение12 мин
Охват и читатели12K
Эта статья 一 перевод статьи Domain-Specific Languages for Business Applications — Modelling User Interfaces

Разработка бизнес-приложений связана с решением задач в различных предметных областях, таких как хранение данных, обработка бизнес-логики, проектирование интерфейса пользователя. Для прироста производительности и качества не хватит ни одного предметно-ориентированного языка (domain-specific language, DSL), ни нескольких, если они недостаточно интегрированы между собой. Значительные улучшения может принести лишь целостный подход, при котором согласованно применяются несколько DSL для моделирования решений в различных предметных областях.

В этой статье мы рассмотрим пример DSL, с помощью которого мы моделируем стандартизованные пользовательские интерфейсы для наших бизнес-приложений в modellwerkstatt.org. Логика, присущая DSL, позволяет визуализировать графы объектов полностью и в очень простом, декларативном виде. Мы покажем, насколько просто внедряется обычный код Java, с которым можно взаимодействовать, что обеспечивает дополнительную гибкость и безопасность, в частности типобезопасность. Указав на различие между внутренними и внешними DSL, мы перейдем к JetBrains MPS и сразу же рассмотрим наш DSL для интерфейсов пользователя. Наконец, мы приведем ряд общих соображений относительно взаимодействия DSL между собой и их расширения.
Читать дальше →

Анонс митапа ThinkPHP #15 в Харькове

Время на прочтение1 мин
Охват и читатели2.1K

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

[DotNetBook] Реализация IDisposable: правильное использование

Время на прочтение22 мин
Охват и читатели43K
С этой статьей я начинаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. Тема IDisposable была выбрана в качестве разгона, пробы пера. Вся книга будет доступна на GitHub: DotNetBook. Так что Issues и Pull Requests приветствуются :)

Disposing (Disposable Design Principle)



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

IDisposable



Если спросить, что такое IDisposable, вы наверняка ответите что это

public interface IDisposable 
{
	void Dispose();
} 


Для чего же создан интерфейс? Ведь если у нас есть умный Garbage Collector, который за нас чистит всю память, делает так, чтобы мы вообще не задумывались о том, как чистить память, то становится не совсем понятно, зачем ее вообще чистить. Однако есть нюансы.

Примечание


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




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

Мета-взгляд на проблемы (не)образованной молодежи

Время на прочтение12 мин
Охват и читатели27K
Все мы учились в школе, а многие после школы в ВУЗе или университете, кто-то продолжил в аспирантуре. Очень многие продолжают учиться после этого: кто-то на курсах, а многие занимаются самообразованием. Многие сталкиваются с проблемами образования своих детей, а кто-то и внуков. И в принципе проблемы образования и специального обучения небезразличны всем, поскольку все хотят, чтобы врач, если пришлось к нему обратиться, был квалифицированным, а встречный водитель на дороге знал бы правила дорожного движения.


(Г. и А. Огородниковы)

Ну а некоторые причастны к образованию с другой стороны: кто-то преподает в школе, кто-то преподает в ВУЗе, кто-то просто учит своего ребенка читать и считать, кто-то делится своим опытом с молодым недавно пришедшим сотрудником и т.д. У меня очень скромный опыт преподавания, но он был удачным. Сейчас не преподаю и могу не знать современных тенденций. Но проблемами обучения интересуюсь еще и с точки зрения ИИ, разделяя мнение, что в обучении интеллекта искусственного во многом приходится копировать методы обучения интеллекта естественного, подобно тому, как копируют в ИИ свойства естественных нейронов. В соц.группу молодежи уже не вхожу. Однако, несмотря на это, волна Хабра-публикаций на тему «необразованной молодежи» меня, как и многих, заинтересовала настолько, что принял участие в обсуждениях. И наговорил столько, что решил сделать своеобразный дайджест из собственных автоповторов, добавив дополнительные пояснения и учитывая услышанные в обсуждениях возражения. Ниже предлагается этот взгляд стороннего наблюдателя. Думаю, что критики прозвучало уже предостаточно, поэтому сфокусируюсь на конструктивных идеях.
Читать дальше →

Вжух и готово — генерируем документацию из TypeScript кода с Typedoc

Время на прочтение5 мин
Охват и читатели16K

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


Что у нас получилось — можно посмотреть здесь.


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

Открытая трансляция главного зала HighLoad++

Время на прочтение2 мин
Охват и читатели6.6K
image

Отличная новость — как и в прошлом году мы будем транслировать главный зал HighLoad++ с самыми интересными докладами совершенно бесплатно!

Запись первого дня


Трансляция второго дня



Полное расписание доступно на сайте (PDF, HTML).
Читать дальше →

Вклад авторов