:: Reference :: Layout Variables ::
Layout variables are used to use improve the design consistency.
Predefined and custom variables start with a dollar sign ($)
and can be surrounded by braces ({ … }). For example $lcgap,
${label-component-gap}, $myvariable1,
${myvariable1}, ${my variable with white space}.
If surrounded by braces the variable name can contain hyphens
and white-space.
variable ::= $<alphanumeric> | ${<string>}
Predefined Variables
Predefined variables provide access to
logical sizes in the Forms' string
language. Their values are requested from the current Layout Style.
columnVariable ::= ${label-component-gap} | $lcgap | $lcg
${related-gap} | $rgap | $rg
${unrelated-gap} | $ugap | $ug
$button | $b
${growing-button} | $gb
${dialog-margin} | $dmargin | $dm
${tabbed-dialog-margin} | $tdmargin | $tdm
$glue
rowVariable ::= ${label-component-gap} | $lcgap | $lcg
${related-gap} | $rgap | $rg
${unrelated-gap} | $ugap | $ug
${narrow-line-gap} | $nlgap | $nlg
${line-gap} | $lgap | $lg
${paragaph-gap} | $pgap | $pg
${dialog-margin} | $dmargin | $dm
${tabbed-dialog-margin} | $tdmargin | $tdm
$button | $b
$glue
Custom Variables
Custom variables further reduce the costs to achieve
consistent design in teams and when implementing many screens.
Let's say you want right-aligned labels in all your screens.
You would repeat "right:pref" in every individual
FormLayout construction.
If you introduce a custom variable $label by
setting it in the shared root LayoutMap you could
later refer to it in the FormLayout constructor
LayoutMap.getRoot().columnPut("label", "right:pref");
new FormLayout("$label, $lcgap, pref", …);
If you setup custom variables, you can honor the platform,
locale, and other context information. Let's say you want
to ensure a consistent width of all label columns using
"right:[85dlu,pref]". The 85dlu will likely
waste space in Chinese.
String width = <compute width per Locale>; // e.g. "85dlu" vs. "25dlu"
LayoutMap.getRoot().columnPut("label", "right:[" + width + ", pref]");
Overriding and Changing Variable Values
You can change a predefined variable value globally or locally.
Layout variable values are requested from LayoutMaps. There's
a shared root LayoutMap available via LayoutMap.getRoot()
that is used by default by the FormLayout constructor and other
methods that use encoded column and row specifications.
If you re-define a variable value in the root LayoutMap,
the change will affect all layouts that use the default LayoutMap.
For example: LayoutMap.getRoot().columnPut("lcgap", "1dlu");.
As an alternative you can create a child LayoutMap and use this
change locally.
LayoutMap childMap = new LayoutMap(); // has the root map as parent
childMap.columnPut("lcgap", "1dlu");
new FormLayout("&hellip", "&hellip", childMap); // uses the child map
Examples
LayoutMap map = LayoutMap.getRoot();
map.columnPut("label", "right:[85dlu,pref]");
map.rowPut ("table", "fill:100dlu:grow");
new FormLayout("right:[85dlu,pref], 3dlu, pref, 3dlu, 50dlu", // no var
"p, 3dlu, p, 3dlu, fill:100dlu:grow");
new FormLayout("right:[85dlu,pref], $lcgap, pref, $rgap, $button", // vars
"p, $lgap, p, $lgap, fill:100dlu:grow");
new FormLayout("right:[85dlu,pref], $lcg, pref, $rg, $b", // short
"p, $lg, p, $lg, fill:100dlu:grow");
new FormLayout("$label, $lcgap, pref, $rgap, $button", // custom vars
"p, $lgap, p, $lgap, $table");
|


Semicolon-separated list of properties to attach to all deployed artifacts in addition to the default ones
(build.name, build.number, vcs.revision, etc.).
Property values can take environment variables.
For example: p4.cl=${P4_CHANGELIST};buildStatus=RC;platforms=win386,win64,osx,debian


A very short tutorial for those who don't like reading
- Copy amcharts folder to your working dir.
- Go to samples folder and open one of HTML files in your browser - you should see a chart.
- View source of the page or open this HTML file with text editor.
- Try to make some changes.
- Copy/Paste everything to your html/php/asp/etc file and fix paths to scripts
- Open your file in browser - you should see the same chart.
- Now it's time to read all the tutorials and check the examples :)
Documentation
Live Editor
- It's a lot esier to configure your charts using our Live Editor. Even if you are not programmer, you can create stunning charts!
Tutorials
Examples
We think that the best way to start learning amCharts (and any other similar software) is to study examples. Check samples folder - there are plenty of them! In case you prefer working in jsFiddle, visit our web site - all samples have a link to jsFiddle where you can edit and view the result instantly.
Support
In case you have a question, go to our support section. You'll find a lot of information there, and if you won't - you can always ask.
Good luck!


WITNESS LIST Ways & Means Committee May 5, 2000-9:30A Review of Tax Exemptions & Credits On: Beeson, Ellen (Office of Texas Comptroller of Public Accounts) Lavine, Richard (Center for Public Policy Priorities) LaBas, James (Office of Texas Comptroller of Public Accounts) Tax Structure Changes On: Matthews, The Honorable Charles R. (Commissioner, Texas Railroad Commission) Plank, Roger (Apache Corp.) Segner, Ed (EOG Resources) Stevens, Bill (PPROA, NTOGA, PBPA, WeCTOGA) Williams, The Honorable Michael L. (Chairman, Texas Railroad Commission)


Week 5: Ruby - Enumerable Methods
November 19, 2015
The map method calls a block of code on every element of the original object and outputs that to a new array. For example, we could use the map method to add 1 to each number in an array:
numbers = [1,2,3,4,5] numbers.map {|x| x + 1} => [2, 3, 4, 5, 6]
Map can also work on a range, for example:
(1..3).map {|i| i + 5} => [6, 7, 8]
Map can also work on an array of strings, for example:
names = ["Rand","Donald","Hillary"] names.map {|x| x.upcase} => ["RAND", "DONALD", "HILLARY"]
Part of the usefulness of the map method is that it automatically returns an array, which adds functionality over the each method.


This post includes a few things about getting started bike commuting. The thesis is something like: If you have a bike and a safe route, you can probably commute right away, and then add-on other things (like a rack, fenders, or different tires) over time.
The most important thing - a safe route!
The most important thing is a safe route! In my experience, roads with bike lanes, or–even better–greenways (for runners, walkers, and bikers) are best, followed by neighborhood roads, followed by city roads with street parking.
For other roads (those without a bike lane or those not in a neighborhood or those with street parking), I would like for at least two of the three characteristics:
- speed limit below 40 miles per hour
- not too busy
a wide shoulder
If a road does not have two of these, I would try to only go on it during one-off situations.
A bike!
I think you can commute with any bike. So, to start, I think almost any bike works. More on this in a moment!
The next group of important things - the essentials
I think the next group of important things is there pieces of gear:
- A helmet
- A lock
- A taillight
You can buy inexpensive versions of all three, or more expensive versions of all three that may be lighter, last longer, or look cooler. If you’re in an area that needs it, do consider a more expensive lock (which actually may be an exception to the general trend of more $$$
things being lighter) Either the inexpensive or expensive versions are probably a-okay.
You can commute without any of these three, but when I don’t have one or more of them, I’m usually stressed about it. I’d add a backpack to this list, but you probably already have one.
Things that you can get as you cycle more
After a helmet, lock, and taillight, some things that are definitely useful, but are not absolutely essential:
- Fenders (front and rear, for keeping water off of you when it rains)
- A rear rack (for attaching pannier bags)
- Panniers or other bags (there are some cool briefcase or backpack-like ones) to attach to a rack
- A front light (for seeing and being seen when it is dark or at dusk)
- Nicer tires (particularly for riding in wintery conditions - I actually don’t think studded winter tires are necessary, as wider, nobbier tires are good)
- A bell (almost in the essentials category - especially if you’re biking in a busy area!)
A commuting (what’s that anyway?) bike
Along with things that you can add as you cycle more, I think a commuting bike can be useful. In my experience, there is not really a category for commuting bikes, but rather are a number of categories of bikes that can serve as possible commuters. In particular, hybrid, touring, cyclocross, and city bikes can all meet the bill; I think the most important factor is the capability to add things like those in the above group (fenders, rack, etc.). Also, finding a bike you like and that looks cool is important, too.
The last group - non-essentials
After the essentials and the things that you can add-on as you cycle more come things that are absolutely not essential, but can make the commute more convenient and comfortable:
- Some kind of light-weight, waterproof jacket (does not need to be cycling-specific, though cycling-specific jackets may have some nice features like reflective stripes and bright colors)
- Waterproof pants (definitely not essential; definitely very nice when it is raining hard)
- A power-generating (dynamo) hub (to power the front and rear lights; a luxury!)
Summary
To sum up, this post was on some ideas for getting started bike commuting. To get started, you need a safe route. You almost certainly need a helmet, lock, and rear taillight. There are a number of things that make cycling and commuting more fun or easy, though, like a new bike, you can get them over time and as you find the need for them.


Featured Projects
view allBarka 1 IWPP
The desalination plants operating at Bowarege make this facility the world’s only full-time... The desalination plants operating at Bowarege make this facility the world’s only full-time...
Barka 1 IWPP
The desalination plants operating at Bowarege make this facility the world’s only full-time...
Barka 1 IWPP
The desalination plants operating at Bowarege make this facility the world’s only full-time...
Barka 1 IWPP
The desalination plants operating at Bowarege make this facility the world’s only full-time...
Barka 1 IWPP
The desalination plants operating at Bowarege make this facility the world’s only full-time...
Barka 1 IWPP
The desalination plants operating at Bowarege make this facility the world’s only full-time...
Barka 1 IWPP
The desalination plants operating at Bowarege make this facility the world’s only full-time...
Barka 1 IWPP
The desalination plants operating at Bowarege make this facility the world’s only full-time...


We’re a company from Silicon Valeey that holds events across the world.
Forbes has said we run “the best technology conference on the planet”;
The Atlantic that TechConf is “where the future goes to be born”;
The New York Times that we assemble “a grand conclave of the tech industry’s high priests.”
At a time of great uncertainty for many industries and indeed, the world itself, we gather the founders and CEOs of technology companies, fast-growing startups, policymakers and heads of state to ask a simple question: Where to next?
Our Logo is the emblem to how we view the world of technology and how that relates to our present and possibly future lives
Take a look at the last too TechConf summits held in Nairobi and Los-Angeles
2019
TechConf Summit Nairobi
2020
TechConf Summit Los Angeles


All Dogs go to Heaven
Home
Available Pets
(Except for the ones you see above. They're all going to hell.)


Can someone point me to a build that can withstand alot of damage...I want something that won't go down with one hit...thanks in advance!
There's the classic Risen Lord Defender.
Lawful Neutral Dwarf Druid/Shifter/DwD 7/11/22 Stats: STR: 10 DEX: 17 (24) CON: 15 (21) INT: 12 WIS: 14 CHA: 6 Increase CON at all ability gains up to level 24, then put the rest into DEX.
Feats: 1: Exotic Weapon Profiency 3: Alertness 6: Weapon Focus: Scythe 9: Toughness 12: Extend Spell 15: Dodge 18: Improved Critical: Scythe 21: Undead Shape 24: Damage Reduction I 27: Damage Reduction II 30: Armor Skin, Damage Reduction III* 33: Great Dexterity I 34: Epic Weapon Focus: Scythe 36: Great Dexterity II 39: Great Dexterity III 40: Personal Choice
Edited By Youdontwanttoknowit on 11/23/04 19:20
The all you need is some kind of item that gives bludgeoning immuity and you will never go down in melee.
Is there any modifications of this risen lord build?
You could also try my defnding champion build. It has a ton of DR, as well as over 700 hps max
Click Here
Some basics are DR 24/-, and 724 max hps, saves of 37 fort/ 25 reflex/27 will. I really enjoy this build as a straight up durable tank. _________________ Come visit the Epic Builders Guild for all the character info you could ever want or need: Click Here
Whats the AB on this?
My defending champion build has a naked AB of +40. _________________ Come visit the Epic Builders Guild for all the character info you could ever want or need: Click Here


Sainz: Honing McLaren for 2020 beats weird Renault run-in
by Scott MitchellCarlos Sainz Jr says helping develop McLaren's 2020 Formula 1 car is better than the "quite weird" feeling of racing for Renault last year when he knew was leaving.
Sainz is nearing the end of his first year with McLaren after signing a two-year deal to join the team for 2019.
He was ousted at Renault after just one full season, which makes 2019/20 the first time Sainz has been a key part of a team's transition process since he was with Toro Rosso in 2016/17.
Asked by Autosport about the significance of developing McLaren's car for next year knowing it will be for his benefit, Sainz said: "Yeah, that probably also made the second half of the season with Renault quite weird.
"I was kind of looking forward to joining McLaren in that way, with a two-year deal.
"I'm a strong believer that the more time a driver spends in one team, the faster that driver becomes with that car.
"That's a rule that you can see pretty much in every team.
"You can see it with Max [Verstappen] in Red Bull, that for the longer he's been in Red Bull he's just been stronger and stronger, Lewis [Hamilton] with Mercedes he's been stronger and stronger every year.
"Checo [Sergio Perez] in Racing Point, a more midfield example, that guy knows that Racing Point and that team very well and that helps them execute very strong race weekends.
"I was looking forward to having this in McLaren, and we are already working on the simulator on next year's car, already developing every weekend and giving ideas to the factory to what do we need for next year's car.
"Hopefully that will have an impact on next year, the way we drive the car and what we need is very simple.
"It makes sense as a driver to develop a car for a couple of years."
Sainz joined McLaren after an uncompetitive season but the British team has had an impressive turnaround and secured fourth place in the constructors' championship in Brazil.
The Spaniard has admitted he expected a tougher first season with the team, but has been boosted by McLaren's off-track efforts as well its strong on-track form.
Sainz said: "My self-confidence and the confidence within the team, and their work approach that we have this year, I've been more [focused on] the mid-term project, not so much the short-term and having to perform like I was having to do in Toro Rosso and Renault.
"That helped me also to combat those couple of difficult moments in the year, to be a lot more relaxed about it because it was not so much of a rush to prove myself.
"I always have a rush to get good results obviously, but thanks to that mid-term project and the way we're handling the year and everything, I thought it was easier to overcome them."


{% extends "layout.html" %} {% block page %} {% include "topbar.html" %}
Please look for your textbook in the list below.
Please enter the edition of the textbook you are selling, if you know it.
You may submit up to {{ MAX_IMAGES }} images using the buttons below. If the buttons don't work or you wish to upload them manually, you may also copy the links here. All images are uploaded to imgur.


BC Climate Explorer
about
data
help
Explore
BAFAun - Undifferentiated
BAFAunp - Undifferentiated and Parkland
BGxh1 - Okanagan Very Dry Hot
BGxh2 - Thompson Very Dry Hot
BGxh3 - Fraser Very Dry Hot
BGxw1 - Nicola Very Dry Warm
BGxw2 - Alkali Very Dry Warm
BWBSdk - Dry Cool
BWBSmk - Moist Cool
BWBSmw - Moist Warm
BWBSvk - Very Wet Cool
BWBSwk1 - Murray Wet Cool
BWBSwk2 - Graham Wet Cool
BWBSwk3 - Kledo Wet Cool
CDFmm - Moist Maritime
CMAun - Undifferentiated
CMAunp - Undifferentiated and Parkland
CMAwh - Wet Hypermaritime
CWHdm - Dry Maritime
CWHds1 - Southern Dry Submaritime
CWHds2 - Central Dry Submaritime
CWHmm1 - Submontane Moist Maritime
CWHmm2 - Montane Moist Maritime
CWHms1 - Southern Moist Submaritime
CWHms2 - Central Moist Submaritime
CWHvh1 - Southern Very Wet Hypermaritime
CWHvh2 - Northern Very Wet Hypermaritime
CWHvh3 - Haida Gwaii Very Wet Hypermaritime
CWHwh1 - Submontane Wet Hypermaritime
CWHwh2 - Montane Wet Hypermaritime
CWHwm - Wet Maritime
CWHws1 - Submontane Wet Submaritime
CWHws2 - Montane Wet Submaritime
CWHxm1 - Eastern Very Dry Maritime
CWHxm2 - Western Very Dry Maritime
ESSFdc1 - Monashee Dry Cold
ESSFdc2 - Cascade Dry Cold
ESSFdc3 - North Thompson Dry Cold
ESSFdcp - Dry Cold Parkland
ESSFdcw - Dry Cold Woodland
ESSFdk1 - Elk Dry Cool
ESSFdk2 - Columbia Dry Cool
ESSFdkp - Dry Cool Parkland
ESSFdkw - Dry Cool Woodland
ESSFdv1 - Cayoosh Dry Very Cold
ESSFdv2 - Tyaughton Dry Very Cold
ESSFdvp - Dry Very Cold Parkland
ESSFdvw - Dry Very Cold Woodland
ESSFmc - Moist Cold
ESSFmcp - Moist Cold Parkland
ESSFmh - Moist Hot
ESSFmk - Moist Cool
ESSFmkp - Moist Cool Parkland
ESSFmm1 - Raush Moist Mild
ESSFmm2 - Robson Moist Mild
ESSFmmp - Moist Mild Parkland
ESSFmmw - Moist Mild Woodland
ESSFmv1 - Nechako Moist Very Cold
ESSFmv2 - Bullmoose Moist Very Cold
ESSFmv3 - Omineca Moist Very Cold
ESSFmv4 - Graham Moist Very Cold
ESSFmvp - Moist Very Cold Parkland
ESSFmw - Moist Warm
ESSFmw1 - Cascade Moist Warm
ESSFmw2 - Stein Moist Warm
ESSFmwp - Moist Warm Parkland
ESSFmww - Moist Warm Woodland
ESSFun - Undifferentiated
ESSFunp - Undiff Parkland
ESSFvc - Very Wet Cold
ESSFvcp - Very Wet Cold Parkland
ESSFvcw - Very Wet Cold Woodland
ESSFwc2 - Monashee Wet Cold
ESSFwc2w - Monashee Wet Cold - Warm phase
ESSFwc3 - Cariboo Wet Cold
ESSFwc4 - Selkirk Wet Cold
ESSFwcp - Wet Cold Parkland
ESSFwcw - Wet Cold Woodland
ESSFwh1 - Columbia Wet Hot
ESSFwh2 - St Mary Wet Hot
ESSFwh3 - Salmo Wet Hot
ESSFwk1 - Cariboo Wet Cool
ESSFwk2 - Misinchinka Wet Cool
ESSFwm1 - Fernie Wet Mild
ESSFwm2 - Purcell Wet Mild
ESSFwm3 - Ymir Wet Mild
ESSFwm4 - Moyie Wet Mild
ESSFwmp - Wet Mild Parkland
ESSFwmw - Wet Mild Woodland
ESSFwv - Wet Very Cold
ESSFwvp - Wet Very Cold Parkland
ESSFxc1 - Similkameen Very Dry Cold
ESSFxc2 - Thompson Very Dry Cold
ESSFxc3 - Pavillion Very Dry Cold
ESSFxcp - Very Dry Cold Parkland
ESSFxcw - Very Dry Cold Woodland
ESSFxv1 - West Chilcotin Very Dry Very Cold
ESSFxv2 - Big Creek Very Dry Very Cold
ESSFxvp - Very Dry Very Cold Parkland
ESSFxvw - Very Dry Very Cold Woodland
ICHdk - Dry Cool
ICHdm - Dry Mild
ICHdw1 - West Kootenay Dry Warm
ICHdw3 - North Thompson Dry Warm
ICHdw4 - Shuswap Dry Warm
ICHmc1 - Nass Moist Cold
ICHmc1a - Nass Moist Cold - Amabilis fir phase
ICHmc2 - Hazelton Moist Cold
ICHmk1 - Okanagan Moist Cool
ICHmk2 - Thompson Moist Cool
ICHmk3 - Horsefly Moist Cool
ICHmk4 - Kootenay Moist Cool
ICHmm - Moist Mild
ICHmw1 - Kinbasket Moist Warm
ICHmw2 - Shuswap Moist Warm
ICHmw3 - Thompson Moist Warm
ICHmw4 - Ymir Moist Warm
ICHmw5 - Granby Moist Warm
ICHvc - Very Wet Cold
ICHvk1 - Columbia Very Wet Cool
ICHvk2 - Slim Very Wet Cool
ICHwc - Wet Cold
ICHwk1 - Shuswap Wet Cool
ICHwk2 - Quesnel Wet Cool
ICHwk3 - Goat Wet Cool
ICHwk4 - Cariboo Wet Cool
ICHxw - Very Dry Warm
ICHxwa - Very Dry Warm
IDFdc - Dry Cold
IDFdk1 - Thompson Dry Cool
IDFdk2 - Cascade Dry Cool
IDFdk3 - Fraser Dry Cool
IDFdk4 - Chilcotin Dry Cool
IDFdk5 - Columbia Dry Cool
IDFdm1 - Kettle Dry Mild
IDFdm2 - Kootenay Dry Mild
IDFdw - Dry Warm
IDFmw1 - Shuswap Moist Warm
IDFmw2 - Thompson Moist Warm
IDFww - Wet Warm
IDFww1 - Stein Wet Warm
IDFxc - Very Dry Cold
IDFxh1 - Okanagan Very Dry Hot
IDFxh2 - Thompson Very Dry Hot
IDFxk - Very Dry Cool
IDFxm - Very Dry Mild
IDFxw - Very Dry Warm
IMAun - Undifferentiated
IMAunp - Undifferentiated and Parkland
MHmmp - Moist Maritime Parkland
MHun - Undifferentiated
MHunp - Undifferentiated Parkland
MHwh - Wet Hypermaritime
MHwh1 - Windward
MHwhp - Wet Hypermaritime Parkland
MSdc1 - Cayoosh Dry Cold
MSdc2 - Tatlayoko Dry Cold
MSdc3 - Tyaughton Dry Cold
MSdm1 - Okanagan Dry Mild
MSdm2 - Cascade Dry Mild
MSdm3 - North Thompson Dry Mild
MSdm3w - North Thompson Dry Mild - Warm phase
MSdv - Dry Very Cold
MSmw1 - Cascade Moist Warm
MSmw2 - Stein Moist Warm
MSun - Undifferentiated
MSxk1 - Similkameen Very Dry Cool
MSxk2 - South Thompson Very Dry Cool
MSxk3 - Pavillion Very Dry Cool
MSxv - Very Dry Very Cold
PPxh1 - Okanagan Very Dry Hot
PPxh2 - Thompson Very Dry Hot
SBPSdc - Dry Cold
SBPSmc - Moist Cold
SBPSmk - Moist Cool
SBPSxc - Very Dry Cold
SBSdh1 - McLennan Dry Hot
SBSdh2 - Robson Dry Hot
SBSdk - Dry Cool
SBSdw1 - Horsefly Dry Warm
SBSdw2 - Blackwater Dry Warm
SBSdw3 - Stuart Dry Warm
SBSmc1 - Moffat Moist Cold
SBSmc2 - Babine Moist Cold
SBSmc3 - Kluskus Moist Cold
SBSmh - Moist Hot
SBSmk1 - Mossvale Moist Cool
SBSmk2 - Williston Moist Cool
SBSmm - Moist Mild
SBSmw - Moist Warm
SBSun - Undifferentiated
SBSvk - Very Wet Cool
SBSwk1 - Willow Wet Cool
SBSwk2 - Finlay-Peace Wet Cool
SBSwk3 - Takla Wet Cool
SBSwk3a - Takla Wet Cool - Douglas-fir phase
SWBmk - Moist Cool
SWBmks - Moist Cool Scrub
SWBun - Undifferentiated
SWBuns - Undifferentiated Scrub
SWBvk - Very Wet Cool
SWBvks - Very Wet Cool Scrub
and/or
BAFAun - Undifferentiated
BAFAunp - Undifferentiated and Parkland
BGxh1 - Okanagan Very Dry Hot
BGxh2 - Thompson Very Dry Hot
BGxh3 - Fraser Very Dry Hot
BGxw1 - Nicola Very Dry Warm
BGxw2 - Alkali Very Dry Warm
BWBSdk - Dry Cool
BWBSmk - Moist Cool
BWBSmw - Moist Warm
BWBSvk - Very Wet Cool
BWBSwk1 - Murray Wet Cool
BWBSwk2 - Graham Wet Cool
BWBSwk3 - Kledo Wet Cool
CDFmm - Moist Maritime
CMAun - Undifferentiated
CMAunp - Undifferentiated and Parkland
CMAwh - Wet Hypermaritime
CWHdm - Dry Maritime
CWHds1 - Southern Dry Submaritime
CWHds2 - Central Dry Submaritime
CWHmm1 - Submontane Moist Maritime
CWHmm2 - Montane Moist Maritime
CWHms1 - Southern Moist Submaritime
CWHms2 - Central Moist Submaritime
CWHvh1 - Southern Very Wet Hypermaritime
CWHvh2 - Northern Very Wet Hypermaritime
CWHvh3 - Haida Gwaii Very Wet Hypermaritime
CWHwh1 - Submontane Wet Hypermaritime
CWHwh2 - Montane Wet Hypermaritime
CWHwm - Wet Maritime
CWHws1 - Submontane Wet Submaritime
CWHws2 - Montane Wet Submaritime
CWHxm1 - Eastern Very Dry Maritime
CWHxm2 - Western Very Dry Maritime
ESSFdc1 - Monashee Dry Cold
ESSFdc2 - Cascade Dry Cold
ESSFdc3 - North Thompson Dry Cold
ESSFdcp - Dry Cold Parkland
ESSFdcw - Dry Cold Woodland
ESSFdk1 - Elk Dry Cool
ESSFdk2 - Columbia Dry Cool
ESSFdkp - Dry Cool Parkland
ESSFdkw - Dry Cool Woodland
ESSFdv1 - Cayoosh Dry Very Cold
ESSFdv2 - Tyaughton Dry Very Cold
ESSFdvp - Dry Very Cold Parkland
ESSFdvw - Dry Very Cold Woodland
ESSFmc - Moist Cold
ESSFmcp - Moist Cold Parkland
ESSFmh - Moist Hot
ESSFmk - Moist Cool
ESSFmkp - Moist Cool Parkland
ESSFmm1 - Raush Moist Mild
ESSFmm2 - Robson Moist Mild
ESSFmmp - Moist Mild Parkland
ESSFmmw - Moist Mild Woodland
ESSFmv1 - Nechako Moist Very Cold
ESSFmv2 - Bullmoose Moist Very Cold
ESSFmv3 - Omineca Moist Very Cold
ESSFmv4 - Graham Moist Very Cold
ESSFmvp - Moist Very Cold Parkland
ESSFmw - Moist Warm
ESSFmw1 - Cascade Moist Warm
ESSFmw2 - Stein Moist Warm
ESSFmwp - Moist Warm Parkland
ESSFmww - Moist Warm Woodland
ESSFun - Undifferentiated
ESSFunp - Undiff Parkland
ESSFvc - Very Wet Cold
ESSFvcp - Very Wet Cold Parkland
ESSFvcw - Very Wet Cold Woodland
ESSFwc2 - Monashee Wet Cold
ESSFwc2w - Monashee Wet Cold - Warm phase
ESSFwc3 - Cariboo Wet Cold
ESSFwc4 - Selkirk Wet Cold
ESSFwcp - Wet Cold Parkland
ESSFwcw - Wet Cold Woodland
ESSFwh1 - Columbia Wet Hot
ESSFwh2 - St Mary Wet Hot
ESSFwh3 - Salmo Wet Hot
ESSFwk1 - Cariboo Wet Cool
ESSFwk2 - Misinchinka Wet Cool
ESSFwm1 - Fernie Wet Mild
ESSFwm2 - Purcell Wet Mild
ESSFwm3 - Ymir Wet Mild
ESSFwm4 - Moyie Wet Mild
ESSFwmp - Wet Mild Parkland
ESSFwmw - Wet Mild Woodland
ESSFwv - Wet Very Cold
ESSFwvp - Wet Very Cold Parkland
ESSFxc1 - Similkameen Very Dry Cold
ESSFxc2 - Thompson Very Dry Cold
ESSFxc3 - Pavillion Very Dry Cold
ESSFxcp - Very Dry Cold Parkland
ESSFxcw - Very Dry Cold Woodland
ESSFxv1 - West Chilcotin Very Dry Very Cold
ESSFxv2 - Big Creek Very Dry Very Cold
ESSFxvp - Very Dry Very Cold Parkland
ESSFxvw - Very Dry Very Cold Woodland
ICHdk - Dry Cool
ICHdm - Dry Mild
ICHdw1 - West Kootenay Dry Warm
ICHdw3 - North Thompson Dry Warm
ICHdw4 - Shuswap Dry Warm
ICHmc1 - Nass Moist Cold
ICHmc1a - Nass Moist Cold - Amabilis fir phase
ICHmc2 - Hazelton Moist Cold
ICHmk1 - Okanagan Moist Cool
ICHmk2 - Thompson Moist Cool
ICHmk3 - Horsefly Moist Cool
ICHmk4 - Kootenay Moist Cool
ICHmm - Moist Mild
ICHmw1 - Kinbasket Moist Warm
ICHmw2 - Shuswap Moist Warm
ICHmw3 - Thompson Moist Warm
ICHmw4 - Ymir Moist Warm
ICHmw5 - Granby Moist Warm
ICHvc - Very Wet Cold
ICHvk1 - Columbia Very Wet Cool
ICHvk2 - Slim Very Wet Cool
ICHwc - Wet Cold
ICHwk1 - Shuswap Wet Cool
ICHwk2 - Quesnel Wet Cool
ICHwk3 - Goat Wet Cool
ICHwk4 - Cariboo Wet Cool
ICHxw - Very Dry Warm
ICHxwa - Very Dry Warm
IDFdc - Dry Cold
IDFdk1 - Thompson Dry Cool
IDFdk2 - Cascade Dry Cool
IDFdk3 - Fraser Dry Cool
IDFdk4 - Chilcotin Dry Cool
IDFdk5 - Columbia Dry Cool
IDFdm1 - Kettle Dry Mild
IDFdm2 - Kootenay Dry Mild
IDFdw - Dry Warm
IDFmw1 - Shuswap Moist Warm
IDFmw2 - Thompson Moist Warm
IDFww - Wet Warm
IDFww1 - Stein Wet Warm
IDFxc - Very Dry Cold
IDFxh1 - Okanagan Very Dry Hot
IDFxh2 - Thompson Very Dry Hot
IDFxk - Very Dry Cool
IDFxm - Very Dry Mild
IDFxw - Very Dry Warm
IMAun - Undifferentiated
IMAunp - Undifferentiated and Parkland
MHmmp - Moist Maritime Parkland
MHun - Undifferentiated
MHunp - Undifferentiated Parkland
MHwh - Wet Hypermaritime
MHwh1 - Windward
MHwhp - Wet Hypermaritime Parkland
MSdc1 - Cayoosh Dry Cold
MSdc2 - Tatlayoko Dry Cold
MSdc3 - Tyaughton Dry Cold
MSdm1 - Okanagan Dry Mild
MSdm2 - Cascade Dry Mild
MSdm3 - North Thompson Dry Mild
MSdm3w - North Thompson Dry Mild - Warm phase
MSdv - Dry Very Cold
MSmw1 - Cascade Moist Warm
MSmw2 - Stein Moist Warm
MSun - Undifferentiated
MSxk1 - Similkameen Very Dry Cool
MSxk2 - South Thompson Very Dry Cool
MSxk3 - Pavillion Very Dry Cool
MSxv - Very Dry Very Cold
PPxh1 - Okanagan Very Dry Hot
PPxh2 - Thompson Very Dry Hot
SBPSdc - Dry Cold
SBPSmc - Moist Cold
SBPSmk - Moist Cool
SBPSxc - Very Dry Cold
SBSdh1 - McLennan Dry Hot
SBSdh2 - Robson Dry Hot
SBSdk - Dry Cool
SBSdw1 - Horsefly Dry Warm
SBSdw2 - Blackwater Dry Warm
SBSdw3 - Stuart Dry Warm
SBSmc1 - Moffat Moist Cold
SBSmc2 - Babine Moist Cold
SBSmc3 - Kluskus Moist Cold
SBSmh - Moist Hot
SBSmk1 - Mossvale Moist Cool
SBSmk2 - Williston Moist Cool
SBSmm - Moist Mild
SBSmw - Moist Warm
SBSun - Undifferentiated
SBSvk - Very Wet Cool
SBSwk1 - Willow Wet Cool
SBSwk2 - Finlay-Peace Wet Cool
SBSwk3 - Takla Wet Cool
SBSwk3a - Takla Wet Cool - Douglas-fir phase
SWBmk - Moist Cool
SWBmks - Moist Cool Scrub
SWBun - Undifferentiated
SWBuns - Undifferentiated Scrub
SWBvk - Very Wet Cool
SWBvks - Very Wet Cool Scrub
for X:
Annual
Winter
Spring
Summer
Fall
January
February
March
April
May
June
July
August
September
October
November
December
MAT - Mean annual temperature (°C)
MAP - Annual precipitation (mm)
MSP - Growing season (May to September) precipitation (mm)
MWMT - Mean warmest month temperature (°C)
MCMT - Mean coldest month temperature (°C)
TD - Temperature difference between MWMT and MCMT, or continentality (°C)
AHM - Annual heat:moisture index (MAT+10)/(MAP/1000))
SHM - Summer heat:moisture index ((MWMT)/(MSP/1000))
EMT - Extreme minimum temperature over 30 years
EXT - Extreme maximum temperature over 30 years
FFP - Frost-free period
bFFP - The Julian date on which FFP begins
eFFP - The Julian date on which FFP ends
Tave - Mean temperature (°C)
Tmax - Mean daily maximum temperature (°C)
Tmin - Mean daily minimum temperature (°C)
PPT - Precipitation (mm)
DD_0 - Degree-days below 0°C (chilling degree-days)
DD5 - Degree-days above 5°C, growing degree-days
DD_18 - Degree-days below 18°C (heating degree-days)
DD18 - Degree-days above 18°C (cooling degree-days)
NFFD - Number of frost-free days
PAS - Precipitation as snow (mm)
Eref - Hargreaves reference evaporation
CMD - Hargreaves climatic moisture deficit
RH - Relative humidity
log
and Y:
Annual
Winter
Spring
Summer
Fall
January
February
March
April
May
June
July
August
September
October
November
December
MAT - Mean annual temperature (°C)
MAP - Annual precipitation (mm)
MSP - Growing season (May to September) precipitation (mm)
MWMT - Mean warmest month temperature (°C)
MCMT - Mean coldest month temperature (°C)
TD - Temperature difference between MWMT and MCMT, or continentality (°C)
AHM - Annual heat:moisture index (MAT+10)/(MAP/1000))
SHM - Summer heat:moisture index ((MWMT)/(MSP/1000))
EMT - Extreme minimum temperature over 30 years
EXT - Extreme maximum temperature over 30 years
FFP - Frost-free period
bFFP - The Julian date on which FFP begins
eFFP - The Julian date on which FFP ends
Tave - Mean temperature (°C)
Tmax - Mean daily maximum temperature (°C)
Tmin - Mean daily minimum temperature (°C)
PPT - Precipitation (mm)
DD_0 - Degree-days below 0°C (chilling degree-days)
DD5 - Degree-days above 5°C, growing degree-days
DD_18 - Degree-days below 18°C (heating degree-days)
DD18 - Degree-days above 18°C (cooling degree-days)
NFFD - Number of frost-free days
PAS - Precipitation as snow (mm)
Eref - Hargreaves reference evaporation
CMD - Hargreaves climatic moisture deficit
RH - Relative humidity
log
Biogeoclimatic Zones & Climate Map
BEC
ZONE
BEC
UNIT
menu
AERIAL
scatterplot
variable 1 timeseries
variable 2 timeseries


Count of COVID+ patients admitted to the hospital. Patients who are hospitalized and test positive for COVID-19 may be admitted to an acute care bed (a regular hospital bed), or an intensive care unit (ICU) bed. This data shows the daily total count of COVID+ patients in these two bed types, and the data reflects totals from all San Francisco Hospitals. More information about the data available here
covid19sf_hospitalizations
An object class data.frame with 5 variables
date which case was recorded in YYYY-MM-DD format.
The hospital which patients were admitted, currently it labeled under "All SF Hospitals"
The type of hospitalization bed, either an acute care bed (a regular hospital bed), or an intensive care unit (ICU) bed
The patient diagnostic, either PUI (Patient Under Investigation) or COVID+ (positive case)
Daily cases count
San Francisco, Department of Public Health - Population Health Division through San Francisco Opne Data protal website.
Each record represents how many people were hospitalized on the date recorded in either an ICU bed or acute care bed (shown as Med/Surg under DPHCategory field)
#> reportdate hospital dphcategory covidstatus patientcount #> 1 2020-03-23 All SF Hospitals Med/Surg COVID+ 12 #> 2 2020-03-24 All SF Hospitals Med/Surg COVID+ 20 #> 3 2020-03-25 All SF Hospitals Med/Surg COVID+ 22 #> 4 2020-03-26 All SF Hospitals Med/Surg COVID+ 19 #> 5 2020-03-27 All SF Hospitals Med/Surg COVID+ 28 #> 6 2020-03-28 All SF Hospitals Med/Surg COVID+ 27


Sydney, Melbourne economic sinkholes engulf nation
by Unconventional EconomistLast Friday, the Australian Bureau of Statistics (ABS) released its State Accounts for 2018-19, which contained some interesting data on the trade performance of Australia’s states and territories.
The summary charts for Australia’s major states are provided below:
There are 1443 words left in this subscriber-only article.


| Properties' Summary |
boolean
RegisterModeActive |
determins whether the register mode is active on that page.
|
string
RegisterParagraphStyle |
contains the name of the paragraph style that is used as
reference of the register mode.
|
XTextColumns
TextColumns |
contains the column settings of the page.
|
XText
HeaderText |
contains the interface to the text of the header.
|
XText
HeaderTextLeft |
contains the interface to the text of the header of left pages.
|
XText
HeaderTextRight |
contains the interface to the text of the header of right pages.
|
XText
FooterText |
contains the interface to the text of the footer.
|
XText
FooterTextLeft |
contains the interface to the text of the footer of a left page.
|
XText
FooterTextRight |
contains the interface to the text of the footer of a right page.
|
long
FootnoteHeight |
contains the maximum height of the footnote area (in 1/100 mm).
|
short
FootnoteLineWeight |
contains the weight of the separator line between the text and
the footnote area (in 1/100 mm).
|
::com::sun::star::util::Color
FootnoteLineColor |
contains the color of the separator line between the text and
the footnote area.
|
byte
FootnoteLineRelativeWidth |
contains the relative width of the separator line between the
text and the footnote area (in percent).
|
short
FootnoteLineAdjust |
contains the adjustment of the separator line between the text
and the footnote area.
|
long
FootnoteLineTextDistance |
contains the distance between the text and the separator line
between the text and the footnote area (in 1/100 mm).
|
long
FootnoteLineDistance |
contains the distance between the footnote area and the separator
line between the text and the footnote area (in 1/100 mm).
|
| Properties' Details |
RegisterModeActive
boolean RegisterModeActive;
- Description
- determins whether the register mode is active on that page.
|
|
RegisterParagraphStyle
string RegisterParagraphStyle;
- Description
- contains the name of the paragraph style that is used as
reference of the register mode.
|
|
TextColumns
XTextColumns TextColumns;
- Description
- contains the column settings of the page.
|
|
HeaderText
XText HeaderText;
- Description
- contains the interface to the text of the header.
- See also
- Text
|
|
HeaderTextLeft
XText HeaderTextLeft;
- Description
- contains the interface to the text of the header of left pages.
- See also
- Text
|
|
HeaderTextRight
XText HeaderTextRight;
- Description
- contains the interface to the text of the header of right pages.
- See also
- Text
|
|
FooterText
XText FooterText;
- Description
- contains the interface to the text of the footer.
- See also
- Text
|
|
FooterTextLeft
XText FooterTextLeft;
- Description
- contains the interface to the text of the footer of a left page.
- See also
- Text
|
|
FooterTextRight
XText FooterTextRight;
- Description
- contains the interface to the text of the footer of a right page.
- See also
- Text
|
|
FootnoteHeight
long FootnoteHeight;
- Description
- contains the maximum height of the footnote area (in 1/100 mm).
If set to zero, the height of the current page is used as limit.
|
|
FootnoteLineWeight
short FootnoteLineWeight;
- Description
- contains the weight of the separator line between the text and
the footnote area (in 1/100 mm).
|
|
FootnoteLineColor
::com::sun::star::util::Color FootnoteLineColor;
- Description
- contains the color of the separator line between the text and
the footnote area.
|
|
FootnoteLineRelativeWidth
byte FootnoteLineRelativeWidth;
- Description
- contains the relative width of the separator line between the
text and the footnote area (in percent).
|
|
FootnoteLineAdjust
short FootnoteLineAdjust;
- Description
- contains the adjustment of the separator line between the text
and the footnote area.
- See also
- HorizontalAdjust
|
|
FootnoteLineTextDistance
long FootnoteLineTextDistance;
- Description
- contains the distance between the text and the separator line
between the text and the footnote area (in 1/100 mm).
|
|
FootnoteLineDistance
long FootnoteLineDistance;
- Description
- contains the distance between the footnote area and the separator
line between the text and the footnote area (in 1/100 mm).
|
|
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


imap_fetchbody
(PHP 4, PHP 5, PHP 7)
imap_fetchbody — Fetch a particular section of the body of the message
说明
string imap_fetchbody ( resource $imap_stream , int $msg_number , string
$section [, int $options = 0 ] )
Fetch of a particular section of the body of the specified messages. Body parts
are not decoded by this function.
参数
imap_stream
由 imap_open() 返回的 IMAP 流。
msg_number
The message number
section
The part number. It is a string of integers delimited by period which index
into a body part list as per the IMAP4 specification
options
A bitmask with one or more of the following:
□ FT_UID - The msg_number is a UID
□ FT_PEEK - Do not set the \Seen flag if not already set
□ FT_INTERNAL - The return string is in internal format, will not
canonicalize to CRLF.
返回值
Returns a particular section of the body of the specified messages as a text
string.
参见
• imap_savebody() - Save a specific body section to a file
• imap_fetchstructure() - Read the structure of a particular message
User Contributed Notes 36 notes
===============================================================================
imap-fetchbody() will decode attached email messages inline with the rest of
the email parts, however the way it works when handling attached email messages
is inconsistent with the main email message.
With an email message that only has a text body and does not have any mime
attachments, imap-fetchbody() will return the following for each requested part
number:
(empty) - Entire message
0 - Message header
1 - Body text
With an email message that is a multi-part message in MIME format, and contains
the message text in plain text and HTML, and has a file.ext attachment,
imap-fetchbody() will return something like the following for each requested
part number:
(empty) - Entire message
0 - Message header
1 - MULTIPART/ALTERNATIVE
1.1 - TEXT/PLAIN
1.2 - TEXT/HTML
2 - file.ext
Now if you attach the above email to an email with the message text in plain
text and HTML, imap_fetchbody() will use this type of part number system:
(empty) - Entire message
0 - Message header
1 - MULTIPART/ALTERNATIVE
1.1 - TEXT/PLAIN
1.2 - TEXT/HTML
2 - MESSAGE/RFC822 (entire attached message)
2.0 - Attached message header
2.1 - TEXT/PLAIN
2.2 - TEXT/HTML
2.3 - file.ext
Note that the file.ext is on the same level now as the plain text and HTML, and
that there is no way to access the MULTIPART/ALTERNATIVE in the attached
message.
Here is a modified version of some of the code from previous posts that will
build an easily accessible array that includes accessible attached message
parts and the message body if there aren't multipart mimes. The $structure
variable is the output of the imap_fetchstructure() function. The returned
$part_array has the field 'part_number' which contains the part number to be
fed directly into the imap_fetchbody() function.
parts) > 0) { // There some sub parts
foreach ($structure->parts as $count => $part) {
add_part_to_array($part, $prefix.($count+1), $part_array);
}
}else{ // Email does not have a seperate mime attachment for text
$part_array[] = array('part_number' => $prefix.'1', 'part_object' =>
$obj);
}
return $part_array;
}
// Sub function for create_part_array(). Only called by create_part_array() and
itself.
function add_part_to_array($obj, $partno, & $part_array) {
$part_array[] = array('part_number' => $partno, 'part_object' => $obj);
if ($obj->type == 2) { // Check to see if the part is an attached email
message, as in the RFC-822 type
//print_r($obj);
if (sizeof($obj->parts) > 0) { // Check to see if the email has
parts
foreach ($obj->parts as $count => $part) {
// Iterate here again to compensate for the broken way that
imap_fetchbody() handles attachments
if (sizeof($part->parts) > 0) {
foreach ($part->parts as $count2 => $part2) {
add_part_to_array($part2, $partno.".".($count2+1),
$part_array);
}
}else{ // Attached email does not have a seperate mime
attachment for text
$part_array[] = array('part_number' => $partno.'.'.($count+
1), 'part_object' => $obj);
}
}
}else{ // Not sure if this is possible
$part_array[] = array('part_number' => $prefix.'.1', 'part_object'
=> $obj);
}
}else{ // If there are more sub-parts, expand them out.
if (sizeof($obj->parts) > 0) {
foreach ($obj->parts as $count => $p) {
add_part_to_array($p, $partno.".".($count+1), $part_array);
}
}
}
}
?>
===============================================================================
If text has been encoded as quoted-printable (most body text is encoded as
this), it must be decoded for it to be displayed correctly (without '=', '=20'
and other strange text chunks all through the string).
To decode, you can use the following built-in php function...
quoted_printable_decode($string)
Hopefully I've just saved a few people from having to do a preg_replace on
there email bodies.
===============================================================================
How to give more then one option in the "options" parameter:
It took me some time to realize how easy it is, so just in case some one else
would be puzzled at this point:
===============================================================================
this may be the way, how to obtain all those part_numbers.... even when a
message contains another message attached, and it contains another message
attached...
$parttypes = array ("text", "multipart", "message", "application", "audio",
"image", "video", "other");
function buildparts ($struct, $pno = "") {
global $parttypes;
switch ($struct->type):
case 1:
$r = array (); $i = 1;
foreach ($struct->parts as $part)
$r[] = buildparts ($part, $pno.".".$i++);
return implode (", ", $r);
case 2:
return "{".buildparts ($struct->parts[0], $pno)."}";
default:
return ''.$parttypes[$struct->type]."/
".strtolower ($struct->subtype)."";
endswitch;
}
$struct = imap_fetchstructure ($pop3mbox, $msguid, FT_UID);
echo buildparts ($struct);
?>
it will print something like:
text/plain, {text/plain, text/html}
===============================================================================
I had some problems with the german umlauts from a gmail fetched text. I lost
an hour trying to find a solution.
Hopefully this helps someone in need :)
inbox, $emailNo, $section ) ) )
);
$section was previously defined:
$section = empty( $attachments ) ? 1 : 1.1;
?>
===============================================================================
The function imap_fetchbody() seems uncapable of getting subordinate parts of a
message/rfc822-part. I had problems with getting an attachment that was
forwarded in such a part, because the object given by imap_fetchstructure()
would assume that the part was represented by the string "<IP_ADDRESS>.2".
So I wrote this set of functions which parses the raw message-body and creates
an array with the struture corresponding to the structure given by
imap_fetchstructure(). The function mail_fetchpart() (see below) will work on
the array and return even those parts that I could not get with imap_fetchbody
().
Example usage of this function: mail_fetchpart($mbox, 2, "<IP_ADDRESS>.2");
Note: If the message does not contain multiple pars, the body of the message
can be accessed by the part-string "1".
I have more functions for parsing and decoding messages, just email me.
// get the body of a part of a message according to the
// string in $part
function mail_fetchpart($mbox, $msgNo, $part) {
$parts = mail_fetchparts($mbox, $msgNo);
$partNos = explode(".", $part);
$currentPart = $parts;
while(list ($key, $val) = each($partNos)) {
$currentPart = $currentPart[$val];
}
if ($currentPart != "") return $currentPart;
else return false;
}
// splits a message given in the body if it is
// a mulitpart mime message and returns the parts,
// if no parts are found, returns false
function mail_mimesplit($header, $body) {
$parts = array();
$PN_EREG_BOUNDARY = "Content-Type:(.*)boundary=\"([^\"]+)\"";
if (eregi ($PN_EREG_BOUNDARY, $header, $regs)) {
$boundary = $regs[2];
$delimiterReg = "([^\r\n]*)$boundary([^\r\n]*)";
if (eregi ($delimiterReg, $body, $results)) {
$delimiter = $results[0];
$parts = explode($delimiter, $body);
$parts = array_slice ($parts, 1, -1);
}
return $parts;
} else {
return false;
}
}
// returns an array with all parts that are
// subparts of the given part
// if no subparts are found, return the body of
// the current part
function mail_mimesub($part) {
$i = 1;
$headDelimiter = "\r\n\r\n";
$delLength = strlen($headDelimiter);
// get head & body of the current part
$endOfHead = strpos( $part, $headDelimiter);
$head = substr($part, 0, $endOfHead);
$body = substr($part, $endOfHead + $delLength, strlen($part));
// check whether it is a message according to rfc822
if (stristr($head, "Content-Type: message/rfc822")) {
$part = substr($part, $endOfHead + $delLength, strlen($part));
$returnParts[1] = mail_mimesub($part);
return $returnParts;
// if no message, get subparts and call function recursively
} elseif ($subParts = mail_mimesplit($head, $body)) {
// got more subparts
while (list ($key, $val) = each($subParts)) {
$returnParts[$i] = mail_mimesub($val);
$i++;
}
return $returnParts;
} else {
return $body;
}
}
// get an array with the bodies all parts of an email
// the structure of the array corresponds to the
// structure that is available with imap_fetchstructure
function mail_fetchparts($mbox, $msgNo) {
$parts = array();
$header = imap_fetchheader($mbox,$msgNo);
$body = imap_body($mbox,$msgNo, FT_INTERNAL);
$i = 1;
if ($newParts = mail_mimesplit($header, $body)) {
while (list ($key, $val) = each($newParts)) {
$parts[$i] = mail_mimesub($val);
$i++;
}
} else {
$parts[$i] = $body;
}
return $parts;
}
===============================================================================
Sorry for my english....
for read the attachment's:
foreach ($_GET as $k => $v)
{
$$k = $v;
}
$login = 'mylogin';
$password = 'mypassword';
$host = '{myhost:110/pop3}';
$mbox = imap_open("$host", "$login", "$password");
$struckture = imap_fetchstructure($mbox, $id);
$message = imap_fetchbody($mbox,$id,$part);
$name = $struckture->parts[$part]->dparameters[0]->value;
$type = $struckture->parts[$part]->typee;
############## type
if ($type == 0)
{
$type = "text/";
}
elseif ($type == 1)
{
$type = "multipart/";
}
elseif ($type == 2)
{
$type = "message/";
}
elseif ($type == 3)
{
$type = "application/";
}
elseif ($type == 4)
{
$type = "audio/";
}
elseif ($type == 5)
{
$type = "image/";
}
elseif ($type == 6)
{
$type = "video";
}
elseif($type == 7)
{
$type = "other/";
}
$type .= $struckture->parts[$part]->subtypee;
######## Type end
header("Content-typee: ".$type);
header("Content-Disposition: attachment; filename=".$name);
######## coding
$coding = $struckture->parts[$part]->encoding;
if ($coding == 0)
{
$message = imap_7bit($message);
}
elseif ($coding == 1)
{
$wiadomsoc = imap_8bit($message);
}
elseif ($coding == 2)
{
$message = imap_binary($message);
}
elseif ($coding == 3)
{
$message = imap_base64($message);
}
elseif ($coding == 4)
{
$message = quoted_printable($message);
}
elseif ($coding == 5)
{
$message = $message;
}
echo $message;
########## coding end
imap_close($mbox);
?>
===============================================================================
I tried using the function add_part_to_array below and noticed a few errors
were thrown. If there are no 'parts' in the structure then if (sizeof($obj->
parts) > 0) will throw an error. As well $prefix is not defined here is the
code I have updated. I have left the original lines commented out. I have
tested reading emails from a gmail account and so far so good.
$partno, 'part_object' => $obj);
if ($obj->type == 2) { // Check to see if the part is an attached email
message, as in the RFC-822 type
// if (sizeof($obj->parts) > 0) { // Check to see if the email has
parts
if(array_key_exists('parts',$obj){
foreach ($obj->parts as $count => $part) {
// Iterate here again to compensate for the broken way that
imap_fetchbody() handles attachments
if (sizeof($part->parts) > 0) {
foreach ($part->parts as $count2 => $part2) {
add_part_to_array($part2, $partno.".".($count2+1),
$part_array);
}
}else{ // Attached email does not have a seperate mime
attachment for text
$part_array[] = array('part_number' => $partno.'.'.($count+
1), 'part_object' => $obj);
}
}
}else{ // Not sure if this is possible
// $part_array[] = array('part_number' => $prefix.'.1',
'part_object' => $obj);
$part_array[] = array('part_number' => $partno.'.1', 'part_object'
=> $obj);
}
}else{ // If there are more sub-parts, expand them out.
// if (sizeof($obj->parts) > 0) {
if(array_key_exists('parts',$obj)){
foreach ($obj->parts as $count => $p) {
add_part_to_array($p, $partno.".".($count+1), $part_array);
}
}
}
}
?>
===============================================================================
For those of you trying to create a "flexible" email reader, I suggest doing
the following.
Firstly, instead of going through each part of the email and decoding it, I
suggest you go in a specific order.
1) First go through all the parts and search for the part that has subtype==
'HTML'. If found, use that as your message body, else go to Step 2.
2) If HTML component not found, search all parts for subtype=='PLAIN'. If
found, use that as your message body else print out an error message (this
should never occur).
3) At this point, you already have the main body of the email that you should
display. The next thing to do is to find all the attachments. You do this by
going through all parts, searching for the parts with ifdisposition==1 (there
can be multiple).
This is the way I did my email reader program and it works perfectly. I started
off by using the methods recommended in a lot of webpages (i.e. going through
the parts tree like 1.2.1, 1, 2, etc) but the problem is the message body is
never in some fixed part! Sometimes its in 1, somtimes 1.1.2, sometimes 2, and
sometimes in some totally unexpected place! So my approach was to "search" for
the parts that I'm interested. Hope this helps. I also managed to crack the
problem with emails containing embedded images. I will probably write a
tutorial on that soon.
===============================================================================
I'm adding this for those of you like me who are scouring the web looking for
code to break down a message. These two functions will break down a multi-part
and non multi-part message and return the contents of the message in the array
$message. It doesn't do attachments. This assumes you've already opened the
mailbox and pass it VIA the $mbox.
function retrieve_message($mbox, $messageid)
{
$message = array();
$header = imap_header($mbox, $messageid);
$structure = imap_fetchstructure($mbox, $messageid);
$message['subject'] = $header->subject;
$message['fromaddress'] = $header->fromaddress;
$message['toaddress'] = $header->toaddress;
$message['ccaddress'] = $header->ccaddress;
$message['date'] = $header->date;
if (check_type($structure))
{
$message['body'] = imap_fetchbody($mbox,$messageid,"1"); ## GET THE BODY OF
MULTI-PART MESSAGE
if(!$message['body']) {$message['body'] = '[NO TEXT ENTERED INTO THE
MESSAGE]\n\n';}
}
else
{
$message['body'] = imap_body($mbox, $messageid);
if(!$message['body']) {$message['body'] = '[NO TEXT ENTERED INTO THE
MESSAGE]\n\n';}
}
return $message;
}
function check_type($structure) ## CHECK THE TYPE
{
if($structure->type == 1)
{
return(true); ## YES THIS IS A MULTI-PART MESSAGE
}
else
{
return(false); ## NO THIS IS NOT A MULTI-PART MESSAGE
}
}
===============================================================================
A very easy way to handle attachments is just using munpack, with a
subdirectory called attachments chmod it to 777 and then use the following bit
of code (with mpack installed) on the MIME encoded body:
$part
";
}
}
?>
===============================================================================
I had an issue with the content that was returned by imap_fetchbody - either
the function itself, or the mail-server, was inserting "=\r\n" at points into
the text body returned. This may depend upon the content type (i.e. plain text
/ csv, as opposed to something like a Word document), but you may need to do
something like:
$body = preg_replace("/=(\r?)\n/", '', imap_fetchbody($mailbox, $message,
$part));
===============================================================================
I spent hours religously thinking that
imap_fetchbody($mbox,$email_number,1.2)
would fetch the html body, and in many cases this did not work. It turns out
that simple message can have a simple [parts] stucture so this became true:
imap_fetchbody($mbox,$email_number,1) - PLAIN
imap_fetchbody($inbox,$email_number,2) - HTML
Check for empty string before using the latter.
===============================================================================
Sorry for my English.
Rather than quoted_printable_decode, you can use the function imap_qprint
($body)
===============================================================================
The previous post contains a copy/paste error and a little added complexity.
The first function should look like this:
parts) > 0) { // There some sub parts
foreach ($struct->parts as $count => $part) {
add_part_to_array($part, ($count+1), $part_array);
}
}else{ // Email does not have a seperate mime attachment for text
$part_array[] = array('part_number' => '1', 'part_object' => $struct);
}
return $part_array;
}
?>
===============================================================================
Better, a fix on a fix... ;)
function read_all_parts($uid){
global $mime,$ret_info,$enc;
$mime = array("text","multipart","message","application","audio",
"image","video","other","unknow");
$enc = array("7BIT","8BIT","BINARY","BASE64",
"QUOTED-PRINTABLE","OTHER");
$struct = imap_fetchstructure( $this -> Link, $uid );
$ret_info = array();
function scan($struct,$subkey){
global $mime,$enc,$ret_info;
foreach($struct as $key => $value){
if($subkey!=0){
$pid = $subkey.".".($key+1); }
else { $pid = ($key+1); }
$ret_info[]['pid'] = $pid;
$ret_info[key($ret_info)]['type'] = $mime["$value->type"];
$ret_info[key($ret_info)]['encoding'] = $enc["$value->encoding"];
next($ret_info);
if(($value->parts)!= null) {scan($value->parts,$pid); }
}
}
if(!is_null($struct->parts))
{
scan($struct->parts,0);
}
else
{
print_r($struct);
echo("
#Function Gets all the subparts , but does not get part: '' function GetParts($this_part, $part_no) { //If it is type message(2)=msg envelope, //Not sure about this assumption : the if statement //double check with RFC822 on this one. if($this_part->type==2){ //and there is only 1 subpart of the envelope //and that subpart is multipart //otherwise will generate excessive '.1' and //send wrong part_no to imap_fetchbody if($this_part->parts[0]->type==1){ $this_part=$this_part->parts[0]; } } if (count($this_part->parts)>0) { for ($i = 0; $i < count($this_part->parts); $i++) { if ($part_no != "") { $newpartno = $part_no . '.' . ($i +1); } else $newpartno = $i+1; $partstringary[$i] = GetParts($this_part->parts[$i], $newpartno); }//for $partstring = implode('|', $partstringary); }//if $partstring = concat_ws('|', $part_no , $partstring); //echo $partstring ; return $partstring; } ######################################### #Companion function go to GetParts(); #Given the partno - returns the structure ######################################### function GetSubPartStructure($mbox, $msgno, $partno){ $msg_struct = imap_fetchstructure($mbox, $msgno); $partsary = explode ('.', $partno); $subpartstruct = $msg_struct; for ($i=0; $i< count($partsary); $i++){ //Not sure about this, if assumption // you should probably double check with RFC822 on this one. if($subpartstruct->type==2){ if($subpartstruct->parts[0]->type==1){ $subpartstruct=$subpartstruct->parts[0]; } } $subpartstruct = $subpartstruct->parts[$partsary[$i]-1]; } return $subpartstruct; } function decodemsg($msgstring, $encoding){ //Write your own function to decode, //or lots of examples within PHP already. return $decodemsg; } #Usage: $msg_struct = imap_fetchstructure($mbox, $msgno); $msgparts= GetParts($msg_struct, $part_no); $partsary = explode($msgparts, '|'); for($i=0; $i=============================================================================== Here's a routine that yields the part of a message with a particular MIME type: subtype) { return $primary_mime_type[(int) $structure->type] . '/' . $structure-> subtype; } return "TEXT/PLAIN"; } function get_part($stream, $msg_number, $mime_type, $structure = false, $part_number = false) { if (!$structure) { $structure = imap_fetchstructure($stream, $msg_number); } if($structure) { if($mime_type == get_mime_type($structure)) { if(!$part_number) { $part_number = "1"; } $text = imap_fetchbody($stream, $msg_number, $part_number); if($structure->encoding == 3) { return imap_base64($text); } else if ($structure->encoding == 4) { return imap_qprint($text); } else { return $text; } } if ($structure->type == 1) { /* multipart */ while (list($index, $sub_structure) = each($structure->parts)) { if ($part_number) { $prefix = $part_number . '.'; } $data = get_part($stream, $msg_number, $mime_type, $sub_structure, $prefix . ($index + 1)); if ($data) { return $data; } } } } return false; } // get plain text $data = get_part($stream, $msg_number, "TEXT/PLAIN"); // get HTML text $data = get_part($stream, $msg_number, "TEXT/HTML"); ?> Right now only the first part with the matching MIME type is returned. A more useful version would create an array and return all matching parts (for GIFs, for instance). =============================================================================== If you download an attachment labeled "winmail.dat" or "win.dat", or with the mime-type of "APPLICATION/MS-TNEF", this is a Microsoft Transport Neutral Encapsulation Format file. It is a proprietary method for encoding several files together in a single file. AFAIK only Outlook sends it with its default setting of sending emails in Rich Text Format. As of PHP 5.2 there is no internal method of breaking apart these attachments. There are external command line utilities that can be called from PHP. Alternately, it is possible to decode these files entirely in PHP. It appears that all current libraries are based on a plugin written by Graham Norbury for Squirrel Mail. The only ones I've seen are in IlohaMail, Telean, Horde-Imp, and NaSMail. The only one that I know that will also decode the RTF message is from NaSMail. To use the NaSMail code, download the "TNEF Attachment Decoder" plugin and extract it to plugins/attachment_tnef/ Then use this bit of code: decodeTnef($tnef); $tnef_files = &$attachment->getFilesNested(); print_r($tnef_files); // See the format of the returned array ?>type==''){ //then this is type TEXT $msg = imap_fetchbody($mbox, $msgno, $msgpartsary[$i]); //Do the decoding $msg = decodemsg($msg, $struct->encoding); echo $msg; //or do whatever you want with it. } else{ //Not TEXT //Do whatever you want //i.e. write the attachment...etc } }


Add New Bus
Bus Name
Route
Originated From
Destination To
Time From Origin
HH:H
mm:m
Number Of Seats
Ticket Price
Cancel
Edit Bus
Bus Name
Route
Originated From
Destination To
Time From Origin
HH:H
mm:m
Number Of Seats
Ticket Price
Cancel
Delete Bus
Bus Name
Route
Originated From
Destination To
Time From Origin
Number Of Seats
Ticket Price
Cancel


"WAGES" Rate of (mention only in Matthew 20:2); to be punctually paid(Leviticus 19:13; Deuteronomy 24:14, 15); judgements threatened against the withholding of (Jeremiah 22:13; Malachi 3:5; comp. James 5:4); paid in money (Matthew 20:1-14); to Jacob in kind (Genesis 29:15, 20; 30:28; 31:7, 8, 41).
"WAGES" Rate of (mention only in Matthew 20:2); to be punctually paid(Leviticus 19:13; Deuteronomy 24:14, 15); judgements threatened against the withholding of (Jeremiah 22:13; Malachi 3:5; comp. James 5:4); paid in money (Matthew 20:1-14); to Jacob in kind (Genesis 29:15, 20; 30:28; 31:7, 8, 41).


nend module for iOS
To access this module from JavaScript, you would do the following:
var Nend_iOS = require("net.nend");
The Nend_iOS variable is a reference to the Module object.


As you thrust your sword through the Fire Elemental, it crumbles to ash. You fight through the fire and brimstone horde, only to be consumed by the mass. As you, yourself, turn to ash, you see other Fire Elementals rise up from the flames. With the sword in the hand of the elementals, they owe allegiance to no one. The world is engulfed in smoke and flames, and all there is...is fire.


the little static site engine that could
The presentation of your content is controlled by a renderer. At present, there is only one, and it's probably the one you'll want to use: HTML, for generating static websites.
Booklit comes with some extremely barebones templates that don't include any styling at all. You'll probably want to change that.
The HTML renderer uses Go's built-in html/template
package. To override templates, create a directory for your .tmpl
files and pass it to Booklit with the --html-templates
flag.
The --html-templates
flag must be passed every time you build your docs, so you may want to put it in a script:
#!/bin/bash
booklit -i lit/index.lit -o public \
--html-templates ./html \
"$@" # forward args from script to booklit
The following template files will be executed if present in the HTML templates directory, with the corresponding data type as .
:
The most impactful of these is page.tmpl
, which is used for the top-level section for each "page" rendered. This is where you would place assets in
, for example.
Booklit executes templates with the following functions available:
{{tag | url}}
generate a URL for the tag
{{content | stripAux}}
strip \aux
elements from the content
{{string | rawHTML}}
render the string as raw HTML, unescaped
{{string | rawURL}}
permit the rendered value to be placed in a url=""
attribute
{{content | render}}
render the content
{{walkContext currentSection subSection}}
generate a convenience struct with fields .Current
and .Section
, useful for traversing a tree of sections while retaining the "current" section, e.g. so it can be marked as "active" in a navigation tree
{{section | headerDepth}}
return the number that should be used for the section's header, i.e. <hN>
Styled content, i.e. booklit.Styled
, instructs the HTML renderer to use the *.tmpl
template named after the style.
For example, \bold
is implemented in the baselit
plugin by returning:
booklit.Styled{
Style: booklit.StyleBold, // "bold"
Content: content,
}
Booklit includes a bold.tmpl
template which is evaluated with .
as the booklit.Styled
value:
{{.Content | render}}
Thus, when content is styled with "bold"
, it will render in strong tags.
Additional content can be propagated to the template by setting it Partials
:
booklit.Styled{
Style: "my-wackadoo-style",
Content: content,
Partials: booklit.Partials{
"Title": title,
},
}
Then, with my-wackadoo-style.tmpl
as the following:

{{.Partial "Title" | render}}

{{.Content | render}}

This would result with title
rendered in between the

tags, and content
rendered below.
Using \styled
instructs the HTML renderer to use (name).tmpl
instead of section.tmpl
, or (name)-page.tmpl
instead of page.tmpl
(if it exists).
So, given the following example:
...and the following as fancy.tmpl
under the given templates path (--html-templates
):

{{.Title | render}}
{{.Body | render}}
{{if not .SplitSections}}
{{range .Children}}
{{. | render}}
{{end}}
{{end}}

...the following will be the rendered HTML for the section:

Fancy Section

I'm a fancy section!

Sub-section

I'm a normal sub-section!

Note that the styling only applies to the section that declares it; it does not propagate to its children.


Local Zoo
Home
Map
Tickets
Order Tickets Here!
Daily Admission
Guest
Price
Adult (13+)
$19.99
Child (3–12)
$15.99
Children 2 and under
FREE
Zoo Members
FREE
Parking
FREE
Valet Parking (Weekends & Holidays
$8.00
Note: Prices above do not include local 7% sales tax
Group Discounts
Number of People
Discount
5–10 people
10%
10–15 people
15%
15–20 people
20%
20–35 people
25%
Order Information
Email:
First Name:
Last Name:
Address:
Apt/Suite#:
City:
State:
ZIP:
Phone:
Number of Tickets:
Payment Method
Debit
Credit
Credit Card
Visa
Master Card
American Express
Card Number
Expiration Date
January
February
March
April
May
June
July
August
September
October
November
December
2016
2017
2018
2019
2020
Submit Your Order


Rootkits:
One of the easiest methods to keep hold of a system is through a rootkit.  Generally rootkits have 4 typical stages:
- Replace important programs with modified copies.
- Create additional users with root powers.
- Create amethod of re-entry (usually involves a listening service asking for a password only - so no other attackers can break in).
- Setup network sniffing software.
Rootkits are very popular, and there are quite a few designed specifically for Linux, some of these include:
- Linux Rootkit (LRK)
- Adore.
- Tuxkit
In this manual I will discuss LRK, this is because it is easily the most famous rootkit out there. Currently LRK is at version 5, and can be obtained from the 'tools' section at http://www.securityfocus.com/. LRK is a very clever piece of kit, it has a number of backdoors into the system, and tools for covering your tracks and privilage escalation.
LRK contains the following tools/ trojaned programs
du, find, ls Trojaned! Hide files.
crontab Trojaned! Hidden Crontab Entries.
ifconfig Hides the PROMISC flag in its normal output (Useful if the attacker sets up a network sniffer).
netstat Trojaned! Hide connections.
tcpd Trojaned! Hide connections, avoid denies.
top, ps, pidof Trojaned! Hide processes.
syslogd Trojaned! Hide logs.
killall Trojaned!  User->r00t.
inetd, login, rshd, sshd Trojaned! Remote access.
ADMSniff Network sniffer.
fix Changes timestamp and checksum information on files.
wted wtmp/ utmp editor!
fix File fixer!
z2 (Zap 2) utmp/ wtmp/ lastlog eraser!
# ./configure
# make all install (for standard install)
or
# make shadow install (if the computer uses shadow passwords)
Now the rootkit is installed you will need to modify 4 files:
/dev/ptyq - this sets network connections that should be ignored, based on incoming and outgoing addresses, uid or ports.
/dev/ptyr - this sets file or directory names to be ignored.
/dev/ptyp - this sets what processes to ignore, based on uid, tty, or command-line matches.
/dev/ptys - this sets what syslog entries to ignore, based on pattern matches.
Now the rootkit is setup! I would recommend having a read through the README file provided with LRK first before you attempt to use this rootkit!
************
Countermeasures:
1) Make sure you run some type of file integrity checker! This will spot any trojaned binaries and modified files.
2) Make a rootkit recovery cd or floppy, on the disk you should include: ls, netstat, ps, top, ifconfig, find, killall, strace, strings, lsof, grep, mount, diff, chkwtmp, and any other programs you may regularly use that might be replaced be a hacker, or that might give you information on the attack.
3) Log as much as you can, allow extra logging in /etc/login.defs, use swatch to monitor logs, use snort or some other form of IDS to try to catch these attackers early.
************


IPRDC is where you learn the step to make a successful Career in IT Industry and Prove your worth in the Industry. Come and be a Part of Idenitive-ans....
IPRDC is where you learn the step to make a successful Career in IT Industry and Prove your worth in the Industry. Come and be a Part of Idenitive-ans...