Pull to refresh

Миллион лицензионных Delphi/Builder для школьников России

Lumber room
1 февраля распространен пресс-релиз согласно которому Федеральное агентство по образованию России приобрело у компании CodeGear (принадлежащей Borland Software Corporation) лицензии на 1 миллион мест на продукты Delphi, Delphi для .NET и C++ Builder. Фактически речь идет о CodeGear RAD Studio.

Приобретение сделано в рамках нацпроекта «Образование», получившего необходимое финансирование от правительства. Выбор продукта для России вполне логичен. Трудно представить обучение программированию в наших школах и ВУЗ-ах без Паскаля.

А для CodeGear/Borland это, очевидно, не только успешная продажа сегодня. Это возможность получить в будущем целое поколение сторонников Delphi и С++ Builder.
Total votes 16: ↑14 and ↓2 +12
Views 496
Comments 34

Знаете как узнать сколько сейчас минут? ( на разных языках).Альтернатива Hello World.

Lumber room
Проблема «Hello World» — в том что непонятно заранее куда будет выведен этот самый «Hello World». То ли в консоль, то ли в Браузерное окно, то ли в MessageBox, то ли в отладочное окно.
Задачка — «Минутка» показывает именно объектное представление языка. Насколько просто обратиться к значению минутки текущего времени на разных языках.
Поэтому ниже привожу примеры именно получения текущей минутки. Если время например: 8:26:30, то в итоге мы должны получить 26.
Не важно числом или цифрой.
Хочется добавить ограничение: без использования дополнительных библиотек.

Читать дальше →
Total votes 20: ↑4 and ↓16 -12
Views 623
Comments 32

Автоматизация OpenOffice: Окончание

C++ *
Продолжение первой части статьи.

OpenOffice Win C++

2. Повторное использование DLL в своей программе


Возможности:
  • открытие XLS файла,
  • открытие файлов OpenOffice
  • возможность открытия в скрытом режиме
  • чтение данных из электронной таблицы
  • полный спектр манипуляции с данными: вставка текста, числа, форматирование, объединение ячеек, установка границ, установка ширина столбца
  • выгрузка xls таблицы на диск
  • возмоность работы под WINE, при условий установки OpenOffice под Wine
  • использование формул
  • генерация версионно зависимого RDB файла налету (при необходимости)

На работе мы используем C++ Builder для написания внутренних программ, так что я делаю еще одну обертку над DLL для удобной работы с API.
Читать дальше →
Total votes 45: ↑37 and ↓8 +29
Views 4.9K
Comments 20

C/C++. Способ разбора командной строки

C++ *
Sandbox
Не так давно на работе встала передо мной задача написать прогу в среде C++ Builder, и был в ней момент, когда нужно парсить командную строку. К задаче прилагалось так же волшебное «можешь юзать все исходники, которые есть. Лежат они тут: ...». Первым делом полез, конечно, по адресу… и нашел там жутко ветвящуюся структуру кода, в которой попытался разобраться и решил, что подгонять ее под себя – ад. Поэтому пришло мне в голову написать что-то подобное Qt-шной системе сигналов и слотов, только для C++ Builder’а и аргументов командной строки.
Итак, начнем. Идея такова: анализ командной строки сводится к проверке, есть ли в аргументе спецсимвол (в моем случае – это «-» – был взять стандарт Linux). В зависимости от этого аргумент читается как имя параметра или его значение. Для вызова функций обработки используется ассоциативный массив, т.е. массив в котором в качестве ключей будут имена доступных параметров, а значений – адреса функций обработки конкретного параметра. Вот, в общем-то, и все. Приступим к реализации?
Читать дальше →
Total votes 12: ↑6 and ↓6 0
Views 21K
Comments 12

Пишем своё расширение для браузера Mozilla Firefox

Firefox JavaScript *
Tutorial
Итак, после обновления Firefox до 19 версии, полностью отвалилось горячо любимое расширение Яндекс.Бар. Не забуду напомнить, что Яндекс.Бар был заменен Яндекс.Элементами, которые понравились чуть больше, чем никому, поэтому и получили свои заслуженные 2 бала из 5ти.

Почему не понравились? Заменили адресную строку, стало неудобно просматривать почту, заменили закладки и убрали корректор адресной строки (под предлогом установки Punto Switcher, который может и хорош для обычного работника, но никак не для программиста. Поэтому и был удален почти сразу же, как установлен. Да и если можно было бы настроить, то всё равно желание пропало).

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

Читать дальше →
Total votes 49: ↑37 and ↓12 +25
Views 60K
Comments 48

Создаем свой язык на Groovy

Groovy & Grails *
Sandbox
Tutorial
Основная проблема императивных языков программирования — их низкая приближенность к естественным языкам.

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

Например, у меня есть иерархия классов работы с заказами на продукты для клиентов:
// Клиент
class Customer {
    int inn
    String name
    String address
    String phone
}

// Клиенты
class Customers {
    Customer findByInn(inn)
    void add(Customer customer)
}

// Продукт
class Product {
    String article
    String name
    double price
}

// Продукты
class Products {
    Product findByArticle(article)
    void add(Product product)
}

// Заказ
class Order {
    int num
    Customer customer
    List<OrderDetail> details = []

    OrderDetail findByPos(pos)
    void add(OrderDetail detail)
}

// Товар заказа
class OrderDetail {
    int pos
    Product product
    def count = 1
    def getSum() { count * product.price }
}

// Заказы
class Orders {
    Order findByNum(num)
    void add(Order order)
}


Сама бизнес логика описания работы будет выглядеть вот так:
Читать дальше →
Total votes 12: ↑8 and ↓4 +4
Views 7.6K
Comments 4

Идеальный css-framework. Maxmertkit widget manager – build your own framework

CSS *HTML *Node.JS *
image

Добрый день!
Как и обещал некоторое время назад, я выпустил бету maxmertkit widget manager. Я давно хотел npm или gem, но для css. Добавил несколько зависимостей в json-файл, набрал команду и все установилось. Это быстро и удобно. Хороших решений я не нашел, значит пора реализовать свое. Пока не начал, ссылки на статьи о том, с чего все начиналось – первая и вторая статьи. Можно не читать, кратко я все перескажу здесь. Можно сразу зайти на портал и разобраться что к чему, а также посмотреть видео – www.maxmertkit.com.
Читать дальше →
Total votes 27: ↑23 and ↓4 +19
Views 12K
Comments 13

Picaso 3D-Builder — Сделано в России

DIY
Сегодняшний рассказ будет о еще одном весьма интересном и достойном 3D-принтере, о котором ранее на Хабре практически не упоминалось, и с создателями которого мне недавно довелось немного пообщаться.

Picaso 3D-Builder


image
Отличительной особенностью данного принтера является его Альма-матер, а именно:
  1. хотя, как не трудно догадаться, взглянув на картинку, за основу и был взят классический Prusa Mendel, вся последующая «обработка напильником» была спланирована исключительно российской командой;
  2. принтер имеет 100% российский цикл производства. Да-да, не удивляйтесь, это действительно так. И какие преимущества и недостатки последовали за таким решением я как раз расскажу далее;
  3. и принтер комплектуется собственным ПО для работы Picaso Polygon. ПО является закрытым и напоминает Repetier-Host, но в отличии от последнего содержит набор пресетов специально для Picaso 3D-Builder.

А далее по порядку и поподробнее.
Total votes 75: ↑59 and ↓16 +43
Views 49K
Comments 61

Библиотека Android Data Processor для легкого построения REST запросов и их обработки

Development for Android *
В повседневной работе постоянно сталкиваюсь с разработкой приложений использующих REST сервисы. Существующие библиотеки помогающие в построении запросов и их обработку не слишком меня устраивали по ряду причин. Возникла мысль о создании простого инструмента наподобие Universal Image Loader позволяющего быстро строить запросы и парсить полученные данные. В результате появился Android Data Processor

Процессор данных предназначен для выполнения REST запросов к сервисам или локально к файлам.
Запросы могут выполнятьс синхронно или асинхронно. Процессор не содержит парсеров. Для обработки результатов вы используете свои любимые парсеры данных и передаете им полученные данные в виде InputStream, String.
Читать дальше →
Total votes 18: ↑14 and ↓4 +10
Views 7K
Comments 18

Элегантный Builder на Java

Java *
Наверняка большинство сколько-нибудь опытных программистов знакомы с паттерном Builder. Он позволяет сделать инициализацию структур данных более наглядной, гибкой при этом сохраняя такое полезное их свойство как неизменяемость (immutability). Вот классический пример с первой страницы выдачи гугла на запрос «java builder pattern example». При всех своих преимуществах, самый главный недостаток данной реализации паттерна — в два раза больше кода, по сравнению с обычным плоским бином. Если генерация этого дополнительного кода не проблема для любой популярной IDE, то редактировать такой класс становится достаточно утомительно и читабельность страдает в любом случае.
Что же делать?
Total votes 31: ↑21 and ↓10 +11
Views 130K
Comments 86

Программное создание NinePatchDrawable

Development for Android *
Sandbox
В новом Android Lollipop появился такой интересный компонент как VectorDrawable. Если использовать его с умом, можно значительно снизить объем приложения, сэкономив на графических ресурсах, плюс, использование векторной графики освобождает нас от муторного процесса создания изображений под разные плотности экрана. Первая мысль, которая меня посетила, когда я увидел VectorDrawable, была: “Ух ты! А его можно тянуть как NinePatch?”. Оказалось нельзя. Тут можно было бы немного огорчиться и довольствоваться тем, что хотя бы иконки можно в векторе держать. Однако, я на этом решил не останавливаться. В итоге получилась универсальная утилита, которая из любого Drawable способна сделать NinePatchDrawable.



В изображении, которое вы видите, используется вектор, но он растянут по центру. И это удивительно! Возможность растягивать вектор только в определенных областях предоставляет, по истине, колоссальные возможности. А если учесть, что есть проекты позволяющий использовать вектор на более ранних версиях андроида, векторные изображения начинают показывать себя во всем своем великолепии.
Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Views 8.8K
Comments 2

Самый простой и самый сложный Builder на Java

Java *


Один из часто рассматриваемых паттернов — паттерн Builder. В основном рассматриваются варианты реализации «классического» варианта этого паттерна:

MyClass my = MyClass.builder().first(1).second(2.0).third("3").build();

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

Итак, расссмотрим их:
Читать дальше →
Total votes 21: ↑20 and ↓1 +19
Views 36K
Comments 47

Оптимизация игры на Unity и dev story Tap Tap Builder

Game development *Unity3D *
В копилке каждого инди-разработчика должен быть свой сити-билдер, может быть поэтому я решился «сконструировать» свой велосипед. Конечно же, с квадратными колесами и креслом-качалкой вместо седушки. Работаю я один, поэтому никаких дизайнеров, художников, и тем более моделлеров, в проекте нет. Кроме того, в общем-то, это моя первая игра с трехмерной графикой. Дабы не утруждать себя изучением продвинутых инструментов для создания трехмерных моделей, я решил все сделать своими руками и средствами игровой среды Unity. Там есть только примитивы, вроде кубов да цилиндров, а также возможность их раскрасить. Что ж, следовало запастись терпением и начать «творить», погрузившись в роль архитектора. Полезной информацией для начинающих инди-разработчиков может оказаться мой опыт работы с издателем, а также способы оптимизации игры.

image
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Views 21K
Comments 27

Правильный полиморфный билдер на Java

Java *ООP *

О чем все это?


При реализации chained builder на Java все прекрасно, пока не понадобится добавить наследование. Сразу же возникают две проблемы — как сделать, чтобы методы родительского билдера возвращали объект дочернего билдера и как передавать дочерний билдер в функции, принимающие родительский. Предлагается реализация паттерна, которая позволяет решить обе проблемы. Исходники можно посмотреть здесь на гитхабе.
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Views 13K
Comments 35

Безопасный Builder на Scala и Java

Java *Scala *
Статья о реализации паттерна Builder с проверкой на уровне компиляции, реализованного с помощью параметрического полиморфизма. В ней мы поговорим о том, что такое полиморфизм, каким он бывает. Как устроена магия «оператора» =:= в scala, можно ли повторить ее в java и как используя эти знания реализовать Builder, не допускающий неполной инициализации создаваемого объекта.
Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Views 8.5K
Comments 22

Тьюринг-полнота Generic типов Java

Abnormal programming *Java *Mathematics *

Периодически на хабре можно встретить статьи о том, какие невероятные вещи можно сделать на шаблонах C++: конечные автоматы, лямбда-исчисление, машина Тьюринга и многое другое.


Параметризованные типы в Java традиционно считаются лишь пародией на шаблоны C++ (несмотря на то, что их даже сравнивать как-то некорректно), и причины этого несложно понять. Тем не менее не всё так плохо, и компилятор Java можно заставить производить во время проверки типов любые вычисления, лишь бы хватило оперативной памяти. Конкретный способ это сделать был описан в ноябре 2016-го года в этой прекрасной публикации. Его я и хотел бы объяснить.


Для затравки приведу следующий код. Корректен ли он? Предлагаю скомпилировать и проверить, угадали ли вы результат.


class Sample {

    interface BadList<T> extends List<List<? super BadList<? super T>>> {}

    public static void main(String[] args) {
        BadList<? super String> badList = null;
        List<? super BadList<? super String>> list = badList;
    }
}

Узнать ответ

Компилятор выбросит java.lang.StackOverflowError независимо от размера стэка.


Разберёмся, почему компилятор ведёт себя именно так (я бы не назвал это багом), как понимание данных причин может быть полезно и причём тут машина Тьюринга.

Читать дальше →
Total votes 42: ↑42 and ↓0 +42
Views 15K
Comments 12

Краткий справочник информатики

Programming *Perfect code *Designing and refactoring *Haskell *ООP *

Область ИТ растёт, и легко заблудиться в зоопарке подходов, фреймворков и технологий, которые громко заявляют о своей "новизне" и "эффективности". Но за обёрткой обычно скрываются старые добрые идеи, заново "изобретённые" в другом контексте. В итоге распространяется не самая простая и эффективная, а самая разрекламированная реализация. Разработчики не успевают вдумчиво произвести выбор из-за постоянного недостатка времени, а менеджеры выбирают самое распространённое, чтобы снизить риски при поиске разработчиков.


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

Читать дальше →
Total votes 19: ↑8 and ↓11 -3
Views 5.1K
Comments 64

Строители против синтаксиса Java

JUG Ru Group corporate blog Java *
Translation

Шаблон проектирования «строитель»один из самых популярных в Java.


Он простой, он помогает делать объекты неизменяемыми, и его можно генерировать инструментами вроде @Builder в Project Lombok или Immutables.


Но так ли удобен этот паттерн в Java?

Читать дальше →
Total votes 57: ↑52 and ↓5 +47
Views 23K
Comments 154

Представляем «CLI Builder»‎-ы

JavaScript *Angular *TypeScript *
Translation
Представляем «CLI Builder»‎-ы

В этой статье мы рассмотрим новый API Angular CLI, который позволит вам расширять существующие возможности CLI и добавлять новые. Мы обсудим, как работать с этим API, и какие существуют точки его расширения, позволяющие добавлять новый функционал в CLI.
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 4.7K
Comments 1

Легкое создание отчетов на C/C++

C++ *C *
Sandbox
Если вы разрабатываете на C/C++ какое-либо ПО для операторов (администраторов) больниц, магазинов, сервисов проката гироскутеров, ремонта сотовых телефонов, то наверняка сталкивались с задачей создания отчетов, чтобы печатать их на принтере, ну или хотя бы в PDF. Существует множество сторонних пакетов для Embarcadero RAD Studio, которые позволяют это делать. Такие как FastReport, QuickReport, Crystal Reports и т.д. Но на мой взгляд все эти пакеты требуют глубокого вникания в свой механизм и интерфейс. Много времени уходит на их изучение, и что самое главное, код для генерирования даже самого простого отчета будет состоять из огромного числа строк. Когда я впервые столкнулся с задачей генерирования отчетов под C/C++, то начал с FastReport и понял, что этот инструмент мне абсолютно не нравится.

В этот самый момент в голову пришла замечательная мысль: как круто бы было взять простой EXCEL-файл, добавить в него статическую информацию и отформатировать под свои нужды. В программе останется только открыть этот файл, наполнить его динамическими данными и сохранить или отправить на печать! Это послужило отправной точкой к моему изучению OLE механизма работы с файлами MS Office из программ, разрабатываемых в Embarcadero RAD Studio.
Читать дальше →
Total votes 25: ↑15 and ↓10 +5
Views 9.4K
Comments 16
1