Инструкции как прикрутить прием платежей в PayPal на своем сайте:
http://www.askdev.ru/question/946/%D0%9F%D1%80%D0%B8%D0%B5%D0%BC-PayPal-%D0%BD%D0%B0-%D1%81%D0%B0%D0%B9%D1%82%D0%B5/
Category: Soft/Programming
-
Прием платежей PayPal
-
ePUB
Нужно будет написать новый парсер для этого формата в свой SMWord suite
http://fantaseour.livejournal.com/141276.html
**************************************************************Ответ на мои грустные вздохи о смерти CHM и не возможности читать архивы прямо из браузера лежал на поверхности.
Это EPUB (electronic publication) (also sometimes ePub, EPub, or epub) — открытый стандарт для электронных книг.
В основе решения все те же xhtml+css. Правда в стандарте набор тегов и возможностей ограничен, но это скорее для того, чтобы читалки можно было совместимые делать.Итак внутри xhtml+css+media, плюс xml-файлы с мета-информацией, шрифт можно тоже положить и указать потом в css. Все это пакуется в несколько специфичный зип: Метаинформация идет в начале зип-файла и она не сжимается, дальше остальной контент, уже пожатый. Делается двумя командами:
zip -X0 “full path to new epub file” mimetype
zip -rDX9 “full path to new epub file” * -x mimetypeЧитается практически всеми читалками, кроме Kindle, но легко переводится в совместимый формат, и скорее всего будет читаться в будущем. Свободных конвертилок из chm в epub я не нашел, ну не велика беда — понятно, что это можно и самому написать.
На десктопе есть несколько читалок разной степени паршивости, плагин для Mozilla, виджет для Оперы, и читалка в онлайне (см. далее).
Для Сафари плагина не нашел, но в айфоне Сафари читает книжки из веба по протоколу epub://, значит скоро и на десктопе будет поддержан.DRM тоже как-то предусмотрен, но я в подробности не вдавался.
Книжки в таком формате уже довольно популярны. На epubBooks.com, можно взять бесплатных книг и поиграть с ними. O’Reilly широко использует этот формат для своих книжек. У Гугла есть поиск по книгам, где также ищутся книги в этом формате.
Книжку можно собрать, как руками из нужных файлов (т.е. своей программой:), так и с помощью бесплатного кросс-платформенного редактора Sigil. Кроме того Adobe Indesign, также поддерживает этот формат, а из документов офиса можно получить epub через конвертор Callibre.
Звучит неплохо.
Теперь про читалки для десктопа.
Adobe Digital Editions
Ридер бесплатный.
Я его сейчас ставить не стал, т.к. я им немного пользовался. Он на флеше, по ощущениям неуклюж, по отзывам верстка там едет (хотя редеринг сделан на WebKit).
Вот описание его глюков от конкурирующей фирмы:
Adobe Digital Editions QuirkCalibre
www.calibre-ebook.com
Open Source, Кросс-платформенный.
Читалка и конвертилка практически из любого формата в любой. CHM не умеет.
Рендеринг — WebKit. На вид приятен и опрятен.
Может сделать epub из архива с html, но перепутает порядок файов и вложенность, т.к. нет xml-файла с оглавлением.
Показывает хорошо, но на больших длинных файлах fb2 тормозит безбожно. И вообще немного задумчив.
Позволяет закачивать выкачивать книги из мобильных девайсов (не проверял).
Lexcycle Stanza
www.lexcycle.com
Куплен Амазоном
Использует уже знакомый нам рендеринг WebKit. Работает на айфоне и десктопе. Умеет конвертить epub в формат Kindle.
Мне не понравился, тем, что не отображает слева разделов содержания, этот момент мне очень нравится в CHM.Mobipocket
www.mobipocket.com
Еще один купленный Амазоном проект. Умеет читать EPUB, поддерживает свой формат, также представляющий собой архив с html+дополнительная информация. Свободно конвертирует между этими двумя форматами.
Работает на очень большом количестве карманных читалок.
Не работает на Линукс и Мак.
Формат mobipoket читается упомянутыми Stanza и Calibre, а также Okular
На десктопе также не показывает оглавление, что для меня является приговором.Okular
http://okular.kde.org/
KDE-универсальная читалка. Читает буквально все — DJvu, CHM, PS, PDF, EPUB, FB2
болшой скриншотbookworm
http://bookworm.oreilly.com/Онлайновая читалка от O’Reilly. Регистрируешься и можешь закачивать книги. Потом можно читать. Выглядит красиво.
OpenSource, написана на С и Python, живет на googlecode.
EPUBReader
https://addons.mozilla.org/en-US/firefox/addon/45281 Плагин для Огнелиса. В замен устаревшего OpenBerg Lector.
Выглядит также весьма опрятно.
Opera Ebook reader
http://widgets.opera.com/widget/10312/Виджет для Оперы. Читает вроде норомально, но оглавление показывает пулапрозрачно с заездом на текст, так, что после выбора главы, его надо отключать.

************************************************************** -
нотификации в Windows
Вот чего мне не хватает в Windows, так это нотификаций по событиям.
Например, при удалении определенного файла или каталога я хочу отсылку email админу. А при изменении некоторых файлов мне нужно скопировать их на флешку.Разумеется там должны поддерживаться много нотификаций на одно и тоже событие (например, и email, и запустить какую-то программу с параметрами при добавлении файла), и условия (например, файл должен быть изменен из программы XXX).
А то Microsoft пошел по пути навешивания рюшечек, а в ядре нет еще очень многих базовых функций.
-
drag’n’drop from external applications
In Friday in our SIM (Shareware Information System) I added the possibility to drag’n’drop the mail content from external mailer (MS Outlook, Outlook Express etc)
To add this feature you need:
1. declare two new Cliboard formats that need to be registered:var CF_FILECONTENTS, CF_FILEDESCRIPTOR: Integer;initialization // Initialize the OLE libraries OleInitialize(nil); // Register the clipboard formats that we need to handle in the // OLE drag drop operation CF_FILECONTENTS := RegisterClipboardFormat(CFSTR_FILECONTENTS); CF_FILEDESCRIPTOR := RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR); finalization OleUninitialize;
2. in OnCreate event for your form allow window to accept drop events. Just execute the next code:
OleCheck(RegisterDragDrop(Handle, Self));
3. for your form you need implement a few methods for IDropTarget interface:
type TfrmOrderWizard = class(TForm, IDropTarget) ... private { IDropTarget } function DragEnter(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall; function DragOver(grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall; function DragLeave: HResult; stdcall; function Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall; { IUnknown Ignore referance counting } function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; ...where:
function TfrmOrderWizard.DragEnter(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; begin dwEffect := DROPEFFECT_COPY; Result := S_OK; end; function TfrmOrderWizard.DragOver(grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; begin dwEffect := DROPEFFECT_COPY; Result := S_OK; end; function TfrmOrderWizard.DragLeave: HResult; begin Result := S_OK; end; function TfrmOrderWizard._AddRef: Integer; begin Result := 1; end; function TfrmOrderWizard._Release: Integer; begin Result := 1; end; function TfrmOrderWizard.Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; const PT_TSTRING = ULONG(30); PT_UNICODE = ULONG(31); PR_BODY = PT_TSTRING or ($1000 shl 16); PR_BODY_W = PT_UNICODE or ($1000 shl 16); var aFmtEtc: TFORMATETC; aStgMed, stgmitem: TSTGMEDIUM; pData: PChar; pfgd: PFileGroupDescriptor; dwCount, dwfetch: Integer; stat: STATSTG; pstg: IStorage; pstm: IStream; begin {Make certain the data rendering is available} if (dataObj = nil) then raise Exception.Create('IDataObject-Pointer is not valid!'); with aFmtEtc do begin cfFormat := CF_TEXT; ptd := nil; dwAspect := DVASPECT_CONTENT; lindex := -1; tymed := TYMED_HGLOBAL; end; {Get the data} OleCheck(dataObj.GetData(aFmtEtc, aStgMed)); try {Lock the global memory handle to get a pointer to the data} pData := GlobalLock(aStgMed.hGlobal); { Replace Text } MemoOrder.Text := pData; finally {Finished with the pointer} GlobalUnlock(aStgMed.hGlobal); {Free the memory} ReleaseStgMedium(aStgMed); end; // Get the file descriptors with aFmtEtc do begin cfFormat := CF_FILEDESCRIPTOR; ptd := nil; dwAspect := DVASPECT_CONTENT; lindex := -1; tymed := TYMED_HGLOBAL; end; OleCheck(dataObj.GetData(aFmtEtc, aStgMed)); try pfgd := PFileGroupDescriptor(GlobalLock(aStgMed.hGlobal)); // Iterate each of the files for dwCount := 0 to pfgd.cItems-1 do begin // Set up for getting the file data with aFmtEtc do begin cfFormat := CF_FILECONTENTS; ptd := nil; dwAspect := DVASPECT_CONTENT; lindex := dwCount; tymed := TYMED_ISTORAGE; end; if (dataObj.GetData(aFmtEtc, stgmitem) = S_OK) then begin // IStorage (handle the outlook item) pstg := IStorage(stgmitem.stg); // Hard coded to open the outlook message item stream if (pstg.OpenStream('__substg1.0_1000001F', nil, STGM_SHARE_EXCLUSIVE or STGM_READ, 0, pstm) = S_OK) or (pstg.OpenStream('__substg1.0_1000001E', nil, STGM_SHARE_EXCLUSIVE or STGM_READ, 0, pstm) = S_OK) then begin pstm.Stat(stat, STATFLAG_DEFAULT); pData := AllocMem(stat.cbSize); try pstm.Read(pData, stat.cbSize, @dwFetch); // Set the msg body MemoOrder.Lines.Add(String(pData)); finally // Free buffer memory FreeMem(pData); end; // Free the stream pstm := nil; end; // Free the storage pstg := nil; // Release the storage medium ReleaseStgMedium(stgmitem); end; end; finally // Unlock the memory GlobalUnLock(aStgMed.hGlobal); // Release the storage medium ReleaseStgMedium(aStgMed); end; Result := S_OK; end; -
code signing
Description with step by step instructions:
http://www.tech-pro.net/code-signing-for-developers.htmlCheap certificates:
– $200 for 3 years
http://www.lindersoftware.com/order_codesigning.htm– $300 for 3 years
http://www.ksoftware.net/code_signing.html -
Delphi 2009
Для того, чтобы на одном компе могли одновременно работать Delphi 2009 и новый 2010 необходимо поставить Service Pack 3 for Delphi 2009. На домашнем лаптопе это прошло без сучка и задоринки.
На рабочем компьютере я уже задолбался. Принес скачаные файлы из дому и запустил сетап, а он через полчаса работы отвалился, т.к. Kaspersky Antivirus удалил там какой-то файл (как подозрительный). Покопался в google – разработчики в Borland/CodeGear/Embacadero используют какой-то свой слишком навороченый алгоритм упаковки exe-файлов, которые Kaspersky детектит как вирус.Снес Kaspersky временно и запустил инсталляцию еще раз, а она вообще просто тупо отваливается через минут двадцать (и так пару раз).
Решил снести весь D2009 и поставить его заново. А умники из CodeGear свой какой-то инсталлятор замутили. Сначала деинстал идет в течении 3-4 часов с миганием названия для каждого мелочного файла, а потом инсталляция еще столько же и с тем же показом всех файлов.
Ну спрашивается, зачем показывать эту информацию и зачем использовать такие медленные алгоритмы сжатия-разжатия файлов? Почему Visual Studio ставится легко и быстро и приятно, а эта фигня отнимает и время, и ресурсы, и нервы:-( -
Regsoft order message
RegSoft changed the default template for mails with order notifications. They included there the IP address.
I waited this feature 10 years:-) Until today I saw the IP for orders in online reports only (in their control panel) but today I changed the parser and now IP inserted in our database automatically. Not manually as before:-)
Now I’m waitinh when they will include in message template the order time (not only date part) and Auth Code which are available now from online report only
-
directives for Embacaderro Studio 2010 complier
{$IFDEF VER210} {$DEFINE SMForDelphi3} {$DEFINE SMForDelphi4} {$DEFINE SMForDelphi5} {$DEFINE SMForDelphi6} {$DEFINE SMForDelphi7} {$DEFINE SMForDelphi2005} {$DEFINE SMForDelphi2006} {$IFDEF BCB} {$DEFINE SMForBCB2006} {$DEFINE SMForBCB2007} {$DEFINE SMForBCB2009} {$DEFINE SMForBCB2010} {$ENDIF} {$DEFINE SMForDelphi2007} {$DEFINE SMForRADStudio2007} {$DEFINE SMForDelphi2009} {$DEFINE SMForDelphi2010} {$ENDIF} -
“реклама” продуктов
Когда я начинал свою шароварную деятельность, основными каналами для генерации продаж были newsgroups и програмерские форумы. Для моих компонент (не enduser tools) общение с программистами всегда было и интересней, и полезней, чем сабмит по каталогам-статьям.
Более того я даже сейчас уже и не смогу смело вспомнить, что было первично – мои посты в ньюсгруппах, или написание компонент на продажу. Они как-то паралельно шли всегда.С одной стороны общаясь с кучей людей, видишь, что им нужно. С другой стороны помогая им (отвечая на их вопросы) они видят нормального собеседника, разбирающегося в теме и интересуются его компонентами.
В последнее время частичный переход от компонент к end-user тулзам, ограничение доступа к nntp/newsgroup’ам и закрытие “моих” форумов (delphipages, for example) привели к тому, что эти каналы практически зачахли. Это меня бы не сильно парило, если бы меня интересовали только деньги.
Мне не хватает “общения”:-) Мне не нужны всякие livejournal, facebook и одноклассники. Я их могу почитывать, но не пишу туда.
Причем всякие “бонусы” меня даже не интересовали. Например, я узнал о системе накопления очков/points на delphipages.com совершенно случайно, когда меня поздравили с какой-то круглой суммой набранных экспертных очков. Я отвечал-общался там, т.к. мне было интересно.В последнее время обратил свое внимание на Yahoo Answers и StackOverflow
Т.е. про их существование я знал давно, конечно. И иногда туда заходил из поисковых запросов. Но как-то личного кайфа от этого не имел. Для меня они были в категории Expert Exchange – фигни, обвешанной рекламой и где на 1% полезного есть 99% мусора.А вот в последние дни свое мнение кардинально поменял. Похоже эти двое Yahoo Answers и StackOverflow – реинкарнация старых newsgroups в сегодняшнем web’е.