Pull to refresh

Как надежно сохранить ключи от WebMoney Keeper Classic

Lumber room
Про сабж можно прочесть и на оф. сайте — тут.

Но, на мой взгляд, более удобным и надежным вариантом является использование возможностей одного из сервисов WebMoney Transfer — Enum.

Плюсы:
  • если «рухнет» винда — ничего страшного, доступ к киперу останется;
  • мобильность:
    • можно входить в свой кипер с любого компьютера;
    • авторизоваться на WM-сайтах (мерчант, wm-банкинг и прочие wm-сайты) без кипера;



Минусы:
  • нужно устанавить либо java-приложение для телефона, либо приложение клиент для Windows Mobile. Некоторые могут не осилить.


P.S. Полный список сервисов WebMoney — здесь.
Total votes 5: ↑5 and ↓0 +5
Views 1.1K
Comments 20

Yet Another WebMoney Keeper

Lumber room
=================
= UPDATED 07.08.2008 =
=================
https://www.tinywm.com

Очень много нового, все переписано заново :-)

— Можно оплатить больше услуг (все что есть на telepay.wmtransfer.com)
— Покупка цифровых товаров (!!!). Товары из магазинов на базе www.digiseller.ru (plati.ru, publicant.ru) можно купить в один клик (не все товары, а только тех продавцов, которые в списке доверенных)
— ну и дизайн поменялся, так скромненько, без наворотов
HTTPS

Начиналось всё так: купил я смартфон Sony Ericsson P900. При всем обилии его возможностей мне не хватало самой малости: я не мог управлять из него своим WebMoney кошельком.
Некоторое время спустя появился Java клиент сервиса www.telepat.ru (aka GSM Keeper) и возможность использовать enum-аторизацию для лайта, но:
— java клиента приходилось переустанавливать с выпуском новой версии
— сайт лайта был тяжел для смартфона
— не хватало возможности нормально оплатить услугу за webmoney

Чуть позже GSM Keeper оброс возможностями:
— стало можно оплачивать услуги
— пополнять ATM-карту от cards.webmoney.ru

Когда я сменил смартфон на ASUS P535 выяснилось, что у меня «java не той версии». Какое-то время GSM Keeper не хотел работать именно на той java-машине, что шла вместе с ASUS.

Тогда я взял XML-интерфейсы WebMoney и сделал лично для себя небольшой сайтик, на котором я мог посмотреть баланс своих кошельков и оплачивать счёта.

Потом, наткнулся на интересную фичу WebMoney: управление кошельками по доверенности, и понял, что можно сделать сервис, который позволит выполнять основные действия со своим WM-кошельком каждому, кто доверит этому сервису свой кошелек.
Читать дальше →
Total votes 25: ↑23 and ↓2 +21
Views 503
Comments 40

WmClasses: пользуйтесь на здоровье

Lumber room
В комментариях к посту про TinyWM я обещал выложить в свободный доступ библиотеку для работы с XML-интерфейсами WebMoney Transfer, которая была написана мною для собственных нужд.

Держу слово: скачать исходный код и пример использования библиотеки WmClasses можно на тут.
Читать дальше →
Total votes 6: ↑6 and ↓0 +6
Views 639
Comments 4

E-NUM теперь и на iPhone

Lumber room

Сабж

Появилось клиентское приложение сервиса E-NUM для телефона iPhone.

Как установить E-NUM клиент [updated]

Воспользуйтесь поиском в iTunes или этой ссылкой

Как подключить E-NUM аккаунт

Тут подробно и с картинками »
Total votes 14: ↑5 and ↓9 -4
Views 292
Comments 8

Большие таблицы и ENUM

MySQL *
Продолжение статьи Большие таблицы и уникальные ключи.

У меня снова возникла необходимость изменить структуру достаточно большой таблицы в MySQL. Изменения касались поля типа ENUM.

Итак
Дано. Таблица MyISAM
В таблице есть поле типа ENUM.
Размер — 145 миллионов записей.
Объём на диске — 12 ГБ.
Также в таблице есть уникальный ключ на строковое поле VARCHAR(150).
Необходимо изменить список констант поля ENUM.

То есть имеем поле `my_field` ENUM('A', 'B') NOT NULL. Надо поменять на ENUM('C', 'D', 'E', 'F') NOT NULL.

Делать ALTER TABLE CHANGE COLUMN смысла нет, потому что на таких объёмах данных и с уникальным индексом это займёт вечность. Причина? MySQL при изменении структуры таблицы в большинстве случаев создаёт временную таблицу желаемой структуры, куда построчно копирует все данные. А создание уникального ключа построчно в таких объёмах занимает непомерно много времени.

Однако в памяти у меня засело, что я где-то подобное уже встречал. Нужный мне рецепт я в итоге нашёл в книге «High Performance MySQL», где кстати отыскал и хак из моей предыдущей статьи.

Рецепт прост — подмена файла, где хранится определение структуры таблицы .FRM.
Читать дальше →
Total votes 41: ↑32 and ↓9 +23
Views 24K
Comments 43

Бесплатный MobileMe для FaceTime?

IT-companies
Стив Джобс на презентации iPhone 4 продемонстрировал видео-звонки. Страница продукта. В частности, одной из фич заявлен бесшовный поиск соответствий контактов из записной книги и адресов других пользователей услуги.

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

У Apple уже есть AppleID, который пользователь имеет для покупки приложений, музыки и книг, и есть платный сервис для синхронизации всего MobileMe. Я бы предположил, что там появятся бесплатный план и явно или неявно поиск будет идти через синхронизацию контактов, а также, что указать AppleID можно будет вручную как тип email.

А как считаете вы?
Читать дальше →
Total votes 16: ↑9 and ↓7 +2
Views 299
Comments 14

Мошенничество с Мини по максимуму

Payment systems *
image
Неоднозначная реакция хабросообщества к опубликованной на Хабре моей прошлой статье WebMoney Keeper Mini Extension подтолкнула меня к написанию следующей…

Оказывается, что многие пользователи WebMoney, имея кошельки в киперах Classic или Light, просто опасаются подключать себе WM Keeper Mini, что играет на руку только мошенникам, а не самим пользователям. Почему? Об этом под катом…

Читать дальше →
Total votes 98: ↑82 and ↓16 +66
Views 2.3K
Comments 70

E-NUM клиент для Android

Lumber room
image

Приветствую всех, для кого в заголовке все слова понятны!

Не так давно появился клиент нужного и удобного сервиса E-NUM для устройств под управлением Android OS.

О нём с картинками и прочим текстом под катом.
Читать дальше →
Total votes 31: ↑18 and ↓13 +5
Views 4.4K
Comments 41

Несколько слов об использовании перечислений в изменяющейся среде

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

Читать дальше →
Total votes 11: ↑7 and ↓4 +3
Views 31K
Comments 9

Решение проблемы отсутствия switch(String) в Java c помощью enum

Java *
Sandbox
Случилось однажды так, что моего хорошего коллегу, программирующего на Flex, перевели на проект, где использовался Ext GWT. Периодически приходилось отвечать на вопросы: «Как сделать то-то и то-то в Java?» и «Почему этого нет и как это обойти?». ActionScript, на котором мой коллега привык писать, в сравнении с Java был более гибким и позволял не особо заморачиваться на предмет приведения и описания типов переменных. Каким же было его удивление, когда в конструкции switch невозможно было делать сравнения переменных типа String. Хотя, казалось бы, существует множество технических ситуаций, когда такой switch пригодился бы (обработка разных сценариев в зависимости от содержимого переданной переменной String).

Читать дальше →
Total votes 12: ↑6 and ↓6 0
Views 27K
Comments 17

Реализация перечислений (Enum) в PHP с проверкой типа

PHP *Programming *
Sandbox
Иногда в коде приходится использовать строго типизированные параметры, однако сам язык PHP не является строго типизированным (как, например, C#, в котором присутствует такой тип данных, как перечисления – Enum). Однако выход из данной ситуации все равно можно найти. Порывшись по просторам интернета я так и не нашел подходящего мне решения. Предлагаю вам мое решение данной проблемы.

Проблема заключалась в следующем. Необходимо реализовать функцию, которая бы на вход принимала строго типизированный объект (класс), однако в теле функций необходим перебор значений данного класса и сравнение его с предопределенными константами (этого же класса):
Читать дальше →
Total votes 26: ↑11 and ↓15 -4
Views 7.5K
Comments 24

«Real» enums for MS SQL Server

Microsoft SQL Server *

Как известно, MSSQL не предоставляет возможность создания/использования перечислений, что зачастую влечет за собой неявный, ненадежный, некрасивый, сложно поддерживаемый код. Можно спорить о том, что в реляционной БД перечисления как таковые места иметь не могут, но множество раз в моей (и не только моей) практике рождались подобные строчки:
select * from Process where ProcessType = 1 /* Suspended */
Читать дальше →
Total votes 16: ↑12 and ↓4 +8
Views 17K
Comments 7

Быстрый доступ к map по ключу строке

Programming *C++ *
В статье «String enum — строковые enum» я писал о том как связывать текстовые представления с enum class — метод хороший но только если все элементы заранее известны, но зачастую бывает что строки являются некими идентификаторами и конечно же заранее не известны, а зачастую будут добавляться позднее и причем без пересборки программы.

Требования к библиотеке все теже:

  • Кроссплатформенность;
  • Минимум зависимостей;
  • Скорость чтения;
  • Простой синтаксис;


Пример конфига
{
    "objects":
    [
        {
            "id": "object1",
            "events":
            {
                "event1":{
                    "give": {"object2": 4}
                },
            }
        },
        {
            "id": "object2",
            "events":
            {
                "event2":{
                    "give": {"object1": 3}
                },
            },
            {
            "id": "object3",
            "events":
            {
                "event3":{
                    "give": {"object3": 4}
                },
            }
        },



Первая и самая простая идея которая напрашивается это:
    std::map<std::string,script> events;

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

Вторая идея парсить этот конфиг в 2 прохода тогда на 2-м проходе object1, object2, object3 будут уже известны и можно будет записать на них прямо указатели или ссылки. Но если зависимости еще более сложные то такой подход может и не сработать.

Я предлагаю способ позволяющий существенно сократить runtime издержки подобных конструкций

Читать дальше →
Total votes 16: ↑12 and ↓4 +8
Views 19K
Comments 28

Генератор умных перечислений, EnumGenerator

C++ *Lua *
Привет всем!

Несколько лет назад меня начал беспокоить вопрос создания статических (создаваемых и изменяемых до процесса компиляции) перечислений. Перечислений я хотел не простых, которые реализованы в С/С++, а с набором дополнительных возможностей, в том числе и ассоциированными столбцами данных произвольного типа, своего рода статическая база данных с доступом по уникальному идентификатору.

Тогда в моем понимании ясно выделились три типа объектов, которые могут быть уникальным идентификатором: числовой индекс, числовой идентификатор, символьный идентификатор. При попытке применить каждый из них для решения задачи перехода от ключа к значению сформировались основные их недостатки и преимущества:
Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Views 5.6K
Comments 9

Опциональные типы? Только если очень нужно

Programming *Objective C *Swift *
Translation
Как писал Роб Напьер, мы не знаем Swift. И ничего страшного — на самом деле, это даже здорово: у нас есть возможность самим решать, каким этот молодой мир станет дальше. Мы можем (и должны) оглядываться на аналогичные языки в поисках идей, хотя множество практик хорошего тона — скорее предпочтения сообщества, нежели объективная истина. Судя по длинным и напряженным беседам в форумах разработчиков о том, когда и как лучше использовать опциональные типы, я все больше предпочитаю с ними вообще не связываться.

Опциональные типы — такой же инструмент, как и все остальные. По закрепившейся на Objective C привычке, мы используем nil где ни попадя — в качестве аргумента, значения по умолчанию, логического значения и так далее. С помощью приятного синтаксиса для опциональных типов, который дает Swift, можно превратить в опциональный тип практически что угодно, и работать с ним почти так же. Поскольку опциональные типы распаковываются неявно, все еще проще: можно использовать их и даже не догадываться об этом. Но возникает вопрос — а разумно ли это?

Я бы сказал, что нет. Даже кажущаяся легкость использования обманчива — Swift был разработан как язык без поддержки nil, а концепция «отсутствия значения» добавлена в виде перечисления. nil не является объектом первого рода. Более того, работа с несколькими значениями опционального типа в одном методе зачастую приводит к такому коду, на который без слез не взглянешь. Когда что-то было настолько фундаментальным в Objective C, а теперь изгоняется из списка объектов первого рода, интересно разобраться в причинах.
Читать дальше →
Total votes 8: ↑6 and ↓2 +4
Views 6.6K
Comments 3

Сопоставление с образцом, изменения и перемещения в Rust

Programming *Rust *
Translation

Одной из основных целей проекта Rust является безопасное системное программирование. Эта область обычно подразумевает императивную парадигму, что означает присутствие побочных эффектов, необходимость думать о разделяемом состоянии, и т.д. Для того, чтобы в таких условиях можно было обеспечить безопасность, программы и типы данных на Rust должны быть структурированы таким образом, чтобы их можно было статически проверить. Элементы и ограничения языка Rust совместно облегчают написание программ, проходящих эти проверки и, таким образом, обеспечивают безопасность. Например, в Rust глубоко интегрирована концепция владениям данными.



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



В этой статье мы рассмотрим, как работает match в Rust. Вот основные элементы, которые match и его дополнение, enum, объединяют в единое целое:


  • Структурное сопоставление с образцом: анализ вариантов и удобство использования гораздо лучше, чем при использовании switch в C или Java.
  • Исчерпывающий анализ: match гарантирует, что ни один вариант не пропущен.
  • match поддерживает и императивный, и функциональный стили: вы можете и дальше использовать оператор break, присваивания и прочее, и вам совершенно не нужно переучиваться на стиль, основанный на выражениях;
  • match умеет как «заимствовать», так и «перемещать»: Rust поощряет программиста думать о владении и заимствовании данных. Выражение match спроектировано в том числе с возможностью только заимствования части структуры вместо её перемещения. Это нужно для того, чтобы не передать право владения какими-либо данными раньше, чем нужно.

Мы рассмотрим каждый из этих пунктов по отдельности ниже, но для начала нам следует заложить фундамент дальнейшего обсуждения — как match выглядит и работает?


Читать дальше →
Total votes 30: ↑30 and ↓0 +30
Views 10K
Comments 11

«Что нового в Swift 2?» на примерах

Programming *Development for iOS *Development of mobile applications *Swift *
Tutorial


Swift 2 сфокусировался на улучшении самого языка, взаимодействия с Objective-C и повышении производительности компилируемых приложений. Новые возможности Swift 2 представлены в 6 различных областях:

  • фундаментальные конструкции языка, такие, как enum , scoping (область действия), синтаксис аргументов и т.д.
  • сопоставление с образцом (pattern matching)
  • проверка доступности (availability checking)
  • расширения (extensions) протокола
  • управление ошибками (error handling)
  • взаимодействие с Objective-C

Я буду рассматривать новые возможности Swift 2, сопровождая их примерами, код которых находится на Github.
Читать дальше →
Total votes 30: ↑27 and ↓3 +24
Views 36K
Comments 36

«Что нового в Swift 2?» на примерах. Часть 2

Programming *Development for iOS *Development of mobile applications *Swift *
Tutorial
В первой части мы рассмотрели лишь часть новых возможностей Swift 2:

  • фундаментальные конструкции языка, такие, как enums, scoping (область действия), синтаксис аргументов и т.д.
  • сопоставление с образцом (pattern matching)
  • управление ошибками (error handling)

Во второй части мы рассмотрим оставшиеся:

  • расширения (extensions) протокола
  • проверка доступности (availability checking)
  • взаимодействие с Objective-C и С

Я буду рассматривать новые возможности Swift 2, сопровождая их примерами, код которых находится на Github.
Читать дальше →
Total votes 20: ↑16 and ↓4 +12
Views 19K
Comments 11

Добавляем рефлексию для перечислений (enum) в C++

Programming *C++ *
Sandbox
Недавно в нашем проекте возникла необходимость программно получать информацию о перечислениях (enum), например, имена констант в виде строк, а также общий список всех имеющихся в enum-е констант.

enum Suit { Spades, Hearts, Diamonds, Clubs };

Обычно решение данной задачи базируется на дублировании значений, например, внутри switch-а:

switch(value)
{
    case Spades:   return "Spades";
    case Hearts:   return "Hearts";
    case Diamonds: return "Diamonds";
    case Clubs:    return "Clubs";
    default:       return ""
};

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

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

Далее в статье я опишу способ, позволяющий организовать рефлексию для enum-ов. Кому интересно — добро пожаловать под кат.
Читать дальше →
Total votes 37: ↑35 and ↓2 +33
Views 25K
Comments 14

Удобное преобразование перечислений (enum) в строковые в С++

NIX corporate blog Programming *C++ *
Translation
У перечислений есть множество способов применения в разработке. Например, при создании игр они используются для программирования состояний персонажа или возможных направлений движения:

enum State {Idle, Fidget, Walk, Scan, Attack};
enum Direction {North, South, East, West};

Гораздо удобнее, когда во время отладки в консоль выводится сообщение типа “State: Fidget” вместо “State: 1”. Также частенько бывает нужно сериализировать перечисления в JSON, YAML или иной формат, причём в виде строковых значений. Помимо того, что строковые воспринимать легче, чем числа, их применение в формате сериализации повышает устойчивость к изменениям численных значений констант перечислений. В идеале, "Fidget" должен ссылаться на Fidget, даже если объявлена новая константа, а Fidget имеет значение, отличное от 1.

К сожалению, в С++ нет возможности легко конвертировать значения перечислений в строковые и обратно. Поэтому разработчики вынуждены прибегать к разным ухищрениям, которые требуют определённой поддержки: жёстко закодированным преобразованиям или к использованию неприглядного ограничительного синтаксиса, наподобие Х-макросов. Кто-то дополнительно использует средства сборки для автоматического преобразования. Естественно, это только усложняет процесс разработки. Ведь перечисления имеют свой собственный синтаксис и хранятся в собственных входных файлах, что не облегчает работу средств сборки в Makefile или файлах проекта.

Однако средствами С++ можно гораздо проще решить задачу преобразования перечислений в строковые.
Читать дальше →
Total votes 31: ↑30 and ↓1 +29
Views 22K
Comments 7