Io Programming Guide |
||||||||||||||||||||||||
|
|
||||||||||||||||||||||||
Introduction |
| |||||||||||||||||||||||
Overview | Io is a dynamic prototype-based programming language. The ideas in Io are mostly inspired by Smalltalk[1] (all values are objects), Self[2] (prototype-based), NewtonScript[3] (differential inheritance), Act1[4] (actors and futures for concurrency), Lisp[5] (code is a runtime inspectable / modifiable tree) and Lua[6] (small, embeddable). | |||||||||||||||||||||||
Perspective |
The focus of programming language research for the last thirty years has been to combine the expressive power of high level languages like Smalltalk and the performance of low level language like C with little attention paid to advancing expressive power itself. The result has been a series of languages which are neither as fast as C or as expressive as Smalltalk. Io's purpose is to refocus attention on expressiveness by exploring higher level dynamic programming features with greater levels of runtime flexibility and simplified programming syntax and semantics.
In Io, all values are objects (of which, anything can change at runtime, including slots, methods and inheritance), all code is made up of expressions (which are runtime inspectable and modifiable) and all expressions are made up of dynamic message sends (including assignment and control structures). Execution contexts themselves are objects and activatable objects such as methods/blocks and functions are unified into blocks with assignable scope. Concurrency is made more easily manageable through actors and implemented using coroutines for scalability. | |||||||||||||||||||||||
Goals |
To be a language that is:
simple
| |||||||||||||||||||||||
Downloading |
Io distributions are available at:
http://iolanguage.com | |||||||||||||||||||||||
Installing | Follow the README.txt file in the download to compile and install io. | |||||||||||||||||||||||
Running Scripts |
An example of running a script:
io samples/misc/HelloWorld.ioThere is no main() function or object that gets executed first in Io. Scripts are executed when compiled. | |||||||||||||||||||||||
Interactive Mode |
Running:
./_build/binaries/ioOr, if Io is installed, running: iowill open the Io interpreter prompt. You can evaluate code by entering it directly. Example: Io> "Hello world!" println ==> Hello world!Expressions are evaluated in the context of the Lobby: Io> print [printout of lobby contents]If you have a .iorc file in your home folder, it will be evaled before the interactive prompt starts. | |||||||||||||||||||||||
Inspecting objects |
You can get a list of the slots of an object like this:
Io> someObject slotNamesTo show them in sorted order: Io> someObject slotNames sortFor a nicely formatted description of an object, the slotSummary method is handy: Io> slotSummary ==> Object_0x20c4e0: Lobby = Object_0x20c4e0 Protos = Object_0x20bff0 exit = method(...) forward = method(...)Exploring further: Io> Protos ==> Object_0x20bff0: Addons = Object_0x20c6f0 Core = Object_0x20c4b0 Io> Protos Addons ==> Object_0x20c6f0: ReadLine = Object_0x366a10Only ReadLine is seen in the Addons since no other Addons have been loaded yet. Inspecting a method will print a decompiled version of it: Io> Lobby getSlot("forward") ==> # io/Z_Importer.io:65 method( Importer import(call) ) doFile and doStringA script can be run from the interactive mode using the doFile method:doFile("scriptName.io")The evaluation context of doFile is the receiver, which in this case would be the lobby. To evaluate the script in the context of some other object, simply send the doFile message to it: someObject doFile("scriptName.io")The doString method can be used to evaluate a string: Io> doString("1+1") ==> 2And to evaluate a string in the context of a particular object: someObject doString("1 + 1") Command Line ArgumentsExample of printing out command line arguments:System args foreach(k, v, write("'", v, "'\n")) launchPathThe System "launchPath" slot is set to the location of the initial source file that is executed; when the interactive prompt is started (without specifying a source file to execute), the launchPath is the current working directory:System launchPath | |||||||||||||||||||||||
Syntax |
| |||||||||||||||||||||||
Expressions |
Io has no keywords or statements. Everything is an expression composed entirely of messages, each of which is a runtime accessible object. The informal BNF description:
exp ::= { message | terminator } message ::= symbol [arguments] arguments ::= "(" [exp [ { "," exp } ]] ")" symbol ::= identifier | number | string terminator ::= "\n" | ";"For performance reasons, String and Number literal messages have their results cached in their message objects. | |||||||||||||||||||||||
Messages |
Message arguments are passed as expressions and evaluated by the receiver. Selective evaluation of arguments can be used to implement control flow. Examples:
for(i, 1, 10, i println) a := if(b == 0, c + 1, d)In the above code, "for" and "if" are just normal messages, not special forms or keywords. Likewise, dynamic evaluation can be used with enumeration without the need to wrap the expression in a block. Examples: people select(person, person age < 30) names := people map(person, person name)Methods like map and select will typically apply the expression directly to the values if only the expression is provided: people select(age < 30) names := people map(name)There is also some syntax sugar for operators (including assignment), which are handled by an Io macro executed on the expression after it is compiled into a message tree. Some sample source code: Account := Object clone Account balance := 0 Account deposit := method(amount, balance = balance + amount ) account := Account clone account deposit(10.00) account balance printlnLike Self[2], Io's syntax does not distinguish between accessing a slot containing a method from one containing a variable. | |||||||||||||||||||||||
Operators |
An operator is just a message whose name contains no alphanumeric characters (other than ";", "_", '"' or ".") or is one of the following words: or, and, return. Example:
1 + 2This just gets compiled into the normal message: 1 +(2)Which is the form you can use if you need to do grouping: 1 +(2 * 4)Standard operators follow C's precedence order, so: 1 + 2 * 3 + 4Is parsed as: 1 +(2 *(3)) +(4)User defined operators (that don't have a standard operator name) are performed left to right. | |||||||||||||||||||||||
Assignment |
Io has three assignment operators:
These operators are compiled to normal messages whose methods can be overridden. For example:
On Locals objects, updateSlot is overridden so it will update the slot in the object in which the method was activated if the slot is not found the locals. This is done so update assignments in methods don't require self to be an explicit target. | |||||||||||||||||||||||
Numbers |
The following are examples of valid number formats:
123 123.456 0.456 .456 123e-4 123e4 123.456e-7 123.456e2Hex numbers are also supported (in any casing): 0x0 0x0F 0XeE | |||||||||||||||||||||||
Strings |
Strings can be defined surrounded by a single set of double quotes with escaped quotes (and other escape characters) within.
s := "this is a \"test\".\nThis is only a test."Or for strings with non-escaped characters and/or spanning many lines, triple quotes can be used. s := """this is a "test". This is only a test.""" | |||||||||||||||||||||||
Comments |
Comments of the //, /**/ and # style are supported. Examples:
a := b // add a comment to a line /* comment out a group a := 1 b := 2 */The "#" style is useful for unix scripts: #!/usr/local/bin/ioThat's it! You now know everything there is to know about Io's syntax. Control flow, objects, methods, exceptions are expressed with the syntax and semantics described above. | |||||||||||||||||||||||
Objects |
| |||||||||||||||||||||||
Overview |
Io's guiding design principle is simplicity and power through conceptual unification.
| |||||||||||||||||||||||
Prototypes |
In Io, everything is an object (including the locals storage of a block and the namespace itself) and all actions are messages (including assignment). Objects are composed of a list of key/value pairs called slots, and an internal list of objects from which it inherits called protos. A slot's key is a symbol (a unique immutable sequence) and its value can be any type of object.
clone and initNew objects are made by cloning existing ones. A clone is an empty object that has the parent in its list of protos. A new instance's init slot will be activated which gives the object a chance to initialize itself. Like NewtonScript[3], slots in Io are create-on-write.me := Person cloneTo add an instance variable or method, simply set it: myDog name := "rover" myDog sit := method("I'm sitting\n" print)When an object is cloned, its "init" slot will be called if it has one. | |||||||||||||||||||||||
Inheritance |
When an object receives a message it looks for a matching slot, if not found, the lookup continues depth first recursively in its protos. Lookup loops are detected (at runtime) and avoided. If the matching slot contains an activatable object, such as a Block or CFunction, it is activated, if it contains any other type of value it returns the value. Io has no globals and the root object in the Io namespace is called the Lobby.
Since there are no classes, there's no difference between a subclass and an instance. Here's an example of creating the equivalent of a subclass: Io> Dog := Object clone ==> Object_0x4a7c0The above code sets the Lobby slot "Dog" to a clone of the Object object; the protos list of this new object contains only a reference to Object, essentially indicating that a subclass of Object has been created. Instance variables and methods are inherited from the objects referenced in the protos list. If a slot is set, it creates a new slot in our object instead of changing the protos: Io> Dog color := "red" Io> Dog ==> Object_0x4a7c0: color := "red" Multiple InheritanceYou can add any number of protos to an object's protos list. When responding to a message, the lookup mechanism does a depth first search of the proto chain. | |||||||||||||||||||||||
Methods |
A method is an anonymous function which, when called, creates an object to store its locals and sets the local's proto pointer and its self slot to the target of the message. The Object method method() can be used to create methods. Example:
method((2 + 2) print)An example of using a method in an object: Dog := Object clone Dog bark := method("woof!" print)The above code creates a new "subclass" of object named Dog and adds a bark slot containing a block that prints "woof!". Example of calling this method: Dog barkThe default return value of a block is the result of the last expression. ArgumentsMethods can also be defined to take arguments. Example:add := method(a, b, a + b)The general form is: method(<arg name 0>, <arg name 1>, ..., <do message>) | |||||||||||||||||||||||
Blocks |
A block is the same as a method except it is lexically scoped. That is, variable lookups continue in the context of where the block was created instead of the target of the message which activated the block. A block can be created using the Object method block(). Example of creating a block:
b := block(a, a + b) Blocks vs. MethodsThis is sometimes a source of confusion so it's worth explaining in detail. Both methods and blocks create an object to hold their locals when they are called. The difference is what the "proto" and "self" slots of that locals object are set to. In a method, those slots are set to the target of the message. In a block, they're set to the locals object where the block was created. So a failed variable lookup in a block's locals continue in the locals where it was created. And a failed variable lookup in a method's locals continue in the object to which the message that activated it was sent.call and self slotsWhen a locals object is created, its self slot is set (to the target of the message, in the case of a method, or to the creation context, in the case of a block) and its call slot is set to a Call object that can be used to access information about the block activation:
Variable ArgumentsThe "call message" slot in locals can be used to access the unevaluated argument messages. Example of implementing if() within Io:myif := method( (call sender doMessage(call message argAt(0))) ifTrue( call sender doMessage(call message argAt(1))) ifFalse( call sender doMessage(call message argAt(2))) ) myif(foo == bar, write("true\n"), write("false\n"))The doMessage() method evaluates the argument in the context of the receiver. A shorter way to express this is to use the evalArgAt() method on the call object: myif := method( call evalArgAt(0) ifTrue( call evalArgAt(1)) ifFalse( call evalArgAt(2)) ) myif(foo == bar, write("true\n"), write("false\n")) | |||||||||||||||||||||||
Forward |
If an object doesn't respond to a message, it will invoke its "forward" method if it has one. Here's an example of how to print the information related lookup that failed:
MyObject forward := method( write("sender = ", call sender, "\n") write("message name = ", call message name, "\n") args := call message argsEvaluatedIn(call sender) args foreach(i, v, write("arg", i, " = ", v, "\n") ) ) | |||||||||||||||||||||||
Resend |
Sends the current message to the receiver's protos with self as the context. Example:
A := Object clone A m := method(write("in A\n")) B := A clone B m := method(write("in B\n"); resend) B mwill print: in B in AFor sending other messages to the receiver's proto, super is used. | |||||||||||||||||||||||
Super |
Sometimes it's necessary to send a message directly to a proto. Example:
Dog := Object clone Dog bark := method(writeln("woof!")) fido := Dog clone fido bark := method( writeln("ruf!") super(bark) )Both resend and super are implemented in Io. | |||||||||||||||||||||||
Introspection |
Using the following methods you can introspect the entire Io namespace. There are also methods for modifying any and all of these attributes at runtime.
slotNamesThe slotNames method returns a list of the names of an object's slots:Io> Dog slotNames ==> list("bark") protosThe protos method returns a list of the objects which an object inherits from:Io> Dog protos map(type) ==> list(Object) getSlotThe "getSlot" method can be used to get the value of a block in a slot without activating it:myMethod := Dog getSlot("bark")Above, we've set the locals object's "myMethod" slot to the bark method. It's important to remember that if you then want use the myMethod without activating it, you'll need to use the getSlot method: otherObject newMethod := getSlot("myMethod")Here, the target of the getSlot method is the locals object. codeThe arguments and expressions of methods are open to introspection. A useful convenience method is "code", which returns a string representation of the source code of the method in a normalized form.Io> method(a, a * 2) code ==> "method(a, a *(2))" | |||||||||||||||||||||||
Control Flow |
| |||||||||||||||||||||||
true, false and nil | There are singletons for true, false and nil. nil is typically used to indicate an unset or missing value. | |||||||||||||||||||||||
Comparison |
The comparison methods:
==, !=, >=, <=, >, <return either the true or false. The compare() method is used to implement the comparison methods and returns -1, 0 or 1 which mean less-than, equal-to or greater-than, respectively. | |||||||||||||||||||||||
if, then, else |
The if() method can be used in the form:
if(<condition>, <do message>, <else do message>)Example: if(a == 10, "a is 10" print)The else argument is optional. The condition is considered false if the condition expression evaluates to false or nil, and true otherwise. The result of the evaluated message is returned, so: if(y < 10, x := y, x := 0)is the same as: x := if(y < 10, y, 0)Conditions can also be used in this form: if(y < 10) then(x := y) else(x := 2)elseif() is supported: if(y < 10) then(x := y) elseif(y == 11) then(x := 0) else(x := 2) | |||||||||||||||||||||||
ifTrue, ifFalse |
Also supported are Smalltalk style ifTrue, ifFalse, ifNil and ifNonNil methods:
(y < 10) ifTrue(x := y) ifFalse(x := 2)Notice that the condition expression must have parentheses surrounding it. | |||||||||||||||||||||||
loop |
The loop method can be used for "infinite" loops:
loop("foo" println) | |||||||||||||||||||||||
repeat |
The Number repeat method can be used to repeat a loop a given number of times.
3 repeat("foo" print) ==> foofoofoo | |||||||||||||||||||||||
while |
Arguments:
while(<condition>, <do message>)Example: a := 1 while(a < 10, a print a = a + 1 ) | |||||||||||||||||||||||
for |
Arguments:
for(<counter>, <start>, <end>, <optional step>, <do message>)The start and end messages are only evaluated once, when the loop starts. Example: for(a, 0, 10, a println )Example with a step: for(x, 0, 10, 3, x println)Which would print: 0 3 6 9To reverse the order of the loop, add a negative step: for(a, 10, 0, -1, a println)Note: the first value will be the first value of the loop variable and the last will be the last value on the final pass through the loop. So a loop of 1 to 10 will loop 10 times and a loop of 0 to 10 will loop 11 times. | |||||||||||||||||||||||
break, continue |
loop, repeat, while and for support the break and continue methods. Example:
for(i, 1, 10, if(i == 3, continue) if(i == 7, break) i print )Output: 12456 | |||||||||||||||||||||||
return |
Any part of a block can return immediately using the return method. Example:
Io> test := method(123 print; return "abc"; 456 print) Io> test 123 ==> abcInternally, break, continue and return all work by setting a IoState internal variable called "stopStatus" which is monitored by the loop and message evaluation code. | |||||||||||||||||||||||
Importing |
The Importer proto implements Io's built-in auto importer feature. If you put each of your proto's in their own file, and give the file the same name with and ".io" extension, the Importer will automatically import that file when the proto is first referenced. The Importer's default search path is the current working directory, but can add search paths using its addSearchPath() method.
| |||||||||||||||||||||||
Concurrency |
| |||||||||||||||||||||||
Coroutines | Io uses coroutines (user level cooperative threads), instead of preemptive OS level threads to implement concurrency. This avoids the substantial costs (memory, system calls, locking, caching issues, etc) associated with native threads and allows Io to support a very high level of concurrency with thousands of active threads. | |||||||||||||||||||||||
Scheduler | The Scheduler object is responsible for resuming coroutines that are yielding. The current scheduling system uses a simple first-in-first-out policy with no priorities. | |||||||||||||||||||||||
Actors |
An actor is an object with its own thread (in our case, its own coroutine) which it uses to process its queue of asynchronous messages. Any object in Io can be sent an asynchronous message by placing using the asyncSend() or futureSend() messages.
Examples: result := self foo // synchronous futureResult := self futureSend(foo) // async, immediately returns a Future self asyncSend(foo) // async, immediately returns nilWhen an object receives an asynchronous message it puts the message in its queue and, if it doesn't already have one, starts a coroutine to process the messages in its queue. Queued messages are processed sequentially in a first-in-first-out order. Control can be yielded to other coroutines by calling "yield". Example: obj1 := Object clone obj1 test := method(for(n, 1, 3, n print; yield)) obj2 := obj1 clone obj1 asyncSend(test); obj2 asyncSend(test) while(Scheduler yieldingCoros size > 1, yield)This would print "112233". Here's a more real world example: HttpServer handleRequest := method(aSocket, HttpRequestHandler clone asyncSend(handleRequest(aSocket)) ) | |||||||||||||||||||||||
Futures |
Io's futures are transparent. That is, when the result is ready, they become the result. If a message is sent to a future (besides the two methods it implements), it waits until it turns into the result before processing the message. Transparent futures are powerful because they allow programs to minimize blocking while also freeing the programmer from managing the fine details of synchronization.
Auto Deadlock DetectionAn advantage of using futures is that when a future requires a wait, it will check to see if pausing to wait for the result would cause a deadlock and if so, avoid the deadlock and raise an exception. It performs this check by traversing the list of connected futures.Futures and the Command Line InterfaceThe command line will attempt to print the result of expressions evaluated in it, so if the result is a Future, it will attempt to print it and this will wait on the result of Future. Example:Io> q := method(wait(1)) Io> futureSend(q) [1-second delay] ==> nilTo avoid this, just make sure the Future isn't the result. Example: Io> futureSend(q); nil [no delay] ==> nil | |||||||||||||||||||||||
Yield |
An object will automatically yield between processing each of its asynchronous messages. The yield method only needs to be called if a yield is required during an asynchronous message execution.
Pause and ResumeIt's also possible to pause and resume an object. See the concurrency methods of the Object primitive for details and related methods. | |||||||||||||||||||||||
Exceptions |
| |||||||||||||||||||||||
Raise |
An exception can be raised by calling raise() on an exception proto.
Exception raise("generic foo exception") | |||||||||||||||||||||||
Try and Catch |
To catch an exception, the try() method of the Object proto is used. try() will catch any exceptions that occur within it and return the caught exception or nil if no exception is caught.
e := try(<doMessage>)To catch a particular exception, the Exception catch() method can be used. Example: e := try( // ... ) e catch(Exception, writeln(e coroutine backTraceString) )The first argument to catch indicates which types of exceptions will be caught. catch() returns the exception if it doesn't match and nil if it does. | |||||||||||||||||||||||
Pass |
To re-raise an exception caught by try(), use the pass method. This is useful to pass the exception up to the next outer exception handler, usually after all catches failed to match the type of the current exception:
e := try( // ... ) e catch(Error, // ... ) catch(Exception, // ... ) pass | |||||||||||||||||||||||
Custom Exceptions |
Custom exception types can be implemented by simply cloning an existing Exception type:
MyErrorType := Error clone | |||||||||||||||||||||||
Primitives |
Primitives are objects built into Io whose methods are typically implemented in C and store some hidden data in their instances. For example, the Number primitive has a double precision floating point number as its hidden data and its methods that do arithmetic operations are C functions. All Io primitives inherit from the Object prototype and are mutable. That is, their methods can be changed. The reference docs contain more info on primitives.
This document is not meant as a reference manual, but an overview of the base primitives and bindings is provided here to give the user a jump-start and a feel for what is available and where to look in the reference documentation for further details. | |||||||||||||||||||||||
Object |
The ? OperatorSometimes it's desirable to conditionally call a method only if it exists (to avoid raising an exception). Example:if(obj getSlot("foo"), obj foo)Putting a "?" before a message has the same effect: obj ?foo | |||||||||||||||||||||||
List |
A List is an array of references and supports all the standard array manipulation and enumeration methods. Examples:
Create an empty list: a := List cloneCreate a list of arbitrary objects using the list() method: a := list(33, "a")Append an item: a append("b") ==> list(33, "a", "b")Get the list size: a size ==> 3Get the item at a given index (List indexes begin at zero): a at(1) ==> "a"Note: List indexes begin at zero and nil is returned if the accessed index doesn't exist. Set the item at a given index: a atPut(2, "foo") ==> list(33, "a", "foo") a atPut(6, "Fred") ==> Exception: index out of boundsRemove the given item: a remove("foo") ==> list(33, "a", "b")Inserting an item at a given index: a atInsert(2, "foo") ==> list(33, "a", "foo", "b") foreachThe foreach, map and select methods can be used in three forms:Io> a := list(65, 21, 122)In the first form, the first argument is used as an index variable, the second as a value variable and the 3rd as the expression to evaluate for each value. Io> a foreach(i, v, write(i, ":", v, ", ")) ==> 0:65, 1:21, 2:122,The second form removes the index argument: Io> a foreach(v, v println) ==> 65 21 122The third form removes the value argument and simply sends the expression as a message to each value: Io> a foreach(println) ==> 65 21 122 map and selectIo's map and select (known as filter in some other languages) methods allow arbitrary expressions as the map/select predicates.Io> numbers := list(1, 2, 3, 4, 5, 6) Io> numbers select(isOdd) ==> list(1, 3, 5) Io> numbers select(x, x isOdd) ==> list(1, 3, 5) Io> numbers select(i, x, x isOdd) ==> list(1, 3, 5) Io> numbers map(x, x*2) ==> list(2, 4, 6, 8, 10, 12) Io> numbers map(i, x, x+i) ==> list(1, 3, 5, 7, 9, 11) Io> numbers map(*3) ==> list(3, 6, 9, 12, 15, 18)The map and select methods return new lists. To do the same operations in-place, you can use selectInPlace() and mapInPlace() methods. | |||||||||||||||||||||||
Sequence |
In Io, an immutable Sequence is called a Symbol and a mutable Sequence is the equivalent of a Buffer or String. Literal strings(ones that appear in source code surrounded by quotes) are Symbols. Mutable operations cannot be performed on Symbols, but one can make mutable copy of a Symbol calling its asMutable method and then perform the mutation operations on the copy.
Common string operations
Getting the length of a string:
"abc" size ==> 3Checking if a string contains a substring: "apples" containsSeq("ppl") ==> trueGetting the character (byte) at position N: "Kavi" at(1) ==> 97Slicing: "Kirikuro" exSlice(0, 2) ==> "Ki" "Kirikuro" exSlice(-2) # NOT: exSlice(-2, 0)! ==> "ro" Io> "Kirikuro" exSlice(0, -2) ==> "Kiriku"Stripping whitespace: " abc " asMutable strip ==> "abc" " abc " asMutable lstrip ==> "abc " " abc " asMutable rstrip ==> " abc"Converting to upper/lowercase: "Kavi" asUppercase ==> "KAVI" "Kavi" asLowercase ==> "kavi"Splitting a string: "the quick brown fox" split ==> list("the", "quick", "brown", "fox")Splitting by other characters is possible as well. "a few good men" split("e") ==> list("a f", "w good m", "n")Converting to number: "13" asNumber ==> 13 "a13" asNumber ==> nanString interpolation: name := "Fred" ==> Fred "My name is #{name}" interpolate ==> My name is FredInterpolate will eval anything with #{} as Io code in the local context. The code may include loops or anything else but needs to return an object that responds to asString. | |||||||||||||||||||||||
Ranges |
A range is a container containing a start and an end point, and instructions on how to get from the start to the end. Using Ranges is often convenient when creating large lists of sequential data as they can be easily converted to lists, or as a replacement for the for() method.
The Range protocolEach object that can be used in Ranges needs to implement a "nextInSequence" method which takes a single optional argument (the number of items to skip in the sequence of objects), and return the next item after that skip value. The default skip value is 1. The skip value of 0 is undefined. An example:Number nextInSequence := method(skipVal, if(skipVal isNil, skipVal = 1) self + skipVal )With this method on Number (it's already there in the standard libraries), you can then use Numbers in Ranges, as demonstrated below: 1 to(5) foreach(v, v println)The above will print 1 through 5, each on its own line. | |||||||||||||||||||||||
File |
The methods openForAppending, openForReading, or openForUpdating are used for opening files. To erase an existing file before opening a new open, the remove method can be used. Example:
f := File with("foo.txt") f remove f openForUpdating f write("hello world!") f close | |||||||||||||||||||||||
Directory |
Creating a directory object:
dir := Directory with("/Users/steve/")Get a list of file objects for all the files in a directory: files := dir files ==> list(File_0x820c40, File_0x820c40, ...)Get a list of both the file and directory objects in a directory: items := dir items ==> list(Directory_0x8446b0, File_0x820c40, ...) items at(4) name ==> DarkSide-0.0.1 # a directory nameSetting a Directory object to a certain directory and using it: root := Directory clone setPath("c:/") ==> Directory_0x8637b8 root fileNames ==> list("AUTOEXEC.BAT", "boot.ini", "CONFIG.SYS", ...)Testing for existence: Directory clone setPath("q:/") exists ==> falseGetthing the current working directory: Directory currentWorkingDirectory ==> "/cygdrive/c/lang/IoFull-Cygwin-2006-04-20" | |||||||||||||||||||||||
Date |
Creating a new date instance:
d := Date cloneSetting it to the current date/time: d nowGetting the date/time as a number, in seconds: Date now asNumber ==><PHONE_NUMBER>.417114 Date now asNumber ==><PHONE_NUMBER>.33313Getting individual parts of a Date object: d := Date now ==> 2006-05-09 21:53:03 EST d ==> 2006-05-09 21:53:03 EST d year ==> 2006 d month ==> 5 d day ==> 9 d hour ==> 21 d minute ==> 53 d second ==> 3.747125Find how long it takes to execute some code: Date cpuSecondsToRun(100000 repeat(1+1)) ==> 0.02 | |||||||||||||||||||||||
Networking |
All of Io's networking is done with asynchronous sockets underneath, but operations like reading and writing to a socket appear to be synchronous since the calling coroutine is unscheduled until the socket has completed the operation, or a timeout occurs. Note that you'll need to first reference the associated addon in order to cause it to load before using its objects. In these examples, you'll have to reference "Socket" to get the Socket addon to load first.
Creating a URL object: url := URL with("http://example.com/")Fetching an URL: data := url fetchStreaming a URL to a file: url streamTo(File with("out.txt"))A simple whois client: whois := method(host, socket := Socket clone \ setHost("rs.internic.net") setPort(43) socket connect streamWrite(host, "\n") while(socket streamReadNextChunk, nil) return socket readBuffer )A minimal web server: WebRequest := Object clone do( handleSocket := method(aSocket, aSocket streamReadNextChunk request := aSocket readBuffer \ betweenSeq("GET ", " HTTP") f := File with(request) if(f exists, f streamTo(aSocket) , aSocket streamWrite("not found") ) aSocket close ) ) WebServer := Server clone do( setPort(8000) handleSocket := method(aSocket, WebRequest clone asyncSend(handleSocket(aSocket)) ) ) WebServer start | |||||||||||||||||||||||
XML |
Using the XML parser to find the links in a web page:
SGML // reference this to load the SGML addon xml := URL with("http://www.yahoo.com/") fetch asXML links := xml elementsWithName("a") map(attributes at("href")) | |||||||||||||||||||||||
Vector |
Io's Vectors are built on its Sequence primitive and are defined as:
Vector := Sequence clone setItemType("float32")The Sequence primitive supports SIMD acceleration on a number of float32 operations. Currently these include add, subtract, multiple and divide but in the future can be extended to support most math, logic and string manipulation related operations. Here's a small example: iters := 1000 size := 1024 ops := iters * size v1 := Vector clone setSize(size) rangeFill v2 := Vector clone setSize(size) rangeFill dt := Date secondsToRun( iters repeat(v1 *= v2) ) writeln((ops/(dt*1000000000)) asString(1, 3), " GFLOPS")Which when run on 2Ghz Mac Laptop, outputs: 1.255 GFLOPSA similar bit of C code (without SIMD acceleration) outputs: 0.479 GFLOPSSo for this example, Io is about three times faster than plain C. | |||||||||||||||||||||||
Unicode |
| |||||||||||||||||||||||
Sequences |
In Io, symbols, strings, and vectors are unified into a single Sequence prototype which is an array of any available hardware data type such as:
uint8, uint16, uint32, uint64 int8, int16, int32, int64 float32, float64 | |||||||||||||||||||||||
Encodings |
Also, a Sequence has a encoding attribute, which can be:
number, ascii, ucs2, ucs4, utf8UCS-2 and UCS-4 are the fixed character width versions of UTF-16 and UTF-32, respectively. A String is just a Sequence with a text encoding, a Symbol is an immutable String and a Vector is a Sequence with a number encoding. UTF encodings are assumed to be big endian. Except for input and output, all strings should be kept in a fixed character width encoding. This design allows for a simpler implementation, code sharing between vector and string ops, fast index-based access, and SIMD acceleration of Sequence operations. All Sequence methods will do automatic type conversions as needed. | |||||||||||||||||||||||
Source Code |
Io source files are assumed to be in UTF8 (of which ASCII is a subset). When a source file is read, its symbols and strings are stored in Sequences in their minimal fixed character width encoding. Examples:
Io> "hello" encoding ==> ascii Io> "π" encoding ==> ucs2 Io> "∞" encoding ==> ucs2We can also inspect the internal representation: Io> "π" itemType ==> uint16 Io> "π" itemSize ==> 2 | |||||||||||||||||||||||
Conversion |
The Sequence object has a number of conversion methods:
asUTF8 asUCS2 asUCS4 | |||||||||||||||||||||||
Embedding |
| |||||||||||||||||||||||
Conventions |
Io's C code is written using object oriented style conventions where structures are treated as objects and functions as methods. Familiarity with these may help make the embedding APIs easier to understand.
StructuresMember names are words that begin with a lower case character with successive words each having their first character upper cased. Acronyms are capitalized. Structure names are words with their first character capitalized. Example:typdef struct { char *firstName; char *lastName; char *address; } Person; FunctionsFunction names begin with the name of structure they operate on followed by an underscore and the method name. Each structure has a new and free function.Example: List *List_new(void); void List_free(List *self);All methods (except new) have the structure (the "object") as the first argument the variable is named "self". Method names are in keyword format. That is, for each argument, the method name has a description followed by an underscore. The casing of the descriptions follow that of structure member names. Examples: int List_count(List *self); // no argument void List_add_(List *self, void *item); // one argument void Dictionary_key_value_(Dictionary *self, char *key, char *value); File NamesEach structure has its own separate .h and .c files. The names of the files are the same as the name of the structure. These files contain all the functions(methods) that operate on the given structure. | |||||||||||||||||||||||
IoState |
An IoState can be thought of as an instance of an Io "virtual machine", although "virtual machine" is a less appropriate term because it implies a particular type of implementation.
Multiple statesIo is multi-state, meaning that it is designed to support multiple state instances within the same process. These instances are isolated and share no memory so they can be safely accessed simultaneously by different os threads, though a given state should only be accessed by one os thread at a time.Creating a stateHere's a simple example of creating a state, evaluating a string in it, and freeing the state:#include "IoState.h" int main(int argc, const char *argv[]) { IoState *self = IoState_new(); IoState_init(self); IoState_doCString_(self, "writeln(\"hello world!\""); IoState_free(self); return 0; } | |||||||||||||||||||||||
Values |
We can also get return values and look at their types and print them:
IoObject *v = IoState_doCString_(self, someString); char *name = IoObject_name(v); printf("return type is a ‘%s', name); IoObject_print(v); Checking value typesThere are some macro short cuts to help with quick type checks:if (ISNUMBER(v)) { printf("result is the number %f", IoNumber_asFloat(v)); } else if(ISSEQ(v)) { printf("result is the string %s", IoSeq_asCString(v)); } else if(ISLIST(v)) { printf("result is a list with %i elements", IoList_rawSize(v)); }Note that return values are always proper Io objects (as all values are objects in Io). You can find the C level methods (functions like IoList_rawSize()) for these objects in the header files in the folder Io/libs/iovm/source. | |||||||||||||||||||||||
Bindings |
Documentation on how to write bindings/addons forthcoming..
| |||||||||||||||||||||||
Appendix |
| |||||||||||||||||||||||
Grammar |
messagesexpression ::= { message | sctpad } message ::= [wcpad] symbol [scpad] [arguments] arguments ::= Open [argument [ { Comma argument } ]] Close argument ::= [wcpad] expression [wcpad] symbolssymbol ::= Identifier | number | Operator | quote Identifier ::= { letter | digit | "_" } Operator ::= { ":" | "." | "'" | "~" | "!" | "@" | "$" | "%" | "^" | "&" | "*" | "-" | "+" | "/" | "=" | "{" | "}" | "[" | "]" | "|" | "\" | "<" | ">" | "?" } quotesquote ::= MonoQuote | TriQuote MonoQuote ::= """ [ "\"" | not(""")] """ TriQuote ::= """"" [ not(""""")] """"" spansTerminator ::= { [separator] ";" | "\n" | "\r" [separator] } separator ::= { " " | "\f" | "\t" | "\v" } whitespace ::= { " " | "\f" | "\r" | "\t" | "\v" | "\n" } sctpad ::= { separator | Comment | Terminator } scpad ::= { separator | Comment } wcpad ::= { whitespace | Comment } commentsComment ::= slashStarComment | slashSlashComment | poundComment slashStarComment ::= "/*" [not("*/")] "*/" slashSlashComment ::= "//" [not("\n")] "\n" poundComment ::= "#" [not("\n")] "\n" numbersnumber ::= HexNumber | Decimal HexNumber ::= "0" anyCase("x") { [ digit | hexLetter ] } hexLetter ::= "a" | "b" | "c" | "d" | "e" | "f" Decimal ::= digits | "." digits | digits "." digits ["e" [-] digits] charactersComma ::= "," Open ::= "(" | "[" | "{" Close ::= ")" | "]" | "}" letter ::= "a" ... "z" | "A" ... "Z" digit ::= "0" ... "9" digits ::= { digit }The uppercase words above designate elements the lexer treats as tokens. | |||||||||||||||||||||||
Credits | Io is the product of all the talented folks who taken the time and interest to make a contribution. The complete list of contributors is difficult to keep track of, but some of the recent major contributors include; Jonathan Wright, Jeremy Tregunna, Mike Austin, Chris Double, Rich Collins, Oliver Ansaldi, James Burgess, Baptist Heyman, Ken Kerahone, Christian Thater, Brian Mitchell, Zachary Bir and many more. The mailing list archives, repo inventory and release history are probably the best sources for a more complete record of individual contributions. | |||||||||||||||||||||||
References |
| |||||||||||||||||||||||
License |
Copyright 2006-2010 Steve Dekorte. All rights reserved.
Redistribution and use of this document with or without modification, are permitted provided that the copies reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. This documentation is provided "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the authors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this documentation, even if advised of the possibility of such damage.
|


Closed consultation
Implementing the English Baccalaureate
We are analysing your feedback
Visit this page again soon to download the outcome to this public feedback.
This consultation ran from
to
Summary
We're seeking views about the government’s proposals on how to get at least 90% of pupils to take GCSEs in the EBacc subjects.
Consultation description
We would like your views on:
-
what factors schools should consider when deciding that a pupil shouldn’t take all the
GCSE
subjects for the
English Baccalaureate (
EBacc
)
-
proposed changes to the range of data we publish about school performance
-
the challenges of implementing the
EBacc
, including teacher recruitment
-
the impact of these proposals on pupils with protected characteristics under the
Equality Act 2010


Psalm 19
For the chief musician. A psalm of David.
1 The heavens declare the glory of God,
and the skies make his handiwork known!
2 Day after day speech pours out;
night after night it reveals knowledge.
3 There is no speech or spoken words;
their voice is not heard.
4 Yet their words go out over all the earth,
and their speech to the end of the world.
He has pitched a tent for the sun among them.
5 The sun is like a bridegroom coming out of his chamber
and like a strong man who rejoices when he runs his race.
6 The sun rises from the one horizon
and crosses the sky to the other;
nothing escapes its heat.
7 The law of Yahweh is perfect, restoring the soul;
the testimony of Yahweh are reliable, making the simple wise.
8 The instructions of Yahweh are right, making the heart glad;
the commandment of Yahweh is pure, bringing light to the eyes.
9 The fear of Yahweh is pure, enduring forever;
the righteous decrees of Yahweh are true and altogether right!
10 They are of greater value than gold, even more than much fine gold;
they are sweeter than honey and the dripping honey from the honeycomb.
11 Yes, by them your servant is warned;
in obeying them there is great reward.
12 Who can discern all his own errors?
Cleanse me from hidden faults.
13 Keep your servant also from arrogant sins;
let them not rule over me.
Then I will be perfect,
and I will be innocent from many transgressions.
14 May the words of my mouth and the thoughts of my heart
be acceptable in your sight,
Yahweh, my rock and my redeemer.


| Current Ideas |
|---|
| 2019 Game Jam Game |
| HTML Positioner |
| Tic Tac Toe |
| Click Game |
Hover over a project to know more about it and click for more info.
Global game jam game that was made with my fellow classmates.
An HTML box positioner that can help people who have never built web pages before.
Tic tac Toe game Built in class with Code Crew
ClickGame Created in CodeCrew class using A multitude of javascript HTML and CSS


These functions can be used to quickly generate a fairly decent Excel
workbook containing a collection of datasets. report_from_data()
allows you
to export a list of data.frames (where worksheet names are taken from the
list names), while report_from_sql()
will read the data using a directory
containing SQL scripts (where worksheet names are taken from the SQL script
names). A main advantage of these functions is the ability to supply an
existing Excel template - see 'Details' for more information.
report_from_sql( filename = nice_filename(dir = "Outputs"), file_template = "Excel/template.xlsx", coversheet_content = list(C5 = default_info_table()), sql_directory = "SQL", sql_connection = connect_to_database(), transformers = NULL, save_on_complete = TRUE, open_on_complete = interactive(), creator = get_user(), cover_template = 1, data_template = 2 ) report_from_data( filename = nice_filename(dir = "Outputs"), file_template = "Excel/template.xlsx", coversheet_content = list(C5 = default_info_table()), datasets = NULL, transformers = NULL, save_on_complete = TRUE, open_on_complete = interactive(), creator = get_user(), cover_template = 1, data_template = 2 )
| filename | The name of the file to create |
|---|---|
| file_template | A filepath pointing to an Excel workbook to use as a template. See 'Details' for more information. |
| coversheet_content | Content used to populate the report coversheet. This should be a named list of data.frames where the names are Excel-style cell references giving the upper-left corner of each data.frame. |
| sql_directory | A directory containing the SQL files to be used in the report. |
| sql_connection | A connection to an SQL database. See this article from RStudio for a good introduction to the topic. |
| transformers | Can be either a single function that will be applied to each dataset or a named list of functions. If the latter:
|
| save_on_complete | Set |
| open_on_complete | If |
| creator | This name will be used to set the 'Creator' and 'Last Modified By' fields in the workbook. |
| cover_template, data_template | The names/indices of the worksheets to use as templates for the coversheet/data sheets. By default these will respectively be the first and second sheets of the template workbook. |
| datasets | A named list containing data.frames. The names will be used as worksheet names in the final report. |
An openxlsx
workbook object
Reports generated with quickReport consist of a coversheet containing
report information and separate sheets for each dataset included. You can
provide a template for a report by supplying a path to an existing workbook
in the template
field. By default, the first sheet will be used as a
template for the report coversheet, while the second will be used as a
template for each data sheet added to the report. If you wish to use a
different template for a dataset included in the report, you can do
this by including a worksheet in the template workbook with the same name as
the dataset in question. Within the template worksheets you can specify where
the data should be placed by entering the marker '!data'
in the first cell
where the data should appear. You can change the marker value using
options(qr.marker = "new-value")
.


| Package | Description |
|---|---|
| org.dyn4j.dynamics |
Package containing the dynamics engine.
|
| org.dyn4j.geometry |
This package contains geometric objects used by the collision detection package.
|
| Modifier and Type | Field and Description |
|---|---|
protected Mass |
Body.mass
The
Mass information |
| Modifier and Type | Method and Description |
|---|---|
Mass |
BodyFixture.createMass()
Creates a new
Mass object using the set density. |
Mass |
Body.getMass()
Returns this
Body 's mass information. |
| Modifier and Type | Method and Description |
|---|---|
Body |
Body.setMass(Mass mass)
Sets this
Body 's mass information. |
| Modifier and Type | Method and Description |
|---|---|
static Mass |
Mass.create(java.util.List<Mass> masses)
Creates a
Mass object from the given array of masses. |
Mass |
Shape.createMass(double density)
|
Mass |
Polygon.createMass(double density)
|
Mass |
Circle.createMass(double density)
|
Mass |
Rectangle.createMass(double density)
|
Mass |
HalfEllipse.createMass(double density) |
Mass |
Ellipse.createMass(double density) |
Mass |
Capsule.createMass(double density) |
Mass |
Segment.createMass(double density)
|
Mass |
Slice.createMass(double density) |
| Modifier and Type | Method and Description |
|---|---|
static Mass |
Mass.create(java.util.List<Mass> masses)
Creates a
Mass object from the given array of masses. |
| Constructor and Description |
|---|
Mass(Mass mass)
Copy constructor.
|


There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour , or randomised words which don't look even slightly believable.
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, njected humour, or randomised words which don't look even slightly believable.
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable.


--- title: Internal - OpenAPI Parser keywords: fastai sidebar: home_sidebar nb_path: "90_build_lib.ipynb" ---
This library leverages the OpenAPI Specification to create a python client for the GitHub API. The OpenAPI specification contains metadata on all of the endpoints and how to access them properly. Using this metadata, we can construct a python client dynamically that updates automatically along with the OpenAPI Spec.
This module created by build_funcs
contains a list of metadata for each endpoint, containing the path, verb, operation id, summary, documentation relative URL, and list of parameters (if any), e.g:
from ghapi.metadata import funcs
GhMeta(*funcs[3])


Run a list of analyses
runCmAnalyses( connectionDetails, cdmDatabaseSchema, oracleTempSchema = cdmDatabaseSchema, exposureDatabaseSchema = cdmDatabaseSchema, exposureTable = "drug_era", outcomeDatabaseSchema = cdmDatabaseSchema, outcomeTable = "condition_occurrence", cdmVersion = 5, outputFolder = "./CohortMethodOutput", cmAnalysisList, targetComparatorOutcomesList, refitPsForEveryOutcome = FALSE, refitPsForEveryStudyPopulation = TRUE, prefilterCovariates = TRUE, getDbCohortMethodDataThreads = 1, createPsThreads = 1, psCvThreads = 1, createStudyPopThreads = 1, trimMatchStratifyThreads = 1, prefilterCovariatesThreads = 1, fitOutcomeModelThreads = 1, outcomeCvThreads = 1, outcomeIdsOfInterest )
| connectionDetails | An R object of type |
|---|---|
| cdmDatabaseSchema | The name of the database schema that contains the OMOP CDM instance. Requires read permissions to this database. On SQL Server, this should specify both the database and the schema, so for example 'cdm_instance.dbo'. |
| oracleTempSchema | For Oracle only: the name of the database schema where you want all temporary tables to be managed. Requires create/insert permissions to this database. |
| exposureDatabaseSchema | The name of the database schema that is the location where the exposure data used to define the exposure cohorts is available. If exposureTable = DRUG_ERA, exposureDatabaseSchema is not used by assumed to be cdmSchema. Requires read permissions to this database. |
| exposureTable | The tablename that contains the exposure cohorts. If exposureTable <> DRUG_ERA, then expectation is exposureTable has format of COHORT table: COHORT_DEFINITION_ID, SUBJECT_ID, COHORT_START_DATE, COHORT_END_DATE. |
| outcomeDatabaseSchema | The name of the database schema that is the location where the data used to define the outcome cohorts is available. If exposureTable = CONDITION_ERA, exposureDatabaseSchema is not used by assumed to be cdmSchema. Requires read permissions to this database. |
| outcomeTable | The tablename that contains the outcome cohorts. If outcomeTable <> CONDITION_OCCURRENCE, then expectation is outcomeTable has format of COHORT table: COHORT_DEFINITION_ID, SUBJECT_ID, COHORT_START_DATE, COHORT_END_DATE. |
| cdmVersion | Define the OMOP CDM version used: currently support "4" and "5". |
| outputFolder | Name of the folder where all the outputs will written to. |
| cmAnalysisList | A list of objects of type |
| targetComparatorOutcomesList | A list of objects of type |
| refitPsForEveryOutcome | Should the propensity model be fitted for every outcome (i.e. after people who already had the outcome are removed)? If false, a single propensity model will be fitted, and people who had the outcome previously will be removed afterwards. |
| refitPsForEveryStudyPopulation | Should the propensity model be fitted for every study population definition? If false, a single propensity model will be fitted, and the study population criteria will be applied afterwards. |
| prefilterCovariates | If TRUE, and some outcome models require filtering covariates
by concept ID (e.g. because |
| getDbCohortMethodDataThreads | The number of parallel threads to use for building the cohortMethod data objects. |
| createPsThreads | The number of parallel threads to use for fitting the propensity models. |
| psCvThreads | The number of parallel threads to use for the cross-
validation when estimating the hyperparameter for the
propensity model. Note that the total number of CV threads at
one time could be |
| createStudyPopThreads | The number of parallel threads to use for creating the study population. |
| trimMatchStratifyThreads | The number of parallel threads to use for trimming, matching and stratifying. |
| prefilterCovariatesThreads | The number of parallel threads to use for prefiltering covariates. |
| fitOutcomeModelThreads | The number of parallel threads to use for fitting the outcome models. |
| outcomeCvThreads | The number of parallel threads to use for the cross-
validation when estimating the hyperparameter for the outcome
model. Note that the total number of CV threads at one time
could be |
| outcomeIdsOfInterest | If provided, creation of non-essential files will be skipped for all other outcome IDs. This could be helpful to speed up analyses with many controls. |
A tibble describing for each target-comparator-outcome-analysisId combination where the intermediary and
outcome model files can be found, relative to the outputFolder
.
Run a list of analyses for the target-comparator-outcomes of interest. This function will run all
specified analyses against all hypotheses of interest, meaning that the total number of outcome
models is length(cmAnalysisList) * length(targetComparatorOutcomesList)
(if all analyses specify an
outcome model should be fitted). When you provide several analyses it will determine whether any of
the analyses have anything in common, and will take advantage of this fact. For example, if we
specify several analyses that only differ in the way the outcome model is fitted, then this
function will extract the data and fit the propensity model only once, and re-use this in all the
analysis.


Clean the room function: given an input of [1,2,4,591,392,391,2,5,10,2,1,1,1,20,20], make a function that organizes these into individual array that is ordered. For example answer(ArrayFromAbove) should return: [[1,1,1,1],[2,2,2], 4,5,10,[20,20], 391, 392,591]. Bonus: Make it so it organizes strings differently from number types. i.e. [1, "2", "3", 2] should return [[1,2], ["2", "3"]]
Result:
Write a javascript function that takes an array of numbers and a target number. The function should find two different numbers in the array that, when added together, give the target number. For example: answer([1,2,3], 4) should return [1,3].
Result:
Write a function that converts HEX to RGB. Then Make that function autodect the formats so that if you enter HEX color format it returns RGB and if you enter RGB color format it returns HEX. Bonus: Release this tool as a npm package.
Enter red, green and blue color levels (%) and press the Convert button:
| Color | Color name |
(R,G,B) | Hex |
|---|---|---|---|
| Black | (0,0,0) | #000000 | |
| White | (255,255,255) | #FFFFFF | |
| Red | (255,0,0) | #FF0000 | |
| Lime | (0,255,0) | #00FF00 | |
| Blue | (0,0,255) | #0000FF | |
| Yellow | (255,255,0) | #FFFF00 | |
| Cyan | (0,255,255) | #00FFFF | |
| Magenta | (255,0,255) | #FF00FF | |
| Silver | (192,192,192) | #C0C0C0 | |
| Gray | (128,128,128) | #808080 | |
| Maroon | (128,0,0) | #800000 | |
| Olive | (128,128,0) | #808000 | |
| Green | (0,128,0) | #008000 | |
| Purple | (128,0,128) | #800080 | |
| Teal | (0,128,128) | #008080 | |
| Navy | (0,0,128) | #000080 |


Not a fan of advertisements and want to show your support? We've set up a product for awesome people like you! This is an optional service that will remove all third-party ads from the app.
You already purchased removal of advertisements. Thank you for your support!


UGraphs
Visualize your graphs
Source Code
Text Input
File Upload
×
Warning!
Invalid JSON. Try again!
JSON:
Submit
×
Warning!
Invalid file, try with a JSON file.
Submit


LOCALE
Section: Linux User Manual (5)
Updated: 2014-06-13
Index
Return to Main Contents
NAME
locale - describes a locale definition file
DESCRIPTION
The
locale
definition file contains all the information that the
localedef(1)
command needs to convert it into the binary locale database.
The definition files consist of sections which each describe a
locale category in detail.
Syntax
The locale definition file starts with a header that may consist
of the following keywords:
- <escape_char>
-
is followed by a character that should be used as the
escape-character for the rest of the file to mark characters that
should be interpreted in a special way.
It defaults to the backslash (\).
- <comment_char>
-
is followed by a character that will be used as the
comment-character for the rest of the file.
It defaults to the number sign (#).
The locale definition has one part for each locale category.
Each part can be copied from another existing locale or
can be defined from scratch.
If the category should be copied,
the only valid keyword in the definition is
copy
followed by the name of the locale which should be copied.
Locale category sections
The following category sections are defined by POSIX:
- *
-
LC_CTYPE
- *
-
LC_COLLATE
- *
-
LC_MESSAGES
- *
-
LC_MONETARY
- *
-
LC_NUMERIC
- *
-
LC_TIME
In addition, since version 2.2,
the GNU C library supports the following nonstandard categories:
- *
-
LC_ADDRESS
- *
-
LC_IDENTIFICATION
- *
-
LC_MEASUREMENT
- *
-
LC_NAME
- *
-
LC_PAPER
- *
-
LC_TELEPHONE
LC_ADDRESS
The definition starts with the string
LC_ADDRESS
in the first column.
The following keywords are allowed:
- postal_fmt
-
followed by a string containing field descriptors that define
the format used for postal addresses in the locale.
The following field descriptors are recognized:
-
- %a
-
Care of person, or organization.
- %f
-
Firm name.
- %d
-
Department name.
- %b
-
Building name.
- %s
-
Street or block (e.g., Japanese) name.
- %h
-
House number or designation.
- %N
-
Insert an end-of-line if the previous descriptor's value was not an empty
string; otherwise ignore.
- %t
-
Insert a space if the previous descriptor's value was not an empty string;
otherwise ignore.
- %r
-
Room number, door designation.
- %e
-
Floor number.
- %C
-
Country designation, from the <country_post> keyword.
- %z
-
Zip number, postal code.
- %T
-
Town, city.
- %S
-
State, province, or prefecture.
- %c
-
Country, as taken from data record.
Each field descriptor may have an 'R' after
the '%' to specify that the
information is taken from a Romanized version string of the
entity.
- country_name
-
followed by the country name in the language of the current document
(e.g., "Deutschland" for the
de_DE
locale).
- country_post
-
followed by the abbreviation of the country (see CERT_MAILCODES).
- country_ab2
-
followed by the two-letter abbreviation of the country (ISO 3166).
- country_ab3
-
followed by the three-letter abbreviation of the country (ISO 3166).
- country_num
-
followed by the numeric country code (ISO 3166).
- country_car
-
followed by the code for the country car number.
- country_isbn
-
followed by the ISBN code (for books).
- lang_name
-
followed by the language name in the language of the current document.
- lang_ab
-
followed by the two-letter abbreviation of the language (ISO 639).
- lang_term
-
followed by the three-letter abbreviation of the language (ISO 639-2/T).
- lang_lib
-
followed by the three-letter abbreviation of the language for library
use (ISO 639-2/B).
Applications should in general prefer
lang_term
over
lang_lib.
The
LC_ADDRESS
definition ends with the string
END LC_ADDRESS.
LC_CTYPE
The definition starts with the string
LC_CTYPE
in the first column.
The following keywords are allowed:
- upper
-
followed by a list of uppercase letters.
The letters
A
through
Z
are included automatically.
Characters also specified as
cntrl,
digit,
punct,
or
space
are not allowed.
- lower
-
followed by a list of lowercase letters.
The letters
a
through
z
are included automatically.
Characters also specified as
cntrl,
digit,
punct,
or
space
are not allowed.
- alpha
-
followed by a list of letters.
All character specified as either
upper
or
lower
are automatically included.
Characters also specified as
cntrl,
digit,
punct,
or
space
are not allowed.
- digit
-
followed by the characters classified as numeric digits.
Only the
digits
0
through
9
are allowed.
They are included by default in this class.
- space
-
followed by a list of characters defined as white-space
characters.
Characters also specified as
upper,
lower,
alpha,
digit,
graph,
or
xdigit
are not allowed.
The characters
<space>,
<form-feed>,
<newline>,
<carriage-return>,
<tab>,
and
<vertical-tab>
are automatically included.
- cntrl
-
followed by a list of control characters.
Characters also specified as
upper,
lower,
alpha,
digit,
punct,
graph,
print,
or
xdigit
are not allowed.
- punct
-
followed by a list of punctuation characters.
Characters also
specified as
upper,
lower,
alpha,
digit,
cntrl,
xdigit,
or the
<space>
character are not allowed.
- graph
-
followed by a list of printable characters, not including the
<space>
character.
The characters defined as
upper,
lower,
alpha,
digit,
xdigit,
and
punct
are automatically included.
Characters also specified as
cntrl
are not allowed.
- print
-
followed by a list of printable characters, including the
<space>
character.
The characters defined as
upper,
lower,
alpha,
digit,
xdigit,
punct,
and the
<space>
character are automatically included.
Characters also specified as
cntrl
are not allowed.
- xdigit
-
followed by a list of characters classified as hexadecimal
digits.
The decimal digits must be included followed by one or
more set of six characters in ascending order.
The following
characters are included by default:
0
through
9,
a
through
f,
A
through
F.
- blank
-
followed by a list of characters classified as
blank.
The characters
<space>
and
<tab>
are automatically included.
- toupper
-
followed by a list of mappings from lowercase to uppercase
letters.
Each mapping is a pair of a lowercase and an uppercase letter
separated with a
,
and enclosed in parentheses.
The members of the list are separated
with semicolons.
- tolower
-
followed by a list of mappings from uppercase to lowercase
letters.
If the keyword tolower is not present, the reverse of the
toupper list is used.
The
LC_CTYPE
definition ends with the string
END LC_CTYPE.
LC_COLLATE
The
LC_COLLATE
category defines the rules for collating characters.
Due to
limitations of libc not all POSIX-options are implemented.
The definition starts with the string
LC_COLLATE
in the first column.
The following keywords are allowed:
- collating-element
-
followed by the definition of a collating-element symbol
representing a multicharacter collating element.
- collating-symbol
-
followed by the definition of a collating symbol
that can be used in collation order statements.
The order-definition starts with a line:
- order_start
-
followed by a list of keywords chosen from
forward,
backward,
or
position.
The order definition consists of lines that describe the order
and is terminated with the keyword
order_end.
The
LC_COLLATE
definition ends with the string
END LC_COLLATE.
LC_IDENTIFICATION
This category contains meta-information about the locale definition.
The definition starts with the string
LC_IDENTIFICATION
in the first column.
The following keywords are allowed:
- title
-
followed by the title of the locale document
(e.g., "Maori language locale for New Zealand").
- source
-
followed by the name of the organization that maintains this document.
- address
-
followed by the address of the organization that maintains this document.
- contact
-
followed by the name of the contact person at
the organization that maintains this document.
- email
-
followed by the email address of the person or
organization that maintains this document.
- tel
-
followed by the telephone number (in international format)
of the organization that maintains this document.
- fax
-
followed by the fax number (in international format)
of the organization that maintains this document.
- language
-
followed by the name of the language to which this document applies.
- territory
-
followed by the name of the country/geographic extent
to which this document applies.
- audience
-
followed by a description of the audience for which this document is intended.
- application
-
followed by a description of any special application
for which this document is intended.
- abbreviation
-
followed by the short name for this document.
- revision
-
followed by the revision number of this document.
- date
-
followed by the revision date of this document.
In addition, for each of the categories defined by the document,
there should be a line starting with the keyword
category,
followed by:
- *
-
a string that identifies this locale category definition,
- *
-
a semicolon, and
- *
-
one of the
LC_*
identifiers.
The
LC_IDENTIFICATION
definition ends with the string
END LC_IDENTIFICATION.
LC_MESSAGES
The definition starts with the string
LC_MESSAGES
in the first column.
The following keywords are allowed:
- yesexpr
-
followed by a regular expression that describes possible
yes-responses.
- noexpr
-
followed by a regular expression that describes possible
no-responses.
- yesstr
-
followed by the output string corresponding to "yes".
- nostr
-
followed by the output string corresponding to "no".
The
LC_MESSAGES
definition ends with the string
END LC_MESSAGES.
LC_MEASUREMENT
The definition starts with the string
LC_MEASUREMENT
in the first column.
The following keywords are allowed:
- measurement
-
followed by number identifying the standard used for measurement.
The following values are recognized:
-
- 1
-
Metric.
- 2
-
US customary measurements.
The
LC_MEASUREMENT
definition ends with the string
END LC_MEASUREMENT.
LC_MONETARY
The definition starts with the string
LC_MONETARY
in the first column.
The following keywords are allowed:
- int_curr_symbol
-
followed by the international currency symbol.
This must be a
4-character string containing the international currency symbol as
defined by the ISO 4217 standard (three characters) followed by a
separator.
- currency_symbol
-
followed by the local currency symbol.
- mon_decimal_point
-
followed by the string that will be used as the decimal delimiter
when formatting monetary quantities.
- mon_thousands_sep
-
followed by the string that will be used as a group separator
when formatting monetary quantities.
- mon_grouping
-
followed by a sequence of integers separated by semicolons that
describe the formatting of monetary quantities.
See
grouping
below for details.
- positive_sign
-
followed by a string that is used to indicate a positive sign for
monetary quantities.
- negative_sign
-
followed by a string that is used to indicate a negative sign for
monetary quantities.
- int_frac_digits
-
followed by the number of fractional digits that should be used when
formatting with the
int_curr_symbol.
- frac_digits
-
followed by the number of fractional digits that should be used when
formatting with the
currency_symbol.
- p_cs_precedes
-
followed by an integer that indicates the placement of
currency_symbol
for a nonnegative formatted monetary quantity:
-
- 0
-
the symbol succeeds the value.
- 1
-
the symbol precedes the value.
- n_cs_precedes
-
followed by an integer that indicates the placement of
currency_symbol
for a negative formatted monetary quantity.
The same values are recognized as for
p_cs_precedes.
- int_p_cs_precedes
-
followed by an integer that indicates the placement of
int_currency_symbol
for a nonnegative internationally formatted monetary quantity.
The same values are recognized as for
p_cs_precedes.
- int_n_cs_precedes
-
followed by an integer that indicates the placement of
int_currency_symbol
for a negative internationally formatted monetary quantity.
The same values are recognized as for
p_cs_precedes.
- p_sep_by_space
-
followed by an integer that indicates the separation of
currency_symbol,
the sign string, and the value for a nonnegative formatted monetary quantity.
The following values are recognized:
-
- 0
-
No space separates the currency symbol and the value.
- 1
-
If the currency symbol and the sign string are adjacent,
a space separates them from the value;
otherwise a space separates the currency symbol and the value.
- 2
-
If the currency symbol and the sign string are adjacent,
a space separates them from the value;
otherwise a space separates the sign string and the value.
- n_sep_by_space
-
followed by an integer that indicates the separation of
currency_symbol,
the sign string, and the value for a negative formatted monetary quantity.
The same values are recognized as for
p_sep_by_space.
- int_p_sep_by_space
-
followed by an integer that indicates the separation of
int_currency_symbol,
the sign string,
and the value for a nonnegative internationally formatted monetary quantity.
The same values are recognized as for
p_sep_by_space.
- int_n_sep_by_space
-
followed by an integer that indicates the separation of
int_currency_symbol,
the sign string,
and the value for a negative internationally formatted monetary quantity.
The same values are recognized as for
p_sep_by_space.
- p_sign_posn
-
followed by an integer that indicates where the
positive_sign
should be placed for a nonnegative monetary quantity:
-
- 0
-
Parentheses enclose the quantity and the
currency_symbol
or
int_curr_symbol.
- 1
-
The sign string precedes the quantity and the
currency_symbol
or the
int_curr_symbol.
- 2
-
The sign string succeeds the quantity and the
currency_symbol
or the
int_curr_symbol.
- 3
-
The sign string precedes the
currency_symbol
or the
int_curr_symbol.
- 4
-
The sign string succeeds the
currency_symbol
or the
int_curr_symbol.
- n_sign_posn
-
followed by an integer that indicates where the
negative_sign
should be placed for a negative monetary quantity.
The same values are recognized as for
p_sign_posn.
- int_p_sign_posn
-
followed by an integer that indicates where the
negative_sign
should be placed for a nonnegative
internationally formatted monetary quantity.
The same values are recognized as for
p_sign_posn.
- int_n_sign_posn
-
followed by an integer that indicates where the
negative_sign
should be placed for a negative
internationally formatted monetary quantity.
The same values are recognized as for
p_sign_posn.
The
LC_MONETARY
definition ends with the string
END LC_MONETARY.
LC_NAME
The definition starts with the string
LC_NAME
in the first column.
Various keywords are allowed, but only
name_fmt
is mandatory.
Other keywords are needed only if there is common convention to
use the corresponding salutation in this locale.
The allowed keywords are as follows:
- name_fmt
-
followed by a string containing field descriptors that define
the format used for names in the locale.
The following field descriptors are recognized:
-
- %f
-
Family name(s).
- %F
-
Family names in uppercase.
- %g
-
First given name.
- %G
-
First given initial.
- %l
-
First given name with Latin letters.
- %o
-
Other shorter name.
- %m
-
Additional given name(s).
- %M
-
Initials for additional given name(s).
- %p
-
Profession.
- %s
-
Salutation, such as "Doctor".
- %S
-
Abbreviated salutation, such as "Mr." or "Dr.".
- %d
-
Salutation, using the FDCC-sets conventions.
- %t
-
If the preceding field descriptor resulted in an empty string,
then the empty string, otherwise a space character.
- name_gen
-
followed by the general salutation for any gender.
- name_mr
-
followed by the salutation for men.
- name_mrs
-
followed by the salutation for married women.
- name_miss
-
followed by the salutation for unmarried women.
- name_ms
-
followed by the salutation valid for all women.
The
LC_NAME
definition ends with the string
END LC_NAME.
LC_NUMERIC
The definition starts with the string
LC_NUMERIC
in the first column.
The following keywords are allowed:
- decimal_point
-
followed by the string that will be used as the decimal delimiter
when formatting numeric quantities.
- thousands_sep
-
followed by the string that will be used as a group separator
when formatting numeric quantities.
- grouping
-
followed by a sequence of integers separated by semicolons that
describe the formatting of numeric quantities.
-
Each integer specifies the number of digits in a group.
The first integer defines the size of the group immediately
to the left of the decimal delimiter.
Subsequent integers define succeeding groups to the
left of the previous group.
If the last integer is not -1, then the size of the previous group
(if any) is repeatedly used for the remainder of the digits.
If the last integer is -1, then no further grouping is performed.
The
LC_NUMERIC
definition ends with the string
END LC_NUMERIC.
LC_PAPER
The definition starts with the string
LC_PAPER
in the first column.
The following keywords are allowed:
- height
-
followed by the height, in millimeters, of the standard paper format.
- width
-
followed by the width, in millimeters, of the standard paper format.
The
LC_PAPER
definition ends with the string
END LC_PAPER.
LC_TELEPHONE
The definition starts with the string
LC_TELEPHONE
in the first column.
The following keywords are allowed:
- tel_int_fmt
-
followed by a string that contains field descriptors that identify
the format used to dial international numbers.
The following field descriptors are recognized:
-
- %a
-
Area code without nationwide prefix (the prefix is often "00").
- %A
-
Area code including nationwide prefix.
- %l
-
Local number (within area code).
- %e
-
Extension (to local number).
- %c
-
Country code.
- %C
-
Alternate carrier service code used for dialing abroad.
- %t
-
If the preceding field descriptor resulted in an empty string,
then the empty string, otherwise a space character.
- tel_dom_fmt
-
followed by a string that contains field descriptors that identify
the format used to dial domestic numbers.
The recognized field descriptors are the same as for
tel_int_fmt.
- int_select
-
followed by the prefix used to call international phone numbers.
- int_prefix
-
followed by the prefix used from other countries to dial this country.
The
LC_TELEPHONE
definition ends with the string
END LC_TELEPHONE.
LC_TIME
The definition starts with the string
LC_TIME
in the first column.
The following keywords are allowed:
- abday
-
followed by a list of abbreviated names of the days of the week.
The list starts with the first day of the week
as specified by
week
(Sunday by default).
See NOTES.
- day
-
followed by a list of names of the days of the week.
The list starts with the first day of the week
as specified by
week
(Sunday by default).
See NOTES.
- abmon
-
followed by a list of abbreviated month names.
- mon
-
followed by a list of month names.
- am_pm
-
followed by the appropriate representation of the
am
and
pm
strings.
This should be left empty for locales not using AM/PM convention.
- d_t_fmt
-
followed by the appropriate date and time format.
- d_fmt
-
followed by the appropriate date format.
- t_fmt
-
followed by the appropriate time format.
- t_fmt_ampm
-
followed by the appropriate time format when using 12h clock format.
This should be left empty for locales not using AM/PM convention.
- week
-
followed by a list of three values:
The number of days in a week (by default 7),
a date of beginning of the week (by default corresponds to Sunday),
and the minimal length of the first week in year (by default 4).
Regarding the start of the week,
19971130
shall be used for Sunday and
19971201
shall be used for Monday.
See NOTES.
- first_weekday (since glibc 2.2)
-
followed by the number of the first day from the
day
list to be shown in calendar applications.
The default value of
1
corresponds to either Sunday or Monday depending
on the value of the second
week
list item.
See NOTES.
- first_workday (since glibc 2.2)
-
followed by the number of the first working day from the
day
list.
The default value is
2.
See NOTES.
- cal_direction
-
followed by a value that indicates the direction for the
display of calendar dates, as follows:
-
- 1
-
Left-right from top.
- 2
-
Top-down from left.
- 3
-
Right-left from top.
- date_fmt
-
followed by the appropriate date representation for
date(1).
The
LC_TIME
definition ends with the string
END LC_TIME.
FILES
- /usr/lib/locale/locale-archive
-
Usual default locale archive location.
- /usr/share/i18n/locales
-
Usual default path for locale definition files.
CONFORMING TO
POSIX.2, ISO/IEC TR 14652.
NOTES
The collective GNU C library community wisdom regarding
abday,
day,
week,
first_weekday,
and
first_workday
states at
https://sourceware.org/glibc/wiki/Locales
the following:
- *
-
The value of the second
week
list item specifies the base of the
abday
and
day
lists.
- *
-
first_weekday
specifies the offset of the first day-of-week in the
abday
and
day
lists.
- *
-
For compatibility reasons, all glibc locales should set the value of the
second
week
list item to
19971130
(Sunday) and base the
abday
and
day
lists appropriately, and set
first_weekday
to
1
or
2,
depending on whether the week actually starts on Sunday or Monday
for the locale.
BUGS
This manual page isn't complete.

Time: 02:55:20 GMT, September 18, 2014


Stargazing: Is it the time again for a meteoroid to hit Earth?
by Wayne Harris-WyrickAccording to NASA’s Asteroid Fast Facts page, a lot of space material lands on Earth every year. From the NASA page:
“Every day, Earth is bombarded with more than 100 tons of dust and sand-sized particles.
“About once a year, an automobile-sized asteroid hits Earth's atmosphere, creates an impressive fireball, and burns up before reaching the surface.
Every 2,000 years or so, a meteoroid the size of a football field hits Earth and causes significant damage to the area.”
When is the next one coming? No one knows. But NASA and other organizations worldwide constantly watch out for possible impactors from space. Even so, some escape discovery until they hit. In 2013, a small asteroid, about the size of a six-story building, entered our atmosphere over Chelyabinsk, Russian. It exploded with a blast more powerful than the atomic bomb over Hiroshima. The blast shattered glass in buildings all over the city and caused injuries to more than 1,200 people. It was so bright that scientists estimate it briefly outshone the sun. We had no warning of this event. No one saw it coming.
Many telescopes automatically search the night sky for incoming asteroids, for one with Earth in its sights. But scientists need your help finding them. You may be the one to spot the next one that threatens Earth.
An organization called Zooniverse currently has 108 projects where anyone, even you, can help scientists make new discoveries. I have written about Zooniverse before, but they have added quite a few new projects since then and more are added every year. You can find them at www.zooniverse.org.
The project to help find potentially dangerous asteroid is at www.zooniverse.org/projects/sandorkruk/hubble-asteroid-hunter. As with all the Zooniverse projects, you get a brief tutorial on what to look for and how to identify a target. Then you are presented with a series of photos. Using what you learned in the tutorial, you identify potential asteroid targets. Once identified, the project scientists analyze the photo to calculate the asteroid’s path to determine if Earth is in the way.
If saving the Earth from asteroid impacts isn’t your cup of tea, look through all of their projects. It’s likely one or several of the others will pique your interest.
Meteor Shower
The Geminid meteor shower peaks on the night of Friday and Saturday. While it can produce as many as 100 meteors per hour, a bright moon only three days past full will block out all but the brightest.
If you happen to be spending Christmas in Indonesia, Southeast Asia or Australia this year, step outside in the early afternoon. The moon passes between us and the sun, creating a solar eclipse. The moon is farther than average from us and won’t quite cover the entire disk of the sun. A ring, or annulus, of sunlight will encircle the dark moon, creating a relatively rare annular eclipse.
We won’t see any of this eclipse in Oklahoma. The next eclipse we see any part of in our state occurs on Oct. 14, 2023. But mark April 8, 2024, on your calendar. A total solar eclipse passes over southeast Oklahoma on that day, the best eclipse to hit our state in living memory.
Planet Visibility Report
December begins with Mars and Mercury in the pre-dawn sky. Jupiter, Venus and Saturn are grouped fairly close together low in the evening twilight. Over the course of the month, Venus gets higher, while the other two sink into invisibility on the twilight. Mercury also dives into the sun’s morning twilight glare, and by month’s end, only Venus in the evening sky and Mars in the morning sky remain visible. Full moon occurs on the 11th with new moon following on Christmas day.
Wayne Harris-Wyrick, children's book author, ghost hunter and astronomer. His email is<EMAIL_ADDRESS>Related Photos


{{m(post.created_at).format('MMM Do YYYY, HH:mm')}}
Edited - {{m(post.modified_at).format('MM Do YYYY, HH:mm')}}
Thank you, that you have been soooo interested in Roast.li. Really appreciate it. Come back later or check out the new posts.


API Keys
New API Key
A Cannlytics API key identifies a particular application, granting programmatic use with a selected subset of a user's permissions.
We strongly recommend that you encrypt your API keys in your data store and in memory when working with them, except when you need to access them to interface with the API. Your API key is observable if you use HTTP, so, please use HTTPS when you make requests to the Cannlytics API. Cannlytics does not store API keys, so, lost API keys are not recoverable In this case, or given any other anomalous activity, it is recommended that you void your old API key and create a new API key.
{% endcomment %}


United Developers
Setup
Tools
Master Setup
AP List:
AP Password:
Valid.
Please fill out this field.
Channel:
Valid.
Please fill out this field.
SSID ESP NOW:
Valid.
Please fill out this field.
Password ESP NOW:
Valid.
Please fill out this field.
IP Websocket:
Valid.
Please fill out this field.
Port:
Valid.
Please fill out this field.
Password ESP NOW:
Valid.
Please fill out this field.
Mqtt Server:
Valid.
Please fill out this field.
Port:
Valid.
Please fill out this field.
MQTT User name:
Valid.
Please fill out this field.
Password:
Valid.
Please fill out this field.
Submit
Slave Tools
Topology
Reset


Three.js Go is a library built on Three.js and Mapzen's OSM based vector tiles, for generating 3d geometry that approximates the real world, based on map data. See the Three.js Go Github project for more details.


Marin Foster Care Association
The Marin Foster Care Association brings safe, quality care to all foster children in Marin County. They do so by providing support services and advocacy to all foster and adoptive families. The in-kind donations which they accept are mostly related to getting the kids something special for their accomplishments.
You can find them
In the real world, here: 35 Mitchell Blvd 5b, San Rafael
Through email here<EMAIL_ADDRESS>Remember:
You should contact Marin Foster Care Association before donating any items.


I am experienced in leveraging agile frameworks to provide a robust synopsis for high level
overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall
value proposition.
Skills
Programming Languages
Java
C# .net
RPGLE
CLLE
Web Technologies and Standards
Html
CSS
Javascript
Php
ES6
REST
Frameworks and libraries
Node
Angular
React
Laravel
.NET MVC
Bootstrap
Database
MYSQL
SQL server
DB2
MongoDB
DynamoDB
Cloud Platforms
AWS
Firebase
Tools
GIT
GITHUB
DOCKER
NPM
HP-ALM
BMC-remedy
Workflow
Agile Development & Scrum
Cross Functional Teams
Client-facing skills
Effective Communication
Projects
Pickup&Deliver
REST based API's coded in Laravel (PHP MVC framework)
React powered frontend, designed with HTML5 and Bootstrap
MYSQL database
Hosted on AWS
Version control and source code in Git/GitHub
Sentinel based authentication and authorization
Payments processing using Stripe Payments
React
Laravel
aws
Html
Bootstrap
Maps
GitHub
ResumeBuilder
Architectured on ASP.Net MVC 5 framework
Authorization using Identity framework
Entity framework - Code first approach
MS SQL server DB
Implementation of Razor Syntax and custom HTML helpers


Collection time must not be more than a year in the past.
Collection time must not be more than a year in the future.
Your group is responsible for observations about the land, water and air.
This includes weather, any recent rainfall, tide and current, as well as environmental conditions of the land and the water, pollution, and garbage.
Water condition image is required.
Record the extent of each type of garbage in the water.
Give more information about the marked Combined Sewer Overflow (CSO) pipes.
Give more information about the unmarked or other outfall pipes.
Land condition image is required.
Estimate percent surface cover for the adjacent shoreline (about 500 x 500 feet)
Percentages must add to 100%.
Record the extent of each type of garbage on the adjacent shoreline.


ES6-Geometry
Collection of immutable ES6 classes for simple 2D geometric objects and calculations.
Features
- Immutable classes.
- Statically typed using Flow.
- Arguments checking (zero overhead in production).
- Inspired by Victor.js.
Installation
npm install --save es6-geometry
Usage
As an example:
import { Point, Rectangle, Vector } from 'es6-geometry';
// A vector is an offset with a certain length (magnitude) and direction.
const vector = Vector.fromArray([100, 100]);
// A rectangle is defined by two points.
const rectangle = new Rectangle(
new Point(10, 10),
new Point(20, 20)
);
// Operations are immutable: rectangle remains untouched.
const newRectangle = rectangle.move(vector);
See the documentation for more information.
Development
To (re)compile, run npm run compile
. If you prefer to have a Webpack bundle, run npm run bundle
.
Tests can be invoked using npm run test
. Mocha is used as the test framework.
License
See the LICENSE.md
file (MIT).


In particular, some cascaded groupingBy()
collectors can be expressed by using a
simpler toMap()
collector, which is also likely to be more performant.
Example:
Collectors.groupingByConcurrent(String::length, Collectors.collectingAndThen(Collectors.maxBy(String::compareTo), Optional::get));
After the quick-fix is applied:
Collectors.toConcurrentMap(String::length, Function.identity(), BinaryOperator.maxBy(String::compareTo));
This inspection only reports if the language level of the project or module is 8 or higher.
New in 2017.1


About us
Read some books your friends suggested. Always remind to stay tuned and don't forget to finish those you have already started! :)
Read some books your friends suggested. Always remind to stay tuned and don't forget to finish those you have already started! :)


I was an opiate addict from the time I started using vicodin my freshman year in high school until I was using upwards of 80mg of oxycontin daily and anything else I could get my hands on. This report is my account of the time I decided I had had enough and wanted to get my life back.
I went to see a buprenorphine doctor to try and get my opiate addiction under control and out of my life, I decided against methadone because I still valued my self of humanity and independence and did not want to be treated like a caged animal and getting hand-fed my life-line every day.
Day 1: I came into the bupe doctor's office in 48 hours withdrawal, I was severely uncomfortable to say the least. I was administered 4mg Suboxone sublingually (under the tongue), it tastes terrible but you get used to it. After 30 minutes I felt my withdrawal melt away, almost unnoticeably. I was then administered an additional 4mg and sent home to return the following day. I do not believe that Sub should be started at such high doses initially, but more on that later. For the remainder of the day I was in a kind-of opiate mellowness I have not experienced before, again I am a very seasoned opiate connoisseur. It was like an opiate high without the euphoria, still good.
Day 2: I returned to the doc and told him I felt good and we decided that I should be on about 12-16mg Suboxone daily.
Week 1: The Suboxone works wonderfully to keep me withdrawal free, as it is an opiate, but I never felt the same 8-hour high I felt that first day, and in week 1 I even tried up to 20mg to try and recreate it but no dice, it only resulted in sedation.
Month 1-3: The only downfall of suboxone versus methadone is that methadone is a full agonist meaning it can always cure cravings because it DOES create euphoria and a high, the beauty in suboxone is that it is an agonist/antagonist which works well for getting me on my way of being opiate free by not keeping me high all the time, but..it does not cure cravings for everyone, myself included. Over the first 3 months I worked with my doctor in trying to cure my cravings by increasing the dose all the way up to 32mg/daily (16mg twice daily) which is too much, which I believe was due to the fact that I was more knowledgeable than he in the world of Suboxone.
Months 3-6: After much research I learned that at doses high than 4mg the suboxone starts occupying receptors that are more associated with negative feelings and dysphoria. I decided to take it upon myself to start lowerings my dosage about 4mg every two weeks until I was back down to 8mg daily. During this time period my body adjusted miraculously well to the decrease and after the initial drug, I actually felt better the more I got down.
Months 6-8 present: I am now down to 2mg/twice daily. I feel better than at any other dose in the last 8 months, and actually since my doses are 12 hours apart I when I take the pill I actually feel a little bit of an opiate high for a few hours as before when I was taking alot I never felt any different when I took another dose.
Conclusion/Observations: (Not FDA approved statements haha)
The key to getting the most out of suboxone and feeling the best I must stay at the lowest dose I can take.
The longer I abstain from taking my subs in between doses, the better it feels when I do take it.
Suboxone is infinitely better in the long run versus methadone because it keeps me from taking illicit opiates while not keeping me high all the time which teaches me to believe I can be opiate free, and to get help with counseling while being clear-headed.
Suboxone can be the first step to being free of opiates, but you have to be doing it for the right reasons, if all you want is an unlimited amount of opiates so that you dont have to score then you will get nowhere, I can guarantee you.
And remember, all us opiate addicts are in this together, and no one person should feel alone in the fight, you can be opiate free, everyone has their struggles. I wish good luck to all of you and I hope I helped some.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


climate health Health change {border-style Climate px;} #ffffff;} ./journal.pmed. Med. air Medicine United study Change States mitigation px; {font-family Public Sciences adaptation font-size global Global New Wisconsin, consequences double; energy research America University [], border-color border-width change. economic heat impacts local new pollution public solid; studies systems {font-style {font-weight ./S-()- Care GHG Jun Lancet. Patz [cited analysis approach benefits bold carbon colleagues courier; diseases em; emissions environmental food future issue low-carbon million modeling mortality potential pt;}


Donald Trump on impeachment: 'I want a trial'
by James CoxUS President Donald Trump's latest comments on the impeachment inquiry were typically bullish as he claimed he'd welcome a trial.
"Frankly, I want a trial," Trump told the Fox and Friends programme.
However, he doesn't think the House of Representatives will impeach him.
"I think it's very hard for them to impeach you if they have absolutely nothing," Trump said.
His comments follow two weeks of public hearings with 12 witnesses involved in the impeachment inquiry.
The Democratic-led House is investigating whether Trump abused the power of office by pushing Ukraine to investigate a political rival.
The trial is centred on a phone call between Trump and Ukrainian President Volodymyr Zelensky on July 25.
Trump asked his counterpart to launch an investigation into former US Vice President Joe Biden and his son, Hunter, who had served on the board of a Ukrainian gas company.
Biden is a 2020 Democratic presidential frontrunner.
Testimony revealed that the administration was also pushing for an investigation into a debunked conspiracy theory that it was Ukraine, not Russia, that meddled in the 2016 US presidential election.
Fiona Hill, a former Russia expert in the White House, debunked the Ukrainian theory today.


1 Chronicles 1:36
The sons of Eliphaz; Teman, and Omar, Zephi, and Gatam, Kenaz, and Timna, and Amalek.


Authorship
- Generalskaar
- SonOfABlaster
- Originally by Jetkokos (Donate via DS page)
- Have something to add? Consider contributing to the github repo. or use the squad suggestion form
Sources
- Branched from original repository by jetkokos who we contacted and gave us permission to publish
- Information and images taken from the SWGOH wiki
- Information and images taken from in-game and the SWGOH Forums
- Youtube creators credited in the popups, please drop them a like. (no affiliations)
Changelog/Updates
For changes and updates, please consult the issues portion of the github repo.


Flow Layout
问题描述 :
A flow layout manager takes rectangular objects and places them in a rectangular window from left to right. If there isn’t enough room in one row for an object, it is placed completely below all the objects in the first row at the left edge, where the order continues from left to right again. Given a set of rectangular dimensions and a maximum window width, you are to write a program that computes the dimensions of the final window after all the rectangles have been placed in it.
The final dimensions of the resulting window are 30 x 25, since the width of the first row is 10+20 = 30 and the combined height of the first and second rows is 12+13 = 25.
For example, given a window that can be at most 35 units wide, and three rectangles with dimensions 10 x 5, 20 x 12, and 8 x 13, the flow layout manager would create a window that looked like the figures below after each rectangle was added.
The final dimensions of the resulting window are 30 x 25, since the width of the first row is 10+20 = 30 and the combined height of the first and second rows is 12+13 = 25.
输入:
The input consists of one or more sets of data, followed by a final line containing only the value 0. Each data set starts with a line containing an integer, m, 1 <= m <= 80, which is the maximum width of the resulting window. This is followed by at least one and at most 15 lines, each containing the dimensions of one rectangle, width first, then height. The end of the list of rectangles is signaled by the pair -1 -1, which is not counted as the dimensions of an actual rectangle. Each rectangle is between 1 and 80 units wide (inclusive) and between 1 and 100 units high (inclusive).
输出:
For each input set print the width of the resulting window, followed by a space, then the lowercase letter “x”, followed by a space, then the height of the resulting window.
样例输入:
35 10 5 20 12 8 13 -1 -1 25 10 5 20 13 3 12 -1 -1 15 5 17 5 17 5 17 7 9 7 20 2 10 -1 -1 0
样例输出:
30 x 25 23 x 18 15 x 47
解题代码:
//* @author: import java.util.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int max_width; while((max_width=cin.nextInt())!=0){ int final_width=0; int final_height=0; int remain=max_width; int cur_height=0; int r_width=cin.nextInt(); int r_height=cin.nextInt(); while(r_width!=-1){ if(r_width<=remain){ remain-=r_width; if(final_width< max_width-remain) final_width=max_width-remain; if(cur_height< r_height) cur_height=r_height; } else{ final_height+=cur_height; cur_height=r_height; remain=max_width-r_width; } r_width=cin.nextInt(); r_height=cin.nextInt(); } if(final_width< max_width-remain) final_width=max_width-remain; final_height+=cur_height; System.out.println(final_width+" x "+final_height); } } }
(adsbygoogle = window.adsbygoogle || []).push({});
#include <cstdio>
int main() {
//answer must be odd
int n, u, d;
while(scanf("%d%d%d",&n,&u,&d)==3 && n>0) {
if(n<=u) { puts("1"); continue; }
n-=u; u-=d; n+=u-1; n/=u;
n<<=1, ++n;
printf("%dn",n);
}
return 0;
}
不同的编译器，printf(),执行的顺序不同，所以结果也就不同，建议不要那么写
不错，赞一个！
…. 配图居然是没方向的。。
else if也是要比较两次
样例输出和程序输出不吻合，修改一下样例输出吧。我用的是VC编译器，会提示我的i和j变量重复定义
有限自动机在ACM中是必须掌握的算法，实际上在面试当中几乎不可能让你单独的去实现这个算法，如果有题目要用到有限自动机来降低时间复杂度，那么这种面试题应该属于很难的级别了。
通不过。
这是研发类的题还是算法类？
第二个程序编译都通不过， int L[m+1][n+1];这样定义出错，应该换成具体的数字ac
能不能说一下tmp数组和solve都是干嘛的？
第15行代码，/n/n，应该改为\n\n
约瑟夫也用说这么长……很成熟的一个问题了，分治的方法解起来o(n)就可以了，有兴趣可以看看具体数学的第一章，关于约瑟夫问题推导出了一系列的结论，很漂亮
这个问题别太纠结了，不同的编译器结果不一样


---
format: html
title: Sample PhoneGap App with ReactJS
link: http://devgirl.org/2015/09/22/sample-phonegap-app-with-reactjs/
author: Holly Schinsky
thumb: /blog/uploads/thumb/holly.jpg
type: post
date: 2015-09-22 13:44:14 Z
external: true
status: publish
tags:
- PhoneGap Network
---
ReactJS has been getting a lot of attention and recently I decided to dig in myself to see what all the hype is about. ReactJS comes from the developers at Facebook, which may contribute to the popularity of it due to being backed by a big company (think AngularJS and Google). For the purposes of […]


Welcome to the Dark Site of The Moon. My first original website and a project inspired by Harvard CS50's "Homepage" problem set.


Auto
Repair
Home
New Cars
Capabilities
Our Services
About Us
Blog - Auto
Repair
NEWS NOTICES
QUALITY ABOUT CAR


Jeremiah 49:11
Leave thy fatherless children, I will preserve them alive; and let thy widows trust in me.


org.apache.batik.anim
Classes
AbstractAnimation
AnimationEngine
AnimationEngine.AnimationInfo
AnimationEngine.Sandwich
AnimationEngine.TargetInfo
ColorAnimation
InterpolatingAnimation
MotionAnimation
SetAnimation
SimpleAnimation
TransformAnimation
Exceptions
AnimationException


Download
Where to go next...
Generally
Known issues
FAQs
License
Change Log
Custom Search
For Soaplab2 providers
Installation and Building
Step By Step to the first service
Configuration Guide
Service metadata Guide
Deploying services
Providing strongly typed services
Administrative Tools
EMBOSS notes
Compatibility with Soaplab 1
For Soaplab2 clients
Clients Overview
Clients Installation
Command-line Client Guide
Spinet - a simple Web Client
Notes for Taverna users
Batch Test Client
Using strongly typed services
For Soaplab2 developers
Developer's Guide
Soaplab2 API
[If you are furious, desperate or have a suggestion please contact
Martin Senger
,
or subscribe to the
mailing list
, or visit
discussion forum
. Bugs can be reported
here
.]