вторник, 1 мая 2012 г.

Мосты СПб - График разводки. Теперь платно

К сожалению, приложение пришлось сделать платным. Заработать на рекламе не удалось (приложение используется в основном офлайн, да и запускается на несколько секунд, потому показов рекламы мало).
Первые пять запусков новой версии возможны без оплаты.
После оплаты также убирается реклама.

воскресенье, 3 июля 2011 г.

Мосты СПб - График разводки

Приложение показывает график разводки мостов в Санкт-Петербурге, Россия:
  • время разводки (на зеленом фоне, если мост сведен; на желтом, если будет разведен менее, чем через 30 минут; на красном, если разведен);
  • расстояние до моста по прямой от текущего положения (показывается при коротком нажатии на времени).
Любой мост также может быть показан на карте в выбранном вами приложении (например, Карты Google или iGo) или на встроенной в приложение карте. Вызывается при длинном нажатии на названии моста.


   

понедельник, 27 июня 2011 г.

Read RSS Later - Microsoft Outlook 2007 macro

Read RSS Later is Microsoft Outlook 2007 macro which allows to add articles from Outlook's RSS feeds to Read It Later service. Full article is added (what you see if click on View article... link in the RSS message). Addition of multiple articles at the same time is possible.

Do the following to add macro to your Outlook 2007:
  1. Start MS Outlook 2007;
  2. Open Visual Basic Editor - press Alt+F11, when Outlook is active OR choose menu Tools - Macro - Visual Basic Editor;
  3. Choose ThisOutlookSession on the left:
  4. Copy and paste the code below to the right window:

    1. Private Const CP_UTF8 = 65001
    2. Private Declare Function WideCharToMultiByte Lib "Kernel32" (ByVal CodePage As Long, ByVal dwflags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
    3.  
    4. Sub Application_ItemContextMenuDisplay( _
    5.   ByVal CommandBar As Office.CommandBar, _
    6.   ByVal Selection As Selection)
    7.   
    8.   Dim objButton As Office.CommandBarButton
    9.   
    10.   On Error GoTo ErrRoutine
    11.   
    12.   ' Available only if first selected item is RSS
    13.   If (Selection.Item(1).MessageClass = "IPM.Post.Rss") Then
    14.     ' Add a new button to the bottom of the CommandBar
    15.     ' (which represents the item context menu.)
    16.     Set objButton = CommandBar.Controls.Add( _
    17.       msoControlButton)
    18.     
    19.     ' Configure the button to call the
    20.     ' ReadRSSLater routine when
    21.     ' clicked. The Parameter property of the
    22.     ' button is set to the value of the
    23.     ' EntryID property for the selected
    24.     ' item, if possible.
    25.     With objButton
    26.       .BeginGroup = True
    27.       .Caption = "Read RSS &Later"
    28.       .FaceId = 1000
    29.       .Tag = "ReadRSSLater"
    30.       If Not IsNull(Selection.Item(1)) Then
    31.         On Error GoTo 0
    32.         ' Just in case the item selected
    33.         ' doesn't have a valid EntryID.
    34.         ' .Parameter = Selection.Item(1).EntryID
    35.         On Error GoTo ErrRoutine
    36.       End If
    37.       .OnAction = _
    38.         "Project1.ThisOutlookSession.ReadRSSLater"
    39.     End With
    40.   End If
    41.   
    42. EndRoutine:
    43.   Exit Sub
    44.   
    45. ErrRoutine:
    46.   MsgBox Err.Number & " - " & Err.Description, _
    47.     vbOKOnly Or vbCritical, _
    48.     "Application_ItemContextMenuDisplay"
    49.   GoTo EndRoutine
    50. End Sub
    51.  
    52. Private Sub ReadRSSLater()
    53.   Const RIL_USERNAME = "YOUR_RIL_USERNAME"
    54.   Const RIL_PASSWORD = "YOUR_RIL_PASSWORD"
    55.     
    56.   Const RIL_APPKEY = "377p2o2aA7c0Zw76d1g17a9ca9d6nx3f"
    57.   Const RIL_ADDURL = "https://readitlaterlist.com/v2/add"
    58.   
    59.  
    60.   Dim objNamespace As NameSpace
    61.   Dim objItem As Object
    62.   Dim strResult As String
    63.   Dim iCountOK As Integer
    64.   Dim iCountError As Integer
    65.   
    66.   On Error GoTo ErrRoutine
    67.   
    68.   iCountOK = 0
    69.   iCountError = 0
    70.   
    71.   For Each objItem In Application.ActiveExplorer.Selection
    72.      
    73.     If (objItem.MessageClass = "IPM.Post.Rss") Then
    74.     
    75.       If objItem Is Nothing Then
    76.         MsgBox "A reference for the Outlook item " & _
    77.           "could not be retrieved."
    78.       Else
    79.         Dim RssURL As String
    80.         RssURL = objItem.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/id/{00062041-0000-0000-C000-000000000046}/8901001F")
    81.         ' https://readitlaterlist.com/v2/add?username=name&password=123&apikey=yourapikey&url=http://google.com&title=Google
    82.         Dim AddURL As String
    83.         AddURL = RIL_ADDURL + _
    84.              "?username=" + RIL_USERNAME + _
    85.              "&password=" + RIL_PASSWORD + _
    86.              "&apikey=" + RIL_APPKEY + _
    87.              "&url=" + URLEncode(RssURL) + _
    88.              "&title=" + URLEncode(objItem.Subject)
    89.         ' Debug.Print AddURL
    90.         
    91.         Dim WinHttpReq As Object
    92.         Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
    93.         WinHttpReq.Open "GET", AddURL, False
    94.         WinHttpReq.Send
    95.         If WinHttpReq.Status = 200 Then
    96.           iCountOK = iCountOK + 1
    97.         Else
    98.           iCountError = iCountError + 1
    99.           strResult = strResult & objItem.Subject & ": " & WinHttpReq.ResponseText & _
    100.                 vbCrLf & vbCrLf
    101.         End If
    102.         ' Debug.Print objItem.Subject & ": " & WinHttpReq.ResponseText & "; " & WinHttpReq.ResponseText
    103.       End If
    104.     End If
    105.   Next objItem
    106.   strResult = "Errors: " & iCountError & ", OK: " & iCountOK & vbCrLf & vbCrLf & strResult
    107.   MsgBox strResult, vbOKOnly, "Read RSS Later"
    108.  
    109. EndRoutine:
    110.   Set objItem = Nothing
    111.   Set objNamespace = Nothing
    112.   Exit Sub
    113.  
    114. ErrRoutine:
    115.   MsgBox Err.Number & " - " & Err.Description, _
    116.     vbOKOnly Or vbCritical, _
    117.     "Read RSS Later"
    118.   GoTo EndRoutine
    119. End Sub
    120.  
    121.  
    122. Public Function UTF16To8(ByVal UTF16 As String) As String
    123. Dim sBuffer As String
    124. Dim lLength As Long
    125. If UTF16 <> "" Then
    126.   lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UTF16), -1, 0, 0, 0, 0)
    127.   sBuffer = Space$(lLength)
    128.   lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UTF16), -1, StrPtr(sBuffer), Len(sBuffer), 0, 0)
    129.   sBuffer = StrConv(sBuffer, vbUnicode)
    130.   UTF16To8 = Left$(sBuffer, lLength - 1)
    131. Else
    132.   UTF16To8 = ""
    133. End If
    134. End Function
    135.  
    136. Public Function URLEncode( _
    137.   StringVal As String, _
    138.   Optional SpaceAsPlus As Boolean = False, _
    139.   Optional UTF8Encode As Boolean = True _
    140. ) As String
    141.  
    142. Dim StringValCopy As String: StringValCopy = IIf(UTF8Encode, UTF16To8(StringVal), StringVal)
    143. Dim StringLen As Long: StringLen = Len(StringValCopy)
    144.  
    145. If StringLen > 0 Then
    146.   ReDim Result(StringLen) As String
    147.   Dim I As Long, CharCode As Integer
    148.   Dim Char As String, Space As String
    149.  
    150.  If SpaceAsPlus Then Space = "+" Else Space = "%20"
    151.  
    152.  For I = 1 To StringLen
    153.   Char = Mid$(StringValCopy, I, 1)
    154.   CharCode = Asc(Char)
    155.   Select Case CharCode
    156.    Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
    157.     Result(I) = Char
    158.    Case 32
    159.     Result(I) = Space
    160.    Case 0 To 15
    161.     Result(I) = "%0" & Hex(CharCode)
    162.    Case Else
    163.     Result(I) = "%" & Hex(CharCode)
    164.   End Select
    165.  Next I
    166.  URLEncode = Join(Result, "")
    167.  
    168. End If
    169. End Function
    170.  
    * This source code was highlighted with Source Code Highlighter.
  5. Replace in the code YOUR_RIL_USERNAME and YOUR_RIL_PASSWORD (lines 53 and 54) with your Read It Later username and password accordingly; 
  6. Save the change (Ctrl+S). 
New context menu item (Read RSS Later) will be added to RSS articles in your Outlook 2007:


понедельник, 9 мая 2011 г.

Kinobaza Offline. Автоматическое скачивание фильмов

Новая функция приложения - автоматическое скачивание фильмов.

Как только фильм, на который пользователь подписался ранее (через приложение или напрямую на сайте Kinobaza.tv), появился на торрент-трекерах в нужном качестве и с нужной озвучкой, сайт Kinobaza.tv уведомляет пользователя об этом (посредством e-mail, RSS или/и Xmpp). В ручном режиме пользователю необходимо зайти на сайт, выбрать фильм на одном из трекеров, скачать торрент-файл и добавить его в какой-либо торрент-клиент.
Если включена функция автоматического скачивания в приложении Kinobaza Offline, то все эти действия будут выполнены автоматически.

Как это работает? В настройках приложения необходимо указать Номер пользователя - он может быть найден на странице http://kinobaza.tv/users/me, после загрузки страницы он появляется в адресной строке вместо meК сожалению, пока что данную операцию необходимо выполнять вручную - сайт Kinobaza.tv не передает сторонним приложениям номер пользователя.
При каждом Обновлении приложение Kinobaza Offline проверяет не появился ли фильм на трекерах. Если фильм появился, то торрент-файл скачивается автоматически и добавляется в персональную RSS-ленту пользователя по адресу http://kinobaza-tv.appspot.com/rss/me (где me должно быть заменено на Номер пользователя).
Данную RSS-ленту можно добавить в торрент-клиент. Большинство клиентов могут скачивать фильмы из торрент-трекеров автоматически (см., например, описание данного функционала для µTorrent).

Как правило, фильм появляется сразу на нескольких трекерах в разных вариантах и в разном качестве. В настоящий момент приложение скачивает первый найденный фильм с заданным качеством с наибольшим количеством сидов (т.е. распространителей фильма). В платной версии приложения возможно указание дополнительного фильтра - по размеру файла.
К сожалению, в настоящий момент сайт  Kinobaza.tv не передает сторонним приложениям информацию о языке фильма, потому в исключительных случаях возможно скачивание фильмов на не-русском языке. 

Таким образом, приложение позволяет автоматически закачивать нужные фильмы.

Kinobaza Offline. Виджет

В приложении есть Виджет - иконка приложения, отображающая количество непрочитанных описаний фильмов.


Непрочитанные фильмы в списке приложения помечены белым цветом текста, прочитанные - серым.

Значение на иконке обновляется при каждом Обновлении (в т.ч. и фоновом) и после просмотра каждого описания фильмов.

Kinobaza Offline. Подписка

Основное предназначение приложения - подписка на появление фильмов в заданном качестве на торрент-трекерах.

Просматривая в офлайне скачанные приложением описания фильмов, пользователь может подписаться на появление фильма в нужном качестве и с нужной озвучкой на торрент-трекерах.

При Обновлении подписка производится на сайте Kinobaza.tv и может быть просмотрена в разделе Подписки данного сайта.

Важно: т.к. список подписок индивидуален для каждого пользователя, для того, чтобы данный функционал работал, в настройках программы необходимо авторизоваться на сайте Kinobaza.tv. Авторизация происходит с использованием OAuth-авторизации.

Как только фильм, на который подписался пользователь, появляется на торрент-трекерах, в зависимости от настроек на сайте Kinobaza.tv, пользователь получает уведомление в виде e-mail, RSS или Xmpp.
В новых версиях приложения возможно автоматическое скачивание появившихся фильмов - об этом будет написано в отдельном сообщении.

воскресенье, 8 мая 2011 г.

Kinobaza Offline. Что это такое?

Kinobaza Offline (Кинобаза Офлайн)- приложение для Android, которое в ручном или автоматическом режиме скачивает описания фильмов, только появившихся на торрент-трекерах. Данные описания доступны и для офлайн просмотра.



Ручной режим - по запросу пользователя (при нажатии кнопки Обновление в главном меню). Автоматический - в фоне, с заданной частотой.
При этом учитываются пользовательские настройки соединения - если выбрано обновление лишь при наличии WiFi-соединения, а в настоящий момент данного вида соединения нет, то обновление произойдет в тот момент, когда оно появится.

При скачивании описаний фильмов применяются следующие фильтры (заданные пользователем в настройках):
  • исключение жанров (например, если пользователя совсем не интересует жанр Аниме, то его можно исключить - фильмы с данным жанром никогда не появятся в списке фильмов приложения);
  • минимальные рейтинги IMDB и Кинопоиска;
  • минимальный год выхода фильма (если пользователя интересуют лишь новинки, то тут можно задать текущий год).

В бесплатной версии приложения за одно обновление скачивается максимум 5 описаний фильмов. В платной версии данное число может быть увеличено до 100.