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

Миллион лицензионных 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 433
Comments 34

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

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

Читать дальше →
Total votes 20: ↑4 and ↓16 -12
Views 503
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.7K
Comments 20

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

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

Расширяемым классам — расширяемые Builder'ы!

Java *
Tutorial
Недавно я столкнулся с задачей, которая оказалось гораздо менее тривиальной, чем показалась на первый взгляд. Пусть есть некоторый класс(в моём примере immutable), для которого есть builder. Необходимо иметь возможность наследоваться от этого класса, предоставляя builder, унаследованный от builder-a своего предка. Под катом я покажу ход своих размышлений, неудачные варианты и окончательное решение задачи.
Читать дальше →
Total votes 32: ↑28 and ↓4 +24
Views 4K
Comments 28

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

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

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

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

Читать дальше →
Total votes 49: ↑37 and ↓12 +25
Views 59K
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.5K
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 119K
Comments 86

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

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



В изображении, которое вы видите, используется вектор, но он растянут по центру. И это удивительно! Возможность растягивать вектор только в определенных областях предоставляет, по истине, колоссальные возможности. А если учесть, что есть проекты позволяющий использовать вектор на более ранних версиях андроида, векторные изображения начинают показывать себя во всем своем великолепии.
Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Views 8.7K
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 35K
Comments 47

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

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

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

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

Java *ООP *

О чем все это?


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

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

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

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

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

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


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

Читать дальше →
Total votes 19: ↑8 and ↓11 -3
Views 4.6K
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.3K
Comments 1
1