23 авг. 2022 г.

Обновление в приложении

 


Дошли руки дописать апдейтер в приложении.
Список возможностей формировался из собственных требований к функционалу:

  •  Проверка наличия обновлений с заданным временным интервалом.
  •  Уведомление о наличии обновлений.
  •  Опциональность либо обязательность обновления.
  •  Вывод полной информации о обновлением (версия, дата, размер, контрольная сумма) перед его загрузкой/применением.
  •  Проверка и сравнение текущей (локальной) и обновленной версии (Major/Minor/Micro).
  •  Проверка на соответствие контрольной суммы в манифесте обновления и скачанного файла.
  •  Вывод чейнджлога по подгруппам ("added", "fixed", "removed", "other").
  •  Вывод истории обновлений, не установленных юзером. Т.е. при локальной версии 1.1.1 будет отображена информация по 1.2.3, 1.2.4 и тд. Дабы полностью ознакомится со списком всего нового в т.ч и из предыдущих неустановленных обновлений.


Для файла манифеста выбран JSON:

Пример:

meta_url:

{
    "build": {
        "stable": {
            "channel": "stable",
            "meta_url": "http://localhost:3000/assets/db_version.json",
            "release_notes_url": "http://localhost:3000/assets/db_version_notes.json",
            "release_notes_history_url": "http://localhost:3000/assets/db_version_history.json",
            "update_url": "http://localhost:3000/assets/games.db",
            "update_size": 1466368,
            "update_sha256": "efa618ab65e31d921cd4f9d355e1a9d17d908e3c326bf3c1a89bf3ee38d646c1",
            "update_optional": true,
            "last_version_number_major": 1,
            "last_version_number_minor": 2,
            "last_version_number_micro": 4,
            "last_version_unix_time": 1660769543,
            "compatible_since_major": 1,
            "compatible_since_minor": 0,
            "compatible_since_micro": 0
        },
        "beta": {
            "channel": "beta"
        }
    }
}



где,
build - билд с которым работает обновление (stable, beta  и тд).
meta_url - собственно url данного манифеста.
release_notes_url - список изменений текущего обновления.
release_notes_history_url  полный список изменений по версиям.
update_size - размер обновления
update_sha256 - контрольная сумма
update_optional - флаг обязательности/опциональности обновления
last_version_number_major, last_version_number_minor, last_version_number_micro - собственно версия обновления
last_version_unix_time - дата выхода Unix timestamp ака UNIX Epoch time
compatible_since_* - совместимость обновления с версией приложения.


release_notes_url:

    "build": {
        "stable": {
            "version": {
                "major": 1,
                "minor": 2,
                "micro": 4,
                "unix_time": 1660769543,
                "changelog": {
                    "added": [
                        "Some things added",
                        "Another cool things added"
                    ],
                    "removed": [
                        "Removed some unused features"
                    ],
                    "fixed": [
                        "Minor bugfix"
                    ],
                    "other": []
                }
            }
        }
    }
}

Чейнджлог разбит по подгруппам ("added", "fixed", "removed", "other") для группировки.


release_notes_history_url:

{
    "build": {
        "stable": {
            "version": [
                {
                    "major": 1,
                    "minor": 2,
                    "micro": 4,
                    "unix_time": 1660769543,
                    "changelog": {
                        "added": [
                            "Some things added",
                            "Another cool things added"
                        ],
                        "removed": [
                            "Removed some unused features"
                        ],
                        "fixed": [
                            "Minor bugfix"
                        ],
                        "other": []
                    }
                },
                {
                    "major": 1,
                    "minor": 2,
                    "micro": 3,
                    "unix_time": 1660759543,
                    "changelog": {
                        "added": [
                            "Added XYZ",
                            "Added ZYX"
                        ],
                        "removed": [],
                        "fixed": [],
                        "other": [
                            "Migrate from old format to new"
                        ]
                    }
                },
                {
                    "major": 1,
                    "minor": 2,
                    "micro": 2,
                    "unix_time": 1660733543,
                    "changelog": {
                        "added": [],
                        "removed": [],
                        "fixed": [],
                        "other": []
                    }
                }
            ]
        }
    }
}


По сути тоже, что и в release_notes_url, где атрибут version возвращает массив с данными.

В планах:
- Добавление "зеркал" для обновления, в случае недоступности основного источника.
- Добавление зависимостей для обновления.
- Проверка цифровой подписи скачанного файла. Crypto++ уже используется в приложении для проверки контрольных сумм.

На данный момент используется для обновления базы данных используемой в приложении.










2 июн. 2016 г.

GFTP - FTP клиент для смартфонов на базе операционной системы Symbian S60 2nd и 3rd edition

GFTP - FTP клиент для смартфонов на базе операционной системы Symbian S60 2nd и 3rd edition.

Используются: mShell, Symbian C++ NMI Modules

Возможности программы GFTP:

 
Аккаунты:
  • Поддержка неограниченного количества аккаунтов
  • Отдельная настройка каждого из аккаунтов:
  • хост
  • порт управляющего сондинения
  • имя пользователя
  • пароль (опционально)
  • режим передачи данных (активный/пассивный)
  • начальный путь при заходе на сервер
  • опция показа скрытых файлов на сервере

Общие:
  • Возможность сохранения лога действий
  • Указание начального пути в локальной файловой системе при старте программы
  • Удержание включенной подсветки дисплея
  • Поддержка нескольких локализаций программы

Интерфейс:
  • Настоящий полностью графический интерфейс
  • Поддержка скинов
  • Векторные и битмап скины с возможностью самостоятельного изменения

Управление:
  • Поддержка "горячих" клавиш на все действия
  • Пользовательская настройка "горячих" клавиш

Соединение:
  • Поддержание активным соединения с сервером
  • Поддержка переподключения при неудачном соединении
  • Указание числа попыток переподключения и времени между ними
  • Выбор точки доступа по умолчанию

Работа с файлами в телефоне:
  • Переименование файлов и папок
  • Перемещение
  • Копирование
  • Создание файлов и папок
  • Изменение аттрибутов
  • Просмотр свойств
  • Работа с группами 
  • Подсчет количества выделенных обьектов (включая отдельно файлов и папок) и их суммарного обьема
  • Просмотр zip архивов
  • Подсветка цветом файлов и папок с атрибутами скрытый, для чтения, системный

FTP:
  • Поддержка активного и пассивного режима передачи данных
  • Отсылка пустой комманды для поддержания соединения и предотвращения разрыва соединения при неактивности
  • Настройка времени отсылки пустой комманды
  • Индикатор закачки и скачивания с выводом текущего состояния
  • Поддержка докачки
  • Binary/ASCII режимы
  • Изменение прав доступа (chmod)

Особенности:
  • Инфопанель для быстрого просмотра свойств  файла или папки (размер, дата модификации, аттрибуты и права)
  • Папки быстрого доступа (закладки) с возможностью быстрого перехода в заранее назначенную директорию либо открытие файла
  • Отображение закладок в панели дисков
  • Поддержка закладок как для файловой систеы телефона так и отдельно для каждого из аккаунтов (на фтп сервере)
  • Просмотр свойств активной директории, включая количество папок и файлов, суммарный размер файлов, количество выделенных объектов
  • Постраничная прокрутка в файловом менеджере
  • Опция ручного изменения активного пути
  • Копирование полного пути к файлу/директории, имени объекта или пути к активной директории
  • Поддержка внутреннего буфера обмена а также редактируемого внутреннего, с возможностью сохранения истории и вставки в текстовые формы

Скриншоты программы:



































17 июл. 2013 г.

Зарелизился wxWidgets 2.9.5

Изменений с последней dev-версии 2.9.4, которая вышла год назад, довольно много: wxWidgets 2.9.5 changelog
http://sourceforge.net/projects/wxwindows/files/2.9.5/
Как и в 2.9.4 доступны бинарные MSW сборки для MS Visual Studio 2008, 2010 и 2012 В плане "сел и поехал" хороший шаг, ибо собирается все вручную (не)прилично долго.
Думаю пора делать переход с 2.8.x на 2.9. Ну и переход к декларативному XRC не за горами (в 2.9.5 wxAuiNotebook и wxRibbonBar как раз добавили в XRC).
Хотя после подобных видео:
мысли всякие посещают. Хотя уверен предполагаю, на деле с Qt 5.1 и Qt Quick не всё так гладко. Но презентации привлекают, да. Ладно, декларативный UI не самоцель,  вот наличие QtWebKit и на MSW сильный плюс, тут Qt даст фору. Ну и с мобильными платформами у wxWidgets увы, пока никак.

12 июл. 2013 г.

wxCrafter - еще один GUI builder для wxWidgets

Полку wxSmith, wxFormBuilder, DialogBlocks прибыло,  собственно сабж:

wxCrafter
wxCrafter
От автора CodeLight IDE, которая мне в своё время (чуть более 3-х лет ago) не сильно понравилась (IDE в смысле, не автор). Изначально был плагином к CodeLight, теперь вот добавился и standalone вариант wxCrafter
Стоит - $39 (DialogBlocks - $90, wxSmith и wxFormBuilder - Free).
Никаких особых эмоций не вызвал, ни сильно положительных, ни резко отрицательных, есть поддержка некоторых современных контролов из линейки wxWidgets 2.9.x, например wxRibbonBar (в бесплатном варианте ощутимо урезан в плане доступных контролов).
Свои проекты хранит в *.wxcp, что на поверку оказывается файлом формата JSON. Есть импорт проектов wxFormBuilder, wxSmith и ресурсов *.xrc, сам генерит *.xrc и *.cpp.

14 янв. 2013 г.

Oracle предупреждает (JDK)

Вот тут говорят, что:
About the Java 6 Auto-Update to Java 7
Oracle is now extending the End of Public Updates again for 4 additional months to provide developers and users with additional time to migrate to Java 7. The last publicly available release of Java 6 will be in February of 2013 with the release of Java SE 6 Update 39 (Java SE 6u39).
 Что-то непонятно как быть с Android SDK, коий требует определенную версию JDK:

JDK 6 (JRE alone is not sufficient)
 И насколько можно судить по отзывам, JDK 7 требует дополнительных телодвижений.

Припоминаю подобный фортель с Symbian SDK, который требовал ActivePerl, причём определенной версии и в один момент был убран с сайта ActiveState для свободного скачивания (однако для "users with ActiveState Busine$$ Edition $upport" неподдерживаемые версии доступны), подробнее об этом вот тут.
Занятно, когда адепты Private API, Symbian Platinum Partner$$ и платной премиум поддержки вляпались в свои же Premium к*к*шки, хотя вопрос с новыми версиями SDK (Symian^3, S60 5th Edition, and S60 3rd Edition SDKs) вроде как решили.

10 янв. 2013 г.

Не запускается Android SDK Manager

Как так можно, выпускать обновления тулсета без достаточного тестирования мне непонятно. Но обновив на днях и Android SDK до версии 21.01 и заодно Eclipse, c Indigo до Juno, испытал на себе сабжевую проблему.
Гугление выдавало в основном треды разной свежести на stackoverflow.com с кучей решений, кому-то помогло создание переменной окружения в винде %JAVA_HOME%, с указанием пути до JDK (в моем случае она давно присутствовала в виде C:\Java\jdk1.6.0(x64), с тех самых пор, как перешел на Windows 7 x64 и инсталлятор SDK перестал видеть установленный JDK и до сего обновления все работало), кому-то создание переменной окружения %ANDROID_SDK_HOME% (ничего не могу сказать, не понадобилось ни разу), кто-то изменил файл android.bat в директории Android-SDK\tools\, кто-то просто почесал ж*пу левой рукой и помогло. Короче всё оказалось не в кассу.
Потом нагуглился еще один страдалец как и я, с инструкцией... в общем изменив переменную окружения %JAVA_HOME% с C:\Java\jdk1.6.0(x64) на C:\Java\jdk1.6.0(x64)\bin удалось добится запуска SDK Manager через батник android.bat, а добавив в переменную окружения %PATH% путь C:\Java\jdk1.6.0(x64)\bin (раньше и без этого работало прекрасно) удалось добиться запуска SDK Manager непосредственно из Eclipse.
А запустить это чудо (SDK Manager.exe) непосредственно с бинарника удалось из консоли, предварительно выполнив в ней команду set PATH=c:\Java\jdk1.6.0(x64)\bin, что этой сволочи не хватало мне не понятно, возможно мешали другие прописанные пути, их можно проверить в той же консоли выполнив команду echo %PATH%.

Btw, делать рестарт после изменения переменных среды, как пишет по вышеназванной ссылке данный блоггер не обязательно, достаточно сделать смену пользователя (LogOff/logOn) и всё это дело апплится без перезагрузки машины. Проверяется тем же echo %PATH%.

И еще один маленький, но важный нюанс: в прошлом пользовался 32-битной виндой, при переходе на Windows x64 внезапно (ха-ха-ха) выяснилось, что запуск командного интерпритатора aka консоли (cmd.exe) из 32-битного приложения, запускает 32-битное же приложение интерпритатора cmd.exe из SysWOW64 вместо нативного для системы (т.е. под архитектуру AMD64) cmd.exe из System32, причем запуск непосредственно и из той и из другой директории 32-битного приложения (в моем случае Total Commander) запускает всё равно 32-битный cmd.exe, получается что-то вроде симлинка с редиректом в SysWOW64. Учитывая что JDK я устанавливал x64, ловил головняки.
А я так удобно запускал консоль из Total Commander прямо в нужной директории... Особо не искал решение, но надо бы разобраться и с этим делом.

30 сент. 2010 г.

So ugly

Nintendo DS "залез" на E61(71) и родилось...
http://thenokiablog.com/2010/09/28/meego-handset-ti-omap-4/
Это...
P.S. Даже для инженерного экземпляра выглядит UI уныло-преуныло, работает мягко говоря небыстро. Вид устройства - ну тут о вкусах не спорят.
Похвалились мля...

10 июн. 2010 г.

Релиз Code::Blocks 10.05

Вообще мне пофиг, я из SVN сам собираю, но мне не жалко, берите :3
BTW, Ubuntu-style именование версий поднимает ЧСВ до заоблачных высот.

9 июн. 2010 г.

I luv wxCURL

Долго и упорно боролся с wxHTTP, нарисовал свой класс на его основе, многопоточность, редиректы, какое-никакое разруливание кодов ответа сервера, система кастомных ивентов (custom events), etc, etc. Разобрался с багом 50% загрузки процессора при запросе не этот , другой (хорошо в трее сидит иконка с гистограммой загрузки CPU от Rainmeter, так бы ни в жисть не увидел). Т.е. классическая система костылей и подпорок, best friends of codemonkey.
Кстати гугля (в частности code.google.com) кладет болт на стандарты HTTP и на запрос заголовков ответа сервера (метод HEAD, т.е. без тела) дает облизать фигу (404 Not Found). Google professionals is so professionals :3
В общем всячески пытался изобрести лисапед. Что характерно знал что есть CURL и wx-обвязка для него wxCURL, но по какой то неведомой причине считал что он GPL (я же лиценс-виолатор любитель мирандосорсов какой нить), оказалось что лицензия MIT, т.е. вполне кошерно ложится на source closed продукт, и не против статической линковки. Короче +200 kb и спокойные нервы вполне сопоставимая цена. При динамической линковке ненужное (WebDAV и подобное) можно убрать из редистриба либы.
Не особо хитро-мудро собирается но для VC кое-что напортачено, а для MinGW через make вообще просто.

16 янв. 2010 г.

Жуки

Реквестирую официальное признание понятий "пьяный коммит" и "рождественский билд". Как известно (мне) на форуме Code::Blocks регулярно выкладываются ежемесячные ночные билды для венды. Очередной билд ознаменовался включением пары полезных плагинов: CCCC и CppCheck, а также тем что в добавить их туда забы(и)ли. Поразмыслив для приличия закатал рукава сделал SVN чекаут самой последней версии, благо собирается все это в том же кодеблоксе без особых приседаний. В общем обнаружилось, что:
В пылу -пред(-пост) новогодней горячки, доточили одну из важных частей любой IDE, а именно codecompletion, до совершенно *Вырезано цензурой* состояния, что выразилось в том, что *Вырезано цензурой* кодекомплит *Вырезано цензурой* не работает с *Вырезано цензурой* SDK от *Вырезано цензурой* Microsoft, вернее работает настолько *Вырезано цензурой*, что забирает все *Вырезано цензурой* процессорное время. Такое ощущение что *Вырезано цензурой* тред парсера впал в *Вырезано цензурой* infinity loop. В общем висит одиноко мой месседж (подробнейше описан, любая блондинка воспроизведет баг) в багтреке уже неделю, а у основной массы разработчиков в Debian based Windows (Ubuntu по вашему) ВСЕ *Вырезано цензурой* НОРМАЛЬНО РАБОТАЕТ. В бубунте. Или с MinGW. Но работает *Вырезано цензурой* же, значит бага нет. *Вырезано цензурой* чинить то, что работает, лучше написать 3 пуда нового кода, дождаться пока бага прочно вростет в новый код, а потом сесть и начать переписывать всю эту *Вырезано цензурой* в новый бранч. *Вырезано цензурой* искать легкие пути?
P.S. Посмотрел историю коммитов, примерно такая картина:
- Добавлено: *а*
- Добавлено: *б*
- Исправлено: *а* не работало с *б*
- Исправлено: *б* не работало с *а*
и так по кругу.
Неправильно это как-то наверное.

Примечание *Вырезано цензурой* читать как: отлично, хорошо, здорово, нужно, годно, etc.

Update:
2010-Jan-25 10:01 Починили
Действительно был infinity loop, и кто-то сказал за новый бранч :конфьюзед:
Спасибо чуваку из Китая, который не являясь постоянным разработчиком нашел багу и накатал патч (который закоммитили через 6 дней).

30 дек. 2009 г.

MinGW vs MSVC

Решил попробовать скомпилировать проект с помощью бесплатного тулкита Microsoft Visual Studio Express а именно Visual Studio 8 (2005). Тулкит "жирный" 462 mb. сама Visual Studio, и 395 mb. Windows Platform SDK (в 2005 версии не входит в состав VS, imho это правильно).
Наверное дело привычки, но студия как IDE после Code::Blocks мне не понравилась, почти без "танцев" сбилдил либы wxWidgets, сам же проект "ниасилил", в общем на Code::Blocks лично мне оказалось удобней (правда геморрой был и там, но спасло гугление на официальном форуме wxWidgets).
В общем Release теперь билдиться только с помощью компилятора MSVC. Почему? Все просто: размер бинарника собранного в MinGW - 3.3 mb, в MSVC - 2.2 mb, т.е. - 30% (или + 50% это как посмотреть). К тому же компилятор явно быстрее, это факт. Но к студии необъяснимое отвращение, почему-то интерфейс (контролы и т.п.) вызывают стойкую ассоциацию с .NET приложением, воротит и все тут.
Параллельно посмотрел Qt 4.6, чего-то не собираются некоторые экземплы, покрутил примеры, да, фреймворк по-хорошему толст, примеры некоторые впечатляют, говорят современный (обозвать ивенты и обработчики событий сигналами и слотами и присобачить слева moc прекомпилятор это нее**цо модерново, да).
Но вот я подумал о своем приложении не супер-пупер, но и не самом простом (IPC, Custom Events, Sockets, не самый хреновый GUI, кстати нативный и выглядящий как на WinAPI). Так вот аппликуха использует в среднем около 2.5-3 mb оперативной памяти, сидит в трее и расчитана на постоянное использование, размер NSIS инсталлятора менее психологической метки в 1 mb и никаких дополнительных либ, для небольших и средних проектов самое оно (хотя назвать Code::Blocks небольшим или средним язык не поворачивается и он чертовски хорош). С Qt эти показатели увеличиваются в разы. Лицензия wxWidgets опять же намного свободней. Вот и вся логика, а модерн ради модерна пусть будет для эстетов и пиарастов.
P.S. Разработка wxWidgets началась в 1992 году, Qt - в 1994, думаю костылей и там и там хватает.

15 дек. 2009 г.

wxWidgets 2.9

Попробовал нестабильную ветку. Она действительно нестабильная. И кривая. Местами.
Некоторые методы объявлены как депрекейтед, некоторые просто изменили. Строки (wxString) например, DDE (wxConnection) и т.д. и т.п.
Но это все можно понять, избавляются от старого хлама. Но вот чего я понять не могу, так это изменившегося размера exe-шника статически слинкованного приложения:
3.3 mb на wxWidgets 2.8.10
7.2 mb на wxWidgets 2.9.0
5.2 mb на wxWidgets 2.9.0 после применения патча на кривые руки

Понятно что не WinAPI, но так недалеко и до Q-евого кошмарика где приложение тянет с собой туеву хучу бегамайт shared либ (QutIM например при размере около 2 mb тянет более 20 mb либ), это просто 3.14дец, хуже только .NET (недавно обновился на 250 mb ради Paint.NET).

В общем убежал в ужасе обратно на stable.

27 нояб. 2009 г.

Notepad++ отжигает

That explains why Notepad++ is not available (and won't be available) under Linux :P


MinGW, wxString::ToLongLong() и все все все

Дано:
wxString - строка содержащая число в строковом представлении.
m_nSize - 64 битное число.
MinGW - компилятор.
wxWidgets - фреймворк.

Задача:
Конвертировать строку в число, дабы произвести некие действия.

Решение:
Открываем доки, ищем и находим следующее:

wxString::ToLongLong
bool ToLongLong(wxLongLong_t *val, int base = 10) const

Если конвертирование возможно получаем true, но вся соль в том, что в случае с MinGW во всех случаях обламываемся и получаем false, т.к. есть некоторое условие:

Compilers with C99 support and Microsoft Visual C++ version 7 and higher do support this.

Читаем и изучаем stdlib.h и внимательно справку по wxString
Получаем следующее:

m_nSize = atoll(strHeaderSize.char_str());

Проверяем результат:

wxMessageBox(wxString::Format(wxT("%lld"), m_Size));

и обламываемся, оказывается M$ имеет свой стандарт на форматирование и в MinGW

надо использовать следующее:

wxMessageBox(wxString::Format(wxT("%I64d"), m_nSize));


Да-да, стандарты существуют для того же для чего и законы.


P.S. в Symbian при переходе с 7.0s-8.1a на 8.1b тоже изменили:

BEFORE:

x.GetTInt();

AFTER:

I64INT(x);

26 нояб. 2009 г.

Бобик сдох?

Airbit`овцы похоже решили окончательно уйти в аутсорсинг, классическая ситуация "верхи" не хотят "низы" не могут. Не идет дело, так поменяй стратегию, зачем быть собакой на сене? В виде Open Source mShell(с платной коммерческой лицензией например как в QT) пошло бы бодрее, на правах контрибутора я бы поучаствовал например just for fun. Это если они не хотят быть просто аусорсинговой компанией, в Ovi Store же по поводу остальных продуктов компании отзывы кхм... скептические G-Meter убрали комменты были тоже не фонтан. Бабка Ванга считает, что либо они продадуться (оч. распространенный вид бизнеса на Западе), либо OS вариант, либо, если нет чувства коньюктуры... попутного ветра в широкую спину. Понаблюдаем из партера.