Imagine cup 2013, квадрокоптер, радуга

Наша команда)

Что такое imagine cup рассказывала в этом посте. В этот раз участвовала в команде Raduga bits. Проект был квадрокоптер. Сделан он почти из говна и палок и летает с xtion’ом. На схеме рисовали kinect, ибо надо было что-то придумать с технологией MS, на самом деле он его вряд ли поднимет в воздух. На данный момент все работает под Linux и с Linux, другого от меня можно не ожидать.
Схема из перезенташки. (вырезала лишнее, презенташку не дам)

Теперь схемка подробнее как работает это все.

Что мы тут видим. Rasbperry Pi (на debian) раздает wifi. Клиент цепляется и отправляет команды по UDP на Raspberry Pi. Тот же отправляет их на Arduino по USB а тот уже управляет коптером (в коптере есть еще Arduino). Про съемку и обработку видео вкурсе, только что спилили под вендузятку. Почему? Без понятия.

Фото коптера
Pcb09OXxiU4

TefVq2xsm_I
1fb3ufGzzPM

Нас не дооценили и мы не победили.

Групповое фото радуги

Placeholder

Посещая различные ресурсы сети Интернет, каждый из нас практически постоянно сталкивается с полями, которые по умолчанию заполнены определенным текстом, например, образцом заполнения полей для ввода логина или пароля. Все поля, которые предварительно заполнены текстом-подсказкой, имеют светло-серый цвет. Если пользователь щелкает в этом поле, текст исчезает, и он может вводить текст. Данные поля очень удобны для пользователей: во-первых, они позволяют пользователю визуально различать заполненные и незаполненные поля, что делает работу с ресурсом более удобной — для этого используется цветовая гамма. Во-вторых, определяется формат ввода данных в выбранное поле, что обеспечивает быстроту работы с ресурсом — пользователь не тратит время на повторный ввод данных — ошибится форматом практически не возможно.
Реализовать данные поля возможно не только в верстке веб-ресурсов, существует и возможность реализации в Windows Phone 7. Код, реализующий данную функцию, представлен ниже. Наличие текста-подсказки определяется с помощью выставления атрибута TextBoxText.

xmlns:controls="clr-namespace:WatermarkTextBox"
...
<controls:WatermarkTextBox WatermarkText="Введите Ваш e-mail" />


public class WatermarkTextBox : TextBox
{
public string WatermarkText
{
get { return (String)this.GetValue(WatermarkTextProperty); }
set { this.SetValue(WatermarkTextProperty, value); }
}
public static readonly DependencyProperty WatermarkTextProperty =
DependencyProperty.Register("WatermarkText", typeof(String), typeof(WatermarkTextBox), new PropertyMetadata(String.Empty));

public SolidColorBrush WatermarkForeGroundColor = Application.Current.Resources["PhoneTextBoxReadOnlyBrush"] as SolidColorBrush;

public WatermarkTextBox()
{
Loaded += new RoutedEventHandler(WatermarkTextBox_Loaded);
}

void WatermarkTextBox_Loaded(object sender, RoutedEventArgs e)
{
this.Text = !String.IsNullOrEmpty(WatermarkText) ? WatermarkText : String.Empty;
this.Foreground = WatermarkForeGroundColor;
}

protected override void OnGotFocus(RoutedEventArgs e)
{
base.OnGotFocus(e);

if (WatermarkText == this.Text)
{
this.Text = String.Empty;
this.Foreground = Application.Current.Resources["PhoneTextBoxForegroundBrush"] as SolidColorBrush;
}
}

protected override void OnLostFocus(RoutedEventArgs e)
{
base.OnLostFocus(e);

if (String.IsNullOrEmpty(this.Text))
{
this.Text = !String.IsNullOrEmpty(WatermarkText) ? WatermarkText : String.Empty;
this.Foreground = WatermarkForeGroundColor;
}
}
}

Listpicker в Windows Phone 7

Windows Phone 7 — это современная мобильная операционная система от Microsoft. Особенностью данной ОС является наличие нового ядра Windows CE, новый уровень API и GUI. GUI Windows Phone 7 требует написание приложений на SilverLight/XNA. В данной статье я расскажу Вам о применении контрола Listpicker для создания максимально удобных приложений под Windows Phone 7.

ListPicker это один из контролов в Silverlight Toolkit для Windows Phone 7. Он предназначен для выбора какого-либо пункта из списка. Данный элемент очень похож на Combobox, но имеет значительно больше возможностей, чем ComboBox. Например, если необходимо отобразить список небольшой длины, то ListPicker покажет данные в виде Combobox-а (описывается свойством ItemTemplate и используется в тот момент, когда отображается один выбранный элемент из списка, т.е. контрол не активен), а если необходимо отобразить большее число позиции списка, то Listpicker покажет данные в виде ListBox-а (задается параметром FullModelItemTemplate и используется при выборе пользователя из всего списка, т.е. когда контрол ListPicker активен). Выбор формы отображения происходит автоматически. Именно поэтому, данный элемент управления очень удобно использовать. Преобразовать использованные в уже написанных приложениях ListBox-ы в ListPicker-ы очень легко — достаточно просто заменить название контрола в xaml файле с ListBox на ListPicker.

Создадим простое приложение на Microsoft Silverlight.
Для этого запускаем среду разработки и создаем новый проект Windows Phone Application Project.

Далее щелкните правой кнопкой мыши на References -> выберите Add Refrences -> и выберите Microsoft.Phone.Controls.Toolkit:

Затем, выбираем MainPage.xaml и происходит построение интерфейса пользователя, но для использования Microsoft.Phone.Controls.Toolkit необходимо после этого в нем объявлить

xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

Теперь добавим несколько контролов на главную страницу: TextBlock, TextBox и ListPicker:

Для использования ListPicker мы должны определить ItemTemplate и FullModeItemTemplate:

<phone:PhoneApplicationPage.Resources>
        <DataTemplate x:Name="lpkItemTemplate">
            <TextBlock Text="{Binding Country}" />
        </DataTemplate>
        <DataTemplate x:Name="lpkFullItemTemplate">
            <TextBlock Text="{Binding Country}" />
        </DataTemplate>
    </phone:PhoneApplicationPage.Resources>

Полный код XAML:

<phone:PhoneApplicationPage
    x:Class="ListPickerDemo.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">
    <phone:PhoneApplicationPage.Resources>
        <DataTemplate x:Name="lpkItemTemplate">
            <TextBlock Text="{Binding Country}" />
        </DataTemplate>
        <DataTemplate x:Name="lpkFullItemTemplate">
           <TextBlock Text="{Binding Country}" />
        </DataTemplate>
    </phone:PhoneApplicationPage.Resources>
    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="ListPicker" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>
        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <TextBlock Text="Name" Margin="14,0,0,0"/>
            <TextBox Grid.Row="1" Name="txtName"/>
            <TextBlock Text="Ages " Grid.Row="2" Margin="14,0,0,0"/>
            <TextBox Name="txtAge" Grid.Row="3"/>
            <TextBlock Text="Country" Grid.Row="4" Margin="14,0,0,0" />
            <toolkit:ListPicker FullModeItemTemplate="{Binding lpkFullItemTemplate}"
                Grid.Row="5" ItemTemplate="{Binding lpkItemTemplate}"
                x:Name="lpkCountry"/>
            <Button Content="Submit" Grid.Row="5" Height="72" HorizontalAlignment="Left" Margin="284,87,0,0" Name="btnSubmit" Click="btnSubmit_Click"
             VerticalAlignment="Top" Width="160" />
        </Grid>
    </Grid>
</phone:PhoneApplicationPage>

Затем переходим к MainPage.xaml.cs и задаем массив строк в качестве примера данных, а также добавляем для ListPicker свойства ItemSource:

C # код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
namespace ListPickerDemo
{
    public partial class MainPage : PhoneApplicationPage
    {
        String[] Country = { "Viet Nam","Japan",
                              "China","USA",
                              "Poland","Brazil",
                         "Singapore","Philipin","Malaysia"};
        public MainPage()
        {
            InitializeComponent();
            this.lpkCountry.ItemsSource = Country;
        }
        private void btnSubmit_Click(object sender, RoutedEventArgs e)
        {
            String _Content = String.Format("Name: {0} \nAges: {1}\nCountry: {2}", txtName.Text,txtAge.Text,lpkCountry.SelectedItem);
            MessageBox.Show(_Content);
        }
    }
}

Теперь мы запускаем приложение для просмотра результата:

Если у вас небольшое число стран:

И если у вас длинный список стран (будет работать FullModeItemTamplate):

И после подтверждения формы:

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

Imagine cup 2012 и я

Для начала вкратце расскажу, для тех кто не в теме, что же это такое.

Imagine Cup – одно из крупнейших в мире студенческих соревнований, которое проводится Майкрософт при поддержке других высокотехнологичных компаний.

Основной конкурс Imagine Cup – это конкурс программных проектов, в котором команды студентов и аспирантов придумывают, как технологии могут решить сложные проблемы современности, и демонстрируют прототипы проектов жюри в ходе нескольких этапов отбора. По результатам конкурса лучшая команда из России представляет страну на международном финале.

Зачем это надо? 

Конечно, попиарить себя.  Приобрести опыт работы в команде.  Попытаться сделать из своей идеи что-то больше, чем проект на конкурс.  Может кто-то видит ещё причины или вовсе их не видит.

А теперь, о том, к чему это я..

Сегодня мне пришло письмо с уведомлением, что моя команда прошла в региональный финал Imagine cup 2012  в  Software Design.  Команда называется Healthy Generation, из названия уже можно примерно представлять о чём  проект. Я тут не буду рассказывать о чём он, просто потому, что я ленивая и не хочу так много печатать, а заявку на участие копировать смысла нет, ибо очень много текста и мало вероятно кто будет читать.

Придумать идею и решение её при помощи технологий Microsoft не так то просто оказалось, как казалось с самого начала.  Хотя выбранная мною проблема довольно актуальна и пожалуй всем известна.  24 марта на м. Крылатская будет проходить региональный финал, в котором примет участие моя команда. Если вы хотите придти поболеть за мою команду, а заодно и послушать кто и что придумал, то регистрируйтесь по ссылке.

 

Подкаст от антивир Касп.

Слушать.

Просматривая свою твиттер ленту, моё внимание сосредоточилось на записе с текстом, не буду говорить от кого, дабы не позорить:»Сергей Новиков из «Лаборатории Касперского» утверждает что Windows 7 гораздо безопаснее MacOS X и прочих Unix/Linux. <и ссылка на подкаст> «. Мне, как пользователю Linux, и человеку весьма повернутому на ИБ, стали интересны аргументы. Да-да, вдруг случилось то, что я пропустила.
Не могу не поделиться со своими читателями таким позитивным подкастом. Самая жара начинается с 15 минуты и сколько-то там секунд, забыла уже.
Поражает как такие люди могут работать в сфере ИБ. И весьма поразил аргумент про MacOS, что она не безопасна, ибо ПО с торентов. Про app store сие товарищ и не слышал. Конечно понятно, что это реклама их антивируса, но нельзя же до такого доходить.
Смешно до слёз.
Совет придумать один пароль и дописывать к нему название ресурса на котором он используется это пздц, иначе это никак не назвать.