Hi, my name's Tommy Hodgins. I’m a trained graphic designer, and I've been building websites for over a decade. Let me put the skills and expertise I've learned to work for you!
I specialize in responsive web design, and most of my work is focused around taking websites that already exist and making them work better responsively to work as well on tablets and smartphones as they do on desktop.
You may know me from my experiments with EQCSS and Element Queries, or from my demos on CodePen. I also research new responsive design ideas and I also make videos, write blog posts, and write plugins to help people use the techniques I find.
How I Can Help You?
If you have a website that makes money for your business, imagine what boosting your conversion by a few percent could do for you in the long term. In the past, I've been able to raise conversion rates by as much as 10%, and have also helped clients recover money they were losing, simply by applying a few easy-to-implement design tweaks to their existing sites that allowed their designs to adapt better to tablets and phones.
What You Get:
- A video screen capture of me reviewing your website
- A list of action steps you can take to improve your website
- Plugin, tool, & workflow recommendations
- Responsive technique examples to help your site
Frequently Asked Questions
How much does a consultation cost?
The rate is $100 for a video review of one website, plus the other deliverables listed above: list of action steps, software recommendations, and responsive technique demonstrations.
If you have other consultation needs that don't fit the list above, contact me directly to see how I can help you.
How long does it take?
Once you have booked your consultation, I will contact you with an estimate of how long it will take to complete the review and deliverables. I will ask about which parts of your site you would like me to focus on, and you will have an opportunity to share any further details with me before the review process begins.
What do I do after my consultation?
The site review I create for you will be communicated in plain language to make sure that you understand what can be improved. The technical recommendations and code samples will be presented in a way that developers will be able to clearly understand.
Once you have the review, recommendations, and any sample code, you may be able to implement the changes yourself. If not, you are welcome to hire me, or any other web developer, to help make these changes for you.


LogQL 学习笔记
Arithmetic operators
- + (addition)
- - (subtraction)
- * (multiplication)
- / (division)
- % (modulo)
- ^ (power/exponentiation)
Logical and set operators
- and (intersection)
- or (union)
- unless (complement)
Comparison operators
- == (equality)
- != (inequality)
- > (greater than)
- >= (greater than or equal to)
- < (less than)
- <= (less than or equal to)
Log queries
All LogQL queries contain a log stream selector. Optionally, the log stream selector can be followed by a log pipeline.
example:
{container="query-frontend",namespace="loki-dev"} |= "metrics.go" | logfmt | duration > 10s and throughput_mb < 500
Log Stream Selector
label matching operator:
- =: exactly equal
- !=: not equal
- =~: regex matches
- !~: regex does not match
{app="mysql",name="mysql-backup"}
Log pipeline
Log pipeline expressions fall into one of three categories:
- Filtering expressions: line filter expressions and label filter expressions
- Parsing expressions
- Formatting expressions: line format expressions and label format expressions
Line filter expression
- |=: Log line contains string
- !=: Log line does not contain string
- |~: Log line contains a match to the regular expression
- !~: Log line does not contain a match to the regular expression
{job="mysql"} |= "error" != "timeout"
Parser expression
JSON
For instance, the pipeline | json will produce the following mapping:
{ "a.b": {c: "d"}, e: "f" }
->
{a_b_c="d", e="f"}
- without parameters | json:
Note: Arrays are skipped. - with parameters | json label=”expression”, another=”expression”
https://grafana.svc.monitoring.gke.mintelcloud.io/goto/wOXzVl57z
logfmt
For example the following log line:
at=info method=GET path=/ host=grafana.net fwd="<IP_ADDRESS>" service=8ms status=200
will get those labels extracted:
"at" => "info"
"method" => "GET"
"path" => "/"
"host" => "grafana.net"
"fwd" => "<IP_ADDRESS>"
"service" => "8ms"
"status" => "200"
Pattern
Consider this NGINX log line.
<IP_ADDRESS> - - [10/Jun/2021:09:14:29 +0000] "GET /api/plugins/versioncheck HTTP/1.1" 200 2 "-" "Go-http-client/2.0" "<IP_ADDRESS>, <IP_ADDRESS>" "TLSv1.2" "US" ""
This log line can be parsed with the expression
<ip> - - <> “<method> <uri> <>” <status> <size> <> “<agent>” <>
to extract these fields:
"ip" => "<IP_ADDRESS>"
"method" => "GET"
"uri" => "/api/plugins/versioncheck"
"status" => "200"
"size" => "2"
"agent" => "Go-http-client/2.0"
Regular expression
For example the parser | regexp "(?P<method>\\w+) (?P<path>[\\w|/]+) \\((?P<status>\\d+?)\\) (?P<duration>.*)"
will extract from the following line:
POST /api/prom/api/v1/query_range (200) 1.5s
those labels:
"method" => "POST"
"path" => "/api/prom/api/v1/query_range"
"status" => "200"
"duration" => "1.5s"
Label filter expression
A predicate contains a label identifier, an operation and a value to compare the label with.
cluster="namespace"
Support multiple value types which are automatically inferred from the query input.
- String is double quoted or backticked such as “200” or
us-central1
. - Duration is a sequence of decimal numbers, each with optional fraction and a unit suffix, such as “300ms”, “1.5h” or “2h45m”. Valid time units are “ns”, “us” (or “µs”), “ms”, “s”, “m”, “h”.
- Number are floating-point number (64bits), such as250, 89.923.
- Bytes is a sequence of decimal numbers, each with optional fraction and a unit suffix, such as “42MB”, “1.5Kib” or “20b”. Valid bytes units are “b”, “kib”, “kb”, “mib”, “mb”, “gib”, “gb”, “tib”, “tb”, “pib”, “pb”, “eib”, “eb”.
Using Duration, Number and Bytes will convert the label value prior to comparision and support the following comparators:
- == or = for equality.
- != for inequality.
- > and >= for greater than and greater than or equal.
- < and <= for lesser than and lesser than or equal.
logfmt | duration > 1m and bytes_consumed > 20MB
Line format expression
The line format expression can rewrite the log line content by using the text/template format. It takes a single string parameter | line_format "{ {.label_name} }"
, which is the template format. All labels are injected variables into the template and are available to use with the {{.label_name}} notation.
example:
If we have the following labels ip=<IP_ADDRESS>
, status=200
and duration=3000(ms)
, we can divide the duration by 1000 to get the value in seconds.
{container="frontend"} | logfmt | line_format "{ {.ip} } { {.status} } { {div .duration 1000} }"
Labels format expression
The | label_format
expression can rename, modify or add labels. It takes as parameter a comma separated list of equality operations, enabling multiple operations at once.
Note:
The renaming form dst=src will drop the src label after remapping it to the dst label. However, the template form will preserve the referenced labels, such that dst=”{{.src}}” results in both dst and src having the same value.
Examples:
Multiple filtering
{cluster="ops-tools1", namespace="loki-dev", job="loki-dev/query-frontend"} |= "metrics.go" !="out of order" | logfmt | duration > 30s or status_code!="200"
Multiple parsers
level=debug ts=2020-10-02T10:10:42.092268913Z caller=logging.go:66 traceID=a9d4d8a928d8db1 msg="POST /api/prom/api/v1/query_range (200) 1.5s"
{job="cortex-ops/query-frontend"} | logfmt | line_format "{ {.msg} }" | regexp "(?P<method>\\w+) (?P<path>[\\w|/]+) \\((?P<status>\\d+?)\\) (?P<duration>.*)"


The file named intercity-transit_20140107_0555/
was not expected.
This may be a misspelled file name or the file may be included in a subdirectory. Please check spellings and make sure that there are no subdirectories within the feed
in intercity-transit_20140107_0555/
The file named intercity-transit_20140107_0555/agency.txt
was not expected.
This may be a misspelled file name or the file may be included in a subdirectory. Please check spellings and make sure that there are no subdirectories within the feed
in intercity-transit_20140107_0555/agency.txt
The file named __MACOSX/
was not expected.
This may be a misspelled file name or the file may be included in a subdirectory. Please check spellings and make sure that there are no subdirectories within the feed
in __MACOSX/
The file named __MACOSX/intercity-transit_20140107_0555/
was not expected.
This may be a misspelled file name or the file may be included in a subdirectory. Please check spellings and make sure that there are no subdirectories within the feed
in __MACOSX/intercity-transit_20140107_0555/
The file named __MACOSX/intercity-transit_20140107_0555/._agency.txt
was not expected.
This may be a misspelled file name or the file may be included in a subdirectory. Please check spellings and make sure that there are no subdirectories within the feed
in __MACOSX/intercity-transit_20140107_0555/._agency.txt
- and 15 more of this type.


After months of speculation and teasers, the Nothing Ear 1 is finally official. Priced at Rs. 5,999 in India, the Nothing Ear 1 looks impressive.
Detailed information
So first we will talk about its specifictions:
It is true wireless earphone(TWS) with a very nice charrging port of USB type-C,
the battery life of this ear phone is without case is 5.7 hrs,and battery life with case total is 34hrs,
the battery capacty of this icreadible earphone is 31 mAh , and when the point comes to the battery capacity
of the case total then the it holds about 570mAh battry which is ver nice in itself.
The price of this earphone in india is kind of good price point,
because it has got bluetooth version 5.2 which is the latest version of bluetooth.
It has got water resistant=IPX4,
and the most important thing is that it is very light weight , and very easily fits in to the ear ,
and also it is very comfortable to were and never falls from the ear .
So according to the specifcations the price range is very good.
All specifications in a short list:-
Nothing ear(1):
=> Ear phone = TWS (truly wireless stereo)
=> Charging port = Type-C
=> Battery life of the ear piece only = 5.7hrs
=> Battery life with case total = 34hrs
=> Battery capacity of the ear piece = 31mAh
=> Battery life with case total = 570mAh
=> Price = 5999 rupees
=> Release date = July 2021
=> Model number = ear(1)
=> Microphone = Yes
=> Charging port = Type-C
=> Driver type = Dynamic
=> Number of drivers = 1
=> Driver size = 1.6mm
=> Water resistant = IPX4
=> Weight = 4.70g
=> Weight with case = 57.4g
=> Bluetooth = 5.2(latest version)
=> Blutooth codec = SBC , AAC


Pip Plus
You can install the query update here to uninstall your installation package, or you can back up and generate the corresponding package.
Package Name
Version(option)
| name | version | latest_version | option |
|---|
| name | version | latest_version | option |
|---|
...
...


How to configure the optional Advanced Column Options for look-up columns for a form or list in the Form and List module. This tutorial assumes you are currently adding or editing a Look-Up column. See
Tip: In the below example, the Look-Up column is set to display the size of the file selected in the Brochure column.
Setting the Advanced Options for a Look-Up column
The Look-Up Column displayed in a List


Culture Blog
How I Feel About Embarking On This Journey
June 12, 2015
I am so incredibly excited to start my journey of becoming a software engineer. I absolutely love the Dev Bootcamp learning culture and cohesiveness of treating each student as a whole person, as demonstrated through the engineering empathy curriculum. I am nervous about learning so much content so quickly and being able to keep pace with my cohort, but I'm also enthused and ready to be challenged.
I have spent my last two years working for Teach For America as a high school chemistry teacher in South Central Los Angeles. Throughout this time I have faced a lot of backlash against the Teach For America organization from critics. During this time, I have learned and embodied that TFA is not a separate entity from the individuals who serve as teachers. I feel like Dev Bootcamp has startlingly similar characteristics. Dev Bootcamp would not exist without its students, and any criticism of the program is criticism of the people who are learning and developing as engineers. I love this mindset and can't wait to continue to have pride in my work.


Windows PowerToys
Microsoft are making use of their purchase of Github to host the source for their ongoing work in to Powertoys.
PowerToys is a collection of applications that perform a range of different tasks that users may need to undertake regularly. There’s an Image Resizer that hooks in to the right click menu, there’s fancy zones, which expands upon Windows snap, by adding zones to snap to.
However, the big draw for me is PowerToys Run. This is essentially a Windows version of Spotlight or Alfred.
Launchy
For a number of years, I’ve used Launchy on Windows. It’s my Alfred replacement and I use it to launch programs when using Windows. It searches the Programs Files, looks for the .exe files and brings them up.
It can also search any files and locations that you tell it to and it has some plugins built in - so I can also use it to search and launch web addresses from my Firefox bookmarks.
However, one of it’s main uses for me is it’s calculator function!
A quick calculation is only an Alt+Space away. Once Launchy had done it’s job, a quick enter will copy the results to clipboard, ready for pasting elsewhere. I use this a lot.
It has worked well to date but is beginning to show it’s age. It doesn’t pick up UWP programs (apps downloaded from the Windows Store). It might do if the correct folder was pointed at to index, but there are some hoops to jump through to enable that, thanks to Windows locking it down. I’m also finding issues with high DPI screens and having to sort out the program to run on that 1.
PowerToys Run
This is where I thought PowerToys Run would come in. It’s a more modern version of Launchy.
I wasn’t to fussed about the other PowerToys. After all, I have a couple of scripts for resizing images based on Imagemagick. These perform other actions as well as resizing, which PowerToys wouldn’t, such as adding borders or merging images together.
For me, the big draw is PowerToys Run, so this was the one that I set up to use. This is essentially Alfred for Windows. Initial inspections were good - the software picked up the items that I wanted to, it even included the UWP apps.
I was able to replicate all the functionality of Launchy that I needed to use, so it seemed like it would replace it on all my own devices (however, due to PowerToys requiring admin permissions to install, it means that I can’t use it on machines that I don’t have admin rights - i.e. my work PC!)
However, the calculator, probably one of my most used features of Launchy/Alfred has issues on PowerToys. When performing a calculation, the results will show a long string of decimal places.
This seems to be a known issue with the calculator function and therefore to me, means that the software is next to useless. If I can’t determine when I’ll actually get a correct answer, I can’t make use of the software. Likewise, if I have to edit the numbers to make use of them, it’s not really the quick calculator I need and I might as well use the inbuilt Windows one!
Conclusion
Unfortunately, for now, I’ll have to stick with Launchy, as the PowerToys release doesn’t seem to be capable of meeting my needs, so I’ll keep an eye on the project, and look to see if the issue gets fixed in the future - I hope so, as it looks like a promising software.
-
That’s one area where macOS seems to be far ahead of Windows and Linux in it’s support of high DPI screens, as I don’t think I’ve ever had scaling issues with it. ↩


Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome, Safari or Firefox browser.
Shapes
Rituel.
Symbole.
Pour tout le monde.
Intuitif.
Casse-tête.
Agilité.
Vitesse.
Échec.
Perfection.
Étienne Pipart
Tanguy Herrmann
Christophe Scholly
Use a spacebar or arrow keys to navigate


The 'void paladin' stage allows Wan De to lay assault to opponents by harnessing the power of the void element. Speed and strength attributes are enhanced due to the rapidly switching energy orbs fusing with Wan's soul. Darkness fills all his targets' hearts, particularly effective against photomancers. Once he accumulates more than 20000 points worth of rage, he can transform to the 'hell guard' stage. A scythe is required for the transformation.
Element : voidmancy
Stage type : intermediate


Documenting Scripts¶
Click makes it very easy to document your command line tools. First of all, it automatically generates help pages for you. While these are currently not customizable in terms of their layout, all of the text can be changed.
Help Texts¶
Commands and options accept help arguments. In the case of commands, the docstring of the function is automatically used if provided.
Simple example:
@click.command()
@click.option('--count', default=1, help='number of greetings')
@click.argument('name')
def hello(count, name):
"""This script prints hello NAME COUNT times."""
for x in range(count):
click.echo('Hello %s!' % name)
And what it looks like:
$ hello --help
Usage: hello [OPTIONS] NAME
This script prints hello NAME COUNT times.
Options:
--count INTEGER number of greetings
--help Show this message and exit.
Arguments cannot be documented this way. This is to follow the general convention of Unix tools of using arguments for only the most necessary things and to document them in the introduction text by referring to them by name.
Preventing Rewrapping¶
The default behavior of Click is to rewrap text based on the width of the terminal. In some circumstances, this can become a problem. The main issue is when showing code examples, where newlines are significant.
Rewrapping can be disabled on a per-paragraph basis by adding a line with
solely the \b
escape marker in it. This line will be removed from the
help text and rewrapping will be disabled.
Example:
@click.command()
def cli():
"""First paragraph.
This is a very long second paragraph and as you
can see wrapped very early in the source text
but will be rewrapped to the terminal width in
the final output.
\b
This is
a paragraph
without rewrapping.
And this is a paragraph
that will be rewrapped again.
"""
And what it looks like:
$ cli --help
Usage: cli [OPTIONS]
First paragraph.
This is a very long second paragraph and as you can see wrapped very early
in the source text but will be rewrapped to the terminal width in the
final output.
This is
a paragraph
without rewrapping.
And this is a paragraph that will be rewrapped again.
Options:
--help Show this message and exit.
Meta Variables¶
Options and parameters accept a metavar
argument that can change the
meta variable in the help page. The default version is the parameter name
in uppercase with underscores, but can be annotated differently if
desired. This can be customized at all levels:
@click.command(options_metavar='<options>')
@click.option('--count', default=1, help='number of greetings',
metavar='<int>')
@click.argument('name', metavar='<name>')
def hello(count, name):
"""This script prints hello <name> <int> times."""
for x in range(count):
click.echo('Hello %s!' % name)
Example:
$ hello --help
Usage: hello <options> <name>
This script prints hello <name> <int> times.
Options:
--count <int> number of greetings
--help Show this message and exit.
Command Short Help¶
For commands, a short help snippet is generated. By default, it’s the first sentence of the help message of the command, unless it’s too long. This can also be overridden:
@click.group()
def cli():
"""A simple command line tool."""
@cli.command('init', short_help='init the repo')
def init():
"""Initializes the repository."""
@cli.command('delete', short_help='delete the repo')
def delete():
"""Deletes the repository."""
And what it looks like:
$ repo.py
Usage: repo.py [OPTIONS] COMMAND [ARGS]...
A simple command line tool.
Options:
--help Show this message and exit.
Commands:
delete delete the repo
init init the repo
Help Parameter Customization¶
New in version 2.0.
The help parameter is implemented in Click in a very special manner.
Unlike regular parameters it’s automatically added by Click for any
command and it performs automatic conflict resolution. By default it’s
called --help
, but this can be changed. If a command itself implements
a parameter with the same name, the default help parameter stops accepting
it. There is a context setting that can be used to override the names of
the help parameters called help_option_names
.
This example changes the default parameters to -h
and --help
instead of just --help
:
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
@click.command(context_settings=CONTEXT_SETTINGS)
def cli():
pass
And what it looks like:
$ cli -h
Usage: cli [OPTIONS]
Options:
-h, --help Show this message and exit.


 Hailed by some as a god, respected by others for your wisdom, you were born—or perhaps created—on the Crucible, a world in which anything is possible.
The Crucible is ancient, but ever renewed. An artificial planet hanging in the center of the universe, the Crucible’s many layers remain constantly under construction by the enigmatic and mischievous Architects. For raw materials, the Architects have harvested countless worlds, blending them into a new whole both familiar and alien to the creatures that dwell there.
Whether lone specimens or entire cultures, the beings brought to the Crucible find themselves in a strange wonderland with no obvious means of returning to their former homes. Some thrive, building new societies and developing new technologies with the aid of the mysterious psychic substance known as Æmber. Some discard the trappings of their old lives, adopting the ways and customs of new tribes discovered in this new world. Others devolve, bodies and minds twisted beyond all recognition, incorporating Æmber into their very bodies.
As an Archon, you have gathered followers in your journeys throughout the Crucible, allies who find value in your ageless wisdom and your ability to speak to all creatures.  Each Vault can only be unlocked by Æmber-forged keys. Once open, a Vault’s contents—the power and knowledge of the Architects—can be consumed by only a single Archon. When two Archons discover a Vault, only one can gain its knowledge. Only one can move one step closer to the secret of the Crucible…
KeyForge is a two-player card game in which each player takes the role of an Archon, and leads that Archon’s deck against their opponent.
A player’s deck represents a team that is attempting to gain Æmber and forge keys. The first player to gather three keys is able to unlock a Vault and win the game.
The defining feature of KeyForge is that no two decks are alike. This is not a trading card game—you cannot craft a deck. Rather, each deck must remain as it is. Every deck in existence is unique!
If you have never played a game of KeyForge before, start by using the Quickstart document included in the starter set to learn the basics of the game.
After playing a game using the Quickstart, players can read the full rules in this document and learn more about the KeyForge setting.
In addition to rules and setting information, this document includes a Glossary of important game concepts and terminology that will be useful while interpreting card abilities.
This section introduces a number of foundational concepts to keep in mind while playing the game.
If the text of a card directly contradicts the text of the rules, the text of the card takes precedence.
During the game, players use their cards to collect Æmber. Players use Æmber to forge keys. The game ends immediately when a player forges their third key, and that player wins the game.
Cards that are in play exist in one of two states. Ready cards are oriented upright so that their text may be read from left to right. A ready card can be used during a player’s turn, causing it to exhaust. Exhausted cards are rotated 90 degrees to the side. An exhausted card is not able to be used until it is readied by a game step or card ability. All creatures and artifacts enter play exhausted.
OR STATUS CARDS There is no limit to the number of damage tokens, Æmber tokens, or status cards that can be in the game area at a given time. If there is a shortage of the provided tokens or status cards, other tokens, counters, or coins may be used to track the game state.
To set up the game, perform the following steps, in order: 1 Place all damage tokens, Æmber tokens, and status cards in a common supply within easy reach of both players. 2 Each player places their identity card to the left or right side of their play area. 3 Each player places three key tokens, one of each color, with the unforged side faceup near their identity card. 4 Randomly determine who is the first player. That player takes the first turn when the game begins. (If players are playing a series of games between two decks, in each game after the first, the player who used the deck that was defeated in the previous game chooses who is the first player.) 5 Each player shuffles their deck and offers it to the opponent for additional shuffling and/or a final cut. 6 The first player draws a starting hand of seven cards. The other player draws a starting hand of six cards. 7 Each player, starting with the first player, has one opportunity to mulligan their starting hand by shuffling it back into their deck and drawing a new starting hand with one fewer card in it. (This step is skipped in the Quickstart game.) The game is now ready to begin.
The game is played over a series of turns. Players alternate taking turns until one player wins the game. Each turn consists of five steps: 1 Forge a key. 2 Choose a house. 3 Play, discard, and use cards of the chosen house. 4 Ready cards. 5 Draw cards. The player taking a turn is referred to as the active player. The active player is the only player that can perform actions or make decisions; a player does not make any decisions when it is not their turn. Each step is described in the following sections.
If the active player has enough Æmber to forge a key during this step, they must do so. To forge a key, the active player spends Æmber from the Æmber pool on their identity card, returning it to the common supply. Then, that player flips any one of their key tokens over to its forged side, indicating that the key has been forged. The default cost to forge a key is six Æmber. Some card abilities may increase or decrease this number. No more than one key can be forged during this step each turn, even if the active player has enough Æmber to forge multiple keys.
Each KeyForge deck is composed of three different houses, which are shown on the identity card. During this step, the active player chooses one of those three houses to activate, making it the active house for the remainder of the turn. This active house determines which cards the active player can play, discard from their hand, and use this turn. After choosing a house, the active player has the option to take all cards in their archives and add them to their hand. (See “Archives” in the Glossary.) If a player controls a card that does not belong to one of the three houses in their deck, they may (if they desire) choose and activate that house during this step instead of one of the three houses in their deck.
OF THE CHOSEN HOUSE The active player may play or discard any number of cards of the active house from their hand and may use any number of cards of the active house that are in play under their control. Eligible cards may be played, used, or discarded in any order. A card’s house is determined by an icon in the upper-left corner. If the active house corresponds to a card’s icon, that card is eligible to be played, used, or discarded. Rules for playing, discarding, and using cards are described later. First Turn Rule: During the first player’s first turn of the game, that player cannot play or discard more than one card from their hand. Card effects cannot modify this rule. The active player may not play, use, or discard cards of other (nonactive) houses unless specified by a card ability
The active player readies each of their exhausted cards.
The active player draws cards from the top of their deck until they have six cards in their hand. After a player completes this step, their turn ends. If the active player has more than six cards in hand, they do not discard down to six. If a player needs to draw cards (during this step or at any other time) and cannot because their deck is empty, that player shuffles their discard pile to reset their deck, and then continues to draw. When a player’s turn ends, if that player has enough Æmber in their pool to afford a key, the player announces “Check!” so that their opponent knows the forging of a key at the start of that player’s next turn is imminent.
The active player is permitted to play any number of cards that belong to the active house during step three of their turn. ÆMBER BONUS Many cards in the game have an Æmber bonus below the house icon. When a card with an Æmber bonus is played, the first thing the active player does is gain that much Æmber. Each time a player gains Æmber (for any reason), the Æmber is placed in that player’s Æmber pool (on their identity card).
Some cards have a bold “Play:” ability. Such abilities resolve after the card’s Æmber bonus is collected, if it has any, and immediately after the card enters play.
There are four types of cards in the game: action cards, artifacts, creatures, and upgrades. There are different rules describing how each card type is played.
When an action card is played, the active player resolves the card’s “Play:” ability and, after resolving as much of the ability as possible, places the card in their discard pile.
Artifacts enter play exhausted and are placed in a row in front of the player but behind that player’s battleline, which is explained on the next page. Artifacts remain in play from turn to turn.
Creatures enter play exhausted and are placed in the front row of the active player’s play area. This row is referred to as the battleline. Creatures remain in play from turn to turn, and they each have power and armor values that they use to resolve fights, which are described later.
Each time a creature enters play, it must be placed on a flank—at the far left or the far right of its controller’s battleline. Each time a creature leaves play, shift the battleline inward to close the gap.
Upgrades enter play attached to (i.e., partially overlapped by) a creature chosen by the player who controls the upgrade. Each upgrade remains in play from turn to turn and modifies the card to which it is attached. If the card to which an upgrade is attached leaves play, the upgrade is discarded. If an upgrade cannot attach to a card in play, the upgrade cannot enter play.
The active player can discard from their hand any number of cards from the active house during step three of their turn. Cards are discarded one at a time, at any point throughout this step. This lets players remove cards that they do not want to play from their hand, freeing up space to draw more cards at the end of the turn.
The active player can use any number of cards from the active house that they have in play during step three of their turn. Depending on a card’s type, the active player is able to do different things when using that card.
An upgrade modifies the creature it is attached to and is not used independently of that creature.
There are two types of abilities that enable a player to use an artifact: “Action:” abilities and “Omni:” abilities. When a player uses an artifact, they exhaust the card and then resolve its abilities. A player can only resolve an “Action:” ability if it is on a card that belongs to the active house. A player can resolve an “Omni:” ability even if it is on a card that does not belong to the active house. Some artifacts require that they be sacrificed as part of the cost of using them. When an artifact is sacrificed, it is placed in its owner’s discard pile. A player must still exhaust such an artifact when using it. Artifacts cannot be used to reap or to fight.
When a player uses a creature, that player must exhaust the creature, and the player has the option to reap, fight, or to trigger the creature’s “Action:” ability.
Any ready creature of the active house may reap. When a creature is used to reap, its controller gains 1 Æmber for their Æmber pool. Then, all “Reap:” abilities the creature has, if it has any, resolve.
Any ready creature of the active house may fight. When a creature is used to fight, its controller chooses one eligible creature controlled by the opponent as the target of the attack. Each of the two creatures deals an amount of damage equal to its power (the value to the left of the card’s title) to the other creature. All of this damage is dealt simultaneously. After the fight resolves, if the creature that is being used to fight survives, all “Fight:” abilities the creature has, if it has any, resolve. A creature cannot fight if there is no enemy creature that can be chosen as the target of the attack.
Any ready creature of the active house may trigger its “Action:” ability, if it has one. When a creature is used to trigger its “Action:” ability, the creature exhausts and all “Action:” abilities the creature has resolve.
When a creature is dealt damage, place an amount of damage tokens equal to the amount of damage dealt on the creature. If a creature has as much or more damage on it as it has power, the creature is destroyed and placed on top of its owner’s discard pile. If a creature has an armor value (to the right of the card’s title), the armor prevents that much incoming damage each turn. (For more details, see “Armor” in the Glossary.) When a creature leaves play, any Æmber on that creature is gained by the opponent. (See “Capture” in the Glossary.)
When resolving a card ability, resolve as much of the ability as can be resolved, and ignore the rest. Unless otherwise specified by the ability, the active player makes all decisions while resolving an ability. For details on specific terminology that can be found in card ability text, see the Glossary.
If a card ability allows a player to play or use another card (or to fight or to reap with a card), the chosen card may belong to any house unless the ability specifically states otherwise. When using a card via a card ability, any other requirements of using the card (such as exhausting to reap, fight, or resolve its “Action:” ability) must be observed, or the card cannot be used. Players can only use cards they control, unless a card ability specifically states otherwise.
Occasionally, a situation may emerge in which, through a combination of abilities, the same card may be played or used repeatedly during the same turn. A player cannot play and/or use the same card and/or other copies of that card (by title) more than six times during a given turn.
If a card has an ability that does not have a boldfaced precursor, the ability is a constant ability that is active so long as the card remains in play and meets all conditions specified by the ability. Constant abilities on a card are active even while that card is exhausted. Applying the effects of a constant ability is not considered using a card and therefore does not cause the card to exhaust.
Chains represent supernatural bindings that are occasionally placed onto specific Archons by the Architects: sometimes in an effort to better challenge the Archon to grow and overcome greater adversity, and other times to penalize the Archon for breaking a rule or a piece of Crucible etiquette. A player may gain chains through card abilities during a game. When a player gains chains, that player increases their chain tracker by the number of chains gained. Each time (including during setup) a player with one or more chains would draw one or more cards to refill their hand, that player draws fewer cards (based on their current chain level, see below) and then sheds one chain by reducing their chain tracker by one. The more chains a player has, the greater the card penalty becomes. Chains 1–6: draw 1 fewer card. Chains 7–12: draw 2 fewer cards. Chains 13–18: draw 3 fewer cards. Chains 19–24: draw 4 fewer cards. Example: Tori has been assigned seven chains. During setup, Tori will draw two fewer cards and shed a chain. Then, the next six times Tori refills her hand, she will draw up to five cards and shed another chain. After all of her chains have been shed, Tori will draw to the standard hand size.
When playing a game between a weaker deck and a stronger deck, players may use chains as a means to handicap the stronger deck. Chains are used when players want a fair game between two known decks rather than a potentially unfair competition between decks that aren’t known. When playing with new decks, or competing in a tournament, players will not use this handicap.
When the players have a sense that a particular deck is stronger than the opposing deck, start it with four chains. From then on, every time the chained deck wins three games in a row against that opposing deck, adjust the number of chains up by one, and if it loses three games in a row, adjust the number of chains down by one. As a player plays more games with their collection, the number of chains assigned to a deck will fluctuate up and down based on the matchup and how well the deck has performed against the opposing deck.
If players are reasonably familiar with two decks they can ignore the suggested number of chains, and instead bid a number of chains for the right to use a particular deck. Example: Terry and Julie decide to play Mother Mahospot against Chancellor Fisher. Mother Mahospot is a deck that both players are very familiar with, feel is quite strong, and enjoy playing. Chancellor Fisher is a newer deck, that the players are not as comfortable playing. The above guidelines suggest they begin with four chains on Mother Mahospot. Julie looks at Fisher, considers a moment, and says, “I’ll play Mother Mahospot at five.” Terry raises to six. Julie goes to seven. Terry decides to let her play it at seven, and plays Chancellor Fisher.
You are now familiar with the basic rules of the game. The next section of this book contains a Glossary of advanced concepts that can be referenced while playing or interpreting card abilities. An introduction to the KeyForge setting, with two short stories and an introduction to each of the houses in the game, can be found on page 13.
This Glossary includes a number of concepts and terms players may encounter while playing the game, in alphabetical order. Instead of reading this section from beginning to end, players are encouraged to only look up new concepts as they are encountered during play.
An ability is the special game text a card contributes to the game. Unless an ability explicitly references an out-of-play area (such as a hand, deck, archives, or discard pile), that ability can only interact with cards that are in play.
To use an “Action:” ability during their turn, the active player must exhaust the card. The ability then resolves.
The active house is the house that the active player has chosen for the current turn.
The active player is the player taking the current turn. The active player makes all necessary decisions for all card abilities or timing conflicts that need to resolve during their turn. ÆMBER Æmber is tracked by Æmber tokens, and is used to forge keys. See also: Capture, Keys, Reap, Steal.
 Card abilities are the only means by which a player is permitted to add cards to their archives. During step 2 of a player’s turn, after they select an active house, the active player is permitted to pick up all cards in their archives and add those cards to their hand. Cards in a player’s archives are considered out of play. A player may look at their archives at any time. A player is not permitted to look at an opponent’s archives. If the ability instructing a player to archive a card does not specify where the card is archived from, the archived card comes from that player’s hand.
Some creatures have an armor value to the right of the card title. Armor prevents an amount of damage equal to the armor value that the creature would take each turn. For example, if a creature has two armor and is dealt one damage, that damage is absorbed by the armor, leaving the creature with one armor for the rest of the turn. If the creature is later dealt three more damage during that turn, one damage is absorbed and the other two damage are dealt to that creature. If a creature gains armor, the gains are additive and accumulate on top of the creature’s printed armor value. If a creature gains armor during a turn, the gained armor does not absorb damage already dealt that turn. If a creature loses armor during a turn, it is not retroactively dealt damage that was already absorbed by the armor. If a creature has a “~” symbol in its armor field, the creature has no armor. Such creatures may gain armor through card effects.
When a creature with the assault (X) keyword attacks, it deals damage equal to its assault value (i.e., “X”) to the creature it is fighting before the fight resolves. (The active player chooses whether this occurs before or after other “Before Fight” effects and keywords.) If this damage destroys the other creature, the rest of the fight does not occur. If a creature with the assault (X) keyword gains another instance of the assault (X) keyword, the two X values are added together.
See “Fight” on page 10.
The battleline is the ordered line of creatures a player controls in play. See “Creatures” on page 6.
If the word “before” is used in an ability (for example, “Before Reap:” or “Before Fight:”), that ability resolves before resolving the game effect of the reap or fight (but after the card exhausts, if exhausting is required to use the card).
Captured Æmber is taken from an opponent’s Æmber pool and placed on a creature controlled by the capturing player. Players may not spend captured Æmber. When a creature with Æmber on it leaves play, the Æmber is placed in the opponent’s Æmber pool. Unless otherwise specified, Æmber is placed on the creature that captured it.
Some card abilities cause a player to gain one or more chains. If a player gains chains, that player increases their chain tracker by the number of chains gained. If a player has at least one chain when refilling their hand and would draw cards based on the number of remaining cards in their hand, they draw fewer cards according to the chart below. Then, they shed one chain by reducing the number on their chain tracker by one. Chains 1-6: draw one fewer card. Chains 7-12: draw two fewer cards. Chains 13-18: draw three fewer cards. Chains 19-24: draw four fewer cards. See ”Chains” on page 8.
A player owns the cards that begin the game in their deck. When a card enters play, it is under its owner’s control. A player can take control of an opponent’s card. When this happens, that card is placed in the new controller’s play area. If it is a creature, it is placed on a flank of the new controller’s battleline. If a player takes control of a card that belongs to a house not in the new controller’s deck, they can make that house the active house during step 2 of their turn. If a card that has changed control leaves play for any reason, it moves to its owner’s appropriate out-of-play zone.
The base cost to forge a key is six Æmber. This cost may be modified by card abilities. The modified cost is referred to as the current cost.
Damage a creature has taken is tracked by placing damage tokens on the creature. If a creature has an amount of damage on it equal to or greater than its power, the creature is destroyed. Damage on a creature does not reduce its power. For more details on damage and combat, see page 7.
When a card is destroyed, it is placed in its owner’s discard pile. If a card has a “Destroyed:” ability, the effect resolves automatically when the card is destroyed, immediately before it leaves play.
When a card is destroyed or discarded, it is placed on top of its owner’s discard pile. The cards in each player’s discard pile are open information, and may be referenced at any time. The order of cards in a player’s discard pile is maintained during play, unless a card ability causes this order to change. When a player runs out of cards in their deck and are required to draw, they shuffle their discard pile to create a new deck.
The first time a creature with the elusive keyword is attacked each turn, it is dealt no damage and deals no damage to the attacker in the fight. Elusive only stops damage that would be dealt by each creature’s power; damage dealt by keywords or other abilities still applies.
End of turn effects are resolved when a player’s turn is over—after step 5, the “Draw Cards” step.
If a card ability refers to an “enemy” game element, it refers to an element currently controlled by the opponent.
When a player uses a creature to fight, the player exhausts the creature and chooses an opponent’s creature. Both creatures deal an amount of damage equal to their power value to the opposing creature in the fight, and both are “fighting” for the purposes of card effects. A creature used to fight is said to be “attacking” and can be referred to as “the attacker” during that fight. If the attacker is not destroyed, all “Fight:” abilities on the attacking creature then resolve. If either creature in a fight has a constant ability referencing the end of the fight (example: “after an enemy creature is destroyed fighting this creature…”), the creature must survive the fight to resolve the ability. Only the attacker can trigger “Fight:” abilities. “FIGHT WITH” If an ability instructs a player to “fight with” or “ready and fight with” a creature, the ability is granting the player permission to use the designated creature to fight. The fight is resolved following the standard rules for fighting, against a creature controlled by the opponent.
The creatures on the far right and far left of a player’s battleline are on the flanks of the line. A creature in this position is referred to as a flank creature. Any time a creature enters play or changes control, the active player chooses which flank of its controller’s battleine it is placed on.
For details on forging keys, see page 4.
If a card ability refers to a “friendly” game element, it refers to an element currently under the control of the same player.
When a creature with the hazardous X keyword is attacked, it deals X damage to the attacking creature before the fight resolves. (The active player chooses whether this occurs before or after other “Before Fight” effects and keywords.) If this damage destroys the other creature, the rest of the fight does not occur. If a creature with the hazardous (X) keyword gains another instance of the hazardous (X) keyword, the two X values are added together.
If an ability “heals” a creature, remove the specified amount of damage from the creature. If an ability “fully heals” a creature, remove all damage from the creature.
Each turn, a player must choose one of the three houses indicated by their identity card, if able. Some card abilities may restrict a player’s house choice. If a player has gained control of a card that does not belong to one of their three houses, that card’s house becomes an eligible choice for that player while the player retains control of the card. If there is no legal choice of house, the player plays the turn with no active house. If a player is faced with two (or more) “must choose” mandates, the player may choose either of those options. “IF YOU DO” AND “IN ORDER TO” If an ability includes the phrase “if you do” or “in order to,” the player referenced by the ability must successfully and completely resolve the text that precedes that phrase before they can resolve or perform the text that follows that phrase. In other words, if the first part of the ability is not successfully and completely resolved, that which follows the phrase does not resolve or cannot be performed.
The first player to forge all three of their keys immediately wins the game. The color of a key has no impact on the game. Future card abilities may reference keys of a specific color. For details on forging keys, see page 4.
A reference to the “least powerful” creature refers to the creature in play with the lowest power. If there are multiple creatures that qualify, each is considered “least powerful.” If an ability requires the selection of a single least powerful creature, and multiple creatures are tied, the active player chooses one.
If a card that is in play leaves play (is returned to hand or deck, destroyed, discarded, archived, or purged), all non-Æmber tokens and status cards on the card are removed, all upgrades on the card are discarded, and all lasting effects applied to the card expire. If a creature with Æmber on it leaves play, the Æmber is placed in the opponent’s Æmber pool. If a non-creature card with Æmber on it leaves play, the Æmber is returned to the general token pool. If a card has a “Leaves Play:” ability, the effect happens automatically immediately before the card leaves play.
This symbol indicates that a card is a maverick. A maverick is an extremely rare instance of a card that has left its standard house and is now a part of a new house. For all game purposes, treat a maverick as belonging to the house printed on its graphic template.
If an ability includes the word “may,” the text that follows “may” is optional. If a player chooses to resolve a “may” ability, the player must resolve as much of the ability as they are able.
A reference to the “most powerful” creature refers to the creature in play with the highest power. If there are multiple creatures that qualify, each is considered “most powerful.” If an ability requires the selection of a single most powerful creature, and multiple creatures are tied, the active player chooses among the tied creatures.
During setup, each player, starting with the first player, has one opportunity to mulligan their starting hand. This is done by shuffling the starting hand back into the deck and drawing a new starting hand with one fewer card in it. After a player chooses to mulligan, that player must keep the new starting hand.
The creatures to the immediate left and right of a creature in a player’s battleline are its neighbors.
The active player may trigger any ”Omni:“ abilities under their control during any of their turns, even if the card with the ”Omni:“ ability does not belong to the active house.
An off house card is any card that belongs to a house that is not the active house.
When a creature is involved in a fight (either because it was used to fight, or because it was attacked by another creature), the other creature in the fight is the opposing creature.
If a player must pay Æmber to an opponent, the Æmber is removed from the paying player’s pool and added to the opponent’s pool.
When a card has a “Play:” ability, the effect occurs any time the card is played. For creatures, artifacts, and upgrades, the ability resolves immediately after the card enters play. For action cards, the ability resolves, and then the card is placed in its owner’s discard pile. If an ability “plays” a card from a source other than hand, “Play:” abilities on the card resolve. If an ability “puts” a card “into play,” “Play:” abilities on the card do not resolve.
Any damage dealt via the power of a creature with the poison keyword during a fight destroys the damaged creature. This occurs when the damage is successfully applied to the opposing creature. Poison has no effect if all of the damage is absorbed by armor or prevented by another ability—poison only resolves when one or more damage is successfully dealt. Poison refers only to damage that would be dealt by the creature’s power, not by damage that is dealt by keywords or other card abilities.
When a creature is given a “+1 power counter,” one such status card is placed on the creature. For each of these cards that is on a creature, that creature’s power is increased by one.
If card text instructs players to repeat a preceding effect, the entirety of the effect before the text providing the instruction to repeat resolves again. Note: Repeating an effect does not interact with the Rule of Six (see page 7), as the Rule of Six only applies to playing or using cards, not triggering their effect multiple times.
When a card is purged, it is removed from the game and placed facedown beneath its owner’s identity card. Purged cards no longer interact with the game state in any manner.
A card’s rarity symbol can be found at the bottom of the card, near the collector number. A card’s rarity (common, uncommon, rare, or special) is used by the deck-generation algorithm to determine how frequently it will appear in decks. Special cards have a different type of distribution and do not obey the game’s standard rarity rules.
When a player uses a creature to reap, the player exhausts the creature, gains 1 Æmber for their Æmber pool, and then all “Reap:” abilities on the creature resolve.
If card text instructs players to repeat an effect, the entirety of the effect resolves again including the text to repeat the effect. If the card that is creating a repeating effect is removed from play, the effect can no longer repeat. Note: Repeating an effect does not interact with the Rule of Six (see page 7,) as the Rule of Six only applies to playing or using cards, not triggering their effect multiple times. See also “Preceding.”
When captured Æmber is returned, it is placed in the opponent’s Æmber pool.
When a player is instructed to sacrifice a card, that player must discard that card from play. When a card is sacrificed, that card is considered to have been destroyed, and any “Destroyed:” abilities the card has resolve.
When a player searches a game area (such as a deck), that player looks at all the cards in the specified area without showing those cards to the opponent. A player may choose to fail to find the object of a search. If an entire deck is searched, the deck must be adequately shuffled upon completion of the search. If a discard pile is searched, the cards are kept in the same order.
If a card’s ability refers to its own title, that reference is only to itself and not to other copies of the card.
When a creature with the skirmish keyword is used to fight, it takes no damage from the opposing creature when the damage from the fight is dealt. This applies only to damage that would be dealt by the opposing creature’s power, not by damage that is dealt by keywords or other card abilities.
When an ability deals damage to a creature “with splash damage,” the splash damage is dealt to each of the target creature’s neighbors.
When an ability steals Æmber, the stolen Æmber is removed from the opponent’s Æmber pool and added to the Æmber pool of the player resolving the steal ability. If an ability steals more Æmber than a player has remaining in their pool, the ability steals only the amount remaining in the pool.
When a creature becomes stunned, place a stun status card on it. The next time the creature is used, the only thing that happens is the creature exhausts and the stun card is removed. It does not reap or fight, and any “Reap:,” “Fight:,” or “Action:” abilities on the creature do not resolve. Constant abilities and abilities that do not require the creature to reap, fight, or be used are still active. If a stunned creature is attacked, it still deals damage to the attacking creature during the fight. While a creature is stunned, it cannot become stunned again.
If two game elements are swapped, they exchange places with one another. When two creatures are swapped, they exchange positions. This means that each takes the position in the battleline of the other. The two creatures swapped must always be controlled by the same player. If cards from two distinct game areas are swapped (such as a card in play and a card in hand), the cards switch game areas.
If a creature has the taunt keyword, any of its neighbors that do not have the taunt keyword cannot be attacked by an enemy creature that is being used to fight. In the battleline, taunt creatures are slid slightly forward to indicate their presence to the opponent. “THIS WAY” If an ability refers to an effect that occurred “this way,” it is referring to an effect that was produced by the same resolution of that same ability.
A turn consists of one player performing the five steps detailed in the game’s turn sequence, which are: 1 Forge a key. 2 Choose a house. 3 Play, discard, and use cards of the chosen house. 4 Ready cards. 5 Draw cards.
Traits are descriptive attributes (such as “Knight” or “Specter”) that may be referenced by other cards. Traits are listed at the top center of a card’s text box. Traits have no inherent game effect, but may be referenced by card abilities.
If a previously forged key is “unforged,” flip the key token to its unforged side. The key no longer counts toward its controller’s victory condition and must be forged again to win the game.
See “Using Cards” on page 6.
This section provides answers to a number of common questions that are asked about the game. These questions are presented in a “Question and Answer” format, with the newest questions at the end.
My opponent has 14 Æmber in their pool and I have 0 in mine. At the start of my turn I select Shadows as the active house and play the card Bait and Switch (CoTA 267). How many times does Bait and Switch trigger?
In this situation, Bait and Switch’s effect will be triggered 7 times. Each time the effect is triggered it will check if your opponent still has more Æmber than you, and if they do it will trigger again. So after the first time the effect triggers you will have 1 Æmber and your opponent will have 13, the second time you will have 2 Æmber and your opponent will have 12, then 3 and 11, 4 and 10, 5 and 9, 6 and 8, then finally 7 and
Note: Repeating an effect does not interact with the Rule of Six (see page 7), as the Rule of Six only applies to playing or using cards, not triggering their effect multiple times.
Its the first turn of the game and I am going first. I choose house Logos to be the active house and play the card Phase Shift (CoTA 117). Does this allow me to play another card this turn even though the First Turn Rule (see page 5) is in effect?
Playing Phase Shift will not allow you to play any more cards from your hand this turn, since the First Turn Rule cannot be modified by card effects.
Its the first turn of the game and I am going first. I choose house Logos to be the active house and play the card Wild Wormhole (CoTA 125). Can Wild Wormhole’s effect be resolved even though the First Turn Rule (see page 5) is in effect?
Wild Wormhole’s effect can be resolved. The First Turn Rule specifies that players cannot play or discard more than one card from their hand. However it does not prohibit cards from being played or discarded from other game areas, such as your deck.
I have 2 chains and 7 cards in hand when moving to my draw cards step. Will I shed a chain during this step?
No, you will not shed a chain during this draw cards step. Chains are only shed when a player would draw cards during the draw step and the chains prevent them from doing so (see “Chains” on Page 8). Since you already have 7 cards in your hand, you aren’t going to be drawing any cards, and thus don’t lose any of your chains.
I have 2 chains and 5 cards in hand when moving to my draw cards step. Will I shed a chain during this step?
Yes, you will shed a chain during this step. Chains are only shed when a player would draw cards during the draw step and the chains prevent them from doing so (see “Chains” on Page 8). You only have 5 cards in hand, and normally you would draw a card to refill your hand. However because of the chains you are prevented from drawing that card. Since you would normally have drawn the card and the chain prevented it, you then shed 1 chain.
I have a creature that has the card Biomatrix Backup (CoTA 208) attached.  What happens?
Since it is your opponent’s turn and they are the active player, they will get to make all decisions for all cards. In this case Biomatx Backup has the word “may”, meaning that the effect is optional.
I have the card Pitlord (CoTA 093) in play and my opponent plays the card Restringuntus (CoTA 094) and chooses house Dis. What happens when I go to declare my house on my next turn?
On your next turn during the choose a house step of your turn you will be in a position where you must choose house Dis because of the Pitlord, but also cannot choose house Dis because of the Restringuntus. In this case no house is a legal option to be your active house and you must declare no house as your active house (see “House Choice” on Page 10.)
I have chosen house Logos to be my active house this turn and start off by playing Library Access (CoTA 115), I then play Wild Wormhole (CoTA 125). In what order do I resolve this combination of effects?
When you play a Wild Wormhole after playing a Library Access the following happens in this order:


NAME
bpkg-rep-remove
– remove repository from configuration
SYNOPSIS
bpkg rep-remove|remove [options]
(rep-name|rep-loc)...
bpkg rep-remove|remove [options] --all|-a
bpkg rep-remove|remove [options]
--clean
DESCRIPTION
The rep-remove
command removes the specified package
repositories from the configuration. The repository to remove can be
specified either as a repository name or as a repository location (URL or a
directory path).
Alternatively, the --all|-a
option can be used to
remove all the repositories that were previously added (bpkg-rep-add(1)
) to the
configuration.
Finally, the --clean
option can be used to revert the
repositories to the clean state, as if they were added but never
fetched.
REP-REMOVE OPTIONS
--all
|-a
- Remove all the repositories.
--clean
- Clean the repository state.
--directory
|-d
dir
- Assume configuration is in
dir
rather than in the
current working directory.
COMMON OPTIONS
The common options are summarized below with a more detailed description
available in bpkg-common-options(1)
.
-v
- Print essential underlying commands being executed.
-V
- Print all underlying commands being executed.
--quiet
|-q
- Run quietly, only printing error messages.
--verbose
level
- Set the diagnostics verbosity to
level
between 0
and 6.
--jobs
|-j
num
- Number of jobs to perform in parallel.
--no-result
- Don't print informational messages about the outcome of performing a
command.
--no-progress
- Suppress progress indicators for long-lasting operations, such as
network transfers, building, etc.
--build
path
- The build program to be used to build packages.
--build-option
opt
- Additional option to be passed to the build program.
--fetch
path
- The fetch program to be used to download resources.
--fetch-option
opt
- Additional option to be passed to the fetch program.
--fetch-timeout
sec
- The fetch and fetch-like (for example,
git
)
program timeout.
--git
path
- The git program to be used to fetch git repositories.
--git-option
opt
- Additional common option to be passed to the git program.
--sha256
path
- The sha256 program to be used to calculate SHA256 sums.
--sha256-option
opt
- Additional option to be passed to the sha256 program.
--tar
path
- The tar program to be used to extract package archives.
--tar-option
opt
- Additional option to be passed to the tar program.
--openssl
path
- The openssl program to be used for crypto operations.
--openssl-option
opt
- Additional option to be passed to the openssl program.
--auth
type
- Types of repositories to authenticate.
--trust
fingerprint
- Trust repository certificate with a SHA256
fingerprint
.
--trust-yes
- Assume the answer to all authentication prompts is
yes
.
--trust-no
- Assume the answer to all authentication prompts is
no
.
--pager
path
- The pager program to be used to show long text.
--pager-option
opt
- Additional option to be passed to the pager program.
--options-file
file
- Read additional options from
file
.
BUGS
Send bug reports to the
<EMAIL_ADDRESS>mailing list.


--- layout: landing title: "API tooling development: GraphQL, OpenAPI | APIs.guru" excerpt: | API tooling for better developer experience. We create tools to help developers work with GraphQL and OpenAPI/Swagger. ---
We have extensive expertise in API tooling development, especially around GraphQL and OpenAPI/Swagger. You can hire us to customize any of our existing projects or to develop a new one.


THE TALL GUY A film review by Wayne Citrin Copyright 1991 Wayne Citrin
THE TALL GUY is a 1990 film that never made it to Boulder. I recently had the chance to see it on video. I don't remember having so much fun watching a movie (on video or on the big screen) in a long time. See it.
Jeff Goldblum is Dexter King, an unhappy American actor in London who has spent the last six years as the straight man in a comedy revue. In short order, Goldblum falls in love, loses his job in the revue, and gets the lead role in "Elephant!," a musical version of "The Elephant Man."
There's so much to like in this film, it's hard to know where to start. There's Goldblum trying to work up the nerve to ask out the no-nonsense nurse (Emma Thompson) with whom he's fallen in love. There's his lovable nymphomaniac landlady and her parade of weird boyfriends. There's the great sex scene (and I mean it in both senses: it's a great scene, and it suggests great sex), and there's the scene where Goldblum and a friend are lectured by a blind man on the nature of love. And best of all, there's "Elephant!," a musical even funnier than the classic "Springtime for Hitler" in THE PRODUCERS. Listen hard for the wonderfully awful lyrics. What makes this even funnier than "Springtime for Hitler" is that one can really see someone producing a show like this, or like "Elephant!"'s director's other project: a musical version of "Richard III," with such songs as "I've Got a Hunch I'm Gonna Be King." The scenes from "Elephant!" had me rolling on the floor, and I can't remember the last time that happened. And there's lots more that I haven't mentioned.
THE TALL GUY is shot in a refreshingly different style, reminiscent of Richard Lester's 1960's comedies. This film has definitely been inspired by A HARD DAY'S NIGHT and HELP! I don't know who Mel Smith is, or what else he's directed, but I'll certainly try to find out.
In addition to all this, the backstage scenes (particularly the rehearsals and opening night of "Elephant!") are done with a verisimilitude that makes them particularly exciting. Note that I say "verisimilitude" and not "authenticity," since I have no idea how authentic they really are. They just *feel* right. You get the tension and excitement of rehearsal and opening night, even as you see how bad this play really is. But, unlike "Springtime for Hitler," you really want it to succeed.
It's a pity that this film never got the widespread release that it deserved. Fortunately it's on video, so it'll never entirely disappear. Rent it, see it at a revival theatre, but definitely go see it. You'll have a great time.
Wayne Citrin<EMAIL_ADDRESS><EMAIL_ADDRESS>.
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


Angular interpolation {{var}} and ng-bind
{{firstname}}
ng-show and ng-hide directives
Content 1
Content 2
ng-switch
Shown when switch is 1
Shown when switch is 2
Shown when switch is anything else than 1 and 2
ng-if directives
Content 1
Content 2
<*****************************>
{{theItem.text}}
<*****************************>
{{name}} = {{value}}


More...
|
| | Builder (TAbstractAssociation component) |
| |
| virtual TBuilder | AssociationKey (string associationKey) |
| | The name of the property in the data to read the association from. Defaults to the name of the associated model. More...
|
| |
| virtual TBuilder | PrimaryKey (string primaryKey) |
| | The name of the primary key on the associated model. In general this will be the Ext.data.Model.idProperty of the Model. Defaults to 'id' More...
|
| |
| virtual TBuilder | Model (string model) |
| | The string name of the model that is being associated with. Required More...
|
| |
| virtual TBuilder | Reader (Action< ReaderCollection > action) |
| | A special reader to read associated data More...
|
| |
| | Builder (TItem item) |
| |
| virtual TItem | ToComponent () |
| | Get the instance of the underlying StateManagedItem. More...
|
| |
| virtual TBuilder | CustomConfig (Action< ConfigItemCollection > action) |
| | Collection of custom js config More...
|
| |
◆ Builder()
◆ AssociationKey()
The name of the property in the data to read the association from. Defaults to the name of the associated model.
◆ Model()
The string name of the model that is being associated with. Required
◆ PrimaryKey()
The name of the primary key on the associated model. In general this will be the Ext.data.Model.idProperty of the Model. Defaults to 'id'
◆ Reader()
A special reader to read associated data
- Parameters
-
| action | The action delegate |
- Returns
- An instance of TBuilder
The documentation for this class was generated from the following file:
- Factory/Builder/AbstractAssociationBuilder.cs


If this checkbox is selected, the editor tabs will show the filename together with the parent directory name if the filename is not unique.


"It's not just snow ... there's rocks and ice." Vertical Limit
By Ross Anthony
Hanging from a cliff in Monument valley, Chris O'Donnell and Robin Tunney sing "Take it to the limit one more time."  In the beat of an eye, slip of the foot, snap of a rope, these siblings meet up again halfway around the world in the Pakistani Himalayas. Dessert to snowcaps, this film takes climbing to the extremes.
And therein lies the anchor of the film, not just big climbing, but big climbing slips, slides and falls. At precisely these times when expert climbers lose their grip, the film becomes ... well, most gripping. The plot, clichÈ motivations and complications are just rote steps strollin' up a mountain.
The dialogue, like the film itself, is plagued by peaks and valleys. At one moment a sharp satirical line gets the crowd laughing, the next moment, a serious line ... well, gets the crowd laughing (if you know what I mean). And though I liked the international assemblage of climbers, the wind and less than perfect sound quality conspired to make still other lines difficult to understand.
Visually, the film is mostly tight. Besides the excellent special effects, there's a fantastic shot of two young leopards play-fighting in the snow. Unfortunately, focus problems irritate other images throughout the production.
Because the story plays second fiddle to the action, scenes that should be touching ... really aren't. In fact, the most endearing characters are a couple of secondary goofballs -- sort of the Beavis and Butthead or Trapper and Hawkeye of the Himalayas.
Whelp then, to summit up, though some of the action sequences are a bit "over the edge," they're great fun to watch. If you're not in the mood for compelling drama and just want to enjoy a bumpy ride - take yourself to the "Vertical Limit."
Vertical Limit. Copyright © 2000. Rated PG-13. * Starring Chris O'Donnell, Bill Paxton, Annie Tunney, Scott Glenn, Izabella Scorupco, Temuera Morrison, Stuart Wilson. * Directed by Martin Campbell. * Written by Robert King and Terry Hayes. Story by Robert King. * Produced by Lloyd Phillips, Robert King, Martin Campbell at Columbia.
Grade..........................B
-- Copyright © 2000. Ross Anthony, currently based in Los Angeles, has scripted and shot documentaries, music videos, and shorts in 35 countries across North America, Europe, Africa and Asia.
For more reviews visit: http://www.RossAnthony.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


|
mpx-spring2017-npennf
NPE-NPX.R6.04282017
An Operating System Project
|
Functions | |
| void | _loadBootSectorInfo () |
| void | _loadFATTables () |
| void | _loadRootDirectroy () |
| dir_entry * | _loadSectorAsDirectoryEntries (uint16_t sector) |
| void | _readDirectoryEntry (dir_entry *dir) |
| long | _getDiskOffsetForDirEntry (int idx) |
| void | _saveFATTables () |
| void | _saveDirEntry (dir_entry *dir) |
| void | _refreshDirectory () |
| void | _prepNewDirSector (uint16_t sector) |
| int | _getFirstFreeIndexInSector (dir_entry *dirs) |
| int | _getFirstFreeIndexInDirs (dir_entry *dirs, int maxSize) |
| uint16_t | _getFirstOpenSector () |
| void | initialize (FILE *diskImage) |
| void | destroy () |
| boot_sector * | getBootSector () |
| fat_tables * | getFATTables () |
| dir_entry * | getCurrentDirectory () |
| int | getCurrentDirectoryMaxSize () |
| unsigned char * | getFileFromSector (uint16_t sector, int size) |
| int | changeToDirectory (uint16_t sector) |
| int | changeToParentDirectory () |
| void | setFilename (int idx, const char *filename, const char *fileExt) |
| bool | moveFile (int idx, uint16_t destSector) |
Variables | |
| FILE * | _DiskImage |
| boot_sector | _BootSector |
| fat_tables | _FATTables |
| dir_entry * | _CurrentDirectory |
| int | _CurrDirSize = 0 |
| bool | _isCurrentRoot = false |
| long _getDiskOffsetForDirEntry | ( | int | idx | ) |
Gets the disk offset (in bytes) of the file at the given index of the current directory.
| idx | The index of the current directory |
| int _getFirstFreeIndexInDirs | ( | dir_entry * | dirs, |
| int | maxSize | ||
| ) |
Gets the first free directory entry index in the given array of entries. Supports a variable max size.
| dirs | The array on entries to search through |
| maxSize | The size of the array |
| int _getFirstFreeIndexInSector | ( | dir_entry * | dirs | ) |
Gets the first free directory entry index in the given array of entries.
| dirs | The array on entries to search through |
| uint16_t _getFirstOpenSector | ( | ) |
Gets the first open sector.
| void _loadBootSectorInfo | ( | ) |
Loads boot sector information.
| void _loadFATTables | ( | ) |
Loads the FAT table information
| void _loadRootDirectroy | ( | ) |
Loads the root directory as the current directory.
| dir_entry * _loadSectorAsDirectoryEntries | ( | uint16_t | sector | ) |
Loads a sector as an array of (bytesPerSector / DIR_ENTRY_SIZE) directory entries.
| sector | The sector to load from. |
| void _prepNewDirSector | ( | uint16_t | sector | ) |
Preps the given sector to be a new directory sector.
| sector | The sector ID to set |
| void _readDirectoryEntry | ( | dir_entry * | dir | ) |
Reads a single directory entry into the passed entry.
| The | directory entry to store the information in |
| void _refreshDirectory | ( | ) |
Refreshes (reloads) the current directory.
| void _saveDirEntry | ( | dir_entry * | dir | ) |
Saves the passed directory entry to the disc.
| void _saveFATTables | ( | ) |
Saves the FAT Tables to the disc.
| int changeToDirectory | ( | uint16_t | sector | ) |
Changes to the directory specified by the given logical sector.
| sector | The starting logical sector of the directory. |
| int changeToParentDirectory | ( | ) |
Changes the current directory to the parent of the current.
| void destroy | ( | ) |
Destroys the FAT abstraction, freeing any memory used internally.
| boot_sector* getBootSector | ( | ) |
Gets the boot sector of the FAT File System.
| dir_entry* getCurrentDirectory | ( | ) |
Gets the current directory of the FAT File System.
| int getCurrentDirectoryMaxSize | ( | ) |
Gets the maximum size of the current directory.
| fat_tables* getFATTables | ( | ) |
Gets the FAT Tables for the FAT File System.
| unsigned char* getFileFromSector | ( | uint16_t | sector, |
| int | size | ||
| ) |
Gets the file specified by the given sector.
| sector | The starting logical sector of the file |
| size | The size of the file (in bytes) |
| void initialize | ( | FILE * | diskImage | ) |
Initializes the FAT abstraction with the given disk image.
| diskImage | The pointer to an opened file that is a FAT12 disk image. |
| bool moveFile | ( | int | idx, |
| uint16_t | destSector | ||
| ) |
Moves a file at the specified index of the current directory to the directory at the destination sector.
| idx | The index of the listing in the current direcory |
| destSector | The beginning sector of the target directory |
| void setFilename | ( | int | idx, |
| const char * | filename, | ||
| const char * | fileExt | ||
| ) |
Sets the name of the file at the specified index of the current list of directory entries.
| idx | The index of the listing in the current directory |
| filename | The name of the file (max 8 characters) |
| fileExt | The extension of the file (max 3 characters) |
| boot_sector _BootSector |
| int _CurrDirSize = 0 |
| dir_entry* _CurrentDirectory |
| FILE* _DiskImage |
| fat_tables _FATTables |
| bool _isCurrentRoot = false |


PROJECT SUMMARY: The purpose of this project is to visualize the European Union's Economic Indicators.
The visualizations will illustrate all current 27 Countries of the European Union based on the Official Website of the European Union.
Economic indicators such as the Gross Domestic Product (GDP), Consumer Price Index (CPI), Unemployment Rates and Population are visualized for each country. The data for these indicators were obtained from
The World Bank database.
Population by EU Country
Unemployment Rates vs GDP Per Capita
Year
(Pause)
Top 12 EU Countries: Gross Domestic Product Per Capita (in USD)


CREATE FUNCTION
Creates a new scalar user-defined function (UDF) using either a SQL SELECT clause or a Python program.
Syntax
CREATE [ OR REPLACE ] FUNCTION f_function_name ( { [py_arg_name py_arg_data_type | sql_arg_data_type } [ , ... ] ] ) RETURNS data_type { VOLATILE | STABLE | IMMUTABLE } AS $$ { python_program | SELECT_clause } $$ LANGUAGE { plpythonu | sql }
Parameters
- OR REPLACE
-
Specifies that if a function with the same name and input argument data types, or signature, as this one already exists, the existing function is replaced. You can only replace a function with a new function that defines an identical set of data types. You must be a superuser to replace a function.
If you define a function with the same name as an existing function but a different signature, you create a new function. In other words, the function name is overloaded. For more information, see Overloading Function Names.
- f_function_name
-
The name of the function. If you specify a schema name (such as
myschema.myfunction
), the function is created using the specified schema. Otherwise, the function is created in the current schema. For more information about valid names, see Names and Identifiers.We recommend that you prefix all UDF names with
f_
. Amazon Redshift reserves thef_
prefix for UDF names, so by using thef_
prefix, you ensure that your UDF name will not conflict with any existing or future Amazon Redshift built-in SQL function names. For more information, see Naming UDFs.You can define more than one function with the same function name if the data types for the input arguments are different. In other words, the function name is overloaded. For more information, see Overloading Function Names.
- py_arg_name py_arg_data_type | sql_arg_data type
-
For a Python UDF, a list of input argument names and data types. For a SQL UDF, a list of data types, without argument names. In a Python UDF, refer to arguments using the argument names. In a SQL UDF, refer to arguments using $1, $2, and so on, based on the order of the arguments in the argument list.
For a SQL UDF, the input and return data types can be any standard Amazon Redshift data type. For a Python UDF, the input and return data types can be any standard Amazon Redshift data type except TIMESTAMP WITH TIME ZONE (TIMESTAMPTZ). In addition, Python UDFs support a data type of ANYELEMENT. This is automatically converted to a standard data type based on the data type of the corresponding argument supplied at runtime. If multiple arguments use ANYELEMENT, they will all resolve to the same data type at runtime, based on the first ANYELEMENT argument in the list. For more information, see Python UDF Data Types and Data Types.
You can specify a maximum of 32 arguments.
- RETURNS data_type
-
The data type of the value returned by the function. The RETURNS data type can be any standard Amazon Redshift data type. In addition, Python UDFs can use a data type of ANYELEMENT, which is automatically converted to a standard data type based on the argument supplied at runtime. If you specify ANYELEMENT for the return data type, at least one argument must use ANYELEMENT. The actual return data type matches the data type supplied for the ANYELEMENT argument when the function is called. For more information, see Python UDF Data Types.
- VOLATILE | STABLE | IMMUTABLE
-
Informs the query optimizer about the volatility of the function.
You will get the best optimization if you label your function with the strictest volatility category that is valid for it. However, if the category is too strict, there is a risk that the optimizer will erroneously skip some calls, resulting in an incorrect result set. In order of strictness, beginning with the least strict, the volatility categories are as follows:
-
VOLATILE
-
STABLE
-
IMMUTABLE
VOLATILE
Given the same arguments, the function can return different results on successive calls, even for the rows in a single statement. The query optimizer can't make any assumptions about the behavior of a volatile function, so a query that uses a volatile function must reevaluate the function for every input row.
STABLE
Given the same arguments, the function is guaranteed to return the same results for all rows processed within a single statement. The function can return different results when called in different statements. This category allows the optimizer to optimize multiple calls of the function within a single statement to a single call for the statement.
IMMUTABLE
Given the same arguments, the function always returns the same result, forever. When a query calls an
IMMUTABLE
function with constant arguments, the optimizer pre-evaluates the function. -
- AS $$ statement $$
-
A construct that encloses the statement to be executed. The literal keywords
AS $$
and$$
are required.Amazon Redshift requires you to enclose the statement in your function by using a format called dollar quoting. Anything within the enclosure is passed exactly as is. You don't need to escape any special characters because the contents of the string are written literally.
With dollar quoting, you use a pair of dollar signs ($$) to signify the start and the end of the statement to execute, as shown in the following example.
$$
my statement
$$Optionally, between the dollar signs in each pair, you can specify a string to help identify the statement. The string that you use must be the same in both the start and the end of the enclosure pairs. This string is case-sensitive, and it follows the same constraints as an unquoted identifier except that it can't contain dollar signs. The following example uses the string
test
.$test$
my statement
$test$For more information about dollar quoting, see "Dollar-quoted String Constants" under Lexical Structure in the PostgreSQL documentation.
- python_program
-
A valid executable Python program that returns a value. The statement that you pass in with the function must conform to indentation requirements as specified in the Style Guide for Python Code on the Python website. For more information, see Python Language Support for UDFs.
- SQL_clause
-
A SQL SELECT clause.
The SELECT clause can't include any of the following types of clauses:
-
FROM
-
INTO
-
WHERE
-
GROUP BY
-
ORDER BY
-
LIMIT
-
- LANGUAGE { plpythonu | sql }
-
For Python, specify
plpythonu
. For SQL, specifysql
. You must have permission for usage on language for SQL or plpythonu. For more information, see UDF Security and Privileges.
Usage Notes
Nested Functions
You can call another SQL user-defined function (UDF) from within a SQL UDF. The nested
function must exist
when you run the CREATE FUNCTION command. Amazon Redshift doesn't track dependencies
for UDFs,
so if you drop the nested function, Amazon Redshift doesn't return an error. However,
the UDF
will fail if the nested function doesn't exist. For example, the following function
calls the f_sql_greater
function in the SELECT clause.
create function f_sql_commission (float, float ) returns float stable as $$ select f_sql_greater ($1, $2) $$ language sql;
UDF Security and Privileges
To create a UDF, you must have permission for usage on language for SQL or plpythonu (Python). By default, USAGE ON LANGUAGE SQL is granted to PUBLIC, However, you must explicitly grant USAGE ON LANGUAGE PLPYTHONU to specific users or groups.
To revoke usage for SQL, first revoke usage from PUBLIC. Then grant usage on SQL
only to the specific users or groups permitted to create SQL UDFs. The following
example revokes usage on SQL from PUBLIC then grants usage to the user group
udf_devs
.
revoke usage on language sql from PUBLIC; grant usage on language sql to group udf_devs;
To execute a UDF, you must have execute permission for each function. By default, execute permission for new UDFs is granted to PUBLIC. To restrict usage, revoke execute from PUBLIC for the function. Then grant the privilege to specific individuals or groups.
The following example revokes execution on function f_py_greater
from
PUBLIC then grants usage to the user group udf_devs
.
revoke execute on function f_py_greater(a float, b float) from PUBLIC; grant execute on function f_py_greater(a float, b float) to group udf_devs;
Superusers have all privileges by default.
For more information, see GRANT and REVOKE.
Examples
Scalar Python UDF Example
The following example creates a Python UDF that compares two integers and returns the larger value.
create function f_py_greater (a float, b float) returns float stable as $$ if a > b: return a return b $$ language plpythonu;
The following example queries the SALES table and calls the new
f_py_greater
function to return either COMMISSION or 20 percent of
PRICEPAID, whichever is greater.
select f_py_greater (commission, pricepaid*0.20) from sales;
Scalar SQL UDF Example
The following example creates a function that compares two numbers and returns the larger value.
create function f_sql_greater (float, float) returns float stable as $$ select case when $1 > $2 then $1 else $2 end $$ language sql;
The following query calls the new f_sql_greater
function to query the
SALES table and returns either COMMISSION or 20 percent of PRICEPAID, whichever is
greater.
select f_sql_greater (commission, pricepaid*0.20) from sales;


Qt for WebAssembly: appdebut
JavaScript is disabled. Please enable JavaScript to use this application.


Our administration's cooperation with Cambridge Analytica demonstrates the latest applications of information technology.
This is extremely dangerous to our democracy.
-- Sinclair Broadcasting Group
I spent way too much effort on this meaningless website.
Security and transparency are our priorities. Our back-end is secured with server-side input validation. Get the code here.


R/imd_test.R
imd_test.Rd
Tests the null hypothesis that the number of missing observations is independent of the groups. A g-test is used to test this null hypothese against the alternative that the groups and missing data are related. This is usually performed in conjuction with an ANOVA which tests if the mean response (which varies with data type) is the same across groups; this combination is called IMD_ANOVA. It's probably a good idea to first filter the data with `imd_anova_filter` to see if there is enough infomration to even do this test. See Webb-Robertson et al. (2010) for more.
imd_test(omicsData, comparisons = NULL, pval_adjust = "none", pval_thresh = 0.05)
| omicsData | A pmartR data object of any class |
|---|---|
| comparisons | `data.frame` with columns for "Control" and "Test" containing the different comparisons of interest. Comparisons will be made between the Test and the corresponding Control If left NULL, then all pairwise comparisons are executed. |
| pval_adjust | character vector specifying the type of multiple comparisons adjustment to implement. The default setting is to not apply an adjustment. Valid options include: holm, bonferonni and none. See |
| pval_thresh | numeric p-value threshold, below or equal to which peptides are considered differentially expressed. Defaults to 0.05 |
a list of `data.frame`s
| Results | |
| e_data cname, Count of non-missing data for each group, Global G-test statistic and p-value | |
| Gstats | |
| Value of the g statistics for each of the pairwise comparisons specified by the `comparisons` argument | |
| Pvalues | |
| p-values for each of the pairwise comparisons specified by `comparisons` argument | |
| Flags | |
| Indicator of statistical significance where the sign of the flag reflects the difference in the ratio of non-missing observations (0/+-2 to if adjusted p-value>=pval_thresh or p-value<pval_thresh) | |
Webb-Robertson, Bobbie-Jo M., et al. "Combined statistical analyses of peptide intensities and peptide occurrences improves identification of significant peptides from MS-based proteomics data." Journal of proteome research 9.11 (2010): 5748-5756.
dontrun{ library(pmartRdata) library(pmartR) #Add attribute required by MSomicsQC mypepData <- edata_transform(omicsData = pep_object, data_scale = "log2") mypepData <- group_designation(omicsData = mypepData, main_effects = c("Condition")) #Haven't filtered yet, should get warning com_df <- data.frame(Control="Mock",Test="Infection") imd_res <- imd_test(omicsData = mypepData,comparisons=com_df) #Now filter and run again imdanova_Filt <- imdanova_filter(omicsData = mypepData) mypepData <- applyFilt(filter_object = imdanova_Filt, omicsData = mypepData, min_nonmiss_gtest=3) imd_res <- imd_test(omicsData = mypepData) imd_res_holm <- imd_test(omicsData = mypepData, pval_adjust = 'holm') ### #Are the comparisons names "Test_vs_Control"? comp_df <- data.frame(Test="Infection",Control="Mock") imd_res <- imd_test(omicsData = mypepData,comparisons = comp_df) comp_df_rev <- data.frame(Control="Infection",Test="Mock") imd_res_rev <- imd_test(omicsData = mypepData,comparisons = comp_df_rev) #### #Test with a bigger dataset library(OvarianPepdataBP) tcga_ovarian_pepdata_bp <- as.pepData(e_data = tcga_ovarian_pepdata_bp$e_data, f_data = tcga_ovarian_pepdata_bp$f_data, e_meta = tcga_ovarian_pepdata_bp$e_meta) tcga_ovarian_pepdata_bp <- group_designation(omicsData = tcga_ovarian_pepdata_bp, main_effects = c("initial_pathologic_diagnosis_method")) ovarian_res <- imd_test(omicsData = tcga_ovarian_pepdata_bp) #Holm adjustment ovarian_res_holm <- imd_test(omicsData = tcga_ovarian_pepdata_bp, pval_adjust = 'holm') #Bonferonni adjustment ovarian_res_bon <- imd_test(omicsData = tcga_ovarian_pepdata_bp, pval_adjust = 'bonf') }#> Error: <text>:1:8: unexpected '{' #> 1: dontrun{ #> ^


public class ThreeStageJobCallbackImpl extends ThreeStageJobCallback
ThreeStageJobCallback
where the three stages are supplied as String arguments
for remote execution.| Modifier and Type | Field and Description |
|---|---|
private java.lang.String |
bootstrapScript |
private java.lang.String |
cleanupScript |
private java.lang.String |
executeScript |
private static org.slf4j.Logger |
logger |
private java.io.File[] |
payloadFiles |
private java.lang.String |
resultsPath |
| Constructor and Description |
|---|
ThreeStageJobCallbackImpl(java.lang.String bootstrapScript,
java.lang.String executeScript,
java.lang.String cleanupScript,
java.lang.String resultsPath,
java.io.File... payloadFiles) |
| Modifier and Type | Method and Description |
|---|---|
void |
bootstrap(ServerCollection nodes)
The bootstrap phase initially copies all payload files
to the remote host.
|
void |
cleanup(ServerCollection nodes)
The custom cleanup script is first executed.
|
void |
execute(ServerCollection nodes)
The execute script is run
|
boolean |
onFailure(java.lang.Throwable e)
Called if the resources could not be created.
|
onSuccess
private static final org.slf4j.Logger logger
private java.io.File[] payloadFiles
private java.lang.String bootstrapScript
private java.lang.String executeScript
private java.lang.String cleanupScript
private java.lang.String resultsPath
public ThreeStageJobCallbackImpl(java.lang.String bootstrapScript, java.lang.String executeScript, java.lang.String cleanupScript, java.lang.String resultsPath, java.io.File... payloadFiles)
bootstrapScript
- the bootstrap script to executeexecuteScript
- the main execution script to executecleanupScript
- the cleanup script to execute (run before results files are returned)resultsPath
- path of the results filespayloadFiles
- path of the payload files to copy to the remote hostspublic boolean onFailure(java.lang.Throwable e)
e
- the exception that caused the request to failpublic void bootstrap(ServerCollection nodes)
nodes
- allocated nodespublic void execute(ServerCollection nodes)
nodes
- allocated nodespublic void cleanup(ServerCollection nodes)
nodes
- allocated nodes


I'm a back-end C# programmer who works on ASP.Net, Entity Framework, Web API 2, NancyFx and Microservice with SQL Database and MongoDb. Also have little abilities on HTML5, Bootstrap, CSS and JavaScript.
I enjoyed programming and have good analytical. I can follow the work’s deadlines, love to learn new things, able to work as team. Experiences as back-end programmer, database management and some front end knowledges.


Welcome to
BeeHam's Pizzeria
Place Order
Pick a Size:
Small
Medium
Large
Toppings
One
Two
Three
Unlimited
Quantity
Place Order
Order
Size:
Number of Toppings:
Toppings:
Quantity:


When typing, you can make selections by holding down the shift key and using right or left arrow key. Selected part of your eqaution/text will be displayed blue.
After you made the selection you can use following keys to modify the selection:
- Ctrl+X - to cut the selection
- Ctrl+C - to copy the slection
- Del, Backspace - to delete the selection
- R, G - to change selection color (red, green)
- U, S, O - to underline, strikeout, overline the selection
- B, I - to bold, italic the selection
- / or # or ` - to put fraction line under the selection
- (, [, { - to put parentheses around selection
- 0...9 - to raise the selection to power
- C - to put the 'case' line
- \ - to put selection into a function argument
- Enter - to open the context menu over the selection


This is a template website which is built using Parcel. From here, you can do various things:
index.htmlfile,
scss,
typescript(included, just create a
.tsfile), and even some
react!
Batteries-included commands to run with
yarn
start: starts the dev server
build: builds a production bundle ready for deployment. Artifacts are located in
./dist/


Using HTTMock to mock 3rd Party APIs
In the process of implementing the connected social media in API server. There was a situation where we need to mock the 3rd party API services like Google OAuth, Facebook Graph API.
The idea was simple, as suggested by @hongquan, when requests
make a HTTP request to https://api.google.com/profile, for example, httmock will
- stand in the middle,
- stop request from going to the Internet,
- and returns a JSON response as if the response is from Google.
The content of this response is written by us in the test case. We have to read Google documentation to write a correct fake response.
Library used
For this purpose, I used the httmock library for Python.
Steps to follow
- Look for response object on two requests (OAuth and profile details).
- Create the dummy response using the sample response object.
- Creating endpoints using the httpmock library.
- During test run, calling the specific method
with HTTMock
Sample object of OAuth Response from Google is:
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
and from the sample object of Google Profile API we needed the link of profile for our API-server:
{'link':'http://google.com/some_id'}
Creating the dummy response
Creating dummy response was easy. All I had to do is provide proper header and content in response and use urlmatch
decorator
# response for getting userinfo from google
@urlmatch(netloc='https://www.googleapis.com/userinfo/v2/me')
def google_profile_mock(url, request):
headers = {'content-type': 'application/json'}
content = {'link':'http://google.com/some_id'}
return response(200, content, headers, None, 5, request)
@urlmatch(netloc=r'(.*\.)?google\.com$')
def google_auth_mock(url, request):
headers = {'content-type': 'application/json'}
content = {
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
return response(200, content, headers, None, 5, request)
So now we have the end points to mock the response. All we need to do is to use HTTMock inside the test case.
To use this setup all we need to do is:
with HTTMock(google_auth_mock, google_profile_mock):
self.assertTrue('Open Event' in self.app.get('/gCallback/?state=dummy_state&code=dummy_code',
follow_redirects=True).data)
self.assertEqual(self.app.get('/gCallback/?state=dummy_state&code=dummy_code').status_code, 302)
self.assertEqual(self.app.get('/gCallback/?state=dummy_state&code=dummy_code').status_code, 302)
And we were able to mock the Google APIs in our test case. Complete implementation in Fossasia API-Server can be seen Here