The document discusses timezones and internationalization (i18n). It provides background on the history of timezones, how they are defined and formatted, and challenges around timezones like daylight saving time and political changes. It also discusses i18n topics like Unicode, encodings, locales, and using resource bundles to support multiple languages.
Why a whole country skipped a day - Fun with Timezones Kai Koenig
Droidcon UK 2018
The correct handling of timezones and locales is one of the most under-appreciated parts of software development. Commonly known as internationalisation (i18n), a lot of people underestimate the impact that getting it wrong can have for your users as well as your systems.
Drawn from experiences with working on a global network of backend systems, websites and mobile apps in more than 30 locales for the last 10 years, this talk will start with an introduction to the concepts behind time zones and locales.
You’re going to learn about the history of time measurement and time synchronisation and how the world eventually ended up with the global system of time zones of today. Today’s model is full of interesting and sometimes outright bizarre quirks and you’ll look at some of best and worst of them. From there you’ll learn about the ideas behind locales and why cultural context is at least as important as a locale’s common collection of purely technical data such a number formats or text direction. After this, the talk will cover how common runtime environments like Android and Java represent these ideas.
Kotlin Coroutines and Android sitting in a tree - 2018 versionKai Koenig
Since the release of Kotlin 1.1 there is now the language feature of Kotlin Coroutines available for use in Java and Android projects. Coroutines are a new way to write asynchronous and non-blocking code. They can be thought of as light-weight threads without having to deal with all the problems that threads bring to the table.
A lot of developers think that Kotlin Coroutines are mainly or only useful for Kotlin on the JVM, but that’s not true. There are a variety of use cases in which the application of Coroutines can make a lot of sense on Android.
This talk is introducing the ideas behind Kotlin Coroutines, showing how to use them in Kotlin code for both the JVM and Android via the kotlinx-coroutines APIs and then exploring specific applications in Android. Part of this is a deeper look into the use of Coroutines in higher-level frameworks such as AsyncAwait and Anko and how they stack up against other concepts of asynchrony such as rxJava.
Kotlin Coroutines and Android sitting in a treeKai Koenig
Since the release of Kotlin 1.1 there is now the new language feature of Kotlin Coroutines available for use in Java and Android projects. Coroutines are a new way to write asynchronous and non-blocking code. They can be thought of as light-weight threads without having to deal with all the problems that threads bring to the table.
A lot of developers think that Kotlin Coroutines are mainly or only useful for Kotlin on the JVM, but that’s not true. There are a variety of use cases in which the application of Coroutines can make a lot of sense on Android.
This talk is introducing the ideas behind Kotlin Coroutines, showing how to use them in Kotlin code for both the JVM and Android via the kotlinx-coroutines APIs and then exploring specific applications in Android. Part of this is a deeper look into the use of Coroutines in higher-level frameworks such as AsyncAwait and Anko.
Let's talk about code quality.
We all agree that our code needs to be functional so that it meets business requirements. We also should aim for code that is well written and maintainable for future changes. There are a lot of elements playing into that. A well thought system architecture is an important foundation. The selection of an appropriate framework could be the next step. In the end you might look at how to format and write your code on a line-by-line basis.
This talk will provide an introduction into code quality. We will look at various aspects around this term first. From there we can investigate different ways how you can perform code analysis. This will help you measure and understand code quality. There is a range of categories of tools available, some of which also support CFML.
In the second part of the talk we'll look at the details and usage of CFLint. CFLint is a static code analyser for CFML that is based on the CFParser project.
Why a whole country skipped a day - Fun with Timezones Kai Koenig
Droidcon UK 2018
The correct handling of timezones and locales is one of the most under-appreciated parts of software development. Commonly known as internationalisation (i18n), a lot of people underestimate the impact that getting it wrong can have for your users as well as your systems.
Drawn from experiences with working on a global network of backend systems, websites and mobile apps in more than 30 locales for the last 10 years, this talk will start with an introduction to the concepts behind time zones and locales.
You’re going to learn about the history of time measurement and time synchronisation and how the world eventually ended up with the global system of time zones of today. Today’s model is full of interesting and sometimes outright bizarre quirks and you’ll look at some of best and worst of them. From there you’ll learn about the ideas behind locales and why cultural context is at least as important as a locale’s common collection of purely technical data such a number formats or text direction. After this, the talk will cover how common runtime environments like Android and Java represent these ideas.
Kotlin Coroutines and Android sitting in a tree - 2018 versionKai Koenig
Since the release of Kotlin 1.1 there is now the language feature of Kotlin Coroutines available for use in Java and Android projects. Coroutines are a new way to write asynchronous and non-blocking code. They can be thought of as light-weight threads without having to deal with all the problems that threads bring to the table.
A lot of developers think that Kotlin Coroutines are mainly or only useful for Kotlin on the JVM, but that’s not true. There are a variety of use cases in which the application of Coroutines can make a lot of sense on Android.
This talk is introducing the ideas behind Kotlin Coroutines, showing how to use them in Kotlin code for both the JVM and Android via the kotlinx-coroutines APIs and then exploring specific applications in Android. Part of this is a deeper look into the use of Coroutines in higher-level frameworks such as AsyncAwait and Anko and how they stack up against other concepts of asynchrony such as rxJava.
Kotlin Coroutines and Android sitting in a treeKai Koenig
Since the release of Kotlin 1.1 there is now the new language feature of Kotlin Coroutines available for use in Java and Android projects. Coroutines are a new way to write asynchronous and non-blocking code. They can be thought of as light-weight threads without having to deal with all the problems that threads bring to the table.
A lot of developers think that Kotlin Coroutines are mainly or only useful for Kotlin on the JVM, but that’s not true. There are a variety of use cases in which the application of Coroutines can make a lot of sense on Android.
This talk is introducing the ideas behind Kotlin Coroutines, showing how to use them in Kotlin code for both the JVM and Android via the kotlinx-coroutines APIs and then exploring specific applications in Android. Part of this is a deeper look into the use of Coroutines in higher-level frameworks such as AsyncAwait and Anko.
Let's talk about code quality.
We all agree that our code needs to be functional so that it meets business requirements. We also should aim for code that is well written and maintainable for future changes. There are a lot of elements playing into that. A well thought system architecture is an important foundation. The selection of an appropriate framework could be the next step. In the end you might look at how to format and write your code on a line-by-line basis.
This talk will provide an introduction into code quality. We will look at various aspects around this term first. From there we can investigate different ways how you can perform code analysis. This will help you measure and understand code quality. There is a range of categories of tools available, some of which also support CFML.
In the second part of the talk we'll look at the details and usage of CFLint. CFLint is a static code analyser for CFML that is based on the CFParser project.
It's 2017. Kotlin, a great language for the JVM, has been around for more than 6 years now and has changed the way a lot of developers look at the features and evolutionary progress of Java. Kotlin has become a very popular alternative to Java for Android developers and with Kotlin 1.1 being on its way, thing are going to become more exciting.
This talk will start with a brief introduction into Kotlin and its core language features. After this brief foray into concepts like Kotlin's immutable variables, null behaviour and other smarts like the syntactic sugar it provides for dealing with types and properties we'll have a look into what in store for Android developers and into new features in Kotlin 1.1, such as Kotlin Coroutines, Jack support for Android and lots of improvements to the standard library.
Anko - The Ultimate Ninja of Kotlin Libraries?Kai Koenig
Kotlin is a new language for the JVM that aims to be a ””better Java”“. Made in-house by Jetbrains, the company behind IntelliJ IDEA and also Android Studio, it’s been in development for more than 5 years. Just a few weeks ago the final version of Kotlin 1.0 saw the light of day.
The language itself gives one so much niceness and syntactic sugar that you’d probably never want to go back to coding in Java again. Things get even better with Anko. Anko is pretty much the ultimate Ninja of Kotlin libraries. The feature it’s best know for is its Layout DSL that allows one to programatically write UI code in Kotlin. No more XML layout and no awkward piecing together of your UI through clunky Java APIs. We will look at how to use and how to extend the Layout DSL for your own requirements and then move on to Anko’s advanced, non-layout-related features:
- Intent wrappers
- Shortcuts to system services
- Asynchronous task management
- Anko SQLite and more
Coding for Android on steroids with KotlinKai Koenig
Kotlin is a new language for the JVM that aims to be a "better Java". Made in-house by Jetbrains, the company behind IntelliJ IDEA and also Android Studio, it's been in development for more than 5 years. Just a few weeks ago the final version of Kotlin 1.0 saw the light of day.
This talk will start with a brief introduction into Kotlin and its core language features. After this brief foray into concepts like Kotlin's immutable variables, null behaviour and other smarts like the syntactic sugar it provides for dealing with types and properties you'll discover what's in store for Android developers.
Particularly noteworthy are the decrease in annoying Java boilerplate code, fewer of the irritating "Process has stopped unexpectedly" messages and the easily available Kotlin Android Extensions. You will also explore the toolchain and compiler tools Kotlin provides for Android development, the differences to using Kotlin for Java development as well as the integration into Android Studio.
API management with Taffy and API BlueprintKai Koenig
Introduction to API development with Taffy, a developer-friendly and convention-based framework for ColdFusion and Lucee.
Code samples at: https://github.com/TheRealAgentK/taffydemos
Little Helpers for Android Development with KotlinKai Koenig
Kotlin is a new language for the JVM that aims to be a "better Java". Made in-house by Jetbrains, the company behind IntelliJ IDEA and also Android Studio, it's been in development for more than 5 years. Just a few months ago the final version of Kotlin 1.0 saw the light of day.
Starting off with Kotlin for Java development and for Android is actually quite straight forward. There's a lot of well written documentation, there are the Kotlin Koans and blogs seem to pick up Kotlin-related topics more and more. What a lot of people are not aware of though is that there are a bunch of really useful libraries and tools for Kotlin developers, in particular on Android (the most common and well known one being Ando).
This session from Droidcon Germany 2016 in Berlin will start with a quick introduction into Kotlin and its benefits over Java. Then we'll dive into the Kotlin-Android-ecosystem and look at a variety of Kotlin tools and libraries that can make one's life much easier - even to a level going beyond what core Kotlin already has to offer.
A lot of people talk about Data Mining, Machine Learning and Big Data. It clearly must be important, right?
A lot of people are also trying to sell you snake oil - sometimes half-arsed and overpriced products or solutions promising a world of insight into your customers or users if you handover your data to them. Instead, trying to understanding your own data and what you could do with it, should be the first thing you’d be looking at.
In this talk, we’ll introduce some basic terminology about Data and Text Mining as well as Machine Learning and will have a look at what you can on your own to understand more about your data and discover patterns in your data.
An introduction into the Garbage First (G1) garbage collector for the JVM. The session covers general GC concepts, the fundamentals of G1 and how to setup and tune the JVM for G1.
Clojure - an introduction (and some CFML)Kai Koenig
This is a talk I gave at CFCAMP 2012 in Munich. It's an introduction to Clojure for CFML developers and how to leverage Clojure from a CFML developer's point of view.
There are various examples and demo code that's not on the slides, contact me if you're interested in it.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
It's 2017. Kotlin, a great language for the JVM, has been around for more than 6 years now and has changed the way a lot of developers look at the features and evolutionary progress of Java. Kotlin has become a very popular alternative to Java for Android developers and with Kotlin 1.1 being on its way, thing are going to become more exciting.
This talk will start with a brief introduction into Kotlin and its core language features. After this brief foray into concepts like Kotlin's immutable variables, null behaviour and other smarts like the syntactic sugar it provides for dealing with types and properties we'll have a look into what in store for Android developers and into new features in Kotlin 1.1, such as Kotlin Coroutines, Jack support for Android and lots of improvements to the standard library.
Anko - The Ultimate Ninja of Kotlin Libraries?Kai Koenig
Kotlin is a new language for the JVM that aims to be a ””better Java”“. Made in-house by Jetbrains, the company behind IntelliJ IDEA and also Android Studio, it’s been in development for more than 5 years. Just a few weeks ago the final version of Kotlin 1.0 saw the light of day.
The language itself gives one so much niceness and syntactic sugar that you’d probably never want to go back to coding in Java again. Things get even better with Anko. Anko is pretty much the ultimate Ninja of Kotlin libraries. The feature it’s best know for is its Layout DSL that allows one to programatically write UI code in Kotlin. No more XML layout and no awkward piecing together of your UI through clunky Java APIs. We will look at how to use and how to extend the Layout DSL for your own requirements and then move on to Anko’s advanced, non-layout-related features:
- Intent wrappers
- Shortcuts to system services
- Asynchronous task management
- Anko SQLite and more
Coding for Android on steroids with KotlinKai Koenig
Kotlin is a new language for the JVM that aims to be a "better Java". Made in-house by Jetbrains, the company behind IntelliJ IDEA and also Android Studio, it's been in development for more than 5 years. Just a few weeks ago the final version of Kotlin 1.0 saw the light of day.
This talk will start with a brief introduction into Kotlin and its core language features. After this brief foray into concepts like Kotlin's immutable variables, null behaviour and other smarts like the syntactic sugar it provides for dealing with types and properties you'll discover what's in store for Android developers.
Particularly noteworthy are the decrease in annoying Java boilerplate code, fewer of the irritating "Process has stopped unexpectedly" messages and the easily available Kotlin Android Extensions. You will also explore the toolchain and compiler tools Kotlin provides for Android development, the differences to using Kotlin for Java development as well as the integration into Android Studio.
API management with Taffy and API BlueprintKai Koenig
Introduction to API development with Taffy, a developer-friendly and convention-based framework for ColdFusion and Lucee.
Code samples at: https://github.com/TheRealAgentK/taffydemos
Little Helpers for Android Development with KotlinKai Koenig
Kotlin is a new language for the JVM that aims to be a "better Java". Made in-house by Jetbrains, the company behind IntelliJ IDEA and also Android Studio, it's been in development for more than 5 years. Just a few months ago the final version of Kotlin 1.0 saw the light of day.
Starting off with Kotlin for Java development and for Android is actually quite straight forward. There's a lot of well written documentation, there are the Kotlin Koans and blogs seem to pick up Kotlin-related topics more and more. What a lot of people are not aware of though is that there are a bunch of really useful libraries and tools for Kotlin developers, in particular on Android (the most common and well known one being Ando).
This session from Droidcon Germany 2016 in Berlin will start with a quick introduction into Kotlin and its benefits over Java. Then we'll dive into the Kotlin-Android-ecosystem and look at a variety of Kotlin tools and libraries that can make one's life much easier - even to a level going beyond what core Kotlin already has to offer.
A lot of people talk about Data Mining, Machine Learning and Big Data. It clearly must be important, right?
A lot of people are also trying to sell you snake oil - sometimes half-arsed and overpriced products or solutions promising a world of insight into your customers or users if you handover your data to them. Instead, trying to understanding your own data and what you could do with it, should be the first thing you’d be looking at.
In this talk, we’ll introduce some basic terminology about Data and Text Mining as well as Machine Learning and will have a look at what you can on your own to understand more about your data and discover patterns in your data.
An introduction into the Garbage First (G1) garbage collector for the JVM. The session covers general GC concepts, the fundamentals of G1 and how to setup and tune the JVM for G1.
Clojure - an introduction (and some CFML)Kai Koenig
This is a talk I gave at CFCAMP 2012 in Munich. It's an introduction to Clojure for CFML developers and how to leverage Clojure from a CFML developer's point of view.
There are various examples and demo code that's not on the slides, contact me if you're interested in it.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
4. Kai Koenig
Working with CFML since 1999
Developing for mobile since 2003
Recovering Flex developer being sucked into JS deeper and deeper
Recently rediscovered Functional Programming and sometimes
enjoy dabbling with formal aspects of computer science
bloginblack.de
2ddu.com
twitter.com/agentK
Monday, 14 October 13
6. Motivational Speech
•
•
The world is larger than you might think
People...
...live in different places, speak and read diffent
scripts
•
Monday, 14 October 13
•
...have and are used to different cultures - those
might be significantly different from what one is
used to him- or herself
7. Examples?
• Time, Timezones, Boundaries, DST
• Text, Languages, Translations, Reading Dir
• Cultures: meaning of colours, images,
artwork, social context
Monday, 14 October 13
8. i18n,l10n,g11n
• i18n - internationalisation
• designing software so that it can be
adapted to various languages
• l10n - localisation
• adapting software for region, time,
language etc
• g11n - globalisation
Monday, 14 October 13
11. What is time and what
are timezones?
Monday, 14 October 13
12. History
• Before clocks, people marked the time
based on the sun.
• Later with mechanical clocks: apparent vs
mean solar time.
• Railroad time - travel and communication
made solar time awkward.
Monday, 14 October 13
13. History
• Greenwich Mean Time (GMT) - started
1675 as a local solar time
• Railway companies started to use GMT
with portable chronometers since the
1840s.
• Time zones were a compromise.
Monday, 14 October 13
14. History
• November 1868: New Zealand Mean Time
(GMT+11:30)
• Late 1860s/1870s-1900: USA introduce
Railroad times, 4 major time zones
Monday, 14 October 13
15. History
• Worldwide time zones: Italian
mathematician Filopanti suggested a 24hr
time zone system centered in Rome (1858)
• By ~1900 most of Earth had standard time
zones, not necessarily in brackets of one
hour
• Today: Full hour, 1/2 hour and 1/4 hour time
zones
• Also: politics play a big part
Monday, 14 October 13
16. GMT vs UTC
• GMT: Mean solar time at the meridian
passing through the Royal Observatory in
Greenwich
• UTC: Atomic time that includes leap
seconds, guaranteed to always be within 0.9
seconds of the old GMT
• UTC is known as Zulu time
• Fun fact: Earth’s rotation is slowing - we
need more leap seconds!
Monday, 14 October 13
17. Each timezone is 15 degrees longitude wide.
Monday, 14 October 13
18. Time formats
• 09:30 UTC would usually be 09:30Z or
0930Z
• 14:45:15 UTC -> 14:45:15Z or 144515Z
• Offsets:
• +/-03:00 or +/-0300 or +/-03
• Stuff like MEST, NZDT, BST etc are made
up and not standardised.
Monday, 14 October 13
19. Timezones in Java
• TZ Database: IANA Time Zone Database
(http://en.wikipedia.org/wiki/Tz_database)
• Set of text files that can be read and used
with the right tools. It’s safe to assume you
don’t have those tools and don’t care.
• A JVM comes with a copy of the TZ
Database built-in.
Monday, 14 October 13
20. Timezones in Java
• It contains historic and current information
on timezones for various locations at any
time of the year.
• More: http://www.oracle.com/technetwork/
java/javase/timezones-137583.html
Monday, 14 October 13
21. Updating TZ data
• It’s important to update your JVM’s
timezone database regularly.
• Time legislation changes over the years:
• DST start/end dates
• Political changes
• Example: CF 9 shipped with Java 1.6.0_10
--- that’s time zone data from 2008
(v2008c)
Monday, 14 October 13
22. Oddities
• Samoa skipped 30/12/2011.
Why - any guesses?
• While doing that, they also
changed from driving on the
right-hand side of the road
to the left-hand side.
• Tokelau copied their move a
year later.
Monday, 14 October 13
27. Other Oddities
• Russia changed all their timezones in 2010
and again in 2011 - created a huge issue for
a lot of the users of one of my clients
(Russian/Ukrainian-focussed sites).
• Fun fact: Railway timetables in Russia are
always in Moscow time. Airport data is in
local time.
• The International Space Station uses UTC.
Monday, 14 October 13
28. Daylight Savings
• DST occurs when a country/region decides
to wind their clocks forward one hour to
make most of the available sunlight.
• Lord Howe (AU) has a DST of +0030
• Some other areas in Australia ignore DST mainly West Australia and Queensland --too many farmers.
Monday, 14 October 13
29. Time and CFML/JS
• CFML: Use Paul Hastings’ TZ CFC
• JS: http://pellepim.bitbucket.org/jstz
• The main issue in the JS world is
detecting DST properly
Monday, 14 October 13
30. i18n and Unicode
• The problem of i18n is reasonably solved –
a good part of the solution is Unicode
• Joel Spolsky in 2003: “If you are a
programmer working in 2003 and you don't
know the basics of characters, character
sets, encodings, and Unicode, and I catch
you, I'm going to punish you by making you
peel onions for 6 months in a submarine. I
swear I will.”
Monday, 14 October 13
31. Unicode in 1 slide
• Concept of “platonic letters”. A is different
from a or B, but not from A.
• Every platonic letter has a magic number
(code point): U+0639
• U+0048 U+0065 U+006C U+006C U
+006F
Monday, 14 October 13
32. Encodings in 1 slide
•
•
•
•
00 48 00 65 00 6C 00 6C 00 6F
•
•
There are more: UTF-16, UTF-7, UCS-2, UCS-4
Monday, 14 October 13
48 00 65 00 6C 00 6C 00 6F 00
Unicode BOM designator: FE FF or FF FE
UTF-8: System to store Unicode in 8 bit bytes
(code points 0-127 are identical to US-ASCII), 1-4
octets depending on the platonic letter
Important message here: There shouldn’t be any
text without encoding information floating
around…
33. Encodings and web
• Does that sound familiar?
• “I’ve got question marks on your
website.”
• “Where do those boxes come from?”
• How do we work with encodings on the
web?
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8”>
Monday, 14 October 13
34. Encodings & CFML
• Railo and ACF support Unicode and
UTF-8. But there’s more to it – how about
your DB content?
• i18n has a larger scope than just CFML !!!
Monday, 14 October 13
35. Encodings & CFML
• Best practice: Use UTF-8 encoding
• If you have to read non-standard encoded
content, use the following:
• <cfprocessingdirective
pageencoding=“utf-8“>
• Unfortunately you’d have to put it on every
single page…
Monday, 14 October 13
36. Encodings & CFML
• Some more concerns:
• Non-default output: <cfcontent
type="text/html; charset=iso-8859-1">
• Form/URL-Scope: setEncoding("URL",
"utf-8")
• Various tags support encoding
information: <cffile> etc.
Monday, 14 October 13
37. Locales
• A locale is a set of parameters that defines
the user's language, country and any special
variant preferences that the user wants to
see in their user interface. Usually a locale
identifier consists of at least a language
identifier and a region identifier.
• Java: de_DE, en_AU, en_NZ, de_CH,
mi_NZ etc..
Monday, 14 October 13
38. Locales
• Locale “stack”:
• The operating system provides a system
locale
• JVM under the hood picks up the locale
of the OS – unless you provide a different
locale at start-up of your JVM instance
• JVM: -Duser.language=de -Duser.region=DE
Monday, 14 October 13
39. Resource Bundles
• Preparing your code for using RBs is a defacto standard approach of implementing
locales and building i18n apps.
• Creating RB for different locales would be
considered to be a l10n task.
Monday, 14 October 13
40. Resource Bundles
• …are not much more than POTFs (identified
via locales):
#RB: testJavaRB.properties
Cancel=Cancel
Go=Ok
#RB: testJavaRB_th_TH.properties
Cancel=u0E22u0E01u0E40u0E25u0E34u0E01
Go=u0E44u0E1B
Monday, 14 October 13
41. Resource Bundles in
CFML
• No need to re-invent the wheel. Paul
Hastings (http://www.sustainablegis.com/
things.cfm) has ported a lot of Java-based
RB-related solutions over to CFML.
• Lots of other i18n- and GIS-related work,
too!
Monday, 14 October 13
44. Get in touch
Twitter: @AgentK
Blog: http://bloginblack.de
Podcast (2 Developers Down Under): http://2ddu.com
About me: http://about.me/agentk
Monday, 14 October 13