Swiftlet Extensions
Swiftlet Extensions provide several useful features to common, built-in SwiftUI and Swift data types such as converting Color
to/from hex strings (for example #FF0000
), creating Image
instances from Base64 encoded strings stored in Data
objects and encoding Images
as Base64 strings or Data
objects.
The following extensions are available:
- Color Extensions - Extends
Color
to support the Action Data controls and adds convenience methods for working with colors in aCodable
,Encodable
orDecodable
class. - Data Extensions - Extends
Data
to support the Action Data controls and adds convenience methods for working with data properties in aCodable
,Encodable
orDecodable
class. - Image Extensions - Extends
Image
to support the Action Data controls and adds convenience methods for working with image properties in aCodable
,Encodable
orDecodable
class. - String Extensions - Extends
String
to support the Action Data controls and adds convenience methods for working withUIImage
andUIColor
properties in aCodable
,Encodable
orDecodable
class. - Array Extensions - Extends
Array
with new functions for working with collections. - Double Extensions - Extends
Double
with several useful features. - Int Extensions - Extends
Int
with several useful features. - @Published Extensions - Allows properties that are marked
@Published
and allows them to beCodable
withEncode
andDecode
conformance. - View Extensions - Conditionally apply modifiers depending on the target operating system.
Color Extensions
Extends Color
to support the Action Data controls and adds convenience methods for working with colors in a Codable
, Encodable
or Decodable
class.
Color as Hex String
Because Color
is not Codable
, it cannot directly be included in a data model object as a property. Swiftlet Extensions include several helper methods to work with color as a hex string to get around this limitation.
A hex string can be in either the rrggbb
or rrggbbaa
formats where:
rr
- Specifies the red component as a hex value in the range 00 to FF.gg
- Specifies the green component as a hex value in the range 00 to FF.bb
- Specifies the blue component as a hex value in the range 00 to FF.aa
- Specifies the alpha component as a hex value in the range 00 to FF.
The hex string can optionally start with the prefix of #
.
Examples:
// Assign a color from a string
let color: Color ~= "#FF0000"
// Initialize a color from a hex string
let green = Color(fromHex: "00FF00")
// Convert color to a hex string
let white = Color.white.toHex()
Data Extensions
Extends Data
to support the Action Data controls and adds convenience methods for working with data properties in a Codable
, Encodable
or Decodable
class.
Working with Images
Because Image
is not Codable
, it cannot directly be included in a data model object as a property. Swiftlet Extensions include several helper methods to work with images as Base 64 encoded data to get around this limitation.
Examples:
// Assign data from an image
let icon: Data ~= Image(named: "Icon.png")
// Convert data to an image
let image = icon.image
Image Extensions
Extends Image
to support the Action Data controls and adds convenience methods for working with image properties in a Codable
, Encodable
or Decodable
class.
Working with Images
Because Image
is not Codable
, it cannot directly be included in a data model object as a property. Swiftlet Extensions include several helper methods to work with images as Base 64 encoded data to get around this limitation.
Examples:
// Assign data from an image
let icon: Data ~= Image(named: "Icon.png")
let icon2 = Image(named: "Icon2.png").toData()
// Assign image from data
let image: Image ~= icon
// Base 64 encode an image
let base64 = Image(named: "Icon.png").toString()
// Assign image from base 64 encoded string
let image2: Image ~= base64
// Initialize an image from a base 64 encoded string
let image3 = Image(fromString: base64)
String Extensions
Extends String
to support the Action Data controls and adds convenience methods for working with Image
and Color
properties in a Codable
, Encodable
or Decodable
class.
Color as Hex String
Because Color
is not Codable
, it cannot directly be included in a data model object as a property. Swiftlet Extensions include several helper methods to work with color as a hex string to get around this limitation.
A hex string can be in either the rrggbb
or rrggbbaa
formats where:
rr
- Specifies the red component as a hex value in the range 00 to FF.gg
- Specifies the green component as a hex value in the range 00 to FF.bb
- Specifies the blue component as a hex value in the range 00 to FF.aa
- Specifies the alpha component as a hex value in the range 00 to FF.
The hex string can optionally start with the prefix of #
.
Examples:
// Assign a string from a color
let red: String ~= "FF0000"
// Get a UIColor from a hex string
let uiRed = red.color
// Initialize a string from a color
let white = String(fromColor: Color.white)
Working with Images
Because Image
is not Codable
, it cannot directly be included in a data model object as a property. Swiftlet Extensions include several helper methods to work with images as Base 64 encoded data to get around this limitation.
Examples:
// Get an image
let icon = Image(namde: "Icon.png")
// Assign a string from an image
let base64: String ~= icon
// Get a UIImage from a base 64 encoded string
let myIcon = base64.image
// Initialize a string from an image
let iconString = String(fromImage: icon)
Array Extensions
Extends Array
with new functions for working with collections.
Examples:
// Build a sample array.
var values = ["One", "Two"]
// Add new values if they don't already exist
values.update(with: ["One", "Three"])
Double Extensions
Extends Double
with several useful features.
Example:
let n:Double = 1000.00
// Returns 1,000
let text = n.formatted()
Int Extensions
Extends Int
with several useful features.
Example:
let n:Int = 1000
// Returns 1,000
let text = n.formatted()
@Published Extensions
Allows properties that are marked @Published
and allows them to be Codable
with Encode
and Decode
conformance.
View Extensions
Conditionally apply modifiers depending on the target operating system.
Example:
struct ContentView: View {
var body: some View {
Text("Unicorn")
.font(.system(size: 10))
.ifOS(.macOS, .tvOS) {
$0.font(.system(size: 20))
}
}
}


---
layout: talk_reveal4
title: Directions for SARS-CoV-2 evolutionary forecasting
venue: Fred Hutch
event: Comp Bio Faculty Lunch
author: Trevor Bedford
widescreen: true
draft: true
---
Trevor Bedford (@trvrb)
General strategy for antigenically evolving seasonal influenza viruses is attempt to match vaccine strain as close as possible to circulating viruses
Due to manufacturing and distribution, vaccine strain selection occurs in Feb for an fall vaccination campaign ahead of seasonal influenza epidemic
{{ page.title }}
Fred Hutchinson Cancer Center / Howard Hughes Medical Institute
{{ page.date | date: "%-d %b %Y" }}
{{ page.event }}
{{ page.venue }}
1. SARS-CoV-2 evolution and variant-specific vaccines
2. Forecasting seasonal influenza evolution
3. SARS-CoV-2 variant frequency dynamics
4. Recent modeling advances
5. Project directions
SARS-CoV-2 evolution and variant-specific vaccines
Genetic relationships of globally sampled SARS-CoV-2 to present
Rapid displacement of existing diversity by emerging variants
Omicron shows particular excess of mutations at S1
S1 evolved at a rate of 12 amino acid changes per year in 2021
This is remarkably fast relative to seasonal influenza
Omicron spike mutations substantially drop VE against infection
Higher titers from Omicron-specific boost in mice
Influenza vaccine strain selection strategy
Influenza vaccine strain selection timeline
Considerations for SARS-CoV-2 vaccine strain selection
Future frequency $x_i(t+\Delta t)$ of strain $i$ derives from strain fitness $f_i$ and present day frequency $x_i(t)$, such that
$$x_i(t+\Delta t) = \frac{1}{Z(t)} \, x_i(t) \, \mathrm{exp}(f_i \, \Delta t)$$
Strain frequencies at each timepoint are normalized by total frequency $Z(t)$. This captures clonal interference between competing lineages.
The fitness $f$ of strain $i$ is estimated as
$$f_i = \beta^\mathrm{A} \, f_i^\mathrm{A} + \beta^\mathrm{B} \, f_i^\mathrm{B} + \ldots$$
where $f^A$, $f^B$, etc... are different standardized viral attributes and $\beta^A$, $\beta^B$, etc... coefficients are trained based on historical evolution
| Antigenic drift | Intrinsic fitness | Recent growth |
|---|---|---|
| epitope mutations | non-epitope mutations | local branching index |
| HI titers | DMS data (via Bloom lab) | delta frequency |
Poor fit
Good fit
$x' = \frac{x \, (1+s)}{x \, (1+s) + (1-x)}$ for frequency $x$ over one generation with selective advantage $s$
$x(t) = \frac{x_0 \, (1+s)^t}{x_0 \, (1+s)^t + (1-x_0)}$ for initial frequency $x_0$ over $t$ generations
Trajectories are linear once logit transformed via $\mathrm{log}(\frac{x}{1 - x})$
Multinomial logistic regression models the probability of a virus sampled at time $t$ belonging to variant $i$ as
$$\mathrm{Pr}(X = i) = x_i(t) = \frac{p_i \, \mathrm{exp}(f_i \, t)}{\sum_{1 \le j \le n} p_j \, \mathrm{exp}(f_j \, t) }$$
where the model has $2n$ parameters consisting of $p_i$ the frequency of variant $i$ at initial timepoint and $f_i$ the growth rate or fitness of variant $i$ for $n$ variants.
The model is fit to minimize "log loss" of predicted variant vs observed variant across observations in dataset.
State-level case counts are partitioned based on frequencies of sequenced cases
SARS-CoV-2 genomic epi: Data producers from all over the world, GISAID and the Nextstrain team
Bedford Lab: John Huddleston,   James Hadfield,   Katie Kistler,   Louise Moncla,   Maya Lewinsohn,   Thomas Sibley,   Jover Lee,   Cassia Wagner,   Miguel Paredes,   Nicola Müller,   Marlin Figgins,   Denisse Sequeira,   Victor Lin,   Jennifer Chang


@book{book,
author={Misra, Sudip and Sarkar, Subhadeep and Chatterjee, Subarna},
title={Sensors, Cloud, and Fog: The Enabling Technologies for the Internet of Things},
publisher = {CRC Press},
year={2019},
pages={},
doi = {10.1201/9780429293986},
isbn = {9780429293986},
month={June}
}


Fablix
Search
Browse
Browse by movie
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
Browse by genre
Action
Adult
Adventure
Animation
Biography
Comedy
Crime
Documentary
Drama
Family
Fantasy
History
Horror
Music
Musical
Mystery
Reality TV
Romance
Sci-Fi
Sport
Thriller
War
Western
Check Out


Interface of an IO expander driver.
More...
#include <xpcc/architecture/interface/gpio_expander.hpp>
|
| using | PortType = uint8_t |
| | This contains the underlying type that can hold the bits of the entire port. More...
|
| |
|
|
static constexpr uint8_t | width |
| | This holds the width of the port as number of bits and can be used in drivers to assert the correct requirements.
|
| |
All IO expander driver should implement this interface, so that they can be wrapped into xpcc::GpioExpanderPin
and xpcc::GpioExpanderPort
.
The interface is almost identical to an GPIO pin, except multiple pins can be set at once.
- Note
- The driver must buffer the expanders IO registers. This means at least the direction, output and input values should be buffered so that a read-modify-write can be performed on SRAM and then only one write is performed on the bus instead of a read and write!
- Warning
- The
read()
function does not perform a read bus access, but operates on the buffered result of readInput()
. This allows a capture-and-evaluate approach, which is especially useful for reducing bus traffic and necessary for sampling all pins at the same time for xpcc::GpioExpanderPort
.
- See also
- xpcc::GpioExpanderPin
-
xpcc::GpioExpanderPort
-
xpcc::GpioIO
- Author
- Niklas Hauser
◆ PortType
This value is implementation defined, it may also be uint16_t
.
◆ indexFromPin()
This is mostly a bit mask, however, since this is implementation defined it can also be an index. Use type-safe flags container for the pins Returns the index of the pin as a constexpr function. The mapping is implementation defined, however, as an implementation hint when using a bit mask, you should use xpcc::leftmostBit()
◆ set() [1/2]
- Warning
- only modifies pins that have previously been set to output!
◆ reset()
- Warning
- only modifies pins that have previously been set to output!
◆ toggle()
- Warning
- only modifies pins that have previously been set to output!
◆ set() [2/2]
- Warning
- only modifies pins that have previously been set to output!
◆ read()
| bool xpcc::GpioExpander::read |
( |
Pins |
pins | ) |
const |
- Warning
- This function operates on the buffered input read. You have to call
readInput()
to update the result.
◆ writePort()
- Warning
- only modifies pins that have previously been set to output!
The documentation for this class was generated from the following file:


When learning something new, it's inevitable that you'll run into something you don't understand. The beauty of the internet is that we can search billions of resources and connect with people all over the world to find the answer. But just how do we tap into that vast power effectively? It boils down to how we ask our question.
Take your time. Writing a good question takes a hot minute, so don't just shoot off your question and expect the world to come back with the answer you need. Think about how to phrase your question carefully. Be specific and consider how you can word the question. Creating a question title that makes sense is extremely important. Think about the fact that you've already googled this question - what did you search for? Consider all the people who will come after you, looking for the same information. Be kind and label the question accordingly.
Research. Obviously you've already used the Google to check up on your question, so it might be helpful to list the resources you've used and state why these resources didn't answer your question.
Explain your process. How did you arrive at your problem, and what did you expect that didn't come to pass? Explaining how you got to your original answer will let others teach you about processes, thus helping you even more.
Add your code. If your question is specific to a bit of code, include the code. But this comes with a caveat. Don't include unneccesary or unformatted code. This will not do. People reading questions have an attention span of 3 seconds, and if your question has extraneous information, you're like to enrage the very people you are turning to for help. Don't do it.
Edit. Finally, look over your question. Is everything spelled correctly? Is everything formatted properly? Does your question even make sense? If you were looking at your question for the first time and had no idea what you were working on, would you be able to answer it (if you knew the answer?) Okay, that last one might be tough, but the bottom line is make sure you read and edit the question.
All these things will help you get the answer you're looking for, help those who are answering your question determine what you need, and help thos who are also looking for that information find it readily. In this way, you are saving the planet when you ask good questions! Keep up the good work!


The first data is the total number of objects in the level :
| | OBJECTS 185 |
Then each object is described.
Please note that the object data first line has been split here for visual convenience.
| | CLASS: SPIRIT DATA: 0 X: 131.00 Y: 0.00 Z: 210.00 |
| \ PCH: 0.00 YAW: 176.34 ROL: 0.00 |
| \ DIFF: 1 |
| | SEQ |
| | LOGIC: PLAYER |
| | EYE: TRUE |
| | SEQEND |
| | |
| | CLASS: SPRITE DATA: 0 X: 320.62 Y: 20.00 Z: 275.64 |
| \ PCH: 0.00 YAW: 270.00 ROL: 0.00 |
| \ DIFF: 1 |
| | SEQ |
| | TYPE: I_OFFICER |
| | SEQEND |
CLASS is the type of object, and DATA is the offset in the corresponding object table.
(SPIRIT and SAFE have DATA = 0).
X, Y, Z are trivial.
PCH, YAW, ROL are classic spatial orientation, but only YAW is really used (DOOM equivalent is THING orientation). It takes a value in degrees where 0 is at the "top of the screen when you look at the map". The value increases clockwise. PCH and ROL are only needed for 3D objects.
DIFF is the difficulty level at which the object appears.
| DIFF | EASY | MED | HARD |
| -3 | X | X | X |
| -2 | X | X | |
| -1 | X | ||
| 0 | X | X | X |
| 1 | X | X | X |
| 2 | X | X | |
| 3 | X |


{{ define "loginECDSA" }}
Make sure that you keep the passphrase (account seed) safe and remember the password. You will be asked to re-type them for confirmation.


Copyright (c) 2010-2013, WADA Masashi All rights reserved.
Web: http://sourceforge.jp/projects/miditrail/
Mail:
1. Introduction
2. System requirement
3. How to install and execute
4. Usage
5. Restriction
6. FAQ
7. How to customize
8. Copyright and license
9. Appendix
10. History
"MIDITrail" is a MIDI player which provides 3D visualization of MIDI datasets.
You can enjoy not only listening but also viewing.
MIDITrail supports SMF format 0/1, and multiple MIDI ports.
MIDITrail is available for Windows, Mac OS X and iOS.
Screenshot: PianoRoll3D
Screenshot: PianoRollRain
OS: Mac OS X 10.5 (Leopard), 10.6 (Snow Leopard), 10.7 (Lion), 10.8 (Mountain Lion), 10.9 (Mavericks)
CPU: intel CPU (MIDITrail has no support for PowerPC)
It is recommended that your Mac has high performance graphics for smooth animation.
If the MIDI datasets contains a lot of notes, the software needs more performance graphics.
As long as the performance of your Mac allows, please enjoy MIDITrail with large window.
Extract ZIP file, and execute "MIDITrail".
At first, you must setup the MIDI OUT port.
Select "MIDI OUT..." from "Option" menu, then "MIDI OUT configuration" dialog will appear.
At least, you must select the MIDI OUT device of "Port A".
Ordinary MIDI datasets is sent to "Port A".
If you want to play the MIDI datasets which uses multiple ports,
you must select the MIDI OUT device of port B, C, and so on.
NOTICE: To play the MIDI datasets which uses multiple ports,
it is necessary to prepare MIDI interface and MIDI module which supports multiple ports.
Delete "MIDITrail" application.
Recomposer is an old popular MIDI sequence software in Japan.
MIDITrail for Windows can open Recomposer data files (*.rcp *.r36 *.g36)
using RCPCV.DLL (Recomposer File Converter) which Mr. Fummy releases.
However, RCPCV.DLL did not work on Mac OS X.
So MIDITrail for Mac OS X does not suport Recomposer files.
Select "Open..." from "File" menu, the Open File dialog will appear. And choose a Standard MIDI File (*.mid).
Or you can drag and drop a MIDI file into the window of MIDITrail.
Push the following keys, or use "Playback" menu.
| Key | Action |
|---|---|
| SPACE | Play / Pause / Resume |
| ESC | Stop |
| 12 | Skip Back / Skip Forward |
| 45 | Playback Speed Down / Up |
| F2 | Double speed playback |
You can move freely in 3D space, and look at MIDI datasets from all directions
by operation of keyboard and mouse, like FPS (First Person Shooter) game.
Although there is sense of incongruity in the beginning,
it will be very comfortable as experience is gained.
When you click the window, it will become the view control mode by the mouse,
and mouse cursor will disappear.
The eye direction synchronizes movement of your mouse.
If you click once again, view control mode will be canceled.
And you can rotate piano roll using mouse wheel.
Put your index finger on D, middle finger on W, third finger on A.
| Key | Action |
|---|---|
| WS | It moves forward and backward. |
| AD | It moves left and right. |
| QE | It goes up and down. |
| ZC | It moves along the direction of MIDI datasets. (In PinoRollRain, it moves along the piano keyboard.) |
|
SHIFT + [WS] SHIFT + [AD] SHIFT + [QE] SHIFT + [ZC] |
When you push move key with SHIFT key, you can move at high speed. |
|
CTRL + [WS] CTRL + [AD] |
You can control the eye direction. |
You can also use a cursor key. If you use a mouse with your left hand, this one may be convenience.
| Key | Action |
|---|---|
| ↑↓ | It moves forward and backward. |
| ←→ | It moves left and right. |
| PgUpPgDn | It goes up and down. |
| ,. | It moves along the direction of MIDI datasets. (In PinoRollRain, it moves along the piano keyboard.) |
|
SHIFT + [↑↓] SHIFT + [←→] SHIFT + [PgUpPgDn] SHIFT + [,.] |
When you push move key with SHIFT key, you can move at high speed. |
|
CTRL + [↑↓] CTRL + [←→] |
You can control the eye direction. |
When you do the following operation, your viewpoint returns to the default position.
At first, the default position is the viewpoint which looks at MIDI datasets from just beside.
If you want to change the default position, move to your favorite position,
and select "Save viewpoint" from "View" menu.
If you want to restore default position which looks at MIDI datasets from just beside,
select "Reset viewpoint".
If you want to save view point automatically at the time of application termination or scene change, select "Auto save viewpoint" from "View" menu.
Select "Window size..." from "View" menu, the Window size configuration dialog will appear.
Select your favorite window size, and push the OK button.
You can not change window size while playing or pausing.
The window size you can select is depends on your Mac.
If you want to customize window size, please check FAQ.
| Counter | Details |
|---|---|
| FPS | Frame Per Second. |
| TITLE | Title of music. |
| TIME | Elapsed time. |
| BPM | Tempo (Beats Per Minute). |
| BEAT | Time signature. |
| BAR | Number of bars. |
| NOTES | Number of notes. |
| SPEED | Playback speed. |
(a) The structure of "Piano roll 3D" visualization
When MIDITrail open the MIDI datasets uses multiple ports, unused port will be not displayed.
For example, if the MIDI datasets uses port A, C and E,
MIDITrail displays port A, C and E side by side, and omits port B and D.
(b) The structure of "Piano Roll Rain" visualization
When MIDITrail open the MIDI datasets uses multiple ports,
only piano keyboards of port A will be displayed.
However piano roll bars of all ports will be displayed.
You can select the view mode from "View" menu. You can not change the view mode while playing or pausing.
You can switch the display/effect at "View" menu.
The piano roll bar will move up/down or right/left with change of pitch bend.
Some MIDI animation works are using pitch bend to shift the piano roll bars without change keys.
If the MIDI animation is not displayed correctly, please disable the pitch bend effect to fix the piano roll bars.
If you want to start MIDITrail by command line in Terminal, you can use following arguments.
open ./MIDITrail.app --args [-p] [-q] [path/to/file]
| argument | detail |
|---|---|
| -p | Play MIDI file after startup of MIDITrail. If you did not specify "path/to/file", this option will be ignored. |
| -q | End MIDITrail after end of playback. If option "-p" was not specified, this option will be ignored. |
| path/to/file | MIDI file path. When you specify a path including a space character, please use escape code. ex."file\ name.mid" |
If you drop a MIDI file to the shortcut of MIDITrail, MIDITrail open the file on startup.
Select "Graphic..." from "Option" menu, the graphic configuration dialog will appear.
You can not change graphic configuration while playing or pausing.
Anti-aliasing
If anti-aliasing is enabled, a notch (jaggy) will decrease and a more beautiful picture will be displayed.
However, since processing of anti-aliasing is heavy, performance may be poor when you select a upper level.
If your Mac does not support anti-aliasing, it is displayed as "Not supported".
You can view data sets received from MIDI IN device in realtime.
Select "MIDI IN..." from "Option" menu, then "MIDI IN configuration" dialog will appear.
Select the MIDI IN device for monitoring.
If you check the MIDITHRU, MIDITrail will send data sets received from MIDI IN to MIDI OUT.
When you select "Start Monitoring" from "Playback" menu, MIDI IN monitoring will start.
NOTE: MIDITrail can not record data sets received from MIDI IN.
If you use the MIDI module which delays sound (such as software sound modules), the MIDI sound and display may not synchronize.
MIDITrail renders all notes of the MIDI file in real time.
Therefore if MIDI file has a large number of notes, the load of rendering becomes high.
In order to enjoy MIDI file which contains tens of thousands of notes comfortably,
you have to use Mac which has high performance graphics.
In specification of SMF (Standard MIDI File), a method to select port is not defined.
However there is the unofficial method (*1) to select port.
MIDITrail supports that method, but may be unable to play the MIDI file.
It depends on the MIDI file.
(*1) Meta event (FF 21 01 pp) is the command to select port.
MIDITrail can't open the MIDI file whose delta time represents actual time.
Please try to change window size to small, and turn off anti-aliasing.
Check FPS value in window title.
If the FPS value is under 60, the performance of graphics is insufficient.
When MIDI file has a large number of notes, the load of rendering becomes high.
To confirm the performance of your Mac, please try to open MIDI file which contains few notes.
If the animation does not improve, please use Mac which has high performance graphics.
Move your viewpoint to your favorite position, and select "Save viewpoint" from "View" menu.
Then your current viewpoint will be saved.
Or you can select "Auto save viewpoint" of "View" menu.
You can customize the window size and position.
Please open following file by Property List Editor.
Property List Editor is a utility application of Xcode.
If you want to customize the window size, edit "Width" and "Height".
If you want to customize the window position, add "WindowPosition", "X" and "Y".
~/Library/Preferences/jp.sourceforge.users.yknk.MIDITrail.plist
View WindowSize Height=600 (Type:String) Width=800 (Type:String) WindowPosition X=100 (Type:String) Y=200 (Type:String)
In present version, MIDITrail can not display in full screen. It may support in the future.
You can change size of the ripple by editing configration file.
Please Check "7. Customize - (2) Piano roll".
Change the value of "RippleHeight" and "RippleWidth" larger.
You can customize MIDITrail as your like, by editing the configuration files that were included in resources of MIDITrail.
| File | contents |
|---|---|
| MIDITrail.app/Contents/Resources/conf/Player.ini | Player configuration |
| MIDITrail.app/Contents/Resources/conf/PianoRoll3D.ini | View mode configuration: Piano Roll 3D |
| MIDITrail.app/Contents/Resources/conf/PianoRoll2D.ini | View mode configuration: Piano Roll 2D |
| MIDITrail.app/Contents/Resources/conf/PianoRollRain.ini | View mode configuration: Piano Roll Rain |
| MIDITrail.app/Contents/Resources/conf/PianoRollRain2D.ini | View mode configuration: Piano Roll Rain 2D |
| MIDITrail.app/Contents/Resources/conf/PianoRoll3DLive.ini | View mode configuration: Piano Roll 3D (MIDI IN Monitor) |
| MIDITrail.app/Contents/Resources/conf/PianoRoll2DLive.ini | View mode configuration: Piano Roll 2D (MIDI IN Monitor) |
| MIDITrail.app/Contents/Resources/conf/PianoRollRainLive.ini | View mode configuration: Piano Roll Rain (MIDI IN Monitor) |
| MIDITrail.app/Contents/Resources/conf/PianoRollRain2DLive.ini | View mode configuration: Piano Roll Rain 2D (MIDI IN Monitor) |
If you want to open the resource files, right click MIDITrail icon, and select "Show Package Contents".
Edit [PlayerControl] section.
| Name | Details |
|---|---|
| AutoPlaybackAfterOpenFile | Playback automatically after opening file (0:disable / 1:enable) |
Edit [ViewControl] section.
| Name | Details |
|---|---|
| ShowFileName | Show the file name insted of the title (0:disable / 1:enable) |
Edit [SkipControl] section.
| Name | Details |
|---|---|
| SkipBackTimeSpanInMsec | Skip back time span (msec) |
| SkipForwardTimeSpanInMsec | Skip forward time span (msec) |
| MovingTimeSpanInMsec | Skip animation time span (msec) |
Edit [PlaybackSpeedControl] section.
| Name | Details |
|---|---|
| SpeedStepInPercent | Playback speed step (%) |
| MaxSpeedInPercent | Playback speed max ratio (%) |
Edit [FirstPersonCam] section.
| Name | PR-3D/2D | PR-Rain/2D | Details |
|---|---|---|---|
| VelocityFB | o | o | Velocity of forward and backward. (m/s) |
| VelocityLR | o | o | Velocity of left and right. (m/s) |
| VelocityUD | o | o | Velocity of up and down. (m/s) |
| VelocityPT | o | o | Angular velocity of look. (degree/s) |
| AcceleRate | o | o | The rate of acceleration when push SHIFT key. (n times) |
| VelocityAutoRoll | o | o | Angular velocity of auto rotation of piano roll (degree/s) |
| VelocityManualRoll | o | o | Angular velocity of manual rotation of piano roll (degree/s) |
Edit [Scale] section.
| Name | PR-3D/2D | PR-Rain/2D | Details |
|---|---|---|---|
| QuarterNoteLength | o | o | Length of quarter note (m) |
| NoteBoxHeight | o | x | Height of note box (m) |
| NoteBoxWidth | o | x | Width of note box (m) |
| NoteStep | o | x | Interval length of notes in a channel (m) |
| ChStep | o | x | Interval length of channels (m) |
| RippleHeight | o | x | Height of ripple (m) |
| RippleWidth | o | x | Width of ripple (m) |
| PictBoardRelativePos | o | x | The relative position which crosses perpendicularly the board and the playback section. 0.0 - The left edge of board crosses playback section 0.5 - The center of board crosses playback section 1.0 - The right edge of board crosses playback section |
| LiveNoteLengthPerSecond | o | o | Note length for 1 second in monitor (m) |
| LiveMonitorDisplayDuration | o | o | Display duration in monitor (msec) |
If you set small value to QuarterNoteLength, you can enjoy MIDI datasets like miniature garden.
Edit [Color] section. "A" of "RGBA" means alpha value.
| Name | PR-3D/2D | PR-Rain/2D | Details |
|---|---|---|---|
| NoteColorType | o | o | Note color type CHANNEL: Assign the channel color to the piano roll bar. (Ch-XX-NoteRGBA) SCALE: Assign the scale color to the piano roll bar. (Scale-XX-NoteRGBA) |
| Ch-01-NoteRGBA Ch-02-NoteRGBA : Ch-16-NoteRGBA | o | o | Color of the piano roll bar at each channel.(RGBA) |
| Scale-01-NoteRGBA Scale-02-NoteRGBA ・・・ Scale-12-NoteRGBA | o | o | Color of the piano roll bar at each sacle.(RGBA) 01=C,02=C#,03=D,04=D#,05=E,06=F,07=F#,08=G,F09=G#,10=A,11=A#,12=B |
| GridLineRGBA | o | x | Color of the grid line and bar line. (RGBA) If A of RGBA is 00 then the grid line will disappear. |
| PlaybackSectionRGBA | o | x | Color of the playback section. (RGBA) |
| CaptionRGBA | o | o | Color of the caption/counter string.(RGBA) |
| BackGroundRGBA | o | o | Back ground color(RGBA) |
Edit [ActiveNote] section.
| Name | PR-3D/2D | PR-Rain/2D | Details |
|---|---|---|---|
| Duration | o | x | Duration of active note flash.(msec) |
| WhiteRate | o | x | White rate at "NOTE ON". 0.0 Same color as piano roll bar. It means no flash. 0.5 Neutral color of piano roll bar and white. 1.0 White. |
| EmissiveRGBA | o | x | Emissive color of active note. (RGBA) This value will be ignored on PianoRoll2D. |
Edit [Ripple] section.
| Name | PR-3D/2D | PR-Rain/2D | Details |
|---|---|---|---|
| Duration | o | x | Duration of a ripple.(msec) |
Edit [Stars] section.
| Name | PR-3D/2D | PR-Rain/2D | Details |
|---|---|---|---|
| NumberOfStars | o | o | The number of stars to draw. |
Edit [Bitmap] section.
Place your bitmap file to "data" folder which exists under the MIDITrail folder.
And write the bitmap file name to INI file.
If the height or width of bitmap is too big, your Mac may be unable to draw the bitmap.
In Mac OS X 10.5, if you use the image which size is not (2^n)*m, the texture may be broken.
| Name | PR-3D/2D | PR-Rain/2D | Details |
|---|---|---|---|
| Board | o | x | Bitmap file name of the picture board.(ex. "data\Board.bmp") Instead of piano keyboard, you can display your favorite wallpaper. The aspect ratio of bitmap is arbitrary. To adjust the relative position which crosses perpendicularly the board and the playback section, please edit "[Scale] / PictBoardRelativePos". |
| Ripple | o | x | Bitmap file name of the ripple.(ex. "data\Ripple.bmp") You can change ripple which is displayed on "NOTE ON". The aspect ratio of bitmap is arbitrary. To adjust ripple display size, please edit "[Scale] / RippleHeight, RippleWidth". |
| Keyboard | x | o | Bitmap file name of piano keyboard.(ex. "data\Keyboard.bmp") Texture image of Piano keyboard. You can not change the aspect ratio of this bitmap. |
Edit [PianoKeyboard] section.
| Name | PR-3D/2D | PR-Rain/2D | Details |
|---|---|---|---|
| KeyDownDuration | x | o | Duration of key down (msec) |
| KeyUpDuration | x | o | Duration of key up (msec) |
| KeyboardStepY | x | o | Keyboard step interval: Horizontal direction (m) |
| KeyboardStepZ | x | o | Keyboard step interval: Vertical direction (m) |
| KeyboardMaxDispNum | x | o | The number of the maximum keyboards (0-16) |
| WhiteKeyColor | x | o | Color of white key. (RGBA) |
| BlackKeyColor | x | o | Color of black key. (RGBA) |
| ActiveKeyColorType | x | o | Active key color type STANDARD: Standard color (ActiveKeyColor) NOTE: Note color (Ch-XX-NoteRGBA or Scale-XX-NoteRGBA) |
| ActiveKeyColor | x | o | Color of active key. (RGBA) |
| ActiveKeyColorDuration | x | o | Duration of change from the color of note ON to the last neutral color. (msec) |
| ActiveKeyColorTailRate | x | o | Definition of the last neutral color. Color ratio of the color of note ON (red) and the color of key (white/black) (0.0-1.0) |
| KeyDispRangeStart | x | o | Key display range: start position (0-127) In typical 88-key piano, start position is 21(A0). |
| KeyDispRangeEnd | x | o | Key display range: end position (0-127) In typical 88-key piano, end position is 108(C8). |
Edit [Board] section.
If you want to draw the part of the image that specified at "Board" of [Bitmap] section,
set the rectangle parameters here.
| Name | PR-3D/2D | PR-Rain/2D | Details |
|---|---|---|---|
| ClipImage | o | x | Clip image (0:no/1:yes) |
| ClipAreaX1 | o | x | Clipping area X1 |
| ClipAreaY1 | o | x | Clipping area Y1 |
| ClipAreaX2 | o | x | Clipping area X2 |
| ClipAreaY2 | o | x | Clipping area Y2 |
WADA Masashi holds the copyright of MIDITrail.
MIDITrail is released under the BSD license.
Copyright (c) 2010-2013, WADA Masashi <> All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
I was enjoying "MIDI ANIMATION" videos which were made by artisans of NICO NICO DOUGA community.
(NICO NICO DOUGA is the video hosting service in Japan.)
Then I got the image that I am walking through the trail, there are many floating piano roll bars.
In order to actualize this image, I started development of MIDITrail.
However, after a few days, I found the demo video of "MIDIPlayer" which supports 3D piano roll at NICO NICO DOUGA.
It dejected me a little, but I continued development to actualize my image.
In Google and Youtube, you can find many videos which converted MIDI datasets into 3D CG animation.
But there is few applications which synchronize MIDI sound and display with 3D visualization.
The applications I found are shown below.
"3D MiDi" is a MIDI player for Windows using OpenGL.
Cubes and balls move about with MIDI sound.
Now, it has been hard to get the software.
MADO NO MORI: "3D MiDi" Alpha 0.1, synchronizes MIDI sound and 3D animation. http://www.forest.impress.co.jp/article/1999/11/18/threedmidi.html
"comp-i" is the software which provides 3D visualization of MIDI datasets.
Its target is intuitive editing of MIDI datasets.
comp-i has been trying to visualize not only a pitch but various parameters of MIDI datasets.
This software is explained in the paper which tackled 3D visualization of MIDI datasets.
Reiko Miyazaki, Issei Fujishiro: "3D Visualization of MIDI Datasets" July, 2002. http://ci.nii.ac.jp/naid/110002935789 Reiko Miyazaki, Issei Fujishiro, Rumi Hiraga: "A System for Visual Exploration of MIDI Datasets" March, 2004. http://ci.nii.ac.jp/naid/110002712125
You can get some related papers by searching web.
comp-i seems to a software for Windows, using World-ToolKit.
It is not opened to the public. I want to see it someday...
"MIDIJam" is a MIDI player for Windows using OpenGL.
This software displays the 3D musical instruments which are performing in real time.
MIDIJam supports 92 different instruments in the latest version.
MIDIJam http://www.gamesbyscott.com/midijam.htm
"MIDIPlayer" is a MIDI player for Java environment using OpenGL.
MIDIPlayer has rendering plug-ins, and one of them supports 3D piano roll.
It can display 3D piano roll which received from MIDI keyboard in real time.
MIDIPlayer http://sourceforge.jp/projects/midiplayer/
| Date | Version | Changelog |
|---|---|---|
| 2010/10/21 | Ver.0.0.0 | Development start. It based on the source code of MIDITrail Ver.1.1.1 for Windows. |
| 2010/12/26 | Ver.1.1.2 | First formal release for Mac OS X. #23973 MIDITrail for Mac OS X development. |
| 2011/12/25 | Ver.1.1.3 |
#25454 Added grid line display control #26985 Added Mac OS X 10.7 (Lion) support #26987 Added playback speed control #26988 Added skip control #26989 Added stars and counter display control #27005 Added figure of player operations guide to "How to view dialog" #26990 Fixed bug. (Typographical errors on the license) |
| 2012/02/12 | Ver.1.2.0 |
#27458 Added MIDI IN monitoring #27459 Added MIDI OUT auto configuration #27457 Fixed bug. (Screen flickers on skip forwad when repeat ON) |
| 2014/1/2 | Ver.1.2.1 |
#32544 Merged features of MIDITrail Ver.1.2.1 for Windows #30545 Added key display range control #30546 Added back ground color control #30547 Added scale color assignment to the piano roll bar #30549 Added improvement of font error message #32543 Added window position control #30550 Added support of virtual MIDI port #30551 Added support of new line character LF in INI file #32360 Added menu item "Auto save viewpoint" #32361 Added ability to save viewpoint in MIDI IN monitoring #32362 Added ability to playback automatically after opening file #32363 Added ability to open the file while playing #32366 Added ability to display the file name #32367 Added view mode "Piano Roll Rain 2D" #32427 Added note color assignment to active key #32606 Added support of app sandbox #32365 changed title caption ("TITLE:" string was removed) #32730 changed development environment to Xcode 4 #30548 Fixed bug. (At the start of playback, MIDI data transmission is blocked) #32359 Fixed bug. (MIDITrail does not send some CC events at skip processing) #32542 Fixed bug. (MIDITrail fails to get the offline property of MIDI device) #32779 Fixed bug. (MIDI OUT device "none" does not take effect) |


How ConcurrentModificationException is thrown?
published by Pradeep on April 15, 2018
How concurrent modification detection logic works and on what basis ConcurrentModificationException is thrown? This article will explain these questions. Iterating a collection is one of the important operation we usually perform and it can be a time consuming if collection is big enough. Iterator interface is the responsible for iterating the collection. Many collection classes in Java implement iterator like List and Set. If we want to iterate through the collection we first need to get the instance of it, we can get it by calling iterate(). Refer below code, which gets iterator from list.
var numList = new ArrayList<>(List.of(1,2,3));
var iterator = numList.iterator();
iterator.forEachRemaining((num) -> {
System.out.println(num);
});
Note that I used local variable type inference so I can declare variables with ‘var’. This is the new feature in version 10. This code gets iterator from ArrayList and iterates the list using forEachRemaining. forEachRemaining is a default method in Iterator which is introduced in Java 1.8 and we can use it to replace traditional while loop. This code just works fine and prints the numbers in the console. For your reference Iterator has below methods;
default void forEachRemaining(Consumer<? super E> action)
boolean hasNext()
E next()
default void remove()
Adding an element
Lets see what happens when numList.iterator() is called. From now on, I refer collection as the classes which implement iterator interface like List or Set. Collections will maintain a private modification count variable and this count gets updated on every modification like addition or deletion of elements.Modification count is the internal private variable so we can not access this variable. When iterator() is called on the collection, it creates a new instance of iterator and modification count is passed to this new iterator instance. In the above example, we created a list of size 3 and an iterator, both of them will have the same modification count. Now lets add an element to the list after the iterator instance creation.
var numList = newArrayList<>(List.of(1,2,3));
var iterator = numList.iterator();
numList.add(4);
iterator.forEachRemaining((num) -> {
System.out.println(num);
});
It throws ConcurrentModificationException at line number 4. All iterator methods except hasNext() will compare modification count of iterator and collection instance. In the above case collection is modified at line number 3 so collections modification count gets updated but iterator will have old count. Counts will not match when forEachRemaining is executed so it throws ConcurrentModificationException. This approach is called fail-fast; because exception is thrown before performing the real action. Note that this modification can occur in a multi threaded environment but for simplicity purpose I not used any threads. This comparison will help the iterator to detect the modifications in the collection and in case of mismatch it throws an exception.
I can add a new element after iterating the collection but I need to get new iterator instance to iterate again else I get exception because of different modification counts between the updated collection and old iterator instance.
Removing an element
Calling remove after the creation of iterator will throw ConcurrentModificationException. Check below code;
var numList = newArrayList<>(List.of(1,2,3));
var iterator = numList.iterator();
numList.remove(1);
iterator.forEachRemaining((num) -> {
System.out.println(num);
});
At line number 3 we removed element from the collection, iterator will detect it in forEachRemaining method and throws exception because list’s modification count gets updated but it is not passed down to the iterator, so comparison fails in forEachRemaining method and it throws exception. Alternatively we can call remove() on iterator which will not throw exception because remove method will update modification count of itself and also it passes new count to its creator, in this case creator is the list instance such that iterator and collection will be in sync. Below is the updated code which removes element using remove() of iterator instance.
var numList = newArrayList<>(List.of(1,2,3));
var iterator = numList.iterator();
iterator.next();
iterator.remove();
numList.forEach(System.out::println);
Because the first element is removed so this code prints 2 and 3. Note that I moved iterators position to the next element by calling next() because by default it will not point to any element. This code will not throw ConcurrentModificationException because remove() method will pass new modification count to the list.
Modifications in ListIterator
ListIterator is the sub interface of Iterator and this also depends on modification count to detect concurrent modifications. Along with the behavior of iterator, it supports addition, update and reverse iteration operations. When ListIterator instance is created, it gets modification count from the collection and it validates this count on every operation. If count mismatch happens, then it throws exception. All the modification operations like add, update and remove in the ListIterator will pass the updated modification count to its creator, in this case it is the list. Below is the example;
var numList = newArrayList<>(List.of(1,2,3));
var iterator = numList.listIterator();
//removes 1 from the list
iterator.next();
iterator.remove();
//updates 2 with 0
iterator.next();
iterator.set(0);
//adds 4 to the list
iterator.add(4);
numList.forEach(System.out::println);
Exception with hidden iterators
Code can throw ConcurrentModificationException with out direct use of iterator because of hidden iterators. For example, for-each loop will internally creates iterator instance so concurrent modifications will make for-each to throw exception. Be cautious when using internal iterators. There are many methods which uses iterators internally. See below example;
System.out.println(numList.toString());
toString() of list uses iterator to construct the string from each element of it. Similarly containsAll, removeAll, retainAll and constructors that take collection internally uses iterator and all of these methods can throw ConcurrentModificationException.
Conclusion
Collection can not be modified directly once the iterator is created but we can modify indirectly using the iterator instance. ConcurrentModificationException will give us the clue that multiple parts of the application is modifying the collection so it helps us to debug the issue.


{% extends "goflow/base_site.html" %} {% load i18n admin_modify staticfiles %} {% block extrahead %}{{ block.super }} {% endblock %} {% block content %} {% block content_header %}
(r'^myedit/(?PYou should provide a form as documented here, and inheriting of goflow.runtime.forms.BaseForm..*)/$', 'goflow.workflow.applications.edit_model', {'form_class':MyModelForm, template='my_template.html'}),
You may also define a suitable template (the default is edit_model.html) with the template parameter. This template can access the following variables:


--- layout: post title: "Monoids, semigroups, and friends" description: "Introduction to monoids, semigroups, and similar concepts, for object-oriented programmers." date: 2017-10-05 8:24 UTC tags: [Software Design] image: "/content/binary/magmas-quasigroups-semigroups-monoids.png" image_alt: "Monoids are a subset of semigroups, and part of the larger magma set." --- {% include JB/setup %}
{{ page.description }}
This article series is part of an even larger series of articles about the relationship between design patterns and category theory.
Functional programming has often been criticised for its abstruse jargon. Terminology like zygohistomorphic prepromorphism doesn't help sell the message, but before we start throwing stones, we should first exit our own glass house. In object-oriented design, we have names like Bridge, Visitor, SOLID, cohesion, and so on. The words sound familiar, but can you actually explain or implement the Visitor design pattern, or characterise cohesion?
That Bridge is a word you know doesn't make object-oriented terminology better. Perhaps it even makes it worse. After all, now the word has become ambiguous: did you mean a physical structure connecting two places, or are you talking about the design pattern? Granted, in practical use, it will often be clear from the context, but it doesn't change that if someone talks about the Bridge pattern, you'll have no idea what it is, unless you've actually learned it. Thus, that the word is familiar doesn't make it better.
More than one object-oriented programmer have extolled the virtues of 'operations whose return type is the same as the type of its argument(s)'. Such vocabulary, however, is inconvenient. Wouldn't it be nice to have a single, well-defined word for this? Perhaps monoid, or semigroup?
In Domain-Driven Design, Eric Evans discusses the notion of Closure of Operations, that is, operations "whose return type is the same as the type of its argument(s)." In C#, it could be a method with the signature public Foo Bar(Foo f1, Foo f2)
. This method takes two Foo
objects as input, and returns a new Foo
object as output.
As Evans points out, object designs with that quality begins to look like arithmetic. If you have an operation that takes two Foo
and returns a Foo
, what could it be? Could it be like addition? Multiplication? Another mathematical operation?
Some enterprise developers just 'want to get stuff done', and don't care about mathematics. To them, the value of making code more mathematical is disputable. Still, even if you 'don't like maths', you understand addition, multiplication, and so on. Arithmetic is a powerful metaphor, because all programmers understand it.
In his book Test-Driven Development: By Example, Kent Beck seems to have the same hunch, although I don't think he ever explicitly calls it out.
What Evans describes are monoids, semigroups, and similar concepts from abstract algebra. To be fair, I recently had the opportunity to discuss the matter with him, and he's perfectly aware of those concepts today. Whether he was aware of them when he wrote DDD in 2003 I don't know, but I certainly wasn't; my errand isn't to point fingers, but to point out that clever people have found this design principle valuable in object-oriented design long before they gave it a distinct name.
Monoids and semigroups belong to a larger group of operations called magmas. You'll learn about those later, but we'll start with monoids, move on to semigroups, and then explore other magmas. All monoids are semigroups, while the inverse doesn't hold. In other words, monoids form a subset of semigroups.
All magmas describe binary operations of the form: an operation takes two Foo
values as input and returns a Foo
value as output. Both categories are governed by (intuitive) laws. The difference is that the laws governing monoids are stricter than the laws governing semigroups. Don't be put off by the terminology; 'law' may sound like you have to get involved in complicated maths, but these laws are simple and intuitive. You'll learn them as you read on.
To the average object-oriented programmer, terms like monoid and semigroup smell of mathematics, academia, and ivory-tower astronaut architects, but they're plain and simple concepts that anyone can understand, if they wish to invest 15 minutes of their time.
Whether or not an object is a magma tells us whether Evans' Closure of Operations is possible. It might teach us other things about our code, as well.
Next: Monoids.
Comments
Hi Mark,
Thank you for taking the time to write such interesting articles. I'm personally fascinated by the relationship between ancient subjects like algebra and modern ones like programming. I can't wait to read more.
That said, I understand the feeling of being put off by some of the terms used in functional programming (I'm looking at you, "zygohistomorphic"). I think the reason for it is that the vast majority of those words come from Greek or Latin, and to many people (me included) Greek is exactly what it sounds like — Greek.
Granted, things aren't much better in the object-oriented programming world, where a Visitor isn't necessarily what you think it is, even if you recognize the word.
However, in my experience, knowing the etymology of a word is the first step in understanding it. I think that including a translation for every new term would make the subjects of these articles feel less alien. It would be a way to "break the ice", so to speak.
One example I came to think of is the word polymorphism — perhaps one of the most "academic-sounding" words thrown around in object-oriented programming conversations. It may feel intimidating at first, but it quickly falls off the ivory tower once you know that it literally means "when things can take many shapes" (from the Greek polys, "many", morphē, "shape" and "ismós", the general concept).
/Enrico
Enrico, thank you for writing. Funny you should write that, because leading with an explanation of monoid is exactly what I do in my new Clean Coders episode Composite as Universal Abstraction. In short, monoid means 'one-like'. In the video, I go into more details on why that's a useful name.
Hey, Mark, what a great start on a very promising series! One more accessibility suggestion along the same lines as Enrico's: You might consider including pronunciation for new terms that aren't obvious.
Eagerly anticipating future installments!


Go to the source code of this file.
◆ obj_binding_ext
| const TSS_TPMA_OBJECT obj_binding_ext =TPMA_OBJECT_DECRYPT |
◆ obj_binding_tpm
| const TSS_TPMA_OBJECT obj_binding_tpm |
Initial value:=TPMA_OBJECT_SENSITIVEDATAORIGIN |
TPMA_OBJECT_DECRYPT
◆ obj_certify
| const TSS_TPMA_OBJECT obj_certify |
Initial value:
TPMA_OBJECT_RESTRICTED |
TPMA_OBJECT_SENSITIVEDATAORIGIN |
TPMA_OBJECT_SIGN
◆ obj_fixed
| const TSS_TPMA_OBJECT obj_fixed |
Initial value:=TPMA_OBJECT_FIXEDTPM |
TPMA_OBJECT_FIXEDPARENT
◆ obj_primary
| const TSS_TPMA_OBJECT obj_primary |
Initial value:
TPMA_OBJECT_SENSITIVEDATAORIGIN |
TPMA_OBJECT_NODA |
TPMA_OBJECT_RESTRICTED |
TPMA_OBJECT_DECRYPT
◆ obj_signing_ext
| const TSS_TPMA_OBJECT obj_signing_ext =TPMA_OBJECT_SIGN |
◆ obj_signing_tpm
| const TSS_TPMA_OBJECT obj_signing_tpm |
Initial value:=TPMA_OBJECT_SENSITIVEDATAORIGIN |
TPMA_OBJECT_SIGN
◆ obj_storage
| const TSS_TPMA_OBJECT obj_storage |
Initial value:
TPMA_OBJECT_RESTRICTED |
TPMA_OBJECT_SENSITIVEDATAORIGIN |
TPMA_OBJECT_STCLEAR |
TPMA_OBJECT_DECRYPT


Multigrid preconditioners, coupled with Krylov iterative solvers, are widely used in the parallel solution of large and sparse linear systems, because of their optimality in the solution of linear systems arising from the discretization of scalar elliptic Partial Differential Equations (PDEs) on regular grids. Optimality, also known as algorithmic scalability, is the property of having a computational cost per iteration that depends linearly on the problem size, and a convergence rate that is independent of the problem size.
Multigrid preconditioners are based on a recursive application of a two-grid process consisting of smoother iterations and a coarse-space (or coarse-level) correction. The smoothers may be either basic iterative methods, such as the Jacobi and Gauss-Seidel ones, or more complex subspace-correction methods, such as the Schwarz ones. The coarse-space correction consists of solving, in an appropriately chosen coarse space, the residual equation associated with the approximate solution computed by the smoother, and of using the solution of this equation to correct the previous approximation. The transfer of information between the original (fine) space and the coarse one is performed by using suitable restriction and prolongation operators. The construction of the coarse space and the corresponding transfer operators is carried out by applying a so-called coarsening algorithm to the system matrix. Two main approaches can be used to perform coarsening: the geometric approach, which exploits the knowledge of some physical grid associated with the matrix and requires the user to define transfer operators from the fine to the coarse level and vice versa, and the algebraic approach, which builds the coarse-space correction and the associate transfer operators using only matrix information. The first approach may be difficult when the system comes from discretizations on complex geometries; furthermore, ad hoc one-level smoothers may be required to get an efficient interplay between fine and coarse levels, e.g., when matrices with highly varying coefficients are considered. The second approach performs a fully automatic coarsening and enforces the interplay between fine and coarse level by suitably choosing the coarse space and the coarse-to-fine interpolation (see, e.g., [3,23,21] for details.)
MLD2P4 uses a pure algebraic approach, based on the smoothed aggregation algorithm [2,25], for building the sequence of coarse matrices and transfer operators, starting from the original one. A decoupled version of this algorithm is implemented, where the smoothed aggregation is applied locally to each submatrix [24]. A brief description of the AMG preconditioners implemented in MLD2P4 is given in Sections 4.1-4.3. For further details the reader is referred to [4,5,7,8].
We note that optimal multigrid preconditioners do not necessarily correspond to minimum execution times in a parallel setting. Indeed, to obtain effective parallel multigrid preconditioners, a tradeoff between the optimality and the cost of building and applying the smoothers and the coarse-space corrections must be achieved. Effective parallel preconditioners require algorithmic scalability to be coupled with implementation scalability, i.e., a computational cost per iteration which remains (almost) constant as the number of parallel processors increases.


Harry Potter's Knight Bus in glorious LEGO
by Jason WeisbergerLEGO offers us the opportunity to build Harry Potter's Knight Bus.
Generally a wild time for Harry, the triple-level Knight Bus comes with Stan Shunpike, Ernie Prang and Harry minifigs.
With Ernie at the wheel, how can things go wrong?
LEGO Harry Potter and The Prisoner of Azkaban Knight Bus 75957 Building Kit, New 2019 (403 Pieces) via Amazon


Israeli army launches fresh air raids on Gaza, targets Hamas
Early morning strikes come after rockets were fired towards Israel from the besieged enclave, Israeli army says.
Israel has said it carried out fresh air raids on the Gaza Strip in response to rocket fire from the besieged enclave, two days after a precarious ceasefire went into force following a round of fighting that killed dozens of Palestinians.
The Israeli army said its attacks early on Saturday did not target positions of the Islamic Jihad group but sites belonging to Hamas, which administers the Gaza Strip. There was no immediate comment by Hamas.
More:
-
Israeli forces kill top Islamic Jihad commander in Gaza attack
-
Israeli gunfire kills Palestinian man in occupied West Bank
-
OPINION: Israel after Netanyahu?
The air raids marked the first time Hamas was targeted since this week's escalation began early on Tuesday with Israel's targeted assassination of Bahaa Abu al-Ata, a top commander of Islamic Jihad, the enclave's second-most powerful group after Hamas.
That 42-year-old's killing in a raid targeting his house triggered retaliatory rocket fire from Islamic Jihad at Israel.
After two days of violence, in which 34 Palestinians died but no Israeli fatalities, a ceasefire was agreed. Fire from both sides was reported on Saturday.
In a statement on Saturday, the Israeli army said it was attacking Hamas targets after "two rockets were fired from the Gaza Strip towards Israeli territory" and were intercepted by air defences.
Palestinian security sources told the AFP news agency the Israeli attacks were aimed at two Hamas sites in the north of the territory, where two million Palestinians live under a blockade imposed by Israel and Egypt for more than 10 years.
Al Jazeera's Harry Fawcett, reporting from Gaza City, said the targeting of sites belonging to Hamas marked a change in Israel's strategy in this latest round of fighting.
"Hamas, while supporting Islamic Jihad verbally and making statements of solidarity, had not joined in the rocket fire itself," he said.
"Perhaps this is an indication that Israel believes that this latest round of rocket did come from Hamas, so we will wait to see what the implications of that will be on the ceasefire going forward."
Probe into civilian killings
Israel's military on Friday said it would investigate "harm caused to civilians" from air raids it carried out that killed eight members of one family, including five children.
The bombing in the early hours of Thursday in Deir al-Balah struck the home of Rasmi Abu Malhous, a member of Islamic Jihad, and his brother Mohamed, a Palestinian Authority (PA) employee.
The air raids killed Rasmi, his second wife Maryam, 45, and three of his 11 children - Salim, 3, Mohannad, 12, and three-month-old Firas. The bombing also killed Mohamed's wife Yousra, 39, and two of their sons, Moaaz, 7, and Waseem, 13.
An Israeli military spokeswoman said on Friday that Israeli forces had hit what she described as an "Islamic Jihad military infrastructure" in the central Gaza town.
"According to the information available to the IDF [Israel Defense Forces] at the time of the strike, no civilians were expected to be harmed as a result of the strike," she said.
She added: "The IDF is investigating the harm caused to civilians by the strike."


|
Standard Reference Data Program |
Data Gateway |
Chemistry WebBook |
Go To: Top, References, Notes / Error Report
Data compilation copyright by the U.S. Secretary of Commerce on behalf of the U.S.A. All rights reserved.
Data compiled by: K.P. Huber and G. Herzberg
| State | Te | ωe | ωexe | ωeye | Be | αe | γe | De | βe | re | Trans. | ν00 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| B 1Π | 50476 | [527.3] Z | [3.380] 1 | 0.283 | [4.7E-4] 2 | [2.271] | B → X 3 R | 49898.6 Z | ||||
| Guntsch, 1937; Guntsch, 1939; Balfour, 1972 | ||||||||||||
| A 1Σ+ | 35904.52 | 1135.8 Z | 8.181 4 | -0.1479 | 4.3295 | 0.068034 5 | 2.510E-4 6 | 2.0064 | A → X 3 7 R | 35628.81 Z | ||
| Pearse, 1929; Guntsch, 1934; Guntsch, 1939; Pillow, 1949; missing citation | ||||||||||||
| X 1Σ+ | 0 | 1699.1 Z | 31.935 8 | -0.1882 | 6.3870 | 0.18194 9 | 3.664 10 | 1.6519 |
| 1 | B(R,P) - B(Q) = +0.004. |
| 2 | H0 = 8E-8. |
| 3 | The spectra of the isotopes 25MgH+ and 26MgH+ have also been analyzed Balfour, 1972. |
| 4 | ωeze = -0.00788; De ~ 18000 cm-1. |
| 5 | αv= +0.0000398 (v+1/2)2 - 0.0001208 (v+1/2)3. RKR potential curve Balfour, 1972. |
| 6 | He = +1.82E-8; higher order constants in Balfour, 1972. |
| 7 | RKR Franck-Condon factors Balfour, 1972. |
| 8 | ωeze = -0.02044; De0 ~ 17000 cm-1. |
| 9 | αv= +0.000202(v+1/2)2 - 0.000629(v+1/2)3 + 0.0000457(v+1/2)4 - 0.00000235(v+1/2)5. RKR potential curve Balfour, 1972. |
| 10 | He = +2.07E-8; higher order terms in Balfour, 1972. |
| 11 | Extrapolation of vibrational levels in X 1Σ and A 1Σ |
| 12 | From the value for MgH+. |
| 13 | From the average Bv values of Juraszynska and Szulc, 1939, Guntsch, 1945. |
| 14 | See 13. |
Go To: Top, Constants of diatomic molecules, Notes / Error Report
Data compilation copyright by the U.S. Secretary of Commerce on behalf of the U.S.A. All rights reserved.
Guntsch, 1937
Guntsch, A.,
Uber einige neue banden des magnesiumhydrids,
Z. Phys., 1937, 107, 420. [all data]
Guntsch, 1939
Guntsch,
Dissertation, Stockholm, 1939, 1. [all data]
Balfour, 1972
Balfour, W.J.,
Rotational analysis of the A1Σ+ → X1Σ+ and B1Π → X1Σ+ systems of 24MgH+, 25MgH+, and 26MgH+,
Can. J. Phys., 1972, 50, 1082. [all data]
Pearse, 1929
Pearse, R.W.B.,
The ultra-violet spectrum of magnesium hydride. II. The many-lined γ-system,
Proc. R. Soc. London A, 1929, 125, 157. [all data]
Guntsch, 1934
Guntsch, A.,
Uber das bandenspektrum des magnesiumhydrids,
Z. Phys., 1934, 87, 312. [all data]
Pillow, 1949
Pillow, M.E.,
Intensity distribution for bands of the γ-system of MgH+,
Proc. Phys. Soc. London Sect. A, 1949, 62, 237. [all data]
Juraszynska and Szulc, 1939
Juraszynska, H.; Szulc, M.,
Uber das bandenspektrum des ionisierten magnesiumdeutrids (MgD+),
Acta Phys. Pol., 1939, 7, 49. [all data]
Guntsch, 1945
Guntsch, A.,
Das bandenspektrum des ionisierten magnesium-deutrids,
Ark. Mat. Astron. Fys., 1945, 31, 1. [all data]
Go To: Top, Constants of diatomic molecules, References
Copyright for NIST Standard Reference Data is governed by the Standard Reference Data Act.
|
Standard Reference Data Program |
Data Gateway |
Chemistry WebBook |
If you have comments or questions about this site, please contact us.


EUR ahead of US GDP
Latest EUR/USD news
BOJ MONETARY POLICY DECISION: YEN CROSSES PLUMMETING
More stories to follow
Live Brokers Spreads
Technical Studies
Currencies Forecast Poll
In deepth
US durable goods orders strong than expected in October
Following a short-lived recovery, EUR/USD came under renewed pressure and fell to fresh 14-month lows after Draghi’s speech before the Committee on Economic and Monetary Affairs of the European Parliament.
Aussie Dollar Sinks, Yen Gains as Risk Aversion Grips the Markets
The Non-Farm Payroll report, because of its importance to the reserve currency, tends to move all markets. No trader in the world ignores the "NFP" acronym. Some want to avoid it at all costs, others try and trade the high volatility it produces to make some pips.
Forex Technical Analysis: EUR/USD, GBP/USD, USD/CHF, USD/JPY, AUD/USD, USD/RUB, Gold
Eurodollar has extended the current ascending wave and almost reached its target. We think, today, the price may start forming a reversal structure to continue falling inside the downtrend.
Economic calendar
Live events coverage
Price Patterns Connections in Different Time frames
This is part III of the series related to setups and entries in Forex and Stocks using continuations. However the information can also be used independently.


Sometimes the things we are looing for aren't there.
But often the journey will lead us to new discoveries.


| table.integer64 {bit64} | R Documentation |
table.integer64
uses the cross-classifying integer64 vectors to build a contingency
table of the counts at each combination of vector values.
table.integer64(... , return = c("table","data.frame","list") , order = c("values","counts") , nunique = NULL , method = NULL , dnn = list.names(...), deparse.level = 1 )
... |
one or more objects which can be interpreted as factors
(including character strings), or a list (or data frame) whose
components can be so interpreted. (For |
nunique |
NULL or the number of unique values of table (including NA). Providing |
order |
By default results are created sorted by "values", or by "counts" |
method |
NULL for automatic method selection or a suitable low-level method, see details |
return |
choose the return format, see details |
dnn |
the names to be given to the dimensions in the result (the dimnames names). |
deparse.level |
controls how the default |
This function automatically chooses from several low-level functions considering the size of x
and the availability of a cache.
Suitable methods are hashmaptab
(simultaneously creating and using a hashmap)
, hashtab
(first creating a hashmap then using it)
, sortordertab
(fast ordering)
and ordertab
(memory saving ordering).
If the argument dnn
is not supplied, the internal function
list.names
is called to compute the ‘dimname names’. If the
arguments in ...
are named, those names are used. For the
remaining arguments, deparse.level = 0
gives an empty name,
deparse.level = 1
uses the supplied argument if it is a symbol,
and deparse.level = 2
will deparse the argument.
Arguments exclude
, useNA
, are not supported, i.e. NA
s are always tabulated, and, different from table
they are sorted first if order="values"
.
By default (with return="table"
) table
returns a contingency table, an object of
class "table"
, an array of integer values. Note that unlike S the result is always an array, a 1D array if one factor is given. Note also that for multidimensional arrays this is a dense return structure which can dramatically increase RAM requirements (for large arrays with high mutual information, i.e. many possible input combinations of which only few occur) and that table
is limited to 2^31
possible combinations (e.g. two input vectors with 46340 unique values only). Finally note that the tabulated values or value-combinations are represented as dimnames
and that the implied conversion of values to strings can cause severe performance problems since each string needs to be integrated into R's global string cache.
You can use the other return=
options to cope with these problems, the potential combination limit is increased from 2^31
to 2^63
with these options, RAM is only rewquired for observed combinations and string conversion is avoided.
With return="data.frame"
you get a dense representation as a data.frame
(like that resulting from as.data.frame(table(...))
) where only observed combinations are listed (each as a data.frame row) with the corresponding frequency counts (the latter as component
named by responseName
). This is the inverse of xtabs
..
With return="list"
you also get a dense representation as a simple list
with components
values |
a integer64 vector of the technically tabulated values, for 1D this is the tabulated values themselves, for kD these are the values representing the potential combinations of input values |
counts |
the frequency counts |
dims |
only for kD: a list with the vectors of the unique values of the input dimensions |
Note that by using as.integer64.factor
we can also input
factors into table.integer64
– only the levels
get lost.
Note that because of the existence of as.factor.integer64
the standard table
function – within its limits – can also be used
for integer64
, and especially for combining integer64
input
with other data types.
table
for more info on the standard version coping with Base R's data types, tabulate
which can faster tabulate integers
with a limited range [1L .. nL not too big]
, unique.integer64
for the unique values without counting them and unipos.integer64
for the positions of the unique values.
message("pure integer64 examples") x <- as.integer64(sample(c(rep(NA, 9), 1:9), 32, TRUE)) y <- as.integer64(sample(c(rep(NA, 9), 1:9), 32, TRUE)) z <- sample(c(rep(NA, 9), letters), 32, TRUE) table.integer64(x) table.integer64(x, order="counts") table.integer64(x, y) table.integer64(x, y, return="data.frame") message("via as.integer64.factor we can use 'table.integer64' also for factors") table.integer64(x, as.integer64(as.factor(z))) message("via as.factor.integer64 we can also use 'table' for integer64") table(x) table(x, exclude=NULL) table(x, z, exclude=NULL)


Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.
Dennis Green
Marketing Manager{% extends 'base.html' %} {% block content %} {% load static %}
Our team consists of highly motivated and highly professional developers with extraordinary experience in such areas as: web, big data, machine learning, data scraping and much more. Each of our specialists has many years of experience in all stages of development and product delivery. Our team is ready to fulfill your most courageous dreams.
A small river named Duden flows by their place and supplies it with the necessary regelialia.
A small river named Duden flows by their place and supplies it with the necessary regelialia.
A small river named Duden flows by their place and supplies it with the necessary regelialia.
A small river named Duden flows by their place and supplies it with the necessary regelialia.
A small river named Duden flows by their place and supplies it with the necessary regelialia.
A small river named Duden flows by their place and supplies it with the necessary regelialia.
A small river named Duden flows by their place and supplies it with the necessary regelialia.
Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.
Dennis Green
Marketing ManagerFar far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.
Dennis Green
Interface DesignerFar far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.
Dennis Green
UI DesignerFar far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.
Dennis Green
Web DeveloperFar far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.
Dennis Green
System Analytics


Are you sure, you want to delete this participant?
Name : {{participant.name}}
Participant Id :{{participant.participantId}}


Triangle determiner
This is an Equilateral triangle the Pythagoras theorem is a thing.

This is an Scalene triangle this is a mathematical quandry.
This is not a triangle this is a fraud.
This is BROKEN PANIC


---
layout: post
title: Fed-up bus driver 'drove kids to police'
date: '2009-03-03T21:43:00.002+10:00'
author: Jamie Teh
tags:
- general news
- amusing
modified_time: '2009-03-03T21:46:22.710+10:00'
blogger_id: tag:blogger.com,1999:blog-5419412965543098028.post-8655921399833961940
permalink: /2009/03/fed-up-bus-driver-drove-kids-to-police.html
---
I found this quite amusing and satisfying:
Fed-up bus driver 'drove kids to police'


AdjustMargins is a RoboFont extension created in 2015 by Alex Jacque.
AdjustMargins batch adjusts the left and right margins on your glyphs.
Copyright (c) 2015 Alex Jacque (alexjacque.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Application Header
Android
Google
Android File Transfer
Allows you to transfer files from your android device to your Macbook, or Mac.
Android Button


A classifier built with facebook's fasttext that will input a reviewers text and predict the corresponding star rating. (i.e. determine whether a reviewer gave a restaurant 4 stars based on their review text)
One of the hottest areas in Natural Language Processing and a large subgroup is sentiment analysis. I wanted to experiment with different methods for predicting sentiment and determine an effective approach.
I ended up using Facebook's fasttext and am pleased with the results I was able to achieve. The dataset is directly from Yelp and is approximately 4GB of labeled review data.
I decided to train two different models using fasttext, a unigram model, one that looks at individual words. And a bigram model that groups text into tokens of two words and trains. The bigram model outperformed the unigram model as seen in the image above. This makes sense to me as having more context in a sentence provides the model more information. For example 'very bad' and 'bad' have slightly different meanings. Overall I am very impressed with the top two prediction accuracy of both models, especially the bigram model which contained the correct response in its top two predictions 95% of the time.
I would like to use this model as a transfer learning model and extend its capabilities to other types of text such as stock news articles. I would also like to compare my models performance directly to other services such as Azure and Alylien.
Github Repo
# You will need to have Python 3 and Pip installed
$ git clone https://github.com/ianramzy/yelp-review-classifier.git
# You will need to install fasttext see https://fasttext.cc/docs/en/support.html
# Download the review data here https://www.yelp.com/dataset/download
# Run the python notebook
# Cd into the fasttext directory
$ ./fasttext supervised -input your/path/fasttext_dataset_training.txt -output unigram_model
$ ./fasttext supervised -input your/path/fasttext_dataset_training.txt -output bigram_model
$ ./fasttext test unigram_model.bin your/path/fasttext_dataset_test.txt
$ ./fasttext test unigram_model.bin your/path/fasttext_dataset_test.txt 2
$ ./fasttext test bigram_model.bin your/path/fasttext_dataset_test.txt
$ ./fasttext test bigram_model.bin your/path/fasttext_dataset_test.txt 2
Another project by Ian Ramzy


(617)-555-5555
<EMAIL_ADDRESS>Home
About
Products
Register
Login
Search By Category
Sr. No
Products
Category
Quantity
Price
Action
1
Silk saree
Saree
10
1500
Edit
2
Solid Semi stitched lehanga choli
lehanga choli
15
3000
Edit


Use the checkbox below to indicate that this inspection should ignore casts from int to char. This type of cast is often used when implementing I/O operations, because the read() method of the class java.io.Reader returns an intl
Powered by InspectionGadgets


You will receive $1 as base payment no matter how well the workers you have chosen did.
You will receive bonus based on the actual performance of the workers you have chosen.
To familiarize yourself with our rewarding policy, please see the below table:
| The average number of questions that the workers you choose answer correctly | Your earnings | Number (and Proportion) of the workers who answered correctly in this range |
| <0.5 question | $0 | 20 (19%) |
| 0.5-1 questions | $1.0 | 36 (34%) |
| 1-2 questions | $2.0 | 27 (25%) |
| 2-3 questions | $3.0 | 16 (15%) |
| 3-4 questions | $4.0 | 8 (6%) |
| 4-5 questions | $5.0 | 1 (0.9%) |
1
. How much bonus will you earn if the worker you picked actually solved 2.7 questions correctly on average?2
. For completing this study, how much payment will you receive?


Class: Aws::CloudFormation::Types::StackSummary
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Struct
|
|
|
Instance Chain:
self,
::Aws::Structure ,
Struct
|
|
| Inherits: |
Struct
|
| Defined in: | gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb |
Overview
The StackSummary Data Type
Constant Summary
Instance Attribute Summary
-
#creation_time ⇒ Time
rw
The time the stack was created.
-
#deletion_time ⇒ Time
rw
The time the stack was deleted.
-
#drift_information ⇒ Types::StackDriftInformationSummary
rw
Summarizes information about whether a stack's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters.
-
#last_updated_time ⇒ Time
rw
The time the stack was last updated.
-
#parent_id ⇒ String
rw
For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack.
-
#root_id ⇒ String
rw
For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs.
-
#stack_id ⇒ String
rw
Unique stack identifier.
-
#stack_name ⇒ String
rw
The name associated with the stack.
-
#stack_status ⇒ String
rw
The current status of the stack.
-
#stack_status_reason ⇒ String
rw
Success/Failure message associated with the stack status.
-
#template_description ⇒ String
rw
The template description of the template used to create the stack.
Instance Method Summary
::Aws::Structure
- Included
| #to_hash | Alias for Structure#to_h. |
Instance Attribute Details
#creation_time ⇒ Time
(rw)
The time the stack was created.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#deletion_time ⇒ Time
(rw)
The time the stack was deleted.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#drift_information ⇒ Types::StackDriftInformationSummary (rw)
Summarizes information about whether a stack's actual configuration differs, or has drifted, from its expected configuration, as defined in the stack template and any values specified as template parameters. For more information, see Detecting Unregulated Configuration Changes to Stacks and Resources.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#last_updated_time ⇒ Time
(rw)
The time the stack was last updated. This field will only be returned if the stack has been updated at least once.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#parent_id ⇒ String
(rw)
For nested stacks--stacks created as resources for another stack--the stack ID of the direct parent of this stack. For the first level of nested stacks, the root stack is also the parent stack.
For more information, see Working with Nested Stacks in the CloudFormation User Guide.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#root_id ⇒ String
(rw)
For nested stacks--stacks created as resources for another stack--the stack ID of the top-level stack to which the nested stack ultimately belongs.
For more information, see Working with Nested Stacks in the CloudFormation User Guide.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#stack_id ⇒ String
(rw)
Unique stack identifier.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#stack_name ⇒ String
(rw)
The name associated with the stack.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#stack_status ⇒ String
(rw)
The current status of the stack.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#stack_status_reason ⇒ String
(rw)
Success/Failure message associated with the stack status.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end
#template_description ⇒ String
(rw)
The template description of the template used to create the stack.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 8599
class StackSummary < Struct.new( :stack_id, :stack_name, :template_description, :creation_time, :last_updated_time, :deletion_time, :stack_status, :stack_status_reason, :parent_id, :root_id, :drift_information) SENSITIVE = [] include Aws::Structure end


Evernote is my archive of choice. Lately, I’ve started using checkboxes more frequently; while taking notes, if I need to remember a todo, I use a checkbox.
There’s one problem, however: I don’t use Evernote as a task management system (although, if Phil Libin’s comments about recurring reminders come to fruition, I may change my mind). For that particular task, I use Toodledo.
The other day, a light bulb went off: could I find a way to combine the lightning-fast “remind-me-to-do-this” process of Evernote checkboxes with the fact that I manage my todos via Toodledo?
Answer: yes I can. I’d like to share it with you here.
TL;DR
Automatically create Toodledo tasks from Evernote checkboxes.
The Setup
This method follows a simple process:
- I tag any notes whose unchecked checkboxes I would like to send to Toodledo.
- I run a service (created using Automator).
- Those checkboxes are sent to Toodledo and the note is assigned a new, “complete” tag.
Let’s walk through how to set this up.
Step #1: Retrieve you personal Toodledo email address.
This address can be found in Toodledo’s Settings screen: https://www.toodledo.com/tools/connect_email.php
Step #2: Create two tags in Evernote related to this automation.
In my case, I chose these tags – feel free to use whatever you prefer:
- toodledo: this is tag to apply to notes that should be scanned for unchecked checkboxes.
- toodledo-complete: this is the tag applied to notes that have been scanned by the service.
Step #3: Download the workflow and install it via Automator.
For reference, here’s the Applescript of the workflow – note that when you import it into Automator, you’ll need to change the first three variables:
- td_email: your Toodledo email address
- tag_toSend: your first tag (for scanning)
- tag_complete: your second tag (for indicating completion)
Step #4 (optional): Attach the newly installed service to a hotkey.
Because I am a hotkey aficionado, I wanted to attach this service to a hotkey. This is done by going into System Preferences » Keyboard (I’m using Mavericks; YMMV on earlier versions of OS X) and clicking the “Shortcuts” tab.
Once there, it is simply a matter of finding your service and adding the hotkey combination that you would like.
Step #5 (not optional): Rock and roll.
At this stage, everything should be ready to go. Let’s test it out. First, I create a new note and add some blank checkboxes to it.
Then, I tag the note with the first tag (the one that indicates whether a note should be scanned).
I run my service (either through the Services menu or via my hotkey). The spinning gear in the Menu Bar tells me it’s working.
Once it’s done, the note should have the first tag removed and the second (the one that indicates a note has been processed) applied.
A quick hop over to Toodledo – lo’ and behold, it works!
(Note that the “#1” and “#2” are missing; turns out that the hashtag represents a special character when sending a task into Toodledo via email)
Sweet success! That said, there are some things to watch out for with v.1 of this service:
- The Applescript uses Mail to send the emails into Toodledo. Tactically, this doesn’t cause issues, but I have noticed that when I close Mail, there are several Drafts of my Toodledo emails sitting around…somewhat annoying.
- Other than switching tags, the original Evernote note is not modified (e.g., the checkboxes aren’t checked). I did this on purpose; you might not want that done with your notes.
- This doesn’t intelligently check Toodledo for things like tasks with the same name, etc. What you input is what you get.
- I haven’t rigorously tested this against all situations (checkboxes with bolded text, etc.). Again, YMMV.
I’ve already got a list of items I’d like to address for v.2 of this service:
- Remove the Mail dependency (preferably by using something like sendmail or accessing the Toodledo API directly).
- Provide options for the user to modify the Evernote note in some way.
- Perhaps some more intelligence in parsing the todo text (e.g., in the example above, perhaps a warning that “#” represents a special character?).
In the meantime, enjoy!


Sunflower "whole seed" (fruit) are sold as a snack food, after roasting in
ovens, with or without salt added. Sunflowers can be processed into a peanut butter
alternative, Sunbutter. In Germany, it is mixed together with rye flour to make
Sonnenblumenkernbrot (literally: sunflower whole seed bread), which is quite popular
in German-speaking Europe. It is also sold as food for birds and can be used directly
in cooking and salads. Sunflower oil, extracted from the seeds, is used for cooking,
as a carrier oil and to produce margarine and biodiesel, as it is cheaper than olive
oil. A range of sunflower varieties exist with differing fatty acid compositions;
some 'high oleic' types contain a higher level of healthy monounsaturated fats in
their oil than Olive oil.
The rose was sacred to Venus (mythology). Venus was the Roman goddess of
love and beauty. It was also linked with Cupid. He was the Roman god of desire -
in one myth, he dropped nectar and the nectar bubbled up from the ground as roses.
The rose was also sacred to Bacchus. He was the Roman god of wine.
Tulips are spring-blooming perennials that grow from bulbs. Depending on
the species, tulip plants can be between 4 inches (10 cm) and 28 inches (71 cm)
high. The tulip's large flowers usually bloom on scapes with leaves in a rosette
at ground level and a single flowering stalk arising from amongst the leaves.Tulip
stems have few leaves. Larger species tend to have multiple leaves. Plants typically
have two to six leaves, some species up to 12. The tulip's leaf is strap-shaped,
with a waxy coating, and the leaves are alternately arranged on the stem; these
fleshy blades are often bluish green in color. Most tulips produce only one flower
per stem, but a few species bear multiple flowers on their scapes (e.g. Tulipa turkestanica).
The generally cup or star-shaped tulip flower has three petals and three sepals,
which are often termed tepals because they are nearly identical.
Petunia is a genus in the family Solanaceae, subfamily Petunioideae. Well
known members of Solanaceae in other subfamilies include tobacco (Nicotianoideae),
and the cape gooseberry, tomato, potato, deadly nightshades and chili pepper (Solanoideae).
Some botanists place the plants of the genus Calibrachoa in the genus Petunia, but
this is not accepted by others. Petchoa is a hybrid genus derived from crossing
the genetically similar Calibrachoa and Petunia.
Most morning glory flowers unravel into full bloom in the early morning.
The flowers usually start to fade a few hours before the "petals" start showing
visible curling.
Some morning glories, such as Ipomoea muricata, are night-blooming flowers. In some
places, such as Australian bushland, some species of morning glories develop thick
roots and tend to grow in dense thickets. They can quickly spread by way of long,
creeping stems. By crowding out, blanketing and smothering other plants, morning
glory has turned into a serious invasive weed problem.
Viola typically have heart-shaped, scalloped leaves, though a number have
palmate leaves or other shapes. The vast majority of Viola species are herbaceous,
and a substantial number are acaulescent in habit - meaning they lack any noticeable
stems and the foliage and flowers appear to rise from the ground; the remaining
species have short stems with foliage and flowers produced in the axils of the leaves.
The simple leaves of plants with either habit are arranged alternately; the acaulescent
species produce basal rosettes. Plants always have leaves with stipules that are
often leaf-like.
Lilies are tall perennials ranging in height from 2–6 ft (60–180 cm). They
form naked or tunicless scaly underground bulbs which are their overwintering organs.
In some North American species the base of the bulb develops into rhizomes, on which
numerous small bulbs are found. Some species develop stolons. Most bulbs are deeply
buried, but a few species form bulbs near the soil surface. Many species form stem-roots.
With these, the bulb grows naturally at some depth in the soil, and each year the
new stem puts out adventitious roots above the bulb as it emerges from the soil.
These roots are in addition to the basal roots that develop at the base of the bulb.
Jasmines can be either deciduous (leaves falling in autumn) or evergreen
(green all year round), and can be erect, spreading, or climbing shrubs and vines.
Their leaves are borne opposite or alternate. They can be simple, trifoliate, or
pinnate. The flowers are typically around 2.5 cm (0.98 in) in diameter. They are
white or yellow in color, although in rare instances they can be slightly reddish.
The flowers are borne in cymose clusters with a minimum of three flowers, though
they can also be solitary on the ends of branchlets. Each flower has about four
to nine petals, two locules, and one to four ovules. They have two stamens with
very short filaments. The bracts are linear or ovate. The calyx is bell-shaped.
They are usually very fragrant. The fruits of jasmines are berries that turn black
when ripe.
The leaves of Hibiscus are alternate, ovate to lanceolate, often with a toothed
or lobed margin. The flowers are large, conspicuous, trumpet-shaped, with five or
more petals, color from white to pink, red, orange, purple or yellow, and from 4–18
cm broad. Flower color in certain species, such as H. mutabilis and H. tiliaceus,
changes with age. The fruit is a dry five-lobed capsule, containing several seeds
in each lobe, which are released when the capsule dehisces (splits open) at maturity.
It is of red and white colours. It is an example of complete flowers.
Flowering stalks of Edelweiss can grow to a size of 3–20 cm (in cultivation,
up to 40 cm). Each bloom consists of five to six small yellow clustered spikelet-florets
(5 mm) surrounded by fuzzy white "petals" (technically, bracts) in a double star
formation. The flowers bloom between July and September.
Dahlia is a genus of the uplands and mountains, being found at elevations
between 1,500 and 3,700 meters, in what has been described as a "pine-oak woodland"
vegetative zone. Most species have limited ranges scattered throughout many mountain
ranges in Mexico.
The Narcissi are perennial herbaceous geophytes which grow from pale brown-skinned
spherical bulbs with pronounced necks, and reach heights varying from 5-80 cm depending
on species. Dwarf forms include N. asturiensis which reaches 5-8 cm, while N. italicus
may grow as high as 80cm. The leafless stems, appearing from early to late spring
depending on the species, bear from 1 to 20 blooms. Stem shape depends on the species,
some are highly compressed with a visible seam, while others are rounded. The stems
are upright and located at the centre of the leaves. It is hollow in the upper portion
but towards the bulb is more solid and filled with a spongy material. In a few species
such as N. hedraeanthus the stem is oblique.


Computes the causal target parameter defined as the difference between the biomarker expression values under treatment and those same values under no treatment, using Targeted Minimum Loss-Based Estimation.
biomarkertmle(Y, W, A, type, parallel = TRUE, family = "gaussian", g_lib = c("SL.glmnet", "SL.randomForest", "SL.nnet", "SL.polymars", "SL.mean"), Q_lib = c("SL.glmnet", "SL.randomForest", "SL.nnet", "SL.mean"))
S3 object of class biotmle
, with the tmleOut
and the
call
slots containing TMLE-based estimates of the relationship
between a biomarker and exposure/outcome variable and the original
call to this function (for user reference), respectively.
library(dplyr) data(illuminaData) "%ni%" = Negate("%in%") W <- illuminaData %>% dplyr::select(which(colnames(.) %in% c("age", "sex", "smoking"))) %>% dplyr::mutate( age = as.numeric((age > quantile(age, 0.25))), sex = I(sex), smoking = I(smoking) ) A <- illuminaData %>% dplyr::select(which(colnames(.) %in% c("benzene"))) A <- A[, 1] Y <- illuminaData %>% dplyr::select(which(colnames(.) %ni% c("age", "sex", "smoking", "benzene", "id"))) geneIDs <- colnames(Y) Y <- as.data.frame(Y[, 1:4]) biomarkerTMLEout <- biomarkertmle(Y = Y, W = W, A = A, type = "exposure", parallel = 1, family = "gaussian", g_lib = c("SL.mean"), Q_lib = c("SL.mean") )#> [1] "Estimating target parameter for 1 of 4"#>#> [1] "Estimating target parameter for 2 of 4" #> [1] "Estimating target parameter for 3 of 4" #> [1] "Estimating target parameter for 4 of 4"