WITNESS LIST State, Federal & International Relations Committee March 9, 1999-8:00A HB 585 For: West, Kelsee (Self) Registering, but not testifying: For: Bannerot, James (Westbank Community Library District) Fox, Beth (Self) Jimenez, Ivonne (El Paso Public Library) Smith, Mark (Texas Library Association) HB 1085 On: Martin, Robert (Texas State Library and Archives) HB 1433 For: Stewart, James (Self and Texas Library Association) On: Martin, Robert (Texas State Library and Archives) Registering, but not testifying: For: Bannerot, James (Westbank Community Library District) Hood, Norm (Independent Colleges and Universities of Texas) Jimenez, Ivonne (El Paso Public Library) Smith, Mark (Texas Library Association) Tuohy, Pat (Self) HB 1618 For: Herring, Marvin (Self) Hurley, Bruce (Self) Registering, but not testifying: For: Bannerot, James (Westbank Community Library District) Brown, Stephen (Self) Fox, Beth (Self) Jimenez, Ivonne (El Paso Public Library and Texas Library Assoc.) Tuohy, Pat (Self) Wehner, Bette (Self) HB 1673 For: Jimenez, Ivonne (Self and El Paso Public Library and Texas Library Assoc.) Mann, Susan (Self and Texas Library Association) On: Martin, Robert (Texas State Library and Archives) Registering, but not testifying: For: Bannerot, James (Westbank Community Library District) Brown, Stephen (Self) Fox, Beth (Self) Herring, Marvin (Self) Smith, Mark (Texas Library Association) Tuohy, Pat (Self) Texas Veterans Commission On: Buerschinger, Charles (Texas Veterans Commission) Nier, James (Texas Veterans Commission) Registering, but not testifying: On: Green, Billy (Texas Veterans Commission) Odell, Herbert (Texas Veterans Commission)


Logo by winner Matt Zucker
The International Obfuscated C Code
Contest
[ The judges |
IOCCC home page |
How to enter |
FAQ |
Mirrors |
IOCCC news |
People who have won |
Winning entries ]
The source winners of the 27th IOCCC have been released. Congratulations!
Right now, you cannot submit an entry becasue the IOCCC is not open.
We do plan to hold IOCCC28 in 2021.
Please see the watch the IOCCC news below for information on the next IOCCC.
Goals of the Contest
- Obfuscate: tr.v. -cated, -cating, -cates.
-
- To render obscure.
- To darken.
- To confuse: his emotions obfuscated his judgment.
[LLat. obfuscare, to darken : ob(intensive) + Lat. fuscare,
to darken < fuscus, dark.] -obfuscation n. obfuscatory adj
- The IOCCC:
- To write the most Obscure/Obfuscated C program within the rules.
- To show the importance of programming style, in an ironic way.
- To stress C compilers with unusual code.
- To illustrate some of the subtleties of the C language.
- To provide a safe forum for poor C code. :-)
IOCCC news
- 2021-01-04
- Email to IOCCC, via this email address:
<EMAIL_ADDRESS>with the following two words (separated by a space) somewhere in the subject of your email:
IOCCC 2021
works again.
We apologize for the Email outage of the past few days.
- 2021-01-02
- A temporary side effect of our move to using
GitHub,
Email to/from<EMAIL_ADDRESS>has been disabled.
We expect restore Email service in a few days.
When we do, we will announce restoration of Email service here.
- We sure to use URLs of the form https://www.ioccc.org/* that
include the www. when accessing the
IOCCC web site.
- 2020-12-31
- 2020-07-25
- 2020-03-22
- Due to current world events, we are extending the 27th IOCCC until 2020-May-15 06:26:49 UTC
- The submission tool will now be active until 2020-May-15 06:26:49 UTC
- 2019-10-13
- The source code for the winners of the 26th IOCCC has been released.
- The 27th IOCCC will be open from 2019-Dec-26 06:01:41 UTC (Boxing Day)
to 2020-Mar-15 06:26:49 UTC (Ides of March).
- The submission tool will be available around 2020-Jan-15 15:15:15 UTC.
- Draft Rules, Guidelines and IOCCC size tool for the 27th IOCCC are available.
- 2019-06-16
- Due to some delays, we now plan to publish source and annotations in early July 2019.
- 2019-05-11
Older news has been archived, but is not currently available


Plastic bags cannot easily be recycled. There are many plastic bags floating in the sea and animals like Marlin can get trapped in them.
Therefore, we should try to minimise the number of plastic bags.
We can do this by reusing plastic bags we already have or by using a different type of reusable bag such as one made in fabric.
Only some food packaging can be recycled. The packaging that can go into the recycling bin will have the recycling sign.
Be careful !! Some packing will have parts that can be recycled and other parts that cannot be recycled.
For example, the plastic yogurt container might be recyclable but the lid or the plastic used to seal the container might not be recyclable.
In this case, separate the lid from the container and throw the lid in the normal bin while the container can be thrown in the recycle bin.


FIGHT CLUB Directed by David Fincher
"The first rule of Fight Club is you do not talk about Fight Club," says ringmaster Tyler Durden (Brad Pitt), addressing a group of eager young men who've assembled in the basement of a seedy bar to beat each other senseless. "The second rule of Fight Club is you do not talk about Fight Club."
Ah, but rules were made to be broken, and it's a safe bet everyone who sees director David Fincher's brutal, stylistically brilliant "Fight Club" will have something to say about it. Given the current climate of political correctness, most of those comments will be negative, denouncing the movie for glamorizing violence and terrorism or shaming the script's anti-everything stance.
Those with long memories will recall there was once another picture which earned the same kinds of criticisms when it was first released: Stanley Kubrick's 1971 masterpiece "A Clockwork Orange." If "Orange" was a bitter answer to the "all you need is love" message of the late 1960s, "Club" is a brass-knuckled slap in the face to yuppiedom and its "greed is good" mantra.
Chuck Palahniuk's 1996 novel was compared in some critical quarters to J.G. Ballard's "Crash" in its depiction of outsiders brought together by shared passions for pain. But Ballard's characters were cryptic and mostly voyeuristic, while "Fight Club" is made up of everyday people, the same kinds of educated, mildly successful guys you'd find in any office building or apartment complex.
One of them is our nameless narrator (Edward Norton), a recall coordinator for a major car company. He's a drab, joyless, constantly exhausted drone who finds his only fulfillment in life comes from crashing support group meetings, such as those for victims of testicular cancer or "incest survivors."
When he crosses pathes first with chain-smoking "tourist" Marla Singer (Helena Bonham Carter) and then with the mysterious soap salesman Tyler Durden, our hero begins to rethink his entire life and to wonder why he's let himself be defined by the IKEA and Crate and Barrel furnishings decorating his condo. "The things you own end up owning you," Tyler tells him.
Fight Club, the new outlet for the narrator's built-up hostility, is an exclusive society in which the members pummel each other with their bare fists; black eyes, shattered jaws and broken teeth are this club's equivalent of the secret handshake. But what begins as a bloody good time eventually mutates into something bigger and more dangerous as Fight Club organizer Tyler becomes increasingly messianic and starts giving out "homework assignments" to his devotees.
"We have no Great War, no Great Depression," insists Tyler. "Our great war is a spiritual war, our great depression is our lives." The sermonette resounds with the Fight Club followers, and it's likely to ring a familiar bell with many of the twenty- and thirtysomethings in the audience. The movie is quite astute in recognizing and capitalizing on the resentment felt by a large portion of our blue-collar and white-collar workforce, the people who live paycheck to paycheck and badly want to believe that a new car or a larger wardrobe will magically change their circumstances.
Even if you can't accept its message, "Fight Club" may still draw you in through Fincher's spellbinding scene compositions and clever use of digital animation and extreme close-ups. Like all his work, the film is dark and moody -- the actors are almost always seen in half-light or shadows or varying shades of black -- but at the same time there's a feverish urgency in the storytelling. Although the movie is almost two and a half hours long, it seems to whiz past your eyes like a graffiti-covered subway train.
After seriously damaging his credibility with wooden performances in "The Devil's Own," "Seven Years in Tibet" and the sleep-inducing "Meet Joe Black," Pitt rebounds spectacularly here, turning Tyler into a hustler who's equal parts smarm and charm. Carter, speaking in a brittle accent reminiscent of Judy Davis, is engagingly batty; listen for the song she sings on her way out of Tyler's dilapidated house.
Norton, however, is flat-out amazing in the kind of part most actors would dismiss as being unplayable. He's required to be the movie's moral center, as well as milk humor out of bizarre situations (such as a soon-to-be classic moment in his boss' office) and undergo a near-complete personality transformation in the course of the action. Norton does it all, and much more, subtly conveying his attraction to Tyler and his disillusionment with what he sees as the perversion of his dream.
That's important because anyone who pays attention will see the movie is not an endorsement of anarchy, but a warning about what can happen in a world full of confused, angry men without any positive role models to follow. Yet Fincher's film will probably be condemned by many of the same moviegoers who turned mindless schlock like "Double Jeopardy" (in which we're asked to root for Ashley Judd's character to track down and kill her husband) and "The General's Daughter" (which turns a rape victim into a dominatrix before giving us a lengthy depiction of her murder) into major box office hits. If it does nothing else, "Fight Club" should serve to point out the hypocracy of the general public, which begs for gun control and stricter enforcement of movie ratings one moment and drops its kids off at the video store to pick up "The Matrix" the next. James Sanford
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


What we gonna do ?
- present what is threex
- effort to easy three.js games
- extension system - very light, vanilla.js light
Goals
- "to make dev of three.js games easy"
Means
- dev of game modules around html5 tech
- minigame to show off what is possible
- documentation and advocaty of the effort
Techs
- webgl
- webaudioapi
- webrtc
- websocket
Policy
- fix problems people actually have
- open standard is prefered
- open source is preffered
in 3d
- all three.js obviously
- threex extensions
- some good idea in tquery plugins. to import
- good stuff to import from babylon.js
- it has a game orientation
in audio
- sound localisation is a key feature
- webaudiox.js to ease access to webaudio api
- html5rocks tutorial
in physics
- not much
- due to no clear winner for 'good 3d physics library in js'
- mainly because there are no clear winner for 'good 3d physics library in js'
- some work in threex.cannonjs
- maybe something based on obb,aabb, sphere, raycasting
- good math in /src/math three.js
- it is included in Geometry
- what babylon.js is doing ?
in inputs
- for keyboard, threex.keyboardstate
- for touchscreen joystick, simulate arrow and click, virtualjoystick.js
- leap motion
- device orientation
in user authentication
- passport.js with all big social networks
--
in IA
- machine.js
- pathfinding.js
about game itself
- unclear how much we should do
- out of scope of the library ?
- "maybe you can do that like that, or like this. it is up to you"
- component/behavior ? or some other wellknow scheme ?
- chat


Georgia Issues Promising Update On Injured Photographer
by Andrew McCartyOn Saturday afternoon, the dangers of working the sideline during college football games were highlighted during a game between No. 12 Auburn and No. 4 Georgia.
Bulldogs running back Brian Herrien, after gaining a few yards on a pass, was pushed out of bounds and collided with a school photographer for his team.
Video of the play showed the student was knocked unconscious. She remained motionless on the field for several minutes as medical personnel tended to her.
The photographer, later identified as Chamberlain Smith, was stretchered off the field and taken to a local hospital.
Sideline reporter Jamie Erdahl reported the somber scene when it happened. However, a few hours later, she was able to reveal some good news.
“Just heard good news from Georgia Athletics! The young woman, Chamberlain Smith, who was knocked unconscious on the sideline will be released from the hospital later this evening. A UGA grad and photographer intern for the athletic department,” she said.
It’s great to hear she’s doing well, especially given the video footage of the play.
Georgia went on the win the game, 21-14, though Auburn gave the Bulldogs a scare down the stretch. The Bulldogs moved to 9-1 on the season and kept their College Football Playoff hopes alive.


All Classes
HangleKeyboard
HangleTextEvent
HangleTextField
HangleTextFieldCursor
HangleUnicodeComposer
IBlockSelectable
IKeyFocusable
KeyButton
KeyInfo
KeyStatus
KeyType
KeyUnit


Popular Areas in aaa plating nashville tn
Crime Scene Investigation Schools in Nashville - OnlineEducation.net
Looking for top Nashville crime scene investigation schools? Find crime scene . 120 White Bridge Rd, Nashville, Tennessee 37209-4515. More Info View on .
http://www.onlineeducation.net/schools/crime-scene-investigation/TN/nashville
Wildlife Management Schools in Nashville - OnlineEducation.net
Looking for top Nashville wildlife management schools? Find wildlife . 735 University Avenue, Sewanee, Tennessee 37383-1000. More Info View on Map .
http://www.onlineeducation.net/schools/wildlife-management/TN/nashville
Forestry Schools in Nashville - OnlineEducation.net
Showing the Top 2 of 2 Total. Forestry Schools within 100 miles of Nashville, TN. Schools; Housing; Local Guide. Compare Get Directions. 0 Schools Selected .
http://www.onlineeducation.net/schools/forestry/TN/nashville
AAA INDUSTRIES INC, 3141 AMBROSE AVE, NASHVILLE ...
AAA INDUSTRIES INC specializes in: Electroplating, Plating, Polishing, Anodizing, and Coloring. This business can . NASHVILLE, TN 37207-4711 | view map .
http://start.cortera.com/company/research/k3r8ruj4l/aaa-industries-inc/
Entertainment Business Schools in Nashville - OnlineEducation.net
1900 Belmont Blvd, Nashville, Tennessee 37212-3757. More Info View . AAA Plating Industries; Keystone Automotive Industries; Wright Industries. Nashville .
http://www.onlineeducation.net/schools/entertainment-business/TN/nashville
HVAC Schools in Nashville - OnlineEducation.net
Looking for top Nashville HVAC schools? . 100 White Bridge Rd, Nashville, Tennessee 37209-4515 . 2845 Elm Hill Pike, Nashville, Tennessee 37214-3717 .
http://www.onlineeducation.net/schools/hvac/TN/nashville


|
Net Meeting
(A free tool for online video conferencing)
Home
Mute All
Raise Doubt
Mute User
Unmute User
Remove User
Clear Doubt
Start Meeting
Meeting Invite
Join Meeting
Mute
Quit Meeting


The brain and spinal cord make up the central nervous system (CNS). The CNS is linked to sense organs by nerves
Cells called receptors in sense organs detect stimuli (changes):
eyes – light
ears – sound, position, balance
tongue and nose – taste and smell
skin – touch, pressure, pain, temperature
A light receptor cell has a nucleus and a cell membrane which contains cytoplasm.
Neurones
Nerve impulses are transmitted along cells called neurones. A large bundle of neurones is called a nerve.
A receptor cell responds to a stimulus by sending an electrical impulse along a sensory neurone to the CNS.
The information in the impulses is coordinated by the brain or spinal cord and an impulse is sent along a motor neurone to effector organs (muscles or glands).
Structure of neurones (Edexcel)
Neurones are long, thin cells with a cell body containing the nucleus. At one end, the dendron carries impulses from a sense receptor or another neurone to the cell body. The dendron has many branches to make contact with receptors.
From the cell body, the long thin axon carries the impulse to the other end of the neurone.
The axon is protected by a fatty coating called a myelin sheath. This also makes nerve impulses travel faster.
Reflexes
A reflex action is a response to a stimulus that does not involve the brain. It is faster than a conscious reaction because you don’t have to think about it:
An electrical impulse travels from a sense receptor along a sensory neurone to the spinal cord.
The impulse jumps across a tiny gap called a synapse to a relay neurone in the spinal cord.
The relay neurone passes the impulse across another synapse to a motor neurone.
The motor neurone transmits the impulse to an effector. The effector may be a muscle, which responds by contracting, or a gland, which releases a chemical.
This process is called a reflex arc. If you tread barefoot on something sharp, a muscle in your leg contracts and quickly lifts your foot away without you needing to think about it.
Synapses
The electrical nerve impulses are carried across the gaps – the synapses synapses – between neurones by chemicals called neurotransmitters.
Edexcel: Neurotransmitters are released at the ends of the axon of one neurone: they cross the gap and attach to receptors on the dendrites of the next neurone. This causes an electrical impulse to travel along the second neurone.


You might want to start by checking out our intro video.
The Spiffy UI framework started as a part of Novell Identity Manager. Spiffy is the foundation of Identity Manager, the Novell Compliance Management Platform, and the upcoming Novel Sentinel 7.
Tens of thousands of people use Spiffy UI every day.
The Spiffy UI framework supports:
Spiffy UI is a Java framework, but it doesn't require Java. You can run it on any web server. We really mean it. If it can serve files then it can host Spiffy UI.
Spiffy UI applications are running on all the major Java J2EE servers as well as servers running PHP, Erlang, and node.js.
Spiffy UI is flexible and modular in its design. Each piece works alone. Use only the pieces you want and leave the rest.
Ext GWT, Smart GWT, and many other GWT frameworks integrate well with the flexible design of the Spiffy UI framework. The framework also makes it easy to integrate JavaScript libraries. Many of the Spiffy UI functions are available in JavaScript.
The flexible nature of this framework makes it easy to support smart phones and tablets. The application will automatically resize and change the navigation based on the size and type of device being used. Try it on your browser by making your window width less than 800 pixels or open this application on your favorite mobile device.
We love GWT. We love JavaScript. We love putting them together.
Spiffy UI includes JQuery and JQuery UI. They work well with JQuery and fill in a few of the gaps. We also include a few other libraries to fill in the gaps and create awesome applications:
All of these libraries and the Spiffy UI framework code compress down into a small download footprint for your application. You can also pick and choose just the pieces you need for even faster page loading.
See how simple and feature-rich Spiffy UI is just by .


Louis Aurel
I am a frontend developer from Romania. You can view my works
hereI love traveling and crreating websites 😅.
Presently I don't have a job
Thank You for Visiting!
Ping me at louisrd1337@gmail.com


Shopping List Generator !
Home
Preferences
About Us
Contact Us
Save
Print
Email
My Shopping List
© 2014
Shopping list generator
About Us
Contact Us
Privacy Policy


Rock is designated by maintaining the fist, Scissors by extending the middle and index fingers, and Paper by holding the hand out flat. If players throw out the same gesture, the game goes on. If not, it's decided by a harmonic and intransitive method — rock crushes scissors, scissors cuts paper, but paper covers rock.
Ready to go !


4.10. Implementing Recursion¶
WARNING! You should not read this section unless you are already comfortable with implementing recursive functions. One of the biggest hang-ups for students learning recursion is too much focus on the recursive “process”. The right way to think about recursion is to just think about the return value that the recursive call gives back. Thinking about how that answer is computed just gets in the way of understanding. There are good reasons to understand how recursion is implemented, but helping you to write recursive functions is not one of them.
4.10.1. Call stacks for implementing recursion¶
Perhaps the most common computer application that uses stacks is not even visible to its users. This is the implementation of subroutine calls in most programming language runtime environments. A subroutine call is normally implemented by pushing necessary information about the subroutine (including the return address, parameters, and local variables) onto a stack. This information is called an activation record. Further subroutine calls add to the stack. Each return from a subroutine pops the top activation record off the stack. As an example, here is a recursive implementation for the factorial function.
// Recursively compute and return n!
factorial_recursive(n:int) : int
// Precondition: n >= 0
if n <= 1
return 1 // Base case: return base solution
else
return n * factorial_recursive(n-1) // Recursive call for n > 1
// Recursively compute and return n!
static long factorial_recursive(int n) {
if (0 > n) throw new IllegalArgumentException("Argument must be >= 0");
if (n > 20) throw new IllegalArgumentException("Cannot handle larger values than 20!");
if (n <= 1) {
return 1; // Base case: return base solution
} else {
return n * factorial_recursive(n-1); // Recursive call for n > 1
}
}
# Recursively compute and return n!
def factorial_recursive(n):
if n < 0: raise ValueError("Argument must be >= 0")
if n <= 1:
return 1 # Base case: return base solution
else:
return n * factorial_recursive(n-1) # Recursive call for n > 1
Here is an illustration for how the internal processing works.
\(\beta\) values indicate the address of the program instruction
to return to after completing the current function call.
On each recursive function call to fact
, both the return
address and the current value of n
must be saved.
Each return from fact
pops the top activation record off the
stack.
Todo
- type: Slideshow
The figure above and the following text should all be rolled into a slideshow.
Consider what happens when we call fact
with the value 4.
We use \(\beta\) to indicate the address of the program
instruction where the call to fact
is made.
Thus, the stack must first store the address \(\beta\), and the
value 4 is passed to fact
.
Next, a recursive call to fact
is made, this time with value 3.
We will name the program address from which the call is
made \(\beta_1\).
The address \(\beta_1\), along with the current value for
\(n\) (which is 4), is saved on the stack.
Function fact
is invoked with input parameter 3.
In similar manner, another recursive call is made with input parameter 2, requiring that the address from which the call is made (say \(\beta_2\)) and the current value for \(n\) (which is 3) are stored on the stack. A final recursive call with input parameter 1 is made, requiring that the stack store the calling address (say \(\beta_3\)) and current value (which is 2).
At this point, we have reached the base case for fact
, and so
the recursion begins to unwind.
Each return from fact
involves popping the stored value for
\(n\) from the stack, along with the return address from the
function call.
The return value for fact
is multiplied by the restored value
for \(n\), and the result is returned.
Because an activation record must be created and placed onto the stack for each subroutine call, making subroutine calls is a relatively expensive operation. While recursion is often used to make implementation easy and clear, sometimes you might want to eliminate the overhead imposed by the recursive function calls. In some cases, such as the factorial function above, recursion can easily be replaced by iteration.
Example 4.11.1
As a simple example of replacing recursion with a stack, consider the following non-recursive version of the factorial function.
// Return n!
factorial_stack(n:int) : int
// Precondition: n >= 0
S : Stack = new LinkedStack()
while n > 1
S.push(n)
n -= 1
result = 1
while S.size() > 0
result = result * S.pop()
return result
// Return n!
static long factorial_stack(int n) {
if (0 > n) throw new IllegalArgumentException("Argument must be >= 0");
if (n > 20) throw new IllegalArgumentException("Cannot handle larger values than 20!");
Stack<Integer> S = new LinkedStack<>();
while (n > 1) {
S.push(n);
n--;
}
long result = 1;
while (S.size() > 0) {
result = result * S.pop();
}
return result;
}
# Return n!
def factorial_stack(n):
if n < 0: raise ValueError("Argument must be >= 0")
S = LinkedStack()
while n > 1:
S.push(n)
n -= 1
result = 1
while S.size() > 0:
result = result * S.pop()
return result
Here, we simply push successively smaller values of \(n\) onto the stack until the base case is reached, then repeatedly pop off the stored values and multiply them into the result.
An iterative form of the factorial function is both simpler and faster than the version shown in the example. But it is not always possible to replace recursion with iteration. Recursion, or some imitation of it, is necessary when implementing algorithms that require multiple branching such as in the Towers of Hanoi algorithm, or when traversing a binary tree. The Mergesort and Quicksort sorting algorithms also require recursion.
Fortunately, it is always possible to imitate recursion with a stack. Recursive algorithms lend themselves to efficient implementation with a stack when the amount of information needed to describe a sub-problem is small. For example, Quicksort can effectively use a stack to replace its recursion since only bounds information for the subarray to be processed needs to be saved.
Let us now turn to a non-recursive version of the Towers of Hanoi function, which cannot be done iteratively.
4.10.2. Towers of Hanoi¶
Here is a recursive implementation for Towers of Hanoi.
// Compute the moves to solve a Tower of Hanoi puzzle.
// Function move does (or prints) the actual move of a disk
// from one pole to another.
// - n: The number of disks
// - start: The start pole
// - goal: The goal pole
// - temp: The other pole
TOH_recursive(n:int, start:Pole, goal:Pole, temp:Pole)
if n == 0 // Base case
return
TOH_recursive(n-1, start, temp, goal) // Recursive call: n-1 rings
move(start, goal) // Move bottom disk to goal
TOH_recursive(n-1, temp, goal, start) // Recursive call: n-1 rings
// Compute the moves to solve a Tower of Hanoi puzzle.
// Function move does (or prints) the actual move of a disk
// from one pole to another.
// - n: The number of disks
// - start: The start pole
// - goal: The goal pole
// - temp: The other pole
static void TOH_recursive(int n, Pole start, Pole goal, Pole temp) {
if (n == 0) // Base case
return;
TOH_recursive(n-1, start, temp, goal); // Recursive call: n-1 rings
move(start, goal); // Move bottom disk to goal
TOH_recursive(n-1, temp, goal, start); // Recursive call: n-1 rings
}
# Compute the moves to solve a Tower of Hanoi puzzle.
# Function move does (or prints) the actual move of a disk
# from one pole to another.
# - n: The number of disks
# - start: The start pole
# - goal: The goal pole
# - temp: The other pole
def TOH_recursive(n, start, goal, temp):
if n == 0: # Base case
return
TOH_recursive(n-1, start, temp, goal) # Recursive call: n-1 rings
move(start, goal) # Move bottom disk to goal
TOH_recursive(n-1, temp, goal, start) # Recursive call: n-1 rings
TOH
makes two recursive calls:
one to move \(n-1\) rings off the bottom ring, and another to
move these \(n-1\) rings back to the goal pole.
We can eliminate the recursion by using a stack to store a
representation of the three operations that TOH
must perform:
two recursive calls and a move operation.
To do so, we must first come up with a representation of the
various operations, implemented as a class whose objects will be
stored on the stack.
TOH_stack(n:int, start:Pole, goal:Pole, temp:Pole)
S : Stack = new LinkedStack()
S.push(TOH(n, start, goal, temp))
while S.size() > 0
it = S.pop() // Get next task
if it is a MOVE // Do a move
move(it.start, it.goal)
else if it.num > 0: // Imitate TOH recursive solution (in reverse)
S.push(TOH(it.num-1, it.temp, it.goal, it.start))
S.push(MOVE(0, it.start, it.goal)) // A move to do
S.push(TOH(it.num-1, it.start, it.temp, it.goal))
static void TOH_stack(int n, Pole start, Pole goal, Pole temp) {
// Make a stack just big enough
Stack<TOH_object> S = new LinkedStack<>();
S.push(new TOH_object(TOH, n, start, goal, temp));
while (S.size() > 0) {
TOH_object it = (TOH_object) S.pop(); // Get next task
if (it.op == MOVE) {
move(it.start, it.goal); // Do a move
}
else if (it.num > 0) { // Imitate TOH recursive solution (in reverse)
S.push(new TOH_object(TOH, it.num-1, it.temp, it.goal, it.start));
S.push(new TOH_object(MOVE, it.start, it.goal)); // A move to do
S.push(new TOH_object(TOH, it.num-1, it.start, it.temp, it.goal));
}
}
}
static class TOH_object {
int op;
int num;
Pole start, goal, temp;
// Recursive call operation
TOH_object(int o, int n, Pole s, Pole g, Pole t) {
op = o; num = n; start = s; goal = g; temp = t;
}
// MOVE operation
TOH_object(int o, Pole s, Pole g) {
op = o; start = s; goal = g;
}
}
def TOH_stack(n, start, goal, temp):
S = LinkedStack()
S.push(TOH_object(TOH, n, start, goal, temp))
while S.size() > 0:
it = S.pop() # Get next task
if it.op == MOVE: # Do a move
move(it.start, it.goal)
elif it.num > 0: # Imitate TOH recursive solution (in reverse)
S.push(TOH_object(TOH, it.num-1, it.temp, it.goal, it.start));
S.push(TOH_object(MOVE, 0, it.start, it.goal)); # A move to do
S.push(TOH_object(TOH, it.num-1, it.start, it.temp, it.goal));
class TOH_object:
def __init__(self, o, n, s, g, t=None):
self.op = o
self.num = n
self.start = s
self.goal = g
self.temp = t
We first enumerate the possible operations MOVE and TOH, to
indicate calls to the move
function
and recursive calls to TOH
, respectively.
Class TOH_object
stores five values: an operation value
(indicating either a MOVE or a new TOH operation), the number of
rings, and the three poles.
Note that the move operation actually needs only to store
information about two poles.
Thus, there are two constructors: one to store the state when
imitating a recursive call, and one to store the state for a move
operation.
An array-based stack is used because we know that the stack
will need to store exactly \(2n+1\) elements.
The new version of TOH
begins by placing on the stack a
description of the initial problem for \(n\) rings.
The rest of the function is simply a while
loop that pops the
stack and executes the appropriate operation.
In the case of a TOH
operation (for \(n>0\)), we store on
the stack representations for the three operations executed by the
recursive version.
However, these operations must be placed on the stack in reverse
order, so that they will be popped off in the correct order.


Advanced Analytics on Big Data. Data Visualization
Task 1: Mandatory exercise
Display a
barchart (start from
Barchart refactor sample):
- Adding space between columns.
- Adding colors to each bar.
- Adding a legend.
- Showing the chart vertically.
- (+) Adding x-y axis labels and chart title
- (+) Adding animation and tooltips to bars
- (+) Change dataset and y-axis ticks
- (+) Adding several selectable datasets
Select dataset:


Games
Coolmath Hack
2048
Astray
Asteroids
Bad Time Simulator
Breaklock
Breakout
Chess
Cookie Clicker
Dot to
Fairdyne
Flappy Bird
Hextris
Pac-Man
Racer
Radius Raid
Shellshockers
Space Invaders
Surviv
Towermaster
×
Home
Surf Freely
Games
Youtube
Bookmarklets
Forum
Links


Local Area Network (LAN) Setup Configure the Broadband Router IP Address and Subnet Mask for LAN interface. GroupName <%ejGet(groupList)%> IP Address: Subnet Mask: Enable IGMP Snooping Standard Mode Blocking Mode Enable IGMP LAN to LAN Multicast: Disable Enable (LAN to LAN Multicast is enabled until the first WAN service is connected, regardless of this setting.) Last Member Query Interval: Leave Timeout: Maximum Groups: Enable LAN side firewall Disable DHCP Server Enable DHCP Server Start IP Address: End IP Address: Leased Time (second): Primary DNS server: Secondary DNS server: Router: DHCP options: Timezone: SIP Servers: TZ String: Vendor Information: NTP Servers: Classless Static Route: Static IP Lease List: (A maximum 32 entries can be configured) MAC AddressIP AddressRemoveEdit Conditional Pool for Vendor ID: (A maximum 3 entries can be configured) Vendor Class IDStart IPEnd IP Subnet MaskRouterDNS Servers Option 240Option 241Option 242 Option 243Option 244Option 245 RemoveEdit Enable DHCP Server Relay DHCP Server IP Address:   Configure the second IP Address and Subnet Mask for LAN interface IP Address: Subnet Mask:


--- name: how-to-non-destructibly-upgrade-your layout: post title: Non-destructibly upgrade your android app's database tags: java android category: Android --- So your android app is out in the wild with thousands of Happy Users and the Happy Users are begging and pleading for a new feature that requires a new field in your database. However, the aforementioned Happy Users, would quickly turn to Unhappy Users if your next upgrade wiped their data when it restructured the app's database. What to do? Here's how I upgraded my app's Database schema, while preserving all of the user's data. First of all, I use a DatabaseHelper class (that extends SQLiteOpenHelper) that performs some of the basic database needs (create, upgrade). The function we will concentrate on in this post is onUpgrade(). This function is called when the database version, represent with the constant DATABASE_VERSION is changed. Most barebones implementation of this function call will simply drop the app's tables and recreate them with a call to onCreate():
{% highlight bash %} public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { ... db.execSQL("DROP TABLE IF EXISTS albums"); onCreate(db); } {% endhighlight %}However, this approach will destroy all of your user's data, (ie the entire 2500+ CD collection they painstakingly entered with the soft keybard--if this were the case perhaps you should add a barcode scanner intent, alas, back to the story.) Which results in a Very Unhappy User (hereafter VUU). The solution, is to check for the app's Database Version and make a call to our friend ALTER TABLE, like so.
{% highlight bash %} public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if(oldVersion == 2) { db.execSQL("ALTER TABLE albums ADD COLUMN hip_again integer"); } else { ... db.execSQL("DROP TABLE IF EXISTS albums"); onCreate(db); } {% endhighlight %} }There! Now your user's can flag their old CD's with the shifting tides of what's hip. Also note that should add the column in the onCreate method. So that Happy Users of the Future (hereafter HUF), will also have the field available to them:
{% highlight bash %} private static final String DATABASE_CREATE = "create table albums (_id integer primary key autoincrement, " ... + "hip_again integer);"; @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } {% endhighlight %}One final thing is to increment the constant DATABASE_VERSION, so that android will call onUpgrade() the next time the app is started:
private static final int DATABASE_VERSION = 3;That's it.


Here at Cupcake love we pride ourselves on producing the best cupcakes around.
This is our best and most beloved cupcake, inspired by the subtle notes of summer with touches of lavender and lemon.


{{ partial "header.html" . }} {{ partial "navigation.html" . }}
My name is Joe Johnston and I am obsessed with internal tools. Over the last 10 years, I've created over 80 internal tools - one particular tool had over 80,000 users and saved the organization over $3,000,000 per annum. If this is your first time learning about internal tools, you've came to the right place. This is NOT your average "Internal tools in 2021" post. This is a continually evolving environment to learn about the finer details of building internal tools, and how they can help you accelerate digital transformation.
Internal tools are internally-facing software developed and utilised within an organization. They range from database GUIs to employee wikis, and are highly-tailored to an organizations processes.
Internal tools have been around since the early days of software development. They're the unsung hero that powers the majority of businesses which exist today. And they're growing in popularity.
Software is eating the world, and digital transformation is at the top of every CIO/CTOs agenda. $120 billion was spent last year on Internal tools/custom software, and this figure will continue to increase as we gather more data, become more distributed, and industries become more competitive.
Below are examples of internal tools used within companies and a general list of popular internal tools we've seen users build within Budibase.
Google are infamous for their internal tools. I have spoken with a few product managers at Google and I'm under good authority they have over 500 internal tools in the wild. Some of those tools have hit the headlines, including the two below:
Google's internal browser - Google developed an internal browser tool that monitors meeting requests made by employees. This has upset a number of employees, whom have spoken out about the new internal tool. A Google representative denied the tool was for 'spying', saying the company developed the extension in response to an uptick in spam involving calendar entries. Basically, the tool alerts employees when they attempt to auto-add a meeting to the calendars of large numbers of people. The extension does not prevent users from creating such meetings and doesn't collect personal information.
Google's Borgmon (now Monarch) - As you can imagine, Google has a collosal task on its hands monitoring its computer systems. The teams behind tools such as YouTube, Gmail, etc, need to monitor a continually growing and changing collection of heterogeneous entities including visual machines, devices, containers. The total of entities stretches into the billions and, to make matters more difficult, are distributed around the globe. So, Google built Borgmon. Any Google engineer, between 2004 and 2014, will have fond memories of Borgmon - it was a beast and involved a steep learning curve - but it worked, to a degree. Google have since replaced Borgmon with Monarch, which can manage trillions of time series and is essential to the smooth running of the Google engineering empire.
You cannot hit IPO without experimentation. Airbnb understood this from the very beginning. They state:
"At Airbnb we are always trying to learn more about our users and improve their experience on the site. Much of that learning and improvement comes through the deployment of controlled experiments."
To run and manage their many experiences, Airbnb created an internal tool. The tool did all the heavy analytical lifting automatically, whilst limiting bias when setting up an expierment. When designing the tool in 2014, simplicity was the primary goal, and it shows:
On a call with David Singleton, CTO at Stripe, we asked him if they prefered to "build vs buy". His answer was
"Build, depending on the scale of the task at hand. For example, we use Github, because the engineering effort to build a tool like Github is not worth our time and engineering effort."
This is a quintessential answer. Below is a design of one of Stripe's many internal tools, called Home. Home is Stripe's employee resources portal. It provides directories for employees and teams, as well as company-wide resources like calendars, events and announcements.
Credit to Stripe, their design always seems to strikes the perfect balance between beauty, and communicating 'we're an incredible technical company'. It's great to see a company apply the same effort to design in their internal tools, as they do their external tools.
A CRM (customer relationship manager) helps sales/marketing teams manage their prospects/clients. There are many off-the-shelf CRMs including Salesforce, Pipedrive, etc, but many organizations build their own CRMs due to the unique nature of their sales process. I worked in the defence industry and we used Microsoft Dyanamics. It was a great platform, but due to the uniqueness of our sales process, the sales team hated it. It was not fit for purpose. We spent north of $40,000 customizing the tool to fit our needs, but still, it did not suffice. So we built our own and the team loved it.
Data is eating the world. As more organizations and processes move online, the more data we obtain. Collecting data is generally the easy part, it's the interpretation of this data which is hard. In many cases, data is distributed across multiple data sources, making it a little tricky to compile and analyse. Many companies build internal tools / dashboards to help display this data in a way which is easily interpreted. This is one of the primary reasons why Budibase supports many different data sources including Mongo DB, Couch DB, PostgreSQL, Elasticsearch, CSV, Dyanmo DB, and more.
Many SaaS / eccomerce platforms require an admin panel to manage backend operations. They allow you to approve user access, manipulate data, and track transactions. Admin panels often have a dashboard element built-in to save time exporting data to another platform. Like all items on this list, the decision to build an admin panel is usually down to a custom requirement which is not available of-the-shelf.
Generally speaking, the larger the organizaton the more layers of management it has. A popular process within organizations, especially enterprise, is the approval process. This category can involve many, highly specific approval processes, from booking holidays to signing-off on a sale. When building this type of internal tool, understanding the different types of users and their hierarchy, is crucial.
Inventory can take many forms; from rockets to Tamagotchis. Managing this inventory involves a robust database, a interactive UI, and automations to accelerate the processes involved with managing shipments, orders, and deliveries. Often, a control dashboard where a manager can gain a snapshot of operations, is also required.
There are many departments within a business which require software to do their job more effectively - Sales have the CRM, HR have the HR platform, and IT Support have the ticketing system (among others). The core function of an IT ticketing system is to manage incoming support requests from general employees. As you can imagine, the life of an IT support technician can get stressful. Hardware/software have changed our lives, but they are complicated beasts and come with many problems. Combine that, with stressful/over-worked employees, and you get tickets of fury coming at you from all angles, 24 hours a day. This is exactly why a good ticketing system is essential. It helps IT Support plan, triage, dissemenate, and inform - allowing them to do their job with an impressive level of calmness and efficiency.
Some organizations will form an internal products team. 100% of this team's time is dedicated to building and supporting internal tools. Most of the time, the process of building an internal tool, is left to a single person, or team of people.
Internal tools are generally built by developers, and if we're honest, they're not the pieces of work developers like to work on. But this is changing. Due to recent advancements in tooling. These advancements have reduced the learning curve, abstracted a lot of the more difficult technical parts, and made it super quick to build internal tools. This has led to a new wave of internal tool developers. Below we will explore the types of users building internal tools with Budibase.
The illustrious internal tools developer is often the unsugn hero in many cases. They are building mission critical software, but often don't get the recognition they deserve. Over 40% of Budibase's users are developers of some type. Their general reasons for using a low code platform, include speed, ease of design, and simplicity.
Product managers are an emerging role which use to be reserved for larger organisations. We are beginning to see more product managers working within SMEs which is testiment to the importance of this role. The beauty of a product manager is they are 100% committed to a product; providing direction, ownership, and insights at all times. In a lot of cases, they're both technical and business focused - which is an incredibly powerful mix. Through conversations with PMs, one overarching theme has stood out for us - Product Managers fully understand the business value of these tools. Just under 20% of Budibase's signups are product managers, and growing!
Over 15% of Budibase users are IT managers. They generally belong to manufacturing / construction / logistics industries and work within a small team. Due to the nature of their business, we've found they are often building multiple internal tools, from inventory to CRMs, as their role primarily revolves around supporting the organizations internal technology and business operations. Around 15% of Budibase signups are IT managers or 'IT professionals'.
Below are two professional roles we were not aware of and we've noticed growing in popularity.
Due to the increasing importance and collection of data, we've noticed Data PMs signing up to Budibase. On inspection, their responsibilities lie within creating interfaces to make sense of the large amounts of data collected within their platforms. They then analyse this data to inform business direction. It's very much a data analyst / product manager hybrid - which seems like a role which could benefit almost every organization on earth.
Basically, a product manager whose sole focus is on internal operations. We're noticed this role within larger organisations, and the low-code platform/internal tool builder seems to be their weapon on choice. We are watching this role very carefully, as it seems like it could grow in popularity as internal operations increase (due to digital transformation and the increasingly distributed workforce).
Building internal tools is different from building customer-facing tools. When building internal tools, you have greater access to the end-user. Quite often, when using an internal tool builder, the build process is a collaboration between builder and user. This is a beautiful, powerful experience and often results in an outstanding internal tool.
There are primarily two ways to build an internal tool; completely with code, or with an internal tool builder.
Both options have their pros and cons; code is more flexible; internal tool builders are faster, easier, and more cost effective.
Going forward, we will illustrate how to build an internal tool with an internal tool builder.
If you are leading the quest for a new internal tool, quite often you will need a business case or approval from the powers-of-be. For this post, we will assume you have approval.
The internal development methodology is the method of building internal tools to automate processes, equip your workforce, and grow your organization. It’s about building tools to empower your employees to do more, and do it faster.
Why? Because when your employees succeed, you succeed.
The Internal Development Methodology can be applied in four ways:
To build an internal tool users love, you need the builder and the AU (admin user) to collaborate. Depending on the size of the organization, the team involved with building the internal tool may involve a product manager (if you can involve a product manager, do!). Collaboration provides motivation and enourages creativity; whilst reducing errors and upsets. During this phase, planning is completed, the project is scoped, and the architecture decided. In cases where the admin user is also the builder, it is still important to plan, scope, and architect.
Within Budibase, there are three phases to the build process; data, design, and automation. During the data phase, you structure your data, and add it to the builder. During the design phase, you build your application with pre-made components and screens. You can then pull in data to your components, and query them with incredible ease. And during the automation phase, you will automate certain processes such as email, notifications, and more. We feel the data, design, and automation pathway is the easiest to learn and the most natural for devs. Other internal tool builders may differ.
Testing should be completed across the relevant browsers and devices. It is a good idea, to test with a user who has not been exposed to the tool during development. It is up to the admin user to sign the internal tool off.
Once the tool is signed off, you are ready to deploy it to production. The admin user will record any bugs experienced and collaborate with the builder to fix them - in some cases, due to their familiarity, they should be able to fix some issues.
We've experimented with this methodology for over a year now and everytime it has resulted in superior internal tools, happier users, and advocates! And it's these advocates who promote this methodology, which results in more internal tools, happier employees, and faster, more productive businesses. This is how your organization builds momentum, and this is why the internal development methodology serves as a strong foundation for your flywheel.
As we previously mentioned, the internal development methodolgy can have a positive effect on your employees, equiping them to do more, faster. What's great about the methodolgy, is it also converts your employees into advocates, which spreads motivation.
Below outlines how IDM transforms a user into an advocate.
Collaborate (user) - The AU (employee) is fully involved from the very beginning. They lead the planning, participate in scoping, and assist with architecture. In a sense, they are the product manager. They are the ones who fully understand the problem afterall.
Build (co-creator) - The AU co-creates the internal tool, providing UI/UX feedback along the way. Co-creation is incredibly powerful, and made possible with internal tool builders such as Budibase.
Test (owner) - The AU is also the tester. They understand the tool, they understand how it should perform, and what the common user will expect from it. They have the final say on whether or not the product is the ready for deployment - at this stage, they are the owner.
Deploy (advocate) - The AU, due to their heavy involvement, is the internal tool's advocate and first line of support for their team. They are the owner, they are the creator, they will promote the product to their team and gather feedback which then kickstarts the flywheel again. In some cases, they can make changes without the need of the internal tool developer.
Once the user becomes an advocate they sell the internal tool to their colleagues. Their colleagues, the new users, experience the platform and immediately begin considering how they can create internal tools to improve their jobs and provide the company with more value. The wheel keeps spinning, and a faster, happier workforce grows.
Better collaboration results in better internal apps. It also results in happier users, advocates, less bugs, less support, and less maintainence. Trust me, it's worth it!
When deploying your apps, it's important to understand where in the world your users will reside as this will impact perf. If you are in a highly secured environment, it's generally better to self-host your apps in the comfort of your own infrastructure.
Do you remember in the summer of 2020, when President Barack Obama, Joe Biden, and Elon Musks Twitter accounts were hacked? Well, the hackers managed to comprimise one of their internal tools and get access to their accounts. Please take security serious. Below is a picture of the internal tool:
It's important to scope the internal tool to understand any areas that might require additional development outside of the internal tool builder. If there is development, please make sure your tool of choice is extensible and allows you to build on top of it - being able to see the codebase is a huge advantage here. This will also reduce technical debt.
At Budibase, we like to include an NPS feedback popover in our apps. It asks the user to rate, from 1 to 10, how likely they are to rate this internal tool to a colleage. Underneath the scale, we include a comment box. This helps us understand the general feeling towards our app. Understanding feedback helps us build better tools.
When building an internal tool, it is advised to think of your users like you would an external application. Uber have many internal tools, and Kamal Boparai, Engineering Manager, IT Eng Compliance and Legal (Engineering) Team puts it nicely in the statement below:
"The IT Eng team is very focused on our end users (Uber employees) and
their experiences. We always put our end users first; from there, we
can help external end users (Uber’s partners and customers) virtually.
Even more importantly, we keep the Uber network functioning properly
and create the infrastructure that supports Uber employees. Basically,
IT Eng is responsible for everything that happens in the background to
keep Uber running smoothly."
Kamal Boparai,Engineering Manager
| Source
Microsoft's CEO, Satya Nadella once said, "Every company is now a software company". Software is without doubt changing every aspect of the workplace. What's more accurate and less heralded, is how we've only scratched the service when it comes to the productivity gains expected from software.
2020 was a disatrous year for people around the world, and for many businesses too. The events in 2020 and 2021 will inevitably lead to organizations looking inwards to find answers. Building internal tools with internal tool builders can play a huge role in helping an organization cut costs whilst improving output.
Internal tools have increased productivity across the board for the majority of industries, but the scale in which they're rolled out can make a huge difference. A study from 2003 showed that while Wal-Mart and Kmart both invested in IT, Wal-Mart did a better job of changing the rest of their business to work with the technology, and consequently saw “higher levels of productivity and market value”.
Of-the-shelf software, especially enterprise software, costs a crippling amount. When building internal tools with an internal tool builder, you can save 10x the cost of off-the-shelf software - sometimes a lot more! You can save even more if you self-host your tools on your own infrastructure.
If you are self-hosting on your own infrastructure, and implementing your own Auth system, in a lot of cases the security will be better.
When building your own tools, you have the power to build them exactly how you want them. As previously mentioned, you are building a solution around your specific problem. One of the common reasons users come to Budibase to build custom software is because a part of their business is so unique that no off-the-shelf software can solve their problem how they'd like them to.
Providing your employees with the right tools to do their jobs is incredible fulfilling for employees. As I am sure you are aware, a common scenario in organizations is a disgruntled employee battling with an unfit tool, or using a particular tool to solve a problem the tool was not designed for. (We'll chat about Microsoft Office soon).
Previously it would take an internal software developer/development team, on average, 4 weeks to 6 months to build an internal tool. With modern internal tool builders, such as Budibase, internal software developers can build and ship these same tools in days.
Microsoft Office is the workplace swiss army knife. We're grew up using it, loving it, and inevitably hating it. But, please don't see this as slander. It's an incredible platform, with incredible tools which solve common problems. In fact, a highly product Excel user is basically an engineer with a different title; building internal software (albeit in a highly restructive environment). The problem is how we overuse these tools to solve problems which they are not suitable for. Here's an example of how nearly 16,000 people who tested positive for the coronavirus disappeared from records due to an Excel error.
Code is awesome. Boilerplate code and repetition not so much. We created Budibase to augment the development experience not replace it. You can still write code, query data, self-host; but you can also develop faster, design better, and output a real single page application.
The emergence of internal tool builders has reduced the barriers and resolved many of the concerns around building internal tools. If organizations were more willing to build their own internal tools, specific to their needs, they would experience huge productivity gains, an increase in employee satisfaction, and potential market growth. With digital transformation now a priority for most businesses, there has never been a better time to build internal tools and accelerate your organization forward. I hope you enjoyed this post, and thank you for reading.
Supporting the internal development methodology is an all-in-one platform for building, automating, and shipping internal tools. By combing the internal development methodology with Budibase, you'll accelerate digital transformation, speed up development, and equip employees with the tools to grow.


Pedal PDX
Time:
0
0
:
0
0
:
0
0
Distance:
Miles
Average Speed: 10.5 MPH
Top Speed: 20.1 MPH
Clip From start
<
1/4 miles
>
Clip From end
<
1/4 miles
>
Stop Trip


If you are already signed up proceed to Login Page
EMAIL :
NICKNAME :
PASSWORD :
Select image file for display image :


This document provides information to implementers who wish to run the XQuery Test Suite on their implementation. It includes guidelines how test cases can be customized in order to run on an implementation, and describes the process of evaluating the results. The documentation of the XML Query Test Suite, which defines the structure of the test cases and the catalog, can be found in [1]. Guidelines for submitting results to the XML Query Working Group can be found in [3].
Implementers are expected to write their own test harness that implements the following tasks:
Ideally, the test harness produces an XML file containing all test results in the format shown below, that can be sent to the working group.
In order to run the test suite on an XQuery implementation, implementers may customize the test suite and make a number of well-defined changes to the test cases. All changes made to the original test suite must be documented in free-text form as part of the result submission. Changes beyond the ones listed below must be highlighted.
XQuery supports a number of different ways to refer to source data as query context. Among these are the context item, external variables, the doc function, the collection function, implementation-defined functions, or parameter passing through host-language binding. Test cases that do not refer to any input document (i.e., the catalog does not contain any “input-file” for the “test-case”) do not need to be customized in this way.
The following example is a customizable test case:
(: Name: Axes001 :) (: Description: Child Element :) (: insert-start :) declare variable $input-context external; (: insert-end :) $input-context/child
and the corresponding catalog entry:
<test-case name="Axes001" FilePath="Axes" ... > ... <query name="Axes001.xq" date="2003-02-25"> <description>Child Element</description> </query> <input-file role="principal-data" variable="input-context">TreeCompass</input-file> <output-file role="principal" compare="XML">Axes001.xml</output-file> </test-case>
A test harness may use any of the following customizations of the query that is supplied. Note that option 3 and 5 are only applicable for test cases that use one source document.
Users of static typing may choose to transform the variable declarations between insert-start and insert-end comments by adding an "as document-node()" clause as illustrated below:
(: Name: Axes001 :) (: Description: Child Element :) (: insert-start :) declare variable $input-context as document-node() external; (: insert-end :) $input-context/child
(: Name: Axes001 :) (: Description: Child Element :) $input-context/child
(: Name: Axes001 :) (: Description: Child Element :) ./child
(: Name: Axes001 :) (: Description: Child Element :) fn:doc("TreeCompass.xml")/child
(: Name: Axes001 :) (: Description: Child Element :) fn:collection()/child
(: Name: Axes001 :) (: Description: Child Element :) fn:collection("file:collection1")/child
(: Name: Axes001 :) (: Description: Child Element :) impl-fn:impl-udf("TreeCompass")/child
Test cases that use the fn:doc and the fn:collection functions need to customized with a URI that identifies the appropriate data source. The <input-URI> element will be used to identify a data source and indicates that a URI that has been constructed by the test harness will be passed to the query:
The following example is a customizable test case:
(: Name: fn-doc-5 :) (: Description: Evaluation of fn:doc ... :) (: insert-start :) declare variable $input-context external; (: insert-end :) fn:doc($input-context) is fn:doc($input-context)
and the corresponding catalog entry:
<test-case is-XPath2="true" name="fn-doc-5" ... > <description>Evaluation of fn:doc ...</description> <spec-citation spec="FuncOps" .../> <query name="fn-doc-5" date="2006-01-25"/> <input-URI role="principal-data" variable="input-context">works-mod</input-URI> <output-file role="principal" compare="Text">fn-doc-5.txt</output-file> </test-case>
This test case can be customized by adding either “as xs:string” or “as xs:anyURI” to the external variable declaration. This test case can also be customized by removing the variable declaration and replacing the vraiable reference with a string literal:
(: Name: fn-doc-5 :) (: Description: Evaluation of fn:doc ... :) (: insert-start :) (: insert-end :) fn:doc('file:works-mod.txt') is fn:doc('file:works-mod.txt')
A test case may use fn:collection to refer to the default collection as follows:
(: Name: fn-collection-4d :) (: Description: Count the number of nodes in the collection.:) (: insert-start :) (: insert-end :) count(fn:collection())
and the corresponding catalog entry:
test-case is-XPath2="true" name="fn-collection-4d" ... > <description>Count the number of nodes in the collection.</description> <spec-citation spec="FuncOps" ... /> <query name="fn-collection-4d" date="2006-07-07"/> <defaultCollection role="principal-data">collection1</defaultCollection> <output-file role="principal" compare="Text">fn-collection-4.txt</output-file> </test-case>
A test case may use “.” to refer to the context item. This can be seen in the following:
(: Name: externalcontextitem-22 :) (: Description: context item expression :) (: insert-start :) (: insert-end :) ./works/employee[1]
and the corresponding catalog entry:
<test-case is-XPath2="true" name="externalcontextitem-22" ... > <description>Evaluation of external context item ...</description> <spec-citation spec="XQuery" ... /> <query name="externalcontextitem-22" date="2006-08-02"/> <contextItem role="principal-data">works-mod</contextItem> <output-file role="principal" compare="Fragment">externalcontextitem-22.txt</output-file> </test-case>
Test cases can be embedded in a host language, for example using the xmlquery function in SQL. This may require escaping certain characters like quotes.
select xmlquery('$input-context/child' passing xmlcol as "input-context") from TreeCompass
External variable tests (with our without types) are designed to use the results of executing the query(s) specified by the <input-query> element, also known as the input query (please note that there could be more than one <input-query> element). The following guidelines are suggested to properly execute these tests.
The following fragment from the catalog file illustrates the usage of the parameters described above:
<test-case is-XPath2="false" name="extvardeclwithtype-17" ...> <description>External Variable used to evaluate a boolean expression ... .</description> <spec-citation spec="XQuery" section-number="4.14" ... /> <query name="extvardeclwithtype-17" date="2006-02-09"/> <input-file role="principal-data" variable="input-context">emptydoc</input-file> <input-query variable="x" name="extvardeclwithtypetobind-17" date="2006-02-09"/> <output-file role="principal" compare="Text">extvardeclwithtype-17.txt</output-file> </test-case>
Module import statements may appear in either the main query and/or the imported module library themselves. Any import statement(s) to be customized will appear within the same comments as the context item as described above. Special attention should be given to the following observations during the customization process.
Entry from Catalog file
module namespace="http://www.w3.org/TestModules/test1">test1-lib</module>
module namespace="http://www.w3.org/TestModules/test1">test1a-lib</module>
Import statement from query
import module namespace test1="http://www.w3.org/TestModules/test1";
Possible customized statement
import module namespace test1="http://www.w3.org/TestModules/test1" at "test1-lib.xq", "test1a-lib.xq";
The "at" keyword specifies an optional location hint. Location Hints can be interpreted or disregarded in an implementation-dependent way. An implementation can choose to use any of the location hints, or none at all. Implementors testing a system that would only use one location hint may choose rewrite the query to use a URI to a system specific module (which has done the merge "by hand").
The test cases and their associated results have been written with an expectation that the default value for the Boundary-space policy is strip. If necessary, a test harness may transform their queries by adding "declare boundary-space strip;" for those queries that do not already contain a Boundary-space Declaration.
Customizing XQueryX tests must follow the same rules provided above. However, the XQueryX test cases do not include the insert-start/insert-end comments surrounding external variable declaration and schema import. Therefore, a test harness must find the items to be customized in the XQueryX document using the information found in the catalog. The external variable declaration and variable references in the XQueryX document typically looks as follows:
<xqx:varDecl> <xqx:varName>input-context</xqx:varName> <xqx:external/> </xqx:varDecl> <xqx:varRef> <xqx:name>input-context</xqx:name> </xqx:varRef>
In order to check correctness of running a test case, the result of the implementation must be compared to the result provided in the test suite. The implementations result of the test case must be serialized and compared to the expected file(s) provided in the test suite. Serialization should be performed as described in XSLT 2.0 and XQuery 1.0 Serialization [4] with method="xml". The catalog defines for each test case, which of the following five comparators has to be applied:
It is possible that a test case provides multiple expected results. In this case, successfully comparing the actual result to one of the provided expected results is a "pass".
Many tests involve operations on floats/doubles and converting those results to strings. Even as one explicit value is given, the task force realizes that other values may also be acceptable. In such cases submitters are encouraged to submit values that may differ. The task force will eventually determine if such values are within the acceptable range.
The expected files provided in the test suite are serialized forms as specified by XML Query Serialization, with the following parameter values:
| byte-order-mark | no |
| cdata-section-elements | empty |
| doctype-public | (none) |
| doctype-system | (none) |
| encoding | "utf-8" |
| escape-uri-attributes | (not applicable when method = xml) |
| include-content-type | (not applicable when method = xml) |
| indent | no |
| media-type | not applicable |
| method | xml |
| normalization-form | implementation-defined |
| omit-xml-declaration | yes |
| standalone | omit |
| undeclare-prefixes | no |
| use-character-maps | empty |
| version | implementation-defined |
For implementations using different parameters, the test harness must convert the result using the parameters above in order to perform byte-comparison with the provided expected results.
| [1] | XQuery Test Suite Documentation |
| [2] | Canonical XML Version 1.0, W3C Recommendation 15 March 2001 (http://www.w3.org/TR/xml-c14n) |
| [3] | Guidelines for Submitting XQTS Results |
| [4] | XSLT 2.0 and XQuery 1.0 Serialization |
Copyright © 1994-2005 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply. Your interactions with this site are in accordance with our public and Member privacy statements.


--- title: IpoptApplication layout: doxygen comments: false sidebar: doxygen_sidebar topnav: topnav tags: false ---
IpoptApplication defines an interface application class for IPOPT solvers. More...
Public Member Functions | |
| IpoptApplication (NonlinearProgram nlp,struct new_opts) | |
| The default constructor function. More... | |
| function obj = | initialize () |
This function initialize the specific NLP application based on the nonlinear programming problem (specified by nlp ). More... | |
| function [ sol , info ] = | optimize (x0) |
| This function runs the solver's optimization routine for the NLP. More... | |
| Public Member Functions inherited from SolverApplication | |
| virtual function | initialize (nlp) |
| An abstract method that initialize the solver to be ready to solve the given NLP problem. More... | |
| SolverApplication () | |
| The default constructor function. More... | |
Public Attributes | |
| struct | Objective |
| A structure contains the information of objective functions. More... | |
| struct | Constraint |
| A sturcture contains the information of constraints. More... | |
| NonlinearProgram | Nlp |
| The nonlinear programming object. More... | |
| Public Attributes inherited from SolverApplication | |
| struct | Options |
| A structure for NLP solver options. More... | |
| Public Attributes inherited from handle | |
| addlistener | |
| Creates a listener for the specified event and assigns a callback function to execute when the event occurs. More... | |
| notify | |
| Broadcast a notice that a specific event is occurring on a specified handle object or array of handle objects. More... | |
| delete | |
| Handle object destructor method that is called when the object's lifecycle ends. More... | |
| disp | |
| Handle object disp method which is called by the display method. See the MATLAB disp function. More... | |
| display | |
| Handle object display method called when MATLAB software interprets an expression returning a handle object that is not terminated by a semicolon. See the MATLAB display function. More... | |
| findobj | |
| Finds objects matching the specified conditions from the input array of handle objects. More... | |
| findprop | |
| Returns a meta.property objects associated with the specified property name. More... | |
| fields | |
| Returns a cell array of string containing the names of public properties. More... | |
| fieldnames | |
| Returns a cell array of string containing the names of public properties. See the MATLAB fieldnames function. More... | |
| isvalid | |
| Returns a logical array in which elements are true if the corresponding elements in the input array are valid handles. This method is Sealed so you cannot override it in a handle subclass. More... | |
| eq | |
| Relational functions example. See details for more information. More... | |
| transpose | |
| Transposes the elements of the handle object array. More... | |
| permute | |
| Rearranges the dimensions of the handle object array. See the MATLAB permute function. More... | |
| reshape | |
| hanges the dimensions of the handle object array to the specified dimensions. See the MATLAB reshape function. More... | |
| sort | |
| ort the handle objects in any array in ascending or descending order. More... | |
IpoptApplication defines an interface application class for IPOPT solvers.
Copyright (c) 2016, AMBER Lab All right reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted only in compliance with the BSD 3-Clause license, see http://www.opensource.org/licenses/bsd-license.php
|
inline |
The default constructor function.
| nlp | the NLP problem object to be solved |
| new_opts | the new solver options |
References struct_overlay().
| function obj = IpoptApplication.initialize | ( | ) |
This function initialize the specific NLP application based on the nonlinear programming problem (specified by nlp
).
The initialization including group different types of constraints, index objective functions and constraints arrays, etc.
|
virtual |
This function runs the solver's optimization routine for the NLP.
Be sure the run the initialization procedure before run this function.
Implements SolverApplication.
| IpoptApplication.Constraint |
A sturcture contains the information of constraints.
| IpoptApplication.Nlp |
The nonlinear programming object.
| IpoptApplication.Objective |
A structure contains the information of objective functions.


--- layout: post title: Clutter and overload are not an attribute of information, they are failures of design. date: '2008-01-24T23:10:10+00:00' tags: [] tumblr_url: http://backlog.robbevan.com/post/24588351/clutter-and-overload-are-not-an-attribute-of ---
Clutter and overload are not an attribute of information, they are failures of design.—Interface design and the iPhone


1. Enter your Height:
Units:
Feet / Inches
Centimeters
ft
in
cm
2. Enter Your Weight:
Units:
Pounds
Kilograms
lbs
kg


Last week you talked about Stereotype Threat. One of the antidotes identified by Claude M. Steele in his book is affirmation. Therefore, today, let's talk about values that are important to us.
First of all, we know there's are many values like Achievement, Affection, Challenge, Community, Competition, Control, Courage and so on. Maybe most of them affact us sometimes, but let's talk one today that affected me a lot and are important for my life.
The value that I want to talk today is Affection. Affection is very important for me and affect me a lot. Before I do everything, I will think if I like it, and if I like it, I will have more power to do this, and will feel really happy to complete it. Therefore, I need to say that Affection is the value that is very important for me.
Just like what I said last week, in DBC learning, it's really possible to meet stereotype threat. Therefore, we need some methods to combat Stereotype Threat at Dev Bootcamp. I believe our values will work very heavily at this moment. If I meet some very smart students and feel myself not good at coding, I will feel bad and express and work worse than I should do. However, Affection and Challenge will affect me to do better. I like this and the problem is a challenge and even a chance! Then I think I can work better and at least not so bad because of Stereotype threat.
And when we feel down, I think we can eat some delicious or do some sports. I believe this will also help us feel better.


Meeting for Good
ist
KAPUTT!
In other words you've encountered a
404
error.
Something is wrong internally.
Don't worry, you can click
here
to get back to the home page.


Kubernetes uses client certificates, tokens, or http basic auth to authenticate users for API calls.
Client certificate authentication is enabled by passing the --client-ca-file=SOMEFILE
option to apiserver. The referenced file must contain one or more certificates authorities
to use to validate client certificates presented to the apiserver. If a client certificate
is presented and verified, the common name of the subject is used as the user name for the
request.
Token File is enabled by passing the --token-auth-file=SOMEFILE
option
to apiserver. Currently, tokens last indefinitely, and the token list cannot
be changed without restarting apiserver.
The token file format is implemented in plugin/pkg/auth/authenticator/token/tokenfile/...
and is a csv file with 3 columns: token, user name, user uid.
When using token authentication from an http client the apiserver expects an Authorization
header with a value of Bearer SOMETOKEN
.
OpenID Connect ID Token is enabled by passing the following options to the apiserver:
- --oidc-issuer-url
(required) tells the apiserver where to connect to the OpenID provider. Only HTTPS scheme will be accepted.
- --oidc-client-id
(required) is used by apiserver to verify the audience of the token.
A valid ID token MUST have this
client-id in its aud
claims.
- --oidc-ca-file
(optional) is used by apiserver to establish and verify the secure connection
to the OpenID provider.
- --oidc-username-claim
(optional, experimental) specifies which OpenID claim to use as the user name. By default, sub
will be used, which should be unique and immutable under the issuer’s domain. Cluster administrator can
choose other claims such as email
to use as the user name, but the uniqueness and immutability is not guaranteed.
Please note that this flag is still experimental until we settle more on how to handle the mapping of the OpenID user to the Kubernetes user. Thus further changes are possible.
Currently, the ID token will be obtained by some third-party app. This means the app and apiserver
MUST share the --oidc-client-id
.
Like Token File, when using token authentication from an http client the apiserver expects
an Authorization
header with a value of Bearer SOMETOKEN
.
Basic authentication is enabled by passing the --basic-auth-file=SOMEFILE
option to apiserver. Currently, the basic auth credentials last indefinitely,
and the password cannot be changed without restarting apiserver. Note that basic
authentication is currently supported for convenience while we finish making the
more secure modes described above easier to use.
The basic auth file format is implemented in plugin/pkg/auth/authenticator/password/passwordfile/...
and is a csv file with 3 columns: password, user name, user id.
When using basic authentication from an http client, the apiserver expects an Authorization
header
with a value of Basic BASE64ENCODED(USER:PASSWORD)
.
Keystone authentication is enabled by passing the --experimental-keystone-url=<AuthURL>
option to the apiserver during startup. The plugin is implemented in
plugin/pkg/auth/authenticator/request/keystone/keystone.go
.
For details on how to use keystone to manage projects and users, refer to the
Keystone documentation. Please note that
this plugin is still experimental which means it is subject to changes.
Please refer to the discussion
and the blueprint for more details
We plan for the Kubernetes API server to issue tokens after the user has been (re)authenticated by a bedrock authentication provider external to Kubernetes. We plan to make it easy to develop modules that interface between Kubernetes and a bedrock authentication provider (e.g. github.com, google.com, enterprise directory, kerberos, etc.)
When using client certificate authentication, you can generate certificates manually or using an existing deployment script.
Deployment script is implemented at
cluster/saltbase/salt/generate-cert/make-ca-cert.sh
.
Execute this script with two parameters. First is the IP address of apiserver, the second is
a list of subject alternate names in the form IP:<ip-address> or DNS:<dns-name>
.
The script will generate three files:ca.crt, server.crt and server.key.
Finally, add these parameters
--client-ca-file=/srv/kubernetes/ca.crt
--tls-cert-file=/srv/kubernetes/server.cert
--tls-private-key-file=/srv/kubernetes/server.key
into apiserver start parameters.
easyrsa can be used to manually generate certificates for your cluster.
Download, unpack, and initialize the patched version of easyrsa3.
curl -L -O https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz
tar xzf easy-rsa.tar.gz
cd easy-rsa-master/easyrsa3
./easyrsa init-pki
Generate a CA. (--batch
set automatic mode. --req-cn
default CN to use.)
./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass
Generate server certificate and key. (build-server-full [filename]: Generate a keypair and sign locally for a client or server)
./easyrsa --subject-alt-name="IP:${MASTER_IP}" build-server-full kubernetes-master nopass
pki/ca.crt
pki/issued/kubernetes-master.crt
pki/private/kubernetes-master.key
to your directory.--client-ca-file=/yourdirectory/ca.crt
--tls-cert-file=/yourdirectory/server.cert
--tls-private-key-file=/yourdirectory/server.key
and add these into apiserver start parameters.openssl can also be use to manually generate certificates for your cluster.
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=${MASTER_IP}" -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
-days 10000
openssl x509 -noout -text -in ./server.crt
Finally, do not forget fill the same parameters and add parameters into apiserver start parameters.


I asked my students on the last day of school to write letters to next year’s students, whoever they are. I took all of those responses, removed the common words, and then pasted all of the letters into Wordle.
The assignment was: “Write a letter explaining how a future student can be successful in a flipped classroom.”
So, are videos still the most important part?
Written on May 31st , 2012 by Brian Bennett Categorized in: Flipclass Teaching
Leave a comment


Toggle navigation
FLING
Flights
(current)
About
(current)
Contact
{% block content %} {% endblock %}


#include <AUDDescriptors.h>
Public Attributes | |
| uint8_t | bLength |
| Size of descriptor in bytes. More... | |
| uint8_t | bDescriptorType |
| Descriptor type (AUDGenericDescriptor_INTERFACE). More... | |
| uint8_t | bDescriptorSubType |
| Descriptor subtype (AUDGenericDescriptor_INPUTTERMINAL). More... | |
| uint8_t | bTerminalID |
| ID of the terminal in the audio function. More... | |
| uint16_t | wTerminalType |
| Terminal type. More... | |
| uint8_t | bAssocTerminal |
| ID of the output terminal to which this input terminal is associated. More... | |
| uint8_t | bNrChannels |
| Number of logical output channels in this terminal. More... | |
| uint16_t | wChannelConfig |
| Spatial configuration of the logical channels. More... | |
| uint8_t | iChannelNames |
| Index of a string descriptor for the first logical channel. More... | |
| uint8_t | iTerminal |
| Index of a string descriptor for this terminal. More... | |
| uint8_t _AUDInputTerminalDescriptor::bAssocTerminal |
ID of the output terminal to which this input terminal is associated.
| uint8_t _AUDInputTerminalDescriptor::bDescriptorSubType |
Descriptor subtype (AUDGenericDescriptor_INPUTTERMINAL).
| uint8_t _AUDInputTerminalDescriptor::bDescriptorType |
Descriptor type (AUDGenericDescriptor_INTERFACE).
| uint8_t _AUDInputTerminalDescriptor::bLength |
Size of descriptor in bytes.
| uint8_t _AUDInputTerminalDescriptor::bNrChannels |
Number of logical output channels in this terminal.
| uint8_t _AUDInputTerminalDescriptor::bTerminalID |
ID of the terminal in the audio function.
| uint8_t _AUDInputTerminalDescriptor::iChannelNames |
Index of a string descriptor for the first logical channel.
| uint8_t _AUDInputTerminalDescriptor::iTerminal |
Index of a string descriptor for this terminal.
| uint16_t _AUDInputTerminalDescriptor::wChannelConfig |
Spatial configuration of the logical channels.
| uint16_t _AUDInputTerminalDescriptor::wTerminalType |
Terminal type.


Address Dialog on stereoids
Over the long live of Lotus Notes the address dialog has been a trusted, never changing compagnion:
Over the years it got some facelift like the ability to drag and drop or the ability to sort by Notes hierarchy, language or corporate hierarchy (anybody seen that?) or to look at details in yet another window. It works OK as long as the number of names is small and diverse. However once you enter cultures that are notoriously short of last names and sport large companies it gets tedious to pick the right Mr. Wang or Mr. Lee. In short: the address dialog is overdue for an overhaul. Since simplicity isn't simple careful considerations are needed. How much more complex the dialog could get to stay reasonable and how simple it needs to be. The requirements I came up with can be quite conflicting.
As usual YMMV.
Over the years it got some facelift like the ability to drag and drop or the ability to sort by Notes hierarchy, language or corporate hierarchy (anybody seen that?) or to look at details in yet another window. It works OK as long as the number of names is small and diverse. However once you enter cultures that are notoriously short of last names and sport large companies it gets tedious to pick the right Mr. Wang or Mr. Lee. In short: the address dialog is overdue for an overhaul. Since simplicity isn't simple careful considerations are needed. How much more complex the dialog could get to stay reasonable and how simple it needs to be. The requirements I came up with can be quite conflicting.
- I want to be able to filter the search scope based on a series of criteria:
- by organizational properties (like department name or org type e.g. "sales"
- by geography
- by job role
- by tags
- by favorites
- by source: internal/external, groups, individuals, from Facebook
- by communication history: frequency or date
- by search in communication
- by search in profiles
- access to list by first name, last name or nick name
- suggestion of addresses from social analytics
- display of additional information (address card + tags + list memberships) to positively identify the receipient
- Indication if encryption is available or not
- Indication if alternate access (e.g. shared communities) is available
As usual YMMV.
Posted by Stephan H Wissel on 27 February 2010 | Comments (c) | categories: Show-N-Tell Thursday


archaeological deposits organic production Fig. samples Supplementary soil sites heat temperature degradation S). consumption site temperatures Greenland water {border-style Arctic px;} rates #ffffff;} air precipitation West climate (), change dry conditions measured oxygen Qajaa different located microbial study Kangeq South installed midden sample Sandnes Table carbon collected day depths n = ) Igaliku content increase measurements permafrost (mean ± SD; bulk deposits. investigated mean px; rate surface well-preserved {font-family Greenland. Qajaa, Soil annual climatic consumption, exposed font-size future ground highly land layer loss soils studies B). Climate Elberling Hobo Sandnes, Scientific areas average data double; environmental ice-free material n = ). order pyrite p < ., specific types using varied volume vulnerable cm. (Campbell Biol. Hollesen National Norse Thule accelerate area border-color border-width coastal correlated correlation impact included n = ), reactive regression r = ., selected shown significantly solid; total used {font-style {font-weight (). (.° (linear (mean ± SD; . ± . . μmol Archaeological Change Denmark Department ERA Figs Furthermore, Interim MODIS Museum Relative Saqqaq Sci. Temperature University acid approximately artefacts assessing based bold changes concentration connected courier; culture cultures data: dataset decomposition depth-specific derived em; equally global good gradient high importance important increased increasing initial inland known logarithmic main materials measuring methods mimic natural permanently probes probes) production, pt;} reactivity relative remains representativeness results saturated significant sites. thawing transformed triplicates visited vulnerability wood cm


Dashboard
Browse recently launched courses and see what's new in your favorite subjects.
Courses
Programs
Courses
In-Progress
Course Title
Verified
INSTx
Resume Course
Hide
Unenroll
Course Title
INSTx
Resume Course
Upgrade
Hide
Unenroll
Completed
Course Title
Verified
INSTx
Download Certificate
Hidden
1
Expand/Collapse
Course Title
INSTx
Resume Course
Upgrade
Unhide
Unenroll


env_helper v0.0.3 EnvHelper
Helpers for enviroment and application variables.
Summary
Macros
defines a method name/0
which returns either the application variable for appname[key]
or the provided alt
value
creates a method name/0
which returns either alt
or the environment variable set for the upcase version name
creates a method name/0
which returns either alt
or the environment variable set for the upcase version name
, cast to an integer
Macros
defines a method name/0
which returns either the application variable for appname[key]
or the provided alt
value.
Works best in simple cases, such as config :appname, :key, value
Example
defmodule AppEnvs do
import EnvHelper
app_env(:port, [:appname, :port], 1234)
end
> AppEnvs.port
1234
> Application.put_env(:appname, :port, 5678)
:ok
> AppEnvs.app_port
5678
creates a method name/0
which returns either alt
or the environment variable set for the upcase version name
.
Paramenters
name
:: atomThe name of a system environment variable, downcase, as an atom
alt
:: anyThe value used if the system variable is not set.
Example
defmodule EnvSets do
import EnvHelper
system_env(:app_url, "localhost:2000")
end
> EnvSets.app_url
"localhost:2000"
> System.put_env("APP_URL", "app.io")
:ok
> EnvSets.app_url
"app.io"
Specs
system_env(term, atom, any, :string_to_integer) :: integer
creates a method name/0
which returns either alt
or the environment variable set for the upcase version name
, cast to an integer.
Paramenters
name
:: atomThe name of a system environment variable, downcase, as an atom
alt
:: anyThe value used if the system variable is not set.
:string_to_integer
forces the returned value to be an integer.
Example
defmodule EnvSets do
import EnvHelper
system_env(:app_port, 2000, :string_to_integer)
end
> EnvSets.app_port
2000
> System.put_env("APP_PORT", "2340")
:ok
> EnvSets.app_port
2340
> System.put_env("APP_PORT", 2360)
:ok
> EnvSets.app_url
2360