Как непрограммист создал своё мобильное приложение

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

Хочу поделиться историей, как я, непрограммист, смог написать своё первое мобильное приложение благодаря (или вопреки ему) MS Visual Studio 2013 и даже опубликовать его в магазине Windows Phone. Прошу учесть читателей, что я максимально неопытный непрограммист, который мало что умеет в этой области, поэтому если я решал какие-то проблемы не так изящно, как их можно было бы решить, то особо не глумитесь – это мой первый опыт в подобном деле.

Началось всё с того, что, учась на курсе Cyber Security в Таллиннском Техническом Университете я прослушал курс VB.NET в рамках работы с Windows Forms. Затем где-то случайно прочитал, что MS Visual Studio 2013 позволяет создавать мобильные приложения не только на каком-нибудь загадочном для меня C# или Java, а ещё и на VB.NET.

«Вот это шанс – так я же мегаспец в VB.NET» – подумалось мне тогда. Срочно воспользовавшись студенческой лицензией, я скачал себе MS Visual Studio 2013 и преступил к таинству созданию своего первого приложения.

На курсе нам рассказывали, что самое главное не скилл, а идея. Скилловых программистов много, а успешных приложений мало. Тот же Rovio несколько раз был банкротом и выпустил сотню никому не нужных игр, пока не дошёл до Angry Birds. Вот тут у меня всё было в порядке — скиллов ноль (как потом выяснилось), зато давно была идея. Идея проста – как Flappy Bird.

Итак, я открыл MS Visual Studio 2013 – New Project – Visual Basic — Store Apps – Windows Phone – Blank App (Windows Phone).

Вот тут я совершил первую свою ошибку, позже поясню в чём она заключалась.

Передо мной открылся эмулятор телефона с непонятным кодом сбоку, и страница с кодом похожим на VB.NET. Ок – дальше что? Это не похоже на Forms, что-то тут не так надо почитать мануалы. Как оказалась у Microsoft создана широчайшая база знаний для поддержки разработчиков: подробнейшие видеоуроки и письменные мануалы, от начинающих до профессионалов.

На этих курсах всё в деталях расписано от того как установить кнопку до того, как обращаться в облако и хранить там базы данных. Тут Microsoft от меня большой респект, даже я разобрался – отлично отнеслись к своим разработчикам, видно, что это для них важно. Начал смотреть, читать – стало приходить понимание как это всё работает, а также понимание, что это не Windows Forms и надо начинать учиться заново. Лектор в видеоуроках отлично рассказывал и подробно описывал все действия для… С# (упс, пичалька). Но мне этого хватило, чтобы понять концепцию и создать пару страничек с переходами в моём приложении.

Дальше начался кошмар! Куча команд, к которым я привык просто не существовали в VB.NET для Windows Phone, они были заменены на альтернативные! Microsoft, really?

Мне пришлось с нуля учить весь синтаксис и разделять в голове один VB.NET и другой VB.NET, но для Windows Phone. Например, в VB.NET есть команда для определения/задания координат объекта в пространстве. В Windows Forms она такая:

Image.Left=100 //задаём
i=Image.Left //определяем

В Windows Phone:

Canvas.SetLeft(Image, i) //задаём
Canvas.GetLeft(Image) //определяем


image

Неопытному непрограммисту очень сложно сходу понять, почему его Image.Left=100 не работает, ведь всё же правильно. В итоге тратишь время, порой много, на поиск решений.

Приведу ещё пару примеров, может кому-то будет полезно, если Google приведёт его сюда.

Забудьте всё, что вы знали про Timer. Объекта Timer нет. Но его можно создавать через код и называется DispatcherTimer (Microsoft, really?) Сперва его надо создать в коде и задать интервал:

DispatcherTimer = New Windows.UI.Xaml.DispatcherTimer()
            AddHandler DispatcherTimer.Tick, AddressOf dispatcherTimer_Tick
            DispatcherTimer.Interval = New TimeSpan(0, 0, 0, 0, 10)

Затем создать событие dispatcherTimer_Tick – чтобы это всё выяснить, у меня ушло 2 дня. Так как прямым гуглением не находилось ничего. Только крик о помощи на http://stackoverflow.com привёл меня к нужному решению.

После чего я стал более вдумчиво читать страничку знаний Microsoft и искать именно по ней. Тут уже стал находить ответы самостоятельно, благо там сделано очень удобно – искомое решение предоставлено на нескольких языках программирования одновременно. Чувствуется забота о разработчиках, хоть и с горьким привкусом.

Далее мне нужно было обратиться к веб-ресурсу, где лежал текстовый файл, чтобы взять оттуда одну строчку. Всё просто: иду и http://msdn.microsoft.com нахожу нужное решение, но… Оно не работает. Нет, нет, я что-то сделал не так. Всё стираю делаю по новой – опять ошибка. Не узнаются команды StreamReader и GetResponse. Как же так, вот же они прям на сайте Microsoft! Ну ладно уж, на http://stackoverflow.com мне точно помогут. Но и там говорят, что всё правильно сделано и должно работать как надо. Паника и слёзы! Забросил всё на неделю.

Вернулся и вижу – один из пользователей Stackoverflow спросил, а не пишу ли я на VB.NET, который не Silverlight? Первая моя реакция была:

image

О чём вообще речь, что это такое, зачем он меня пугает?
Оказалось, существует не только VB.Net, VB.Net for Windows Phone, но ещё и VB.Net for Windows Phone (Silverlight), все они в разной степени отличаются по синтаксису.
Microsoft, WTF?

Посмотрев внимательно на http://msdn.microsoft.com я увидел, что практически всё, что там описывается — всё для Silverlight и мне просто везло до этого момента, что синтаксис более менее совпадал. Вот такую ошибку я совершил при создании своего проекта, о чём писал выше – выбрал Balnk App (Windows Phone), а не Balnk App (Windows Phone Silverlight).

Бросить и начать всё сначала? Нет, слишком много бессонных ночей было убито на создание того, что есть и я решил не сдаваться.

Долгим гуглением и хождением по форумам разного разлива я нашёл решения для чтения текста из файлика, который лежит в Web, может кому пригодится:

Dim httpClient As HttpClient = New HttpClient()
Dim form As New MultipartFormDataContent()
Dim getUrl As String = "http://website/test.txt"
            Dim response As HttpResponseMessage = Await httpClient.PostAsync(getUrl, form)
            responseText = Await response.Content.ReadAsStringAsync()

Далее возникла проблема с показом сообщения пользователю – элементарный MessageBox. В VB.Net (Windows Forms) он делается одним способом в VB.Net (Windows Phone) – другим, в VB.Net (Windows Phone Silverlight) – третьим. Но мы то уже взрослые, привыкшие и нас это не пугает. Две ночи и решение найдено:

Async Function ShowMyDialog() As Task(Of Boolean)
        Dim result As Boolean = False
        Dim dialog As New Windows.UI.Popups.MessageDialog(rl.GetString("Try_again"), rl.GetString("Game_Over"))
        dialog.Commands.Add(New Windows.UI.Popups.UICommand(rl.GetString("Yes"),
        Sub(command)
            //some action
        End Sub))
        dialog.Commands.Add(New Windows.UI.Popups.UICommand(rl.GetString("No"),
        Sub(command)
           //some action
        End Sub))
        dialog.DefaultCommandIndex = 0
        dialog.CancelCommandIndex = 1
        Await dialog.ShowAsync()
        ' 
        Return result
    End Function


Не так-то просто, как видно. И вот, пройдя через все эти дебри кодинга, я вышел к релизу. Всё было готов, всё работало. Я решил добавить баннер с рекламой, это оказалось очень просто – есть инструмент AdControl, который просто настраивается. Надо лишь получить личный код на сайте http://advertising.microsoft.com/en/home и всё. И тут оказалось, что Эстония, где я живу, и Россия не входят в список стран, которые могут участвовать в данной программе. То есть, если у вас нету банковского счёта в списке из 35 стран, то, извините, вы в пролёте.

Ок, я слышал есть такая же программа от Google. Да, есть такая и Эстония в списке. Отлично! Скачиваем дополнение к MS Visual Studio 2013, пытаемся добавить баннер в проект и… его нет среди доступных инструментов. Как? Почему? А потому что работает это только на Silverlight!

Microsoft Google, really?

Опять боком вышла ошибка, допущенная в начале. Но переделывать нету уже никаких сил. Чтобы реализовать свои планы и стать миллиардером за 2 часа, я принял решение создать 2 приложения: Free и Pro версии. Это заняло 1 час.
Ну всё – готово!

Начинаем публикацию. Тут вообще всё просто: MS Visual Studio 2013 сам прогоняет пару тестов на пригодность и ошибки, генерирует .appxupload – файл. Который заливается на страничке http://dev.windowsphone.com

После чего нужно ждать подтверждения сертификации приложения. Я отправил приложение в 3 часа ночи, в 5 утра получил подтверждение регистрации. Довольно быстро! Однако, тут же обнаружил баг в приложении и решил его исправить. После чего решил загрузить обновление приложения и попал в ступор, так как на страничке приложение не было кнопки для заливки нового .appxupload–файла. А как же обновить? Оказалась просто — надо кликнуть вот сюда:

image

Поди догадайся.

UPD: Пока писал статью — уже починили. Оперативно!

image

Однако прочитать некоторые данные в панели мониторинга до сих пор невозможно:

image

Итог


В целом Microsoft создала отличную платформу для создания мобильных приложений для Windows Phone, Android и iOS. Если даже криворукий неопытный непрограммист смог с помощью неё создать своё приложение, то скилловым спецам тут море по колено. Через ругань и слёзы, благодаря своей упоротости упёртости и желанию воплотить мечту, я сумел дойти до финиша. Если вы владеете навыками хоть в каком-нибудь языке из поддерживаемых MS Visual Studio 2013, то бросайте всё и садитесь за написание своего мобильного приложения. Я уверен, вы достигнете цели, хоть и придётся пройти через боль и отчаяние.
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 32

    0
    а можно линк на приложение?
        +4
        Версия
        2014.1102.1532.5244

        Зря вы так погорячились ))
          0
          Ого, спасибо, исправлю =)
          0
          Да и PRO версия, думается ни к чему. Ладно бы реализация была адекватная. А так куча косяков (странная навигация на первой странице похоже сделана отступами, а не выравниванием по центру; дерганное выезжание нового котика да еще и не до конца; нелогичное расположение индикатора правильности ответа и т.д и т.п.) и это при беглом просмотре.

          Платной версией вы только отпугнете пользователей и вызовите раздражение. Я бы на вашем месте продолжил развивать приложение на основе бесплатной версии (платное бы удалил). На основе отзывов улучшал и улучшал (поле для маневров тут ОЙ как много). Потом сделал бы платную версию на основе уже существующей — тем самым вы наградите пользователей, которые все это время были с вами, а уже бесплатная появилась бы на основе начально, но с урезанным функционалом.

          Повторюсь — тем путем, которым вы идете сейчас будет только раздражение пользователей, мусор в сторе (мотивации развивать не будет) и зря потраченное время. Заработать с таким продуктом не получится.
            0
            Спасибо за совет.
            Идея с Pro была не столько заработать сколько следование советам от Microsoft, которые на своей странице рекомендовали разделять игры на 2 версии. Но я с вами солидарен, лучше доведу до ума единственный бесплатный вариант.
            Спасибо ещё раз
              +1
              Главное — не останавливаться. Сейчас — это простенькая поделка, завтра обычное приложение, потерявшееся в море стора, через какое-то время это занятие вполне может стать не просто развлекуха баловства ради, но и хобби бюджета для. При чем на этом пути вы можете открыть для себя куча нового — библиотеки (если для wp, то Windows Phone toolkit, code4fun toolkit, чтобы не мучаться с диалогами по две ночи), это паттерны и фреймворки для облегчения использования этих паттернов (если, опять же, для wp, то это MVVM, DI, IoC, etc. в паре с одним из MMVMLight, Caliburn.Micro, Prism, etc.). Надеюсь, для вас CatQiz — всего лишь первый и робкий шаг на пути к великим и эпохальным свершения — удачи на этом поприще ))
                0
                Большое спасбо, пошёл читать про всё что вы написали.
                Надеюсь развить свои скиллы, чтобы начать писать, что-то действительно нужное людям
        +1
        В целом Microsoft создала отличную платформу для создания мобильных приложений для Windows Phone, Android и iOS

        Чего?
          0
          Я тоже по началу удивился. Но потом подумал, что, возможно, речь идет о Xamarin — там Visual Studio в помощь. За разработку под Android и iOS на студии нужно благодарить не только мелкомягких, но и Xamarin Inc. Но это и сама по себе студия — прекраснейший инструмент.
            0
            Да можно, благодаря Xamarin http://msdn.microsoft.com/en-us/library/dn771552.aspx
            0
            Оказалось, существует не только VB.Net, VB.Net for Windows Phone, но ещё и VB.Net for Windows Phone (Silverlight), все они в разной степени отличаются по синтаксису.

            Уж не знаю как там с VB.Net, но в C# нет различий в синтаксисе самого языка, но есть различие в ...for Windows Phone ...for Windows Phone (Silverlight). Это различие заключается в используемом фреймворке и, как следствие, наборе контролов и API. Но сам язык — абсолютно такой же.

            Так вот то, что вы выбрали VB.Net for Windows Phone даже верное решение, потому что первые приложения под Windows Phone были исключительно на Silverlight, потом Microsoft внезапно сменили курс с релизом 8.1. Так что если планируете разрабатывать и дальше новые приложения, то выбирайте VB.Net for Windows Phone. Несмотря на то, что VB.Net for Windows Phone (Silverlight) на данный момент иногда позваоляет то, чего пока нельзя сделать на более современном типе приложений, за Silverlight осталось прошлое а все так красиво начиналось.
              0
              Плюс будет легче в портировании\создании Universal Apps
                0
                Спасибо — не знал. А то собирался следующие свои фантазии реализовывать именно на Silverlight. Предостерегли
                +1
                Статья хоть и не очень, хотя пользы и приносит, но фраза убила:
                Но мы то уже взрослые, привыкшие и нас это не пугает. Две ночи и решение найдено
                  +1
                  А вы не пытались в первую очередь задаться вопросом что лучше использовать сразу? А не прощупывать всё на себе и жертвовать своим здоровьем?

                  А на деле я бы не стал трогать Silverlight версию даже длинной палкой. Зачем мучиться с ограничениями. С другой стороны VB.NET я бы так же не стал бы трогать совсем длинной палкой. C# без вариантов, возможностей в плане синтаксиса куда как больше, больше литературы, проще найти ответ на интересующий вопрос.
                    0
                    вы абсолютно правы, но так как я к тому моменту через пень-колоду знал только VB.NET, то решился делать именно на нём. Знал бы Java или C#, не стал бы трогать VB
                      0
                      Для этого приложения лучше всего по-моему использовать какой-нибудь кроссплатформенный фреймворк, например, Apache Cordova. Базовые знания js, немного магии nodejs, и получаем готовую игру на android, ios, bada windows phone, blackberry
                        0
                        Которое будет совершенно по разному себя вести не только на разных ОС, но и даже на разных телефонах с одной и той же версией андроида…

                        Спасают только канвасы, в html часть лучше даже на соваться, если конечно приложение чуть круче пятнашек или крестиков-ноликов.

                        И это я ещё не упомянул про боль сборки всего этого дела под виндой, когда компилятор отваливается каждую вторую сборку или при установке какого-либо плагина ;)
                          0
                          Что ж впереди большой простор для накопления новых знаний. Курсы Java я уже присмотрел, но ещё придётся на C# записаться видимо.
                          Спасибо за наводки, будем изучать =)
                            0
                            js <> java ;)
                            ru.wikipedia.org/wiki/JavaScript (см. история)
                            Первоначально язык назывался LiveScript и предназначался как для программирования на стороне клиента, так и для программирования на стороне сервера (там он должен был называться LiveWire). На синтаксис оказали влияние языки Си и Java, и, поскольку Java в то время было модным словом, 4 декабря 1995 года LiveScript переименовали в JavaScript, получив соответствующую лицензию у Sun.

                            Эта штука значительно безумнее, тебе было предложено ступить на очень лёгкую, но безрассудную дорожку прототипного программирования.
                        0
                        Самое первое прямое гугление таймеров www.google.ru/?gfe_rd=cr&ei=zW5jVPChIqer8wertoDQCQ#newwindow=1&q=windows+phone+timer+example
                          0
                          Если человек не программист то бывает не так просто нагуглить нужный ответ. Я вот тоже второй день (правда лениво) ищу как мне корректно реинициализировать кастомную директиву в ангуляре…
                          0
                          Промахнулся
                            0
                            Посоветую — попробуйте всё-таки поизучать С#. Он не такой уж и страшный, вам понравится (хоть и после нескольких бессонных ночей, пользуясь вашими терминами=). Если вы решили и дальше пробовать программировать, то лучше переходить с VB на приличный язык. Вы об
                            этом сами хорошо написали в статье.
                              0
                              Ну скажем vb.net не такой уж и слабенький, это просто у нас выработался стереотип со времён кубейсика и небольшая неприязнь к «бесскобочным» языкам. Но примеров на нем действительно меньше, чем по шарпу.
                                0
                                З.Ы. Плюсую к изучению шарпа, всё же апи будет тот же, просто синтаксис немного другой — будет не сложно перестроиться.
                                  0
                                  Существуют онлайн конверторы из c# в vb.net и обратно. Они могут многое. Берёте любой пример на шарпе и скармливаете конвертеру.
                                    0
                                    Ничего себе, вот это да. Спасибо, буду знать
                                      +1
                                      Результат часто печальный, когда то занимался как раз приведением проекта в нормальный вид после конверсии из VB в C#.
                                    0
                                    Да, вы правы, я смотрю в сторону Java и C#.
                                    Пока не выбрал ещё, но спасибо за совет. Прислушаюсь
                                    0
                                    deleted

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

                                    Самое читаемое