[2019 oracle code one] code one keynote

For more blog posts, see The Oracle Code One table of contents



Data Science at the Intersection of Emerging Technologies – Krik Borne

  • 30% of revenue comes from ML algorithm (recommendations)
  • Can build new products by combining emerging technologies
  • combinatorial explosion – level above exponential growth
  • Types of discovery – class discovery, correlation or causality, outlier/anomaly/novelty/surprise discovery, association/link discovery
  • Levels of analytics – Descriptive (hindsight), diagnostic (oversight), predictive (foresight), prescriptive (insight), cognitive (360 view)
  • Machine learning = mathematical algorithms that learn from experience
  • Data mining = application of ML algorithms to data
  • AI = apply ML to actions
  • Data science = application of scientific method to discovery and more
  • Analytics = products of ML and data science
  • Power of AI is augmenting what humans can do
  • 4D printing in future – change shape in real time – https://www.sculpteo.com/blog/2017/10/25/4d-printing-a-technology-coming-from-the-future/

A golden age for developers – Greg Pavlik

  • Modern apps are
    • intelligent (use M to suggest and predict))
    • cloud native
    • agile
  • Examples
    • Detect disease up to level of individual plants
    • Go thru resumes and identify best fit jobs. Career progression [both of these are scary!]
  • Cycle: data exploration, build/train model, deploy model, manage model, repeat
  • Model is only as good as the data. The data changes over time.

Fighting Diabetes with Technology – Todd Sharp

  • Traditional Monitoring
    • Monitor blood sugar throughout day. Typically done with glucose monitor with finger prink 6-12 times a day.
    • Count carbs at every meal/snack
    • Formular determines insulin needs
    • Administer insulin at every meal/snack/bedtime
  • Technology helps
    • Continuous glucose monitoring – sensor/monitor below skin. Communicate by Bluetooth/in cloud
    • Insulin pumps. Constant and on demand insulin provided below skin. Again work with smart phone and in cloud
    • Expensive
  • Missing link is counting carbs and calculating insulin
  • Created an app
    • Full mode includes insulin calculation.
    • Quick mode to just count carbs
    • Formula based on meal/time of day
    • Enter data by a picture or voice. Have to weigh portion – uses Bluetooth scale
    • Can handle raw food (apple) or packaged food (graham cracker sticks)
    • Glucose meter pairs with app via Bluetooth as well to get current value
    • With all of this, can calculate number of insulin units for meal
  • Tech
    • Progressive web app
    • Microservices
    • Oracle Cloud
    • Autonomous DB
    • Serverless
    • Micronaut
    • Materialized view
    • ML – test/train data sets

Autonomous Database for Developers – Maria Colgan

  • Many types of database (relational, graph, etc)
  • No DBA support needed
  • Showed wizard to create database. Serverless is an option
  • Automatically identifies and adds missing indexes after confirms they will improve performance
  • Elastic scaling
  • Can clone database with a wizard (with or without data)

My take

Parts of this were interesting. Others felt more like a commercial. I liked the diabetes story. The whole thing captured my attention. It felt like it didn’t fit with the others though. I also noticed a lot of people leaving immediately after Todd’s talk. So it looks like a lot of people came specifically for that. I left before the end of the Autonomous Database section. At the two hour mark of the keynote, I needed to get up!

[2019 oracle code one] CD with Docker and Java

Continuous Delivery with Docker Containers and Java: The Good, the Bad, and the Ugly

Speaker: Daniel Bryant @danielbryantuk

For more blog posts, see The Oracle Code One table of contents



General

  • “Continuous delivery is achieved when stability and speed can satisfy business demand. Discontinuous delivery occurs when stability and speed are insufficient” – Steve Smith @SteveSmithCD
  • Feedback loop
  • Choices are about tradeoffs

Good

  • Dev environment setup can be Dockerized/Containerized
  • Repeatable builds
  • Legacy technology can be sealed

Bad

  • Why is the container image 1GB for a hello world app
  • Dev/test/deploy/loop too long
  • The app runs slow/freezes on Docker

Impact of container tech on CD

  • Install Docker/container on local machine. Important to understand platform deploying to (mechanical sympathy).
  • Store container image, not jar/war
  • Test in container image
  • Container image is single binary – “Build Binaries Only Once (BBOO)”

Lessons

  • Make dev env like prod as much as possible. Use identical base image with same config.
  • Dockerfile content is super important – OS, ports, volumes, JDK
  • Talk to the sysadmin people. Their operational knowledge is invaluable. Avoids both operational and political problems
  • Don’t want JDK in production. [so what use. JRE no longer exists. Can’t use JLink if need Tomcat to run app.
  • Avoid unused Maven dependencies (so smaller]
  • BuildKit – best effort caching
  • Get app/config drift if have different dev/prod containers
  • Use sidecar containers to bundle other things
  • Toolchain may alter when go to container space.
  • Metadata is valuable. Need to know what is running where. Can store in external registry. ex: Artifactory or Nexus
  • Try to do component testing – a few services together
  • Performance – gatling, jmeter, flood.io
  • Security testing – ex: https://find-sec-bugs.github.io
  • Migrate to Java 11 for speed
  • AOT gives performance in short term and JIT in long term
  • Re test app when change any config
  • Set container memory appropriately
  • Dependency check – https://jeremylong.github.io/DependencyCheck/dependency-check-maven/
  • Docker container scanner – https://github.com/arminc/clair-scanner or https://github.com/aquasecurity/microscanner
  • Only thing worse than not using a security tool is using an unmaintained security tool

My take

Good session. The advice covered different levels of problems which was nice. The flowchart was unreadable. I think I got the gist, but it’s hard to get a complex flow on the screen. The rest was clear and I came away with a bunch of stuff to read about

[2019 oracle code one] collections corner cases

Collections Corner Cases

Speaker: Stuart Marks @StuartMarks #CollectionsCornerCases

For more blog posts, see The Oracle Code One table of contents



General

  • Covers things in collections framework a long time. Not well known
  • Good mix of PowerPoint and JShell

JShelll

  • If don’t assign an expression to a variable goes in $1, $2, etc
  • /var $1 – prints type of variable (yes the slash is intentional, it is a JShell command.)
  • /open abc.jshell – “imports” file

View Collections

  • Don’t contain their own elements. Instead the elements are stored elsewhere
  • ex: Arrays.asList(array) – creates list backed by array. If change list, the array gets changed to and vice versa.
  • map.keySet(), map.values() and map.entrySet(). If change these three collections, underlying map changes too.
  • Map.Entry – has setValue() method. Can call setValue() on on entry set to change underlying map

Performance/Clarity

  • values() is O(n) on a Map
  • Creating a temporary HashSet for the values makes in O(1)
  • retailAll() – set intersection
  • Don’t always need streams. [My logic is if you wouldn’t have needed a loop, you don’t need streams]

Sorted Collections & Comparators

  • Interfaces: SortedSet, SortedMap, NavigableSet, NavigableMap
  • Implementations: TreeSet, TreeMap, ConcurrentSkipListSet, ConcurrentSkipListMap
  • Ordering provided by Comparator. Could be natural order or Comparable. May or may not be consistent with equals.
  • HashSet and Set.of() – iteration order undefined. For SortedSet, iteration order is well defined – sorted order
  • Comparator rules
    • <0, 0, >0 for less than, equal and greater than
    • Must provide a total ordering. Any two values must return result
    • reflexive, transitive, etc
  • Spent a while on set vs list (unique elements) – don’t forget what type you are working with
  • HashSet – doesn’t allow duplicates using equals()
  • TreeSet – doesn’t allow duplicates where compare(a,b) ==0
  • String class has built in comparator: String.CASE_INSENSITIVE_ORDER. Inconsistent with equals(). So using case insensitive order with a TreeSet and adding ‘a’ and “A’, doesn’t add ‘A’ to list. Also tree.contains(“A”) returns true if “a” in set. If have HashSet with ‘A’ and TreeSet with ‘a’, tree.equals(hash) returns true but hash.equals(tree) returns false.

My take

I learned something new under 5 minutes in. (keySet()/values() and entrySet() are backed.). I was also pleasantly surprised to learn new shell commands. The rest was good too :).

Also, I was reminded that I hate Map.of(). I fell for misreading them because I didn’t parse properly as alternating keys and values.