wfranck
wfranck
wfranck
125 posts
programador web/mobile - banking. Analisis de Sistemas de Computación - Adm. de Cooperativas y Mutuales - estudié lic.en Informática @wfranck #nardoz
Don't wanna be here? Send us removal request.
wfranck · 1 year ago
Photo
Tumblr media
I made a flow chart, that we might better understand.
Once upon a time I was falling in love, and now I’m only falling apart.
4K notes · View notes
wfranck · 5 years ago
Photo
Tumblr media
3K notes · View notes
wfranck · 5 years ago
Quote
The 'lateinit' keyword promises the Kotlin compiler that the variable will be initialized before the code calls any operations on it. lateinit var image : ImageView
Android Kotlin Fundamentals 01.3
1 note · View note
wfranck · 6 years ago
Text
Empezando con Kotlin
Como hago hace tiempo, la mejor manera de aprender es leer, practicar y explicar a otros.. es la mejor manera de aprender. Así que se vienen una serie de post sobre Kotlin server-side applications y con Android.
Kotlin es moderno, tipado estático y lo que siempre muestran para promocionarlo es que corrige varios problemas de Java como null pointer exceptions o la cantidad de código que hay que excribir. Está inspirado por Swift, Scala, Groovy, C#, etc. Fue diseñado por JetBrains.
Kotlin intena no repetir los errores de otros lenguajes y brindar las ventajas que ofrecen otros (creo que al principio todos los lenguajes prometen lo mismo hasta que quedan viejos).
No es un lenguaje tan nuevo como parece, pero tomó impulso desde 2017 cuando Google anunció el soporte oficial.
No voy a repetir que intenta ser mejores a otros lenguajes modernos, quizás destacar la flexibilidad que ofrese al ser transparente para integrarse a proyectos Java desde JDK 6 y, es Opensourse.
Quizás es destacable destacar que su sintaxis es de fácil lectura y para un programador Java migrar es bastante fácil. Al principio un desarrollador suele escribir código Kotlin con hábitos de Java, pero con el tiempo cambia.
Ejemplos:
var name = “Walter”   // se infiere el tipo String
      name = “Javier”
var name = “Walter”  
      name = 2              // error de compilación porque es de tipo String
val name = “Walter”
      println(”Mi nombre es $name”)
      //imprime: Mi nombre es Walter
val name = “Walter”
      println(”Mi nombre es ${name.toUpperCase()}”)
      //imprime: Mi nombre es WALTER
En Java cualquier variable puede guardar valor null, pero Kotlin nos fuerza declararlo por ser un lenguaje null safety.
var a: String = “abc”
      a = null                    //error de compilación
var b: String? = “abc”
      b = null                    //con el signo ? compila bien!
Así mismo podemos declarar métodos para que no puedan ser invocados con valores nulos y evitar los tan temidos null pointer exceptions. En vaso que llegue un valor nulo la llamada es ignorada.
variable?.hacerAlgo
Kotlin tiene varios nuevos tipos, por ejemplo Range.
for  ( i  in  1..10 )  {
            print ( i )
       }    // 12345678910
Introduce un nuevo tipo Pair que combinada con una notación infix (para guardar variables con valores “pares”:
val   capitol = “Argentina” to “Buenos Aires”
        println(capitol.first)         // Imprime: Argentina
        println(capitol.second)   // Imprime: Buenos Aires
Se puede usar declaraciones deconstructivas:
val    (country, city)  = capitol
         println(country)   // Imprime: Argentina
         println(city)         // Imprime: Buenos Aires
Incluso iterar en una lista de pares:
val    capitols  =  listOf ( “Argentina” to “Buenos Aires” , “Uruguay” to “Montevideo” )
         for  ( ( country, city)  in capitols) {
                println ( “La capital de $country es $city” )
                }
//Imprime:
//  La capital de Argentina es Buenos Aires
//  La capital de Uruguay es Montevideo
ó podríamos haber usado foreach:
val    capitols  =  listOf ( “Argentina” to “Buenos Aires” , “Uruguay” to “Montevideo” )
        capitols.foreach { (  country,  city) ->
                  println(”La Capital de $country es $ciudad” )
        }
Vea que Kotlin distingue entre colecciones mutables a inmutables (List vs MutableList, Set vs MutableSet, Map vs MutableMap, y así....)
val   list = listOf(1, 2, 3, 4, 5, 6)                                //Infiere una List
val   mutableList  = mutableListOf(1, 2, 3, 4, 5, 6)  //Infiere una MutableList
Definición de una función:
fun  sum ( a: Int, b: Int) = a + b
       println ( sum( 2 + 4 ) )   // Imprime: 6
Podemos asignar valores por defecto cuando definimos una variable:
var b: Int = 10
en el caso que utilicemos esas variables como parámetros y haya algunos parámetros que no tengan valor por defecto, debemos invocar a la función sin omitir variables que no tengan valor previamente asignado.
Así los primeros parámetros deberían ser “obligatorios” y el resto asignar valores en la declaración de la función, para que en la invocación no necesitemos escribir el resto y sólo los primeros parámetros.
Para definir clases, debemos usar el modificador data:
data  class  Pelota ( var  size: Int,  val color: String)
         val pelota = Pelota ( 12, “roja” )
         println ( pelota )      //Imprime:  Pelota ( size= 12, color= Roja )
Ahora vemos cómo creamos nuevas clases sin new y lo fácil que copiamos instancias de clase:
val  pelota = Pelota ( 12, “Roja” )
       println ( pelota)                      // Imprime  Pelota ( size= 12, color= Roja )
       val  pelotaPequeña = pelota.copy ( size = 3)
       println ( pelotaPequeña)       // Imprime  Pelota ( size= 3, color= Roja )
       pelotaPequeña.size++
       println ( pelotaPequeña)       // Imprime  Pelota ( size= 4, color= Roja )
       println ( pelota)                      // Imprime  Pelota ( size= 12, color= Roja )
Una de las mejores características en Kotlin son las extensions que nos permiten agregar comportamientos (métodos o propiedades) a clases existentes sin cambiar su implementación. A veces cuando trabajamos con librerías o un framework, necesitamos tener métodos o propiedades extra para algunas clases. Las extensions reducen la verbosidad y quita la necesidad de usar funciones propias de Java (como la clase StringUtils). Muy facil podemos definir extensiones para clases customizadas, librerías de terceros o frameworks (por ej. en Android), en el caso que queramos extender cierta funcionalidad no disponible en la definición básica.
Las Interfaces pueden tener implementación por defecto, siendo que no mantienen estado:
interface DatosBasicos {
            val  email: String
            val  name: String
            get( ) = email.subtringBewfore(”@”)
     }
Kotlin Playground
La forma más rápida de probar Kotlin es Kotlin Playground https://try.kotlinglang.org . Seleccionando la pestaña podemos correr código usando implementaciones Kotlin para JavaScript o JVM (arriba a la derecha) o cambiando entre diferentes versiones de Kotlin (debajo a la derecha).
Tumblr media
La función main es el punto de inicio de una aplicación. Así que para que funcionen todos los ejemplos, deberíamos copiarlos allí adentro.
Kotlin a bajo nivel en Android
Enfocado en Android, pero sabiendo que lo podemos compilar en múltiples plataformas, Kotlin puede compilarse a Java bitecode y luego a Dalvik. Así se generarán archivos con extensión .java .kt .class .dex .apk
Así en proyectos que utilicen java y kotlin, el merge se hará en los archivos (o a nivel de) class.
En algunos casos se hace mensión a Kotlin stantard library (stdlib) que al principio era parte de un archivo aparte, pero desde la versión 1.2 viene incluida por default, y añade las funcionalidades esenciales del lenguaje.
1 note · View note
wfranck · 8 years ago
Text
a nosotros qué nos queda?
Tumblr media
En 2016, exámenes de universidad me impidieron asistir al evento y, ahora: porqué no? no hay excusas. Ciertamente las expectativas eran distintas. A un año de su liberación Genexus 15 es estable y aún hay camino por recorrer hasta Genexus M. Entonces: qué puedo esperar ahora? Realmente no sé. Genexus es algo más que un release.
Entonces el domingo crucé ‘el charco’ hacia Montevideo para conocer sólo algunos de los puntos históricos y su rambla. Calles desoladas debido al clima, plazas de la capital de un país donde encontrabas apenas 2 o 3 personas, y no fue hasta pasada la tarde que empezaron a asomar uruguayos con el termo bajo el brazo. La lluvia no fue obstáculo para hacer casi 19km a pie y a la tardecita una tortafrita repuso mis fuerzas para llegar a descansar.
La mañana del lunes aprontamos las cosas para vivir tres días llenísimo de actividades.
Con permiso via a dentrar Aunque no soy convidao, Pero en mi pago, un asao No es de naides y es de todos. Yo via cantar a mi modo Después que haiga churrasquiao.
Nicolás, en gran parte dueño de este mundo, ‘dejó la pelota en el centro de la cancha, y dió el puntapié inicial’ para que la comunidad hable and SHAPE YOUR FUTURE.
...y la comunidad tomó rienda en el asunto: Planes para fomentar el desarrollo y acampañar el crecimiento de proyectos, Interfaces Conversacionales, Stencil, Docker, NetCore Generator, Angular Generator, React Generator, Vuejs Generator, varias integraciones con diferentes SDK entre otros.
Yo sé que muchos dirán Que peco de atrevimiento Si largo mi pensamiento Pal rumbo que ya elegí, Pero siempre he sido ansi: Galopiador contra el viento.
Durante años fuí crítico de cada tecnología, entre ellas Genexus. Así hace años discutíamos de javascript, porque “Java es el que va en serio” ...el backend es para lenguajes compilados; hartos defensores de Java. Luego surgió AngularJS, Node.js y todo cambió, empezamos a ver las cosas de modo diferente. Y todos aquellos que me conozcan apenas un poco, sabrán que siempre fui así: denso, crítico o quejoso, pero guiándome no por títulos o eslogans, sino por resultados:
“Talk is cheap. Show me the code.” - Linus Torvalds
Pobre nací y pobre vivo Por eso soy delicao. Estoy con los de mi lao Cinchando tuitos parejos Pa' hacer nuevo lo que es viejo Y verlo al mundo cambiao.
Y Genexus de Uruguay: un país tan chiquito, pero todos tirando para el mismo lado.
Impulsados por el cambio y para compartir una visión del mismo; ya cumplen 27 años de evento.
A pesar de los errores, aprendieron mucho: crecieron. De hecho: así nació este evento! Seguro haya mucho para aprender, y por eso estabamos allí.
Apenas pocos minutos de cruzar la frontera me llamó la atención: Torres Eólicas. Sí, acá en Uruguay!
Y el bus siguió la ruta: aparecían cooperativas, muchas cooperativas. Y yo, que estudié administración de cooperativas, encendió más el interés. Qué pasó!? qué me espera?!?!?!
Acostumbrao a las sierras Yo nunca me sé marear, Y si me siento alabar Me voy yendo despacito. Pero aquel que es compadrito Paga pa' hacerse nombrar.
En tantos años, hubo muchas personas de renombre en la comunidad, muy conocidas y que no citaré, pero que brindaron ayuda en el camino. Auxiliándome con problemas, de forma desinteresada: eso es comunidad!
Ese chico que un día les escribió un mail, quería ver qué hacen aquí. Todos ellos dieron charlas, buenos developers, que nunca buscaron tener crédito. Y aprendí a valorarlos con el tiempo.
Cuando yo aprendí a cantar Armaba con pocos rollos Y en la orilla de un arroyo Bajo las ramas de un sauce, Crecí mirando en el cauce Mis sueños de pobre criollo.
Algunos cantaban bien. Otros, pobres, más o menos... Mas no eran cantos ajenos, Aunque marca no tenían. Y todos se entretenían Guitarreando hasta el desvelo.
Charlas, talleres, espacios de discusión. Estamos aquí para ver hacia dónde nos dirigimos. Todos los días el reloj marcaba el ritmo frenético de las charlas y cada 30 minutos era tiempo de salir apresurado a otra sala.
Los disertantes rápidos por incluir todo el contenido, bien planificado. Aún así dejaban tiempo a preguntas.
Sin menospreciar ninguna, sólo nombraré algunas charlas por temática o simplemente porque la presentación me pareció impecable. Puede no sean innovadoras, pero mostraron soluciones geniales:
Aplicaciones para la inclusión digital de personas con capacidades diferentes. Daniela Sniadower, Gerardo Wisosky - Aprendizaje Diferente
Modularización de KB - Lecciones aprendidas. Enrique Almeida - Concepto
Evolucionar sin perder autenticidad. Roberto Musso - Cuarteto de Nos
Reduciendo costos logísticos con una solución 100% Mobile Genexus 15. Flávio Rogério da Silvaa - Sil Sistemas
Genexus Developer Toolbox Tips and Tricks. Luciano Silver - Genexus
Así pasaron tres hermosos días. En un país que desconocía. Qué me traje a argentina? Muchos alfajores y un hermoso mate.
Ahora en serio: volví con un montón de conocimiento nuevo, nuevas experiencias, personas, muchos lugares. Dentro y fuera del evento pude interactuar con personas de al menos 7 países: en castellano, portugués e inglés. De diferentes áreas.
Aprendí un poco de uruguayo :) que las facturas le dicen bizcochos, zapatillas - championes, pava - caldera, etc. También aprendí que el uruguayo es muy gentil.
Quizás en el fondo sea un poco uruguayo: me quejo de todo. (pero no los veo así, como ellos dicen). Y volvimos a Buenos Aires con espectativas apliamente superadas y con muchas charlas pendientes para mirar.
Será hasta la próxima, fue un gustazo Uruguay!
No me nuembren qu'es pecao Y no comenten mis trinos, Yo me voy con mi destino P'al lao donde el sol se pierde; Tal vez alguno se acuerde Que aquí cantó un argentino.
Fuente de los versos: Coplas del Payador Perseguido, Atahualpa Yupanqui
0 notes
wfranck · 9 years ago
Text
January 22nd, 2015
On the final day of my internship I was given a last minute assignment to do some research and figure out the potential different features Miles Technologies could offer for mobile applications for its customers. We just developed our very first mobile app this past summer so we have a lot of work ahead of us in making the process more efficient. I also needed to gather some price estimates during my research as well.
At the end of my research I compiled all my data into some documentation for the company and then I made them a neat little mobile application calculator for determining the cost of a mobile app based on features, number of screens, devices, etc. It feels so good to finally get out of the classroom and do some learning that has an end product that I can share with others! 
Here is the final product: http://codepen.io/sniedoba/full/NxyNGB/ 
Tumblr media
1 note · View note
wfranck · 10 years ago
Link
Because the Pinterest iOS app downloads and processes an enormous amount of data, we use a caching system to cache models and images to avoid eating into our Pinners’ (users’) data plans. For quite some time we used TMCache to persist GIFs, JPEGs and models to memory and disk, but after using it...
5 notes · View notes
wfranck · 10 years ago
Photo
Tumblr media
History of the Subway
2K notes · View notes
wfranck · 11 years ago
Link
2012 was the year of the rise of the Javascript MVC frameworks and librairies with countless of those frameworks that were released or that went under the spotlight. Among others, you must have heard about Backbone.js, Ember.js but my personal favorite is AngularJS. AngularJS is a Javascript...
189 notes · View notes
wfranck · 11 years ago
Link
Para leer después...
Tumblr media
PageObjects enable you to take a group or collection of elements on a page that share some commonality and group them together. In general, a PageObject can be any web page, but can also be broken down into more precise PageObjects. If a Page has elements and services—or some repeated group...
3 notes · View notes
wfranck · 11 years ago
Text
Lean en 32 páginas
.resumen del libro.
0 notes
wfranck · 11 years ago
Text
Focus On This Instead
The path of build a successful business starts by setting a specific and actionable goal, is when it comes to actually getting things done and making progress on áreas that are important to you. It all come down to the difference between specific goals per day- week and the final objective. Also focus on midterm objective. You aren't working toward a goal; commit to a process, not a goal. Avoid stress thinking in small targets, you can keep things simple and sticking to your schedule, enjoying the present moment and improve at the game time. When all of your hard work is focused on a particular goal, what is left to push you forward after you achieve it? Release the need for immediate result. Thinking global is never about hitting a particular number, it's about sticking to the process and not missing workouts. Goal suggest that you can control things that can have no control over. You can't predict the future, but we try to predict how quickly we can make progress. 1 - day - week spend 15 minutes, check progress and make adjustments. Goal can provide direction and even push you forward in the short term, but eventually a well-designed global perspective will always win.
(synthesis magazine article Focus On This Instead by James Clear)
0 notes
wfranck · 12 years ago
Text
Instalación completa Raspberry Pi para torrent server vía ssh
1- Bajar la imagen de wheezy-raspbian:
2013-07-26-wheezy-raspbian.img
2- Instalación:
Insertar una SD (recomendada 16GB):
Abrir la consola:
Listar las unidades
df -h
Desmonta la SD (no se equivoquen de unidad):
sudo diskutil unmount /dev/disk3s1
Copiar imagen a SD sudo dd bs=1m if=~/Downloads/2012-10-28-wheezy-raspbian/2012-12-16-wheezy-raspbian.img of=/dev/rdisk3
Ejecutar el SD sudo diskutil eject /dev/rdisk3
  3-Acceso por terminal ssh
(para saber la ip, buscamos la tabla DHCP de nuestro router)
$> ssh pi@IP_de_la_RPi
4-Configurar wifi
$  wpa_passphrase My_WiFi_SSID mypassword //si lo hacemos así evitamos que el texto password sea legible (por seguridad)
Editar el archivo: etc/network/ interfaces
Ponemos ip estática (es la 106), que directamente conecte por wifi.
auto wlan0 allow-hotplug wlan0 iface wlan0 inet static   address 192.168.1.106    netmask 255.255.255.0   gateway 192.168.1.1   wpa-ssid "nombre-de-tu-red"   wpa-psk "tu-clave" ó el resultado de wpa_passphrase
Reiniciar
shutdown -r now
Instalar el bluetooth, transmission y flexget
apt-get update -y & apt-get upgrade -y
apt-get install -y bluetooth bluez-utils blueman python python-setuptools transmission transmission-daemon transmission-cli htop
easy_install flexget
El archivo de configuración de transmission es:
/var/lib/transmission-daemon/info/settings.json
Tenemos todo lo necesario, cantidad de feeds, velocidad, carpeta de incompletos, carpeta de completos, etc etc. Es cuestión de leer.
Para reiniciar el servicio (no hace falta reiniciar todo el linux)
$sudo service transmission-daemon reload
Por ultimo, al alojar la ruta de descargas fuera de la ruta /var/lib/transmission-daemon/ existen algunos problemas de permisos. Para solucionar esto tenemos que añadir nuestro usuario al grupo “debian-transmission”, cambiar el grupo de la carpeta donde descarguemos todo a ese mismo y por ultimo modificar los permisos de la carpeta. Los comandos serían así:
$ sudo usermod -a -G debian-transmission [tu user] $ chgrp debian-transmission [tu ruta de descargas] $ chmod 770 [tu ruta de descargas]
/var/lib/transmission-daemon/downloads
Una de las cosas buenas que tiene transmission es su "servidor con interfaz web" para agregar torrent por browser
Tumblr media
que configuramos en el mismo archivo de configuración (la clave se ofusca al guardar):
    "rpc-enabled": true,     "rpc-password": "clave",     "rpc-port": 9091,     "rpc-url": "/transmission/",     "rpc-username": "cacho",
Dependiendo de esto la ip de acceso sería:
http://192.168.1.106:9091/transmission/web/
Y con esto también podemos afinar la configuración de velocidades, horarios de restricción, etc.
Instalación de DLNA En mi caso tengo un televisor conectado por wifi y con soporte de DLNA.
sudo apt-get install minidlna
Para configurar las carpetas compartidas y el tipo de archivo compartido en cada carpeta (fotos, audio y video):
/etc/minidlna.conf
media_dir=A,/home/usuario/Música/DLNA media_dir=P,/home/usuario/Imágenes media_dir=V,/home/usuario/Vídeos/DLNA
habilitar el caché de MiniDLNA's (esto afectará a las carátulas y no será necesario reiniciar el servicio cada vez).
db_dir=/var/lib/minidlna
log_dir=/var/log
service minidlna force-reload
 Instalar librerías para usar exFat (formato compatible con archivos grandes en linux, windows y mac)
Ideal para RPi conectado a un disco externo de 1T. Un servidor silencioso, barato y para dejar prendido todo el día.
$sudo apt-get install exfat-fuse exfat-utils
fdisk -l
creamos una carpeta para montar el disco
mkdir carpeta
mount /dev/sda1 /carpeta
varios a ver, buscar:
sudo initctl start xbmc sudo initctl stop xbmc -plugins firefox send to xbmc media center -airplay con rpi -android con VLC reproduce contenido por dlna La verdad que tengo pendiente configurar el BT y flexget (que con poco tiempo, realmente no necesito). Queda para más adelante... es suficiente contenido. También ver cómo es el acceso remoto para agregar torrents remotos y hasta usarlo como servidor NAS, git.
2 notes · View notes
wfranck · 12 years ago
Text
Typical bug fixing
355 notes · View notes
wfranck · 12 years ago
Link
Today I had to quickly find the most frequent Hashtags on my small(ish) dataset.
Unix commands to the rescue, and after running this:
$ cat tweets.json | jq '.text' | tr 'A-Z' 'a-z' \ | egrep -oe'#[0-9a-z_]+' \ | sort | uniq -c | sort -nr | head -10 487 #bigdata 131 #java 59 #analytics 34...
1 note · View note
wfranck · 12 years ago
Text
Resumen: Informática para cooperativas
Es propio de las cooperativas facilitar el acceso de la información de sus asociados (que no son simples usuarios). Las cooperativas tienen su propia forma de operar y a diferencia de sociedades no siempre actúan por conveniencia económica. Además, hay diferencias en términos donde unos llaman clientes, socios o proveedores y los excedentes son llamados ganancias. Se suele trabajar por amor a la camiseta, tareas no reglamentadas o estipuladas por un procedimiento, pero que necesitan de control. Recordemos que ellos no son dueños, como en el caso de una PyME; ellos fueron elegidos para desempeñar la administración de fondos de asociados. El fin de una cooperativa no es la ganancia económica, persiguen un objetivo social; el bien común más allá de la conveniencia. Y los sistemas deben permitir el aprovechamiento al máximo  de las características de una cooperativa. Más alla de algunas debilidades y dicciones de comportamientos erróneos, podemos comparar o distanciar el proceder de una cooperativa con el lado de empresas estatales, donde los proyectos empiezan y terminan con los cambios de autoridades y sus costos nunca son amortizados, pero los pagamos todos los contribuyentes. Ayudar que la administración de los recursos sea seguro y optimizar el uso de los recursos que el asociado confió a la cooperativa. Cuanto más claridad se brinde, mayor credibilidad y confianza tendrán ellos en su cooperativa y sus asociados. Las cooperativas controlan y cobran consumos, administran fondos y reparten excedentes. Por lo tanto deben tener herramientas necesarias para responder de forma adecuada ante una consulta del asociado. La única manera que el asociado se quede en la empresa es dando un servicio que le sirva, y con una gestión clara y limpia. La evolución de la cooperativa debe estar acopañado por el sistema. Por otro lado es muy importante que los sistemas desarrollados exclusivamente para la cooperativa estén acompañados por un profesional asesor que brinde mantenimiento a los sistemas que se usan. Es el "backup del profesional", y el soporte nexo entre desarrollo, implementación y soporte. Una opción es el servicios remoto de profesionales con un abono base y un pago por horas de utilización. La cooperativa debe tener un sistema centralizado, compartiendo y cruzando información. La cuenta del asociado debe ser única. A partir de un completo registro de asociados podemos corregir gastos y reorganizar la prestación de servicios por el solo hecho de la información que brinda el cruce de datos para la mejor utilización de recursos Por último, es bueno prever una estructura que facilite el intercambio de cierto tipo de información que permita la integración e intercambio de servicios con otras cooperativas, algo común en las economías sociales.
0 notes
wfranck · 12 years ago
Text
Play Framework 2: for lazy developers (part 2)
SBT a Simple Build Tool The command-line of Play is SBT, like Ant, Maven or Gradle, but use Scala for DSL.
Tumblr media
We will find a Build.scala file into the project folder.
Tumblr media
SBT Dependencies The Build.scala file define a sequence appDependencies. We add the dependency as the following image:
Tumblr media
It is used in play.Project as a parameter. Repositories In the same file (Build.scala) adding the "resolvers"
Tumblr media
CORE PARTS Routing Can be found under the conf folder, the routes file. Here, the row define how to access server-side using HTTP. Each row have three columns: - the method used in the request - a relative path - the action to be invoked
Tumblr media
Action An action is a simple method that has a defined route declaring as the code to be executed when a matching request arrives; are declared in a container (a class Java) that extend the Controller.
Tumblr media
Just think:     java -> OOP => method     scala -> FP => function Template A template file is HTML mixes with Scala code. We can find into app/views folder, index.scala.html.
Tumblr media
To begin understand we will try to get the first results modifying the template index.scala.html to:
Tumblr media
and refresh the web browser to see…
Tumblr media
But, if the message came directly from Apache? we change the value of the argument of index in the Application controller file.
Tumblr media Tumblr media
Or just trying to render a JSON
Tumblr media
(see the Content-Type)
Tumblr media
1 note · View note