mtg
TABLE OF CONTENTS
-
What is Magic, What is Nissa, What is Oath of the Gatewatch…
- HTML structure without fonts or anything. Just the boxes, a card’s layout
- find and link page that explains mtg card parts, from which to extract the card’s html structure
- first: structure written as plain text
- scnd: convert into html
- search text and past into it
- SCSS
- Reset
- body
- card container/wrapper/whatever you wanna call it
- (now #ddd, later on will turn to #000);
- box-shadow: why, how I made it (show box shadow online tool with screenshot)
- card background:
- for now use z-index: 1 and bg; #ddd (* show how I made the green bg of the img after the frame is layed out)
For those few people who lived in a cave up until now - or haven’t nerded with cards in his/her life - Magic: The Gathering - or MTG, in short - is an amazing trading card game. The best thing about it is that it’s like chess and the fantasy genre met one day and hooked up. From this intercourse Magic was born. This is also the reason why it’s played by people of all ages: you can dive in this fantastic world, play the role of a planswalker: a being with magician-like powers - use the power of nature - darkness, light, forest, water, fire - to your own advantage in order to win the battle. And there are stories behind each deck that is on sale. Cards come in expansions, each one has its own story and they can be connected with oneanother tooo.
So I’m learning web development, right? As a fan of the game I wanted to challenge myself. I thought: wouldn’t it be a freaking fun experience to try and replicate a Magic card in pure CSS? Heck yeah!
One of my favorite cards is the mighty Oath of Nissa due to the expansion - and the story - she comes in - Oath of the Gatewatch - and the graphical look of it.
Divide and Conquer
It seems overwhelming to replicate such piece of art in CSS. I know this feeling because I experienced it myself when I wanted to do such a thing. But hear me out: if there’s one single lesson I learned while coding a website or programming an algorithm is that no matter how something feels gigantic, impossible. No matter anything. It’s possible, because the only thing to do is to divide and conquer. Divide that huge problem into parts. Then divide each part in sub-parts. Then divide each sub-part into further sub-parts and so on, until you get a single task that is simple enoug that you can take it on your own. Now that you look at how the dismantled problem is not so scary anymore right? Almost like we unmasked Oz, ha?
When I approached the problem, the first thing I did was to examine the card from a CSS point of view. I focused on one thing: figure out what could be its structure in terms of boxes. So let’s try to look at it now and do the same thing.
So, the first obvious thing I notice is the black area on the back that wraps the entire card. In fact, as you can see all the card’s components (image, title, text, arts) is contained inside this black area. Then it’s fair to say that we can consider this the container of the card itself, much like we would use a container div to contain the entire page content in it. So here it is our first box.
The second major area I notice is the green background that comes right after the what-we-call-now container. You may doubt it but I can assure you it’s a background for the rest of the card content. In fact, if you pay close attention you may notice that there’s a third major area that lays on this background.
The third area I notice, for that matters, is in fact the one that looks like is laying on the green background. There’s one detail about it that catches my attention though: it’s longer than background and it covers it, actually. This may seem something difficult to do, but trust me is it’s easy to realize. There’s one CSS property that adresses this problem more than we could ask for: the z-index. In fact, we can just give this third area a higher z-index than the background and solve the issue.
To recap, there are three major area we noticed:
- a black container
- a green background
- a gray area containing the card’s data
Here’s a simple scheme illustrating this:
I did a quick research on the structure behind a Magic card. Here I found the confirmation of my idea.
It turns the first area is named border. The second area is as simple as background. The third area - the one containing all the important data - on the other hand, is named frame. With relevance to our case, a card frame contains, in order:
- a title area involving:
- name
- casting cost (the forest symbol on the far top right)
- the illustration
- the type area (offcially named Type Line), which displays the following:
- card type (obviously, which is Legendary Enchantment for us)
- expansion symbol (the golden triangle-like one on the right)
- text box
- power/toughness (not available for enchantment, so our card lacks it)
- information below the text box, which can explained as follows:
- left:
- collector’s number - 140/184
- rarity (R)
- set (OGW - Oath of the Gatewatch)
- card’s language (EN - English)
- credits for the author of the illustration (props to them really, one of the best things about Magic are the illustrations indeed)
- middle: there’s a Holofoil stamp since the card we want to replicate is rare (notice the gold-colored symbol on the Type Line)
- right: copyright information
- left:
Here’s the same scheme illustrating the card, but this time I added the new-found names on it
So not only we have a clear vision of how we should organize the card structure, now we also have excellent name suggestions for the various divs we are going to create.
I say we have all the necessary information to build the HTML of the card. We have to translate our structure into HTML.
HTML

Oath of Nissa

Legendary Enchantment

When Oath of Nissa enters the battlefield, look at the top three cards of your library. You may reveal a creature, land, or planeswalker card from among them and put it into your hand. Put the rest on the bottom of your library in any order.

You may spend mana as though it were mana of any color to cast planeswalker spells.

"For the life of every plane, I will keep watch."

140/184 R

OGW • EN  Wesley Burt

™ & © 2016 Wizards of the Coast

Again, when you see a snippet of code don’t get overwhelmed: as everything in code and programming, we can always divide a huge problem into smaller, simpler tasks. This goes for HTML too.
Let’s give a look at this code.
As you can see it reflects what we came up to in the previous section. There are three main divs:

The card-frame div is the one we must focus our attention to for the moment as it contains the main information. In fact, it is organized as follows, in this order:
- the frame header (the title area), contains:
- card name
-
casting cost

Oath of Nissa

-
frame-art (the illustration)
- frame-type-line, containing:
- type
-
icon set

Legendary Enchantment

- frame-text-box, containing 3 paragraphs:
- main description
- instructions to play the card
-
the so-called flavour text, which is a short text that gives context to the card played and the set it is in

When Oath of Nissa enters the battlefield, look at the top three cards of your library. You may reveal a creature, land, or planeswalker card from among them and put it into your hand. Put the rest on the bottom of your library in any order.

 You may spend mana as though it were mana of any color to cast planeswalker spells.

"For the life of every plane, I will keep watch."

- finally there’s the frame-bottom, divided in three sub-parts, as explained before:
- fbi-left for collector number, rarity (R), language (EN), credit to the illustrator
- fbi-center for the holofoil stamp
-
fbi-right for copyright info

140/184 R

OGW • EN Wesley Burt

 ™ & © 2016 Wizards of the Coast

P.S. some may already have noticed, but I didn’t mention the little painbrush symbol at the bottom-left of the card. There is a reason for it: we’re going to add it later on.
Here’s what the HTML for the card looks like:
Which is ok, but there’s still one thing we need to get rid of: the browser’s default styling. The reason behind it is pretty simple. You see, each browser default styling is slightly different one from another. So, in order to avoid inconsistencies, we are going to remove those defaults and reset everything to 0. Once we do that we can really make our own style from scratch.
There’s a pretty popular online tool for this, the Meyerweb reset (which you can find here). For the sake of keeping this post short, I’m not going to past it here. You just go to the mentioned link, copy the CSS code and then past it in your CSS file.
Here’s how the HTML look like after the reset:
Ugly, huh? Well, not for so long!
The time to add styling, the main and best part for this project, has come.
CSS time.
Card container
As a first, let’s handle the card container. We need to give it some width, height. We need to center it in the page so that our work will look more polished in general. Some margin to give some distance and space from the top of the page. Some border radius to reflect what the original card’s broders are. Some shadow and a temporary black border, so that we know what we are doing.
Here’s the code:
.card-container {
border: 1px solid black;
width: 500px;
height: 700px;
margin: 0 auto;
margin-top: 56px;
border-radius: 25px;
box-sizing: border-box;
box-shadow: -8px 9px 16px -3px gray;
/*background: #171314; */
}
This is what we get:
It’s a little improvement, but not enough.
Let’s keep going.
Card background: 0
As a start, let’s code an initial background so that we can start to see something more similar to a card.
Let’s give it a height, but be careful to give it one that is lower that the container’s. I chose 600px.
Let’s also put some margin. Here make sure to set it on all sides except the bottom, because that gap will be covered by the frame. I chose a 20px to the left, top and right.
Let’s give some roundess to the border, as to reflect the card. Here I compared the original card with my work and played with pixels until I got a result I was satisfied by.
At last, let’s give it some background color, just to make it noticeable the distinction between container and background.
.card-background {
height: 600px;
margin: 20px 20px 0 20px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
border-bottom-left-radius: 8%;
border-bottom-right-radius: 8%;
background-color: #bbb;
}
This is what it looks at the moment
Here’s the CodePen to check the card and the code we wrote until now
See the Pen mtg nissa by Davide (@davide2894) on CodePen.


Info
Address: 2112 Main Street Urbana, Illinois 61801
Phone:<PHONE_NUMBER>
Email<EMAIL_ADDRESS>Store Hours: *All major holidays observed*
- Monday-Friday: 8am-9pm
- Saturday: 10am-8pm
- Sunday: Closed
Address: 2112 Main Street Urbana, Illinois 61801
Phone:<PHONE_NUMBER>
Email<EMAIL_ADDRESS>Store Hours: *All major holidays observed*


This project will use a small doorframe-mounted sensor to count the number of people entering or exiting a room threshold with a high degree of accuracy. The device will operate on battery power for more than a year, processing data from a grid-array of infrared sensors and transmitting it for display to our cloud service through the LoRa low-power wide area network.
Most modern occupancy sensing systems require expensive infrastructure such as connected power or local WiFi. It is prohibitively expensive to route power to arbitrary points in a building, so battery-powered solutions are desirable.
With our device, occupancy in a building or room could be monitored for more than a year on a D-cell batteries. Additionally, no local WiFi infrastructure will be necessary as the sensor system transmits data to a user-facing website interface using the LoRaWAN protocol.
CountWise systems uses video and image processing technology to count people moving through a space. While this is more general than our approach and can be applied in a greater variety of locations, it is much more power-intensive.
Irisys has sophisticated people-counting products, capable of covering large door spaces. Unlike our product, though, it requires both power and ethernet connectivity.
Rita was another capstone project built last year. They used accelerometers placed in chairs that took readings and transmitted data every 30 minutes to detect whether seats were occupied. We intend our system to provide updates at a faster rate as well as use a much smaller number of devices to monitor a space.
| Part Name | Details | Vendor | Cost |
|---|---|---|---|
| Atmel SAM L21E | Ultra low-power 32-bit microcontroller. 256KB Flash, 30KB SRAM, 48 MHz clock speed. | Digikey | $4.64 |
| Microchip RN2903 | LoRaWAN module, controllable over UART. Contains its own small MCU. | Digikey | $14.70 |
| 916MHZ Antennae | Antenna for use with the LoRaWAN module. | Digikey | $10.39 |
| Grid-Eye Infrared Sensor | Low-power grid of sensors that generates an 8x8 IR image. Capable of sampling up to 10 Hz | Digikey | $22.16 |
| Panasonic IR sensor | Low-power passive IR motion detector | Mouser | $19.79 |
| Switching Transistor | Low resistance transistor to switch power to sensors | Mouser | $0.61 |
| Assorted SMD resistors & capacitors | Various filtering caps and pull-up resistors | Mouser/ Digikey | ~$2.00 |
| Component Name | Description | Vendor |
|---|---|---|
| Django Web Framework | The Django framework will be used to implement the cloud service API that will receive data from the LoRaWAN network and serve it to our front-end interface. We will be using Python 3.6 and Django 1.10 | Django Software Foundation |
| React | The React library will be used to create a dynamic front-end user interface. | Facebook Open Source |
| Let's Encrypt | Let's Encrypt's certificate authority and software tools will be used to securely transmit data over SSL/TLS. | Internet Security Research Group |
| Custom Atmel SAM Firmware | We will utilize Atmel software libraries and write C code to implement custom firmware on our device. | Microchip |
| Protocol Name | Usage |
|---|---|
| LoRaWAN | Our device will transmit data through the LoRaWAN backbone to our internet service. |
| UART | Our SAM microcontroller will send commands to the LoRa module over UART. |
| I2C | Our SAM microcontroller will send commands to and read data from the Grid-EYE sensor using I2C |
If an organization can better understand where people are in a building, it can more effectively control the HVAC systems in order to manage energy consumption.
If we know how many people are in a room/building, we can present that data to the public through a web interface. This could be used to determine whether a shared space like a library or workout space is too crowded.
This diagram gives a high level overview of the architecture of our sensor system. The "brain" is the Atmel SAM L21E microcontroller, a low-power chip that can drive each of our other components. When motion is detected by the PIR sensor, it will send an interrupt to the SAM chip in order to wake it up from deep sleep. The GridEye infrared camera generates an 8x8 grid of IR pixels at 10 frames per second, sent over I2C back to the microcontroller. All processing is done on-chip, so the only data transmitted through the RN2903 LoRa transceiver are the changes in occupancy.
This interaction diagram details the process of waking up the chip to detect a person entering/exiting a room. Most of the time, our MCU will be in a deep sleep running only the PIR sensor. Upon detecting motion in the area, the PIR device will trigger a wakeup for the MCU and then the Grideye. The microcontroller will then begin to sample the Grideye data at 10 FPS, interpreting the 8x8 heatmap as a number of people entering-exiting. Once motion has subsided, the chip will return to the deep sleep state.
The data flow interaction diagram is fairly self-explanatory. The MCU will wakeup on a configurable interval and transmit the change in occupancy it has seen since the last transmission. Sending essentially 1 byte allows us to minimize the transmission time and reduce power consumption.
The LoRaWAN infrastructure set up by the CMU WiSE Lab exposes data sent by clients through an MQTT service. We run a daemon client on our webserver that will automatically subscribe to the data queues of each device setup with our service. Upon receipt of a sensor update, the server persists the change to the database and updates related values.
Terence is in charge of implementing the core firmware and sensor manager platform.
Jacob is the PCB hardware engineer as well as the cloud service lead.
Udaya is responsible for implementing the people-counting algorithm and the Grideye driver.
Preetam is managing the implementation of the LoRa firmware driver as well as providing assistance and QA for the sensor analysis.


{%extends 'pics/base.html'%} {% block content %}
This is an apllication that allows users to add images of their favorite things and display them in a gallery.
You can pictures of your favorite things here and be able to documents all your experiences.
photos help us relive our ,most precious times.


Darrell Jones
List of Vegetables with Hilarious Sounding Names
Cabbages
Rutabagas
Kohlrabi
Eggplants
Egyptian Walking Onions
from my garden:
The Onion


Conciergerie
Loading…
Should not appear
Should not appear
idem
Should not appear
Username
Password
Credential creation
Username
Password
Credential recovery
Username
Password


CAMERADERIE
Welcome onboard the 3rd edition of Cameraderie contest which is a celebration of the passion for photography. With many more categories to submit photographs, this edition for the first time is introducing Videography contest to complete the magic that can be captured by a camera lens.
Click Here


Messages
Hello. How are you today?
11:00Hey! I'm fine. Thanks for asking!
11:01Sweet! So, what do you wanna do today?
11:02Nah, I dunno. Play soccer.. or learn more coding perhaps?
11:05Hello World!
Some initial bold text
Hello. How are you today?
11:00Hey! I'm fine. Thanks for asking!
11:01Sweet! So, what do you wanna do today?
11:02Nah, I dunno. Play soccer.. or learn more coding perhaps?
11:05Hello World!
Some initial bold text


For more detailed docs see Clutter documentation. Example:
| ||
|
+(otherUnit)
otherUnit can be either [[ClutterUnits]] or [[Number]].
Returns 0 if units are equal, -1 if
unit
self is smaller, 1 if self is bigger than otherUnit .
Returns an value from [[Clutter UNIT]].
value
|


Azure Storage Explorer isn't just about storage accounts. You can also use it to investigate and download data from Azure Cosmos DB or Azure Data Lake.
You've seen how simple it is to create and manage blob and queue resources in your Azure storage account. Now you want to push your understanding further and see how the storage account connects to your developers' Cosmos DB database and data lake, which they use to store infrastructure data for the CRM system.
Here, you'll learn how to create a new Storage Explorer connection to Azure Cosmos DB, create a database, and populate it with content. Finally, you'll see how to connect to an Azure Data Lake Storage Gen2 account, create a container, and upload data into it.
Note
The Azure Cosmos DB integration with Storage Explorer has been deprecated. Any existing functionality will not be removed for a minimum of one year from this release. You should use the Azure Portal, Azure Portal desktop app or the standalone Azure Cosmos explorer instead. The alternative options contain many new features that aren’t currently supported in Storage Explorer.
Before you use Storage Explorer to connect to Azure Cosmos DB with a connection string, you need to create an account.
From Azure Cloud Shell, run this command:
export NAME=cosmos$RANDOM
az cosmosdb create \
--name $NAME \
--kind GlobalDocumentDB \
--resource-group [sandbox resource group name]
This command takes a few minutes to run.
When the command finishes, you'll see JSON structured output with the details of the Cosmos DB account. Note the value of the name of the account for use in a later step.
Next, obtain the primary master key for your Cosmos DB account. You'll use that key to connect Storage Explorer to Azure Cosmos DB.
In Cloud Shell, use the following command:
az cosmosdb keys list \
--name $NAME \
--resource-group [Sandbox resource group] \
--type connection-strings
The command returns a response similar to this JSON:
{
"connectionStrings": [
{
"connectionString": "AccountEndpoint=https://cosmos10632.documents.azure.com:443/;AccountKey=iEMq9yqfmjvrm1yGjbMdhebv6cv6FSFr5C2qAZSHzXmAQTBmP5vvyjdR7kdR3sV054JvAS2HREdYkRXT3xuHmA==;",
"description": "Primary SQL Connection String"
},
{
"connectionString": "AccountEndpoint=https://cosmos10632.documents.azure.com:443/;AccountKey=igsE0P0EJtq68X374aDXvbVS7d3ELcebxxGLMs42uSyjNpAXbnSsVT5zviC3lgre5eYmzXzcC6YqxtodNHCwAA==;",
"description": "Secondary SQL Connection String"
},
{
"connectionString": "AccountEndpoint=https://cosmos10632.documents.azure.com:443/;AccountKey=iskqlnpSh9w9Vndzj8acic5KpFXot7oapHxu53HKowKtLwokpXwT2upimu2hytc8KDQ45tM2jgVWzeR1q1SOGQ==;",
"description": "Primary Read-Only SQL Connection String"
},
{
"connectionString": "AccountEndpoint=https://cosmos10632.documents.azure.com:443/;AccountKey=bngJ453xU0otnkMALdbuTnKGFzL4NX4ppCEWPu5tOdmWRkipelwHa7bIf35E4VIyzvt5VLWwRRpI6Rja9bkePA==;",
"description": "Secondary Read-Only SQL Connection String"
}
]
}
Make a note of the Primary SQL Connection String because you'll need it next.
Next, connect Storage Explorer to Azure Cosmos DB through a connection string.
If necessary, open Storage Explorer and connect to your Azure account.
In the EXPLORER pane, expand Local & Attached.
You'll see a Cosmos DB Accounts item. Right-click it and select Connect to Cosmos DB.
The connection wizard needs the connection string to Azure Cosmos DB. Copy and paste the Primary SQL Connection String you generated earlier into the Connection string box.
You'll now see a Summary view that shows the Account label and name, the account endpoint, and the account key. Verify that they're correct, and then select Connect. Select Next.
The Azure Cosmos DB connection appears in the Cosmos DB Accounts folder, with the view displayed to the right.
You're now connected to your Cosmos DB account.
So far, you've created an Azure Cosmos DB instance and connected to it by using Storage Explorer. Now, you'll use Storage Explorer to create a Cosmos DB database.
In the EXPLORER pane, select the Cosmos DB account that you created earlier. Right-click it and select Create Database.
Give your database the name products and select Enter.
You've now created a database called products in Azure Cosmos DB.
Now that you have a Cosmos DB database, it's time to create a collection. When you create a collection, you'll provide an ID or name, and the maximum storage capacity.
Right-click the products database and select Create collection.
For Collection ID, enter an ID of regions.
Next, specify whether this collection has a finite amount of storage space or whether it will grow to match the size of the collection. A fixed option gives you a maximum collection size of 10 GB.
The last field is Throughput. Accept the default of 400.
Select OK.
You now see that the region's collection is added under the products database. You can add as many collections as you want.
The collection can contain many items. You use Storage Explorer to manage these, including creating new documents in your collection.
In the EXPLORER pane, expand the regions collection. Select Documents.
You now see the regions collection pane. From here, you can manage the data in your collection.
To add a document, select New Document. A new empty document is available in the window below.
Replace the content of the document with this JSON:
{
"id": "66",
"title": "How to create a new document",
"rtime": "30 minutes",
"_etag": "WFFta1FHgQEtttIE1aaa"
}
Select Save.
The new document appears in the ID pane.
Let's now look at connecting to a Data Lake Storage Gen2 account. Before you can use Storage Explorer to manage your Data Lake Storage Gen2 account, you need to create the storage account in Azure.
In Cloud Shell, install the preview extension to enable the creation of Gen2 accounts, currently in preview.
az extension add --name storage-preview
To create the Gen2 storage account, use the az storage account create command:
az storage account create \
--name dlstoragetest$RANDOM \
--resource-group [Sandbox resource group] \
--location westus2 \
--sku Standard_LRS \
--kind StorageV2 \
--hns
Now that you've created a Gen2 storage account, you can connect to it in Storage Explorer.
In Storage Explorer, in the EXPLORER pane, locate Concierge Subscription and expand it to show all the storage accounts.
Right-click Storage Accounts and select Connect to Azure storage.
If you're prompted, sign in with your Azure account.
When the connection is successful, you'll see the dlsstoragetest001 (ADLS Gen2) storage account displayed under the storage accounts. Your account will have a different number suffix.
All containers in an Azure Data Lake Gen2 storage account are blobs. To create a new container:
Right-click the dlsstoragetest001 storage account, and select Create Blob Container from the shortcut menu.
Name the new container myfilesystem.
When the container is created, the pane for the container appears. There, you can manage the container contents.
With the new myfilesystem container created, you can now upload files or folders to it.
To upload a file, select the Upload option, and select Upload Files.
In the dialog box, use the ellipsis (...) to select the file that you want to upload.
Select the Upload button.
The file is available to the myfilesystem container.
You can upload as many files as you want to this folder. Also, you can create an unlimited number of folders. You can then organize and manage the content in your folders, as you do with your file system.


class YARD::Parser::Ruby::Legacy::StatementList
Constants
- OPEN_BLOCK_TOKENS
The following list of tokens will require a block to be opened if used at the beginning of a statement.
Attributes
Public Class Methods
Creates a new statement list
@param [TokenList, String] content the tokens to create the list from
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 16 def initialize(content) @shebang_line = nil @encoding_line = nil @comments_last_line = nil if content.is_a? TokenList @tokens = content.dup elsif content.is_a? String @tokens = TokenList.new(content.delete("\r")) else raise ArgumentError, "Invalid content for StatementList: #{content.inspect}:#{content.class}" end parse_statements end
Private Instance Methods
Handles the balancing of parentheses and blocks
@param [RubyToken::Token] tk the token to process @return [Boolean] whether or not the current statement's parentheses and blocks
are balanced after +tk+
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 361 def balances?(tk) unless [TkALIAS<EMAIL_ADDRESS>|| @before_last_ns_tk.class == TkALIAS if [TkLPAREN, TkLBRACK, TkLBRACE, TkDO, TkBEGIN].include?(tk.class) @level += 1 elsif OPEN_BLOCK_TOKENS.include?(tk.class) @level += 1 unless tk.class == TkELSIF elsif [TkRPAREN, TkRBRACK, TkRBRACE, TkEND].include?(tk.class) && @level > 0 @level -= 1 end end @level == 0 end
Returns the next statement in the token stream
@return [Statement] the next statement
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 44 def next_statement @state = :first_statement @statement_stack = [] @level = 0 @block_num = 0 @done = false @current_block = nil @comments_line = nil @comments_hash_flag = nil @statement = TokenList.new @block = nil @comments = nil @last_tk = nil @last_ns_tk = nil @before_last_tk = nil @before_last_ns_tk = nil @first_line = nil until @done tk = @tokens.shift break if tk.nil? process_token(tk) @before_last_tk = @last_tk @last_tk = tk # Save last token unless [TkSPACE, TkNL, TkEND_OF_SCRIPT].include? tk.class @before_last_ns_tk = @last_ns_tk @last_ns_tk = tk end end # Return the code block with starting token and initial comments # If there is no code in the block, return nil @comments = @comments.compact if @comments if @block ||<EMAIL_ADDRESS>sanitize_statement_end sanitize_block @statement.pop if [TkNL, TkSPACE<EMAIL_ADDRESS>stmt = Statement.new(@statement, @block, @comments) if @comments && @comments_line stmt.comments_range = (@comments_line..(@comments_line + @comments.size - 1)) stmt.comments_hash_flag = @comments_hash_flag end stmt elsif @comments @statement << TkCOMMENT.new(@comments_line, 0) @statement.first.set_text("# " + @comments.join("\n# ")) Statement.new(@statement, nil, @comments) end end
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 33 def parse_statements loop do stmt = next_statement break if stmt.nil? self << stmt end end
Returns the next token in the stream that's not a space
@return [RubyToken::Token] the next non-space token
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 387 def peek_no_space return @tokens.first unless @tokens.first.class == TkSPACE @tokens[1] end
Processes a token in a block
@param [RubyToken::Token] tk the token to process
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 193 def process_block_token(tk) if balances?(tk) @statement << tk @state = :first_statement process_statement_end(tk) elsif @block_num > 1 || (@block.empty? && [TkSPACE, TkNL].include?(tk.class)) @statement << tk else if @block.empty? @statement << TkBlockContents.new(tk.line_no, tk.char_no) end @block << tk end end
Processes a complex block-opening token; that is, a block opener such as
while
or for
that is followed by an expression
@param [RubyToken::Token] tk the token to process
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 292 def process_complex_block_opener(tk) return unless OPEN_BLOCK_TOKENS.include?(tk.class) @current_block = tk.class @state = :block_statement true end
Processes a comment token that comes before a statement
@param [RubyToken::Token] tk the token to process @return [Boolean] whether
or not tk
was processed as an initial comment
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 212 def process_initial_comment(tk) if @statement.empty? && (@comments_last_line || 0) < tk.line_no - 2 @comments = nil end return unless tk.class == TkCOMMENT case tk.text when Parser::SourceParser::SHEBANG_LINE if !@last_ns_tk && !@encoding_line @shebang_line = tk.text return end when Parser::SourceParser::ENCODING_LINE if (@last_ns_tk.class == TkCOMMENT && @last_ns_tk.text == @shebang_line) || !@last_ns_tk @encoding_line = tk.text return end end return if<EMAIL_ADDRESS>&& @comments return if @first_line && tk.line_no > @first_line if @comments_last_line && @comments_last_line < tk.line_no - 1 if @comments && @statement.empty? @tokens.unshift(tk) return @done = true end @comments = nil end @comments_line = tk.line_no unless @comments # Remove the "#" and up to 1 space before the text # Since, of course, the convention is to have "# text" # and not "#text", which I deem ugly (you heard it here first) @comments ||= [] if tk.text.start_with?('=begin') lines = tk.text.count("\n") @comments += tk.text.gsub(/\A=begin.*\r?\n|\r?\n=end.*\r?\n?\Z/, '').split(/\r?\n/) @comments_last_line = tk.line_no + lines else @comments << tk.text.gsub(/^(#+)\s{0,1}/, '') @comments_hash_flag = $1 == '##' if @comments_hash_flag.nil? @comments_last_line = tk.line_no end @comments.pop if @comments.size == 1 && @comments.first =~ /^\s*$/ true end
Processes a simple block-opening token; that is, a block opener such as
begin
or do
that isn't followed by an
expression
@param [RubyToken::Token] tk the token to process
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 267 def process_simple_block_opener(tk) return unless [TkLBRACE, TkDO, TkBEGIN, TkELSE].include?(tk.class) && # Make sure hashes are parsed as hashes, not as blocks (@last_ns_tk.nil? || @last_ns_tk.lex_state != EXPR_BEG) @level += 1 @state = :block @block_num += 1 if @block.nil? @block = TokenList.new tokens = [tk, TkStatementEnd.new(tk.line_no, tk.char_no)] tokens = tokens.reverse if TkBEGIN === tk.class @statement.concat(tokens) else @statement << tk end true end
Processes a token that closes a statement
@param [RubyToken::Token] tk the token to process
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 304 def process_statement_end(tk) # Whitespace means that we keep the same value of @new_statement as last token return if tk.class == TkSPACE return unless # We might be coming after a statement-ending token... (@last_tk && [TkSEMICOLON, TkNL, TkEND_OF_SCRIPT].include?(tk.class)) || # Or we might be at the beginning of an argument list (@current_block == TkDEF && tk.class == TkRPAREN) # Continue line ending on . or :: return if @last_tk &&<EMAIL_ADDRESS># Continue a possible existing new statement unless we just finished an expression... return unless (@last_tk && [EXPR_END, EXPR_ARG].include?(@last_tk.lex_state)) || # Or we've opened a block and are ready to move into the body (@current_block && [TkNL, TkSEMICOLON].include?(tk.class) && # Handle the case where the block statement's expression is on the next line # # while # foo # end @last_ns_tk.class != @current_block && # And the case where part of the expression is on the next line # # while foo || # bar # end @last_tk.lex_state != EXPR_BEG) # Continue with the statement if we've hit a comma in a def return if @current_block == TkDEF && peek_no_space.class == TkCOMMA if [TkEND_OF_SCRIPT, TkNL, TkSEMICOLON].include?(tk.class) && @state == :block_statement && [TkRBRACE<EMAIL_ADDRESS>&& @level == 0 @current_block = nil end unless @current_block @done = true return end @state = :pre_block @level += 1 @block_num += 1 unless @block @block = TokenList.new @statement << TkStatementEnd.new(tk.line_no, tk.char_no) end end
Processes a single token
@param [RubyToken::Token] tk the token to process
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 129 def process_token(tk) # p tk.class, tk.text, @state, @level, @current_block, "<br/>" case @state when :first_statement return if process_initial_comment(tk) return if @statement.empty? && [TkSPACE, TkNL, TkCOMMENT].include?(tk.class) @comments_last_line = nil if @statement.empty? && tk.class == TkALIAS @state = :alias_statement @alias_values = [] push_token(tk) return end return if process_simple_block_opener(tk) push_token(tk) return if process_complex_block_opener(tk) if balances?(tk) process_statement_end(tk) else @state = :balance end when :alias_statement push_token(tk) @alias_values << tk unless [TkSPACE, TkNL, TkCOMMENT].include?(tk.class) if @alias_values.size == 2 @state = :first_statement if [NilClass, TkNL, TkEND_OF_SCRIPT, TkSEMICOLON].include?(peek_no_space.class) @done = true end end when :balance @statement << tk return unless balances?(tk) @state = :first_statement process_statement_end(tk) when :block_statement push_token(tk) return unless balances?(tk) process_statement_end(tk) when :pre_block @current_block = nil process_block_token(tk) unless tk.class == TkSEMICOLON @state = :block when :block process_block_token(tk) when :post_block if tk.class == TkSPACE @statement << tk return end process_statement_end(tk) @state = :block end if @first_line == tk.line_no &&<EMAIL_ADDRESS>&& TkCOMMENT === tk process_initial_comment(tk) end end
Adds a token to the current statement, unless it's a newline, semicolon, or comment
@param [RubyToken::Token] tk the token to process
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 379 def push_token(tk) @first_line = tk.line_no if @statement.empty? @statement << tk unless @level == 0 && [TkCOMMENT].include?(tk.class) end
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 110 def sanitize_block return unless @block extra = [] while [TkSPACE, TkNL<EMAIL_ADDRESS><EMAIL_ADDRESS>if TkSEMICOLON === @block.last<EMAIL_ADDRESS>end @statement.each_with_index do |token, index| if TkBlockContents === token @statement[index, 1] = [token, *extra] break end end end
# File lib/yard/parser/ruby/legacy/statement_list.rb, line 95 def sanitize_statement_end extra = [] (@statement.size - 1).downto(0) do |index| token = @statement[index] next unless TkStatementEnd === token while [TkNL, TkSPACE, TkSEMICOLON].include?(@statement[index - 1].class) extra.unshift(@statement.delete_at(index - 1)) index -= 1 end @statement.insert(index + 1, *extra) break end end


{{name}} Github
Awesome, you're using Gulper! To get started with a totally blank template, follow the below instructions to strip out everything relating to the start page.
a) main.scss - remove @import "startpage";
b) delete _startpage.scss
a) delete gulp.png
a) app.js - remove require('./start-page');
b) delete start-page.js
c) delete /controllers/controller.js
a) delete everything inside <!-- start-page --> ... <!-- /start-page -->


Dean of Jonathan M. Tisch College of Civic Life Alan Solomont may as well have coined the term “civic life” at Tufts, as it relates to millennials and students in higher education. It’s a phrase that encompasses students engaging on a daily basis in political issues such as discourse and participation in voting, non-profit work and public service. Recently, the $15 million donation from Tufts Co-Chairman of the Board of Trustee Jonathan Tisch (A ’76) shows Tisch College’s continued commitment to civic activity.
This endowment comes at the crucial time where a study from the Tisch College Center for Information and Research on Civic Learning and Engagement (CIRCLE) shows that young people from the ages of 18-29 have a pivotal role in determining the outcome of the 2016 presidential elections and have shown much better turnout rates during the primaries in general.
To gauge the political climate at Tufts in the midst of the current presidential primaries, the Daily and the Tufts Independent Data Journal (Enigma) sent out a survey to the student body. The survey opened on March 1 — Super Tuesday — and closed on the following Sunday, March 6, allowing people to respond for a total of five days. The survey received a total of 294 responses from both the School of Arts and Sciences and the School of Engineering.
Party alignments and elections
In terms of party affiliations, the survey results show that 72 percent of Tufts students align themselves with the Democratic party, while seven percent with the Republican party, two percent with the Libertarian party and 19 percent are Independent voters.
This is different from a recent Gallup poll from January 2016, wherein on average 43 percent of the United States identified themselves as Independent, 30 percent Democrat and 26 percent Republican.
However, in terms of the 2016 presidential election, while the “RealClearPolitics” polls show that Clinton is barely ahead of Sanders in the Democratic primary and Trump is dominating the GOP primary, the survey results tell a different story.
The survey results show that both Senator Bernie Sanders (I-VT) and Hillary Clinton, former Secretary of State, are strongly favored by Tufts students, each receiving 43 percent and 37 percent, respectively, of the total votes of the survey. While Sanders defeats Clinton and wins the Democratic nomination, among Republicans, Marco Rubio would win the GOP nomination (the survey was released before he suspended his presidential campaign). The results also reveal that Sanders would become our next President, if all candidates from both the GOP and the Democrat compete in the general election.
Political issues and social topics
Regarding social justice topics or systemic equality issues, Tufts students have a firm and mostly unanimous stance, which is unsurprisingly further left than the general population.
According to a March report from the Williams Institute, recent U.S. political trends support all LGBT rights, despite North Carolina passing a controversial anti-trans bill that requires all people to use bathrooms that match their birth sex, regardless of their present gender identity. When the Jumbos were asked whether or not they support transgender rights, the survey shows near unanimous support of 92 percent.
Other equality-related topics, such as affirmative action programs and minimum wage increases, were by the majority of Tufts students either “strongly supported” or “supported.” One of the issues is the voter ID law. Supporters of this law assert that this mandate would protect the integrity of our democracy and prevent voter fraud. However, 63 percent of Tufts students take the opposite view, in line with critics who believe this law would disenfranchise minorities.
When it comes to international affairs, respondents were less sure how to feel, and the survey results were less unanimous. However, in the administration of the survey, most questions did not explain or describe the topic. When asking questions like, “Do you support/oppose the Iran deal?” response choices included “neutral” but did not include “do not know.”
Additionally, for the question about the Trans-Pacific Partnership, a trade agreement among 12 Pacific Rim countries aimed at promoting economic growth, about half of the responses were neutral and the percentages of support and opposition were roughly the same.
Regarding U.S. support for Israel and Saudi Arabia, responses were inclined towards “oppose,” but most respondents remain relatively neutral about these topics.
However, regarding attitude towards Syrian refugees, the results show that 59 percent of the respondents “strongly support” and 30 percent “support” accepting refugees, despite the survey not specifying to which country.
Amongst the most unanimous opinions were stances supporting a ban on assault rifles, which receives 83 percent of the responses, and subsidizing energy sources such as wind, solar and hydro power, which receives 89 percent.
Political engagement on campus
With organizational efforts to engage students in turnout and other political discourse, such as the institution of JumboVote 2016, 84 percent of Tufts students think that civic education in a democracy is “very important,” with second-year students valuing it the most out of all four classes. About 50 percent of students talk about politics “all the time” with their friends, while another 43 percent talk about it “sometimes, if it comes up.”
On the other side, regarding attitudes of political engagement, on average, the survey respondents rate the U.S. election process a 4.2 on a scale of 10 (with 10 being the best) based on efficiency, fairness, equal representation and other factors. Juniors are the least optimistic about this process and gave it an average rating of a 3.6, while sophomores are the most optimistic with a 5.5.


Due to Beautiful Dream Forever's service provider being Unity, some user data may be collected while playing the game. Some examples of why Unity collects this data, as stated in its privacy policy, are to check for software updates, provide aggregated usage statistics, provide analytics and advertising services, and validate license keys in order to prevent unauthorized use. See Unity's privacy policy for more information on the data it collects.


DELHI PUBLIC SCHOOL
(under aegis of delhi public school society
Kalyanpur, kanpur
Mail at www.dpskalyanpur.com
Contact at- 666-444-000
(under aegis of delhi public school society
Kalyanpur, kanpur
Mail at www.dpskalyanpur.com
Contact at- 666-444-000
GALLERY


PullUpExerciseName
public struct PullUpExerciseName : ExerciseName
extension PullUpExerciseName: Hashable
Pull Up Exercise Name
-
Exercise Name Type
Declaration
Swift
public typealias ExerciseNameType = PullUpExerciseName
-
Exercise Catagory Type
Declaration
Swift
public var catagory: ExerciseCategory { get }
-
Exercise Name
Declaration
Swift
private(set) public var name: String { get }
-
Exercise Name Number
Declaration
Swift
private(set) public var number: UInt16 { get }
-
List of Supported ExerciseNames
Declaration
Swift
static var supportedExerciseNames: [PullUpExerciseName] { get }
-
Creates a ExerciseName Object
Declaration
Swift
static func create(rawValue: UInt16) -> PullUpExerciseName?


General information |
|
|---|---|
Interface to many species occurrence data sources |
|
Queries |
|
Search for species occurrence data across many data sources. |
|
Search for species names across many data sources. |
|
Look up options for parameters passed to each source for occ_names function |
|
Look up options for parameters passed to each source |
|
|
|
spocc objects and their print, plot, and summary methods |
Query helpers - Bounding boxes |
|
Convert a bounding box to a Well Known Text polygon, and a WKT to a bounding box |
|
Visualize well-known text area's on a map. |
|
Output enrichment and cleaning |
|
Get more data on individual occurrences |
|
Change names to be the same for each taxon. |
|
A note about duplicate occurrence records |
|
Output conversion |
|
Combine results from occ calls to a single data.frame |
|
Coerce occurrence keys to ALA id objects |
|
Coerce occurrence keys to bisonkey/occkey objects |
|
Coerce occurrence keys to ecoenginekey/occkey objects |
|
Coerce occurrence keys to gbifkey/occkey objects |
|
Coerce occurrence keys to idigbio objects |
|
Coerce occurrence keys to iNaturalist id objects |
|
Coerce occurrence keys to obis id objects |
|
Coerce occurrence keys to vertnetkey/occkey objects |


Want to see how I did it?
- Assemble all elements together.
- Pour the nut butter into all the ingredients.
- Start mixing them all, exept the coconut flakes. It should resemble a somewhat sticky dough that holds together when lightly squeezed.
- Shape them into a spherical shape with your hands.
- Pour the coconut flakes over them and enjoy!
Click here if completed.
Click here if completed.
Click here if completed.
Click here if completed.
Click here if completed.


Burkina says 3 assailants killed in 'terrorist attack'
At least three assailants were killed in a "terrorist attack" on army troops on Monday, Burkina Faso's military said, five days after the country suffered its worst casualties in a long-running jihadist revolt.
A detachment in Foutouri, in the eastern province of Komandjari, came under attack at around 05:00, the army said in a statement.
"The vigorous response neutralised at least three assailants and led to the seizure of weapons and ammunition," it said, adding that two troops were treated for "light wounds" and then evacuated.
On Wednesday, 38 people were killed and 63 injured when rebels in eastern Burkina ambushed a convoy carrying employees of a Canadian mining company.
It was the biggest one-day death toll in the history of a nearly five-year-old jihadist insurgency which spread to the fragile Sahel state from neighbouring Mali.
Nearly 700 people have died, according to an AFP toll, and around half a million people have fled their homes, according to UN figures.


Records identified through database searching (n = 160)
Additional records identified through other sources (n=0)
|
|
Records after duplicates removed (n=75)
|--—---
Irrelevant studies excluded (n= 20)
Records remaining after reading titles and abstracts (n = 55)
-—.
Studies without appropriate data excluded (n = 32)
Full-text articles assessed for eligibility (n= 23)
|
Articles included in final meta-analysis (n = 23)
Studies for RASSF1A (n=12)
Studies for RARB (n=4)
Studies for CDH1 (n=
13)


EVO HTML to PDF Converter allows you to add a hierarchy of bookmarks to a PDF document. You can save the created PDF document to a file, a stream or in a memory buffer.
In this demo you can see how to create a hierarchy of bookmarks in a PDF document, set the bookmarks text, color and style.
You can also see how to set the zoom level and fit options used when the PDF page pointed by a bookmark is displayed in a PDF viewer.


|
commitHeaders
|
fun commitHeaders(: OutgoingContent): Unit |
|
push
|
open fun push(builder: ResponsePushBuilder): Unit |
|
respondFromBytes
|
open suspend fun respondFromBytes(bytes: ByteArray): Unit |
|
respondFromChannel
|
open suspend fun respondFromChannel(readChannel: ByteReadChannel): Unit |
|
respondOutgoingContent
|
open suspend fun respondOutgoingContent(content: OutgoingContent): Unit |
|
respondUpgrade
|
abstract suspend fun respondUpgrade(upgrade: ProtocolUpgrade): Unit |
|
respondWriteChannelContent
|
open suspend fun respondWriteChannelContent(content: WriteChannelContent): Unit |
|
responseChannel
|
abstract suspend fun responseChannel(): ByteWriteChannel |
|
setStatus
|
abstract fun setStatus(statusCode: HttpStatusCode): Unit |
|
status
|
open fun status(): HttpStatusCode?
open fun status(value: HttpStatusCode): Unit |


Guard Singa:
Welcome, stranger! It can't be a coincidence that you've come here! Well, because I was just about to embark upon and adventure to Caron's Dungeon, and now a brave adventurer appears before me! Surely the gods mean this as a good omen! Ha ha!
"Tell me about Caron's Dungeon."
"Who is the lord of the manor and what is the tax rate?"
Quest


Welcome to AtomThreadsPortingSTM8LDISCOVERY’s documentation!¶
Indices and tables¶
# Atom Threads porting on STM8L Discovery
This our purpose is make a sample project that run 2 thread with Atom Threads RTOS on STM8L Discovery [![Build Status](https://travis-ci.org/wathui99/FPT_Lab.svg?branch=master)](https://travis-ci.org/wathui99/FPT_Lab)
## Getting Started
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
### Prerequisites
What things you need to install the software and how to install them 1. STM8L Discovery Board
Ofcourse, we can’t run our code in the air, if you’re in VietNam, this board is sold at [hshop][Buy STM8L Discovery] However, theoretically, you can use any chip what supported by Atom Threads (can see at [Atom Threads homepage][Atom Threads homepage]
IAR Complier
Atom Threads RTOS
Optional
These are not really nescessary but they make it easier:
Document of STM8L: [Datasheet](https://www.st.com/resource/en/datasheet/stm8l151m8.pdf), [User manual](https://www.st.com/content/ccc/resource/technical/document/reference_manual/2e/3b/8c/8f/60/af/4b/2c/CD00218714.pdf/files/CD00218714.pdf/jcr:content/translations/en.CD00218714.pdf)
Logic Analyzer to measure exacly the quantumn time, it not a big deal but use a quantumn timer without handle it is not a good way to do.
`
Give examples
`
### Installing (must be clean but chưa có gì để viết)
A step by step series of examples that tell you how to get a development env running
Say what the step will be
`
Give the example
`
And repeat
`
until finished
`
End with an example of getting some data out of the system or using it for a little demo
## Running the tests (merge còn chưa xong chạy con mẹ gì)
Explain how to run the automated tests for this system
### Break down into end to end tests
Explain what these tests test and why
`
Give an example
`
### And coding style tests
This sample follow [Linux kernel convention](https://www.kernel.org/doc/html/v4.10/process/coding-style.html) You can see the following at the top of each header file, that the way we sign.
``` /**
@author NguyenLuongDuyKhanh
@date June-2019
@course FGA-UIT training course
@attention
I wrote this libary to use in course only.
Any problem, please contact me at:
*/
## Deployment
It has 2 mode: DEBUG and RELEASE, the way to switch is define or undefine macro ‘’’Tụi bây chưa đưa tao cái Macro này’’’ at the ‘’’test-main.c’’’ By using RELEASE mode, all functions use LCD, Uart,… to debug will be disable, it make CPU recovery resource to perform.
## Built With
[Dropwizard](http://www.dropwizard.io/1.0.2/docs/) - The web framework used
[Maven](https://maven.apache.org/) - Dependency Management
[ROME](https://rometools.github.io/rome/) - Used to generate RSS Feeds
## Authors
Billie Thompson - Initial work - [Contact](https://github.com/PurpleBooth)
Trần Quang Diệu - Work on GPIO STM8L - [Contact](https://github.com/PurpleBooth)
Nguyễn Trần Kha - Work on clock general - [Contact](https://github.com/PurpleBooth)
Nguyễn Lương Duy Khánh Làm màu nhất nhóm - [Contact](https://github.com/NguyenLuongDuyKhanh)
Lê Hoàng Phúc - Work on Atom Threads - [Contact](https://github.com/PurpleBooth)
Lê Trọng Thức - Work on Atom Threads - [Contact](https://github.com/wathui99)
See also the list of [contributors](https://github.com/your/project/contributors) who participated in this project.
## License
This project is licensed under the BSD License (cause the AtomThreads project has it) - see the [LICENSE.md](LICENSE.md) file for details
## Acknowledgments
The honest thanks to Kelvin Lawson with his Atom Threads RTOS, we’ve learning a lot of news about how an operating system work. We pleasure to become Atom’s contributors with this sample porting.
Thank our trainers at FPT Golbal Automotive - UIT LAB. Thank to Mr.KietDD, Mr.DanhDC1, Mr.VuCH1, Mr.NguyenTD3, Mr.TraHT, Ms.HueVTT and special, Mr.KhoaHVD with his RTOS lession.
Thank to Ngô Lan Hương with [Ngô Lan Hương Offical](https://www.youtube.com/channel/UC6wjclMOHQJwOHrvqVRi5Jw), Hương’s channel help us to relax affter work-day.
Thank to Faculty of Computer Engineering, we got our backgound at computer and semiconductor technology at here
[Buy STM8L Discovery](https://hshop.vn/products/kit-stm8l-discovery) [Atom Threads homepage] (http://atomthreads.com/)


has population of
million
World's population:
million
has population of
,
% of the world's population


Pants Style Guide
The Pants project has accumulated a number of conventions around organizing code within the project. This document tries to cover some of the common style issues that new contributors run into in their first contributions to the project.
A number of style checks are already automated. Some of these are covered by the pre-commit script (setup instructions). Others are run as when tests are run.
Beyond that, we've got a number of guidelines that haven't been automated.
Comments
Comments must have a space after the starting #
. All comments must be formed with complete
sentences including a period.
Good
# This is a good comment.
Bad
#Not This
Indentation, Line lengths
- Pants uses a code line width of 100 characters.
- Pants code uses 2 spaces for indentation.
String Interpolation and formatting
- Prefer
.format
for formatting strings over using%
.
Collection Literals
Where possible, use the literals for the various collection types.
Sets
a_set = {a} # Instead of a_set = set([a])
Tuples
a_tuple = (a, b) another_tuple = (a,) # Instead of a_tuple = tuple([a, b]) another_tuple = tuple([a])
Generated by publish_docs
from dist/markdown/html/src/docs/styleguide.html 2016-07-05T14:34:35.758129


--- ---
Determines the unwrapping behavior of asynchronous resolve values.
WAIT
(default)NOWAIT
RXWAIT
The Transition
will not wait for the resolve promise(s) from main
to settle before continuing.
Resolves for main
will be provided to components wrapped in a Promise
.
The Transition
will wait for the main.home
resolve promises.
Resolved values will be unwrapped before being provided to components.
var mainState = {
name: 'main',
resolve: mainResolves, // defined elsewhere
resolvePolicy: { async: 'NOWAIT' },
}
var homeState = {
name: 'main.home',
resolve: homeResolves, // defined elsewhere
resolvePolicy: { async: 'WAIT' }, // default
}
Defines when a Resolvable is resolved (fetched) during a transition
LAZY
(default)EAGER
Resolves for main
and main.home
are fetched when each state is entered.
All of main
resolves are processed before fetching main.home
resolves.
var state = {
name: 'main',
resolve: mainResolves, // defined elsewhere
resolvePolicy: { when: 'LAZY' }, // default
}
var state = {
name: 'main.home',
resolve: homeResolves, // defined elsewhere
resolvePolicy: { when: 'LAZY' }, // default
}
Resolves for main
and main.home
are fetched at the same time when the transition starts.
This happens earlier in the lifecycle than when states are entered.
All of the main
and main.home
resolves are fetched as soon as possible.
var mainState = {
name: 'main',
resolve: mainResolves, // defined elsewhere
resolvePolicy: { when: 'EAGER' },
}
var homeState = {
name: 'main.home',
resolve: homeResolves, // defined elsewhere
resolvePolicy: { when: 'EAGER' },
}
Generated using TypeDoc
Defines how a resolve is processed during a transition
This object is the StateDeclaration.resolvePolicy property.
Example:
// Fetched when the resolve's state is being entered. // Wait for the promise to resolve. var policy1 = { when: "LAZY", async: "WAIT" } // Fetched when the Transition is starting. // Do not wait for the returned promise to resolve. // Inject the raw promise/value var policy2 = { when: "EAGER", async: "NOWAIT" }
The policy for a given Resolvable is merged from three sources (highest priority first):
Example:
// Wait for an Observable to emit one item. // Since `wait` is not specified, it uses the `wait` // policy defined on the state, or the global default // if no `wait` policy is defined on the state var myResolvablePolicy = { async: "RXWAIT" }


Last time we looked at fixing unneeded files in a pull request, but what about unneeded files when just pulling down files? Before creating a new branch it's a good idea to get the latest version of an upstream repository, but sometimes new or edited local files prevent it. You're happy overwriting them but Git refuses. Here's how to fix it and make Git happy.
Firstly, let's try pulling the upstream files and see what happens:
git pull upstream master
The other day I did this and got an error because of local files that had changed, with a message saying "Please, commit your changes or stash them before you can merge." Git then showed a list of the files that caused the conflict. Luckily it's easy to overwrite the local changes. Very simply, we just checkout the local files into a kind of no-man's land where you can forget about them:
git checkout -- [filename]
Do this for each file that the error message warned you about and then you can pull as usual:
git pull upstream master
Please remember that this is only for files that you're happy to overwrite, in which case it's problem solved!


| 041:015 Khan | : |
As for 'Ad, they were arrogant in the land without right, and they said: "Who is mightier than us in strength?" See they not that Allah, Who created them was mightier in strength than them. And they used to deny Our Ayat (proofs, evidences, verses, lessons, revelations, etc.)! |
| 041:015 Maulana | : |
Then as to 'Ad, they were unjustly proud in the land, and said: Who is mightier than we in power? See they not that Allah Who created them is mightier than they in power? And they denied Our messages. |
| 041:015 Pickthal | : |
As for A'ad, they were arrogant in the land without right, and they said: Who is mightier than us in power? Could they not see that Allah Who created them, He was mightier than them in power? And they denied Our revelations. |
| 041:015 Rashad | : |
As for 'Aad, they turned arrogant on earth, opposed the truth, and said, "Who is more powerful than we?" Did they not realize that GOD, who created them, is more powerful than they? They were unappreciative of our revelations. |
| 041:015 Sarwar | : |
The people of Ad unjustly sought dominance on earth saying, "Who is more powerful than us?" Did they not consider that God created them and that He is more powerful than they were?" They rejected Our revelations. |
| 041:015 Shakir | : |
Then as to Ad, they were unjustly proud in the land, and they said: Who is mightier in strength than we? Did they not see that Allah Who created them was mightier than they in strength, and they denied Our communications? |
| 041:015 Sherali | : |
As for Ad, they behaved arrogantly in the earth without justification and said, 'Who is mightier than we in power?' Do they not see that ALLAH, Who created them, is mightier than they in power? Still they continued to deny Our Signs. |
| 041:015 Yusufali | : |
Now the 'Ad behaved arrogantly through the land, against (all) truth and reason, and said: "Who is superior to us in strength?" What! did they not see that Allah, Who created them, was superior to them in strength? But they continued to reject Our Signs! |
Concepts/Themes Covered: القصص والتاريخ > (عاد (قوم هود The Stories and the History>Ad(Hud's People)
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


| CS 107 - Introduction to Scientific Computation Homework #7 |
1. RNA Transcription: DNA and RNA consist of sequences of nucleotides.
DNA nucleotides each contains one of the following bases: adenine, cytosine,
guanine, and thymine, abbreviated A, C, G, and T, respectively. In
bioinformatics, a DNA sequence is often represented as a string made up of these
abbreviated base names (e.g. "GATTACA"). RNA uses uracil (U) in place of
thymine (T). When RNA is transcribed from DNA, the result is a "copy" of
the DNA sequence with uracil (U) substituted in the RNA for each occurrence of
thymine (T) in the DNA. Create a function transcribe.m
that takes a string
of DNA bases, and returns the corresponding string of transcribed RNA bases.
For example:
>> transcribe('GATTACA') ans = GAUUACA
2. RNA Codon Translation: Exercise 8.7. Create a function
rna2amino
that takes two arguments, an RNA nucleotide sequence
string and a starting index, and returns the amino acid sequence string that
would be translated.
Hint: One approach makes use of a switch/case statement to map sets of codons to the smaller number of acids/'Stop'. Another approach would be to start your definition as follows:
function res = rna2amino(bases, startIndex) acids = ['Phe'; 'Ser'; 'Tyr'; 'Cys'; ... 'Phe'; 'Ser'; 'Tyr'; 'Cys'; ... 'Leu'; 'Ser'; 'Stp'; 'Stp'; ... 'Leu'; 'Ser'; 'Stp'; 'Trp'; ... 'Leu'; 'Pro'; 'His'; 'Arg'; ... 'Leu'; 'Pro'; 'His'; 'Arg'; ... 'Leu'; 'Pro'; 'Gln'; 'Arg'; ... 'Leu'; 'Pro'; 'Gln'; 'Arg'; ... 'Ile'; 'Thr'; 'Asn'; 'Ser'; ... 'Ile'; 'Thr'; 'Asn'; 'Ser'; ... 'Ile'; 'Thr'; 'Lys'; 'Arg'; ... 'Met'; 'Thr'; 'Lys'; 'Arg'; ... 'Val'; 'Ala'; 'Asp'; 'Gly'; ... 'Val'; 'Ala'; 'Asp'; 'Gly'; ... 'Val'; 'Ala'; 'Glu'; 'Gly'; ... 'Val'; 'Ala'; 'Glu'; 'Gly'];This is a 64x3 character array that has the take amino acid entries left-to-right, top-to-bottom. Suppose you used strfind('UCAG', base) - 1, to assign an individual base a number (e.g. strfind('UCAG', 'A') - 1 → 2). Consider, for a given codon, how the change of a single base's number in a single position (holding all others fixed) affects the index of the desired acid. Form a mathematical expression from the codon's three base numbers to the acid (converting a 'Stp' result to 'Stop').
3. Dot Plot: A dot plot is a means of visually comparing similarity of two base sequences. Given two strings s1 and s2 of bases, coordinate (i, j) of the plot is black if s1(i) == s2(j), and is white otherwise. NOTE: Strings s1 and s2 may have different lengths. We'll accomplish this by building a 2D array (i.e. a matrix) x of 0's and 1's, corresponding to mismatches and matches, respectively. We plot them as follows:
colormap(gray(2)); image(2 - x); axis ij; axis square;
For example,
dotPlot('gattaca','gattaca')
yields
Create function
dotPlot
that takes two base sequence strings, computes the dotplot
data matrix, plots it as above, and returns the dotplot matrix.


Please select individual user to display their to-do's or select all to display all users to-do's
All
1
2
3
4
5
6
7
8
9
10
Total:
Completed:
ID
Title


namespace staticqm. Record
Source: qminerdoc.
Record (factory pattern).
Properties
$fq
Returns the frequency of the record.
$id
Returns the id of the record.
$name
Returns the name of the record.
store
Returns the store the record belongs to.
Methods
$clone() → module:qm.Record
Clones the record.
- Returns
-
module:qm.Record
The clone of the record.
toJSON() → Object
Creates a JSON version of the record.
- Returns
-
Object
The JSON version of the record.


This system is developed by a team of five students. The students are from various disciples which include Information technology, Computer science and Biomedical Engineering. With the help of our project supervisor Mr. Abandoh-Sam, we are able to create this system.
LIMS is provides an efficient records management software and customer relationship management.
We make information regarding your health easy to get in our website.
We provide advice on the issues regarding your health in an easy way with a click of the button.
We have built the system help with your health needs.
LIMS is also design to assist you get your test result and doctor’s report on time without having to go the hospital.
We are dedicated to give you the best.


黒の手番です。62 はどう動かしますか？


KARNAWAT
Nick
Switch Financial Year
Log Out
Dashboard
Master
Company
Units
Customer
User
Financial Year
Financial Month
Transporter
Performa Invoice
Add
List
Invoice
Add
List
Export List
Vouchers
Reciepts
Add
List
Performa
Invoice
Home
Performa Invoice
Add Performa Invoice
Company
--Company--
Karnawat
Php Poets
Invoice No.
KARNAWAT/19-20/IN-001
Customer Name
---Select---
Karnawat
Transaction Date
Customer Address
Select Default Address
GSTIN Number
Invoice Detail
S.No
Description
Quantity
Rate
Amount
Actions
Total
CGST 9%
SGST 9%
Total INR
Cancel
Save
×
Select Default Addresses
sector 11
savina
surajpole
hathipole
---Unit---
Sq. Feet
Sq. Meter
MT
Cubic Meter
Cubic Ft.
No. of Pieces


The doorway figure keeps talking to you in a yell whisper. You just ran from that little girl down the street's house didn't you? Shes always trying to get folks to play boardgames with her and her alligator. Yeah! you reply just a little too loud. Who lets a kid play with an alligator! I think that thing ate her parents and now its raising her the stranger replies. You wanna come in, they ask.


Doctor lookup
Input an issue to try to find a doctor that can treat it in the Portland area
Issue:
Search


Please visit the root site to ensure there is an active session before testing.
Don't forget to deploy & publish your marketing items.
Get's last request for current page and returns detail about current user and events fired. Calls "GetTracker" API endpoint. Returns JQuery Promise, so you can bind to done event for data.
SF.Analytics.getSitecoreEvents();
Identifies visitor as a known contact and optionally sets OOB contact facets for first name, last name and email address.
SF.Analytics.identifyContact(identifier, identifierSource, firstName, lastName, email);
Can be used to raise and track a page load or "client interaction". These actually show up in the Path Analyzer as a state. Use the marketing control panel to define aditional interactions as needed.
SF.Analytics.trackInteraction(interactionItemId);
Can be used to raise a goal by name or Id;
SF.Analytics.trackGoal(goalName); SF.Analytics.trackGoal(goalItemId);
Can be used to raise a page event by name or Id;
SF.Analytics.trackGoal(eventName); SF.Analytics.trackGoal(eventItemId);
Can be used to raise a custom event with custom data. Additional work may be needed to make custom data available in experience analytics.
SF.Analytics.trackCustomEvent(eventName, eventLabel);
Can be used to raise an Outcome by Name or Id. Requires Currency and Value.
SF.Analytics.trackOutcome(outcomeName, currency, value); SF.Analytics.trackOutcome(outcomeId, currency, value);
Can be used to trigger a campaign by name or id.
SF.Analytics.triggerCampaign(campaignName); SF.Analytics.triggerCampaign(campaignId);
Forces End of Session and flush to xDB.
SF.Analytics.endSession();


| File | Statements | Branches | Functions | Lines | |||||
|---|---|---|---|---|---|---|---|---|---|
| api.js | 19.22% | 422/2196 | 16.97% | 85/501 | 10.49% | 41/391 | 20.58% | 422/2051 | |
| base.js | 80% | 12/15 | 50% | 2/4 | 50% | 1/2 | 80% | 12/15 | |
| common.js | 31.58% | 18/57 | 5.45% | 3/55 | 0% | 0/19 | 37.5% | 18/48 | |
| configuration.js | 88.89% | 16/18 | 28.57% | 2/7 | 50% | 1/2 | 88.89% | 16/18 | |
| index.js | 80% | 12/15 | 68.75% | 11/16 | 75% | 3/4 | 80% | 8/10 |


Materialize Components implements components with Vue.js + Materialize.css. There is no jQuery, only Vue as Javascript library.
Material Components provide quick and easy templating and creating of Material Design interface. They use minimum dependencies. No jQuery, only Vue and Velocity for advance animations.
Component is primary way how to modularize your UI with Vue. There are many components witch implements Material design with materialize.css. All components have out of box dynamic behavior.
Created and designed by Google, Material Design is a design language that combines the classic principles of successful design along with innovation and technology. Google's goal is to develop a system of design that allows for a unified user experience across all their products on any platform.
Materialize.css is CSS framework implements Material Design designed in Google. It uses CSS (SASS) and jQuery. For more info visit materializecss.com.
Vue.js (pronounced /vjuː/, like view) is Javascript library for building web user interfaces. It provides simple and effective solution how to build your UI components by data binding. For more info visit vuejs.org.


AAA Jokes - Mailing List and archives
< Back to Animated backgrounds list
> Forward to Intelligent Websites
This Site is a member of CyberLink Exchange
LinkExchange member


What are the benefits of version control? How does git help you keep track of changes? Why use GitHub to store your code?
Oh crap, I was trying to add some changes that were suggested by my coworkers in Bangladesh, Brazil, and Turkey. But, now I can't find the documents that they sent me. They are gone forever!
You should really use a Version Control System for projects like this. The most popular exmample of it is Git. We use it all the time in software development. It's a life saver! You first have to memorize a few odd phrases in order to use it in your computer's command line, but once you get the hang of it, you'll want to use it everywhere!
I use it all the time cooking! I start the recipe on what I call the [master branch].
Then, when I want to experiment with some new flavors, I can make additional branches to toy with by pressing [git checkout -b new-branch-name]
Why Use GitHub?
GitHub stores your code “in the cloud”. This makes it easy for distributed teams to work on the same project because they can access it from anywhere over the Internet. This makes GitHub an ideal version control tool for both individuals and distributed teams. In addition to hosted version control and source code management, GitHub also provides social networking functionality. Users have profiles that can show their work and contributions. Projects can be discussed publicly to maximize collaboration.


If you are looking for a complete guide on how to start, build and prosper in a Karatbars International home business, has it and you found it.
Check it out!


Objective
This tutorial shows you how to quickly deploy a Grafana application in KubeSphere via App Template, demonstrating the basic functionality of the application repository, application templates, and application management.
Prerequisites
You’ve completed all steps in Tutorial 1.
Hands-on Lab
Step 1: Add a Application Repository
Note: The application repository can be either the Object Storage, e.g. QingStor Object Storage, AWS S3, or GitHub Repository. The packages are composed of Helm Chart template files of the applications. Therefore, before adding an application repository to KubeSphere, you need to create an object storage and upload Helm packages in advance. This tutorial prepares a demo repository based on QingStor Object Storage.
1.1. Sign in with admin
account and navigate to Platform → Platform Settings → App Repositories, then Click Add App Repository.
1.2. Fill in the basic information, name it as demo-repo and input the URL with https://helm-chart-repo.pek3a.qingstor.com/kubernetes-charts/
, you can validate if this URL is available, choose OK when you’ve done.
1.3. Click App Templates on the top of this page, it will automatically import all of the applications from the demo repository.
Step 2: Deploy the Grafana Application
2.1. When you’ve already added the repository, you can logout and sign in with project-regular
account. Then select App Templates on the top of this page, input “grafana” in the search box to find the application.
2.2. Click into grafana, Deploy App and fill in the basic information.
2.3. Name can be customized by yourself, choose the corresponding Workspace (e.g. demo-workspace
) and Project (e.g. demo-project
) as the environment. Then choose Deploy to deploy Grafana to KubeSphere.
2.4. Back to the demo-project
and choose Applications, then you can see the application grafana
showing active
from the application list.
Step 3: View App Details
3.1. Click into grafana
application, you will be able to see its Services and Workloads in Resource Status
page, as well as Environmental Variables and App Template information.
3.2. Next we are going to expose this service outside of the cluster via NodePort. Enter into its service e.g. grafana-l47bmc
, then click More → Edit Internet Access.
3.3. Select NodePort
from the drop down list.
3.4. Therefore it will generate a Node Port, for example, here is 31126
that we can access this service using <$NodeIP>:<$NodePort>
.
Step 4: Access the Grafana Service
At this point, you will be able to access the Nginx service via ${Node IP}:${NODEPORT}
, e.g. http://<IP_ADDRESS>:31126
, or click the button Click to visit to access the Grafana dashboard.
4.1. Note that you have to obtain the account and password from the grafana secret in advance. Navigate to Configuration Center → Secrets, click into grafana-l47bmc (Type: Default).
4.2. Click the button to display the secret information, then copy and paste the value of admin-user and admin-password.
4.3. Open the Grafana log in page, sign in with the admin account.
Next Step
Tutorial 7 - Create Horizontal Pod Autoscaler for Deployment.


I felt a great disturbance in the Force...as if millions of voices suddenly cried out in terror and were suddenly silenced. I fear something terrible has happened. You'd better get on with your exercises. Well, you can forget your troubles with those Imperial slugs. I told you I'd outrun 'em. Don't everyone thank me at once.


Water leaks through damaged pipeline in Anna Nagar
Traffic on the busy Jawaharlal Nehru Road-Shanthi Colony Road junction was affected
by Special CorrespondentWater seeped through a damaged pipeline on the busy Jawaharlal Nehru Road-Shanthi Colony Road junction in Anna Nagar, flooding a portion of the road on Tuesday.
The leak affected traffic on the road, as vehicles had to negotiate the waterlogged stretch to reach Shanthi Colony Road and Third Avenue, Anna Nagar.
Residents noted that the water seeped through the damaged portion of the pipeline during the water supply hours. Drinking water was being wasted for the past one or two days as the water leak has been left unattended, they said. Such water leaks were becoming a recurring phenomenon and damaged the road near the junction, residents said.
The residents demanded the water leak be arrested as the water shortage in the area, which was acute, has decreased only over the past few weeks.
Chennai Metrowater has increased the drinking water supply from 525 million litres of water daily to 650 mld since October-end.
Responding to residents’ complaints, sources at Metrowater said the water leak had occurred due to damage in the joints of the pipeline. Workers are involved in identifying the damage in the 1,200 mm diameter main pipeline on the Jawaharlal Nehru Road opposite VR mall.
“We will repair the pipeline and arrest the leak by Tuesday night,” said an official.


| Job | {{jobExecutionStatus.jobId | getJobNamePipe | async}} | State | {{JobExecutionState[jobExecutionStatus.state]}} | Queue | {{jobExecutionStatus | getUrlQueueForJobExecution | async}} |
|---|
| Start | {{jobExecutionStatus.startTime | date : 'long'}} | End | {{jobExecutionStatus.endTime | date : 'long'}} |
|---|
| Statistics | {{execution.stat}} | Count | {{execution.count}} |
|---|
| State | {{execution.key}} | Count | {{execution.value}} |
|---|
{{error.detail}}


class: title, center, middle .logo[![OSC logo](https://oilslick.github.io/caffeinated.training/images/logo-125px.png)] # Roasting: Intermediate \#CaffeinatedTraining \#OilSlickCoffee
@michael.c.wright
youtube.com/c/MichaelCWright
OilSlickCoffee
Presented: November 29th, 2018 Host:
5758 Coffee Lab
Location: Bandung, Indonesia .footnote[ Press "h" for keyboard shortcuts for this presentation] --- .logo[![OSC logo](/images/logo-125px.png)] # Heat Transfer * Thermal Energy * Heat ≠ Temperature * Conduction, Convection, Radiation --- .logo[![OSC logo](/images/logo-125px.png)] # Conductive Transfer * Physical contact + temperature gradient * Common cause of roast defects * Temperature gradient inside bean * Water content is critical* --- .logo[![OSC logo](/images/logo-125px.png)] # Convective Transfer * Air as a medium or vehicle * Most common transfer method in drum and air roasters * Greater the temp difference between air and bean greater the transfer (potential) --- .logo[![OSC logo](/images/logo-125px.png)] # Radiated Transfer * Electromagnetic radiation (same as the sun) * Some visible, some not * Example: light from heat source, heat felt near a heat source * Metal in roaster acts as a battery, storing energy as heat* --- class: pic ![hot iron](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Hot_metalwork.jpg/800px-Hot_metalwork.jpg) .footnote[ https://upload.wikimedia.org/wikipedia/commons/a/a9/Hot_metalwork.jpg fir0002 | flagstaffotos.com.au [GFDL 1.2 (http://www.gnu.org/licenses/old-licenses/fdl-1.2.html)], from Wikimedia Commons] --- .logo[![OSC logo](/images/logo-125px.png)] # Heat Transfer, Supplemental 1. Drum, Air, Bean 2. Air, Drum, Bean 3. Bean, Drum, Air .footnote[ Terry Davis, "The Heat is On, A Roaster's Guide To Heat Transfer," Roast Magazine May/June 2009] --- .logo[![OSC logo](/images/logo-125px.png)] # Temperature Midway Point ≈ 75 Agtron * New concept * Generates easy color to work/train with * Not meant to be a standard or a sweet spot regarding end product ![tmp equation](/images/tmp-equation.jpg) --- class: pic # Calculate TMP ![example profile](/images/example-roast-profile.jpg) --- .logo[![OSC logo](/images/logo-125px.png)] # Quick Review 1. What are the three types of heat transfer? 2. Why is water content important? 3. What is the difference between heat and temperature? --- .logo[![OSC logo](/images/logo-125px.png)] # The Roasting Cycle * Evaporation * Color VS roast curves * Defects * Cooling Time --- .logo[![OSC logo](/images/logo-125px.png)] # Drying * Primary concern of first-third of roast (first phase) * Evaporative cooling --- .logo[![OSC logo](/images/logo-125px.png)] # Roasting * Maillard reaction (complex) * Streker degradation (complex) * Melanoidins * Organic acids .center[Much more on this tomorrow] --- .logo[![OSC logo](/images/logo-125px.png)] # Rate of Change * Often called Rate of Rise (but rate may not always rise) * Speed (momentum) of the roast * Typically measured in 30 or 60-second intervals * Not useful until after TP * 30s is more accurate than 60s calculations --- .logo[![OSC logo](/images/logo-125px.png)] # Rate of Change Example: At 4:00 temp is 148°C At 4:30 temp is 153°C The temperature increased 5° in thirty seconds 153° - 148° = 5° Therefore, RoC is 5°/30s Or if we want a more accurate/higher resolution RoC we could calculate the rate of change per second: 153° - 148° = 5° Time = 30s 5/30 = .16°/s (not very useful, in my opinion) --- class: pic ![artisan profile](/images/artisan-profile.jpg) --- .logo[![OSC logo](/images/logo-125px.png)] # Cooling * Preferably within 4 minutes * Ideally as fast as possible * Quenching with water can be bad (but can be done) --- .logo[![OSC logo](/images/logo-125px.png)] # Quick Review * How much mass is typically lost during the roast and what is most of the ‘material’ that is lost? * Which occurs first (and thus longest); Strecker degradation or the Maillard reactions? * Why are darker roasts less acidic? --- .logo[![OSC logo](/images/logo-125px.png)] # Basic properties and changes * Coffee is organic! * Endothermic VS exothermic reactions Important changes to observe and measure: * Temperature over time * Volume * Weight * Color * Density --- class: center, middle .logo[![OSC logo](/images/logo-125px.png)] Activity: Visual ID Roast Stages --- .logo[![OSC logo](/images/logo-125px.png)] # Temperature over time * Temperature evolution * Typically includes bean and air or environment temp (BT & ET) * Momentum (Rate of change or rate of rise) --- .logo[![OSC logo](/images/logo-125px.png)] # Volume Changes * Cell walls become brittle * Water vapor inside bean creates a vapor “wall”* * CO2 build-up * Other organic gasses --- .logo[![OSC logo](/images/logo-125px.png)] # Weight Changes * Weight difference is a critical measurement * Weigh coffee before and after roasting and calculate % weight loss * Density change is also a good measurement to track consistency --- .logo[![OSC logo](/images/logo-125px.png)] # Color changes * Sugar browning * Melanoidins * Industry standards for color measurement --- .logo[![OSC logo](/images/logo-125px.png)] # Sugar Changes * Simple sugars already present in green bean * Broken down and used later to form polysaccharides * Caramelization * Maillard VS Caramelization --- .logo[![OSC logo](/images/logo-125px.png)] # Acidity Changes * Acids created early in roast * Get reduced later in roast * Therefore acidity provides information on roast level .center[ More on acids tomorrow!] --- .logo[![OSC logo](/images/logo-125px.png)] # Workspace Management Green coffee storage, ideal conditions: * 60% relative humidity * Green beans at 10-12% moisture content (12% = longest shelf life with 60% relative humidity) * Keep bags ~15cm off floor, away from pests, water, etc * Consider GoPro bags (can be expensive) * Routinely check and monitor condition of stored greens --- .logo[![OSC logo](/images/logo-125px.png)] # Workspace Management Ideal safety conditions * Production flow * Efficiency, organization in layout & movement * Physical safety/health (heavy lifting) * Air quality while roasting * Big roasting machine (20+Kg) consider a mask * When handling greens consider a mask * Not just gases, but micro-fibers & micro-particles from greens * Fire safety * Fire suppression * Plan for a roaster fire * Share the plan with everyone * Revisit the plan regularly (at least yearly) --- .logo[![OSC logo](/images/logo-125px.png)] # Roaster Machine Construction * Drum roaster * Fluid bed * Batch VS continuous roaster --- .logo[![OSC logo](/images/logo-125px.png)] # Ventilation * Within the drum, ventilation creates convection heat transfer * Keep the exhaust stack clean to avoid fires! * Ensure dangerous gases are evacuated from facility --- .logo[![OSC logo](/images/logo-125px.png)] # Electricity * Electric roasters are fine for sample roasting or lab roasting. * Electrical heating elements are slow and don’t scale well Question: how would you compensate for the lag caused by an electrical heating element? --- .logo[![OSC logo](/images/logo-125px.png)] # Tools for roasting * Buckets + shovel/scoop * Logging sheets or software * Timer and temperature probes * Infrared thermometer can be helpful * Moisture, density, and roast color meters are handy (and getting cheaper and smaller) * Quality Control System (what does this look like?) *A roaster (obviously) --- .logo[![OSC logo](/images/logo-125px.png)] # Cleaning, Maintenance, & Troubleshooting * Ventilation ducts * Chaff collector * Exhaust air cleaning * Cooling tray * Area surrounding roaster --- .logo[![OSC logo](/images/logo-125px.png)] # Tomorrow We’ll meet in the cupping lab We’re cupping immediately after a quick meeting * No perfumes, colognes or heavy fragrances * Be done smoking in time for your clothes to air-out --- .logo[![OSC logo](/images/logo-125px.png)] # Roasting Activity: 5 Roasts Roast 1: Perform roast with any profile to Temperature Midway Point (sample color creation). Roast 2: Perform roast with similar profile to Midway Point of Roast 1 but continue to the start of 2nd Crack (and thereby resulting in a longer development time). Roast 3: Roast coffee to the same profile to First Crack, then end at the same color with a longer development time (over 4 mins). Roast 4: Roast coffee to the same profile to First Crack, then end at the same color with a shorter development time (under 1:30). Roast 5: Roast coffee to the same profile to First Crack, then end at the same color with a 2-3 minute development time. --- class: center, middle ## Value 4 Value If you found this content useful, please consider [supporting my work](https://oilslickcoffee.com/support/?utm_source=caffeinated-training&utm_medium=blog&utm_campaign=support). I charge no set fee or price for providing this. You can help keep information like this openly accessible by matching the value you received in the content; value 4 value. [Ko-fi](https://ko-fi.com/Z8Z8LX14) **/** Bitcoin Wallet: 32SW9kcAsJdZvQKBazhLUZBSD9YS8DDqe8
Learn more
--- class: center, middle .logo[![OSC logo](/images/logo-125px.png)] End of presentation


-
Getting Travis to Auto Push to GitHub
-
I Am Color Blind
-
Documenting R Packages
-
Mixed Models with Kinship in R
-
Polygenic Risks Scores with data.table in R
-
Bayesian Non-Linear Multilevel Models
-
Limma Moderated and Ordinary t-statistics
-
Statistical Power in t tests with Unequal Group Sizes
-
Math Expressions with Facets in ggplot2
-
Heatmaps in R
Newer