Introduction to Jython

Total Page:16

File Type:pdf, Size:1020Kb

Introduction to Jython Chapter 2 Introduction to Jython In this chapter, we will give a short introduction to the Jython programming lan- guage. We have already pointed out that Jython is an implementation of the Python programming language, unlike CPython which is implemented in C/C++. While these implementations provide almost identical a Python-language pro- gramming environment, there are several differences. Since Jython is fully implemented in Java, it is completely integrated into the Java platform, so one can call any Java class and method using the Python-language syntax. This has some consequences for the way you would program in Jython. During the execution of Jython programs, the Jython source code is translated to Java bytecode that can run on any computer that supports the Java virtual machine. We cannot give a comprehensive overview of Jython or Python in this chapter: This chapter aims to describe a bare minimum which is necessary to understand the Jython language, and to provide the reader with sufficient information for the fol- lowing chapters describing data-analysis techniques using the jHepWork libraries. 2.1 Code Structure and Commentary As for CPython, Jython programs can be put into usual text files with the extension ‘.py’. A Jython code is a sequence of statements that can be executed normally, line-by-line, from the top to the bottom. Jython statements can also be executed interactively using the Jython shell (the tab ‘JythonShell’ of the jHepWork IDE). Comments inside Jython programs can be included using two methods: (1) To make a single-line comment, put the sharp “#” at the beginning of the line; (2) To comment out a multi-line block of a code, use a triple-quoted string. It is good idea to document each piece of the code you are writing. Documenta- tion comments are strings positioned immediately after the start of a module, class S.V. Chekanov, Scientific Data Analysis using Jython Scripting and Java, 27 Advanced Information and Knowledge Processing, DOI 10.1007/978-1-84996-287-2_3, © Springer-Verlag London Limited 2010 28 2 Introduction to Jython or function. Such comment can be accessed via the special attribute __doc__.This attribute will be considered later on when we will discuss functions and classes. Jython statements can span multiple lines. In such cases, you should add a back slash at the end of the previous line to indicate that you are continuing on the next line. 2.2 Quick Introduction to Jython Objects As for any dynamically-typed high-lavel computational language, one can use Jython as a simple calculator. Let us use the jHepWork IDE to illustrate this. Start the jHepWork and click on the “JythonShell” tab panel. You will see the Jython invitation “>>>” to type a command. Let us type the following expression: >>> 100*3/15 Press [Enter]. The prompt returns “20” as you would expect for the expression (100*3)/15. There was no any assignment in this expression, so Jython assumes that you just want to see the output. Now, try to assign this expression to some variable, say W: >>> W=100*3/15 This time, no any output will be printed, since the output of the expression from the right side is assigned directly to the variable W. Jython supports multiple assign- ments, which can be rather handy to keep the code short. Below we define three variables W1, W2 and W3, assigning them to 0 value: >>> W1=W2=W3=0 One can also use the parallel assignments using a sequence of values. In the example below we make the assignment W1=1, W2=2 and W3=3 as: >>> W1,W2,W3=1,2,3 At any step of your code, you can check which names in your program are de- fined. Use the built-in function dir() which returns a sorted list of strings >>> dir() [’W’,’W1’,’W2’,’W3’,’__doc__’, ’__name__’ ... 2.2 Quick Introduction to Jython Objects 29 (we have truncated the output in this example since the actual output is rather long). So, Jython knows about all our defined variables including that defined using the character W. You will see more variables in this printed list which are predefined by jHepWork. One can print out variables with the print() method as: >>> print W1 1 One can also append a comment in front: >>> print ‘The output =’,W1 The output = 1 You may notice that there is a comma in front the variable W1. This is because ‘The output’ is a string, while ‘W1’ is an integer value, so their types are distinct and must be separated in the print statement. How do we know the variable types? For this we can use the type() method which determines the object type: >>> type(W1) <type ’int’> The output tells that this variable holds an integer value (the type “int”). Let us continue with this example by introducing another variable, ‘S’ and by assigning a text message to it. The type of this variable is “str” (string). >>> S=’The output =’ >>> type (S) <type ’str’> So, the types of the variables ’W1’ and S are different. This illustrates the fact that Jython, as any high-level language, determines types based on assigned values during execution, i.e. a variable may hold a binding to any kind of object. This feature is very powerful and the most useful for scripting: now we do not need to worry about defining variable types before making assignments to a variable. Clearly, this significantly simplifies program development. Yet, the mechanics behind such useful feature is not so simple: the price to pay for such dynamical features is that all variables, even such simple as ‘W1’ and ‘S’ de- fined before, are objects. Thus, they are more complicated than simple types in other programming languages, like C/C++ or FORTRAN. The price to pay is slower ex- ecution and larger memory consumption. On the other hand, this also means that you can do a lot using such feature! It should also be noted that some people use 30 2 Introduction to Jython the word “value” when they talk about simple types, such as numbers and strings. This is because these objects cannot be changed after creation, i.e. they are im- mutable. First, let us find out what can we do with the object ‘W1’. We know that it holds the value 10 (and can hold any value). To find out what can be done with any objects in the JythonShell window is rather simple: Type ‘W1’ followed by a dot and press the [Space] key by holding down [Ctrl]: >>> W1. [Ctrl]-[Space] You will see a list of methods attributed to this object. They usually start as __method__, where ’method’ is some attribute. For example, you will see the method like __str__, which transforms an object of type integer to a string. So, try this >>> SW=str(W1); type(SW) <type ’str’> Here we put two Jython statements on one line separated by a semi-column. This, probably, is not very popular way for programming in Jython, but we use it to il- lustrate that one can this syntax is also possible. In some cases, however, a program readability can significantly benefit from this style if a code contains many similar and short statements, such as a1=1; a2=2. In this case, the statements have cer- tain similarity and it is better to keep them in one single logical unit. In addition, we will use this style in several examples to make our code snippets short. The last expression in the above line does not have “=”, so Jython assumes that what you really want is to redirect the output to the interactive prompt. The method type() tells that “SW” is a string. As before, you may again look at the methods of this object as: >>> SW. [Ctrl]-[Space] This displays a list of the methods attributed to this object. One can select a neces- sary method and insert it right after the dot. In addition to the JythonShell help system, one can discover the attributes of each Jython object using the native Jython method dir(): >>> dir(SW) In the following sections we will discuss other methods useful to discover at- tributes of Java objects. 2.2 Quick Introduction to Jython Objects 31 2.2.1 Numbers as Objects Numbers in Jython are immutable objects called values, rather than simple types as in other programming languages (C/C++, Fortran or Java). There are two main types: integers (no fractional part) and floats (with fractional part). Integers can be represented by long values if they are followed by the symbol ‘L’. Try this: >>> Long=20L <type ’long’> The only limit in the representation of the long numbers is the memory of Java virtual machine. Let us take a look again at the methods of a real number, say “20.2” (without any assignment to a variable). >> 20.2. [Ctrl]-[Space] or, better, you can print them using the method “dir()” >>> dir(20.2) Again, since there is no any assignment, Jython just prints the output of the dir() method directly to the same prompt. Why they are needed and what you can do with them? Some of them are rather obvious and shown in Table 2.1. Table 2.1 A short overview of the Jython operators for values Jython operators for values abs(x) __abs__ absolute value pow(x, y) or y**x __pow__ raise x to the power y −x,+x __neg__, __pos__ negative or positive +, - __radd__, __rsub__ add or subtract ∗, / __rmul__, __rdiv__ add or subtract x<y, x>y __com__ less or larger. Returns 0 (false) or 1 (true) cmp(x, y) __com__ compare numbers.
Recommended publications
  • Ironpython in Action
    IronPytho IN ACTION Michael J. Foord Christian Muirhead FOREWORD BY JIM HUGUNIN MANNING IronPython in Action Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> IronPython in Action MICHAEL J. FOORD CHRISTIAN MUIRHEAD MANNING Greenwich (74° w. long.) Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> For online information and ordering of this and other Manning books, please visit www.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact Special Sales Department Manning Publications Co. Sound View Court 3B fax: (609) 877-8256 Greenwich, CT 06830 email: [email protected] ©2009 by Manning Publications Co. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid-free paper, and we exert our best efforts to that end. Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15% recycled and processed without the use of elemental chlorine.
    [Show full text]
  • The Essentials of Stackless Python Tuesday, 10 July 2007 10:00 (30 Minutes)
    EuroPython 2007 Contribution ID: 62 Type: not specified The Essentials of Stackless Python Tuesday, 10 July 2007 10:00 (30 minutes) This is a re-worked, actualized and improved version of my talk at PyCon 2007. Repeating the abstract: As a surprise for people who think they know Stackless, we present the new Stackless implementation For PyPy, which has led to a significant amount of new insight about parallel programming and its possible implementations. We will isolate the known Stackless as a special case of a general concept. This is a Stackless, not a PyPy talk. But the insights presented here would not exist without PyPy’s existance. Summary Stackless has been around for a long time now. After several versions with different goals in mind, the basic concepts of channels and tasklets turned out to be useful abstractions, and since many versions, Stackless is only ported from version to version, without fundamental changes to the principles. As some spin-off, Armin Rigo invented Greenlets at a Stackless sprint. They are some kind of coroutines and a bit of special semantics. The major benefit is that Greenlets can runon unmodified CPython. In parallel to that, the PyPy project is in its fourth year now, and one of its goals was Stackless integration as an option. And of course, Stackless has been integrated into PyPy in a very nice and elegant way, much nicer than expected. During the design of the Stackless extension to PyPy, it turned out, that tasklets, greenlets and coroutines are not that different in principle, and it was possible to base all known parallel paradigms on one simple coroutine layout, which is as minimalistic as possible.
    [Show full text]
  • Sun Glassfish Enterprise Server V3 Scripting Framework Guide
    Sun GlassFish Enterprise Server v3 Scripting Framework Guide Sun Microsystems, Inc. 4150 Network Circle Santa Clara, CA 95054 U.S.A. Part No: 820–7697–11 December 2009 Copyright 2009 Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, CA 95054 U.S.A. All rights reserved. Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product that is described in this document. In particular, and without limitation, these intellectual property rights may include one or more U.S. patents or pending patent applications in the U.S. and in other countries. U.S. Government Rights – Commercial software. Government users are subject to the Sun Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its supplements. This distribution may include materials developed by third parties. Parts of the product may be derived from Berkeley BSD systems, licensed from the University of California. UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open Company, Ltd. Sun, Sun Microsystems, the Sun logo, the Solaris logo, the Java Coffee Cup logo, docs.sun.com, Enterprise JavaBeans, EJB, GlassFish, J2EE, J2SE, Java Naming and Directory Interface, JavaBeans, Javadoc, JDBC, JDK, JavaScript, JavaServer, JavaServer Pages, JMX, JRE, JSP,JVM, MySQL, NetBeans, OpenSolaris, SunSolve, Sun GlassFish, ZFS, Java, and Solaris are trademarks or registered trademarks of Sun Microsystems, Inc. or its subsidiaries in the U.S. and other countries. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the U.S. and other countries.
    [Show full text]
  • (Cont'd) Current Trends
    Scripting vs Systems Programming Languages (cont’d) Designed for gluing Designed for building Does application implement complex algorithms and data applications : flexibility applications : efficiency structures? Does application process large data sets (>10,000 items)? Interpreted Compiled Are application functions well-defined, fixed? Dynamic variable creation Variable declaration If yes, consider a system programming language. Data and code integrated : Data and code separated : meta-programming cannot create/run code on Is the main task to connect components, legacy apps? supported the fly Does the application manipulate a variety of things? Does the application have a GUI? Dynamic typing (typeless) Static typing Are the application's functions evolving rapidly? Examples: PERL, Tcl, Examples: PL/1, Ada, Must the application be extensible? Python, Ruby, Scheme, Java, C/C++, C#, etc Does the application do a lot of string manipulation? Visual Basic, etc If yes, consider a scripting language. cs480 (Prasad) LSysVsScipt 1 cs480 (Prasad) LSysVsScipt 2 Current Trends Jython (for convenient access to Java APIs) Hybrid Languages : Scripting + Systems Programming I:\tkprasad\cs480>jython – Recent JVM-based Scripting Languages Jython 2.1 on java1.4.1_02 (JIT: null) Type "copyright", "credits" or "license" for more information. »Jython : Python dialect >>> import javax.swing as swing >>> win = swing.JFrame("Welcome to Jython") »Clojure : LISP dialect >>> win.size = (200, 200) »Scala : OOP +Functional Hybrid >>> win.show()
    [Show full text]
  • Amazon Codeguru Profiler
    Amazon CodeGuru Profiler User Guide Amazon CodeGuru Profiler User Guide Amazon CodeGuru Profiler: User Guide Copyright © Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Amazon. Amazon CodeGuru Profiler User Guide Table of Contents What is Amazon CodeGuru Profiler? ..................................................................................................... 1 What can I do with CodeGuru Profiler? ......................................................................................... 1 What languages are supported by CodeGuru Profiler? ..................................................................... 1 How do I get started with CodeGuru Profiler? ................................................................................ 1 Setting up ......................................................................................................................................... 3 Set up in the Lambda console ..................................................................................................... 3 Step 1: Sign up for AWS ....................................................................................................
    [Show full text]
  • Goless Documentation Release 0.6.0
    goless Documentation Release 0.6.0 Rob Galanakis July 11, 2014 Contents 1 Intro 3 2 Goroutines 5 3 Channels 7 4 The select function 9 5 Exception Handling 11 6 Examples 13 7 Benchmarks 15 8 Backends 17 9 Compatibility Details 19 9.1 PyPy................................................... 19 9.2 Python 2 (CPython)........................................... 19 9.3 Python 3 (CPython)........................................... 19 9.4 Stackless Python............................................. 20 10 goless and the GIL 21 11 References 23 12 Contributing 25 13 Miscellany 27 14 Indices and tables 29 i ii goless Documentation, Release 0.6.0 • Intro • Goroutines • Channels • The select function • Exception Handling • Examples • Benchmarks • Backends • Compatibility Details • goless and the GIL • References • Contributing • Miscellany • Indices and tables Contents 1 goless Documentation, Release 0.6.0 2 Contents CHAPTER 1 Intro The goless library provides Go programming language semantics built on top of gevent, PyPy, or Stackless Python. For an example of what goless can do, here is the Go program at https://gobyexample.com/select reimplemented with goless: c1= goless.chan() c2= goless.chan() def func1(): time.sleep(1) c1.send(’one’) goless.go(func1) def func2(): time.sleep(2) c2.send(’two’) goless.go(func2) for i in range(2): case, val= goless.select([goless.rcase(c1), goless.rcase(c2)]) print(val) It is surely a testament to Go’s style that it isn’t much less Python code than Go code, but I quite like this. Don’t you? 3 goless Documentation, Release 0.6.0 4 Chapter 1. Intro CHAPTER 2 Goroutines The goless.go() function mimics Go’s goroutines by, unsurprisingly, running the routine in a tasklet/greenlet.
    [Show full text]
  • Faster Cpython Documentation Release 0.0
    Faster CPython Documentation Release 0.0 Victor Stinner January 29, 2016 Contents 1 FAT Python 3 2 Everything in Python is mutable9 3 Optimizations 13 4 Python bytecode 19 5 Python C API 21 6 AST Optimizers 23 7 Old AST Optimizer 25 8 Register-based Virtual Machine for Python 33 9 Read-only Python 39 10 History of Python optimizations 43 11 Misc 45 12 Kill the GIL? 51 13 Implementations of Python 53 14 Benchmarks 55 15 PEP 509: Add a private version to dict 57 16 PEP 510: Specialized functions with guards 59 17 PEP 511: API for AST transformers 61 18 Random notes about PyPy 63 19 Talks 65 20 Links 67 i ii Faster CPython Documentation, Release 0.0 Contents: Contents 1 Faster CPython Documentation, Release 0.0 2 Contents CHAPTER 1 FAT Python 1.1 Intro The FAT Python project was started by Victor Stinner in October 2015 to try to solve issues of previous attempts of “static optimizers” for Python. The main feature are efficient guards using versionned dictionaries to check if something was modified. Guards are used to decide if the specialized bytecode of a function can be used or not. Python FAT is expected to be FAT... maybe FAST if we are lucky. FAT because it will use two versions of some functions where one version is specialised to specific argument types, a specific environment, optimized when builtins are not mocked, etc. See the fatoptimizer documentation which is the main part of FAT Python. The FAT Python project is made of multiple parts: 3 Faster CPython Documentation, Release 0.0 • The fatoptimizer project is the static optimizer for Python 3.6 using function specialization with guards.
    [Show full text]
  • Jupyter Tutorial Release 0.8.0
    Jupyter Tutorial Release 0.8.0 Veit Schiele Oct 01, 2021 CONTENTS 1 Introduction 3 1.1 Status...................................................3 1.2 Target group...............................................3 1.3 Structure of the Jupyter tutorial.....................................3 1.4 Why Jupyter?...............................................4 1.5 Jupyter infrastructure...........................................4 2 First steps 5 2.1 Install Jupyter Notebook.........................................5 2.2 Create notebook.............................................7 2.3 Example................................................. 10 2.4 Installation................................................ 13 2.5 Follow us................................................. 15 2.6 Pull-Requests............................................... 15 3 Workspace 17 3.1 IPython.................................................. 17 3.2 Jupyter.................................................. 50 4 Read, persist and provide data 143 4.1 Open data................................................. 143 4.2 Serialisation formats........................................... 144 4.3 Requests................................................. 154 4.4 BeautifulSoup.............................................. 159 4.5 Intake................................................... 160 4.6 PostgreSQL................................................ 174 4.7 NoSQL databases............................................ 199 4.8 Application Programming Interface (API)..............................
    [Show full text]
  • Characteristics of Dynamic JVM Languages
    Characteristics of Dynamic JVM Languages Aibek Sarimbekov Andrej Podzimek Lubomir Bulej University of Lugano Charles University in Prague University of Lugano fi[email protected] [email protected]ff.cuni.cz fi[email protected] Yudi Zheng Nathan Ricci Walter Binder University of Lugano Tufts University University of Lugano fi[email protected] [email protected][email protected] Abstract However, since the JVM was originally conceived for The Java Virtual Machine (JVM) has become an execution a statically-typed language, the performance of the JVM platform targeted by many programming languages. How- and its JIT compiler with dynamically-typed languages is ever, unlike with Java, a statically-typed language, the per- often lacking, lagging behind purpose-built language-specific formance of the JVM and its Just-In-Time (JIT) compiler JIT compilers. Making the JVM perform well with various with dynamically-typed languages lags behind purpose-built statically- and dynamically-typed languages clearly requires language-specific JIT compilers. In this paper, we aim to significant effort, not only in optimizing the JVM itself, but contribute to the understanding of the workloads imposed on also, more importantly, in optimizing the bytecode-emitting the JVM by dynamic languages. We use various metrics to language compiler, instead of just relying on the original JIT characterize the dynamic behavior of a variety of programs to gain performance [8]. This in turn requires that developers written in three dynamic languages (Clojure, Python, and of both the language compilers and the JVM understand the Ruby) executing on the JVM. We identify the differences characteristics of the JVM workloads produced by various with respect to Java, and briefly discuss their implications.
    [Show full text]
  • Debian Java Insights and Challenges
    Debian Java Insights and challenges Markus Koschany FOSDEM 19 Brussels / Belgium February, 3rd 2019 Markus Koschany Debian Java: Insights and challenges FOSDEM 19 1/7 The importance of Java Source / binary packages maintained by the Java team: 1033 / 1644 (+10,84 % since Debian 9) Source lines of code (Rank 3) : 90,744,884 Popcon value OpenJDK-8 (installed): 78104 / 199604 Popular libraries: apache-commons-*, javamail, xerces2, bouncycastle Popular applications: libreoffice, netbeans, pdfsam, sweethome3d, freeplane, freecol Frequently used for scientific research, medical care and bioinformatics. Markus Koschany Debian Java: Insights and challenges FOSDEM 19 2/7 What is new in Buster? OpenJDK 11 transition completed. (required more than 400! package updates) Build tools: Ant and Maven are up-to-date. Gradle is stuck at the last pre-Kotlin version. SBT is still being worked on. JVM languages: Groovy 2.14, Scala 2.11.12 (2.12 requires SBT), Clojure 1.9, Jython 1.7.1, JRuby 9.1.13 (?), Kotlin is wanted but hard to bootstrap. IDE: Eclipse is gone (lack of maintainers) but there is Netbeans 10 now. Server: Jetty 9.4 and Tomcat 9 fully up-to-date with systemd integration. Reproducibility rate is at 85% (was 75%) https://reproducible-builds.org Markus Koschany Debian Java: Insights and challenges FOSDEM 19 3/7 Packaging challenges “None of the packages in the main archive area require software outside of that area to function” Internet downloads at build time are not allowed No prebuilt jar or class files! Java is version-centric. Every developer has to update every dependency themself in this model.
    [Show full text]
  • Reading the Runes for Java Runtimes the Latest IBM Java Sdks
    Java Technology Centre Reading the runes for Java runtimes The latest IBM Java SDKs ... and beyond Tim Ellison [email protected] © 2009 IBM Corporation Java Technology Centre Goals . IBM and Java . Explore the changing landscape of hardware and software influences . Discuss the impact to Java runtime technology due to these changes . Show how IBM is leading the way with these changes 2 Mar 9, 2009 © 2009 IBM Corporation Java Technology Centre IBM and Java . Java is critically important to IBM – Provides fundamental infrastructure to IBM software portfolio – Delivers standard development environment – Enables cost effective multi platform support – Delivered to Independent Software Vendors supporting IBM server platforms . IBM is investing strategically in virtual machine technology – Since Java 5.0, a single Java platform technology supports ME, SE and EE – Technology base on which to delivery improved performance, reliability and serviceability • Some IBM owned code (Virtual machine, JIT compiler, ...) • Some open source code (Apache XML parser, Apache Core libraries, Zlib, ...) • Some Sun licensed code (class libraries, tools, ...) . Looking to engender accelerated and open innovation in runtime technologies – Support for Eclipse, Apache (Harmony, XML, Derby, Geronimo, Tuscany) – Broad participation of relevant standards bodies such as JCP and OSGi 3 Mar 9, 2009 © 2009 IBM Corporation Java Technology Centre IBM Java – 2009 key initiatives . Consumability – Deliver value without complexity. – Ensure that problems with our products can be addressed quickly, allowing customers to keep focus on their own business issues. – Deliver a consistent model for solving customer problems. “Scaling Up” - Emerging hardware and applications – Provide a Java implementation that can scale to the most demanding application needs.
    [Show full text]
  • Glassfish Server 3.0.1 Scripting Framework Guide
    Oracle® GlassFish Server 3.0.1 Scripting Framework Guide Part No: 821–1760–10 June 2010 Copyright © 2010, Oracle and/or its affiliates. All rights reserved. This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited. The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing. If this is software or related software documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, the following notice is applicable: U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are “commercial computer software” or “commercial technical data” pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms setforth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.
    [Show full text]