Developer Guide to Migrate Across Galaxies

Developer Guide to Migrate Across Galaxies

Presentation given in App Builders 2017, Lausanne, Switzerland.

53619e4417778923cc65a51683e850a0?s=128

Adrian Kosmaczewski

April 25, 2017
Tweet

Transcript

  1. Developer Guide To Migrate Across Galaxies.

  2. None
  3. Galaxies.

  4. None
  5. "2. Choose Your Galaxy Wisely"

  6. "In our industry, every technology generates what I call a

    “galaxy.” These galaxies feature stars but also black holes; …
  7. …meteoric changes that fade in the night, many planets, only

    a tiny fraction of which harbour some kind of life, and lots of cosmic dust and dark matter."
  8. Religion.

  9. Sociology.

  10. 6 Galaxies.

  11. In just half an hour.

  12. Believe me.

  13. Everything is connected.

  14. 42.

  15. 1. Perl, Python, PHP, Ruby. aka Babelia.

  16. Quality software.

  17. Actually…

  18. Not.

  19. Software rots.

  20. Organic Software™®©.

  21. Hipsters.

  22. None
  23. None
  24. None
  25. None
  26. None
  27. None
  28. None
  29. None
  30. None
  31. None
  32. Software Vendors.

  33. None
  34. Windows-1252.

  35. \lim_{k \to \infty}\frac{1}{k} = 0.

  36. None
  37. <math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> <munder> <mo form="prefix" movablelimits="true">lim</mo> <mrow class="MJX-TeXAtom-ORD"> <mi>k</mi>

    <mo stretchy="false">&#x2192;<!-- → --></mo> <mi mathvariant="normal">&#x221E;<!-- ∞ --></mi> </mrow> </munder> <mfrac> <mn>1</mn> <mi>k</mi> </mfrac> <mo>=</mo> <mn>0.</mn> </math>
  38. None
  39. 2017.

  40. LibreOffice.

  41. AbiWord.

  42. None
  43. Déjà Vu.

  44. None
  45. None
  46. Apple Pages 2005.

  47. Déjà Vu.

  48. Markdown.

  49. None
  50. AsciiDoc.

  51. UTF-8.

  52. Գ΄Ӿ΄ᢚय़ ၹΨᎣΟͰ̶

  53. None
  54. Perl ➡ Markdown.

  55. PHP ➡ Textile.

  56. Python ➡ AsciiDoc.

  57. Ruby ➡ AsciiDoctor.

  58. Haskell ➡ Pandoc.

  59. AsciiDoc, Markdown ➡ Pandoc ➡ PDF, Word, LibreOffice…

  60. 2. VBScript. aka Apocalypsia.

  61. On Error Resume Next Err.Raise 6 MsgBox CStr(Err.Number) & "

    " & Err.Description Err.Clear
  62. None
  63. None
  64. None
  65. None
  66. None
  67. None
  68. None
  69. None
  70. "In earlier version of Visual Basic, functions without a "Return"

    statement just "Return None", without any kind of compiler warning (or error)…
  71. Function Sum(value1, value2) Dim result result = value1 + value2

    Sum = result End Function
  72. None
  73. "Oh man this sucked."

  74. Class Customer Private m_CustomerName Private Sub Class_Initialize m_CustomerName = ""

    End Sub ' CustomerName property. Public Property Get CustomerName CustomerName = m_CustomerName End Property Public Property Let CustomerName(newValue) m_CustomerName = newValue End Property End Class Dim cust Set cust = New Customer cust.CustomerName = "Fabrikam, Inc." Dim s s = cust.CustomerName MsgBox (s)
  75. "the ASP server is multithreaded and assigns a different thread

    to each page request (…). VBScript class instances (…) must run on the thread that created them."
  76. "There is no notion of polymorphism or inheritance in VBScript

    5.0 (…)"
  77. "(…) VBScript classes are merely a way to group data

    and the operations on the data together to improve encapsulation."
  78. "The four magic constants of the apocalypse: Nothing, Null, Empty,

    and Error."
  79. Option Explicit Dim MyVar MyVar = 10 ' ... and

    your code explodes (because not declared)! MyInt = 10
  80. VBRUN300.DLL. 400 KB.

  81. .NET Framework. 23 MB4. 4 https://www.microso!.com/en-us/download/details.aspx?id=26

  82. Swift. 8 – 15 MB5. 5 http://stackoverflow.com/q/28275711/133764

  83. Kotlin. 858 KB2. 2 https://kotlinlang.org/docs/tutorials/kotlin-android.html

  84. 3. C++. aka Paradigmia.

  85. None
  86. None
  87. Macros Multiple inheritance. Template Metaprogramming. Standard Template Library.

  88. Multiple Inheritance.

  89. !.

  90. Once Again.

  91. Everybody.

  92. Multiple. Inheritance.

  93. !.

  94. Interfaces & Protocols. are. Abstract Classes with Virtual Methods.

  95. Cut And Paste.

  96. 500 KLOC.

  97. 4 hours build.

  98. (Do. Not. Clean.)

  99. 4000 Tests.

  100. VBScript ➡ Excel.

  101. None
  102. 4. Objective-C. aka Coolia.

  103. None
  104. None
  105. None
  106. Seat<Language<EastCoast>>

  107. std::map<std::obnoxious<std::language>, std::vector<seat>>

  108. Cup<Tea>.

  109. public: external auto static auto auto(auto &ref) [&auto] { return

    auto_cast<auto> (*auto) auto; }
  110. None
  111. None
  112. !.

  113. None
  114. None
  115. None
  116. None
  117. None
  118. exampleWithNumber: x | y | true & false not &

    (nil isNil) ifFalse: [self halt]. y := self size + super size. #($a #a "a" 1 1.0) do: [ :each | Transcript show: (each class name); show: ' ']. ^x < y
  119. None
  120. None
  121. None
  122. Person *p = [[Person alloc] init]; p.name = @"Steve"; NSLog([p

    valueForKey:@"name"]);
  123. None
  124. (secret)

  125. None
  126. ABI

  127. 5. JavaScript. aka Undefinedia.

  128. None
  129. V10 = Lars_Bak(JavaScript);

  130. None
  131. None
  132. CoffeeScript, LiveScript, TypeScript, Kotlin, UberScript, ToffeeScript, Mascara, Objective-J, Script#…

  133. 6. Swift. aka Migrania.

  134. None
  135. JVM.

  136. CLR.

  137. ABI.

  138. COM.

  139. "…a binary-interface standard for software components introduced by Microsoft in

    1993 (…)"
  140. "(…) used to enable inter-process communication and dynamic object creation

    in a large range of programming languages."
  141. 1993

  142. None
  143. HRESULT CMyMAPIObject::QueryInterface (REFIID riid, LPVOID * ppvObj) { // Always

    set out parameter to NULL, validating it first. if (!ppvObj) return E_INVALIDARG; *ppvObj = NULL; if (riid == IID_IUnknown || riid == IID_IMAPIProp || riid == IID_IMAPIStatus) { // Increment the reference count and return the pointer. *ppvObj = (LPVOID)this; AddRef(); return NOERROR; } return E_NOINTERFACE; }
  144. Reference Counting! ULONG CMyMAPIObject::AddRef() { InterlockedIncrement(m_cRef); return m_cRef; } ULONG

    CMyMAPIObject::Release() { // Decrement the object's internal counter. ULONG ulRefCount = InterlockedDecrement(m_cRef); if (0 == m_cRef) { delete this; } return ulRefCount; }
  145. F#, JRuby, Kotlin, Scala.

  146. LLVM.

  147. !

  148. Xcode Migration Assistants.

  149. File Radars.

  150. Crash.

  151. iCloud.

  152. reStructuredText ➡ Markdown.

  153. None
  154. iTunes.

  155. CPU.

  156. Memory.

  157. Hog.

  158. Merging Storyboards.

  159. Touch Bar.

  160. None
  161. 7. Local Cluster. aka Here. Now.

  162. "My recommendation to you is"

  163. "(…) choose your galaxy wisely, (…) keep your telescope pointed

    towards the other galaxies, and prepare to make a hyperjump to other places if needed."
  164. Convergence.

  165. C++17. PHP 7. C# 6. ES 6. Java 9. Kotlin

    1.1. Swi! 3.1. Scala 2.12.
  166. य़ݶੜ吖

  167. Lambdas. Type inference. Traits / default methods / protocol extensions

    / multiple inheritance / mixins / optional interface implementations. Categories / extensions.
  168. None
  169. None
  170. Singularity.

  171. Πάντα χωρεῖ καὶ οὐδὲν µένει — Ἡράκλειτος

  172. Everything changes and nothing stands still. — Heraclitus of Ephesus

    (535 - 475 BC)
  173. "Plus ça change, plus c'est la même chose." — Jean-Baptiste

    Alphonse Karr (1808 - 1890)
  174. None
  175. Micromanagement. No accessibility. Discrimination. Pseudoscrum. Open Spaces. Harassment. No testing.

    Burnout.
  176. 8. Guardians of the Galaxy aka You.

  177. Ownership.

  178. Empathy.

  179. Refuse jobs without inclusion and diversity.

  180. Refuse jobs in open spaces.

  181. Do not release code without tests.

  182. Do not release unaccessible apps.

  183. Do not accept bullshit from App Store owners.

  184. Do not jump into proprietary lock-in.

  185. It is not the programming language. It is not the

    frameworks. It is not the patterns. It is us.
  186. None
  187. Trip > Destination.

  188. ᜰ澆氱์

  189. @akosma. aka Me.

  190. Thanks.