- Dis-moi, tu aimes voyager?
Je suis sûr que vous répondrez oui, il est peu probable que dans un autre cas vous fassiez attention à cet article :)
- Ătes-vous intĂ©ressĂ© par le thĂšme du dĂ©veloppement mobile?
Ici, je n'en suis plus si sĂ»r et j'espĂšre que je ne dĂ©couragerai pas votre intĂ©rĂȘt pour cet article. Dans tous les cas, il y aura un certain nombre de dĂ©tails techniques qui peuvent vous ĂȘtre un peu utiles, mais pas nĂ©cessaires.
Je sais, je sais, holivar, mais que faire - nous discuterons et donnerons naissance à des vérités.
D'une maniÚre ou d'une autre, dans cette histoire déchirante, ces sujets seront affectés, il est donc temps de fermer l'article si vous vous attendez à autre chose;) Bien que, j'essaierai d'écrire pour qu'il n'y ait pas que des détails techniques.
Donc, un peu d'histoire
Comme je l'ai dit, j'adore voyager. Pour moi, c'est toujours le dynamisme et les aventures que vous voulez et attendez. De plus, il y a plusieurs années, j'ai essayé de décrire mes voyages sous la forme d'un essai, et j'ai bien aimé. Non pas que je sois devenu une sorte de blogueur populaire - non, et je n'avais pas un tel objectif. Mais j'ai fait une mouche pour moi - gromozeka07b9.livejournal.com , au moins pour montrer à mes amis. Tout était super, au début - j'ai bien aimé, en rentrant chez moi j'ai passé quelques jours à essayer d'organiser toutes mes aventures sous forme d'histoires intéressantes. Mais, aprÚs un certain temps, j'ai réalisé que j'avais juste le temps d'oublier certains des événements intéressants au moment de mon retour, et j'ai décidé de prendre des notes tout au long du voyage. Dans divers cahiers électroniques, notes, etc. Cela simplifiait un peu la vie, mais ce n'était toujours pas pratique, en conséquence, beaucoup de temps était encore consacré à assembler ces trucs dans une histoire. Faire l'histoire sous la forme d'une chaßne dans Telegram a rendu la vie un peu plus facile, mais avec ses propres problÚmes.
La naissance d'une idée
Au dĂ©but c'Ă©tait ... de la pizza. Une fois que nous sommes assis avec mon Ă©quipe Ă la pizzeria Dodo Pizza, parlons pour la vie et passons progressivement Ă discuter d'une petite startup qui aiderait les touristes Ă trouver des sites, des itinĂ©raires intĂ©ressants, Ă utiliser des quĂȘtes, voire Ă trouver une forme de monĂ©tisation. Mais, au cours de la discussion, j'ai progressivement dĂ©veloppĂ© une vision d'un autre produit - plutĂŽt, un outil pour les voyageurs qui ont besoin Ă la fois d'un outil pour un blog et d'une prise de notes axĂ©e sur un usage personnel. J'ai eu mal et j'ai vu un moyen de le rĂ©soudre :)
En consĂ©quence, un concept a Ă©mergĂ© - pour commencer, il s'agit d'une application mobile qui vous permet de crĂ©er des itinĂ©raires hors ligne, de marquer des points, d'ajouter une description, des photos, de la partager avec d'autres utilisateurs de l'application, ainsi qu'Ă l'extĂ©rieur - Ă divers Livejournal, Instagram, Facebook, etc. . Il devrait ĂȘtre possible de travailler prĂ©cisĂ©ment hors ligne, car les dĂ©placements n'ont pas toujours lieu lĂ oĂč il y a un rĂ©seau, mais en mĂȘme temps, il devrait ĂȘtre possible de synchroniser les donnĂ©es avec les nuages. MĂȘme le nom de travail a Ă©tĂ© inventĂ© - QuestHelper.
C'était un programme minimum. De plus, il y avait un autre point qui m'intéressait. Je m'intéressais au développement mobile et je voulais vraiment essayer de faire un vrai produit sur une nouvelle plateforme.
En fait, toutes ces pensées me sont venues à l'esprit un soir et le lendemain, nous avons commencé à travailler.
Quelques mots sur l'équipeLe développement est sur moi.
Ma femme Olga a agi en tant que chef de produit.
Design de mon fils Klim.
Et les précieux conseils de Veronica, la conseillÚre-fille :)
Pour les affaires!
Le lendemain, les rĂ©flexions sur l'application ne m'ont pas quittĂ©. Les dispositions d'interface sont dĂ©jĂ dessinĂ©es dans la tĂȘte et les fonctions sont sciĂ©es. La rĂ©alitĂ© Ă©tait, bien sĂ»r, plus compliquĂ©e. Afin de formuler au moins quelque chose, nous avons passĂ© plusieurs heures Ă formuler les fonctionnalitĂ©s de base sur papier et Ă visualiser les principes de navigation dans l'application, ces brouillons ont finalement Ă©tĂ© transfĂ©rĂ©s sur fluidui.com afin que nous puissions expĂ©rimenter la mise en page de l'application. Ce fut une dĂ©cision extrĂȘmement correcte, qui m'a par la suite permis de gagner beaucoup de temps - je ne suis pas tellement sur le fluide, mais sur le fait que vous devez prototyper l'interface.
La mise en page m'a permis de poser des tùches spécifiques à notre concepteur et de ne pas expliquer la fonctionnalité de l'application sur mes doigts, mais simplement de montrer la mise en page à partir de laquelle tout cela est clair.
Pendant ce temps, une nouvelle solution est née dans Visual Studio basée sur Xamarin.Forms - QuestHelper.
Pourquoi Xamarin? Si vous ĂȘtes intĂ©ressĂ©, regardez sous le chatHonnĂȘtement, pour moi, je n'ai pas vu d'alternatives Ă l'Ă©poque et je ne vois pas maintenant. J'ai peu d'expĂ©rience avec Javascript et je n'ai aucune envie d'Ă©tudier quelque chose comme React Native. Avec le dĂ©veloppement natif, c'est la mĂȘme chose - je suis le seul dĂ©veloppeur du projet, Ă Ă©tudier d'abord Java puis Objective-C ou Swift pour enterrer le projet, je n'en ai tout simplement pas assez.
Par conséquent, j'ai commencé à regarder vers des outils multiplateformes pour le développement mobile.
J'avais dĂ©jĂ un peu d'expĂ©rience avec Xamarin.Android - J'ai Ă©crit un traducteur qui fonctionnait comme un chat, cela s'est avĂ©rĂ© assez pratique, je l'utilise toujours moi-mĂȘme:
C'Ă©tait en 2016, lorsque Xamarin Ă©tait mĂȘme payĂ© et cela a causĂ© de gros problĂšmes, principalement parce que le projet n'Ă©tait initialement conçu que comme un projet d'introduction, sans aucune monĂ©tisation.
Vers la mĂȘme pĂ©riode, Microsoft achĂšte Xamarin et le rend gratuit, au moins pour mon scĂ©nario, ce qui me soulage d'un mal de tĂȘte.
Comme je l'ai déjà dit, j'avais initialement prévu de faire un nouveau projet sur Xamarin.Forms, au moins pour me familiariser avec la technologie et comprendre la perspective. Pourtant, il est tentant d'avoir un code en cours d'exécution sur plusieurs plates-formes.
Si vous avez peu entendu parler de Xamarin, la situation est la suivante:
- Il existe une approche Xamarin.Classic (ou Xamarin.Native). Le fait est que dans cette approche, vous développez une logique métier commune dans un projet (travail avec des bases de données, des services, etc.), et dans des projets individuels une interface utilisateur native qui utilise un projet avec cette logique. En gros, dans la solution VS, vous avez trois projets:
- BL (logique métier commune à toutes les plateformes)
- Interface utilisateur Android native
- Interface utilisateur native iOs
- Approche Xamarin.Forms. Dans cette approche, vous avez un projet commun non seulement avec la logique mĂ©tier, mais aussi l'interface utilisateur. Cela impose ses limites Ă l'interface utilisateur, il devient unifiĂ© pour diffĂ©rentes plates-formes, mais vous permet d'utiliser les mĂȘmes formes dĂ©crites dans XAML.
Mot par mot, ligne par ligne bug par bug .
Ainsi, une sorte d'application "hello world" est née sur Xamarin.Forms, qui au début ne pouvait rien faire d'autre que d'afficher une carte avec des points d'une base de données locale. Peu à peu, le projet m'a de plus en plus fasciné - car ce n'était pas seulement l'occasion de se familiariser avec la plateforme technique, mais aussi l'utilisation de pratiques produit qui vous permettent d'essayer de penser en tant que propriétaire du produit. En particulier, ce fut une bonne expérience lorsque mon équipe et mes amis se sont réunis pour une petite réunion de coworking et ont essayé de créer une carte de parcours client. Je ne dirai pas que tout s'est déroulé comme je le voulais, mais j'ai eu beaucoup de nouvelles opinions et réflexions sur le thÚme du développement de produits. En fait, les gens en général ne ressemblaient pas à des douleurs :)
Attention, contagieux!
Petit à petit, mon enthousiasme a commencé à se transmettre à l'équipe.
C'Ă©tait gĂ©nial quand, au lieu de regarder certaines sĂ©ries, toute la famille s'est rĂ©unie dans la cuisine et a dessinĂ© CJM, des Ă©crans d'application, rĂ©flĂ©chi Ă des moyens de monĂ©tisation et formĂ© un arriĂ©rĂ©. Lors de l'une de ces soirĂ©es, je ne me souviens de personne, la pensĂ©e m'est venue Ă l'esprit - le nom de QuestHelper est un peu ennuyeux, et Ă©galement axĂ© sur les quĂȘtes auxquelles nous avons pensĂ© au tout dĂ©but. Donnez un nouveau nom!
Mais, la pratique a montrĂ© que ce n'est pas si simple. Mais que se passe-t-il si vous arrivez avec un slogan - peut-ĂȘtre cela nous conduira-t-il Ă©galement Ă un nom qui convient mieux Ă un nouveau concept?
En conséquence, le famille Le conseil de commandement décide désormais de notre slogan:
- Je pars.
- Je partage.
- Je vis.
C'est ainsi que GoSh est nĂ© ! (Quand j'ai une Ă©quipe de spĂ©cialistes du marketing et de chefs de marque, je leur donnerai certainement la tĂąche de trouver oĂč dans GoSh! Une partie de "Je vis" :)
Puis une version du logo est apparue, basée sur l'idée de l'icÎne Partager:

PremiĂšre utilisation pratique
En aoĂ»t 2018, je suis fiĂ©vreusement J'Ă©cris un govnokod Je dĂ©veloppe des fonctionnalitĂ©s qui me permettront d'utiliser GoSh! en conditions rĂ©elles, lors d'un voyage au Kamchatka. La chose la plus importante dont j'avais besoin Ă l'Ă©poque Ă©tait la possibilitĂ© de crĂ©er un itinĂ©raire sans rĂ©seau, de marquer des lieux d'intĂ©rĂȘt, d'ajouter des photos et des notes de texte Ă ces endroits.
Le dernier engagement avant le dĂ©part a Ă©tĂ© effectuĂ© quelques heures avant le dĂ©part pour l'aĂ©roport. C'Ă©tait ce dernier disque! Quelle joie et quelle satisfaction quand en pratique j'ai utilisĂ© ce que j'ai fait de mes propres mains! Toutes les deux semaines du voyage, j'ai pris des notes dans GoSh! , et surtout, cela m'a semblĂ© trĂšs pratique. Bien sĂ»r, il y avait des montants - il y avait beaucoup d'erreurs, et la premiĂšre expĂ©rience pratique a ajoutĂ© au backlog du produit avec de nouvelles fonctionnalitĂ©s et un tas de bugs. Soit dit en passant, cet itinĂ©raire est dĂ©sormais disponible dans GoSh! - Vous pouvez voir par vous-mĂȘme.
Alors qu'est-ce que GoSh! tels et comment peuvent-ils vous ĂȘtre utiles?
Maintenant GoSh! est une application mobile pour la plate-forme Android, fonctionnant avec des services cloud pour la synchronisation des données. Les principales fonctions de l'application sont:
- Création d'itinéraire
- Marque de point de route
- Ajout d'une description photo, audio et texte au point de l'itinéraire
- ReconnaĂźtre le texte de votre enregistrement audio via Yandex SpeechKit
- Importez des points dans un itinéraire à partir de Google Maps, Yandex maps
- La possibilité de partager l'itinéraire avec d'autres utilisateurs GoSh!
- Autorisation propre et via Google
- Synchronisation complÚte de vos données avec le stockage cloud
Cela seul vous permet d'utiliser GoSh! pour effectuer des notes de voyage.
Et, en passant, j'ai remarquĂ© aprĂšs moi-mĂȘme que j'avais pratiquement arrĂȘtĂ© de prendre des photos sur un smartphone - je ne prends maintenant des photos que via GoSh! Ce n'est pas tant de la publicitĂ© que je parle de commoditĂ© pour moi-mĂȘme - j'ai garĂ© la voiture quelque part, j'ai marquĂ© un point dans l'itinĂ©raire personnel de "Parking", maintenant je n'oublierai pas :) Ou, par exemple - lorsque je visite des rĂ©unions ou des confĂ©rences, je crĂ©e un itinĂ©raire, par exemple, "Agile days" - dans Je jette tout ce qui m'intĂ©ressait lors de la confĂ©rence, texte, audio, photo. Maintenant, ils ne seront pas perdus dans un tas d'autres matĂ©riaux, et si vous le souhaitez, je les partagerai avec d'autres utilisateurs.
Mieux vaut voir une fois qu'entendre cent foisĂcran de tĂ©lĂ©chargement d'application:

Le premier écran d'instructions d'utilisation:

Exemple de liste de routes:

Un exemple de liste de waypoints:

Visualisation de l'itinéraire:

Un exemple d'affichage d'un waypoint:

Et maintenant?
J'ai partiellement rĂ©solu mon problĂšme, mais j'ai eu l'idĂ©e que peut-ĂȘtre l'idĂ©e d'un tel carnet de voyage serait intĂ©ressante pour les autres, donc ce serait bien d'essayer de comprendre ce dont les gens ont besoin. Comme la communication l'a montrĂ©, peu de gens sont intĂ©ressĂ©s Ă prendre des notes ou Ă crĂ©er des itinĂ©raires, c'Ă©tait gĂ©nĂ©ralement intĂ©ressant pour les unitĂ©s de mon environnement. Et fondamentalement, les gens sont intĂ©ressĂ©s Ă cliquer sur la photo et Ă les mettre dans leur confortable instagram.
Par conséquent, l'arriéré est essentiellement construit sur des éléments sociaux, tels que:
- Bien sûr, ajoutez l'exportation des itinéraires vers Facebook / Instagram / VK, etc.
- Ajoutez la possibilité d'afficher les itinéraires non seulement dans GoSh! mais aussi à travers la galerie du site
- Ajoutez une fonctionnalité à GoSh! rechercher et afficher les itinéraires publiés par d'autres utilisateurs
- Ajouter des commentaires et des mentions J'aime
- Localisation - ajout d'une interface en anglais
- Peut-ĂȘtre une fonctionnalitĂ© de planification d'itinĂ©raire plus pratique
Que se passe-t-il en ce moment?
Eh bien, en plus du fait que j'ai décidé de vous parler un peu du projet, notre designer permanent (mon fils Klim) développe actuellement un atterrissage sur Tilda afin que les gens puissent montrer quelque chose sans installer l'application, et une petite publicité ne fera certainement pas de mal.
Voici Ă quoi ressemble l'atterrissage: Landing GoSh!
Ne jugez pas strictement, c'est notre premiÚre expérience :)
Je prĂ©vois d'utiliser la mĂȘme page de destination pour visualiser les itinĂ©raires, pour ceux qui ne veulent pas les crĂ©er, mais regardez simplement - il y aura une telle opportunitĂ©. Ăgalement maintenant en train de traiter l'Ă©cran du point - aprĂšs plusieurs mois d'utilisation pratique, il est devenu clair qu'il n'Ă©tait pas pratique.
Alors qu'avons-nous appris au cours de l'année?
Le premier.
Et le plus important - il doit y avoir quelqu'un qui «pilotera» le projet.
Dans ce cas, c'est moi. Quand l'Ă©nergie jaillit de moi, plus personne ne peut rester Ă la maison dans le coin, tout le monde est obligĂ© de s'impliquer :) Quand il me laisse partir un peu, il laisse tout le monde sortir. Et nous travaillons avec de telles pĂ©riodes de montĂ©e et de descente. Bien que je sois reconnaissant Ă ma famille pour son aide - vraiment, ce serait vraiment difficile pour quelqu'un. Je souffre aussi pĂ©riodiquement du fait que je ne peux pas consacrer plus de temps au projet, je nâai pas assez de temps, bien que lorsque je travaille dessus, je prends de la hauteur et je lâapprĂ©cie. Parfois, je me lĂšve Ă 5 heures du matin, de sorte qu'avant 8 heures du matin (il est temps pour le travail principal) de faire quelque chose d'utile Ă faire. Et des vacances de 2 semaines dans un endroit oĂč il y a Internet - c'est l'occasion de sortir une dizaine de sorties nocturnes :) Quand vous voyez le rĂ©sultat de votre travail, et non pas retardĂ©, mais en ce moment vous pouvez l'utiliser - ça charge.
Le deuxiĂšme.
La comprĂ©hension de cela est venue progressivement. Au dĂ©but, nous avions des idĂ©es sur le niveau «les vaisseaux spatiaux labourent les Ă©tendues du Théùtre du Bolchoï». Peu Ă peu, ils ont commencĂ© Ă atterrir, et lorsqu'un produit minimal est apparu que vous pouviez «toucher» - il est devenu clair Ă quel point il Ă©tait difficile de dĂ©velopper le produit. C'est vraiment du travail - dĂ©couvrir les besoins du marchĂ©, la douleur des gens, trouver des concurrents, comprendre comment vous vous diffĂ©renciez d'eux et l'expliquer au public ... En fin de compte, incitez les gens Ă installer au moins une application pour la regarder - et c'est un problĂšme, mĂȘme dans le cercle restreint des gens, sans parler du fait que des Ă©trangers se mettent quelque chose en eux-mĂȘmes et donnent mĂȘme leur avis. Mais, de toute façon, grĂące Ă de nombreux amis et parents qui l'ont fait, sans vous, j'aurais probablement tout quittĂ© il y a longtemps.
Le troisiĂšme.
J'entends souvent - "alors quoi, vous avez dĂ» rendre le MVP vraiment minimal et vĂ©rifier en public." Je suis d'accord. Un "Mais" - vous devez comprendre clairement, mais pourquoi, quel est votre objectif? Voulez-vous vraiment sortir un produit populaire, ou peut-ĂȘtre voulez-vous autre chose? Et mon expĂ©rience m'a montrĂ© qu'au moins un an j'ai passĂ© non pas Ă sortir un vrai produit, mais Ă dĂ©couvrir la plateforme technologique. J'ai atteint cet objectif, et maintenant on comprend qu'il serait bien de penser au dĂ©veloppement, en fait, d'un produit utile aux gens, et non Ă une autre fonctionnalitĂ© intĂ©ressante seulement pour moi. En gĂ©nĂ©ral, il est temps de penser non seulement Ă vous-mĂȘme, mais aussi Ă ce dont vous avez besoin :)
QuatriĂšmement.
Ăquipe Nous avons besoin de personnes partageant les mĂȘmes idĂ©es et dont vous pouvez apprendre, peut-ĂȘtre que vous pouvez enseigner Ă quelqu'un vous-mĂȘme. En fin de compte, si une bonne Ă©quipe - vous vous motiverez mutuellement Ă faire quelque chose. Et d'un point de vue pratique - par exemple, j'ai souvent honte de regarder mon code :) Au dĂ©but, il y avait des tests, et le code a essayĂ© d'Ă©crire plus ou moins prĂ©cisĂ©ment, mais, Ă©tant donnĂ© que le moment Ă©tait venu, les tests ont volĂ© en premier, et sur la qualitĂ© du code a commencĂ© Ă marteler. S'il y avait plus de dĂ©veloppeurs dans l'Ă©quipe, ces otmazas n'auraient pas fonctionnĂ© :) Et bien sĂ»r - l'Ă©quipe, ce sont de nouvelles idĂ©es, de nouvelles vues sur les solutions.
Détails techniques
Pas de philosophie, tout sur l'affaireDonc, C #, Visual Studio 2017, Xamarin Forms.
Développement sur PC (à la maison) et Macbook (en déplacement), dans un studio de pavot.
Pour le moment, seul l'assemblage pour Android est accessible au public dans Google Play. Pour l'iPhone, j'ai fait des assemblages au dĂ©but, mais maintenant j'ai jetĂ© cette idĂ©e - il n'y a pas de temps pour diviser l'attention en deux plates-formes, de toute façon, vous devez toujours ajuster l'interface utilisateur, plus vous utilisez des contrĂŽles natifs dans certains cas - par exemple , travailler avec la carte, et en fait la mĂȘme chose devra ĂȘtre faite pour l'iPhone.
J'utilise le projet Realm comme stockage local (j'ai utilisé SqlLite sur Translate Helper, je ne peux rien dire de mal - Realm est apparu par curiosité plutÎt que par nécessité pratique).
Quant au serveur. Le serveur stocke tous les itinéraires et fichiers multimédias que l'utilisateur utilise lorsqu'il travaille dans GoSh! , cela est nécessaire, au moins pour, en principe, pouvoir partager des itinéraires. Le serveur est écrit en .Net Core, initialement hébergé dans Azure, alors que j'avais un abonnement BizSpark, mais, il y a quelques mois, l'abonnement a pris fin, et je suis passé à l'hébergement Linux dans reg.ru, car il n'y avait pratiquement rien à réécrire. Des pros - une augmentation considérable de la vitesse d'accÚs aux données, et des inconvénients - ont perdu la possibilité d'utiliser Application Insigths. La base de données sur le serveur est MySQL.
Et combien de synchronisations de routes bues ... maintenant sa troisiÚme version fonctionne déjà , et je crois qu'il y en aura une quatriÚme, il y a déjà des réflexions sur l'optimisation et les nouvelles fonctionnalités.
Les statistiques de performances de lâapplication tombent toutes dans appcenter.ms, car elles sont gratuites pour mon niveau. Il est trĂšs pratique de voir les erreurs et les statistiques sur les actions des utilisateurs en temps quasi rĂ©el.
Peut-ĂȘtre que tout est dans la technologie, si quelque chose est intĂ©ressant - demandez dans les commentaires, je le dirai.
Ce que je voudrais vous dire Ă la fin.
Je suis sûr que cette histoire n'est pas terminée.
J'aime ce que je fais, j'espÚre que vous l'aimerez aussi! Bien que je comprenne parfaitement bien, beaucoup d'entre vous qui installez l'application rencontreront des erreurs, des incohérences et des inconvénients quelque part pour l'interface - oui, malheureusement, tout cela est là , en fait, le projet n'a pas encore rampé hors de MVP.
Mes amis, je serai heureux d'entendre votre avis, peut-ĂȘtre mĂȘme des histoires sur vos prĂ©occupations de voyage, pour lesquelles, peut-ĂȘtre, tĂŽt ou tard, je trouverai une solution :)
Et si vous ajoutez également votre opinion sur Google Play - oui, je vous embrasse! :)
, , â , , Xamarin. , , , , â , - !
: Facebook
UPDATE ( ):
, !
, , , , ! ! , , , , . , . , , , â , , . , , , , : -. ? "" â . "" â . â , . , â . :)