- Dime, ¿te gusta viajar?
Estoy seguro de que responderá que sí, es poco probable que en otro caso preste atención a este artículo :)
- ¿Te interesa el tema del desarrollo móvil?
Aquí ya no estoy tan seguro, y espero no desanimar su interés en este artículo. En cualquier caso, habrá una serie de detalles técnicos que pueden ser un poco útiles para usted, pero no necesarios.
Lo sé, lo sé, holívar, pero qué hacer: discutiremos y daremos a luz verdades.
De una forma u otra, en esta desgarradora historia, estos temas se verán afectados, por lo que es hora de cerrar el artículo si espera algo más;) Sin embargo, intentaré escribir para que no solo haya detalles técnicos.
Entonces, un poco de historia
Como dije, me encanta viajar. Para mí, siempre es el impulso y las aventuras lo que quieres y esperas. Además, hace varios años intenté describir mis viajes en el formato de un ensayo, y me gustó. No es que me haya convertido en una especie de blogger popular, no, y no tenía ese objetivo. Pero hice una mosca para mí: gromozeka07b9.livejournal.com , al menos para mostrárselo a mis amigos. Al principio todo fue genial: me gustó, al regresar a casa pasé un par de días tratando de organizar todas mis aventuras en forma de historias interesantes. Pero, después de un tiempo, me di cuenta de que tenía tiempo de olvidar algunos de los eventos interesantes para cuando regresé, y decidí tomar notas en el viaje. En varios cuadernos electrónicos, notas, etc. Esto simplificó un poco la vida, pero aún así no era conveniente, como resultado, se dedicó mucho tiempo a reunir estas cosas en una historia. Hacer la historia en forma de canal en Telegram hizo la vida un poco más fácil, aunque con sus propios problemas.
El nacimiento de una idea
Al principio fue ... pizza. Una vez que nos sentamos con mi equipo en la pizzería Dodo Pizza, hablamos por la vida y gradualmente pasamos a discutir una pequeña startup que ayudaría a los turistas a encontrar lugares de interés, rutas interesantes, usar misiones e incluso encontrar alguna forma de monetización. Pero, en el proceso de discusión, gradualmente desarrollé una visión de otro producto, más bien, una herramienta para los viajeros que necesitan tanto una herramienta para un blog como una toma de notas centrada en el uso personal. Tenía dolor y vi una manera de resolverlo :)
Como resultado, surgió un concepto: para empezar, esta es una aplicación móvil que le permite crear rutas sin conexión, marcar puntos, agregar una descripción, fotos, compartirla con otros usuarios de la aplicación, así como también en el exterior, a varios Livejournal, Instagram, Facebook, etc. . Debería ser posible trabajar con precisión sin conexión, ya que los viajes no siempre tienen lugar donde hay una red, pero al mismo tiempo debería ser posible sincronizar los datos con las nubes. Incluso se inventó el nombre de trabajo: QuestHelper.
Este fue un programa mínimo. Además, había otro punto que me interesaba. Estaba interesado en el desarrollo móvil y realmente quería intentar hacer un producto real en una nueva plataforma.
En realidad, todos estos pensamientos me vinieron a la mente una noche y al día siguiente comenzamos a trabajar.
Unas palabras sobre el equipoEl desarrollo está en mí.
Mi esposa Olga actuó como gerente de producto.
Diseño de mi hijo Klim.
Y consejos invaluables de la consejera-hija Veronica :)
A los negocios!
Al día siguiente, los pensamientos sobre la aplicación no me dejaron. Los diseños de la interfaz ya están dibujados en la cabeza y las características se cortan. La realidad era, por supuesto, más complicada. Para formular al menos algo, pasamos varias horas formulando la funcionalidad básica en papel y visualizando los principios de navegación en la aplicación, estos borradores finalmente se transfirieron a fluidui.com para que pudiéramos experimentar con el diseño de la aplicación. Esta fue una decisión extremadamente correcta, que más tarde me permitió ahorrar mucho tiempo. No me interesa tanto el fluido, sino el hecho de que necesitas simular la interfaz.
El diseño me permitió plantear tareas específicas a nuestro diseñador y no explicar la funcionalidad de la aplicación en mis dedos, sino simplemente mostrar el diseño desde el cual todo esto está claro.
Mientras tanto, nació una nueva solución en Visual Studio basada en Xamarin.Forms - QuestHelper.
¿Por qué Xamarin? Si está interesado, mire debajo del gatoHonestamente, por mi parte, no veía alternativas entonces y no veo ahora. Tengo poca experiencia con Javascript y no deseo estudiar algo como React Native. Con el desarrollo nativo, es lo mismo: soy el único desarrollador en el proyecto, estudiar Java primero y luego Objective-C o Swift significa enterrar el proyecto, simplemente no tengo suficiente para eso.
Por lo tanto, comencé a buscar herramientas multiplataforma para el desarrollo móvil.
Ya tenía un poco de experiencia con Xamarin. Android: escribí un traductor que funcionaba como un chat, resultó bastante conveniente, todavía lo uso yo mismo:
Esto fue en 2016, cuando Xamarin incluso recibió un pago y causó grandes problemas, principalmente porque el proyecto se concibió originalmente solo como uno introductorio, sin ninguna monetización.
Alrededor del mismo período, Microsoft compra a Xamarin y lo libera, al menos para mi situación, lo que me alivia de un dolor de cabeza.
Como ya dije, originalmente planeé hacer un nuevo proyecto en Xamarin.Forms, al menos para familiarizarme con la tecnología y comprender la perspectiva. Aún así, es tentador tener un código ejecutándose en múltiples plataformas.
Si ha escuchado poco sobre Xamarin, la situación es la siguiente:
- Hay un enfoque Xamarin.Classic (o Xamarin.Native). El punto es que en este enfoque usted desarrolla una lógica comercial común en un proyecto (trabajar con bases de datos, servicios, etc.), y en proyectos individuales una IU nativa que usa un proyecto con esta lógica. En términos generales, en la solución VS tienes tres proyectos:
- BL (lógica de negocios común a todas las plataformas)
- Interfaz de usuario nativa de Android
- IU nativa de IO
- Xamarin.Forms Approach. En este enfoque, tiene un proyecto común no solo con la lógica empresarial, sino también con la interfaz de usuario. Esto impone sus limitaciones en la interfaz de usuario, se unifica para diferentes plataformas, pero le permite utilizar los mismos formularios descritos en XAML.
Palabra por palabra, línea por línea error por error .
Entonces, una especie de aplicación "hello world" nació en Xamarin.Forms, que al principio no podía hacer nada más que mostrar un mapa con puntos de una base de datos local. Gradualmente, el proyecto me fascinó cada vez más, porque no solo era la oportunidad de familiarizarme con la plataforma técnica, sino también el uso de prácticas de productos que le permiten tratar de pensar como el propietario del producto. En particular, fue una buena experiencia cuando mi equipo y mis amigos se reunieron para una pequeña reunión de coworking e intentaron crear un Mapa de viaje del cliente. No diré que todo salió bien como quería, pero obtuve muchas opiniones y pensamientos nuevos sobre el tema del desarrollo de productos. Al final resultó que, la gente en general no parecía dolores :)
¡Atención, contagioso!
Poco a poco, mi entusiasmo comenzó a transferirse al equipo.
Fue genial cuando, en lugar de ver algunas series, toda la familia se reunió en la cocina y dibujó CJM, pantallas de aplicaciones, consideró formas de monetización y formó una cartera de pedidos. En una de estas noches, no recuerdo a nadie, me vino a la mente el pensamiento: el nombre de QuestHelper es un poco aburrido y también está orientado a misiones en las que pensamos al principio. ¡Dale un nuevo nombre!
Pero, la práctica ha demostrado que no es tan simple. Pero, ¿qué pasa si se te ocurre un eslogan, tal vez también nos lleve a un nombre que sea más adecuado para un nuevo concepto?
Como resultado, en familia El consejo de comando decidió, en adelante, nuestro lema:
¡Así nació GoSh! (Cuando tenga un equipo de especialistas en marketing y gerentes de marca, definitivamente les daré la tarea de idear en qué parte de GoSh! Parte de "I live" :)
Luego apareció una versión del logotipo, basada en la idea del icono Compartir:

Primer uso práctico
Para agosto de 2018, tengo fiebre Estoy escribiendo un govnokod Estoy desarrollando funciones que me permitirán usar GoSh. en condiciones reales, en un viaje a Kamchatka. Lo más importante que necesitaba en ese momento era la capacidad de crear una ruta sin una red, marcar lugares de interés, agregar fotos y notas de texto a estos lugares.
El último compromiso antes de la salida se realizó un par de horas antes de partir hacia el aeropuerto. Fue ese otro disco! ¡Qué alegría y satisfacción cuando en la práctica usé lo que hice con mis propias manos! Durante las dos semanas del viaje, guardé notas en GoSh! y, lo que es más importante, me pareció muy conveniente. Por supuesto, no fue sin jambas: hubo muchos errores, y la primera experiencia práctica reponía la cartera de productos con nuevas características y una serie de errores. Por cierto, esta ruta ya está disponible en GoSh! - Puedes verlo por ti mismo.
Entonces, ¿qué es GoSh! tal y cómo puede ser útil para usted?
Ahora GoSh! es una aplicación móvil para la plataforma Android, que trabaja con servicios en la nube para la sincronización de datos. Las principales funciones de la aplicación son:
- Creación de ruta
- Marca de punto de ruta
- Agregar foto, audio, descripción de texto en el punto de ruta
- Reconocer texto de su grabación de audio a través de Yandex SpeechKit
- Importar puntos a una ruta desde Google Maps, mapas Yandex
- ¡La posibilidad de compartir la ruta con otros usuarios de GoSh!
- Autorización propia y a través de Google
- Sincronización completa de sus datos con almacenamiento en la nube
¡Esto solo le permite usar GoSh! para realizar notas de viaje.
Y, por cierto, me di cuenta de que prácticamente dejé de tomar fotos en un teléfono inteligente, ¡ahora solo tomo fotos a través de GoSh! Esto no es tanto publicidad como hablar de conveniencia para mí: estacioné el auto en algún lugar, marqué un punto en la ruta personal de "Estacionamiento", ahora no lo olvidaré :) O, por ejemplo, cuando visito reuniones o conferencias creo una ruta, por ejemplo, "Días ágiles" - en Desecho todo lo que me interesó en la conferencia, texto, audio, foto. Ahora no se perderán en un montón de otros materiales y, si lo desea, los compartiré con otros usuarios.
Es mejor ver una vez que escuchar cien vecesPantalla de descarga de la aplicación:

La primera pantalla de instrucciones de uso:

Ejemplo de lista de rutas:

Un ejemplo de una lista de waypoints:

Visualización de ruta:

Un ejemplo de visualización de un waypoint:

Entonces, ¿qué sigue?
Resolví parcialmente mi problema, pero tuve la idea de que tal vez la idea de una nota de viaje de este tipo sería interesante para otros, por lo que sería bueno tratar de descubrir qué necesitan las personas. Como ha demostrado la comunicación, no muchas personas están interesadas en tomar notas o crear rutas, en general fue interesante para las unidades en mi entorno. Y básicamente, la gente está interesada en hacer clic en la foto y ponerla en su acogedor instagram.
Por lo tanto, básicamente la cartera de pedidos ahora se basa en cosas sociales, como:
- Por supuesto, agregue la exportación de ruta a Facebook / Instagram / VK, etc.
- Agregue la capacidad de ver rutas no solo en GoSh! pero también a través de la galería en el sitio
- Añadir función a GoSh! buscar y ver rutas publicadas por otros usuarios
- Agregar comentarios y me gusta
- Localización: agregar una interfaz en inglés
- Quizás una funcionalidad de planificación de ruta más conveniente
¿Qué está pasando ahora?
Bueno, además del hecho de que decidí contarte un poco sobre el proyecto, en este momento nuestro diseñador permanente (mi hijo Klim) está desarrollando un aterrizaje en Tilda para que las personas puedan mostrar algo sin instalar la aplicación, además de un pequeño anuncio ciertamente no va a doler.
Así es como se ve el aterrizaje ahora: ¡ Aterrizaje GoSh!
No juzgues estrictamente, esta es nuestra primera experiencia :)
Planeo usar la misma página de destino para ver rutas, para aquellos que no quieren crearlas, pero solo miren, habrá una gran oportunidad. También ahora en el proceso de procesamiento de la pantalla del punto: después de varios meses de uso práctico, quedó claro que era inconveniente.
Entonces, ¿qué hemos aprendido durante el año?
El primero
Y lo más importante: debe haber alguien que "conduzca" el proyecto.
En este caso, soy yo. Cuando la energía se me escapa, ya nadie puede quedarse en casa en la esquina, todos se ven obligados a involucrarse :) Cuando me deja ir un poco, deja salir a todos. Y trabajamos con tales períodos de ascenso y descenso. Aunque estoy agradecido con mi familia por su ayuda, realmente sería muy difícil para uno. Periódicamente también sufro por el hecho de que no puedo dedicar más tiempo al proyecto, me falta estúpidamente el tiempo, aunque cuando trabajo en él, simplemente me drogo y disfruto. A veces me levanto a las 5 de la mañana, de modo que antes de las 8 de la mañana (es hora del trabajo principal) para hacer algo útil. Y unas vacaciones de 2 semanas en un lugar donde hay Internet: esta es una ocasión para lanzar una docena de comunicados nocturnos :) Cuando vea el resultado de su trabajo, y no se demore, pero ahora puede usarlo, cobra.
El segundo
La comprensión de esto ha llegado gradualmente. Al principio, teníamos ideas del nivel "naves espaciales aran las extensiones del Teatro Bolshoi". Poco a poco, comenzaron a aterrizar, y cuando apareció un producto mínimo que se podía "tocar", quedó claro lo difícil que era desarrollar el producto. Esto es realmente trabajo: descubrir las necesidades del mercado, el dolor de las personas, encontrar competidores, comprender cómo se diferencian de ellos y explicarlo a la audiencia ... Al final, interesar a las personas para que al menos instalen una aplicación para que la vean, y esto es un problema, incluso en el círculo íntimo de las personas, sin mencionar el hecho de que los extraños se ponen algo para sí mismos e incluso dan su opinión. Pero, de todos modos, gracias a muchos amigos y familiares que hicieron esto, sin ti, probablemente habría dejado todo hace mucho tiempo.
El tercero
A menudo escucho: "¿y qué? Tenías que hacer que el MVP fuera realmente mínimo y comprobarlo en público". Estoy de acuerdo Un "Pero": debe comprender claramente, pero ¿por qué, cuál es su objetivo? ¿Realmente quieres lanzar un producto popular, o tal vez quieres algo más? Y mi experiencia me mostró que al menos un año no pasé en lanzar un producto real, sino en conocer la plataforma tecnológica. Logré este objetivo, y ahora entiendo que sería bueno pensar en el desarrollo, de hecho, de un producto útil para las personas, y no en otra característica interesante solo para mí. En general, es hora de pensar no solo en ti, sino también en lo que necesitas :)
Cuarto.
Equipo Se necesitan personas de ideas afines de las que puedas aprender, tal vez puedas enseñar a alguien tú mismo. Al final, si es un buen equipo, se motivarán mutuamente para hacer algo. Y desde un punto de vista práctico, por ejemplo, a menudo me da vergüenza mirar mi código :) Al principio hubo pruebas, y el código intentó escribir de manera más o menos precisa, pero, debido al hecho de que el tiempo era justo, las pruebas volaron primero, y en la calidad del código comenzó a martillar. Si hubiera más desarrolladores en el equipo, estas otmazas no habrían funcionado :) Y, por supuesto, el equipo, estas son nuevas ideas, nuevas opiniones sobre las soluciones.
Detalles técnicos
Sin filosofía, todo sobre el caso.Entonces, C #, Visual Studio 2017, Xamarin Forms.
Desarrollo en PC (en casa) y Macbook (en movimiento), en un estudio poppy.
Por el momento, solo el ensamblado para Android está disponible públicamente en Google Play. Para el iPhone, hice ensamblajes al principio, pero ahora tiré esta idea: no hay tiempo para dividir la atención entre las dos plataformas, porque de todos modos, todavía tienes que ajustar la interfaz de usuario, además de usar controles nativos en algunos casos, por ejemplo , trabaje con la tarjeta y, de hecho, habrá que hacer lo mismo para el iPhone.
Utilizo el proyecto Realm como almacenamiento local (utilicé SqlLite en Translate Helper, no puedo decir nada malo: Realm apareció por curiosidad más que por necesidad práctica).
En cuanto al servidor. El servidor almacena todas las rutas y archivos multimedia que usa el usuario cuando trabaja en GoSh! , esto es necesario, al menos para, en principio, poder compartir rutas. El servidor está escrito en .Net Core, inicialmente alojado en Azure, mientras tenía una suscripción a BizSpark, pero, hace un par de meses, la suscripción finalizó y me mudé a Linux Hosting en reg.ru, ya que prácticamente no había nada que reescribir. Los profesionales, que aumentaron enormemente la velocidad de acceso a los datos, y los menos, perdieron la capacidad de usar Application Insigths. La base de datos en el servidor es MySQL.
Y cuántas rutas de sincronización borrachas ... ahora su tercera versión ya está funcionando, y creo que habrá una cuarta, ya hay pensamientos sobre la optimización y las nuevas características.
Las estadísticas de rendimiento de la aplicación caen en appcenter.ms, ya que es gratis para mi nivel. Es muy conveniente ver errores y estadísticas sobre las acciones del usuario en tiempo casi real.
Quizás esto sea todo en tecnología, si algo es interesante, pregunte en los comentarios, le diré.
Lo que me gustaría contarte al final.
Estoy seguro de que esta historia no está terminada.
Me gusta lo que hago, ¡espero que a ti también te guste! Aunque entiendo perfectamente bien, muchos de ustedes que instalen la aplicación encontrarán errores, inconsistencias y algún inconveniente en la interfaz; sí, desafortunadamente, todo esto está ahí, de hecho, el proyecto aún no ha salido de MVP.
Amigos, me alegrará escuchar su opinión, tal vez incluso historias sobre sus preocupaciones de viaje, para lo cual, tal vez, tarde o temprano encontraré una solución :)
Y si también agrega su opinión en Google Play , ¡sí, lo abrazaré! :)
, , — , , Xamarin. , , , , — , - !
: Facebook
UPDATE ( ):
, !
, , , , ! ! , , , , . , . , , , — , , . , , , , : -. ? "" — . "" — . — , . , — . :)