Search
Write a publication
Pull to refresh
7
0
Юрий @kin9pin

User

Send message

Fast app resume для Windows Phone 8

Reading time7 min
Views6.5K
Fast App Resume

В продолжение последней статьи про интеграцию в хаб «Фотографии» сегодня раскроем тему Fast Application Resume, которая появилась в WP8, и рассмотрим, для чего он нужен и какие преимущества дает использование этой функции, а также различные сценарии использования App Resume.
Читать дальше →

Интеграция с хабом «Фотографии» на Windows Phone

Reading time7 min
Views7.3K
Сегодня я хотел бы затронуть одну тему, которая относится к сфере максимального использования возможностей мобильной платформы. В частности, речь пойдёт о том, как интегрировать в хаб «Фотографии» приложение, работающей с изображениями. Как вы, наверное, знаете, эта возможность появилась ещё в Windows Phone 7 и успешно перекочевала в восьмую версию ОС.

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

Денормализация деревьев

Reading time3 min
Views12K
Очень часто за основу архитектуры приложения берётся дерево. Простой пример: есть страны, в странах — области, в областях — города, в городах — организации, в организациях — работники, товары или что-либо ещё. Использование дерева вполне логично и оправдано. Иерархичность такой системы показывает некая абстрактная таблица. Назовём её object:

CREATE TABLE object (
  id NUMBER(11),
  parent_id NUMBER(11),
  type VARCHAR2(16) NOT NULL,
  name VARCHAR2(255) NOT NULL,
  CONSTRAINT pk_object PRIMARY KEY (id),
  CONSTRAINT fk_object_parent FOREIGN KEY (parent_id) REFERENCES object (id) ON DELETE CASCADE ENABLE
);

Наполним её какими-нибудь данными:

id  |  parent_id  |  type     |  name
------------------------------------------------------
1   |  NULL       |  country  |  Россия
2   |  1          |  region   |  Московская область
3   |  1          |  region   |  Новосибирская область
4   |  2          |  city     |  Москва
5   |  3          |  city     |  Новосибирск

При этом мы можем легко одним запросом получать нужные нам связи:

-- Выбрать все города России
SELECT *
  FROM object
    WHERE type = 'city'
    START WITH id = 1 CONNECT BY PRIOR id = parent_id;

-- Выбрать страну, в которой находится Новосибирск
SELECT *
  FROM object
    WHERE type = 'country'
    START WITH id = 5 CONNECT BY PRIOR parent_id = id;

Однако проблемы появляются, когда записей в таблице становится на столько много, что любой рекурсивный запрос выполняется минуты две, а то и больше. Менять всю архитектуру как-то поздновато… Тут-то нам на помощь и приходит денормализация дерева. В этой статье я расскажу об одном из способов такой денормализации.
Читать дальше →

Особенности реализации MVP для Windows Forms

Reading time8 min
Views95K
Доброго времени суток!
Model-View-Presenter — довольно известный шаблон проектирования. С первого взгляда все выглядит просто: есть Модель (Model), которая содержит всю бизнес-логику экрана; Вид/Представление (View), который знает, как отобразить те или иные данные; Представитель (Presenter), который является связующий звеном — реагирует на действия пользователя во View, изменяя Model, и наоборот.
Сложность начинается, когда количество форм в проекте становится более одной.
В данной статье рассматривается:
— немножко теории;
— общие проблемы реализации MVP (а именно Passive View) под Windows Forms;
— особенности реализации переходов между формами и передача параметров, модальные окна;
— использование IoC-контейнера и шаблона Dependency Injection — DI (а именно Сonstructor Injection);
— некоторые особенности тестирования MVP приложения (с использованием NUnit и NSubstitute);
— все это будет происходить на примере мини-проекта и постарается быть наглядным.
В статье затрагивается:
— применение шаблона Адаптер (Adapter);
— простенькая реализация шаблона Контроллер приложения (Application Controller).
Для кого эта статья?
Главным образом для начинающих разработчиков на Windows Forms, которые слышали, но не пробовали, или пробовали, но не получилось. Хотя уверен, что некоторые приемы применимы и для WPF, и даже для веб-разработки.
Читать дальше →

C#. Непоследовательное сравнение

Reading time4 min
Views16K

От переводчика:
Это вольный перевод блогозаписи Эрика Липперта (Eric Lippert), в прошлом одного из разработчиков языка C#. Запись оформлена в виде «вопрос-ответ», я пропущу вопрос и перейду к ответу, вы можете ознакомиться с вопросом в оригинале, но там ничего особо интересного.

Но, для начала, я попрошу взглянуть на следующий код, и без гугла и компилирования, попробовать выяснить что произойдет в 9 случаях сравнения и свериться с ответами (для опроса):
int myInt = 1;
short myShort = 1;
object objInt1 = myInt;
object objInt2 = myInt;
object objShort = myShort;
Console.WriteLine(myInt == myShort);          // scenario 1
Console.WriteLine(myShort == myInt);          // scenario 2
Console.WriteLine(myInt.Equals(myShort));     // scenario 3
Console.WriteLine(myShort.Equals(myInt));     // scenario 4
Console.WriteLine(objInt1 == objInt1);        // scenario 5
Console.WriteLine(objInt1 == objShort);       // scenario 6
Console.WriteLine(objInt1 == objInt2);        // scenario 7
Console.WriteLine(Equals(objInt1, objInt2));  // scenario 8
Console.WriteLine(Equals(objInt1, objShort)); // scenario 9


Продолжение и ответы

Обзор трафарет+блокнот для прототипирования

Reading time3 min
Views40K
Некоторое время были у меня в руках предметы, интересные в первую разработчикам интерфейсов сайтов/программ, а именно трафарет и блокнот для iOS-интерфейсов. Когда-то в комментариях упоминали об этой продукции компании "UI Stencils", но информации было мало и решено было взять на пробу.

image

Ниже мое субъективное мнение, которое может не совпадать с вашим.
Читать дальше →

Портирование и локализация приложения на Windows Phone 8

Reading time7 min
Views14K
В предыдущей статье я рассказал как разработать судоку для windows 8.1, в этой расскажу как портировать приложение на Windows Phone 8 и локализовать его на несколько языков.

image
Читать дальше →

Разработка Windows 8.1 приложений на XAML/С#. Часть 4. Поиск

Reading time8 min
Views8.2K
image

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

Сегодня мы рассмотрим, какие возможности предлагает Windows 8.1 разработчику Windows Store приложений для организации поиска, а так же добавим возможность поиска товаров в приложение «Каталог товаров», разработанное в прошлых статьях.
Читать дальше →

Объектно-ориентированный бизнес: как работает франшиза

Reading time8 min
Views54K
Если сравнивать свой бизнес и франшизу — разница будет примерно как между использованием сторонней библиотеки или написанием собственной. Своя приносит глубокое моральное удовлетворение, сторонняя – работает.

Пример: По данным президента Российской Ассоциации развития франчайзинга из новых бизнесов течение первых 5 лет работы только 14% компаний, открытых по франшизам, закрываются по различным причинам — против 85% закрытых самостоятельных компаний. UPD: тут был пример из детального исследования в США, но в комментариях мы ковыряем источник, не всё так радужно. В России нормальной независимой статистики пока нет, но, как говорят профильные издания, ситуация близка к тому, что франчайзинг переживает второй год в восемь раз чаще. И это, кстати, отлично понимают банки: например, предлагают специальные льготные кредиты для бизнеса, открытого по франшизе.

image
Кусочки из нашего франчбука: полностью готовый «код», который просто надо воплотить.

Но вернёмся к этой объектно-ориентированной модели бизнеса и трём её главным качествам: наследовании, инкапсуляции и полиморфизму. Ну и заодно рассмотрим грабли, по которым мы ходили. В целом, франчайзинг для бизнеса — это примерно то же, что WEB 2.0 для Интернета. Ниже ликбез, почему.
Читать дальше →

Адаптация приложений Windows Phone для больших экранов

Reading time7 min
Views7.1K
Неделю назад в продаже появились планшетофоны Nokia. Обновление операционной системы Windows Phone с маркировкой GDR3 стало поддерживать 4-ядерные процессоры и разрешение экрана до FullHD. Именно с такими характеристиками Nokia выпустила свой новый флагман Lumia 1520. Но производитель не стал просто увеличивать плотность размещения пикселей при тех же размерах экрана, как это сделали в конкурентных моделях на ОС Android компании HTC и Samsung. Nokia выпустила аппарат с диагональю экрана 6 дюймов, немного обогнав даже третью версию родоначальника планшетофонов Galaxy Note. Размер экрана и самого аппарата завораживает и пугает одновременно. Но, отбросив лирику, попытаемся разобраться, как нам, разработчикам, с этим жить.
Читать дальше →

Паттерн MVVM и страничная навигация

Reading time16 min
Views57K

Применение страничной навигации достаточно актуальная задача для настольных WPF-MVVM приложений.
Разномастных руководств по организации такой навигации в сети достаточно.
И, конечно, Хабрахабр не исключение (имеются статьи раз и два).
Взглянув на первую статью Вы узнаете про NavigationService и возможность пользоваться Hyperlink.
Если перейдете по второй ссылке, то узнаете как пользоваться NavigationService в так называемом «Code Behind».
Таким образом, решения полного в этих статьях не представлено (на мой взгляд).
Хочется заполнить пробел и представить Вашему вниманию, как мне кажется, вполне рабочее решение.
Абсолютно не претендую на законченный компонент для организации страничной навигации.
Буду благодарен за полезные комментарии, поправки и дополнения.
Рад буду, если кому-то моя реализация навигатора окажется полезной.
Читать дальше →

Миграция приложения с Windows 8 на Windows 8.1

Reading time11 min
Views11K
Миграция приложений на новую версию операционной системы – это всегда непростой вопрос. Ключевое значение имеет нахождение правильного баланса между внедрением новой функциональности, поддержкой кода и наличием целевой аудитории.



Все эти параметры индивидуальны для каждого проекта, и в определенном смысле зависят друг от друга.
Читать дальше →

Commands in MVVM

Reading time22 min
Views85K
  • Пример 1 – Простое использование Command
  • Пример 2 — Простое использование Command в паре с лямда функциями
  • Пример 3 — Простое использование Command с параметрами
  • Пример 4 – Включение и отключение Command
  • Пример 5 – Command вызывающие события
  • Пример 6 – Асинхронные Command
  • Пример 7 — Асинхронные Command обновляющие интерфейс пользователя (UI)
  • Пример 8 — Асинхронные Command с возможность отмены
  • Пример 9 – Привязка событий к Command
  • Как это работает – Класс Command
  • Как это работает – Класс асинхронных Command
  • Как это работает – Класс привязки данных к Command

Вступление


На примере приложения, использующего паттерн MVVM (Model View View-Model) рассмотрим работу с командами (Commands).
Читать дальше →

О проблемах и решении задачи доставки пуш-уведомлений миллионам устройств на различных платформах

Reading time9 min
Views23K
Пуш-уведомления критически важны для мобильных приложений подключенных к интернету. Они позволяют бэкенду сервисов отправлять частые и своевременные обновления определенным пользователям и устройствам, которые затем могут быть представлены в виде обновлений живых плиток, всплывающих тост-уведомлений, бэдж-обновлений и так далее (обратитесь к этой серии статей для того, чтобы узнать больше). Представляясь в таком виде, пуш-уведомления – это, возможно, наиболее мощный механизм вовлечения клиента доступный разработчикам приложений на телефонах, планшетах и ПК.

push-fig1

Существует множество инструментов, которые могут помочь вам упростить работу с пуш-уведомлениями (Windows Azure Mobile Services, например, уже включает в себя такой функционал). С помощью этих инструментов отправка отдельных уведомлений одному отдельному пользователю – это сравнительно простая задача.  Тем не менее, постоянная отправка уведомлений с низкими задержками миллионам мобильных пользователей с учетом реальных требований по локализации, поддержке разных мобильных платформ, персонализации для пользователя становится гораздо более трудной задачей.
Читать дальше →

Делегаты и события в .NET

Reading time26 min
Views241K
От переводчика. Судя по своему опыту, а также по опыту знакомых коллег-программистов, могу сказать, что для начинающего разработчика среди всех базовых функций языка C# и платформы .NET делегаты и события являются одними из наиболее сложных. Возможно, это из-за того, что необходимость делегатов и событий на первый взгляд кажется неочевидной, или же из-за некоторой путаницы в терминах. Поэтому я решил перевести статью Джона Скита, рассказывающую о делегатах и событиях на самом базовом уровне, «на пальцах». Она идеальна для тех, кто знаком с C#/.NET, однако испытывает затруднение в понимании делегатов и событий.

Представленный здесь перевод является вольным. Однако если под «вольным», как правило, понимают сокращённый перевод, с упущениями, упрощениями и пересказами, то здесь всё наоборот. Данный перевод является немного расширенной, уточнённой и обновлённой версией оригинала. Я выражаю огромную благодарность Сергею Теплякову aka SergeyT, который внёс неоценимый вклад в перевод и оформление данной статьи.


Люди часто испытывают затруднения в понимании различий между событиями и делегатами. И C# ещё больше запутывает ситуацию, так как позволяет объявлять field-like события, которые автоматически преобразуются в переменную делегата с таким же самым именем. Эта статья призвана прояснить данный вопрос. Ещё одним моментом является путаница с термином «делегат», который имеет несколько значений. Иногда его используют для обозначения типа делегата (delegate type), а иногда — для обозначения экземпляра делегата (delegate instance). Чтобы избежать путаницы, я буду явно использовать эти термины — тип делегата и экземпляр делегата, а когда буду использовать слово «делегат» — значит, я говорю о них в самом широком смысле.
Читать статью

Контроль покрытия кода при unit-тестировании в Windows Phone

Reading time7 min
Views4.9K

Приветствую хабражителей!
Хочу поделиться своими достижениями в налаживании контроля покрытия кода при модульном тестировании приложений под Windows Phone. Примечательно, что при решении этой задачки пришлось столкнуться с некоторыми аспектами «правильного» проектирования приложений. Поэтому этот пост можно рассматривать как небольшое учебное пособие.

Постановка задачи


Дано:
Начинается разработка небольшого приложения под Windows Phone. Приложение типовое — забирает какие-то данные со своего сервера и в каком-то виде их показывает пользователю.
Требуется:
Спроектировать архитектуру приложения так, чтобы при непрерывной интеграции максимум кода приложения, отвечающего за логику работы, был закрыт тестами с возможностью контролировать это покрытие.
Читать дальше →

Роль тимлида: что остается менеджерам?

Reading time4 min
Views38K
image

Привет, Хабр!

В последнее время в области IT и digital все чаще слышится слово «тимлид». Но при детальном рассмотрении видно, что все по-своему понимают эту профессию.

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

В этой статье мы попробуем разобраться, кто же такой этот загадочный «тимлид» и так ли нужны менеджеры?

Читать дальше →

Заовнил, вонзился, запилил: словарь IT-шника

Reading time5 min
Views100K
Как часто друзья и родственники, не связанные с IT, просили вас рассказать, что нового на работе, а вы, увлекаясь, начинали говорить вроде на русском, но совершенно непонятном для них языке? Мы создали наш словарь терминов, в который вошли как внутренний сленг отдельных проектов, так и достояние широкой общественности. Надеемся, эта компиляция поможет айтишникам при необходимости выразить свои мысли на языке маглов, а неайтишникам – понять, что айтишники несут. Ну и просто повеселит всех. Ведь пятница!

Про код и изменения





Код добра – программный код, очевидно содержащий непоправимые улучшения.
Котятоемкий код — очень некрасивое техническое решение. Выражение обязано своим происхождением предположению, что каждый раз, когда программист пишет строчку некрасивого кода, бог убивает котенка.
Непоправимо улучшить – запилить годное, но не до конца проверенное изменение функционала. Синоним — необратимо улучшить.
Мясной коммит (ковровый коммит) – правка, судя по количеству и характеру изменений, наверняка содержащая непоправимые улучшения.
Тупач – очень срочная задача, результаты работ по которой должны попасть в бранч для выкатываемой версии. Образовано от to patch.
Минорный тупач – задача горит – сильнее некуда, но уж очень мелкая.
Глубокий ToDo Later — (отправить задачу в глубокий тудулейтер) статус задачи в таск-трекере отложена на неопределенный срок.
Подпереть костылями – реализовать функциональность за счет непредусмотренного временного решения.
Шрапнельные правки – огромное количество мелких правок по всему проекту, которые очень сложно оттестировать.
Скриптюня — очень классный скрипт, экономит кучу времени, практически лучший друг оператора.
Читать дальше →

Unit тесты на практике

Reading time12 min
Views147K
В последнее время появилось и продолжает появляться достаточно много публикаций на тему разработки через тестирование. Тема достаточно интересная и стоит того, чтобы посвятить её исследованию какую-то часть своего времени. В нашей команде мы используем модульное тестирование уже на протяжении года. В этой статье я хочу рассказать о том, что получилось и какой опыт в итоге мы приобрели.

Сразу оговорюсь, что примеры приводятся применительно к языку C# и платформе .NET. Соответственно, в других языках/платформах подходы и реализации могут отличаться.

Итак…
Читать дальше →

8 фактов, которые вы, возможно, не знали о C#

Reading time7 min
Views195K
Вот несколько необычных фактов о языке C#, о которых знают лишь немногие разработчики.

1. Индексаторы могут использовать params параметры


Мы все знаем, как обычно выглядят индексаторы x = something["a"], а так же код необходимый для его реализации:

public string this[string key]
 {
   get { return internalDictionary[key]; }
 }

Но знали ли вы, что для доступа к элементам вы можете использовать params параметры x = something["a", "b", "c", "d"]?
Просто напишите ваш индексатор следующим образом:
Читать дальше →

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity