CoreData vous tente mais vous fait peur ? Vous trouvez le framework un peu dur à prendre en main ? Ou vous en avez marre d’écrire autant de ligne à chaque fois juste pour faire une simple récupération de vos données ?
Olivier Halligon (développeur de FoodReporter) vous offrira une découverte de MagicalRecord, le framework qui va drastiquement simplifier votre code CoreData, en apportant le Design Pattern ActiveRecord (comme utilisé en Ruby) sur Objective-C.
Le développement d'applications lourdes à base de JavaScript est désormais possible. Cependant, cela requiert de bien connaître le langage en lui-même ainsi que les meilleurs patterns et pratiques établit ces 10 dernières années à travers des frameworks comme YUI ou jQuery par exemple. Vous verrez donc ici comment bien structurer votre code, comment utiliser des approches permettant de palier à certaines limitations de JS et comment également industrialiser le code grâce à la mise en place de tests unitaires.
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeadsRNS
La session rennaise des CocoaHeads du mois d'avril 2012 fût l'occasion de revenir sur un des grands sujets d'iOS: la gestion mémoire. Thomas Dupont nous a présenté le sujet en partant des considérations les plus simples en allant vers les cas les plus complexes. Sa présentation est assurément un bon moyen pour se lancer dans le sujet, pour faire un rappel des basiques ou pour aller plus loin ... Une large partie de sa présentation était consacrée à ARC.
Une présentation du JavaScript en surface que j'ai faite durant ma première formation en JavaScript à l'Ecole Supérieure d'Informatique et de Mathématiques de Monastir.
CoreData vous tente mais vous fait peur ? Vous trouvez le framework un peu dur à prendre en main ? Ou vous en avez marre d’écrire autant de ligne à chaque fois juste pour faire une simple récupération de vos données ?
Olivier Halligon (développeur de FoodReporter) vous offrira une découverte de MagicalRecord, le framework qui va drastiquement simplifier votre code CoreData, en apportant le Design Pattern ActiveRecord (comme utilisé en Ruby) sur Objective-C.
Le développement d'applications lourdes à base de JavaScript est désormais possible. Cependant, cela requiert de bien connaître le langage en lui-même ainsi que les meilleurs patterns et pratiques établit ces 10 dernières années à travers des frameworks comme YUI ou jQuery par exemple. Vous verrez donc ici comment bien structurer votre code, comment utiliser des approches permettant de palier à certaines limitations de JS et comment également industrialiser le code grâce à la mise en place de tests unitaires.
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeadsRNS
La session rennaise des CocoaHeads du mois d'avril 2012 fût l'occasion de revenir sur un des grands sujets d'iOS: la gestion mémoire. Thomas Dupont nous a présenté le sujet en partant des considérations les plus simples en allant vers les cas les plus complexes. Sa présentation est assurément un bon moyen pour se lancer dans le sujet, pour faire un rappel des basiques ou pour aller plus loin ... Une large partie de sa présentation était consacrée à ARC.
Une présentation du JavaScript en surface que j'ai faite durant ma première formation en JavaScript à l'Ecole Supérieure d'Informatique et de Mathématiques de Monastir.
PHP 7.3 sera en beta à la fin de l'été, et cible une sortie avant Noel. De nombreuses nouveautés sont prévues de longue date, comme l'évolution de la syntaxe heredoc, ou les , finales pour les appels de fonctions, tandis qu'une rafale de nouveautés se bousculent au portillon, et ont même
généré une alpha 4. Nous passerons en revue toutes ces évolutions, ainsi que les incompatibilités, comment les trouver dans du code, et comment fonctionnent les RFC de PHP.
Objectif général : Prendre en main l’une des bibliothèques JavaScript les plus utilisés pour créer des interfaces utilisateurs
Objectifs spécifiques :
Découper l’interface utilisateur avec les composants;
Configurer les composants avec « props »;
Gérer l’état local d’un composant avec « state »;
Afficher une listes de composants avec map();
Afficher un composant en fonction de l’état de l’application;
Interagir avec un utilisateur grâce à la gestion des événements;
Interagir avec un utilisateur par le biais des formulaires;
Communiquer avec un serveur HTTP avec AJAX;
Afficher des vues en fonction de l’URL avec le routage;
Mettre en forme un composant;
Introduction au langage Go, avec comparaisons à Java
Présentation donnée dans différents meetups et conférences en 2015 et 2016.
Sources : https://github.com/swallez/golang-talks/
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
Depuis toujours nous souhaitons développer au mieux des procédures stockées dans SQL Server, afin de clarifier ou d’optimiser nos développements.
Depuis 2005, les procédures stockées et les triggers peuvent être développés en .NET, grâce à votre langage favoris : C#, VB.NET, etc. Nous pouvons ainsi tirer parti de toute la puissance de ce Framework : fonctions mathématiques, cryptages, gestion de chaine de caractères, manipulation des dates, etc.
Lors de cette session, nous expliquerons comment créer des procédures, des triggers et des fonctions d’agrégations dans ce mode CLR. Nous passerons en revue les trucs et astuces utiles pour optimiser nos requêtes. Nous verrons quels sont les avantages de concevoir des procédures SQL en .NET ; mais également quels en sont les inconvénients. Finalement, nous verrons comment déployer facilement les bibliothèques .NET créées, dans SQL Server : quels outils utiliser.
Objectif général : Savoir créer des pages Web interactives sans trop solliciter le serveur et le réseau pour offrir une meilleure expérience utilisateur
Objectifs opérationnels :
Stocker des données à l’aide des variables
Traiter des données à l’aide des opérateurs.
Communiquer avec l’internaute à l’aide des E/S de base
Contrôler le flux d’exécution des instructions.
Réutiliser et organiser le code en créant des fonctions
Créer l’interactivité grâce à la gestion des évènements
Traiter plus facilement plusieurs données connexes grâce aux tableaux et aux objets
Traiter des chaînes de caractères avec l’objet String
Gérer les propriétés de la fenêtre avec l’objet Window
Manipuler le contenu de la page Web grâce à l’objet Document
Contrôler la saisie d’un formulaire avec l’objet Form
Cette conférence présente le framework Johnny-Five qui permet de programmer des cartes embarquées à l'aide d'un module Node.js. Après un tour rapide du JavaScript et de son fonctionnement, en particulier la programmation fonctionnelle et l'exécution pilotée par les évènements, la présentation décrit Node.js et aborde rapidement son fonctionnement. La troisième partie présente Johnny-Five et plusieurs exemples simples de contrôle d'une LED et de l'utilisation des entrées/sorties numériques et analogiques.
PHP 7.3 sera en beta à la fin de l'été, et cible une sortie avant Noel. De nombreuses nouveautés sont prévues de longue date, comme l'évolution de la syntaxe heredoc, ou les , finales pour les appels de fonctions, tandis qu'une rafale de nouveautés se bousculent au portillon, et ont même
généré une alpha 4. Nous passerons en revue toutes ces évolutions, ainsi que les incompatibilités, comment les trouver dans du code, et comment fonctionnent les RFC de PHP.
Objectif général : Prendre en main l’une des bibliothèques JavaScript les plus utilisés pour créer des interfaces utilisateurs
Objectifs spécifiques :
Découper l’interface utilisateur avec les composants;
Configurer les composants avec « props »;
Gérer l’état local d’un composant avec « state »;
Afficher une listes de composants avec map();
Afficher un composant en fonction de l’état de l’application;
Interagir avec un utilisateur grâce à la gestion des événements;
Interagir avec un utilisateur par le biais des formulaires;
Communiquer avec un serveur HTTP avec AJAX;
Afficher des vues en fonction de l’URL avec le routage;
Mettre en forme un composant;
Introduction au langage Go, avec comparaisons à Java
Présentation donnée dans différents meetups et conférences en 2015 et 2016.
Sources : https://github.com/swallez/golang-talks/
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
Depuis toujours nous souhaitons développer au mieux des procédures stockées dans SQL Server, afin de clarifier ou d’optimiser nos développements.
Depuis 2005, les procédures stockées et les triggers peuvent être développés en .NET, grâce à votre langage favoris : C#, VB.NET, etc. Nous pouvons ainsi tirer parti de toute la puissance de ce Framework : fonctions mathématiques, cryptages, gestion de chaine de caractères, manipulation des dates, etc.
Lors de cette session, nous expliquerons comment créer des procédures, des triggers et des fonctions d’agrégations dans ce mode CLR. Nous passerons en revue les trucs et astuces utiles pour optimiser nos requêtes. Nous verrons quels sont les avantages de concevoir des procédures SQL en .NET ; mais également quels en sont les inconvénients. Finalement, nous verrons comment déployer facilement les bibliothèques .NET créées, dans SQL Server : quels outils utiliser.
Objectif général : Savoir créer des pages Web interactives sans trop solliciter le serveur et le réseau pour offrir une meilleure expérience utilisateur
Objectifs opérationnels :
Stocker des données à l’aide des variables
Traiter des données à l’aide des opérateurs.
Communiquer avec l’internaute à l’aide des E/S de base
Contrôler le flux d’exécution des instructions.
Réutiliser et organiser le code en créant des fonctions
Créer l’interactivité grâce à la gestion des évènements
Traiter plus facilement plusieurs données connexes grâce aux tableaux et aux objets
Traiter des chaînes de caractères avec l’objet String
Gérer les propriétés de la fenêtre avec l’objet Window
Manipuler le contenu de la page Web grâce à l’objet Document
Contrôler la saisie d’un formulaire avec l’objet Form
Cette conférence présente le framework Johnny-Five qui permet de programmer des cartes embarquées à l'aide d'un module Node.js. Après un tour rapide du JavaScript et de son fonctionnement, en particulier la programmation fonctionnelle et l'exécution pilotée par les évènements, la présentation décrit Node.js et aborde rapidement son fonctionnement. La troisième partie présente Johnny-Five et plusieurs exemples simples de contrôle d'une LED et de l'utilisation des entrées/sorties numériques et analogiques.
Au coeur des applications Web riches, de HTML5 ou des applications Web mobiles, JavaScript est désormais incontournable. Sa communauté très dynamique a contribué à créer un écosystème complet pour répondre aux problématiques courantes de test, qualité du code ou intégration continue comme l'a fait avant elle la communauté Java il y a pas loin de dix ans... Parmi les projets les plus observés du moment, c'est curieusement côté serveur que JavaScript fait le plus parler de lui avec Node.js, un environnement de développement Web qui cultive sa différence.
Téléchargement du Coding Kata :
Android, Spring, Gradle et de nombreux autres projets apportent leur soutien au langage Kotlin. Fin 2017, Kotlin tient-il ses promesses ?
Retour d’expérience sur le langage, ses avantages et inconvénients sur un projet Mobile, un projet Back et bien plus.
Une révision des principaux concepts du langage JavaScript : variables, fonctions, types, fermetures (closures), objets et prototypes, format JSON. De nombreux exemples téléchargeables sur GitHub.
Open close principle, on a dit étendre, pas extends !Engineor
Conférence en français sur le principe d'ouverture fermeture proposé à l'AFUP de Paris en février 2019, comportant des exemples d'implémentation du principe à l'aide de design patterns, avec ou sans utilisation d'un framework.
4. ‣ Introduction Kotlin
‣ Type inférence
‣ Propriétés
‣ Null Safety
‣ Lambdas
‣ Ordre des paramètres dans une fonction
‣ triple ===, comparaison valeur a valeur
‣ for, while, do, switch syntaxe
Sommaire
5. ‣ Smart cast
‣ Extension de fonction
‣ Infix function
‣ Data class
‣ Sealed class
Sommaire
11. ‣ Créé en 2010 par JetBrains
‣ Open source en 2012
https://github.com/JetBrains/kotlin
‣ v1.0 sortie en février 2016, v1.1 mars 2017
‣ Language fortement typé
‣ 100% compatible avec Java (JVM)
‣ Safe : notions “Null safety” 😎
‣ Concis (plus de ;)
‣ Type inference
Introduction Kotlin
12. ‣ Génère bytecode compatible avec Java 6 => Ok
avec Android
‣ Utilisable dans Eclipse (Plugin), Maven & Ant
‣ Roadmap :
‣ v1.0 : bug fixes, IDE support, ne pas affecter le
langage, lint checks
‣ v1.1 : new language features (async/await/yield),
type alias, …
Kotlin
13. ‣ Copie de code Java avec conversion : 👍
Kotlin
17. ‣ Ajouter le support de Kotlin au projet
1. Modification du fichier gradle du projet
2. Modification du fichier gradle du module
Comment l’intégrer ?
18. ‣ Type sur une variable non nécessaire
‣ Déterminé par la première valeur
Type inférence
val day: Int = 14 // Type Int précisé
val month = 6 // Type Int déterminé
19. ‣ Deux possibilités :
‣ Mutable : var
‣ Immutable : val
Propriétés
class Article {
val defaultId = -1
var title: String = ""
var content: String = ""
}
20. ‣ Utilisation des propriétés :
Propriétés
var article = Article()
article.title = "Support officiel de Kotlin par Google”
article.content = "Google supporte désormais officiellement
le langage Kotlin pour le développement Android."
21. ‣ Getter et setter par défaut
‣ Surchage possible via
‣ get() & set()
Propriétés
// Read-only: get
val isFilled: Boolean
get() = !title.isEmpty()
// Read-write: get and set
var fullContent: String
get() = title+"#"+content
set(value) {
var split = fullContent.split("#")
if(split.size>=2) {
this.title = split.get(0)
this.subTitle = split.get(1)
}
}
22. ‣ Possibilité de définir un constructeur primaire
‣ Directement lié à la classe
Constructeur
class Article(val title:String, val subtitle: String) {
}
23. ‣ Constructeurs secondaires
‣ Obligation d’appeler le constructeur primaire
directement ou indirectement
Constructeur
class Article(val title:String) {
lateinit var subTitle: String
constructor(title: String, subTitle: String) : this(title) {
this.subTitle = subTitle
}
}
30. ‣ Résultat :
‣ valeur (si non nul)
‣ 0 (si nul)
Elvis Operator
val length = subTitle?.length ?: 0
31. Operator !!
override fun onCreateView(inflater: LayoutInflater?,
container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater!!.inflate(R.layout.fragment_list, container,
false)
}
32. ‣ Opérateur as?
‣ Si le cast échoue retourne null
Safe casts
val currentLength = length as? Int
33. ‣ Possibilité de modifier l’ordre des paramètres :
Ordre des opérateurs dans une fonction
fun displayMessage(message: String, repeatCount: Int = 1) {
}
// Java Style
displayMessage("Hello", 10)
// With default parameter repeatCount = 1
displayMessage("Is it me you're looking for? ")
// inverted order with parameter name
displayMessage(repeatCount = 2, message = "I can see it in your
eyes. I can see it in your smile.”)
34. ‣ Expressions lambda = fonctions anonymes
‣ entourée d’accolades { }
‣ paramètres optionnels
‣ un type de retour
‣ un corps
Lambdas
35. ‣ Forme complète :
‣ Forme réduite :
‣ Utilisation :
Lambdas
val sum: (Int, Int) -> Int = { x, y -> x + y }
val sum = { x: Int, y: Int -> x + y }
val resultSum = sum(10, 30)
36. ‣ Mot-clef it : nom du paramètre unique par défaut
Syntaxe
val values = mutableListOf<Int>(10, 12, 14)
val valuesOver10 = values.filter { it>10 }
37. ‣ Appelé égalité référentielle
‣ === retourne vrai si les deux références pointent
sur le même objet
‣ inverse !==
Opérateur ===
38. ‣ Appelé égalité structurelle
Opérateur ==
value1==value2
// équivalent à
value1?.equals(value2) ?: (value2 === null)
Null Safety 👍
45. ‣ Permet de trans-typer à la volée (localement)
Smart cast
fun arrangeValue(value: Number) {
if(value is Int) {
integerValues.add(value)
}
if(value is Float) {
floatValues.add(value)
}
}
46. ‣ Possibilité d’utilisation avec when
Smart cast
fun arrangeValue(value: Number) {
when(value) {
is Int -> integerValues.add(value)
is Long -> longValues.add(value)
is Float -> floatValues.add(value)
is Double -> doubleValues.add(value)
else -> {
otherValues.add(value)
}
}
}
48. Extension de fonction
fun AppCompatActivity.findFragment(@IdRes id: Int):
Fragment? {
return supportFragmentManager.findFragmentById(id)
}
class MainActivity : AppCompatActivity() {
…
val fragment = findFragment(R.id.main_fragment)
}
49. ‣ Extension de de fonction avec un seul paramètre
Infix function
infix fun Int.power(power: Int): Int {
if(power==0) return 1
var result = this
for(i in 1..power-1) {
result *= this
}
return result
}
10 power 3
10.power(3)
50. ‣ Utile pour créer des POJO
‣ Compilateur ajoute automatiquement les
méthodes suivantes (basées sur les ivar) :
‣ equals() / hashCode()
‣ toString()
‣ componentN() méthodes
‣ copy()
Data Class
data class Author(val firstname: String, val lastname: String)
51. ‣ Equivalent d’un Enum avec un ensemble de
valeurs (variables)
Sealed Class
sealed class PublishResult {
class Success(val article: Article) : PublishResult()
class Failure(val error: Error) : PublishResult()
}
val result = publish("Let's get it started with Kotlin!", "My
first week with Kotlin")
when(result) {
is PublishResult.Success -> display(result.article)
is PublishResult.Failure -> showErrorMessage(result.error)
}