Sign Up
Sign In
Sign In with Facebook
Check your school email
We've sent an email to
<EMAIL_ADDRESS>. Click the link in the email to reset the password.
If you do not see the email in your inbox. check other places it might be, such as your junk, spam, social, or other folders.


You have no Twitter keys defined. You are most likely running a development build and have not placed your API keys in secret_key.js


Resources
Local Vendors
- GlowKBD
- 40% and smaller group buys and commissions by our member Glow.
- KKona
- Ready made straight, coiled and TRRS cables by our member KKona.co.
- Rain Keebs
- 40% keyboards (especially splits) designed by our member rain.
- RMKeebs
- Keyboards and accessories made in the PNW by our member JRucker.
- Senseless Clay
- A nice 60% PCB and more, designed by our member Hadi.
- Stupid Bullets Tech
- Authorized Gazzew Dealer, Krytox and Tribosys Lube, + Gateron, Tecsee, etc., + Artisans, + Keyboard accessories.
- Vala Supply
- Keycaps, keyboards, deskmats, and more, by our member Vala.
- Voxel Mods
- Bespoke MDPC-X USB Cable service and DIY Supply shop by our member VoxelMods.
- Inked Gaming
- Custom deskmats and other soft goods.
- Love My Switches
- Encoder knobs and more (not keyboard specific).
General keyboard information
- Keycap profile comparison
- Material elasticity comparison
- Split keyboards comparison
- 1800 layout keyboards comparison
- Switch recommendations
- Mechmap - A community resource
- Starter guide to buying parts
Keyboard assembly
Making keycaps
Making Cables
These are some of the components needed to make USB cables. Aliexpress product pages change frequently. If the link is broken, search for a similar product using the name of the part.
- USB type-C plug
- USB type-A plug
- Micro-USB plug
- Heat-shrink
- UL2464 28 AWG 5 core cable for USB
- Paracord
- TechFlex sleeving
- MDPC-X sleeving
Make sure to buy coreless paracord. If you buy normal paracord, you'll have to remove the core yourself.


People need a way to keep their brains in prime condition – while still having fun. Our response: a clean, simple, beautiful game that’s sure to bring out your best – 10 times out of 10.
Digits is a skill testing game that tests your ability to crack a code as fast as possible. With a beautiful interface and simple swipe gestures, it is on-the-go entertainment at its finest. Sure to keep you hooked for hours, our app will keep your brain working at its optimum.
Clean, puzzling, beautiful.
That’s the power of Digits.
Get it now on Google Play
Feel free to email us to provide feedback on our apps, give us suggestions, ask questions, or to just say hello! We ♥ talking about our games.


The world's #1 pizza brand is now serving in Nairobi City.
One of Nairobi’s most celebrated pizzerias, PIZZA PLACE combines the elegance of a Bolognese enoteca with the fun bustle of an African society.
Open daily from 11AM to midnight, Pizza Place is perfect for a quick snack, a lingering meal, a family night out, or a large social gathering.
The first restaurant in Nairobi City to have a Cured Meats HACCP plan approved by the Nairobi City Health Department,
Pizza Place is renowned for its extensive selection of house-cured meats. The antipasti strike “the winning simplicity that defines
Italian food at its best,” says William Grimes in his New York Times review.
But what sets Pizza Place apart from its peers are its dolci, namely the widely sought after gelato.
Like the savory menu, gelato flavors include the traditional– dark chocolate, olive oil– as well as the seasonal.
PIZZA PLACE RESTAURANT CAN ACCOMMODATE PIZZA PARTIES OF UP TO 240 GUESTS IN OUR LIVELY ENOTECA AND MAIN DINING ROOM. Be it a casual birthday lunch, a private wine class, or a rehearsal dinner awash with Prosecco and Barolo, there is no event to which PIZZA PLACE is not suited. pizza place offers group dining packages for parties of 12 to 240 guests.
Did you know that we were the first to deliver to the White House? And wait for this, we were also the first to deliver to Outer Space. Now that's out of this world! Pizza Place has been all over and today we deliver the World's Favorite Pizza in over 100 countries! Now we're bringing the Greatest Pizza on Earth and Space to Kenya.
MONDAY & TUESDAY CLOSED
WEDNESDAY 1000 - 2400 Hrs
THURSDY 1000 - 2400 Hrs
FRIDAY 1000 - 2200 Hrs
SATURDAY 1000 - 2300 Hrs
SUNDAY CLOSED
FIND US IN NAIROBI CITY, NAKURU CITY, MOMBASA CITY AND KISUMU CITY
F-Y-I! WE OFFER FULL-SERVICE CATERING FOR ANY EVENT,
LARGE OR SMALL.


Mouse Hunt (1997)
A movie review by Michael J. Legeros Copyright 1997 by Michael J. Legeros
(Dreamworks) Directed by Gore Verbinski Written by Adam Rifkin Cast Nathan Lane, Lee Evans, Christopher Walken, Vicki Lewis, Eric Christmas, Maury Chaykin MPAA Rating "PG" Running Time 97 minutes Reviewed at The Carmike 7, Raleigh, NC (17DEC97)
==
Though closer to consistently amusing than non-stop, fall-down fun- ny, the first family film from Dreamworks is a slight delight. Nathan Lane and British comic Lee Evans play a pair of bickering, bumbling brothers, trying to rid a prized old mansion of a mouse. A very *smart* mouse. Slapstick ensues (vacuum versus sewage line, lit match versus natural gas, etc.), but not nearly as much as the ads suggest. (Nor as hilarious as expected, either. Have such shenanigans become too common- place, after three HOME ALONE movies?) Significant screen time is also devoted to the rodent's POV, in several FX-intensive sequences set in- side the walls of this old house. Younger kids *may* grow restless dur- ing the film's talkier bits, such as the brothers' ongoing efforts to sell the ancient (but fully functioning) string factory that they also inherited from their recently deceased father (William Hickey, looking delightfully decrepit in his final screen role). That said, whatever the wee ones miss in dialogue, the exceptional visuals should still keep them spellbound. (My favorite, next to the sight of Lane's exaggerated eyebrows, is the one-two punch of Phedon Papamichael's dark photography and Linda DeScenna's goofy-Gothic production design. We're talkin' Tim Burton territory, here.) And, parents, be forewarned about the City Pound scenes, where Laurel and Hardy look to snatch "one mean pussy." After the kids see *those* conditions, you'll never be able to get rid of another pet again.
Grade: B-
-- Mike Legeros - Movie Hell http://www.nonvirtual.com/hell
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


Interpreted by :
{{item}}
Written by :
Produced by :
{{'CORE.Category'|translate}}
{{item.name}}
Feat
{{item._meta.pseudo}}


HOME
ABOUT
PORTFOLIO
services
CONTACT
MAKE AN APPOINTMENT
NAME:
PHONE NUMBER:
EMAIL:
VISIT DATE:
HOW CAN WE HELP?
i would like to discuss
need some help
give some suggestions


---
layout: page-default
heading: blog
title: Blog List by Category
subheading: Analytics for financial risk management and investment
description: I'm Sarah Chen, analytic expert in banking and insurance.
color: grad-blog
---
Categories
{% for category in site.categories %}
{% capture category_name %}{{ category | first }}{% endcapture %}


I'm an advocate of the modern web and open source software. I write mostly Elixir, JavaScript, and Python with my current focus on Progressive Web Apps and realtime APIs.
Many businesses waste money by using poorly designed or ill fitting software. Get in touch and let's see if I can increase your efficiency or revenue with custom software.


Workbench Terms of Use
These Terms of Use for Workbench ("Terms") are legally binding terms governing your
use of Workbench. Please read it carefully. By clicking "I Agree" above or by
accessing or using any part of Workbench:
- If your use is on behalf of an entity with which you are employed, affiliated
or associated (the "Entity"), then you represent that you have the authority
to bind the Entity to these terms, as we may update them from time to
time, and you agree to the following terms on behalf of the Entity, and/or
- If your use is personal to you as an individual, then you agree to the following
terms on behalf of yourself
When we use "you" or "your" in these Terms, "you" or "your" means the Entity you
are agreeing to these Terms on the Entity's behalf or, you as an individual
if you are agreeing to these Terms as an individual.
"We" or "SFDC" shall mean salesforce.com, inc., The Landmark @ One Market, Suite
300, San Francisco, California 94105, U.S.A.
If you do not have such authority or do not agree to these terms, you may not use
the Workbench service.
Workbench is free to use, but is not an official salesforce.com product. Workbench
has not been officially tested or documented. salesforce.com support is not available
for Workbench. Support requests for Workbench should be directed to Stackoverflow
at
https://salesforce.stackexchange.com/questions/tagged/workbench. Source code
for Workbench can be found at
https://github.com/forceworkbench/forceworkbench
under separate and different license terms.
Workbench is a Developer Tool and you agree that, except as otherwise set forth below,
you are subject to and will comply with the DeveloperForce Terms of Use, as we
may update them from time to time, available at
http://www.developerforce.com/assets/termsofuse/Developerforce_TOU_20101119.pdf.
Please note use of Workbench may require the use of third party software, including
open source software that is not produced by, warranted by or licensed by salesforce.com.
You are responsible for complying with any licenses or terms and conditions that
may govern your use of such software. Please see
documentation for Workbench any for additional notices required by SFDC's
licensors.
These Terms were last updated on April 14, 2015.
-
Definitions.
"Workbench" means the Workbench suite of tools available at workbench.developerforce.com
and provided by SFDC as a demonstration of the open source application with
the same name at http://github.com/forceworkbench/forceworkbench.
-
Use of Workbench.
SFDC shall make Workbench available to You subject to the terms of this Agreement.
You shall only use Workbench in connection with SFDC online services and
the publicly available Force.com APIs.
-
Term and Termination.
This Agreement shall commence on the date of Your acceptance of these Terms and remain
in effect with respect to Workbench until the earlier of either (1) SFDC
ceasing to make Workbench available to You, or (2) termination of the Agreement
at any time in SFDC's sole discretion. Termination of these Terms shall not
entitle You or any Entity to a refund, credit, or other compensation from
SFDC under any agreement with SFDC or any other agreement or from any third
party.
-
Your Responsibilities.
You are responsible for all activities that occur in Your accounts and for compliance
by your employees, consultants, contractors, agents and affiliates with this
Agreement. Except as and only to the extent permitted by applicable law,
or by licensing terms governing use of the open-sourced Workbench code, You
shall not: (a) license, sublicense, sell, resell, rent, lease, transfer,
assign, distribute, time share or otherwise commercially exploit Workbench
or make Workbench available to any third party; (b) use Workbench to send
spam or otherwise duplicative or unsolicited messages in violation of applicable
laws; (c) use Workbench to send or store infringing, obscene, threatening,
libelous, or otherwise unlawful or tortious material, including material
that is harmful to children or violates third party privacy rights; (d) use
Workbench to send or store any virus, worm, time bomb, Trojan horse or other
harmful or malicious code, file, script, agent or programs; (e) interfere
with or disrupt the integrity or performance of Workbench or the data contained
therein; (f) attempt to gain unauthorized access to Workbench or its related
systems or networks; (g) modify, copy or create derivative works based on
Workbench; (h) frame or mirror any content forming part of Workbench, other
than on Your own intranets or otherwise for Your own internal business purposes;
(i) reverse engineer Workbench; (j) access Workbench in order to build a
competitive product or service, or (k) access Workbench in order to copy
any ideas, features, functions or graphics of Workbench. You shall: (i) have
sole responsibility for the accuracy, quality, integrity, legality, reliability,
and appropriateness of all content and data submitted to Workbench by You;
(ii) use commercially reasonable efforts to prevent unauthorized access to,
or use of, Workbench, and notify SFDC promptly of any such unauthorized access
or use; and (iii) comply with all applicable local, state, federal and foreign
laws, and written or electronically provided instructions from SFDC, in using
Workbench.
-
No Warranty.
WORKBENCH IS PROVIDED "AS-IS," EXCLUSIVE OF ANY WARRANTY WHATSOEVER.  WORKBENCH
IS NOT A PRODUCT OF SFDC AND IS NOT SUPPORTED BY SFDC IN ANY WAY. Workbench
may contain bugs or errors. Any production use of Workbench is at Your sole
risk. You acknowledge that SFDC may discontinue making Workbench available
to You at any time in its sole discretion.
-
No Damages.

-
Proprietary Rights.
Subject to the limited rights expressly granted hereunder, and as between You and
SFDC, SFDC reserves all rights, title and interest in and to Workbench, including
all related intellectual property rights. No rights are granted to You hereunder
other than as expressly set forth herein.
-
Relationship to Other Agreements.
 Use of any other services provided by SFDC and/or its affiliates
or subsidiaries (including services that Workbench may allow you to access
or interact with) are governed by the applicable master subscription or other
agreement for that service and not these Terms. Your use of other services
provided by third parties are governed by your applicable agreement with
that third party. No service level agreements in effect between you or any
Entity and SFDC shall apply to Workbench.
-
Miscellaneous.
You may not assign any of its rights or obligations hereunder, whether by operation
of law or otherwise, without the prior written consent of the SFDC. This
Agreement shall be governed exclusively by the internal laws of the State
of California, without regard to its conflicts of laws rules. Each party
hereby consents to the exclusive jurisdiction of the state and federal courts
located in San Francisco County, California to adjudicate any dispute arising
out of or relating to this Agreement. This Agreement constitutes the entire
agreement between the parties, and supersedes all prior and contemporaneous
agreements, proposals or representations, written or oral, concerning its
subject matter. No modification, amendment, or waiver of any provision of
this Agreement shall be effective unless in writing and signed by the party
against whom the modification, amendment or waiver is to be asserted.


WITNESS LIST Transportation Committee April 26, 2000-9:00A Interim Charge #1 On: Allison, Jim (County Judges and Commissioners Association of Texas) Nichols, Robert (Texas Transportation Commission) Stewart, Michael (Texas Aggregates and Concrete Association) Webb, Bill (Texas Motor Transportation Association) Welch, Ken (Texas Comptroller of Public Accounts)


Password Reset
Please submit your email address. We will send a password reset email immediately to you.


To view/change the user interface settings of JFTP (how the user
interface looks), open the preferences dialog by selecting
Tools -> Preferences
(
JFTP -> Preferences
on Mac OS X) menu item from the menu bar and click on the
User Interface
category in the left frame. This will display the existing user
interface preferences.
Look and Feel
The
Look and Feel
displays all installed look and feels in your JRE (Java Runtime
Environment). The Look and Feel displays all installed look and feels
in your JRE (Java Runtime Environment). The items in this drop-down
box vary depending on your operating system and JRE implementation.
Select a look and feel from the list to change the look and feel.
The default installation of JFTP sets the look and feel to the platform's native look and feel; i.e. On Windows, the look and feel is set to Windows native look and feel. On Mac OS X, it will be set to Aqua look and feel. On all other operating systems, the default is set to Java look and feel.


Implement GMAC data transfer and PHY management functions. More...
This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.
Implement GMAC data transfer and PHY management functions.
Related files: gmacd.c gmacd.h.


--- layout: archive title: Zulip Chat Archive permalink: /stream/218272-FoMM-/-Lean-Together-2020/topic/Term.20rewriting.20and.20PL.20theory.html ---
I've been thinking about formalizing fundamentals of term rewriting (e.g. lemmas about equivalence of various notions of confluence, proof techniques for termination/confluence, completion procedures, etc. - formalizations of Term Rewriting and All That, Advanced Topics in Term Rewriting) and PL theory (definitions of statics/dynamics for common languages, safety proofs, and related utilities), especially based on the recent discussions. Would this be useful to people?
If I were to take a stab at this, what would be the recommended way to develop? Should I build in an independent GitHub repo and discuss on Zulip? Does it make sense in mathlib (i.e. creating src/pl_theory
, src/rewriting
), and if so, are there any guidelines about structure? (Apologies if I'm missing something - don't have much experience contributing to Lean projects yet. :slight_smile:)
I don't know if it fits into mathlib. @Mario Carneiro would be the best person to answer that question.
You could certainly start a new package, add mathlib as dependency, and get started.
Discussions on Zulip are always a good idea (-;
Mario has in the past complained about the name mathlib
, on the grounds that it should be a library good for e.g. program verification as well. Rewriting is pretty fundamental, and I'd personally be happy to see a library for it inside of mathlib.
But is everyone subscribed to this stream? Maybe the question would do better in general
or new members
?
Do you know about IsaFoR? http://cl-informatik.uibk.ac.at/isafor/
No, I wasn't aware - this seems quite good.
I know plenty of purely mathematical applications for confluent rewriting. I would be very happy to see this in mathlib.
Note that this thread was continued in the general stream: https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Term.20rewriting.20and.20PL.20theory/near/185342815
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


See: Description
| Interface | Description |
|---|---|
| GraphFactory<T extends Vertex> | |
| WeightedEdgeGraph |
| Class | Description |
|---|---|
| AbstractGraph<T extends Vertex> | |
| BfsGraph<T extends UndirectedSimpleVertex & BfsVertex> |
Undirected graph meeting the requirements for conducting breadth-first search
|
| DfsGraph<E extends DfsEdgeData> |
Utility class that eliminates one type parameter from DirectedEdgeDataGraph
|
| DirectedEdgeDataGraph<T,V extends DirectedEdgeDataVertex<T>> |
Directed graph that supports edge data.
|
| DirectedSimpleGraph<T extends DirectedSimpleVertex> | |
| DirectedWeightedEdgeGraph<E extends EdgeWeightData,V extends DirectedEdgeDataVertex<E> & EdgeWeightVertex<E>> |
Directed graph supporting floating point edge weight.
|
| EdgeResetter | |
| KruskalGraph<E extends SpanningTreeEdgeData> |
Utility class that eliminates a type parameter from UndirectedWeightedEdgeGraph
|
| Transposer<T extends Vertex,U extends Vertex> |
Utility class for transposing a graph.
|
| UndirectedEdgeDataGraph<E,V extends UndirectedEdgeDataVertex<E>> |
Undirected graph that supports edge data.
|
| UndirectedSimpleGraph<T extends UndirectedSimpleVertex> | |
| UndirectedWeightedEdgeGraph<E extends EdgeWeightData,V extends UndirectedEdgeDataVertex<E> & EdgeWeightVertex<E>> |
Undirected graph supporting floating point edge weight.
|
| VertexResetter |
Static methods for resetting all vertices in a graph
|
| Enum | Description |
|---|---|
| OrderedDfsGraphFactory |
At the top of the class hierarchy is AbstractGraph The reason for not making the undirected graphs subclasses of directed graphs is that the
only method the graph actually contains is the edgeCount() method, which really needs to be final
in all cases: For an undirected graph it will return half of the number of directed edges
in the graph, and for a directed graph, all edges will be counted.
The reason for the extensive parameterization of an EdgeDataGraph is that its vertices
require 2 type parameters: One representing the type of the edge data it maintains and the other
a factory for creating such edge data objects. We need the factory because we need to create a new
edge data object whenever we add a new edge to the adjacency list of the vertex. As a result,
the parameterization of an EdgeData graph is much more elaborate than that for a SimpleGraph,
where the vertex only maintains information about the vertices to which it is adjacent but doesn't
map each vertex to an edge data object.


This website ("Website") is owned, operated and maintained by OMRON SINIC X Corporation ("the Company"). Please read these Terms of Use carefully before viewing other contents on this Website. You can use this Website only if you agree to and accept these Terms of Use.
Please note that the Company may, at its discretion, change these Terms of Use at any time. You are therefore requested to visit this page periodically to check the current Terms of Use.
Should individual terms and conditions be determined separately from these Terms of Use, you are requested to follow them.
1. Intellectual Property
The copyright for all materials on this Website belongs to the Company. Except to the extent permitted by copyright laws, you are prohibited from using any of this material (including, without limitation, duplicating, reproducing in whole or in part, transmitting, distributing, licensing, selling and adapting) without obtaining the Company's prior consent. In addition, by allowing you to access copyrighted work on the Website, the Company does not transfer any intellectual property rights including, without limitation, inventions contained in copyrighted work, patents and/or design rights, nor does it license any rights concerning these intellectual properties. This Website is provided "as is" and the Company offers no warranties of any kind, expressed or implied, regarding copyrighted contents on the Website.
All information regarding products, services and technologies provided by the Company through this Website are protected by copyright, intellectual property and other applicable laws of Japan.
The trademark "OMRON SINIC X Corporation" and any other product names, service names or logos of the Company used, quoted and/or referenced on this Website are trademarks or registered trademarks of the Company.
2. Prohibited Usage
You are prohibited from using this Website for any of the following activities:
- Any activity that does or has the potential to infringe upon the properties and/or legal rights (including privacy rights) of others.
- Any activity that defames, disgraces, slanders, libels and/or threatens others and/or the Company.
- Any activity that does or has the potential to disturb public order.
- Uploading programs and/or files that contain viruses and/or corrupted files that may damage the operation of other computers.
- Any activity that violates laws and/or legally binding regulations.
- Making false statements and/or notifications, including registration of e-mail addresses belonging to other parties.
3. Proposals and Offers
You are requested to refrain from sending your/others' trade secrets to the Company, in the form of inquiries made through this Website or otherwise. You are also requested to refrain from making business offers and/or proposals including, without limitation, suggestions, materials or ideas for new or improved products, unless such offers are invited on this Website. Regardless of the foregoing request, if your ideas are brought to our attention, they will be treated, unless otherwise specified, as though you are in agreement with the following terms:
- The Company is under no obligation to handle the submitted idea as confidential information.
- The Company is under no obligation to study, evaluate or adopt the submitted idea.
- Even if the Company adopts an idea identical or similar in whole or in part to the submitted idea, the Company is neither responsible nor liable for any compensation thereof.
4. Disclaimer
Regarding the information on this Website, the Company makes no representation and warranty with respect to:
- Accuracy, reliability, completeness and usefulness.
- Fitness for any particular purpose or functionality.
- Availability of information on a timely basis.
- Safety of contents and freedom from computer viruses.
- Information and contents of any linked non-the Company site that you access.
Moreover, in no event will the Company be liable for any damage or cause of any damage based on or resulting from change and/or removal of any information on this Website and/or suspension or discontinuation of this Website.
5. Applicable Laws and Jurisdiction
These Terms of Use and the Company's Website are governed by and determined in accordance with the laws of Japan. All controversies and disputes arising from or related to these Terms of Use and the Company's Website shall be submitted to and resolved by trial at the District Court in Kyoto, Japan.
6. Links
You may link any site, whether it is commercial or noncommercial, Internet or intranet, to the Website only if you agree to and follow the "Disclaimer and Linking Policies," below, after carefully reading them. Any prior application or notification is not necessary.
Disclaimer and Linking Policies
- In no event will the Company be liable for any damage or compensation for damage that may result from links.
- The Company does not guarantee that information in this Website and its URL will remain unchanged permanently. The Website information and URL are subject to change without notice.
- You are not allowed to use the OMRON logo for links. (The Company's prior permission is required for use of the OMRON logo.)
-
The Company categorically refuses links to this Website by any of the following sites:
- Sites including content that defames, disgraces or slanders the Company or its group companies, as well as directors, officers or employees thereof.
- Sites including content that defames, disgraces or slanders the products or services from the Company or its group companies.
- Sites providing information or content that is illegal or may have the potential of being illegal.
- Sites with obscene content or content that has the potential of offending social ethics, public order or morals.
- Sites that make it unclear that this Website is owned and operated by the Company, such as sites that "frame" this Website.
- Should the Company demand the removal of a certain link due to the Company's judgment that the link violates any of the above provisions, or for any other reason, the concerned party must comply with the demand immediately.


DSL variables¶
Miller has the following kinds of variables:
Fields of stream records, accessed using the $
prefix. These refer to fields of the current data-stream record. For example, in echo x=1,y=2 | mlr put '$z = $x + $y'
, $x
and $y
refer to input fields, and $z
refers to a new, computed output field. In a few contexts, presented below, you can refer to the entire record as $*
.
Out-of-stream variables accessed using the @
prefix. These refer to data which persist from one record to the next, including in begin
and end
blocks (which execute before/after the record stream is consumed, respectively). You use them to remember values across records, such as sums, differences, counters, and so on. In a few contexts, presented below, you can refer to the entire out-of-stream-variables collection as @*
.
Local variables are limited in scope and extent to the current statements being executed: these include function arguments, bound variables in for loops, and local variables.
Built-in variables such as NF
, NR
, FILENAME
, M_PI
, and M_E
. These are all capital letters and are read-only (although some of them change value from one record to another).
Keywords are not variables, but since their names are reserved, you cannot use these names for local variables.
Field names¶
Names of fields within stream records must be specified using a $
in filter and put expressions, even though the dollar signs don't appear in the data stream itself. For integer-indexed data, this looks like awk
's $1,$2,$3
, except that Miller allows non-numeric names such as $quantity
or $hostname
. Likewise, enclose string literals in double quotes in filter
expressions even though they don't appear in file data. In particular, mlr filter '$x=="abc"'
passes through the record x=abc
.
If field names have special characters such as .
then you can use braces, e.g. '${field.name}'
.
You may also use a computed field name in square brackets, e.g.
echo a=3,b=4 | mlr filter '$["x"] < 0.5'
echo s=green,t=blue,a=3,b=4 | mlr put '$[$s."_".$t] = $a * $b'
s=green,t=blue,a=3,b=4,green_blue=12
Notes:
The names of record fields depend on the contents of your input data stream, and their values change from one record to the next as Miller scans through your input data stream.
Their extent is limited to the current record; their scope is the filter
or put
command in which they appear.
These are read-write: you can do $y=2*$x
, $x=$x+1
, etc.
Records are Miller's output: field names present in the input stream are passed through to output (written to standard output) unless fields are removed with cut
, or records are excluded with filter
or put -q
, etc. Simply assign a value to a field and it will be output.
Positional field names¶
Even though Miller's main selling point is name-indexing, sometimes you really want to refer to a field name by its positional index (starting from 1).
Use $[[3]]
to access the name of field 3. More generally, any expression evaluating to an integer can go between $[[
and ]]
.
Then using a computed field name, $[ $[[3]] ]
is the value in the third field. This has the shorter equivalent notation $[[[3]]]
.
mlr cat data/small
a=pan,b=pan,i=1,x=0.346791,y=0.726802 a=eks,b=pan,i=2,x=0.758679,y=0.522151 a=wye,b=wye,i=3,x=0.204603,y=0.338318 a=eks,b=wye,i=4,x=0.381399,y=0.134188 a=wye,b=pan,i=5,x=0.573288,y=0.863624
mlr put '$[[3]] = "NEW"' data/small
a=pan,b=pan,NEW=1,x=0.346791,y=0.726802 a=eks,b=pan,NEW=2,x=0.758679,y=0.522151 a=wye,b=wye,NEW=3,x=0.204603,y=0.338318 a=eks,b=wye,NEW=4,x=0.381399,y=0.134188 a=wye,b=pan,NEW=5,x=0.573288,y=0.863624
mlr put '$[[[3]]] = "NEW"' data/small
a=pan,b=pan,i=NEW,x=0.346791,y=0.726802 a=eks,b=pan,i=NEW,x=0.758679,y=0.522151 a=wye,b=wye,i=NEW,x=0.204603,y=0.338318 a=eks,b=wye,i=NEW,x=0.381399,y=0.134188 a=wye,b=pan,i=NEW,x=0.573288,y=0.863624
mlr put '$NEW = $[[NR]]' data/small
a=pan,b=pan,i=1,x=0.346791,y=0.726802,NEW=a a=eks,b=pan,i=2,x=0.758679,y=0.522151,NEW=b a=wye,b=wye,i=3,x=0.204603,y=0.338318,NEW=i a=eks,b=wye,i=4,x=0.381399,y=0.134188,NEW=x a=wye,b=pan,i=5,x=0.573288,y=0.863624,NEW=y
mlr put '$NEW = $[[[NR]]]' data/small
a=pan,b=pan,i=1,x=0.346791,y=0.726802,NEW=pan a=eks,b=pan,i=2,x=0.758679,y=0.522151,NEW=pan a=wye,b=wye,i=3,x=0.204603,y=0.338318,NEW=3 a=eks,b=wye,i=4,x=0.381399,y=0.134188,NEW=0.381399 a=wye,b=pan,i=5,x=0.573288,y=0.863624,NEW=0.863624
mlr put '$[[[NR]]] = "NEW"' data/small
a=NEW,b=pan,i=1,x=0.346791,y=0.726802 a=eks,b=NEW,i=2,x=0.758679,y=0.522151 a=wye,b=wye,i=NEW,x=0.204603,y=0.338318 a=eks,b=wye,i=4,x=NEW,y=0.134188 a=wye,b=pan,i=5,x=0.573288,y=NEW
Right-hand side accesses to non-existent fields -- i.e. with index less than 1 or greater than NF
-- return an absent value. Likewise, left-hand side accesses only refer to fields which already exist. For example, if a field has 5 records then assigning the name or value of the 6th (or 600th) field results in a no-op.
mlr put '$[[6]] = "NEW"' data/small
a=pan,b=pan,i=1,x=0.346791,y=0.726802 a=eks,b=pan,i=2,x=0.758679,y=0.522151 a=wye,b=wye,i=3,x=0.204603,y=0.338318 a=eks,b=wye,i=4,x=0.381399,y=0.134188 a=wye,b=pan,i=5,x=0.573288,y=0.863624
mlr put '$[[[6]]] = "NEW"' data/small
a=pan,b=pan,i=1,x=0.346791,y=0.726802 a=eks,b=pan,i=2,x=0.758679,y=0.522151 a=wye,b=wye,i=3,x=0.204603,y=0.338318 a=eks,b=wye,i=4,x=0.381399,y=0.134188 a=wye,b=pan,i=5,x=0.573288,y=0.863624
Out-of-stream variables¶
These are prefixed with an at-sign, e.g. @sum
. Furthermore, unlike built-in variables and stream-record fields, they are maintained in an arbitrarily nested map: you can do @sum += $quantity
, or @sum[$color] += $quantity
, or @sum[$color][$shape] += $quantity
. The keys for the multi-level map can be any expression which evaluates to string or integer: e.g. @sum[NR] = $a + $b
, @sum[$a."-".$b] = $x
, etc.
Their names and their values are entirely under your control; they change only when you assign to them.
Just as for field names in stream records, if you want to define out-of-stream variables with special characters such as .
then you can use braces, e.g<EMAIL_ADDRESS>.
You may use a computed key in square brackets, e.g.
echo s=green,t=blue,a=3,b=4 | mlr put -q<EMAIL_ADDRESS>= $a * $b; emit all'
green_blue=12
Out-of-stream variables are scoped to the put
command in which they appear. In particular, if you have two or more put
commands separated by then
, each put will have its own set of out-of-stream variables:
cat data/a.dkvp
a=1,b=2,c=3 a=4,b=5,c=6
mlr put '@sum += $a; end {emit @sum}' \ then put 'is_present($a) {$a=10*$a; @sum += $a}; end {emit @sum}' \ data/a.dkvp
a=10,b=2,c=3 a=40,b=5,c=6 sum=5 sum=50
Out-of-stream variables' extent is from the start to the end of the record stream, i.e. every time the put
or filter
statement referring to them is executed.
Out-of-stream variables are read-write: you can do $sum=@sum
, @sum=$sum
, etc.
Indexed out-of-stream variables¶
Using an index on the @count
and @sum
variables, we get the benefit of the -g
(group-by) option which mlr stats1
and various other Miller commands have:
mlr put -q ' @x_count[$a] += 1; @x_sum[$a] += $x; end { emit @x_count, "a"; emit @x_sum, "a"; } ' ./data/small
a=pan,x_count=1 a=eks,x_count=2 a=wye,x_count=2 a=pan,x_sum=0.346791 a=eks,x_sum=1.140078 a=wye,x_sum=0.777891
mlr stats1 -a count,sum -f x -g a ./data/small
a=pan,x_count=1,x_sum=0.346791 a=eks,x_count=2,x_sum=1.140078 a=wye,x_count=2,x_sum=0.777891
Indices can be arbitrarily deep -- here there are two or more of them:
mlr --from data/medium put -q ' @x_count[$a][$b] += 1; @x_sum[$a][$b] += $x; end { emit (@x_count, @x_sum), "a", "b"; } '
a=pan,b=pan,x_count=427,x_sum=219.1851288316854 a=pan,b=wye,x_count=395,x_sum=198.43293070748447 a=pan,b=eks,x_count=429,x_sum=216.07522773165525 a=pan,b=hat,x_count=417,x_sum=205.22277621488686 a=pan,b=zee,x_count=413,x_sum=205.09751802331917 a=eks,b=pan,x_count=371,x_sum=179.96303047250723 a=eks,b=wye,x_count=407,x_sum=196.9452860713734 a=eks,b=zee,x_count=357,x_sum=176.8803651584733 a=eks,b=eks,x_count=413,x_sum=215.91609712937984 a=eks,b=hat,x_count=417,x_sum=208.783170520597 a=wye,b=wye,x_count=377,x_sum=185.29584980261419 a=wye,b=pan,x_count=392,x_sum=195.84790012056564 a=wye,b=hat,x_count=426,x_sum=212.0331829346132 a=wye,b=zee,x_count=385,x_sum=194.77404756708714 a=wye,b=eks,x_count=386,x_sum=204.8129608356315 a=zee,b=pan,x_count=389,x_sum=202.21380378504267 a=zee,b=wye,x_count=455,x_sum=233.9913939194868 a=zee,b=eks,x_count=391,x_sum=190.9617780631925 a=zee,b=zee,x_count=403,x_sum=206.64063510417319 a=zee,b=hat,x_count=409,x_sum=191.30000620900935 a=hat,b=wye,x_count=423,x_sum=208.8830097609959 a=hat,b=zee,x_count=385,x_sum=196.3494502965293 a=hat,b=eks,x_count=389,x_sum=189.0067933716193 a=hat,b=hat,x_count=381,x_sum=182.8535323148762 a=hat,b=pan,x_count=363,x_sum=168.5538067327806
The idea is that stats1
, and other Miller verbs, encapsulate frequently-used patterns with a minimum of keystroking (and run a little faster), whereas using out-of-stream variables you have more flexibility and control in what you do.
Begin/end blocks can be mixed with pattern/action blocks. For example:
mlr put ' begin { @num_total = 0; @num_positive = 0; }; @num_total += 1; $x > 0.0 { @num_positive += 1; $y = log10($x); $z = sqrt($y) }; end { emitf @num_total, @num_positive } ' data/put-gating-example-1.dkvp
x=-1 x=0 x=1,y=0,z=0 x=2,y=0.3010299956639812,z=0.5486620049392715 x=3,y=0.4771212547196624,z=0.6907396432228734 num_total=5,num_positive=3
Local variables¶
Local variables are similar to out-of-stream variables, except that their extent is limited to the expressions in which they appear (and their basenames can't be computed using square brackets). There are three kinds of local variables: arguments to functions/subroutines, variables bound within for-loops, and locals defined within control blocks. They may be untyped using var
, or typed using num
, int
, float
, str
, bool
, arr
, map
, and funct
.
For example:
# Here I'm using a specified random-number seed so this example always # produces the same output for this web document: in everyday practice we # would leave off the --seed 12345 part. mlr --seed 12345 seqgen --start 1 --stop 10 then put ' func f(a, b) { # function arguments a and b r = 0.0; # local r scoped to the function for (int i = 0; i < 6; i += 1) { # local i scoped to the for-loop num u = urand(); # local u scoped to the for-loop r += u; # updates r from the enclosing scope } r /= 6; return a + (b - a) * r; } num o = f(10, 20); # local to the top-level scope $o = o; '
i=1,o=15.952526011537227 i=2,o=12.782237754999116 i=3,o=15.126606630220966 i=4,o=14.794357488895775 i=5,o=15.168665974047421 i=6,o=16.20662783079942 i=7,o=13.966128063060479 i=8,o=13.99248245928659 i=9,o=15.784270485515197 i=10,o=15.37686787628025
Things which are completely unsurprising, resembling many other languages:
-
Parameter names are bound to their arguments but can be reassigned, e.g. if there is a parameter named
a
then you can reassign the value ofa
to be something else within the function if you like. -
However, you cannot redeclare the type of an argument or a local:
var a=1; var a=2
is an error butvar a=1; a=2
is OK. -
All argument-passing is positional rather than by name; arguments are passed by value, not by reference. (This is also true for map-valued variables: they are not, and cannot be, passed by reference.)
-
You can define locals (using
var
,num
, etc.) at any scope (if-statements, else-statements, while-loops, for-loops, or the top-level scope), and nested scopes will have access (more details on scope in the next section). If you define a local variable with the same name inside an inner scope, then a new variable is created with the narrower scope. -
If you assign to a local variable for the first time in a scope without declaring it as
var
,num
, etc. then: if it exists in an outer scope, that outer-scope variable will be updated; if not, it will be defined in the current scope as ifvar
had been used. (See also Type-checking for an example.) I recommend always declaring variables explicitly to make the intended scoping clear. -
Functions and subroutines never have access to locals from their callee (unless passed by value as arguments).
Things which are perhaps surprising compared to other languages:
-
Type declarations using
var
, or typed usingnum
,int
,float
,str
,bool
,arr
,map
,funct
are not necessary to declare local variables. Function arguments and variables bound in for-loops over stream records and out-of-stream variables are implicitly declared usingvar
. (Some examples are shown below.) -
Type-checking is done at assignment time. For example,
float f = 0
is an error (since0
is an integer), as isfloat f = 0.0; f = 1
. For this reason I prefer to usenum
overfloat
in most contexts sincenum
encompasses integer and floating-point values. More information is at Type-checking. -
Bound variables in for-loops over stream records and out-of-stream variables are implicitly local to that block. E.g. in
for (k, v in $*) { ... }
for ((k1, k2), v in @*) { ... }
if there arek
,v
, etc. in the enclosing scope then those will be masked by the loop-local bound variables in the loop, and moreover the values of the loop-local bound variables are not available after the end of the loop. -
For C-style triple-for loops, if a for-loop variable is defined using
var
,int
, etc. then it is scoped to that for-loop. E.g.for (i = 0; i < 10; i += 1) { ... }
andfor (int i = 0; i < 10; i += 1) { ... }
. (This is unsurprising.). If there is no typedecl and an outer-scope variable of that name exists, then it is used. (This is also unsurprising.) But if there is no outer-scope variable of that name, then the variable is scoped to the for-loop only.
The following example demonstrates the scope rules:
cat data/scope-example.mlr
func f(a) { # argument is local to the function var b = 100; # local to the function c = 100; # local to the function; does not overwrite outer c return a + 1; } var a = 10; # local at top level var b = 20; # local at top level c = 30; # local at top level; there is no more-outer-scope c if (NR == 3) { var a = 40; # scoped to the if-statement; doesn't overwrite outer a b = 50; # not scoped to the if-statement; overwrites outer b c = 60; # not scoped to the if-statement; overwrites outer c d = 70; # there is no outer d so a local d is created here $inner_a = a; $inner_b = b; $inner_c = c; $inner_d = d; } $outer_a = a; $outer_b = b; $outer_c = c; $outer_d = d; # there is no outer d defined so no assignment happens
cat data/scope-example.dat
n=1,x=123 n=2,x=456 n=3,x=789
mlr --oxtab --from data/scope-example.dat put -f data/scope-example.mlr
n 1 x 123 outer_a 10 outer_b 20 outer_c 30 n 2 x 456 outer_a 10 outer_b 20 outer_c 30 n 3 x 789 inner_a 40 inner_b 50 inner_c 60 inner_d 70 outer_a 10 outer_b 50 outer_c 60
And this example demonstrates the type-declaration rules:
cat data/type-decl-example.mlr
subr s(a, str b, int c) { # a is implicitly var (untyped). # b is explicitly str. # c is explicitly int. # The type-checking is done at the callsite # when arguments are bound to parameters. # var b = 100; # error # Re-declaration in the same scope is disallowed. int n = 10; # Declaration of variable local to the subroutine. n = 20; # Assignment is OK. int n = 30; # error # Re-declaration in the same scope is disallowed. str n = "abc"; # error # Re-declaration in the same scope is disallowed. # float f1 = 1; # error # 1 is an int, not a float. float f2 = 2.0; # 2.0 is a float. num f3 = 3; # 3 is a num. num f4 = 4.0; # 4.0 is a num. } # # call s(1, 2, 3); # Type-assertion '3 is int' is done here at the callsite. # k = "def"; # Top-level variable k. # for (str k, v in $*) { # k and v are bound here, masking outer k. print k . ":" . v; # k is explicitly str; v is implicitly var. } # # print "k is".k; # k at this scope level is still "def". print "v is".v; # v is undefined in this scope. # i = -1; # for (i = 1, int j = 2; i <= 10; i += 1, j *= 2) { # C-style triple-for variables use enclosing scope, # unless declared local: i is outer, j is local to the loop. print "inner i =", i; # print "inner j =", j; # } # print "outer i =", i; # i has been modified by the loop. print "outer j =", j; # j is undefined in this scope.
Map literals¶
Miller's put
/filter
DSL has four kinds of maps. Stream records are (single-level) maps from name to value. Out-of-stream variables and local variables can also be maps, although they can be multi-level maps (e.g. @sum[$x][$y]
). The fourth kind is map literals. These cannot be on the left-hand side of assignment expressions. Syntactically they look like JSON, although Miller allows string and integer keys in its map literals while JSON allows only string keys (e.g. "3"
rather than 3
). Note though that integer keys become stringified in Miller: @mymap[3]=4
results in @mymap
being {"3":4}
.
For example, the following swaps the input stream's a
and i
fields, modifies y
, and drops the rest:
mlr --opprint put ' $* = { "a": $i, "i": $a, "y": $y * 10, } ' data/small
a i y 1 pan 7.26802 2 eks 5.22151 3 wye 3.3831800000000003 4 eks 1.34188 5 wye 8.636239999999999
Likewise, you can assign map literals to out-of-stream variables or local variables; pass them as arguments to user-defined functions, return them from functions, and so on:
mlr --from data/small put ' func f(map m): map { m["x"] *= 200; return m; } $* = f({"a": $a, "x": $x}); '
a=pan,x=69.3582 a=eks,x=151.7358 a=wye,x=40.9206 a=eks,x=76.2798 a=wye,x=114.6576
Like out-of-stream and local variables, map literals can be multi-level:
mlr --from data/small put -q ' begin { @o = { "nrec": 0, "nkey": {"numeric":0, "non-numeric":0}, }; } @o["nrec"] += 1; for (k, v in $*) { if (is_numeric(v)) { @o["nkey"]["numeric"] += 1; } else { @o["nkey"]["non-numeric"] += 1; } } end { dump @o; } '
{ "nrec": 5, "nkey": { "numeric": 15, "non-numeric": 10 } }
See also the Maps page.
Built-in variables¶
These are written all in capital letters, and only a small, specific set of them is defined by Miller.
Namely, Miller supports the following five built-in variables for filter and
put, all awk
-inspired: NF
, NR
, FNR
, FILENUM
, and
FILENAME
, as well as the mathematical constants M_PI
and M_E
. As well,
there are the read-only separator variables IRS
, ORS
, IFS
, OFS
, IPS
,
and OPS
as discussed on the separators page,
and the flatten/unflatten separator FLATSEP
discussed on the
flatten/unflatten page. Lastly, the ENV
map allows
read/write access to environment variables, e.g. ENV["HOME"]
or
ENV["foo_".$hostname]
or ENV["VERSION"]="1.2.3"
.
mlr filter 'FNR == 2' data/small*
a=eks,b=pan,i=2,x=0.758679,y=0.522151 1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533 a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134
mlr put '$fnr = FNR' data/small*
a=pan,b=pan,i=1,x=0.346791,y=0.726802,fnr=1 a=eks,b=pan,i=2,x=0.758679,y=0.522151,fnr=2 a=wye,b=wye,i=3,x=0.204603,y=0.338318,fnr=3 a=eks,b=wye,i=4,x=0.381399,y=0.134188,fnr=4 a=wye,b=pan,i=5,x=0.573288,y=0.863624,fnr=5 1=a,2=b,3=i,4=x,5=y,fnr=1 1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533,fnr=2 1=eks,2=pan,3=2,4=0.7586799647899636,5=0.5221511083334797,fnr=3 1=wye,2=wye,3=3,4=0.20460330576630303,5=0.33831852551664776,fnr=4 1=eks,2=wye,3=4,4=0.38139939387114097,5=0.13418874328430463,fnr=5 1=wye,2=pan,3=5,4=0.5732889198020006,5=0.8636244699032729,fnr=6 a=pan,b=eks,i=9999,x=0.267481232652199086,y=0.557077185510228001,fnr=1 a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134,fnr=2 a=pan,b=wye,i=10001,x=0.870530722602517626,y=0.009854780514656930,fnr=3 a=hat,b=wye,i=10002,x=0.321507044286237609,y=0.568893318795083758,fnr=4 a=pan,b=zee,i=10003,x=0.272054845593895200,y=0.425789896597056627,fnr=5
Their values of NF
, NR
, FNR
, FILENUM
, and FILENAME
change from one
record to the next as Miller scans through your input data stream. The
mathematical constants, of course, do not change; ENV
is populated from the
system environment variables at the time Miller starts. Any changes made to
ENV
by assigning to it will affect any subprocesses, such as using
piped tee.
Their scope is global: you can refer to them in any filter
or put
statement. Their values are assigned by the input-record reader:
mlr --csv put '$nr = NR' data/a.csv
a,b,c,nr 1,2,3,1 4,5,6,2
mlr --csv repeat -n 3 then put '$nr = NR' data/a.csv
a,b,c,nr 1,2,3,1 1,2,3,1 1,2,3,1 4,5,6,2 4,5,6,2 4,5,6,2
The extent is for the duration of the put/filter: in a begin
statement (which executes before the first input record is consumed) you will find NR=1
and in an end
statement (which is executed after the last input record is consumed) you will find NR
to be the total number of records ingested.
These are all read-only for the mlr put
and mlr filter
DSL: they may be assigned from, e.g. $nr=NR
, but they may not be assigned to: NR=100
is a syntax error.
Type-checking¶
Miller's put
/filter
DSL supports two optional kinds of type-checking. One is inline type-tests and type-assertions within expressions. The other is type declarations for assignments to local variables, binding of arguments to user-defined functions, and return values from user-defined functions, These are discussed in the following subsections.
Use of type-checking is entirely up to you: omit it if you want flexibility with heterogeneous data; use it if you want to help catch misspellings in your DSL code or unexpected irregularities in your input data.
Type-test and type-assertion expressions¶
The following is_...
functions take a value and return a boolean indicating whether the argument is of the indicated type. The assert_...
functions return their argument if it is of the specified type, and cause a fatal error otherwise:
mlr -f | grep ^is
is_absent is_array is_bool is_boolean is_empty is_empty_map is_error is_float is_int is_map is_nan is_nonempty_map is_not_array is_not_empty is_not_map is_not_null is_null is_numeric is_present is_string
mlr -f | grep ^assert
asserting_absent asserting_array asserting_bool asserting_boolean asserting_empty asserting_empty_map asserting_error asserting_float asserting_int asserting_map asserting_nonempty_map asserting_not_array asserting_not_empty asserting_not_map asserting_not_null asserting_null asserting_numeric asserting_present asserting_string
See Data-cleaning Examples for examples of how to use these.
Type-declarations for local variables, function parameter, and function return values¶
Local variables can be defined either untyped as in x = 1
, or typed as in int x = 1
. Types include var (explicitly untyped), int, float, num (int or float), str, bool, arr, map, and funct. These optional type declarations are enforced at the time values are assigned to variables: whether at the initial value assignment as in int x = 1
or in any subsequent assignments to the same variable farther down in the scope.
The reason for num
is that int
and float
typedecls are very precise:
float a = 0; # Runtime error since 0 is int not float int b = 1.0; # Runtime error since 1.0 is float not int num c = 0; # OK num d = 1.0; # OK
A suggestion is to use num
for general use when you want numeric content, and use int
when you genuinely want integer-only values, e.g. in loop indices or map keys (since Miller map keys can only be strings or ints).
The var
type declaration indicates no type restrictions, e.g. var x = 1
has the same type restrictions on x
as x = 1
. The difference is in intentional shadowing: if you have x = 1
in outer scope and x = 2
in inner scope (e.g. within a for-loop or an if-statement) then outer-scope x
has value 2 after the second assignment. But if you have var x = 2
in the inner scope, then you are declaring a variable scoped to the inner block.) For example:
x = 1; if (NR == 4) { x = 2; # Refers to outer-scope x: value changes from 1 to 2. } print x; # Value of x is now two
x = 1; if (NR == 4) { var x = 2; # Defines a new inner-scope x with value 2 } print x; # Value of this x is still 1
Likewise function arguments can optionally be typed, with type enforced when the function is called:
func f(map m, int i) { ... } $a = f({1:2, 3:4}, 5); # OK $b = f({1:2, 3:4}, "abc"); # Runtime error $c = f({1:2, 3:4}, $x); # Runtime error for records with non-integer field named x if (NR == 4) { var x = 2; # Defines a new inner-scope x with value 2 } print x; # Value of this x is still 1
Thirdly, function return values can be type-checked at the point of return
using :
and a typedecl after the parameter list:
func f(map m, int i): bool { ... ... if (...) { return "false"; # Runtime error if this branch is taken } ... ... if (...) { return retval; # Runtime error if this function doesn't have an in-scope # boolean-valued variable named retval } ... ... # In Miller if your functions don't explicitly return a value, they return absent-null. # So it would also be a runtime error on reaching the end of this function without # an explicit return statement. }
The funct
keyword, for function type, indicates that a variable, argument, or return value is a function -- either a function literal or a (named) user-defined function.
$ cat funct-example.mlr func makefunc(): funct { return func(x,y) { return 10*x + y } } func callfunc(funct f, num x, num y): num { return f(x, y) }
$ rlwrap mlr repl Miller 6.0.0-dev REPL for darwin/amd64/go1.17 Docs: https://miller.readthedocs.io Type ':h' or ':help' for online help; ':q' or ':quit' to quit. [mlr] :load funct-example.mlr [mlr] f = makefunc() [mlr] f function-literal-000001 [mlr] f(2,3) 23 [mlr] callfunc(f, 3, 5) 35
Aggregate variable assignments¶
There are three remaining kinds of variable assignment using out-of-stream variables, the last two of which use the $*
syntax:
- Recursive copy of out-of-stream variables
- Out-of-stream variable assigned to full stream record
- Full stream record assigned to an out-of-stream variable
Example recursive copy of out-of-stream variables:
mlr --opprint --from data/small put -q ' @v["sum"] += $x; @v["count"] += 1; end{ dump; @w = @v; dump } '
{ "v": { "sum": 2.26476, "count": 5 } } { "v": { "sum": 2.26476, "count": 5 }, "w": { "sum": 2.26476, "count": 5 } }
Example of out-of-stream variable assigned to full stream record, where the 2nd record is stashed, and the 4th record is overwritten with that:
mlr put 'NR == 2 {@keep = $*}; NR == 4 {$* = @keep}' data/small
a=pan,b=pan,i=1,x=0.346791,y=0.726802 a=eks,b=pan,i=2,x=0.758679,y=0.522151 a=wye,b=wye,i=3,x=0.204603,y=0.338318 a=eks,b=pan,i=2,x=0.758679,y=0.522151 a=wye,b=pan,i=5,x=0.573288,y=0.863624
Example of full stream record assigned to an out-of-stream variable, finding the record for which the x
field has the largest value in the input stream:
cat data/small
a=pan,b=pan,i=1,x=0.346791,y=0.726802 a=eks,b=pan,i=2,x=0.758679,y=0.522151 a=wye,b=wye,i=3,x=0.204603,y=0.338318 a=eks,b=wye,i=4,x=0.381399,y=0.134188 a=wye,b=pan,i=5,x=0.573288,y=0.863624
mlr --opprint put -q ' is_null(@xmax) || $x > @xmax {@xmax = $x; @recmax = $*}; end {emit @recmax} ' data/small
a b i x y eks pan 2 0.758679 0.522151
Keywords for filter and put¶
mlr help list-keywords # you can also use mlr -k
all begin bool break call continue do dump edump elif else emit1 emit emitf emitp end eprint eprintn false filter float for func funct if in int map num print printn return stderr stdout str subr tee true unset var while ENV FILENAME FILENUM FNR IFS IPS IRS M_E M_PI NF NR OFS OPS ORS
mlr help usage-keywords # you can also use mlr -K
all: used in "emit1", "emit", "emitp", and "unset" as a synonym for @* begin: defines a block of statements to be executed before input records are ingested. The body statements must be wrapped in curly braces. Example: 'begin { @count = 0 }' bool: declares a boolean local variable in the current curly-braced scope. Type-checking happens at assignment: 'bool b = 1' is an error. break: causes execution to continue after the body of the current for/while/do-while loop. call: used for invoking a user-defined subroutine. Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' continue: causes execution to skip the remaining statements in the body of the current for/while/do-while loop. For-loop increments are still applied. do: with "while", introduces a do-while loop. The body statements must be wrapped in curly braces. dump: prints all currently defined out-of-stream variables immediately to stdout as JSON. With >, >>, or |, the data do not go directly to stdout but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump }' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump > "mytap.dat"}' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump >> "mytap.dat"}' Example: mlr --from f.dat put -q '@v[NR]=$*; end { dump | "jq .[]"}' edump: prints all currently defined out-of-stream variables immediately to stderr as JSON. Example: mlr --from f.dat put -q '@v[NR]=$*; end { edump }' elif: the way Miller spells "else if". The body statements must be wrapped in curly braces. else: terminates an if/elif/elif chain. The body statements must be wrapped in curly braces. emit1: inserts an out-of-stream variable into the output record stream. Unlike the other map variants, side-by-sides, indexing, and redirection are not supported, but you can emit any map-valued expression. Example: mlr --from f.dat put 'emit1 $*' Example: mlr --from f.dat put 'emit1 mapsum({"id": NR}, $*)' Please see https://miller.readthedocs.io://johnkerl.org/miller/doc for more information. emit: inserts an out-of-stream variable into the output record stream. Hashmap indices present in the data but not slotted by emit arguments are not output. With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, $*' Example: mlr --from f.dat put 'emit > "/tmp/data-".$a, mapexcept($*, "a")' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums' Example: mlr --from f.dat put --ojson '@sums[$a][$b]+=$x; emit > "tap-".$a.$b.".dat", @sums' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @sums, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit >> "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "gzip > mytap.dat.gz", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit > stderr, @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emit | "grep somepattern", @*, "index1", "index2"' Please see https://miller.readthedocs.io://johnkerl.org/miller/doc for more information. emitf: inserts non-indexed out-of-stream variable(s) side-by-side into the output record stream. With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a' Example: mlr --from f.dat put --oxtab '@a=$i;@b+=$x;@c+=$y; emitf > "tap-".$i.".dat", @a' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > "mytap.dat", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf >> "mytap.dat", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf > stderr, @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern", @a, @b, @c' Example: mlr --from f.dat put '@a=$i;@b+=$x;@c+=$y; emitf | "grep somepattern > mytap.dat", @a, @b, @c' Please see https://miller.readthedocs.io://johnkerl.org/miller/doc for more information. emitp: inserts an out-of-stream variable into the output record stream. Hashmap indices present in the data but not slotted by emitp arguments are output concatenated with ":". With >, >>, or |, the data do not become part of the output record stream but are instead redirected. The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output if the output is redirected. See also mlr -h. Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums' Example: mlr --from f.dat put --opprint '@sums[$a][$b]+=$x; emitp > "tap-".$a.$b.".dat", @sums' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @sums, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp >> "mytap.dat", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "gzip > mytap.dat.gz", @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp > stderr, @*, "index1", "index2"' Example: mlr --from f.dat put '@sums[$a][$b]+=$x; emitp | "grep somepattern", @*, "index1", "index2"' Please see https://miller.readthedocs.io://johnkerl.org/miller/doc for more information. end: defines a block of statements to be executed after input records are ingested. The body statements must be wrapped in curly braces. Example: 'end { emit @count }' Example: 'end { eprint "Final count is " . @count }' eprint: prints expression immediately to stderr. Example: mlr --from f.dat put -q 'eprint "The sum of x and y is ".($x+$y)' Example: mlr --from f.dat put -q 'for (k, v in $*) { eprint k . " => " . v }' Example: mlr --from f.dat put '(NR % 1000 == 0) { eprint "Checkpoint ".NR}' eprintn: prints expression immediately to stderr, without trailing newline. Example: mlr --from f.dat put -q 'eprintn "The sum of x and y is ".($x+$y); eprint ""' false: the boolean literal value. filter: includes/excludes the record in the output record stream. Example: mlr --from f.dat put 'filter (NR == 2 || $x > 5.4)' Instead of put with 'filter false' you can simply use put -q. The following uses the input record to accumulate data but only prints the running sum without printing the input record: Example: mlr --from f.dat put -q '@running_sum += $x * $y; emit @running_sum' float: declares a floating-point local variable in the current curly-braced scope. Type-checking happens at assignment: 'float x = 0' is an error. for: defines a for-loop using one of three styles. The body statements must be wrapped in curly braces. For-loop over stream record: Example: 'for (k, v in $*) { ... }' For-loop over out-of-stream variables: Example: 'for (k, v in @counts) { ... }' Example: 'for ((k1, k2), v in @counts) { ... }' Example: 'for ((k1, k2, k3), v in @*) { ... }' C-style for-loop: Example: 'for (var i = 0, var b = 1; i < 10; i += 1, b *= 2) { ... }' func: used for defining a user-defined function. Example: 'func f(a,b) { return sqrt(a**2+b**2)} $d = f($x, $y)' funct: used for saying that a function argument is a user-defined function. Example: 'func g(num a, num b, funct f) :num { return f(a**2+b**2) }' if: starts an if/elif/elif chain. The body statements must be wrapped in curly braces. in: used in for-loops over stream records or out-of-stream variables. int: declares an integer local variable in the current curly-braced scope. Type-checking happens at assignment: 'int x = 0.0' is an error. map: declares an map-valued local variable in the current curly-braced scope. Type-checking happens at assignment: 'map b = 0' is an error. map b = {} is always OK. map b = a is OK or not depending on whether a is a map. num: declares an int/float local variable in the current curly-braced scope. Type-checking happens at assignment: 'num b = true' is an error. print: prints expression immediately to stdout. Example: mlr --from f.dat put -q 'print "The sum of x and y is ".($x+$y)' Example: mlr --from f.dat put -q 'for (k, v in $*) { print k . " => " . v }' Example: mlr --from f.dat put '(NR % 1000 == 0) { print > stderr, "Checkpoint ".NR}' printn: prints expression immediately to stdout, without trailing newline. Example: mlr --from f.dat put -q 'printn "."; end { print "" }' return: specifies the return value from a user-defined function. Omitted return statements (including via if-branches) result in an absent-null return value, which in turns results in a skipped assignment to an LHS. stderr: Used for tee, emit, emitf, emitp, print, and dump in place of filename to print to standard error. stdout: Used for tee, emit, emitf, emitp, print, and dump in place of filename to print to standard output. str: declares a string local variable in the current curly-braced scope. Type-checking happens at assignment. subr: used for defining a subroutine. Example: 'subr s(k,v) { print k . " is " . v} call s("a", $a)' tee: prints the current record to specified file. This is an immediate print to the specified file (except for pprint format which of course waits until the end of the input stream to format all output). The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output. See also mlr -h. emit with redirect and tee with redirect are identical, except tee can only output $*. Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' Example: mlr --from f.dat put 'tee > stderr, $*' Example: mlr --from f.dat put -q 'tee | "tr \[a-z\\] \[A-Z\\]", $*' Example: mlr --from f.dat put -q 'tee | "tr \[a-z\\] \[A-Z\\] > /tmp/data-".$a, $*' Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' true: the boolean literal value. unset: clears field(s) from the current record, or an out-of-stream or local variable. Example: mlr --from f.dat put 'unset $x' Example: mlr --from f.dat put 'unset $*' Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' Example: mlr --from f.dat put '...; unset @sums' Example: mlr --from f.dat put '...; unset @sums["green"]' Example: mlr --from f.dat put '...; unset @*' var: declares an untyped local variable in the current curly-braced scope. Examples: 'var a=1', 'var xyz=""' while: introduces a while loop, or with "do", introduces a do-while loop. The body statements must be wrapped in curly braces. ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' FILENAME: evaluates to the name of the current file being processed. FILENUM: evaluates to the number of the current file being processed, starting with 1. FNR: evaluates to the number of the current record within the current file being processed, starting with 1. Resets at the start of each file. IFS: evaluates to the input field separator from the command line. IPS: evaluates to the input pair separator from the command line. IRS: evaluates to the input record separator from the command line, or to LF or CRLF from the input data if in autodetect mode (which is the default). M_E: the mathematical constant e. M_PI: the mathematical constant pi. NF: evaluates to the number of fields in the current record. NR: evaluates to the number of the current record over all files being processed, starting with 1. Does not reset at the start of each file. OFS: evaluates to the output field separator from the command line. OPS: evaluates to the output pair separator from the command line. ORS: evaluates to the output record separator from the command line, or to LF or CRLF from the input data if in autodetect mode (which is the default).


Jorn Hoofwijk 4396499
Visvalingam-Whyatt algorithm
Adaptive sampling suitable for finding Fermi surfaces


Tel:003912345789
<EMAIL_ADDRESS>Sign up now to our newsletter and you'll be one of the first to know when the site is ready:


Settings for Numberfy
Number format:
1
1.
#1
What should be numerized:
Playlists
Albums
Own song collection
Save settings
Refresh the page, to apply the settings.


Application templates are simple Ruby files containing DSL for adding gems/initializers etc. to your freshly created Rails project or an existing Rails project.
After reading this guide, you will know:
To apply a template, you need to provide the Rails generator with the location of the template you wish to apply using the -m option. This can either be a path to a file or a URL.
$ rails new blog -m ~/template.rb $ rails new blog -m http://example.com/template.rb
You can use the rake task rails:template
to apply templates to an existing Rails application. The location of the template needs to be passed in to an environment variable named LOCATION. Again, this can either be path to a file or a URL.
$ rake rails:template LOCATION=~/template.rb $ rake rails:template LOCATION=http://example.com/template.rb
The Rails templates API is easy to understand. Here’s an example of a typical Rails template:
# template.rb generate(:scaffold, "person name:string") route "root to: 'people#index'" rake("db:migrate") git :init git add: "." git commit: %Q{ -m 'Initial commit' }
The following sections outline the primary methods provided by the API:
Adds a gem
entry for the supplied gem to the generated application’s Gemfile
.
For example, if your application depends on the gems bj
and nokogiri
:
gem "bj" gem "nokogiri"
Please note that this will NOT install the gems for you and you will have to run bundle install
to do that.
bundle install
Wraps gem entries inside a group.
For example, if you want to load rspec-rails
only in the development
and test
groups:
gem_group :development, :test do gem "rspec-rails" end
Adds the given source to the generated application’s Gemfile
.
For example, if you need to source a gem from “http://code.whytheluckystiff.net”:
add_source "http://code.whytheluckystiff.net"
Adds a line inside the Application
class for config/application.rb
.
If options[:env]
is specified, the line is appended to the corresponding file in config/environments
.
environment 'config.action_mailer.default_url_options = {host: 'http://yourwebsite.example.com'}, env: 'production'
A block can be used in place of the data
argument.
Adds an initializer to the generated application’s config/initializers
directory.
Let’s say you like using Object#not_nil?
and Object#not_blank?
:
initializer 'bloatlol.rb', <<-CODE class Object def not_nil? !nil? end def not_blank? !blank? end end CODE
Similarly, lib()
creates a file in the lib/
directory and vendor()
creates a file in the vendor/
directory.
There is even file()
, which accepts a relative path from Rails.root
and creates all the directories/files needed:
file 'app/components/foo.rb', <<-CODE class Foo end CODE
That’ll create the app/components
directory and put foo.rb
in there.
Creates a new rake file under lib/tasks
with the supplied tasks:
rakefile("bootstrap.rake") do <<-TASK namespace :boot do task :strap do puts "i like boots!" end end TASK end
The above creates lib/tasks/bootstrap.rake
with a boot:strap
rake task.
Runs the supplied rails generator with given arguments.
generate(:scaffold, "person", "name:string", "address:text", "age:number")
Executes an arbitrary command. Just like the backticks. Let’s say you want to remove the README.rdoc
file:
run "rm README.rdoc"
Runs the supplied rake tasks in the Rails application. Let’s say you want to migrate the database:
rake "db:migrate"
You can also run rake tasks with a different Rails environment:
rake "db:migrate", env: 'production'
Adds a routing entry to the config/routes.rb
file. In the steps above, we generated a person scaffold and also removed README.rdoc
. Now, to make PeopleController#index
the default page for the application:
route "root to: 'person#index'"
Enables you to run a command from the given directory. For example, if you have a copy of edge rails that you wish to symlink from your new apps, you can do this:
inside('vendor') do run "ln -s ~/commit-rails/rails rails" end
ask()
gives you a chance to get some feedback from the user and use it in your templates. Let’s say you want your user to name the new shiny library you’re adding:
lib_name = ask("What do you want to call the shiny library ?") lib_name << ".rb" unless lib_name.index(".rb") lib lib_name, <<-CODE class Shiny end CODE
These methods let you ask questions from templates and decide the flow based on the user’s answer. Let’s say you want to freeze rails only if the user wants to:
rake("rails:freeze:gems") if yes?("Freeze rails gems?") # no?(question) acts just the opposite.
Rails templates let you run any git command:
git :init git add: "." git commit: "-a -m 'Initial commit'"


--- layout: post title: Speaker Series « Maker Faire Vancouver published: true ---
1:00 PM – Vincent Van Haaff
Talk Synopsis
Vincent will be discussing what music, video/installation art, hackspaces, and the maker movement all have in common. He will explore the parallels between connecting ‘software libraries & hardware’ and connecting ‘people and communities’ and how these points can benefit and accelerate every piece involved. He will also offer examples of how tribes can help you progress your field of multi-media work in both utilizing other fields and by offering to help for others that want to grow as well.
Speaker’s Bio
Vincent van Haaff (flyingoctopus.net) is a multi-disciplinary multi-media artist working with computer code to explore virtual spaces defined by rule-based systems. Originally from Southern California, he went from a record label co-founder and audio hacker in Los Angeles to a rock climbing/chard-growing hippie in Santa Barbara before moving to Vancouver to become a video game software developer and media artist. His expertise spans from data and music visualization to computer vision and user centred design.
Come see me talk at The Vancouver Mini Maker Faire Gen Why Speaker Series Saturday @ 1pm. I'll give you my wisdom, a monome demo, and a hug!
Here's the full lineup.


Helicopter crashes during Australia bushfire operation, pilot survives
SYDNEY, Nov 13 — A helicopter crashed while fighting a bushfire in northern Australia today and the pilot managed to survive with only minor injuries, officials said.
“The helicopter crashed during waterbombing operations at the Pechey fire today,” a Queensland Fire and Emergency Service spokesperson told AFP.
A rescue helicopter was sent to the scene and the pilot was treated for minor injuries, a Queensland Ambulance Service spokesman told AFP.
“We transported one male with non-life-threatening injuries to Toowoomba Hospital,” the spokesman said.
The pilot is now in a stable condition.
The bushfire at Pechey, north of Toowoomba, was sparked yesterday and is "getting worse," according to the fire service.
Firefighters on the ground have been battling the blaze with support from aerial waterbombers.
Queensland is on high alert amid severe fire conditions, with a forecast wind change expected to worsen several large blazes in difficult-to-access areas of the state.
About 70 fires are burning in the state, with Pechey residents told the safest option is to leave the area as conditions are currently too dangerous.
Dozens of fires are also ablaze in neighbouring New South Wales state, where cooler southerly winds have eased conditions and brought relief to firefighters and residents.
Difficult conditions were expected to flare again at the weekend as the temperature rises and winds pick up. — AFP


rename_patternedit
This setting is only used by the restore action.
from the Elasticsearch documentation
The rename_pattern and rename_replacement options can be also used to rename indices on restore using regular expression that supports referencing the original text as explained here.
actions: 1: action: restore description: >- Restore all indices in the most recent snapshot with state SUCCESS. Wait for the restore to complete before continuing. Do not skip the repository filesystem access check. Use the other options to define the index/shard settings for the restore. options: repository: # If name is blank, the most recent snapshot by age will be selected name: # If indices is blank, all indices in the snapshot will be restored indices: rename_pattern: 'index(.+)' rename_replacement: 'restored_index$1' wait_for_completion: True max_wait: 3600 wait_interval: 10 filters: - filtertype: state state: SUCCESS exclude: - filtertype: ...
In this configuration, Elasticsearch will capture whatever appears after index
and put it after restored_index
. For example, if I was restoring
index-2017.03.01
, the resulting index would be renamed to
restored_index-2017.03.01
.
Read more about this setting at http://www.elastic.co/guide/en/elasticsearch/reference/7.10/snapshots-restore-snapshot.html
There is no default value.


[gecode-users] Gecode 2.0.0 released
Guido Tack
tack at ps.uni-sb.de
Thu Nov 15 15:58:06 CET 2007
We would like to announce the release of
Gecode 2.0.0
http://www.gecode.org
As witnessed by the version number change, this is a major release
with too many changes, fixes, and additions to mention them all:
please consult the changelog at
http://www.gecode.org/gecode-doc-latest/PageChanges_2_0_0.html
The highlights are:
* New propagators: channeling between Integer variable and array of
Boolean variables, circuit, table constraint (extensional),
incremental
regular constraint (extensional), incremental Boolean linear
constraints
* Boolean variables have a dedicated implementation: twice as fast,
half the memory
* Advisors for incremental propagation (see: Lagerkvist, Schulte,
Advisors for Incremental Propagation, CP 2007)
* Many crucial performance and scalability improvements: memory
management, memory footprint of propagators
* Many cleanups and more documentation, many new examples
* New set variables with complete domain representation (CpltSetVar)
[experimental]
* A reflection API to query spaces about their propagators
[experimental]
The features marked as experimental are all functional, but might be
revised in the next releases. Source packages and access to our
subversion repository is available immediately. Binary packages for
several platforms as well as a release of Gecode/J will follow soon.
Cheers,
The Gecode Team
More information about the gecode-users
mailing list


VSL // Dark Glam Opera
* From bullet holes and burning flames to decadent embroidery, the Bohemian Society
today’s Very Short List:
culture 7 Jan 2015
Timur is a lead singer of Timur and the Dime Museum
Subscribe
* The Brookledge Follies
* Critic and curator Shana Nys Dambrot
http://link.nyobserver.com/516ca68465217dc6e1b9a3a625dr9.2574/TvnrKi0WTdwTHwxwC512d
delightful e-mail that shares
cultural gems from a
different curator every day.
If you have any problems reading this e-mail, click here
http://link.nyobserver.com/516ca68465217dc6e1b9a3a625dr9.2574/UHyHCJsf7NZSKXrPCa4e1
Subscribe
Forward
My Account
Unsubscribe
tech 5 Jan 2015
Rubie Simonsen on millennials and the age of activism.
culture 3 Jan 2015
A few short films to enjoy this Saturday morning, selected by Joey Horvitz.
culture 31 Dec 2014
Ciara Pressler makes a game plan for life.
Editorial Policy
Privacy Policy
Contact Us
Press
Terms + Conditions
very fine print: ©2015
Observer VSL LLC.
321 West 44th Street, 6th Floor
New York, NY 10036 USA
All rights reserved.
Questions?<PHONE_NUMBER>.
This message was intended for<EMAIL_ADDRESS>If you believe this has been sent to you in error, please safely unsubscribe


DEUCE BIGALOW: MALE GIGOLO A film review by Steve Rhodes Copyright 1999 Steve Rhodes RATING (0 TO ****): *
Bob Bigalow (Richard Riehle) is a tuxedoed member of the restaurant business, but he's neither a waiter nor a maitre d'. He's a bathroom attendant whose duties include cleaning up really awful toilet messes.
On Bob's birthday, his son, Deuce (Rob Schneider) comes to visit with his new girlfriend, Kate (Arija Bareikis), and they bring a birthday cake for him. The lovebirds bring him the cake right into the stall, where he is unstopping a badly clogged toilet.  Granted, this is the low point of DEUCE BIGALOW: MALE GIGOLO, but the rest of the crude story isn't much better.
The setup has Deuce, a fish tank cleaner by profession, babysitting a sick fish at the apartment of a rich and successful male gigolo, Antoine Laconte (Oded Fehr). Antoine, a collector of ancient weaponry, has given Deuce strict orders to make sure his expensively furnished apartment isn't harmed in the 3 weeks that he's off to Europe. Needless to say, Deuce will shortly destroy the place in a fit of bad slapstick antics.
In order to make the money to restore the apartment, Deuce takes a job as a "male-whore" for Antoine's "man-pimp." (The lame script by Harris Goldberg and Rob Schneider has other, earthier names as well.)
The movie's idea of comedy is to force Deuce to cope with the problems of women with a wide variety of handicaps and unusual physical characteristics. From a 600 pound women like Jabba Lady (Big Boy) to women who cuss uncontrollably like Ruth (Amy Poehler), the women are made to look almost like members of a circus freak show. There's even an 8-foot tall woman, whose face is never shown, but to whom strangers call out insults as she walks with Deuce. Funny, huh? You're not laughing? Neither was I.
Did I mention the detective, played by William Forsythe, who has an obsession with showing Deuce his private parts in public in order to get advice? And did I mention that this scene is repeated a half-dozen times?
So, was it ever funny? I think I laughed once, but, for the life of me, I can't remember why.
DEUCE BIGALOW: MALE GIGOLO runs 1:30.
Email<EMAIL_ADDRESS>Web: http://www.InternetReviews.com
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


Fantastic Meditation Resort
Navigation
Homepage
Accommodations
Activities
Travel Arrangements
Pictures
Contact
Pics
Meditation
Silent Water Slides


Classes and interfaces
sfCacheException¶
sfCacheException is thrown when ConfigCache fails to execute properly.
« More »
sfCommandArgumentsException¶
sfCommandException is thrown when an error occurs in a task.
« More »
sfCommandException¶
sfCommandException is thrown when an error occurs in a task.
« More »
sfConfigurationException¶
sfConfigurationException is thrown when the framework finds an error in a
configuration setting.
« More »
sfControllerException¶
sfControllerException is thrown when a requested Controller implementation
doesn't exist.
« More »
sfDatabaseException¶
sfDatabaseException is thrown when a database related error occurs.
« More »
sfError404Exception¶
sfError404Exception is thrown when a 404 error occurs in an action.
« More »
sfException¶
sfException is the base class for all symfony related exceptions and
provides an additional method for printing up a detailed view of an
exception.
« More »
sfFactoryException¶
sfFactoryException is thrown when an error occurs while attempting to create
a new factory implementation instance.
« More »
sfFileException¶
sfFileException is thrown when an error occurs while moving an uploaded file.
« More »
sfFilterException¶
sfFilterException is thrown when an error occurs while attempting to initialize
or execute a filter.
« More »
sfForwardException¶
sfForwardException is thrown when an error occurs while attempting to forward
the request.
« More »
sfInitializationException¶
sfInitializationException is thrown when an initialization procedure fails.
« More »
sfParseException¶
sfParseException is thrown when a parsing procedure fails to complete
successfully.
« More »
sfRenderException¶
sfRenderException is thrown when a view's pre-render check fails.
« More »
sfSecurityException¶
sfSecurityException is thrown when a security related error occurs.
« More »
sfStopException¶
sfStopException is thrown when you want to stop action flow.
« More »
sfStorageException¶
sfStorageException is thrown when a requested sfStorage implementation doesn't
exist or data cannot be read from or written to the storage.
« More »
sfViewException¶
sfViewException is thrown when an error occurs in a view.
« More »


question_info['question_detail']); ?>
question_info['question_detail'])), 0, 70, 'UTF-8', '...'); ?>
question_info['attachs']) { ?>
question_info['attachs'] AS $key => $attach) { ?>
question_info['attachs_ids'])) { ?>
question_info['attachs']) { ?>
question_info['attachs'] AS $attach) { ?>
question_info['attachs_ids'])) { ?>
-
question_info['lock'] AND ($this->question_info['published_uid'] == $this->user_id OR $this->user_info['permission']['edit_question'])) OR $this->user_info['permission']['is_administortar'] OR $this->user_info['permission']['is_moderator']) { ?>


Create an Account
Email address
Email is required.
Password
please enter a password.
Grade Level
Choose your option
6
7
8
9
10
11
12
please select your grade level.
Create Account
please check that all fields are filled out correctly.


Please select your language
Selectt a country here...
...and the selected country code will be updated here
Submit


Iím in my house, in my room. My friend Anthony sits beside me. He has just finished his trip, and wants to do it again right away.  Itís a nice sunny day.  Iím nervous. I notice my hands are already sweaty.
I light the lighter, and dip it into the bowl. As I inhale, I see the leaves catch fire, and I feel the smoke enter my lungs. I inhale slowly, so as not to cough, and take in as much smoke as I can. I have finished roughly half the bowl in one hit. I give the pipe to Anthony so I wonít drop it. I hold the smoke in as long as possible, for about 20-25 seconds. Almost out of breath, I donít feel high enough, so I go to take the pipe back from my friend. He is smoking it, wanting to get high again. I shake my head at him, and point to the pipe. He gives it back. I exhale my first hit. I light the lighter again and just as I finish taking another hit, I go.
There is an image of my cast and the outside of my house, or possibly my bed. The image is coming towards me. Behind the first image is a second image, exactly the same as the first.  Over, and over and over again, the image comes towards me, in a seemingly infinite LOOP. I donít know who I am. My life is the loop, and all I know or have ever known is the loop. I see the side of my house, and decide that Iím supposed to be a house. But I canít be that house, because the image of the house keeps moving, but never stopping on what it is.
I know I want to stop, and be who Iím supposed to be. I try to stop the loop, but I canít. I notice that there is something on the left that will help me stop; to get out. If only I can move there, I will be out. But I canít get out. If I try to move left, the loop follows me. I strain to remember who I am. I canít, all I know is that the house is me, and if I get back to it, I will be safe. I strain left again. This time I see the grey of my friend. But I donít think heís my friend. He is the guardian of the loop. I know he wonít let me out. I settle back into the loop.
Itís really starting to scare me; I donít like how repetitive it is. I try once more again to get out. This time, I move over, and up. Iím standing, and out of the loop! It seemed as though I had been in there my whole life; that all my life had been was the loop. But now I was finally out!
However, when I stood up, it seemed as if the floor behind me was tilting down, and the floor in front of me was tilting up, as though the floor was straining to curl over me, swallow me and take me back into the loop. Then the grey guardian stands up. Iím afraid he is going to take me back. I walk out of my room, and walk up the hill that the floor was creating to swallow me again. I walk as far as I can in my house, to get away from the tilt, and to make sure I really was back to normality, and not still in the loop. I quickly walk all around the house, looking for any signs of the loop. I canít see any.
My friend is following me, saying my name. Iíve come to accept heís not going to bring me back to the loop. But who is he? What is this reality? I canít remember it. I just want to do something normal, get out of the craziness. But my friend wants to do salvia again. This scares me. I think that if he does salvia again, I will go back into the crazy trip again. I say no. I try to remember something normal to do. I want to eat. But then Iíd have to feed my friend. This also scares me. So I pull out SSBM, and we start to play. Heís much better than me, so immediately I donít want to play anymore, but I want normal, so I endure. After about 10 minutes of playing, and thinking about my life while playing, I can remember who I am, and who my friend is that Iím playing with, and what the real world is.
I start asking questions about my trip. I can remember most of what happened after I stood up, and the time involved. But I want to know what I was like whilst I was in the loop. He tells me that about 5 seconds after I took the pipe from him, I stood up. I was astounded. In that time, I had taken a second toke (which I donít remember exhaling) and had been trapped in a loop for what had seemed like forever. That loop was the peak of my high, and it had lasted approximately 5 seconds, with the confusion and aftermath of that trip lasting approximately 10 minutes.
I am highly grateful the peak did not last longer than 5 seconds, because I felt like I was going insane. I am also slightly surprised it lasted no longer, because I had just taken a second toke, and the usual length for a trip is about 3-5 minutes. I really do not feel like going back to the realm of Salvia. It is a very surreal and scary world.
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.


+
Home
Media
Guests and Events
JoMoCon 2021 Program
About the Team
Vendors and Volunteers
Contact Us
Archived Posts
JoMoCon Resources
YouTube
Twitch
Instagram
FaceBook


Shraey Bhatia
The University of Melbourne.
During winter I look something like this
Hi.. Hola.. Servus.. Bonjour.. and Namaste..
I am a PhD student at the Compuatational Lingustics and Natural Language processing (NLP) group at the University of Melbourne under the supervision of Prof Timothy Baldwin and Dr. Jey Han Lau. I am currently working on understanding the different stylistics aspects in a language and style transfer in text using Deep Learning architectures. Additionally from time to time, I also work with different models around Topic Models. Previously, during my masters at the University of Melbourne I worked with Evaluation and Labelling of Topic Models.
Other than working with NLP and Deep Learning, I am really passionate about the health of our planet, climate change, sustainability, recycling and reducing the use of plastic and cleaning up our oceans. It is high time we start playing our part both at an individual level and also collectively to make governments take constructive steps towards combating climate change.
My CV can be found here and some of important publications on publications page
I am always open to new ideas, debates, opinions and queries. Feel free to get in touch.
My email address is my first name followed by my last name at gmail.com (all lowercase).