This website is jointly created and managed by me (Imran) and my friend Nishkal Prakash, with critical inputs from Divyashree Rana.
As an academic, I am a post-graduate in Wildlife Biology and Conservation with a great love for coastal and marine ecosystems.
As a person, I love to spend time outdoors, meet new people and learn new things every day. I like to condense my thoughts and perspectives on life in words and run a blog to express them to people.
Nishkal is a great friend with absolutely mad technical skills. This project wouldn't have been possible without his knowledge and inputs.
How we did it:
We have based the distribution of different species on IUCN data. Imagine stacking the distribution of all species on transperent films together and cutting out different areas of the map (based on overlap of ranges) on a sketching paper. This is how we created the polygons that appear when hovering on the image of a species. These polygons are not accurate depictions of the IUCN data, but in general represent the distribution of one or more species.
Copyright info
Mapper.js is developed and distributed by Netzgestade.
Write to us at<EMAIL_ADDRESS>nishkalprakash@gmail.com


|
Bolt Preview
0.4.4
C++ template library with support for OpenCL
|
Bolt is a C++ template library optimized for GPUs. Bolt provides high-performance library implementations for common algorithms such as scan, reduce, transform, and sort. The Bolt interface resembles the C++ Standard Template Library (STL). Developers familiar with STL will recognize many of the Bolt APIs and customization techniques. In some cases, developers can benefit from GPU acceleration simply by changing the namespace for STL algorithm calls from "std" to "bolt::cl".
C++ templates can be used to customize the algorithms with new types (for example, the Bolt sort
can operate on ints, float, or any custom type defined by the user). Additionally, Bolt lets users customize the template routines using function objects (functors) written in OpenCL; for example, to provide a custom comparison operation for sort
, or a custom reduction operation.
Bolt can directly interface with host memory structures such as std::vector
or host arrays (ie float*
). On today's GPU systems, the host memory is mapped or copied automatically to the GPU. On future systems that support the Heterogeneous System Architecture, the GPU will directly access the host data structures. Bolt also provides a bolt::cl::device_vector that can be used to allocate and manage device-local memory for higher performance on discrete GPU systems. Bolt APIs can accept either host memory or the device vector.
This document introduces the architecture of Bolt and also provides a reference for the Bolt APIs.
The simple example below shows how to use Bolt to sort a random array of 8192 integers.
The code is very similar to familiar C++ Standard Template Library; the only difference is the include file (bolt/cl/sort.h) and the bolt::cl
namespace before the sort
call. If the include were removed and the bolt::cl
namespace changed to std
, the code would use the STL version of sort. Bolt developers do not need to learn a new device-specific programming model to leverage the power and performance advantages of GPU computing.
The example demonstrates two important features of Bolt:
sort
routine, without a need to explicitly allocate and manage GPU device memory. bolt::cl::sort
call submits to the platform, rather than a specific device. The Bolt runtime selects the best device to run the sort, potentially running it on the CPU in the event a GPU is not available or the sort size is too small to benefit from GPU acceleration.Bolt requires an OpenCL(TM) implementation that supports the static C++ kernel features; specifically, C++ template support for OpenCL(TM) kernels. Currently, the AMD OpenCL(TM) SDK 2.7 provides this support; other vendors may adopt this feature in the future.


001package io.ebean.event.changelog; 002 003/** 004 * Transaction state when ChangeSets are sent to the ChangeSetListener. 005 * <p> 006 * For large transactions multiple ChangeSets can be sent in a batch fashion and in this 007 * case all but the last changeSet with have IN_PROGRESS state and the last changeSet will 008 * have the COMMITTED or ROLLBACK state. 009 * </p> 010 */ 011public enum TxnState { 012 013 /** 014 * The Transaction is still in progress. 015 * <p> 016 * Used when the transaction is large/long and Ebean wants to send out the changeSets 017 * in batches and a changeSet is send before the transaction has completed. 018 */ 019 IN_PROGRESS("I"), 020 021 /** 022 * The Transaction was committed. 023 */ 024 COMMITTED("C"), 025 026 /** 027 * The Transaction was rolled back. 028 */ 029 ROLLBACK("R"); 030 031 private final String code; 032 033 TxnState(String code) { 034 this.code = code; 035 } 036 037 /** 038 * Return the short code for the transaction state. 039 * <p> 040 * C - Committed, R - Rollback and I for In progress. 041 * </p> 042 */ 043 public String getCode() { 044 return code; 045 } 046}


| open |
/ |
|
| clickAndWait |
link=Posts |
|
| click |
link=New Post |
|
| type |
id=message |
This post should fail. |
| clickAndWait |
css=button.btn |
|
| verifyTextPresent |
exact:Please log in if you wish to create posts. |
|
| clickAndWait |
link=Register | |
|
| type |
name=username |
testposter1 |
| type |
name=password |
password |
| type |
name=password_c |
password |
| clickAndWait |
css=input.btn |
|
| verifyTextPresent |
exact:Account successfully created |
|
| clickAndWait |
link=Posts |
|
| click |
link=New Post |
|
| type |
id=message |
This is a post from testposter1 |
| clickAndWait |
css=button.btn |
|
| verifyTextPresent |
exact:Post was successfully created. |
|
| click |
link=regexpi:^testposter1 posted at |
|
| verifyTextPresent |
exact:This is a post from testposter1 |
|
| clickAndWait |
link=Log out |
|
| verifyTextPresent |
exact:You were logged out |
|
| clickAndWait |
link=Register | |
|
| type |
name=username |
testposter2 |
| type |
name=password |
password |
| type |
name=password_c |
password |
| clickAndWait |
css=input.btn |
|
| verifyTextPresent |
exact:Account successfully created |
|
| clickAndWait |
link=Posts |
|
| click |
link=New Post |
|
| type |
id=message |
This is a post from testposter2 |
| clickAndWait |
css=button.btn |
|
| verifyTextPresent |
exact:Post was successfully created. |
|
| click |
link=regexpi:^testposter2 posted at |
|
| verifyTextPresent |
exact:This is a post from testposter2 |
|
| click |
id=A1 |
|
| clickAndWait |
link=View All |
|
| click |
link=Comp2150 - Object Orientation |
|
| clickAndWait |
css=div.accordion-inner > button.btn |
|
| click |
link=Submit a Review |
|
| type |
id=description |
Review by testposter2. This is so that testposter1 can find testposter2. |
| select |
id=score |
label=5 |
| clickAndWait |
css=button.btn |
|
| clickAndWait |
link=Log out |
|
| verifyTextPresent |
exact:You were logged out |
|
| clickAndWait |
link=Log in |
|
| type |
name=username |
testposter1 |
| type |
name=password |
password |
| clickAndWait |
css=input.btn |
|
| verifyTextPresent |
exact:You were logged in |
|
| click |
id=A1 |
|
| clickAndWait |
link=View All |
|
| type |
id=search_key |
Comp2150 |
| click |
css=button.btn |
|
| click |
link=Comp2150 - Object Orientation |
|
| clickAndWait |
css=div.accordion-inner > button.btn |
|
| clickAndWait |
link=testposter2 |
|
| clickAndWait |
id=btn-follow |
|
| verifyTextPresent |
exact:You are now following testposter2. |
|
| click |
link=View Followers |
|
| verifyTextPresent |
exact:testposter1 |
|
| click |
css=button.btn |
|
| clickAndWait |
link=Posts |
|
| click |
link=regexpi:^testposter2 posted at |
|
| verifyTextPresent |
exact:This is a post from testposter2 |
|
| clickAndWait |
link=Log out |
|
| verifyTextPresent |
exact:You were logged out |
|
| clickAndWait |
link=Log in |
|
| type |
name=username |
testposter2 |
| type |
name=password |
password |
| clickAndWait |
css=input.btn |
|
| verifyTextPresent |
exact:You were logged in |
|
| clickAndWait |
link=Posts |
|
| click |
link=regexpi:^testposter1 posted at |
|
| verifyTextPresent |
exact:This is a post from testposter1 |
|
| clickAndWait |
link=Log out |
|
| verifyTextPresent |
exact:You were logged out |
|


-
Remove the hassle of setting up your presence online;
we'll be happy to secure you a fitting domain name and hosting service for your site! We know what certain
providers offer, and we'll be sure to select you the best fit, so you're not spending extra for features,
bandwidth, or storage you'll never use!
-
We'll give your site a polished, responsive feel, and transfer over all of your
current website's content to where it belongs! Contact us, and we'll create a free profile of your website with
analysis and a sample revision of some of the features we would add.
-
We have a group of creative and talented graphic designers who
would love to help you redesign your brand and image, or create one! Need help with designing new flyers, posters, menus or any
other material? We can take your ideas and produce a finished product before you know it.
-
If you own a local restaurant and have a website, why not take online orders?
We make signing up with Eat24 simple, and we'll take care of transferring your menu over as well! We'll also be sure to
teach you everything you need to know about updating your menu.
-
Allowing interested customers to inquire about your product or contact you is integral to
expanding your business. We make collecting information from users and reliably sending you organized e-mails simple!
Check out the Contact page for an example of the sleek and complete forms.
-
If you are looking to offer items in an online store, let us help!
No matter where your product information is stored, we'll help you sync up your digital storefront to a secure
payment and analysis platform so you can sleep soundly at night, even while orders are still coming in! We can
also help you accept bitcoin!
-
Interested in Web Development or know someone who is? We teach and tutor individual
training sessions with anyone who wants to learn either online, or in person. We'll discuss your goals, and tailor the exercises towards them.
-
Many of our services have been made available over time after feedback and requests made by our clients!
We can build MEAN Stack applications, and help you configure your site with any of Amazon's Web Services. So if there is
anything you wish we could help with your business, let us know, and we'll discuss how we can assist you!


Rozpiska oparta o Anvils of the Heldenhammer. Raptorsi x 12, 15 Seqitorsów + skinks
Rules: At the Double, Forward to Victory, Inspiring Presence
Selections: 0. Deathly Aura, 0. Soulthief, General, Judgement Blade
Categories: CELESTIAL, HUMAN, HERO, PRIEST, ORDER, STORMCAST ETERNALS, Leader, LORD-VERITANT, General, 6_under_wounds, Artefact
Artefact: Soulthief, Command Trait: Deathly Aura, Unit: Lord-Veritant, Unit Abilities: Bound in Service, Faithful Gryph-hound, Lantern of Abjuration, Sanction, Weapon: Judgement Blade
Selections: Beak and Claws
Categories: CELESTIAL, GRYPH-HOUNDS, ORDER, STORMCAST ETERNALS, Other
Unit: Gryph-Hounds, Unit Abilities: Darting Attacks, Gryph-Hound Alpha, Loyal Companion, Warning Cry, Weapon: Beak and Claws
| Artefact | Artefact Details | Ref |
|---|---|---|
| Soulthief | Pick one of the bearer’s melee weapons. At the end of the combat phase, roll a dice for each enemy model that was allocated any wounds caused by this weapon in that combat phase. On a 3+ that model suffers 1 mortal wound. |
| Command Trait | Command Trait Details | Ref |
|---|---|---|
| Deathly Aura | Subtract 1 from the Bravery characteristic of enemy units while they are within 6" of this general. |
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Gryph-Hounds | 9" | 3 | 6 | - | |
| Lord-Veritant | 5" | 6 | 9 | 3+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Bound in Service | Add 3 to the unbinding roll for this model’s Lantern of Abjuration if there is a friendly GRYPH-HOUND model within 6" of the enemy WIZARD attempting to cast the spell. | |
| Darting Attacks | Each time this unit attacks, it can make a 6" retreat move after all of its attacks have been resolved. | |
| Faithful Gryph-hound | The first time this model is set up on the battlefield, you can call a GRYPH-HOUND unit consisting of a single model to the battlefield and add it to your army. Set up the GRYPH-HOUND wholly within 3" of this model and more than 9" from any enemy units. | |
| Gryph-Hound Alpha | If a unit of Gryph-hounds has 3 or more models, one Gryph-hound can be a Gryph-hound Alpha. Add 1 to the Attacks characteristic of a Gryph-hound Alpha’s Beak and Claws. | |
| Lantern of Abjuration | This model can unbind one spell in each enemy hero phase in the same manner as a WIZARD. | |
| Loyal Companion | Add 2 to the Attacks characteristic of this unit’s Beak and Claws while this unit is wholly within 6" of a friendly LORD-CASTELLANT or LORD-VERITANT. | |
| Sanction | In your hero phase, you can pick 1 enemy WIZARD within 7" of this model and roll a dice. On a 4+ that enemy unit suffers D3 mortal wounds. | |
| Warning Cry | If a reserve enemy unit is set up on the battlefield for the first time within 10" of this unit, friendly STORMCAST ETERNAL units wholly within 9" of this unit can attack that reserve unit with all of the missile weapons they are armed with. A unit that uses this ability to attack a reserve unit cannot use this ability to attack another reserve unit in the same phase. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Beak and Claws | Melee | 1" | 2 | 3+ | 4+ | - | 1 | |
| Judgement Blade | Melee | 1" | 4 | 3+ | 3+ | -1 | 2 |
Selections: 5 Liberators, Grandhammer, Warhammer and Shield
Categories: CELESTIAL, HUMAN, LIBERATORS, REDEEMER, ORDER, STORMCAST ETERNALS, Battleline
Unit: Liberator, Unit Abilities: Lay Low the Tyrants, Liberator-Prime, Paired Weapons, Sigmarite Shields, Weapon: Grandhammer, Warhammer(s)
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Liberator | 5" | 2 | 7 | 4+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Lay Low the Tyrants | You can add 1 to hit rolls for attacks made by this unit that target an enemy unit with a Wounds characteristic of 5 or more. | |
| Liberator-Prime | The leader of this unit is a Liberator-Prime. Add 1 to the Attacks characteristic of a Liberator-Prime’s melee weapon. | |
| Paired Weapons | Each unmodified hit roll of 6 made for a model armed with either a pair or warhammers or a pair of warblades inflicts 2 hits on the target instead of 1. Make a wound and save roll for each hit. | |
| Sigmarite Shields | You can re-roll save rolls of 1 for attacks that target this unit if any models from this unit are carrying Sigmarite Shields. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Grandhammer | Melee | 1" | 2 | 4+ | 3+ | -1 | 2 | |
| Warhammer(s) | Melee | 1" | 2 | 4+ | 3+ | - | 1 |
Selections: 5 Liberators, Grandhammer, Warhammer and Shield
Categories: CELESTIAL, HUMAN, LIBERATORS, REDEEMER, ORDER, STORMCAST ETERNALS, Battleline
Unit: Liberator, Unit Abilities: Lay Low the Tyrants, Liberator-Prime, Paired Weapons, Sigmarite Shields, Weapon: Grandhammer, Warhammer(s)
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Liberator | 5" | 2 | 7 | 4+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Lay Low the Tyrants | You can add 1 to hit rolls for attacks made by this unit that target an enemy unit with a Wounds characteristic of 5 or more. | |
| Liberator-Prime | The leader of this unit is a Liberator-Prime. Add 1 to the Attacks characteristic of a Liberator-Prime’s melee weapon. | |
| Paired Weapons | Each unmodified hit roll of 6 made for a model armed with either a pair or warhammers or a pair of warblades inflicts 2 hits on the target instead of 1. Make a wound and save roll for each hit. | |
| Sigmarite Shields | You can re-roll save rolls of 1 for attacks that target this unit if any models from this unit are carrying Sigmarite Shields. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Grandhammer | Melee | 1" | 2 | 4+ | 3+ | -1 | 2 | |
| Warhammer(s) | Melee | 1" | 2 | 4+ | 3+ | - | 1 |
Selections: 3 Aetherwings [40pts], Beak and Claws
Categories: AETHERWINGS, CELESTIAL, ORDER, STORMCAST ETERNALS, Other
Unit: Aetherwing, Unit Abilities: Fly, Swooping Hunters, Watchful Guardians, Weapon: Beak and Claws
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Aetherwing | 12" | 2 | 6 | - |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Fly | This unit can fly. | |
| Swooping Hunters | This unit can retreat and still charge later in the same turn. | |
| Watchful Guardians | At the start of the enemy charge phase, if this unit is wholly within 18" of a friendly unit of VANGUARD-RAPTORS, this unit can move up to 2D6". They must finish the move wholly within 18" of the same unit of VANGUARD-RAPTORS . |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Beak and Claws | Melee | 1" | 2 | 4+ | 3+ | - | 1 |
Selections: 3 Aetherwings [40pts], Beak and Claws
Categories: AETHERWINGS, CELESTIAL, ORDER, STORMCAST ETERNALS, Other
Unit: Aetherwing, Unit Abilities: Fly, Swooping Hunters, Watchful Guardians, Weapon: Beak and Claws
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Aetherwing | 12" | 2 | 6 | - |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Fly | This unit can fly. | |
| Swooping Hunters | This unit can retreat and still charge later in the same turn. | |
| Watchful Guardians | At the start of the enemy charge phase, if this unit is wholly within 18" of a friendly unit of VANGUARD-RAPTORS, this unit can move up to 2D6". They must finish the move wholly within 18" of the same unit of VANGUARD-RAPTORS . |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Beak and Claws | Melee | 1" | 2 | 4+ | 3+ | - | 1 |
Selections: 10 Skinks [60pts], Skink Alpha
Categories: ORDER, SERAPHON, SKINKS, Other
Unit: Skink, Unit Abilities: Skink Alpha, Swarming Cohort
Selections: Boltspitter, Celestite Dagger, Star-buckler
Unit Abilities: Star-buckler, Weapon: Boltspitter, Celestite Dagger
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Skink | 8" | 1 | 5 | 6+ | Order Battletome - Seraphon |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Skink Alpha | 1 model in this unit can be a Skink Alpha. Add 1 to the Attacks characteristic of that model’s melee weapons. | Order Battletome - Seraphon |
| Star-buckler | Add 1 to save rolls for attacks that target a unit armed with Star-bucklers. | Order Battletome - Seraphon |
| Swarming Cohort | Add 1 to the Attacks characteristic of weapons used by this unit while it has 15 or more models. | Order Battletome - Seraphon |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Boltspitter | Missile | 16" | 1 | 5+ | 5+ | - | 1 | Order Battletome - Seraphon |
| Celestite Dagger | Melee | 1" | 1 | 5+ | 5+ | - | 1 | Order Battletome - Seraphon |
Selections: 10 Skinks [60pts], Skink Alpha
Categories: ORDER, SERAPHON, SKINKS, Other
Unit: Skink, Unit Abilities: Skink Alpha, Swarming Cohort
Selections: Boltspitter, Celestite Dagger, Star-buckler
Unit Abilities: Star-buckler, Weapon: Boltspitter, Celestite Dagger
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Skink | 8" | 1 | 5 | 6+ | Order Battletome - Seraphon |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Skink Alpha | 1 model in this unit can be a Skink Alpha. Add 1 to the Attacks characteristic of that model’s melee weapons. | Order Battletome - Seraphon |
| Star-buckler | Add 1 to save rolls for attacks that target a unit armed with Star-bucklers. | Order Battletome - Seraphon |
| Swarming Cohort | Add 1 to the Attacks characteristic of weapons used by this unit while it has 15 or more models. | Order Battletome - Seraphon |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Boltspitter | Missile | 16" | 1 | 5+ | 5+ | - | 1 | Order Battletome - Seraphon |
| Celestite Dagger | Melee | 1" | 1 | 5+ | 5+ | - | 1 | Order Battletome - Seraphon |
Selections: 3 Vanguard-Palladors [170pts], Boltstorm Pistol, Razor Beak and Claws, Starstrike Javelin
Categories: ANGELOS, CELESTIAL, HUMAN, VANGUARD-PALLADORS, ORDER, STORMCAST ETERNALS, Other
Unit: Vanguard-Pallador, Unit Abilities: Aethereal Strike, Lunar Blade, Mount, Pallador-Prime, Ride the Winds Aetheric, Weapon: Boltstorm Pistol, Razor Beak and Claws, Starstrike Javelin, Starstrike Javelin (Missile)
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Vanguard-Pallador | 12" | 5 | 7 | 4+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Aethereal Strike | If the unmodified hit roll for an attack made with a Gryph-charger’s Razor Beak and Claws is 6, that attack inflicts 1 mortal wound on the target and the attack sequence ends (do not make a wound or save roll). | |
| Lunar Blade | Each time a model armed with a Lunar Blade attacks, after all of that model’s attacks have been resolved, you can pick 1 enemy unit within 1" of that model and roll a dice. On a 2+ the unit you picked suffers 1 mortal wound. | |
| Mount | This unit’s Gryph-chargers attack with their Razor Beak and Claws. | |
| Pallador-Prime | The leader of this unit is a Pallador-Prime. A Pallador-Prime is armed with a Lunar Blade in addition to their other weapons. | |
| Ride the Winds Aetheric | In your movement phase, this model can Ride the Winds Aetheric instead of moving normally. If it does so, choose the direction in which it will move, and roll 6D6. This model can move up to a number of inches equal to the result in the direction chosen, moving over terrain and other models as if it could fly. It must end the move more than 3" from enemy models – if this is impossible, it cannot move at all. This model cannot charge in a turn in which it Rides the Winds Aetheric. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Boltstorm Pistol | Missile | 9" | 2 | 3+ | 4+ | - | 1 | |
| Razor Beak and Claws | Melee | 1" | 3 | 3+ | 3+ | -2 | 1 | |
| Starstrike Javelin | Melee | 2" | 1 | 4+ | 3+ | -1 | 1 | |
| Starstrike Javelin (Missile) | Missile | 18" | 1 | 3+ | 3+ | -1 | 1 |
Selections: 2x 3 Vanguard-Raptors with Longstrike Crossbows [340pts], Beak and Claws, Heavy Stock, Longstrike Crossbow
Categories: CELESTIAL, HUMAN, JUSTICAR, VANGUARD-RAPTORS, ORDER, STORMCAST ETERNALS, Other
Unit: Vanguard-Raptor with Longstrike Crossbow, Unit Abilities: Headshot, Hunting Call, Longshot, Raptor-Prime, Weapon: Beak and Claws, Heavy Stock, Longstrike Crossbow
| Unit | Move | Wounds | Bravery | Save | Ref |
|---|---|---|---|---|---|
| Vanguard-Raptor with Longstrike Crossbow | 5" | 2 | 7 | 4+ |
| Unit Abilities | Ability Details | Ref |
|---|---|---|
| Headshot | If the unmodified hit roll for an attack made with a Longstrike Crossbow is 6, that attack inflicts 2 mortal wounds on the target and the attack sequence ends (do not make a wound or save roll). | |
| Hunting Call | If an enemy unit finishes a charge move within 1" of a friendly unit that includes a Raptor-Prime, roll a dice for each model in that Raptor-Prime’s unit. For each 6+, the charging unit suffers 2 mortal wounds. | |
| Longshot | Add 6" to the Range characteristic of this unit’s Longstrike Crossbows if this unit did not move in the movement phase of the same turn. | |
| Raptor-Prime | The leader of this unit is a Raptor-Prime. A Raptor-Prime is accompanied by an Aetherwing, which attacks with its Beak and Claws. For rules purposes, it is treated in the same manner as a mount. |
| Weapon | Type | Range | Attacks | To Hit | To Wound | Rend | Damage | Ref |
|---|---|---|---|---|---|---|---|---|
| Beak and Claws | Melee | 1" | 2 | 4+ | 3+ | - | 1 | |
| Heavy Stock | Melee | 1" | 1 | 4+ | 3+ | - | 1 | |
| Longstrike Crossbow | Missile | 24" | 1 | 2+ | 3+ | -2 | 2 |
Categories: Allegiance
Selections: Anvils of the Heldenhammer, Stormkeep
Battle Trait: Mortal Auxilliaries, No True Death, Shield of Civilisation, Stormhosts, Command Abilities: Heroes of Another Age
| Battle Trait | Battle Trait Details | Ref |
|---|---|---|
| Mortal Auxilliaries | 1 in every 4 units in a Stormkeep army can be a CITIES OF SIGMAR unit. Those units cannot be the army general. Add 1 to the Bravery characteristic of those units while they are wholly within 12" of a friendly LIBERATORS unit. In addition, when you pick a unit to benefit from a command ability from Battletome: Stormcast Eternals, you can treat those units as if they were STORMCAST ETERNALS units. | |
| No True Death | You can re-roll failed battleshock tests for friendly ANVILS OF THE HELDENHAMMER units. | |
| Shield of Civilisation | Add 1 to the Bravery characteristic of friendly STORMCAST ETERNALS units while they are wholly within 12" of any friendly LIBERATORS units. In addition, at the end of your movement phase, you can pick any friendly LIBERATORS units that did not move and were not set up in that phase and say they will stand fast. If you do so, until your next movement phase, you can add 1 to hit rolls for attacks made by those units, and you can add 1 to save rolls for attacks that target those units. |
|
| Stormhosts | If your army is a Stormcast Eternals army, you can give it a Stormhost keyword. All STORMCAST ETERNAL units in your army gain that keyword. If a model already has a Stormhost keyword, it cannot gain another one, but this does not prevent other units in your army from having a different Stormhost keyword. You can either choose one of the Stormhosts in the list, or choose another Stormhost you've read about or created yourself. If you choose from the list below, all units with that keyword benefit from the extra abilities listed for that Stormhost. If you choose a different Stormhost, simply pick the Stormhost that most closely matches the nature of your own Stormhost. |
| Command Abilities | Command Ability Details | Ref |
|---|---|---|
| Heroes of Another Age | You can use this command ability in your hero phase. If you do so, pick a friendly ANVILS OF THE HELDENHAMMER unit wholly within 9" of a friendly ANVILS OF THE HELDENHAMMER HERO, or wholly within 18" of a friendly ANVILS OF THE HELDENHAMMER HERO that is a general. That unit can attack with all of the missile weapons it is armed with, or make a pile-in move and attack with all of the melee weapons it is armed with. You cannot pick the same unit to benefit from this command ability more than once per hero phase. |
Selections: 1000 Points - Vanguard
Categories: Game Options, Vanguard
Selections: Origin: Aqshy
Categories: Realm of Origin
Selections: Battle: Shyish
Categories: Realm of Battle
Command Abilities: Amethyst Aura, Spell: Ethereal Guide, Night's Touch, Ripples of the Necroquake, Soulflay, Soulshroud, Unnatural Darkness, Word of Ending
| Command Abilities | Command Ability Details | Ref |
|---|---|---|
| Amethyst Aura | You can use this command ability in your hero phase. If you do so, pick 1 friendly unit wholly within 12" of a friendly HERO. Until the end of that battle round, roll a dice each time you allocate a wound or mortal wound to that unit. On a 6, that wound or mortal wound is negated. |
| Spell | Casting Value | Description | Ref |
|---|---|---|---|
| Ethereal Guide | 6 | If successfully cast, add 1 to hit rolls for attacks made by the caster until your next hero phase. | Malign Sorcery p76 |
| Night's Touch | 8 | If successfully cast, pick a friendly unit within 6" of the caster that is visible to them. Ignore modifiers (positive and negative) when making save rolls for that unit until your next hero phase. | Malign Sorcery p76 |
| Ripples of the Necroquake | 7 | Until the end of that phase, add 1 to casting rolls made for friendly WIZARDS if the casting roll is for an endless spell. | |
| Soulflay | 7 | If successfully cast, pick an enemy HERO within 12" of the caster that is visible to them. That unit suffers D3 mortal wounds. In addition, if the unit suffers 3 mortal wounds from this spell, subtract 2 from its Bravery characteristic until your next hero phase. | Malign Sorcery p76 |
| Soulshroud | 6 | If successfully cast, pick a friendly unit within 12" of the caster that is visible to them. That unit is not affected by other spells until your next hero phase. | Malign Sorcery p76 |
| Unnatural Darkness | 6 | If successfully cast, pick a friendly unit within 12" of the caster that is visible to them. Subtract 1 from hit rolls for attacks that target that unit until your next hero phase. | Malign Sorcery p76 |
| Word of Ending | 6 | If successfully cast, pick an enemy HERO within 12" of the caster that is visible to them and roll a dice. If the result is more than the number of wounds allocated to that model, it suffers D3 mortal wounds. | Malign Sorcery p76 |
At the Double: You can use this command ability after you make a run roll for a friendly unit that is within 6" of a friendly HERO, or 12" of a friendly HERO that is a general.  (Core Rules p3)
Forward to Victory: You can use this command ability after you make a charge roll for a friendly unit that is within 6" of a friendly HERO, or 12" of a friendly HERO that is a general. If you do so, re-roll the charge roll. (Core Rules p3)
Inspiring Presence: You can use this command ability at the start of the battleshock phase. If you do so, pick a friendly unit that is within 6" of friendly HERO, or 12" of a friendly HERO that is a general. That unit does not have to take battleshock tests in that phase. (Core Rules p3)
Created with BattleScribe


I was traveling in India and Nepal about a year ago, and brought back a small bag of whole betel nuts that my sitar teacher in Banares got for me. I had chewed 'bitter paan' or Paan Masala, I think, a few times with my friends I had made in India. There's a few kinds of Paan (betel nut preparations) in India: Sweet Paan was used as a digestif in desserts and what not, some other sort, and bitter paan, masala.
The basic preps that I saw of bitter paan were basically lime paste, 1-2 green cardamom pods, a few cumin seeds, something that looked like modified orange marmalade, a small amount of tobacco, of course a few little chunks of crushed betel nut, all wrapped up into a little quid using a fresh betel leaf. There were of course variations on this mixture, as everyone has their own preference in such things, right?
I took a single betel nut, wrapped it up in a piece of paper and shattered it with a hammer, then more or less powdered it in my coffee grinder. The resulting rust colored powder was put into a shot glass along with the following:
1/3 tsp baking soda
1 1/2 tsp orange marmalade
contents of 6 peeled green cardamom pods
two pinches cumin seeds
a dash of black pepper
This concoction was then stirred thoroughly, and about 1/6 of it was wadded up in some tea bag paper. I have been sucking on it for about 15 minutes now, have spit bloody red-colored stuff a couple of times now (don't want to swallow this crap!) and am feeling a nice little buzz similar to caffeine, but a little more stupifying ;-)
I think I'll walk somewhere to get food now, dunno about driving.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Digital and mixed media
Redesigned the power and control wheel, often used in discussions of intimate partner violence, into a map with graphics that would emphasize and illustrate the relationship between all the different elements and the presence of identity power relations in all of it.
Illustrated the concept of gaslighting, when someone dismisses or invlaidates one's thoughts or beliefs, for an article on the same topic.
Illustration for an article on the do's and don'ts of helping someone going through a situation of intimate partner violence.
Illustration for an article on Split Defense, during which an individual copes with abuse by compartmentalizing different experiences and emotions.
Illustration for an article on the barriers to overcoming emotional abuse.


Choose from the best selection of video games at MD Games today!
The Outer Worlds
Call of Duty Modern Warfare
Borderlands 3
NHL 20
Luigis Mansion
Overwatch
Links Awakening
Mario Maker 2
Code Vein
Madden NFL 20
NBA 2K20
Sekiro Shadows Die Twice
If you would like to guarentee your copy of a game not released give us a call and you can reserve your copy today!
Pre Ordering Includes:
** Exclusive MD Games Content **
** Four Days Early Access **
** Developer Game Bonuses **
and Much More!


Chapter 2 Experimental design(DoE)
Before you perform any metabolomics experiment, a clean and meaningful experimental design is the best start. Depending on different research purposes, experimental design can be classified into homogeneity and heterogeneity study. Technique such as isotope labeled media will not be discussed in this chapter while this paper(Jang, Chen, and Rabinowitz 2018) could be a good start.
2.1 Homogeneity study
In homogeneity study, the research purpose is about method validation in most cases. Pooled sample made from multiple samples or technical replicates from same population will be used. Variances within the samples should be attributed to factors other than the samples themselves. For example, we want to know if sample injection order will affect the intensities of the unknown peaks, one pooled sample or technical replicates samples should be used.
Another experimental design for homogeneity study will use biological replicates to find the common features from a group of samples. Biological replicates mean samples from same population with same biological process. For example, we wanted to know metabolites profiles of a certain species and we could collected lots of the individual samples from the population. Then only the peaks/compounds appeared in all samples will be used to describe the metabolites profiles of this species. Technical replicates could also be used with biological replicates.
2.2 Heterogeneity study
In heterogeneity study, the research purpose is to find the differences among samples. You need at least a baseline to perform the comparison. Such baseline could be generated by random process, control samples or background knowledge. For example, outlier detection can be performed to find abnormal samples in unsupervised manners. Distribution or spatial analysis could be used to find geological relationship of known and unknown compounds. Temporal trend of metabolites profile could be found by time series or cohort studies. Clinical trial or random control trial is also an important class of heterogeneity studies. In this cases, you need at least two groups: treated group and control group. Also you could treat this group information as the one primary variable or primary variables to be explored for certain research purposes. In the following discussion about experimental design, we will use random control trail as model to discuss important issues.
2.3 Power analysis
Supposing we have control and treated groups, the numbers of samples in each group should be carefully calculated.For each metabolite, such comparison could be treated as one t-test. You need to perform a Power analysis to get the numbers. For example, we have two groups of samples with 10 samples in each group. Then we set the power at 0.9, which means one minus Type II error probability, the standard deviation at 1 and the significance level (Type 1 error probability) at 0.05. Then we will get the meaningful delta between the two groups should be higher than 1.53367 under this experiment design. Also we could set the delta to get the minimized numbers of the samples in each group. To get those data such as the standard deviation or delta for power analysis, you need to perform preliminary or pilot experiments.
power.t.test(n=10,sd=1,sig.level = 0.05,power = 0.9)
##
## Two-sample t test power calculation
##
## n = 10
## delta = 1.53367
## sd = 1
## sig.level = 0.05
## power = 0.9
## alternative = two.sided
##
## NOTE: n is number in *each* group
power.t.test(delta = 5,sd=1,sig.level = 0.05,power = 0.9)
##
## Two-sample t test power calculation
##
## n = 2.328877
## delta = 5
## sd = 1
## sig.level = 0.05
## power = 0.9
## alternative = two.sided
##
## NOTE: n is number in *each* group
However, since sometimes we could not perform preliminary experiment, we could directly compute the power based on false discovery rate control. If the power is lower than certain value, say 0.8, we just exclude this peak as significant features.
In this review (Oberg and Vitek 2009), author suggest to estimate an average \(\alpha\) according to this equation (Benjamini and Hochberg 1995) and then use normal way to calculate the sample numbers:
\[ \alpha_{ave} \leq (1-\beta_{ave})\cdot q\frac{1}{1+(1-q)\cdot m_0/m_1} \]
Other study (Blaise et al. 2016) show a method based on simulation to estimate the sample size. They used BY correction to limit the influences from correlations. Other investigation could be found here(Saccenti and Timmerman 2016; Blaise 2013). However, the nature of omics study make the power analysis hard to use one number for all metabolites and all the methods are trying to find a balance to represent more peaks with least samples.
MetSizeR GUI Tool for Estimating Sample Sizes for metabolomics Experiments(Nyamundanda et al. 2013).
MSstats Protein/Peptide significance analysis (Choi et al. 2014a).
enviGCMS GC/LC-MS Data Analysis for Environmental Science(M. Yu et al. 2017a).
2.4 Optimization
One experiment can contain lots of factors with different levels and only one set of parameters for different factors will show the best sensitivity or reproducibility for certain study. To find this set of parameters, Plackett-Burman Design (PBD), Response Surface Methodology (RSM), Central Composite Design (CCD), and Taguchi methods could be used to optimize the parameters for metabolomics study. The target could be the quality of peaks, the numbers of peaks, the stability of peaks intensity, and/or the statistics of the combination of those targets. You could check those paper for details(Jacyna, Kordalewska, and Markuszewski 2019; Box, Hunter, and Hunter 2005).
2.5 Pooled QC
Pooled QC samples are unique and very important for metabolomics study. Every 10 or 20 samples, a pooled sample from all samples and blank sample in one study should be injected as quality control samples. Pooled QC samples contain the changes during the instrumental analysis and blank samples could tell where the variances come from. Meanwhile the cap of sequence should old the column with pooled QC samples. The injection sequence should be randomized. Those papers(Phapale et al. 2020; Dudzik et al. 2018; Dunn et al. 2012; Broadhurst et al. 2018) should be read for details.
If there are other co-factors, a linear model or randomizing would be applied to eliminate their influences. You need to record the values of those co-factors for further data analysis. Common co-factors in metabolomics studies are age, gender, location, etc.
If you need data correction, some background or calibration samples are required. However, control samples could also be used for data correction in certain DoE.
Another important factors are instrumentals. High-resolution mass spectrum is always preferred. As shown in Lukas’s study (Najdekr et al. 2016):
the most effective mass resolving powers for profiling analyses of metabolite rich biofluids on the Orbitrap Elite were around 60000–120000 fwhm to retrieve the highest amount of information. The region between 400–800 m/z was influenced the most by resolution.
However, elimination of peaks with high RSD% within group were always omitted by most study. Based on pre-experiment, you could get a description of RSD% distribution and set cut-off to use stable peaks for further data analysis. To my knowledge, 30% is suitable considering the batch effects.


Brian Rossbert
Democrat
I am the Development Director at the Interfaith Alliance of Colorado.
I hold a Bachelor of Arts degree from Adams State College and a Masters of Divinity degree from Wesley Theological Seminary
80207
I helped to run a successful campaign for U.S. Congress in the 3rd Congressional District in 2004. I have given to candidates for federal office including John Hickenlooper, Jon Ossef, and Jamie Harrison as well as to the Presidential Campaigns of Hillary Clinton and Joe Biden.
I am a member of the board of directors for Urban Servant Corps in Denver.
I have advocated for a variety of civil and human rights issues as a member of the staff of the Interfaith Alliance of Colorado. Those issues include: LGBTQ rights/equality, women's rights, criminal justice reform, and religious liberty issues.
I have seen what political gerrymandering of redistricting efforts have done in the past. I wish to see districts that are competitive where ideas and issues get debated in the public sphere and am hopeful that with greater competitiveness comes greater accountability to constituents and the general public.
I believe in bridging the divides that separate us in our politics and worldviews right now. I believe there are productive ways forward that can be found using not a winner-take-all model of decision-making, but rather building consensus through shared listening and work. Even though I am a Democrat, I believe I can be fair and impartial when it comes to drawing the lines of those who will represent us in Washington, DC. I feel like both Democrats and Republicans in the past have used redistricting to solidify and consolidate power and I hope to be a part of the solution. That solution, to me, is making redistricting less about politics/power and more about representation.
I'm a critical thinker who is able to digest complex problems in a way that finds simple solutions in the midst of the details. I work well in face-paced, team environments in which a common goal is set before us. I have worked on campaigns that analyze voter data in a way that identifies and targets individuals for unique messaging asks. This experience and my attention to detail make me unique among candidates.
Male


MY Articles
Median of two sorted arrays of different sizes
Given two sorted arrays, a[] and b[], the task is to find the median of these sorted arrays, in O(log n + log m) time complexity, when n is the number of elements in the first array, and m is the number of elements in the second array.
Accessibility check for Static Variable
In this article I wrote about the accessibility of static variables by the static methods.
UI/UX as a career option
Many of the youngsters specially those who are in their twenties are i search of their carrer option like in designing ad development.
3D printing
3D printing or additive manufacturing is a process of making three dimensional solid objects from a digital file.The creation of a 3D printed object is achieved using additive processes.
Blockchain
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorem quaerat iusto adipisci reprehenderit quasi cum perspiciatis, minima reiciendis magni quam!
Quantum Computing
Quantum computing is the use of quantum phenomena such as superposition and entanglement to perform computation. Computers that perform quantum computations are known as quantum computers.
How to get started with open source
Many of the new contributors faced this problem alot.
They don't know how to get started with the open source community so, In this blog I wrote about How to contribute for the first time.
They don't know how to get started with the open source community so, In this blog I wrote about How to contribute for the first time.
Various open source programs
In this blog I mentioned the information about the of various open source programs like the eligibiity, selection process application date, Program duration and much more.
Java Data Base Connectivity
I wrote about the Java Database Connectivity in this blog like
how to create a connection, how to create a statemennt & how to create database etc.,
how to create a connection, how to create a statemennt & how to create database etc.,
Let's get Conneted


Purpose:
My PWP will be an expansion of an existing portfolio site that shows a sampling of design work and some descriptive text, then adding programming skills and changing the focus to one of a competent web developer with strong front-end abilities.
Audience:
The audience for this project will be potential employers and customers. Employers in that I will be looking for full-time employment, Customers in that I've always taken a freelance job here and there when I have the time.
Goals:
The goals of this project will be to attract employers and get job offer(s), and to keep as a high-quality repository for visual design work (in addition to GitHub for coding work).
Persona:
Mike Smith, Age: 56.
Profession:
Mike is the IT manager of a medium-sized company. He has been tasked with creating a brand-new website to be deployed with the visuals from an ad-agency-conceived branding package that features a new customer focus. The current website uses PHP/MySql with a mix of dynamic pages and old static pages that were built with DreamWeaver, but the new site will use an industry-standard, modern toolchain.
Technology:
Mike uses his Windows desktop work computer with its 4-monitor setup for almost all of his work-related tasks, and a MacBook Pro that he can switch into the monitor array when he needs to. Outside of work he uses an iPhone 12 Pro Max for occasional browsing and out-of-office email retrieval, and he'll take the MacBook Pro home on occasion.
Attitudes and Behaviors:
Overworked, Mike has to manage his time wisely to be able to get any quality time with his family. He has established a large social media footprint and leverages it when he needs to find a new hire or contractor. He almost uses his network to do first-round vetting, even though he uses job boards like Indeed and ZipRecruiter to find candidates also.
Goals:
The goal of Mike Smith is to hire someone who can casually mentor the existing staff with the newer application of web technologies, while adding another set of eyes/hands on the project.
Frustrations:
Mike has a small core of developers who do the bulk of the work and are happy with their jobs. It's the junior-level developers who tend to churn more than he'd like, and he isn't happy with how his boss gets too involved in the negotiation process when he wants to hire someone. He wishes he had more control over how much his staff is compensated.
The inconsistency of technology within the website has been a long-standing frustration, so Mike's boss sees this as an opportunity for a brand-new website to be revealed as an integral part of the new branding release and marketing campaign. It will use JavaScript exclusively, and Bootstrap for styling look/feel. Unfortunately, his current staff is somewhat unfamiliar with the application of these new techniques, so he is looking for someone with these skills to flatten the learning curve, and get this job finished inside the deadline he has been provided. He's hoping he'll have the budget to hire someone with the right skill set.
User Story:
As a hiring manager, Mike wants to find a match to the job skills he wants in that candidate as soon as possible.


In new pro-Israel shift, US no longer calls settlements illegal
by AFPIn Summary
- The statement puts the United States at odds with virtually all countries as well as UN Security Council resolutions.
- Israeli Prime Minister Benjamin Netanyahu, a close ally of President Donald Trump who is days away from potentially losing office, hailed the announcement.
- The Palestinian Authority -- which has refused negotiations through the Trump administration, which it considers biased -- denounced the latest decision.
Washington,
The United States no longer believes that Israeli settlements in the Palestinian territories are illegal, Secretary of State Mike Pompeo announced Monday in the latest pro-Israel shift by Washington.
The statement puts the United States at odds with virtually all countries as well as UN Security Council resolutions and was hailed by Israeli Prime Minister Benjamin Netanyahu, a close ally of President Donald Trump who is days away from potentially losing office.
"After carefully studying all sides of the legal debate," Pompeo told reporters, the United States has concluded that "the establishment of Israeli civilian settlements in the West Bank is not, per se, inconsistent with international law."
"Calling the establishment of civilian settlements inconsistent with international law hasn't worked. It hasn't advanced the cause of peace," Pompeo said.
'HISTORICAL TRUTH'
Also Read
-
Mid-air scare for trainee pilot after wheel falls off
-
Trump had no chest pain, his doctor says
-
24 soldiers, 17 militants killed in attack: Mali army
Advertisement
Pompeo said that the United States was not necessarily considering the settlements legal either but instead would defer to the judgment of Israeli courts.
The Palestinian Authority -- which has refused negotiations through the Trump administration, which it considers biased -- denounced the latest decision.
Washington is "not qualified or authorised to cancel the resolutions of international law, and has no right to grant legality to any Israeli settlement," Palestinian presidential spokesman Nabil Abu Rudeinah said in a statement.
But Netanyahu said that the US shift "rights a historical wrong" for the 600,000 Israeli settlers who live in the West Bank and east Jerusalem among around 2.9 million Palestinians.
"This policy reflects an historical truth -- that the Jewish people are not foreign colonialists in Judea and Samaria. In fact, we are called Jews because we are the people of Judea," he said in a statement, using the biblical term for the West Bank.
TIMING
The move will surely be interpreted as a boost for Netanyahu as his centrist rival, Benny Gantz, has only two days to form a government after inconclusive elections.
Pompeo denied a motivation to prop up Netanyahu, saying: "The timing of this was not tied to anything that had to do with domestic politics anywhere in Israel or otherwise."
Until now, US policy was based, at least in theory, on a legal opinion issued by the State Department in 1978 which said that settlements in the Palestinian territories captured a decade earlier by Israel went against international law.
The Fourth Geneva Convention on the laws of war explicitly forbids moving civilians into occupied territories.
While the United States has generally vetoed Security Council measures critical of Israel, previous president Barack Obama, exasperated with Netanyahu, in his final weeks in office allowed the passage of Resolution 2334 that called Israel's settlements a "flagrant violation" of international law.
ELUSIVE PEACE
Previous US administrations have also criticised settlements to varying degrees.
Democratic presidential candidate Elizabeth Warren said she would reverse Pompeo's "blatantly ideological" shift on settlements.
"Not only do these settlements violate international law -- they make peace harder to achieve," she tweeted.
A fellow Democratic senator, Chris Murphy, said the "monumentally bad" decision "could obliterate the chances of Israeli-Palestinian peace."
"And it puts Israel further down a path that has a terrible choice at the end -- become a non-Jewish state or become a permanent apartheid state," Murphy said.
Pompeo said he was releasing a "legal review" and not taking on whether Israel should build more settlements.
TWO-STATE SOLUTION
But Israel has already been increasingly emboldened. The activist group Peace Now said that Israel has approved 8,337 housing units in the year through October, an increase of 50 percent from a year earlier.
Israel dismantled homes in the Gaza Strip when it withdrew in 2005 and draws a distinction between settlements and construction in east Jerusalem, which has been annexed by the Jewish state.
Netanyahu vowed in his latest election campaign also to annex large parts of the West Bank, a move that would effectively end a two-state solution.
Trump, whose evangelical Christian base is staunchly pro-Israel, has taken a number of landmark steps including recognising Jerusalem as the Jewish state's capital and cutting off aid to the UN agency that provides schooling to Palestinian refugees.
The latest step puts the United States at stark odds with the European Union, whose top court ruled last week that goods from Israeli settlements must be labelled as such.


{% extends 'base.html' %} {% block body %}
This is a warning, all the info you get from the website is your property. I didn't set it up to collect the data and I can't know about it. I am a privacy enthuasit myself and this is just to show you how easy it is for websites to pin point you and get your info. The beauty of it leis in the fact that I am a learner. I am still learning flask. Using simple free api's, I will show you your exact location, to the coordinates.
If you don't trust me when I say, I can't collect your data and you know python and basic html, you can check the code out. You will not find anything through which I can collect your data.
Please, if you are not comfortable with this, you can exit, no harm, but check it out, you will know how easy it is track you. If you want to educate someone about the importance of tech privacy, show this to them. It will surely spook them out. With that being said, this website is completely open source. So please don't worry, I will not use your data.
Any legal complaints, contact me.
One last thing, for all you people who think I am doing this with javascript, you can go ahead and disable it, it won't matter as I am using python, so, sorry I guess.
If you are easily spooked, don't visit this website.


{%- extends 'base.html' -%} {% from "macros.html" import screenshot without context %} {%- block content -%}
{{ kit.desc }}
Click on any image to examine the model on the view page or click on the details button next to each model to explain the model code.
{% for model in kit.models %}{{ model.model }}
{{ model.content|safe }}


{% load tz %} {% load i18n %}
{% trans "Hi there!" %}
{% trans "Your message export is ready and can be downloaded by clicking on the following link:" %} {{ link }}
{% trans "Thanks," %}
{% trans "The U-Partners Team" %}


--- layout: post date: 2013-06-17 23:10:00 +0200 title: "Talk about Debian Code Search" categories: Artikel tags: - debian ---
At this year’s GPN13 I gave a talk about Debian Code Search. It was in German, so I spent a few hours creating english subtitles.
You can watch the video at youtube.com/watch?v=n6DtW3zCTvk with english subtitles.
In case you prefer to download the file(s), get http://ftp.ccc.de/events/gpn/gpn13/gpn13-debian-code-search.mp4
(84 MiB) and the corresponding subtitle file at http://t.zekjur.net/gpn13-debian-code-search.srt.
Drop both files in the same directory, run mplayer
gpn13-debian-code-search.mp4
and press v to enable subtitles.
I intend to eventually put the (subtitled) video on YouTube and refer to it
from codesearch.debian.net, but I
wanted to post the video in its current form already.
The presentation itself explains the motivation behind Debian Code Search and how it works. You don’t need any knowledge of the system in order to understand the talk. Enjoy!


Ecosystem
ES6 Introduction - Classes
Classes are an important new feature of ES6
compared to its predecessors and will help to make bigger applications.
It was possible to have this kind of behavior with prototypal inheritance,
but it's now a lot more easier and based on concepts known by so many people.
class Person{
constructor(gender, firstName, lastName){
this.gender= gender;
this.firstName= firstName;
this.lastName= lastName;
}
toString() {
return '[ gender :' + this.gender +
', first name :' + this.firstName +
', last name :' + this.lastName + ' ]';
}
}
console.log(new Person('female', 'janis', 'joplin').toString());
class Citizen extends Person{
constructor(nationality, gender, firstName, lastName){
super(gender, firstName, lastName);
this.nationality= nationality;
}
set lastName(lastName){
console.log('changing lastName to ' + lastName);
this._lastName= lastName;
}
get lastName(){
console.log('Asking for lastName');
return this._lastName;
}
marryTo(person){
this.lastName= person.lastName;
//Will execute both the get and set content
}
toString(){
// => (nationality: ... [firstName: ...])
return '(nationality :' + this.nationality + ' ' super.toString() + ')' )';
}
}
let usaCitizen= new Citizen('american', 'female', 'grace', 'slick');


20K
Members
12
Countries
3K
Hotels
72
Partners
Wisata Popular
Nothing glass forever
You can change the Future
Our Network
This time to begin
The first a Lesson
They are Loving Us
Moments were giving them
the Best Experience
Nadiem Makarim
"Travel NMAX bekerja sama dengan GOJEK, app yang responsive dan buatan anak negri"
Trip to MENARA EIFEL
Steve Job
"Travel NMAX is a good website for people Traveller World"
Trip to FUJI MOUNTAIN
Tri Rismaharini
"Travel NMAX sangat dibutuhkan oleh masyarakat Surabaya, terutama pada saat liburan tiba"
Trip to MONAS


MCHALE'S NAVY A film review by Chuck Dowling Copyright 1997 Chuck Dowling
McHale's Navy (1997) **1/2 out of ***** - Cast: Tom Arnold, Dean Stockwell, Tim Curry, Bruce Campbell, Ernest Borgnine, David Alan Grier, French Stewart, Debra Messing, Tommy Chong. Written By: Peter Crabbe. Directed By: Brian Spicer. Running Time: 108 minutes.
Darn it all, I like Tom Arnold. While I agree that he's much better as a supporting character ("True Lies", "Nine Months"), unlike the rest of America I think he can be a competent lead as well ("Big Bully", "The Stupids"). He stars as Quinton McHale in "McHale's Navy", and while it's certainly not great, it's not all the bad either. Most of the time, it's just frustrating.
"McHale's Navy" is the latest Hollywood remake of classic TV show. McHale is retired from the navy and spends his days in the Carribbean, trying to concoct any scheme possible to make money. On the flip side, he also coaches a little league baseball team. His old crew, your stereotypical bunch of losers and misfits (honestly, how do people like this even make it INTO the military?) suddenly find themselves with a new commanding officer (Stockwell), who is your stereotypical uptight, by-the-book, always looking to get ahead in any way possible military authority.
 Curry's character is constantly referred to as the second most deadly terrorist in the world, making you think that maybe the world's MOST deadly terrorist may show up soon, but alas, he doesn't. Everything is standard from that point on.
Two things keep this film from being good. First is the basic plot. Why does this need to be yet another slightly comical world domination story? The original series lasted for years with plots I'm sure were more like "A private misplaces McHale's laundry." Just a simple story with some good laughs would have been just fine. Second is the script. At times the script was so frustrating that I wanted to just pummel the writer. The movie's flowing along, light-hearted, breezy, ready for comedy.  Notice that both of these problems are the fault of the writing, not of the actors.
The supporting cast, for the most part, fares well. Stockwell for some reason seems to be doing an impression of Johnny Carson's Art Fern character, which may be how the character talked in the TV series, but it seems out of place here considering the character he plays. Tommy Chong, in a very brief role, is ok, but I've been hearing him in interviews blasting former comedy partner Cheech Marin for "selling out". Well what do you call your role here Mr. Chong? Most puzzling though is Bruce Campbell. Clearly he's the most talented man in the cast as every scene he's in is just a bit better than the others. But he's eighth or ninth billing and given absolutely nothing to do. When will someone realize that Bruce Campbell is a very interesting actor with a distinctive personality which sets him apart from just any regular actor? Either Campbell is completely happy with working only bit parts in small movies, he has the worst agent in the world, or he's unbelievably difficult to work with.
"McHale's Navy" had potential, but it just took itself too seriously. If it had just had a simple plot without the silly villain or overbearing commanding officer, it may have been much better. I still like Tom Arnold, and this film's lack of success is certainly not his fault. [PG]
-- Chuck Dowling Visit Chuck's Movie Reviews at http://users.southeast.net/~chuckd21/ Over 1,600 movies rated and/or reviewed! Movie news, film related links, and reader's reviews.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Example¶
In the following section some examples will be shown that have the purpose of making the substance of the pattern more concretely understood and what some uses of this pattern may be.
Abstract¶
The concept of service management is of significant importance, as is the dynamism of the same, which plays an important role in the reliability, stability and correctness of the services provided.
In this context, Share allows you to change the semantics of a service according to the devices available at a given moment, thus leaving complete freedom on the low-level interaction model, preferring the modularity and composition of the services.
In order to correctly verify the constraints defined by the communicating devices,
we have relied on an approach based on the design by contract, which defines pre-conditions
and
post-conditions on the values provided respectively by the caller and the called party. In this
way you have a guarantee on the validity and consistency of the data obtained.
Calculation of the square root¶
For simplicity, assume that the service requested is the mere calculation of the
square root on a set parameter. First of all, the device requesting the service must know the
MIB
, that is a regular expression that uniquely identifies a class of semantically equivalent functionality.
- First step
For example, if the category “Mathematics” had the number
1
as specificMIB
and the square root had the number2
, the mib on which to make the call would be1.2.*
. In this way the device is able to search, and eventually discover, all the devices that provide services that at that moment calculate the square root.- Client side
-- 2 is the number on which we calculate the square root services["<IP_ADDRESS>"].features[1]:call(2)
- Server side
udp_discovery:sendto(Utilities:table_to_string(disc:find(data_discovery)), ip_discovery, port_discovery)
- Second step
Once the table of available services has been obtained, the calling device interrogates these services one by one by sending them the parameter on which to perform the calculation (in this case the pre-conditions must verify that this parameter is greater than zero).
- Client side
check_param(mib, ..., udp_feature)
- Server side
if (services[mib].pre(param)) then udp_call:sendto(services[mib].func, ip_call, port_call) end
- Third step
In this phase, a unicast communication is initiated between the devices (managed by the function and daemon functions) which guarantees confidentiality between the parties, and in which the calling device receives the function to be performed locally to obtain the desired result.
Note
In computer networking, unicast refers to a one-to-one transmission from one point in the network to another point; that is, one sender and one receiver, each identified by a network address.
- Client side
. . tcp:connect(host, port); tcp:send(data.."\n"); . . local s, status, partial = tcp:receive()
- Server side
services[mib].daemon()
- Fourth step
Once the result is obtained, the calling device can decide whether to validate this result (checking it in the post-conditions) or whether to move on to the next service. As soon as one of these services is able to meet the established
post-conditions
, the workflow will end.- Client side
if (res and self.post(..., res)) then log.info("[POST-CONDITION SUCCESSFUL]") return res, true end
Temperature measurement¶
The pattern also provides for the possibility of requesting services that do not provide parameters from the calling device. For example, we admit that a device needs to know the atmospheric room temperature to perform a certain task. This request does not include any parameter as the calculation of the temperature is a procedure that does not involve any operation on the data, but simply makes a measurement and query a possible thermometer.
- First step
The calling device will therefore simply need to invoke the
MIB
that identifies any service that has a thermometer, in this case for purely demonstrative purposes it is assumed to be2.1.*
- Client side
-- the call function has no parameter as you can see services["<IP_ADDRESS>"].features[1]:call()
- Server side
udp_discovery:sendto(Utilities:table_to_string(disc:find(data_discovery)), ip_discovery, port_discovery)
- Second step
Once the table of available services is obtained, the calling device interrogates these services one by one (in this case the
pre-conditions
are always exceeded as no parameters are received).- Client side
check_param(mib, ..., udp_feature)
- Server side
if (services[mib].pre(param)) then udp_call:sendto(services[mib].func, ip_call, port_call) end
The third and fourth steps correspond exactly to the example shown above.
Nested call¶
A nested call
is defined as any context in which the device called, to fulfill the
result of the local computation, it needs to in turn make a call to another service.
In-depth explanation¶
Home automation devices, smart industry, smart city, smart energy or any other type of device they are installed over time and vary in number and type without a pre-arranged installation plan.
Providing services that include their collaboration is difficult because interconnection and service interaction protocols are different and could vary over time.
In this context, the adaptive and very flexible nature of the pattern allows the possibility to perform nested calls between devices, so as to further enhance the concept of interoperability between the themselves and take full advantage of the dynamism that distinguishes them.
Concrete demonstration¶
Let’s consider a sporting event, where racing bikes compete. Suppose it is necessary calculate the speed of the bikes and compare them to each other to understand which is the best rider.
The devices available are:
A big screen, which shows a general ranking to the fans based on the average speed of the drivers
Speed detectors scattered across the track, which could be of different brands and calculate speeds with different measurement systems (km/h, m/s, mph)
A classification device, which sorts the set of all speeds detected in descending order and ensures uniformity between data (converts m/s to km/ h or vice versa)
In this context, the maxi-screen, in order to update the data shown in the table, makes a call to the classification device, which in turn makes a call to the speed detectors to first receive any updates on the drivers’ speeds.
All these logics can be developed on the individual devices that have
competence on the actions they undertake according to the different
configurations that are detected allowing flexibility
, adaptation
and fault tolerance
to the system.


Description: SciPy (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering. Some core packages:
NumPy: Base N-dimensional array package
SciPy library: Fundamental library for scientific computing
VMD is a molecular visualization program for displaying, animating, and analyzing large biomolecular systems using 3-D graphics and built-in scripting.


--- layout: post title: "From Digg to Reddit to Hacker News: What's Next?" date: 2012-03-22 comments: true ---
Dustin Curtis, the creator of Svbtle, recently mentioned on Twitter:
I miss the Hacker News from four years ago. It was awesome. The discussions there are not even worth reading anymore. It's sad.
Based on the number of retweets and favorites, I suspect that others agree. In fact the idea that Hacker News is degrading is common enough that it has been addressed on HN’s guidelines:
If your account is less than a year old, please don't submit comments saying that HN is turning into Reddit. (It's a common semi-noob illusion.).
However, Mr Curtis has been on HN for over five years, and is certainly not subject to the 'common semi-noob illusion'. Is HN getting worse then?
I suspect that when HN started only those that were most passionate about hacking were familiar with HN and would take the time to comment on it. As time went on the popularity of both Y Combinator and HN may have resulted in the level of discourse regressing to the mean. That's not to say that there aren't still intelligent comments, in fact I'd argue that there are more intelligent comments than there were 4 or 5 years ago. However, people tend to remember the unintelligent comments more, especially when those comments contain opinions that differ from their own or originate from non-experts.
If Digg, Reddit and Hacker News are no longer the best places for discussion how can we create a place that is?
In the early stages Digg, Reddit and Hacker News were implicitly exclusive. They didn’t discourage people from joining, but their initial lack of popularity acted as a filter to those who were technically savvy and within certain social networks. Once the exclusivity vanished the communities became diluted. Forrst is explicitly exclusive and is by invitation only. Does Forrst's exclusivity lead to a stronger community? To reiterate, is exclusivity a necessity in keeping a social news site strong and viable?
I enjoy when an article pops up on HN about physics or biology and several graduate students in those fields provide intelligent comments. Is there a way to officially denote that someone is an expert in a field and automatically give their comments more weight? In very esoteric subjects it isn't necessary, the complexity of the subject reduces "average" comments. However, in simpler subjects, bikeshedding becomes an issue. Could bikeshedding be prevented by weighting comments based on the user's past comments? For instance, if an individual has been voted up when discussing physics, perhaps future comments on physics should be algorithmically voted up.
One thing I really appreciate about HN is the variety of content. However, I can’t help but wonder if a social news site restricted the content to just a specific topic if that would both decrease the probability that the content, and discussion, become watered down? Forrst focuses on design and development, has their focus helped them? Reddit has addressed this issue with subreddits, but the result seems to be many hardly used subreddits. I think focus is important, but at the same time I like being exposed to new topics, can the those two wishes be balanced?
There is no magic bullet for maintaining the quality of a social news site, but there are a collection of concepts that may help. It would be interesting to A/B test some of those ideas. One could imagine creating several social news websites for different topics and making some exclusive and some not, or altering other variables and see which succeed. What do you think is important in a social news site?


Dance is a performing art form consisting of purposefully selected sequences of human movement.
This movement has aesthetic and symbolic value, and is acknowledged as dance by performers and
observers within a particular culture.
An important distinction is to be drawn between the contexts of theatrical and participatory dance,
although these two categories are not always completely separate; both may have special functions,
whether social, ceremonial, competitive, erotic, martial, or sacred/liturgical. Other forms of human
movement are sometimes said to have a dance-like quality, including martial arts, gymnastics, cheerleading,
figure skating, synchronized swimming, marching bands, and many other forms of athletics.
Dance is generally, though not exclusively, performed with the accompaniment of music
and may or may not be performed in time to such music. Some dance (such as tap dance) may
provide its own audible accompaniment in place of (or in addition to) music. Many early
forms of music and dance were created for each other and are frequently performed together.
Notable examples of traditional dance/music couplings include the jig, waltz, tango, disco, and salsa.
Some musical genres have a parallel dance form such as baroque music and baroque dance; other varieties
of dance and music may share nomenclature but developed separately, such as classical music and classical ballet.


About
My name is Raj and I am an engineer by training and a longtime meditator by passion. I have been meditating for 7 years now and I have taught meditation in college. Through my experience, I have tried many different types of meditations and found what works for me. I want to help you find your highest potential and live a passionate life by helping to find the right meditation for you. There is no perfect meditation that is meant for everyone, you just have to try different ones and find out what works for you.
Meditation has helped me tremendously and I want everyone to share the benefits so others can kick ass in whatever they do in life. I enjoy teaching people how to meditate and helping them find what type of meditation is works for them. I am all about practicality and that is my approach to meditation, if it works for me I do it plain and simple. The afterglow and deep relaxation people feel after meditation is why I love teaching.
Personally mediation has been such a vital part of my life for the following three reasons.
- Relaxation
- Extreme focus
- Boundless creativity
It almost feels like I am hacking life with all the benefits it has provided. Meditation has helped me both in my personal and work life. I am able to deeply focus on my work with extreme concentration, while hours later I could be thinking freely about wild ideas. It just makes life 10X more enjoyable. Come explore with me and let me help you find the best meditation that works for you.
Thank you for reading my blog and I hope I can help you find the perfect meditation for you!
Raj Vansia


Key Takeaways:¶
- Traditional methods of validation and cross-validation are problematic for time series prediction problems
- The solution is to use a "walk-forward" approach which incorporates new information as it becomes available.
- This approach gives us a more realistic view of how effective our model would truly have been in the past, and helps to avoid the overfitting trap.
- It's often important to exclude data which is too far in the past using a rolling window.
Introduction¶
This is the fourth post in my series on transforming data into alpha. If you haven't yet see the framework overview, feature engineering guide, or feature_selection_guide, please take a minute to read those first. This post will build on the framework and philosophy presented there.
This post is going to delve into the mechanics of walk-forward modeling which is, in my view, the most robust way to train and apply machine learning models in inherently sequential domains like finance.
The domain of market prediction presents several unique challenges for machine learning practitioners which do not exist in spam detection, natural language processing, image recognition, or other common areas of machine learning success, including:
- Low signal-to-noise ratio
- Non-stationarity (aka regime switching)
- Market adaptation (aka reflexivity)
The combination of these challenges make it difficult to train and tune models which generalize to the future, where it really matters. This, in my view, has led many to conclude that markets cannot be predicted with machine learning techniques.
This is a flawed conclusion. Instead, we should conclude that it's imperative to follow a modeling process which (1) avoids the trap of overfitting models to noise, (2) takes into account the sequential dimension of time series data, and (3) allows us to get an accurate view about how various models would have performed in the past given the information we would have had at that time.
"But wait!" I hear you saying, "Overfitting is not unique to market prediction!". True, but the commonly used techniques of train-test split and cross-validation each have major flaws when applied to an inherently sequential set of financial time series data.
The overriding objective of the methods described here is to overcome the issues inherent in traditional cross validation approachs.
Issues with typical approaches¶
Train-Test Split: One frequently recommended approach in finance ML tutorials is to split the data (commonly, by time) and to train on the first chunk of data and test out-of-sample on the second. This is not wrong per se, but creates two problems:
Only a fraction of data can be used to generate out-of-sample performance of the model. If you split 80/20, then you only get results for 2 of every 10 years of data. Yuck.
You're implicitly biased towards the most recent period. Since we're likely going to use the older data to train and newer data to test (for good reason...) you are implicitly searching for a model which was in favor during the most recent couple of years. Maybe last year is a good approximation for next year, but maybe it's not. Maybe 2008 would hold some important lessons for us to evaluate, but these would be lost to us.
You might consider train/test split with random (or non-random) sampling but this creates other fairly obvious issues with peeking into the future.
Cross Validation: In normal ML usage, cross-validation methods, such as the K-fold cross validation, provide an elegant way to have our digital cake and eat it too. However, with inherently sequential datasets, it's really not kosher to train a model on 2016 and 2018 to predict 2017.
Another common method, leave one out cross-validation, creates even more extreme peeking into the future. These issues are especially intolerable if your model predicts values multiple bars in the future, which results in your models being trained on data which significantly overlaps with your test data - a subtle but deadly form of data spillover.
The Solution: Walk-forward Train/Test¶
But we are not stuck with either of these problematic approaches. The better - and I think much more intuitive - approach is to simulate models in a "walk-forward" sequence, periodically re-training the model to incorporate all data available at that point in time.
The below picture is worth at least 1000 words. Say we have six years of data to train + test. At the end of the first year (T=1) we could have built model M1, which was trained on the first year's data (the grey bar). After the 5th year, we could use up to five years of data to train model M5.
Getting Started¶
As in prior posts, we'll begin by fetching some real stock price data and then generating from it a synthetic dataset which will make it easier to follow the principles of this tutorial. Please refer to the previous post Feature Selection for further explanation of the reasoning and mechanics of creating synthetic data.
from IPython.core.display import HTML,Image
import sys
sys.path.append('/anaconda/')
import config
import numpy as np
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
# Needed for this issue: https://github.com/pydata/pandas-datareader/issues/534
import pandas_datareader.data as web
%matplotlib inline
def get_symbols(symbols,data_source, begin_date=None,end_date=None):
out = pd.DataFrame()
for symbol in symbols:
df = web.DataReader(symbol, data_source,begin_date, end_date)[['AdjOpen','AdjHigh','AdjLow','AdjClose','AdjVolume']].reset_index()
df.columns = ['date','open','high','low','close','volume'] #my convention: always lowercase
df['symbol'] = symbol # add a new column which contains the symbol so we can keep multiple symbols in the same dataframe
df = df.set_index(['date','symbol'])
out = pd.concat([out,df],axis=0) #stacks on top of previously collected data
return out.sort_index()
prices = get_symbols(['AAPL','CSCO','AMZN','YHOO','MSFT'],data_source='quandl',begin_date='2012-01-01',end_date=None)
# note, we're only using real price data to get an accurate date/symbol index set.
Similar to the previous post, we will generate some random data to serve as features and then derive an outcome (response) variable from the features (to ensure that our made-up features will have ability to partially predict the target variable).
However, this go around we'll add two non-random patterns to the data. First, we will add some amount of "memory" (autoregression) to the white noise with a short function called add_memory()
. This will make the data somewhat less random and more similar to actual markets - which I think we can all agree is not a purely gaussian random walk...
Second, we'll add trend to the importance of each feature to the target variable to simulate the reality that various features - and the market factors they represent - move in and out of favor over time (aka "regime shift").
- Feature
f01
is becoming more important - Feature
f02
is becoming less important - Feature
f03
is oscillating between very important and unimportant (using a sine wave pattern) - Feature
f04
is not changing
num_obs = prices.close.count()
def add_memory(s,n_days=50,memory_strength=0.1):
''' adds autoregressive behavior to series of data'''
add_ewm = lambda x: (1-memory_strength)*x + memory_strength*x.ewm(n_days).mean()
out = s.groupby(level='symbol').apply(add_ewm)
return out
# generate feature data
f01 = pd.Series(np.random.randn(num_obs),index=prices.index)
f01 = add_memory(f01,10,0.1)
f02 = pd.Series(np.random.randn(num_obs),index=prices.index)
f02 = add_memory(f02,10,0.1)
f03 = pd.Series(np.random.randn(num_obs),index=prices.index)
f03 = add_memory(f03,10,0.1)
f04 = pd.Series(np.random.randn(num_obs),index=prices.index)
f04 = f04 # no memory
## now, create response variable such that it is related to features
# f01 becomes increasingly important, f02 becomes decreasingly important,
# f03 oscillates in importance, f04 is stationary, finally a noise component is added
outcome = f01 * np.linspace(0.5,1.5,num_obs) + \
f02 * np.linspace(1.5,0.5,num_obs) + \
f03 * pd.Series(np.sin(2*np.pi*np.linspace(0,1,num_obs)*2)+1,index=f03.index) + \
f04 + \
np.random.randn(num_obs) * 3
outcome.name = 'outcome'
So, we've now got four features which contain random and non-random elements, and we have an outcome
target variable which can be partially explained by these features.
Let's run a quick linear model to verify that this worked as expected:
from sklearn.linear_model import LinearRegression
model = LinearRegression()
features = pd.concat([f01,f02,f03,f04],axis=1)
features.columns = ['f01','f02','f03','f04']
model.fit(X=features,y=outcome)
print('RSQ: '+str(model.score(X=features,y=outcome)))
print('Regression Coefficients: '+str(model.coef_))
Indeed. A simple, linear model run on the entire dataset shows a remarkable (for this domain) RSQ of >0.25 and approximately equal coefficients for each of the features, suggesting that they're all contributing strongly to the model.
However, this overlooks the very important reality that our data is non-stationary and what matters is how the model will generalize to future, unseen data.
To illustrate, I'll re-run the same model after splitting the data into train/test sets, with the first 80% used to train and the last 20% used to test.
split_point = int(0.80*len(outcome))
X_train = features.iloc[:split_point,:]
y_train = outcome.iloc[:split_point]
X_test = features.iloc[split_point:,:]
y_test = outcome.iloc[split_point:]
model = LinearRegression()
model.fit(X=X_train,y=y_train)
print('RSQ in sample: '+str(model.score(X=X_train,y=y_train)))
print('RSQ out of sample: '+str(model.score(X=X_test,y=y_test)))
print('Regression Coefficients: '+str(model.coef_))
Here, the results tell a different story. We see that the model's RSQ on the unseen test data degraded to only about half of the value on the training data. Even if we were still satisfied with the degraded RSQ value, we would carry concern that perhaps the next period of time the models would degrade even further.
This is where our walk-forward process comes in.
A better approach...¶
Here, I'll outline the basic design pattern for a robust approach to walk-forward modeling. This is simplified. In real-world usage, we'd likely add many enhancements but this will illustrate the concept.
Training models¶
The first step of the walk-forward approach is to train our model using only the data available at any given point in time. Theoretically, we have new data every bar so could retrain the model daily if we wished. However, for simplicity we'll retrain much less frequently - at the end of each calendar year.
We'll first create a list of timestamps for all end-of-year dates in our dataset. These will become our days on which to retrain models. Then, on each of the recalculation dates, we'll follow a simple procedure:
- slice out only the data which has happened up until that point
- train a model with that data
- save a copy of that fitted model object in a pandas Series called
models
which is indexed by the recalculation date.
We could just as easily have used a dict or other data structure, but I find that pandas Series works well for this purpose. Pandas is not just for numbers, after all...
recalc_dates = features.resample('Q',level='date').mean().index.values[:-1]
#print('recalc_dates:')
#print(recalc_dates)
#print()
models = pd.Series(index=recalc_dates)
for date in recalc_dates:
X_train = features.xs(slice(None,date),level='date',drop_level=False)
y_train = outcome.xs(slice(None,date),level='date',drop_level=False)
model = LinearRegression()
model.fit(X_train,y_train)
models.loc[date] = model
print("Training on the first {} records, through {}"\
.format(len(y_train),y_train.index.get_level_values('date').max()))
#print("Coefficients: {}".format((model.coef_)))
#print()
To visualize how the model is changing over time, I'll create a simple plotting function of coefficients:
def extract_coefs(models):
coefs = pd.DataFrame()
for i,model in enumerate(models):
model_coefs = pd.Series(model.coef_,index=['f01','f02','f03','f04']) #extract coefficients for model
model_coefs.name = models.index[i] # name it with the recalc date
coefs = pd.concat([coefs,model_coefs],axis=1)
return coefs.T
extract_coefs(models).plot(title='Coefficients for Expanding Window Model')
Notice a few things about how the model's coefficients change over time:
- The first feature gets increasing weight as it becomes a more important explanatory factor in the target variable,
- the second feature does just the opposite, as it should,
- the third feature oscillates before converging on a relatively lower endpoint, and
- the fourth feature is mostly unchanged
But, in a world of constantly shifting regimes, we can do better.
We know that, by the end fo the dataset, f01
is actually much superior to f02
however they end at about equal weights. This is because in our final model building instance, we are using all of our data to train, and this entire set of data correctly shows that on average f02 is as useful as f01
, ignoring that f02
's best days are long past.
recalc_dates = features.resample('Q',level='date').mean().index.values[:-1]
models = pd.Series(index=recalc_dates)
for date in recalc_dates:
X_train = features.xs(slice(date-pd.Timedelta('90 days'),date),level='date',drop_level=False)
y_train = outcome.xs(slice(date-pd.Timedelta('90 days'),date),level='date',drop_level=False)
model = LinearRegression()
model.fit(X_train,y_train)
models.loc[date] = model
print("Training on the most recent {} records".format(len(y_train)))
#print("Coefficients: {}".format((model.coef_)))
extract_coefs(models).plot(title='Coefficients for Rolling Window Model')
This approach of only considering the 90 days' data prior to each model re-training has had a big impact. We now see that f01
has overtaken f02
in significance by the end of the time period, as we'd hope. The on-again, off-again feature f03
has risen and fallen in prominence over time, again just as we'd hope.
Using models¶
The second stage of the process is using these walk-forward models. The process is similar and equally simple.
First, we create two arrays, begin_dates
and end_dates
, which contain the dates on which each model is used. For instance, for the first model (i=0), we will apply this model to features beginning on the date we trained the model (recalc_date
) until the day the next model is trained. The end_dates
array therefore drops the 0th element and appends to the end a far-off date (in the year 2099).
We can equally easily use this pattern to apply the models to true out of sample features. As long as it's not later than the year 2099, we'll simply apply the latest and greatest model we have.
begin_dates = models.index
end_dates = models.index[1:].append(pd.to_datetime(['2099-12-31']))
predictions = pd.Series(index=features.index)
for i,model in enumerate(models): #loop thru each models object in collection
X = features.xs(slice(begin_dates[i],end_dates[i]),level='date',drop_level=False)
p = pd.Series(model.predict(X),index=X.index)
predictions.loc[X.index] = p
predictions.shape
So, this looped through each of the models we had trained at various points in time and, for each, used that model to predict the period of time until the next model became available. It runs!
Now we can confirm that the rolling model is, in fact, better than the "expanding" model by making predictions with each and comparing to truth.
models_expanding_window = pd.Series(index=recalc_dates)
for date in recalc_dates:
X_train = features.xs(slice(None,date),level='date',drop_level=False)
y_train = outcome.xs(slice(None,date),level='date',drop_level=False)
model = LinearRegression()
model.fit(X_train,y_train)
models_expanding_window.loc[date] = model
models_rolling_window = pd.Series(index=recalc_dates)
for date in recalc_dates:
X_train = features.xs(slice(date-pd.Timedelta('90 days'),date),level='date',drop_level=False)
y_train = outcome.xs(slice(date-pd.Timedelta('90 days'),date),level='date',drop_level=False)
model = LinearRegression()
model.fit(X_train,y_train)
models_rolling_window.loc[date] = model
begin_dates = models.index
end_dates = models.index[1:].append(pd.to_datetime(['2099-12-31']))
predictions_expanding_window = pd.Series(index=features.index)
for i,model in enumerate(models_expanding_window): #loop thru each models object in collection
X = features.xs(slice(begin_dates[i],end_dates[i]),level='date',drop_level=False)
p = pd.Series(model.predict(X),index=X.index)
predictions_expanding_window.loc[X.index] = p
predictions_rolling_window = pd.Series(index=features.index)
for i,model in enumerate(models_rolling_window): #loop thru each models object in collection
X = features.xs(slice(begin_dates[i],end_dates[i]),level='date',drop_level=False)
p = pd.Series(model.predict(X),index=X.index)
predictions_rolling_window.loc[X.index] = p
from sklearn.metrics import r2_score
common_idx = outcome.dropna().index.intersection(predictions_expanding_window.dropna().index)
rsq_expanding = r2_score(y_true = outcome[common_idx],y_pred=predictions_expanding_window[common_idx])
rsq_rolling = r2_score(y_true = outcome[common_idx],y_pred=predictions_rolling_window[common_idx])
print("Expanding Window RSQ: {}".format(round(rsq_expanding,3)))
print("Rolling Window RSQ: {}".format(round(rsq_rolling,3)))
Great! All of that work added about 3 points to the RSQ, which is certainly worth the effort.
Avoiding complexity¶
The value of this walk-forward methodology is greatest when it helps you to avoid the scourge of overfitting. The linear regression model used up to this point is relatively resistant to overfit, since it has few parameters.
Let's say that, instead of a simple linear regression, we used the much more overfit-prone DecisionTree, which has tendency to "memorize the past" rather than to recognize patterns in it.
from sklearn.tree import DecisionTreeRegressor
split_point = int(0.80*len(outcome))
X_train = features.iloc[:split_point,:]
y_train = outcome.iloc[:split_point]
X_test = features.iloc[split_point:,:]
y_test = outcome.iloc[split_point:]
model = DecisionTreeRegressor(max_depth=3)
model.fit(X=X_train,y=y_train)
print('RSQ in sample: '+str(round(model.score(X=X_train,y=y_train),3)))
print('RSQ out of sample: '+str(round(model.score(X=X_test,y=y_test),3)))
This leads to overfit disaster! Now, we'll do the same with our walk-forward framework:
recalc_dates = features.resample('Q',level='date').mean().index.values[:-1]
models_rolling_window = pd.Series(index=recalc_dates)
for date in recalc_dates:
X_train = features.xs(slice(date-pd.Timedelta('365 days'),date),level='date',drop_level=False)
y_train = outcome.xs(slice(date-pd.Timedelta('365 days'),date),level='date',drop_level=False)
model = DecisionTreeRegressor(max_depth=3)
model.fit(X_train,y_train)
models_rolling_window.loc[date] = model
predictions_rolling_window = pd.Series(index=features.index)
for i,model in enumerate(models_rolling_window): #loop thru each models object in collection
X = features.xs(slice(begin_dates[i],end_dates[i]),level='date',drop_level=False)
p = pd.Series(model.predict(X),index=X.index)
predictions_rolling_window.loc[X.index] = p
common_idx = y_test.dropna().index.intersection(predictions_rolling_window.dropna().index)
rsq_rolling = r2_score(y_true = y_test[common_idx],y_pred=predictions_rolling_window[common_idx])
print("RSQ out of sample (rolling): {}".format(round(rsq_rolling,3)))
Much, much better. While the RSQ result ain't great (and actually worse than the linear regression model), that's much preferred to being fooled by an extraordinarily overfitted result like above. We could have guessed that DecisionTree
would be a silly model type to try in this situation but it illustrates the point.
Summary¶
That, in a nutshell, is the walk-forward modeling framework. The key points to keep in mind are:
- Traditional methods of validation and cross-validation are problematic for time series prediction problems
- The solution is to use a "walk-forward" approach which incorporates new information as it becomes available.
- This approach gives us a more realistic view of how effective our model would truly have been in the past, and helps to avoid the overfitting trap.
- In addition to excluding any future data from the training process, it's often important to exclude data which is too far in the past.
In the next post of this series, I will present a framework for scoring and comparing models which is more complete and useful than generic machine learning methods.
One last thing...¶
If you've found this post useful, please follow @data2alpha on twitter and forward to a friend or colleague who may also find this topic interesting.


Projects
The Projects listed here were created during my going through many different Web Development courses. I've tried to go beyond what the original course went through. In most cases I've added parts from other courses to extend the original project.
These projects aren't tutorials. I'm thinking about this as a notebook of the notes.
The Courses
The courses are from many sources; Udemy, YouTube, etc. I'll try to mention the courses that inspired the base project.
Frameworks and Libraries
I've tried to use just HTML, JavaScript and CSS. While I don't have any problems with using frameworks and Libraries to build on, in the case of these projects I wanted to focus on the just standard languages.
Other Resources
I have used other resources and web sites. For example, I do use Google Fonts. When ever I pull in code from other sources I will put a comment next to the code.