Internationalization in Ruby 2.4

Total Page:16

File Type:pdf, Size:1020Kb

Internationalization in Ruby 2.4 Internationalization in Ruby 2.4 http://www.sw.it.aoyama.ac.jp/2016/pub/IUC40-Ruby2.4/ 40th Internationalization and Unicode Conference Santa Clara, California, U.S.A., November 3, 2016 Martin J. DÜRST [email protected] Aoyama Gakuin University © 2016 Martin J. Dürst, Aoyama Gakuin University Abstract Ruby is a purely object-oriented scripting language which is easy to learn for beginners and highly appreciated by experts for its productivity and depth. This presentation discusses the progress of adding internationalization functionality to Ruby for the version 2.4 release expected towards the end of 2016. One focus of the talk will be the currently ongoing implementation of locale-aware case conversion. Since Ruby 1.9, Ruby has a pervasive if somewhat unique framework for character encoding, allowing different applications to choose different internationalization models. In practice, Ruby is most often and most conveniently used with UTF-8. Support for internationalization facilities beyond character encoding has been available via various external libraries. As a result, applications may use conflicting and confusing ways to invoke internationalization functionality. To use case conversion as an example, up to version 2.3, Ruby comes with built-in methods for upcasing and downcasing strings, but these only work on ASCII. Our implementation extends this to the whole Unicode range for version 2.4, and efficiently reuses data already available for case-sensitive matching in regular expressions. We study the interface of internationalization functions/methods in a wide range of programming languages and Ruby libraries. Based on this study, we propose to extend the current built-in Ruby methods, e.g. for case conversion, with additional parameters to allow language-dependent, purpose-based, and explicitly specified functionality, in a true Ruby way. Both the design as well as the implementation of the new functionality for Ruby 2.4 will be described. This presentation is intended for users and potential users of the programming language Ruby, and people interested in internationalization of programming languages and libraries in general. For Best Viewing These slides have been created in HMTL, for projection with Opera (≤12.17 Windows/Mac/Linux). Use F11 to switch to projection mode and back. Texts in gray, like this one, are comments/notes which do not appear on the slides. Please note that depending on the browser and OS you use, some rare characters or special character combinations may not display as intended, but e.g. as empty boxes, question marks, or apart rather than composed. Introduction Introductions Audience: Programming experience? Programming with Ruby/Rails? Internationalization/Globalization experience? Unicode knowledge? Speaker: From Switzerland, living in Japan Long-term Unicode/W3C/IUC involvement Ruby committer since 2007, mainly contributing Encoding conversion (String#encode, Ruby 1.9) Unicode normalization (String#unicode-normalize, Ruby 2.2) Non-ASCII case conversion (String#upcase,..., Ruby 2.4) Unicode version updates (Unicode 9.0 for Ruby 2.4) Overview Introduction Ruby Basics New in Ruby 2.4: Non-ASCII Case Conversion Implementation Details Lessons Learned and Future Work Ruby Basics Ruby Created by Yukihiro Matsumoto (Matz; since 1993) Easy for beginners, deep for experts Object-oriented throughout, but not obtrusive Extremely flexible Particularly strong for (internal) DSLs and metaprogramming Used for Ruby on Rails Web Framework Ruby Implementations MRI (Matz's Ruby Implementation), aka C-Ruby available on many platforms (download for Windows) JRuby: Ruby on the JVM RubyMotion: Ruby for IOS, Android, and MacOS Opal: Ruby to JavaScript compiler Rubinius: Ruby (mostly) in Ruby A lot more ... This tutorial is about MRI/C-Ruby, the reference implementation Basic Ruby 3.times { puts 'Hello Ruby!' } Hello Ruby! Hello Ruby! Hello Ruby! Everything is an object Methods can take blocks ({ ... } or do ... end) Unobtrusive syntax (no need for semicolons, ...) Conventions Used in This Talk Code is mostly green, monospace puts 'Hello Ruby!' Variable parts are orange puts "some string" Encoding is indicated with a subscript 코 'Юに δ'UTF-8, 'ユニコード'SJIS Results are indicated with " " 1 + 1 2 코 Frequent Example Юに δ Ю: Cyrillic uppercase YU に: Hiragana NI 코: Hangul KO δ: Greek delta Up and Running Install Ruby Open a UTF-8 based console Easy on Mac and Linux On Windows: Cygwin Terminal, PuTTY, ..., or command prompt with chcp 65001 Start irb (Interactive Ruby) Type in Ruby commands String Basics Strings are sequences of characters: (codepoints) 코 "Юに δ".length 4 We can get a byte count with: 코 "Юに δ".bytesize 10 They are instances of class String: 코 "Юに δ".class String Characters are strings of length 1: 코 "Юに δ"[0] "Ю"; 코 "Юに δ"[0].length 1 Using the same class for both strings and characters avoids the distinction between characters and strings of length 1. This matches Ruby's "big classes" policy. It also leaves the door open for 'characters' other than single codepoints. Strings are not Arrays, but where it makes sense, operations work the same for both classes. This is called duck typing. Encoding Basics Earch String has an encoding Strings with different encodings can't be mixed 코 코 'Юに δ'UTF-8 + 'Юに δ'UTF-16 Encoding::CompatibilityError Trying to combine strings with different encodings, as here with concatenation (+), leads to an exception. There are some exceptions (sic!) to this rule that we will look at later. The reasoning for the error here is that transcoding should not happen without the programmer being aware of it. 'Dürst'ISO-8859-1 == 'Dürst'ISO-8859-2 false Trying to compare two character-by-character identical strings in different encodings will produce false, even if these strings are, as in the above example, also byte-for-byte identical. Again, the reason for the result is that encoding mismatches should be detected early. In addition, a simple byte-for-byte comparison could produce false positives. except if their content is ASCII-only (bytes) 'abc'ISO-8859-1 == 'abc'Shift_JIS true Just use Unicode, just use UTF-8 Ruby Likes UTF-8 Default for source encoding (since Ruby 2.0) (no need for # encoding UTF-8 encoding pragma) Encoding of strings with \u escapes is always UTF-8 "abc\u03B4" 'abcδ'UTF-8 Use -U option if not in an UTF-8 context: ruby -U myscript.rb Processing of UTF-8 is optimized where possible Used out of the box by Ruby on Rails Transcoding available on input/output The only (internal) encoding in Ruby 3.0 or 4.0 (speculation!) Ruby Versions Ruby ≤1.8: RIP (Strings as byte sequences) Ruby 1.9 and later (Strings as character sequences) Ruby 2.0: UTF-8 default source encoding Ruby 2.2: Unicode normalization added (2014) Ruby 2.3: Newest published version Ruby 2.4: Release planned for Christmas 2016, non-ASCII case conversion Ruby Versions and Unicode Versions Year (y) Ruby version (VRuby) Unicode version (VUnicode) published around Christmas published in Summer 2014 2.2 7.0.0 2015 2.3 8.0.0 2016 2.4 9.0.0 A note about Ruby versions and Unicode versions: The Ruby core team is very conservative (in my view too conservative) in introducing new Unicode versions as bug fixes. Update to new Unicode versions therefore only happens for new Ruby versions. RbConfig::CONFIG["UNICODE_VERSION"] '9.0.0' VUnicode = y - 2007 VRuby = 1.5 + VUnicode · 0.1 VUnicode = VRuby · 10 - 15 Don't extrapolate too far! New in Ruby 2.4: Non-ASCII Case Conversion Case Conversions Functions in Ruby 'Unicode Everywhere'.upcase 'UNICODE EVERYWHERE' 'Unicode Everywhere'.downcase 'unicode everywhere' 'Unicode Everywhere'.capitalize 'Unicode everywhere' 'Unicode Everywhere'.swapcase 'uNICODE eVERYWHERE' Case Conversion in Ruby 2.3 'Résumé ĭñŧėřŋãţijňőńæłĩżàťïōņ'.upcase 'RéSUMé ĭñŧėřŋãţijňőńæłĩżàťïōņ' Case Conversions NOT in Ruby 2.3 'Résumé ĭñŧėřŋãţijňőńæłĩżàťïōņ'.upcase 'RÉSUMÉ ĬÑŦĖŘŊÃŢIJŇŐŃÆŁĨŻÀŤÏŌŅ' Case Conversion up to and including Ruby 2.3 is ASCII-only! Case Conversions NOT in Ruby 2.3 'Résumé ĭñŧėřŋãţijňőńæłĩżàťïōņ'.upcase 'RÉSUMÉ ĬÑŦĖŘŊÃŢIJŇŐŃÆŁĨŻÀŤÏŌŅ' But in Ruby 2.4! Case Conversion Around the World Many more Latin letters than just A-Z Other scripts: Cyrillic, Greek Coptic, Armenian [, Georgian] Cherokee, Deseret, Osage Old Hungarian, Warang Citi, Glagolitic, Adlam More minority scripts may introduce case distinction from surrounding majority scripts Case Distinction History Originally: Style difference, depending on medium Upper case for stone inscriptions (SPQR) Lower case for wax tablets,...? Functional distinction since ~15th century Modern Case Usage (details vary by language) ALL UPPER CASE EMPHASIS Acronyms, abbreviations (DRY, SQL) First letter upper case Start of sentence Words in titles Proper nouns/adjectives (Kyoto, Japanese) Nouns Honorifics Lower case: everything else German: der Gefangene floh - the prisoner fled, but der gefangene Floh - the captive flea Isn't ASCII-only Case Conversion Enough? Already in other languages (Python, Perl, Java, ...) Already in Ruby (Regexp: //i) Algorithms and data is available from Unicode Consortium It's a good idea in general But: Backwards Compatibility? Idea: Option for new functionality 'Résumé'.upcase 'RéSUMé' 'Résumé'.upcase :unicode 'RÉSUMÉ' Matz felt option was not necessary Lots of data is ASCII-only For non-ASCII data, you hopefully used a gem (which you can now eliminate) Check early grep your code base for upcase and friends Test early (preview 2 of Ruby 2.4) Backwards Compatibility Problems Explicit ASCII-only case conversion E.g. DNS servers
Recommended publications
  • This Document Serves As a Summary of the UC Berkeley Script Encoding Initiative's Recent Activities. Proposals Recently Submit
    L2/11‐049 TO: Unicode Technical Committee FROM: Deborah Anderson, Project Leader, Script Encoding Initiative, UC Berkeley DATE: 3 February 2011 RE: Liaison Report from UC Berkeley (Script Encoding Initiative) This document serves as a summary of the UC Berkeley Script Encoding Initiative’s recent activities. Proposals recently submitted to the UTC that have involved SEI assistance include: Afaka (Everson) [preliminary] Elbasan (Everson and Elsie) Khojki (Pandey) Khudawadi (Pandey) Linear A (Everson and Younger) [revised] Nabataean (Everson) Woleai (Everson) [preliminary] Webdings/Wingdings Ongoing work continues on the following: Anatolian Hieroglyphs (Everson) Balti (Pandey) Dhives Akuru (Pandey) Gangga Malayu (Pandey) Gondi (Pandey) Hungarian Kpelle (Everson and Riley) Landa (Pandey) Loma (Everson) Mahajani (Pandey) Maithili (Pandey) Manichaean (Everson and Durkin‐Meisterernst) Mende (Everson) Modi (Pandey) Nepali script (Pandey) Old Albanian alphabets Pahawh Hmong (Everson) Pau Cin Hau Alphabet and Pau Cin Hau Logographs (Pandey) Rañjana (Everson) Siyaq (and related symbols) (Pandey) Soyombo (Pandey) Tani Lipi (Pandey) Tolong Siki (Pandey) Warang Citi (Everson) Xawtaa Dorboljin (Mongolian Horizontal Square script) (Pandey) Zou (Pandey) Proposals for unencoded Greek papyrological signs, as well as for various Byzantine Greek and Sumero‐Akkadian characters are being discussed. A proposal for the Palaeohispanic script is also underway. Deborah Anderson is encouraging additional participation from Egyptologists for future work on Ptolemaic signs. She has received funding from the National Endowment for the Humanities and support from Google to cover work through 2011. .
    [Show full text]
  • Cross-Platform Mobile Software Development with React Native Pages and Ap- Pendix Pages 27 + 0
    Cross-platform mobile software development with React Native Janne Warén Bachelor’s thesis Degree Programme in ICT 2016 Abstract 9.10.2016 Author Janne Warén Degree programme Business Information Technology Thesis title Number of Cross-platform mobile software development with React Native pages and ap- pendix pages 27 + 0 The purpose of this study was to give an understanding of what React Native is and how it can be used to develop a cross-platform mobile application. The study explains the idea and key features of React Native based on source literature. The key features covered are the Virtual DOM, components, JSX, props and state. I found out that React Native is easy to get started with, and that it’s well-suited for a web programmer. It makes the development process for mobile programming a lot easier com- pared to traditional native approach, it’s easy to see why it has gained popularity fast. However, React Native still a new technology under rapid development, and to fully under- stand what’s happening it would be good to have some knowledge of JavaScript and per- haps React (for the Web) before jumping into React Native. Keywords React Native, Mobile application development, React, JavaScript, API Table of contents 1 Introduction ..................................................................................................................... 1 1.1 Goals and restrictions ............................................................................................. 1 1.2 Definitions and abbreviations ................................................................................
    [Show full text]
  • Final Proposal for Encoding the Warang Citi Script in the SMP of The
    JTC1/SC2/WG2 N4259 L2/12-118 2012-04-19 Universal Multiple-Octet Coded Character Set International Organization for Standardization Organisation Internationale de Normalisation Международная организация по стандартизации Doc Type: Working Group Document Title: Final proposal for encoding the Warang Citi script in the SMP of the UCS Source: UC Berkeley Script Encoding Initiative (Universal Scripts Project) Author: Michael Everson Status: Liaison Contribution Action: For consideration by JTC1/SC2/WG2 and UTC Replaces: N1958 (1999-01-29), N3411 (2008-04-08), N3668 (2009-08-05) Date: 2012-04-19 1. Introduction. The Warang Citi script is used to write the Ho language. Ho is a North Munda language, which family, together with the Mon-Khmer languages, makes up Austro-Asiatic. Warang Citi was devised by charismatic community leader Lako Bodra as part of a comprehensive cultural program, and was offered as an improvement over scripts used by Christian missionary linguists. Ho people live in the Indian states of Orissa and Jharkand. In Jharkand, they are found in Ranchi, Chaibasa and Jamshedpur, and in villages like Pardsa, Jaldhar, Tekasi, Tilupada, Baduri, Purtydigua, Roladih, Tupu Dana, Jetia, Dumbisai, Harira, Gitilpi, Karlajuri, Sarliburu, Narsana, Gidibas Kokcho, Lupungutu, Pandaveer, Jhinkapani, Kondwa. According to the SIL Ethnologue, there are 1,026,000 speakers of Ho. There are at present two publications in the script: a magazine Ho Sanagam (‘meeting’ from Hindi saṅgam), which comes out yearly and Kolhan Sakam, which comes out biweekly. Today, the Ho community can be characterized as still a primarily oral community, with an emergent literary tradition. Many Ho do not write their language in any form.
    [Show full text]
  • ONIX for Books Codelists Issue 40
    ONIX for Books Codelists Issue 40 23 January 2018 DOI: 10.4400/akjh All ONIX standards and documentation – including this document – are copyright materials, made available free of charge for general use. A full license agreement (DOI: 10.4400/nwgj) that governs their use is available on the EDItEUR website. All ONIX users should note that this is the fourth issue of the ONIX codelists that does not include support for codelists used only with ONIX version 2.1. Of course, ONIX 2.1 remains fully usable, using Issue 36 of the codelists or earlier. Issue 36 continues to be available via the archive section of the EDItEUR website (http://www.editeur.org/15/Archived-Previous-Releases). These codelists are also available within a multilingual online browser at https://ns.editeur.org/onix. Codelists are revised quarterly. Go to latest Issue Layout of codelists This document contains ONIX for Books codelists Issue 40, intended primarily for use with ONIX 3.0. The codelists are arranged in a single table for reference and printing. They may also be used as controlled vocabularies, independent of ONIX. This document does not differentiate explicitly between codelists for ONIX 3.0 and those that are used with earlier releases, but lists used only with earlier releases have been removed. For details of which code list to use with which data element in each version of ONIX, please consult the main Specification for the appropriate release. Occasionally, a handful of codes within a particular list are defined as either deprecated, or not valid for use in a particular version of ONIX or with a particular data element.
    [Show full text]
  • Debugging at Full Speed
    Debugging at Full Speed Chris Seaton Michael L. Van De Vanter Michael Haupt Oracle Labs Oracle Labs Oracle Labs University of Manchester michael.van.de.vanter [email protected] [email protected] @oracle.com ABSTRACT Ruby; D.3.4 [Programming Languages]: Processors| Debugging support for highly optimized execution environ- run-time environments, interpreters ments is notoriously difficult to implement. The Truffle/- Graal platform for implementing dynamic languages offers General Terms an opportunity to resolve the apparent trade-off between Design, Performance, Languages debugging and high performance. Truffle/Graal-implemented languages are expressed as ab- Keywords stract syntax tree (AST) interpreters. They enjoy competi- tive performance through platform support for type special- Truffle, deoptimization, virtual machines ization, partial evaluation, and dynamic optimization/deop- timization. A prototype debugger for Ruby, implemented 1. INTRODUCTION on this platform, demonstrates that basic debugging services Although debugging and code optimization are both es- can be implemented with modest effort and without signifi- sential to software development, their underlying technolo- cant impact on program performance. Prototyped function- gies typically conflict. Deploying them together usually de- ality includes breakpoints, both simple and conditional, at mands compromise in one or more of the following areas: lines and at local variable assignments. The debugger interacts with running programs by insert- • Performance: Static compilers
    [Show full text]
  • Shaunak Vairagare Shaunakv1 
    [email protected] Shaunak Vairagare shaunakv1 GIS Web Developer 832-603-9023 1000 Bonieta Harrold Dr #12106 Charleston SC 29414 Innovative software engineer offering eight plus years of experience in Web development and GIS involving full software development lifecycle – from concept through delivery of next- generation applications and customizable solutions. Expert in advanced development methodologies tools and processes. Strong OOP and Design Patterns skills. Deep understanding of OOAD and Agile software development. Creative problem solver and experience in designing software work-flows for complex Geo- spatial applications on web, desktop and mobile platforms. Technical Skills Front End HTML 5, CSS 3, JavaScript, Angular, D3 GIS Servers GeoServer, ArcGIS Server Front End Tools Yeoman, Grunt, Bower Map API OpenLayers, Leaflet, TileMill, Google Maps, BingMaps Web Development Node.js, Ruby on Rails, Spring ESRI ArcGIS Rest, Image Services DevOps Capistrano, Puppet, AWS Stack, Heroku OGC WMS, WFS, GeoJSON, GML, KML, GeoRSS Database MongoDB, MySQL, PostgreSQL, SQL Server GIS Tools ArcGIS, FME, GDAL, LibLAS, Java Topology Suite Servers Apache2, Phusion Passenger, Tomcat GIS Data LiDAR, GeoTIFF, LAS, ShapeFile, GDF Mobile Web PhoneGap , jQuery Mobile, Sencha Touch Carto Databases PostgreSQL/PostGIS , SQL Server Spatial Mobile Native iOS, RubyMotion Data Formats Tele Atlas, NavTeq, Lead Dog, Map My India Languages Ruby, Node.js, Python, Java, ObjectiveC Process & Tools JIRA, Jenkins, Bamboo Work Experience (8+ years)
    [Show full text]
  • Specialising Dynamic Techniques for Implementing the Ruby Programming Language
    SPECIALISING DYNAMIC TECHNIQUES FOR IMPLEMENTING THE RUBY PROGRAMMING LANGUAGE A thesis submitted to the University of Manchester for the degree of Doctor of Philosophy in the Faculty of Engineering and Physical Sciences 2015 By Chris Seaton School of Computer Science This published copy of the thesis contains a couple of minor typographical corrections from the version deposited in the University of Manchester Library. [email protected] chrisseaton.com/phd 2 Contents List of Listings7 List of Tables9 List of Figures 11 Abstract 15 Declaration 17 Copyright 19 Acknowledgements 21 1 Introduction 23 1.1 Dynamic Programming Languages.................. 23 1.2 Idiomatic Ruby............................ 25 1.3 Research Questions.......................... 27 1.4 Implementation Work......................... 27 1.5 Contributions............................. 28 1.6 Publications.............................. 29 1.7 Thesis Structure............................ 31 2 Characteristics of Dynamic Languages 35 2.1 Ruby.................................. 35 2.2 Ruby on Rails............................. 36 2.3 Case Study: Idiomatic Ruby..................... 37 2.4 Summary............................... 49 3 3 Implementation of Dynamic Languages 51 3.1 Foundational Techniques....................... 51 3.2 Applied Techniques.......................... 59 3.3 Implementations of Ruby....................... 65 3.4 Parallelism and Concurrency..................... 72 3.5 Summary............................... 73 4 Evaluation Methodology 75 4.1 Evaluation Philosophy
    [Show full text]
  • Name Hierarchy Methods Enums and Flags
    Pango::Gravity(3pm) User Contributed Perl Documentation Pango::Gravity(3pm) NAME Pango::Gravity − represents the orientation of glyphs in a segment of text HIERARCHY Glib::Enum +−−−−Pango::Gravity METHODS gravity = Pango::Gravity::get_for_matrix ($matrix) • $matrix (Pango::Matrix) gravity = Pango::Gravity::get_for_script ($script, $base_gravity, $hint) • $script (Pango::Script) • $base_gravity (Pango::Gravity) • $hint (Pango::GravityHint) boolean = Pango::Gravity::is_vertical ($gravity) • $gravity (Pango::Gravity) double = Pango::Gravity::to_rotation ($gravity) • $gravity (Pango::Gravity) ENUMS AND FLAGS enum Pango::Gravity • ’south’ / ’PANGO_GRAVITY_SOUTH’ • ’east’ / ’PANGO_GRAVITY_EAST’ • ’north’ / ’PANGO_GRAVITY_NORTH’ • ’west’ / ’PANGO_GRAVITY_WEST’ • ’auto’ / ’PANGO_GRAVITY_AUTO’ enum Pango::GravityHint • ’natural’ / ’PANGO_GRAVITY_HINT_NATURAL’ • ’strong’ / ’PANGO_GRAVITY_HINT_STRONG’ • ’line’ / ’PANGO_GRAVITY_HINT_LINE’ enum Pango::Script • ’invalid−code’ / ’PANGO_SCRIPT_INVALID_CODE’ • ’common’ / ’PANGO_SCRIPT_COMMON’ • ’inherited’ / ’PANGO_SCRIPT_INHERITED’ • ’arabic’ / ’PANGO_SCRIPT_ARABIC’ • ’armenian’ / ’PANGO_SCRIPT_ARMENIAN’ • ’bengali’ / ’PANGO_SCRIPT_BENGALI’ • ’bopomofo’ / ’PANGO_SCRIPT_BOPOMOFO’ • ’cherokee’ / ’PANGO_SCRIPT_CHEROKEE’ • ’coptic’ / ’PANGO_SCRIPT_COPTIC’ • ’cyrillic’ / ’PANGO_SCRIPT_CYRILLIC’ • ’deseret’ / ’PANGO_SCRIPT_DESERET’ • ’devanagari’ / ’PANGO_SCRIPT_DEVANAGARI’ • ’ethiopic’ / ’PANGO_SCRIPT_ETHIOPIC’ • ’georgian’ / ’PANGO_SCRIPT_GEORGIAN’ perl v5.28.0 2018-10-29 1 Pango::Gravity(3pm) User Contributed
    [Show full text]
  • Multilingual Conversation Ascii to Unicode in Indic Script
    MULTILINGUAL CONVERSATION ASCII TO UNICODE IN INDIC SCRIPT Dr. Rajwinder Singh 1 and Charanjiv Singh Saroa 2 1Department of Punjabi, Punjabi University, Patiala, India 2Department of Computer Engraining, Punjabi University Patiala, India ABSTRACT In this paper we discuss the various ASCII based scripts that are made for Indian languages and the problems associated with these types of scripts. Then we will discuss the solution we suggest to overcome these problems in the form of “Multilingual ASCII to Unicode Converter”. We also explain the need of regional languages for the development of a person. This paper also contains information of UNICODE and various other issues related to regional languages. KEYWORDS Keywords: NLP, Punjabi, Mother Tongue, Gurmukhi, Font Conversion, UNICODE, ASCII, Keyboard Layout. 1. INTRODUCTION According UNESCO reports About half of the 6,000 or so languages spoken in the world are under threat. Over the past three centuries, languages have died out and disappeared at a dramatic and steadily increasing pace, especially in the Americas and Australia. Today at least 3,000 tongues are endangered, seriously endangered or dying in many parts of the world. [1] A language disappears when its speakers disappear or when they shift to speaking another language. [2] It is also proved from various researches that the primary education of the child should be in the mother tongue of the child instead of in any other language. In this new world of technology, most of the information is available on internet in e-form. But in regional languages, due to various technical issues like ASCII based fonts, keyboard layouts, lack of awareness of UNICODE, non availability of spell checkers, it is not easy.
    [Show full text]
  • Intro to Ruby
    Intro to Ruby Aaron Bartell [email protected] Copyright 2014 Aaron Bartell Ruby… a dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write. Matz desired a language which he himself enjoyed using, by minimizing programmer work and possible confusion - enter Ruby. - Est 1995 by Yukihiro "Matz" Matsumoto - Mass acceptance 2006 - Very active and well organized community - October 2013, on IBM i with PowerRuby Features: - variable declarations are unnecessary - variables are dynamically and strongly typed - syntax is simple and consistent - everything is an object - classes, methods, inheritance, etc. - NO SEMI COLONS!!! ruby-lang.org – Home website ruby-doc.org - Formal documentation codecademy.com - Learn Ruby in the browser for free amzn.to/1apcrse - Metaprogramming Ruby: Program Like the Ruby Pros Where can I use Ruby? Web apps with Rails - rubyonrails.org iOS with RubyMotion - rubymotion.com Android with Ruboto - ruboto.org Desktop (Mac, Linux, Windows) with Shoes - shoesrb.com ShoesRB.com irb (Interactive Ruby) is an interactive programming environment for Ruby that allows you to quickly test various coding ideas. ● Included with Ruby distribution. ● Symbolic link in /QOpenSys/usr/bin exists for the irb binary ● Great for learning Ruby through quick tests vs. editing files, saving, and invoking. ● irb is the foundation for the rails console. ● nil in screenshot is the reality that every Ruby method (i.e. puts) returns a value. ruby-doc.org/stdlib-2.0/libdoc/irb/rdoc/IRB.html - Formal documentation tryruby.org – Ruby code in the browser without having to install anything.
    [Show full text]
  • Jason Fraley
    CAREER PROFILE I have an ambitious personality with over 25 years of experience in the computer and information technology field, seeking a leadership position in a dynamic business environment where my unique skill Jason set can be used to its potential. I strive to make sure any given technology strategy is not in place for its own sake, but exists to serve Fraley the overall business requirements. I have a deep-seated passion for this industry and believe that nothing is impossible. My ability to envision of the big picture while maintaining a detailed understanding of the graphic detail Technology Czar and has helped me to repeatedly make decisions that extract 80% of the value with 20% of the cost. Engineer of Things I endeavor to fulfill the corporate mission, or help invent a new one. I am very results driven, and have been recognized for taking on major and groundbreaking initiatives. Adaptation to rapidly changing environmental factors, resolution of critical issues has helped me to ✉ [email protected] I live and breathe technology, and do it pretty well. � —- —- —— Most recent version of this resume available here: � chmod-xchmod.com � linkedin.com/in/jason-fraley � oelbrenner EXPERIENCE SKILLS AND PROFICIENCY Vice President Engineering 2018 - 2019 KnowBe4, Clearwater FL Reporting to the CTO, I grew the Development and Quality Assurance divisions from under 20 to over 60 people. I built a lean engineering organization from the ground up focused on high-quality, extremely scalable software platforms that were instrumental in propelling KnowBe4 to a 2019 billion dollar valuation in the top right corner of the Gartner Magic Quadrant.
    [Show full text]
  • Rubymotion Ios Development Essentials by Abhishek Nalwaya, Akshat Paul for Online Ebook
    RubyMotion iOS Development Essentials Abhishek Nalwaya, Akshat Paul Click here if your download doesn"t start automatically RubyMotion iOS Development Essentials Abhishek Nalwaya, Akshat Paul RubyMotion iOS Development Essentials Abhishek Nalwaya, Akshat Paul Forget the complexity of developing iOS applications with Objective-C; with this hands-on guide you’ll soon be embracing the logic and versatility of RubyMotion. From installation to development to testing, all the essentials are here. Overview ● Get your iOS apps ready faster with RubyMotion ● Use iOS device capabilities such as GPS, camera, multitouch, and many more in your apps ● Learn how to test your apps and launch them on the AppStore ● Use Xcode with RubyMotion and extend your RubyMotion apps with Gems ● Full of practical examples In Detail RubyMotion is a revolutionary toolchain for iOS app development. With RubyMotion, you can quickly develop and test native iOS apps for the iPhone and iPad, combining the expressiveness and simplicity of Ruby with the power of the iOS SDK. "RubyMotion iOS Development Essentials" is a hands-on guide for developing iOS apps using RubyMotion. With RubyMotion, you can eliminate the complexity and confusion associated with the development of iOS applications using Objective-C. We’ll begin from scratch. Starting by installing RubyMotion, we’ll build ourselves up to developing an app that uses the various device capabilities iOS has to offer. What’s more, we’ll even learn how to launch your app on the App Store! We’ll also learn to use iOS SDK classes to create application views. Discover how to use the camera, geolocation, gestures, and other device capabilities to create engaging, interactive apps.
    [Show full text]