#include <GLApp.hpp>
|
| | GLApp () |
| |
| virtual | ~GLApp () |
| |
| bool | initGLApp (void) |
| |
| GLFWwindow * | getWindow (void) const |
| | this return opengl window. if you want to set callback function or etc .. , get window from this method. More...
|
| |
| float | getAspectRatio (void) const |
| |
| int | Run (void) |
| | this run main loop of terrain renderer and finally return exit code. More...
|
| |
| void | errorCallback (int error, const char *description) const |
| |
| virtual void | keyCallback (int key, int scancode, int action, int mode) |
| |
| virtual void | mousePosCallback (double xpos, double ypos)=0 |
| |
| virtual void | mouseBtnCallback (int btn, int action, int mods)=0 |
| |
| virtual void | scrollCallback (double xoffset, double yoffset)=0 |
| |
| void | resizingCallback (int newWidth, int newHeight) |
| |
◆ GLApp()
◆ ~GLApp()
◆ calculateFrameStats()
| void GLApp::calculateFrameStats |
( |
void |
| ) |
|
|
protected |
@ brief check frame rate stats. @ details calculate frame rate stats and show it through window title. this is useful meaurement about program performance.
◆ drawScene()
| virtual void GLApp::drawScene |
( |
void |
| ) |
|
|
protectedpure virtual |
◆ errorCallback()
| void GLApp::errorCallback |
( |
int |
error, |
|
|
const char * |
description |
|
) |
| const |
◆ getAspectRatio()
| float GLApp::getAspectRatio |
( |
void |
| ) |
const |
|
inline |
◆ getWindow()
| GLFWwindow * GLApp::getWindow |
( |
void |
| ) |
const |
this return opengl window. if you want to set callback function or etc .. , get window from this method.
◆ initGLApp()
| bool GLApp::initGLApp |
( |
void |
| ) |
|
@ brief deal with whole opengl application initialization. @ return return boolean whether if intialize opengl is successful or not.
◆ initGLConfigure()
| bool GLApp::initGLConfigure |
( |
void |
| ) |
|
|
protected |
@ brief OpenGL Configuration like enabling depth test or back culling. @ details enable culling, 4x multi sample, depthtest and etc according to EngineProperty which defined in "EngineProperty.hpp" later, will be moved to json configure file. @ return return true always. just for consistency.
◆ initGLWindow()
| bool GLApp::initGLWindow |
( |
bool |
fullscreen | ) |
|
|
protected |
@ brief initialize OpenGL window with GLFW. @ details initialize OpenGL with version 4.3 . check full screen enabled, if so, turn on the application with fullscreen. finally log user's hardware information (vendor, renderer). @ param if true, window will initialized to fullscreen mode. @ return return boolean whether if initializing OpenGL is successful or not.
use opengl version 4.3 (tessellation is enabled after opengl 4.0)
this is enabled when apple computer run this program.
◆ keyCallback()
| void GLApp::keyCallback |
( |
int |
key, |
|
|
int |
scancode, |
|
|
int |
action, |
|
|
int |
mode |
|
) |
| |
|
virtual |
◆ mouseBtnCallback()
| virtual void GLApp::mouseBtnCallback |
( |
int |
btn, |
|
|
int |
action, |
|
|
int |
mods |
|
) |
| |
|
pure virtual |
◆ mousePosCallback()
| virtual void GLApp::mousePosCallback |
( |
double |
xpos, |
|
|
double |
ypos |
|
) |
| |
|
pure virtual |
◆ onResize()
| void GLApp::onResize |
( |
int |
newWidth, |
|
|
int |
newHeight |
|
) |
| |
|
protectedvirtual |
@ brief this method will be called whenever framebuffer size is changed.
Reimplemented in EngineApp.
◆ resizingCallback()
| void GLApp::resizingCallback |
( |
int |
newWidth, |
|
|
int |
newHeight |
|
) |
| |
◆ Run()
this run main loop of terrain renderer and finally return exit code.
@ brief this is main loop for opengl application. @ details first, reset the timer. in main loop, timer always tick. if user pause the application, system will fall in sleep. when get out from loop, Check error mainly about invalud enumeration and Log application performace. @ return this will be connected to system exit code.
timer should tick every frame. tick update delta time and total time.
at debug mode, this will log any error about opengl context.
◆ scrollCallback()
| virtual void GLApp::scrollCallback |
( |
double |
xoffset, |
|
|
double |
yoffset |
|
) |
| |
|
pure virtual |
◆ updateScene()
| virtual void GLApp::updateScene |
( |
float |
dt | ) |
|
|
protectedpure virtual |
◆ clientHeight
◆ clientWidth
◆ fullscreen
◆ paused
◆ timer
◆ window
| GLFWwindow* GLApp::window |
|
protected |
◆ WndCaption
| std::string GLApp::WndCaption |
|
protected |
The documentation for this class was generated from the following files:
- C:/Users/User/Desktop/Github/Procedural-Terrain-Estimator/Renderer/TerrainRenderer/GLApp.hpp
- C:/Users/User/Desktop/Github/Procedural-Terrain-Estimator/Renderer/TerrainRenderer/GLApp.cpp


Card title
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
--- layout: components title: Cards ---
Flex card is a very versatile card component. It automatically spans the width of its container. you can do many things with this type of card and display any type of content, wether on a website or in an app.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
You can display a flex card with a light border by adding the .light-bordered
class.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
You can display a flex card with a light box shadow by adding the .light-raised
class.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
You can display a more important box shadow by adding the .raised
class.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
You can make a card raise on hover by adding the .hover-raised
class.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
You give some inset to a card on hover by adding the class .hover-inset
.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
If you plan to design cards with elements getting out of the flow, just add the .card-overflow
class to the flex card element.
Lorem ipsum dolor sit amet, clita laoreet ne cum. His cu harum inermis iudicabit. Ex vidit fierent hendrerit eum, sed stet periculis ut. Vis in probo decore labitur. Unum simul an vis, tale patrioque eos ad, dicunt percipit ea nam.
Lorem ipsum dolor sit amet, clita laoreet ne cum. His cu harum inermis iudicabit. Ex vidit fierent hendrerit eum, sed stet periculis ut. Vis in probo decore labitur. Unum simul an vis, tale patrioque eos ad, dicunt percipit ea nam.
Give a card a primary background by adding the .primary-card
class.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
Give a card a secondary background by adding the .secondary-card
class.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
Give a card an accent background by adding the .accent-card
class.
Lorem ipsum dolor sit amet, has vero libris melius ea, omnis velit comprehensam duo an, meis ornatus eam ad. Ius ut labores scaevola.
Unlike flex card, feature card's dimensions are static. By default it has 300px320px
dimensions. Height can be extended by adding the modifiers .card-md
.card-lg
to the parent element. Feature cards display perfectly also on mobile.
Unlike flex card, feature card's dimensions are static. By default it has 300px x 320px
dimensions. Height can be extended by adding the modifier .card-md
to the parent element. Feature cards display perfectly also on mobile.
Unlike flex card, feature card's dimensions are static. By default it has 300px x 320px
dimensions. Height can be extended by adding the modifier .card-md
to the parent element. Feature cards display perfectly also on mobile.
Bulma natively offers wonderful image cards, wich are customizable. If you want to find more about Bulma cards, head to the official cards documentation.
Helen Miller
23 mar 2017
Kevin Smith
12 apr 2017
Sandra Mayers
29 apr 2017
Ressource cards are useful when displaying ressources, articles or blog post. They feature a image zoom out and zoom in effect when hovered. To activate these effects, add .zoomIn
or .zoomOut
to the figure
container
Learning Center
Learning Center
Avatars can be added to ressource cards. It is a useful feature when showing articles with multiple authors.
Floating image cards extend Bulma cards. They feature a floating wide image or a boxed one. Check the example markup for more details.
New perspectives
23 mar 2017
New perspectives
23 mar 2017
New perspectives
23 mar 2017
Floating image cards extend Bulma cards. They feature a floating wide image or a boxed one. Check the example markup for more details.
New perspectives
23 mar 2017
New perspectives
23 mar 2017
New perspectives
23 mar 2017
Inspired by Medium and built on top of flex cards, media cards are a great alternative way to display your content. The side layout automatically stacks on touch devices.
When it comes to structuring a React app, the ideal structure is the one that allows you to move around your code...
When it comes to structuring a React app, the ideal structure is the one that allows you to move around your code...
Inspired by Medium and built on top of flex cards, media cards are a great alternative way to display your content. The side layout automatically stacks on touch devices.
When it comes to structuring a React app, the ideal structure is the one that allows you to move around your code...
When it comes to structuring a React app, the ideal structure is the one that allows you to move around your code...
A nice to have if you'd like to show some events or any content that should be revealed on hover.
Partners training session
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ea nulla cum impedit et nemo molestiae, suscipit animi officiis soluta natus, provident ab laudantium, amet dolorum.
Event detailsRelease momentum
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ea nulla cum impedit et nemo molestiae, suscipit animi officiis soluta natus, provident ab laudantium, amet dolorum.
Event detailsNode JS Conf
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ea nulla cum impedit et nemo molestiae, suscipit animi officiis soluta natus, provident ab laudantium, amet dolorum.
Event details


University of Hawaii football team finding solutions to their depth issues | Honolulu Star-Advertiser
Michael Eletise, Eugene Ford, Pumba Williams and Andrew Choi have filled in for wounded Warriors. Read more
Mahalo for reading the Honolulu Star-Advertiser!
You're reading a premium story. Read the full story with our Print & Digital Subscription.
Already a subscriber? Log in now to continue reading this story.
Print subscriber but without online access? Activate your Digital Account now.


×
remove all
×
×
start at
play something else
loop this song
remove this song
batch import
import this stuff
batch export


--- layout: default --- {% include navheader.html %} {% include platform.html %} {% include promises.html %} {% include how.html %} {% include video.html %} {% include deployment.html %}


---
status: publish
layout: page
title: Using the Utah SGID Image Server
author:
display_name: Bert Granberg
email<EMAIL_ADDRESS>tags: []
categories: []
published: false
date: 2011-11-03 17:57:23 -0600
---
ImageServer-hosted aerial photography
High resolution aerial photography is a critical foundation for GIS users but a statewide mosaic of imagery almost demands that you have your own high end storage solution.
The SGID ImageServer eliminated the need to maintain your own imagery collection by providing statewide aerial photography, hillshade, and scanned maps services to ArcMap user via a high speed internet connection. Very easy to use.
For ArcMap 9.3 or 10 users:
- Open the ArcMap Customize window
- Click the Commands tab
- Select the Image Server category and drag the Add Image Server Connection button on to the standard toolbar next to the yellow and black 'Add Data' button
- Close the Customize window and click on the Add Image Server Connection button.
- For Server Name, type in: image.agrc.utah.gov
- Browse the folders (see below) for an image service of your choice, click Add and then OK
Notes:
- To use Image Server, you will need to be able to send and receive requests on ports 3982, 3983, and 3984. Check with your network administrator to see that these ports are open through your firewall.
- 2009 aerial photography is available at 1 meter resolution statewide and 1 foot resolution in Utah's urban core and several outlying areas (Cache County, Canyonlands/Moab area). 2006 1 foot photography has a larger footprint including along most of the state and federal highway system.
- The Elevation --> Hillshade_10Meter4Way services provides the best cartographic hillshade/terrain display
- USGS Topographic Maps are available under the ScannedMaps folder available via an ImageServer connection
- If you are runing ArcGIS 9.3 or higher, the client should be pre-installed along with the ArcGIS software. You'll just need to add the Add Image Service button from the Customize Window --> Categories --> Image Server to an existing ArcMap toolbar.
- If you are an ArcGIS 9.1 or 9.2 user or a CAD user, you'll need to install the Image Server client. This client is free and complete installation instructions are available from the agrc ftp site: ftp://ftp.agrc.utah.gov/Temp/ImageServer_Client.zip . Included in the zip file is a MS Word document called IS_Client_Install.doc, with the installation instructions.


Guides The following guides are available globally. Account Linking Samples Account Linking Account Linking FAQ E-Receipt Parsing © 2023 BlinkReceipt LLC. All rights reserved. (Last updated: 2023-07-07) Generated by jazzy ♪♫ v0.14.3, a Realm project.


(PECL getdns >= 0.11.0)
php_getdns_context_create — Create a new DNS context.
&$context
, bool $setFromOS
)Calls to getdns functions require a DNS context, which is a group of API settings that affect how DNS calls are made. For most applications, a default context is sufficient.
context
The variable to receive the created context. Note that this argument is passed by reference and any existing value will be overwritten. The context must be freed using php_getdns_context_destroy().
setFromOS
This variable describes how certain default context values are determined. Most applications will want setFromOS set to 1. When the context is used in the API for the first time and setFromOS is 1, the API starts replacing some of the values with values from the operating system, such as those that would be found in res_query(3), /etc/resolv.conf, and so on, then proceeds with the new function. Some advanced users will not want the API to change the values to the OS's defaults; if setFromOS is 0, the API will not do any updates to the initial values based on changes in the OS. For example, this might be useful if the API is acting as a stub resolver that is using a specific upstream recursive resolver chosen by the application, not the one that might come back from DHCP.
This function returns an integer response code. GETDNS_RETURN_GOOD indicates successful completion.
The call to php_getdns_context_create() immediately returns a context that can be used with other API calls; that context contains the API's default values.


Thanks for choosing OSI. In this Customer Agreement, you'll find important information about your Service, including our ability to make changes to your Service or this agreement's terms, our liability if things don't work as planned and how disputes are resolved. If you're signing up for Service for a minimum contract term, you'll also find information about that contract term and what happens if you cancel a line of Service early or don't pay on time.
Your Service terms and conditions are part of this agreement. Your Plan includes your monthly allowances and features. You can also subscribe to several Optional Services. Together, your Plan and any Optional Services you select are your Service. The terms and conditions for your Service can be found in the brochures that are available when you activate.
When you accept, you're representing that you are at least 18 years old and are legally able to accept an agreement. If you're accepting for an organization, you're representing that you are authorized to bind that organization, and where the context requires, "you" means the organization.
If you don't want to accept, don't do any of these things. If you do accept, you can cancel a line of Service within 14 days of accepting without having to pay an early termination fee as long as you return any equipment you purchased from us at the time you accepted, but you'll still have to pay for your Service through that date. If you signed up for Prepaid Service, no refunds will be granted after 14 days or if your account has been activated.
We may collect personal information about you. We may also gather some information through our relationship with you, such as information about the quantity, technical configuration, type, destination and amount of your use of our telecommunications services. You can find out how we use, share and protect the information we collect about you in the OSI Privacy Policy, available at TBD. If you subscribe to Service for which usage charges are billed at the end of the billing period ("Postpay Service"), we may investigate your credit history at any time and share credit information about you with credit reporting agencies. If you'd like the name and address of any credit agency that gives us a credit report about you, just ask.
Many services and applications offered through your device may be provided by third parties. Some of these services and applications, which you may block or restrict at no cost, may involve charges for which you will be billed. The amount and frequency of the charges will be disclosed when you agree to the charges. Before you use, link to or download a service or application provided by a third party, you should review the terms of such service or application and applicable privacy policy. Personal information you submit may be read, collected or used by the service or application provider and/or other users of those forums. OSI is not responsible for any third–party information, content, applications or services you access, download or use. You are responsible for maintaining virus and other Internet security protections when accessing these third–party products or services.
If you're signing up for Postpay Service, you're agreeing to subscribe to a line of Service either on a month–to–month basis or for a minimum contract term, as shown on your receipt or order confirmation. (If your Service is suspended without billing, that time doesn't count toward completing your contract term.) Once you've completed your contract term, you'll automatically become a customer on a month–to–month basis for that line of Service. If you cancel a line of Service, or if we cancel it for good cause, during its contract term, you'll have to pay an early termination fee. Cancellations will become effective on the last day of that month's billing cycle, and you are responsible for all charges incurred until then. Also, if you bought your wireless device from an authorized agent or third–party vendor, you should check whether they charge a separate termination fee.
No problem – just tell us by phone, in person, or in writing. You can appoint someone to manage your Postpay account for a single transaction, or until you tell us otherwise. The person you appoint will be able to make changes to your account, including adding new lines of Service, buying new wireless devices, and extending your contract term. Any changes that person makes will be treated as modifications to this agreement.
We may change prices or any other term of your Service or this agreement at any time, but we'll provide notice first, including written notice if you have Postpay Service. If you use your Service after the change takes effect, that means you're accepting the change. If you're a Postpay customer and a change to your Plan or this agreement has a material adverse effect on you, you can cancel the line of Service that has been affected within 60 days of receiving the notice with no early termination fee.
You must pay all taxes, fees and surcharges set by federal, state and local governments. Please note that we may not always be able to notify you in advance of changes to these charges.
TBD
If you're a Postpay customer, you can dispute your bill within 180 days of receiving it, but unless otherwise provided by law , you still have to pay all charges until the dispute is resolved. If you're a Prepaid customer, you can dispute a charge within 180 days of the date the disputed charge was incurred.
If you drop a call in your Coverage Area, redial.  If you're a Postpay customer and you lose Service in your Coverage Area for more than 24 hours in a row and we're at fault, call us within 180 days and we'll give you a credit for the time lost. Please be aware that these are your only rights for dropped calls or interrupted Service.
If you're a Postpay customer and we don't get your payment on time, we will charge you a late fee of up to 1.5 percent per month (18 percent per year) on the unpaid balance, or a flat $5 per month, whichever is greater, if allowed by law in the state of your billing address. (If you choose another company to bill you for our Service [such as another Verizon company], late fees are set by that company or by its tariffs and may be higher than our late fees.) If we use a collection agency to collect from you, we may charge you for any fees the collection agency charges us, if allowed by law in the state of your billing address when we first send your account to a collection agency. We may require a deposit at the time of activation or afterward, or an increased deposit. We'll pay simple interest on any deposit at the rate the law requires. We may apply deposits or payments in any order to any amounts you owe us on any account. If your final credit balance is less than $1, we will refund it only if you ask. You may have to pay a fee to activate Service or to reconnect Service if it is interrupted for non-payment or suspended for any reason.
If you're a Prepaid customer, you may replenish your balance at any time before the expiration date by providing us with another payment. Your balance may not exceed $1,000 and you may be prevented from replenishing if your balance reaches $1,000. We will suspend service when your account reaches the expiration date and any unused balance will be forfeited.
We may charge you up to $25 for any returned check.
We're here to help. It's important that you notify us right away, so we can suspend your Service to keep someone else from using it. If you're a Postpay customer and your wireless device is used after the loss or theft but before you report it, and you want a credit for any charges for that usage, we're happy to review your account activity and any other information you'd like us to consider. Keep in mind that you may be held responsible for the charges if you delayed reporting the loss or theft without good reason, but you don't have to pay any charges you dispute while they are being investigated. If we haven't given you a courtesy suspension of recurring monthly charges during the past year, we'll give you one for 30 days or until you replace or recover your wireless device, whichever comes first.
We can, without notice, limit, suspend or end your Service or any agreement with you for any good cause, including, but not limited to: (1) if you: (a) breach this agreement; (b) resell your Service; (c) use your Service for any illegal purpose, including use that violates trade and economic sanctions and prohibitions promulgated by any U.S. governmental agency; (d) install, deploy or use any regeneration equipment or similar mechanism (for example, a repeater) to originate, amplify, enhance, retransmit or regenerate an RF signal without our permission; (e) steal from or lie to us; or, if you're a Postpay customer, (f) pay late more than once in any 12 months; (g) incur charges larger than a required deposit or billing limit, or materially in excess of your monthly access charges (even if we haven't yet billed the charges); (h) provide credit information we can't verify; or (i) are unable to pay us or go bankrupt; or (2) if you, any user of your device or any account manager on your account: (a) threaten, harass, or use vulgar and/or inappropriate language toward our representatives; (b) interfere with our operations; (c) "spam," or engage in other abusive messaging or calling; (d) modify your device from its manufacturer's specifications; or (e) use your Service in a way that negatively affects our network or other customers. We can also temporarily limit your Service for any operational or governmental reason.
If you're a Postpay customer, you may be eligible for a discount if you are and remain affiliated with an organization that has an agreement with us. Unless your discount is through a government employee discount program, we may share certain information about your Service (including your name, your wireless telephone number and your total monthly charges) with your organization from time to time to make sure you're still eligible. We may adjust or remove your discount according to your organization's agreement with us, and remove your discount if your eligibility ends or your contract term expires. In any case, this won't be considered to have a material adverse effect on you.
We make no representations or warranties, express or implied, including, to the extent permitted by applicable law, any implied warranty of merchantability or fitness for a particular purpose, about your Service, your wireless device, or any applications you access through your wireless device. We do not warrant that your wireless device will work perfectly or will not need occasional upgrades or modifications, or that it will not be negatively affected by network-related modifications, upgrades or similar activity. If you download or use applications, services or software provided by third parties (including voice applications), 911 or E–911, or other calling functionality, may work differently than services offered by us, or may not work at all. Please review all terms and conditions of such third-party products.
Please be aware that if you activated your wireless device through our Open Development program, we can't vouch for the device's call quality or overall functionality.
You and Verizon Wireless both agree to limit claims against each other for damages or other monetary relief to direct damages. This limitation and waiver will apply regardless of the theory of liability. That means neither of us will try to get any indirect, special, consequential, treble or punitive damages from the other. This limitation and waiver also applies if you bring a claim against one of our suppliers, to the extent we would be required to indemnify the supplier for the claim. You agree we aren't responsible for problems caused by you or others, or by any act of God. You also agree we aren't liable for missed or deleted voice mails or other messages, or for any information (like pictures) that gets lost or deleted if we work on your device. If another wireless carrier is involved in any problem (for example, while you're roaming), you also agree to any limitations of liability in its favor that it imposes.
WE HOPE TO MAKE YOU A HAPPY CUSTOMER, BUT IF THERE'S AN ISSUE THAT NEEDS TO BE RESOLVED, THIS SECTION OUTLINES WHAT'S EXPECTED OF BOTH OF US.
YOU AND VERIZON WIRELESS BOTH AGREE TO RESOLVE DISPUTES ONLY BY ARBITRATION OR IN SMALL CLAIMS COURT. THERE'S NO JUDGE OR JURY IN ARBITRATION, AND THE PROCEDURES MAY BE DIFFERENT, BUT AN ARBITRATOR CAN AWARD THE SAME DAMAGES AND RELIEF, AND MUST HONOR THE SAME TERMS IN THIS AGREEMENT, AS A COURT WOULD. IF THE LAW ALLOWS FOR AN AWARD OF ATTORNEYS' FEES, AN ARBITRATOR CAN AWARD THEM TOO. WE ALSO BOTH AGREE THAT:
(1) THE FEDERAL ARBITRATION ACT APPLIES TO THIS AGREEMENT.  YOU CAN ALSO BRING ANY ISSUES YOU MAY HAVE TO THE ATTENTION OF FEDERAL, STATE, OR LOCAL GOVERNMENT AGENCIES, AND IF THE LAW ALLOWS, THEY CAN SEEK RELIEF AGAINST US FOR YOU.
 FOR CLAIMS OVER $10,000, THE AAA'S WIRELESS INDUSTRY ARBITRATION ("WIA") RULES WILL APPLY. WE AGREE THAT IN LARGE/COMPLEX CASES, THE LOSER CAN ASK FOR A PANEL OF THREE NEW ARBITRATORS TO REVIEW THE AWARD. FOR CLAIMS OF $10,000 OR LESS, THE PARTY BRINGING THE CLAIM CAN CHOOSE EITHER THE AAA'S WIA RULES OR THE BBB'S RULES FOR BINDING ARBITRATION OR, ALTERNATIVELY, CAN BRING AN INDIVIDUAL ACTION IN SMALL CLAIMS COURT.
(3) THIS AGREEMENT DOESN'T ALLOW CLASS ARBITRATIONS EVEN IF THE AAA OR BBB PROCEDURES OR RULES WOULD. THE ARBITRATOR MAY AWARD MONEY OR INJUNCTIVE RELIEF ONLY IN FAVOR OF THE INDIVIDUAL PARTY SEEKING RELIEF AND ONLY TO THE EXTENT NECESSARY TO PROVIDE RELIEF WARRANTED BY THAT PARTY'S INDIVIDUAL CLAIM.
 IN OUR MEDIATION PROGRAM, WE ASSIGN SOMEONE WHO'S NOT DIRECTLY INVOLVED IN THE DISPUTE (THOUGH POSSIBLY FROM OUR COMPANY) TO HELP BOTH SIDES REACH AN AGREEMENT. THAT PERSON HAS ALL THE RIGHTS AND PROTECTIONS OF A MEDIATOR. NOTHING SAID IN THE MEDIATION CAN BE USED LATER IN AN ARBITRATION OR LAWSUIT. IF YOU'D LIKE TO KNOW MORE, PLEASE CONTACT US AT VERIZONWIRELESS.COM OR THROUGH CUSTOMER SERVICE. IF YOU'D LIKE TO START THE MEDIATION PROCESS, PLEASE GO TO VERIZONWIRELESS.COM OR CALL CUSTOMER SERVICE FOR A MEDIATION REQUEST FORM TO FILL OUT, AND MAIL IT TO US AT THE ADDRESS SHOWN ON THE FORM. OR IF YOU'D PREFER TO START THE ARBITRATION PROCESS, PLEASE CONTACT THE AAA OR BBB FOR THE FORMS YOU'LL NEED TO SUBMIT.

(6) WE MAY MAKE A WRITTEN SETTLEMENT OFFER ANYTIME BEFORE ARBITRATION BEGINS.
(7) AN ARBITRATION AWARD AND ANY JUDGMENT CONFIRMING IT APPLY ONLY TO THAT SPECIFIC CASE; IT CAN'T BE USED IN ANY OTHER CASE EXCEPT TO ENFORCE THE AWARD ITSELF.
(8) IF FOR SOME REASON THE PROHIBITION ON CLASS ARBITRATIONS SET FORTH IN SUBSECTION (3) CANNOT BE ENFORCED, THEN THE AGREEMENT TO ARBITRATE WILL NOT APPLY.
  IN THE EVENT OF LITIGATION, THIS PARAGRAPH MAY BE FILED TO SHOW A WRITTEN CONSENT TO A TRIAL BY THE COURT.
If we don't enforce our rights under this agreement in one instance, that doesn't mean we won't or can't enforce those rights in any other instance. You cannot assign this agreement or any of your rights or duties under it without our permission. However, we may assign this agreement or any debt you owe us without notifying you. If you're a Postpay customer, please note that many notices we send to you will show up as messages on your monthly bill. If you have online billing, those notices will be deemed received by you when your online bill is available for viewing. If you get a paper bill, those notices will be deemed received by you 3 days after we mail the bill to you. If we send other notices to you, they will be considered received immediately if we send them to your wireless device, or to any email or fax number you've given us, or after 3 days if we mail them to your billing address. If you need to send notices to us, please send them to the customer service address on your latest bill.
If you're a Prepaid customer and we send notices to you, they will be considered received immediately if we send them to your wireless device or to any email or fax number you've given us, or if we post them as a pre-call notification on your Service, or after three days if we mail them to the most current address we have for you. If you need to send notices to us, please send them to the Customer Service Prepaid address at verizonwireless.com/contactus
If any part of this agreement, including anything regarding the arbitration process, is ruled invalid, that part may be removed from this agreement.
This agreement and the documents it incorporates form the entire agreement between us. You can't rely on any other documents, or on what's said by any sales or customer service representatives, and you have no other rights regarding Service or this agreement. This agreement isn't for the benefit of any third party except our parent companies, affiliates, subsidiaries, agents, and predecessors and successors in interest. Except where we've agreed otherwise elsewhere in this agreement, this agreement and any disputes covered by it are governed by the laws of the state encompassing the area code of your wireless phone number when you accepted this agreement, without regard to the conflicts of laws and rules of that state.
Additional Disclosures
We are implementing optimization and transcoding technologies in our network
to transmit data files in a more efficient manner to allow available network
capacity to benefit the greatest number of users. These techniques include
caching less data, using less capacity, and sizing the video more
appropriately for the device. The optimization process is agnostic to the
content itself and to the website that provides it. While we invest much
effort to avoid changing text, image, and video files in the compression
process and while any change to the file is likely to be indiscernible, the
optimization process may minimally impact the appearance of the file as
displayed on your device. For a further, more detailed explanation of these
techniques, please visit www.verizonwireless.com/vzwoptimization
Verizon Wireless strives to provide customers the best experience when using our network, a shared resource among tens of millions of customers. To help achieve this, if you use an extraordinary amount of data and fall within the top 5% of Verizon Wireless data users we may reduce your data throughput speeds periodically for the remainder of your then current and immediately following billing cycle to ensure high quality network performance for other users at locations and times of peak demand. Our proactive management of the Verizon Wireless network is designed to ensure that the remaining 95% of data customers aren't negatively affected by the inordinate data consumption of just a few users.
Last Updated: 02/11/11


sig.js
Dynamic Elements
In sig.js there are two main constructs that allow for dynamic element creation: WidgetSpecs and Elements
WidgetSpec
A WidgetSpec's just a specification for rendering an element - it includes how to generate its HTML and how to generate its CSS.
Elements
Elements are the actual instantiation of a WidgetSpec. You can see if an element is being clicked, what its value has, etc.
TODO Application - More on Elements
Having declarative methods for elements allows us to easily compose them and create dynamic configurations.
Spring UI


--- layout: post title: Intridea Goes 8-Bit for Nintendo's 121st Birthday date: 2010-09-23 15:29:31.000000000 -07:00 type: post published: true status: publish categories: [] tags: [] meta: {} author: ---
We've decided to go 8-bit to celebrate Nintendo's 121st birthday and for inspiring a generation of gamers to become programmers.


Your Team Profile!
John Doe
Manager
ID#: 1
Email Address:
<EMAIL_ADDRESS>Office Number: 1100
Cory Neel
Engineer
ID#: 2
Email Address:
<EMAIL_ADDRESS>GitHub Profile name:
cocobeware83
Jane
Intern
ID#: 3
Email Address:
<EMAIL_ADDRESS>School/University attending: University Of Texas @ Austin
Bob
Intern
ID#: 4
Email Address:
<EMAIL_ADDRESS>School/University attending: University of Texas @ Austin


User Tournaments
You have not participated in any tournaments.
{{tournament.topics.length}}
All Tournaments
No tournaments to show.
{{tournament.topics.length}}


<lcPlanObjective>
The <lcPlanObjective>
describes the
objective to be addressed by a gap analysis or
intervention.
Category: Learning and training: common content elements


We visualize tables!
- disintermediate compelling relationships
- extend e-business eyeballs
- syndicate next-generation action-items
- empower 24/7 infrastructures
- iterate scalable technologies
- drive ubiquitous synergies
- deliver extensible web-readiness
- engage vertical deliverables
- target revolutionary deliverables
- brand distributed technologies


Coldplay to pause touring over environmental concerns
by Stephen McNeiceBritish band Coldplay says they are pausing touring over their concerns about the environmental impact of concerts.
Lead singer Chris Martin told BBC that the band - who are releasing their new album Everyday Life this week - will take the next year or two to work out how the tour can be both sustainable and 'actively beneficial'.
He said flying will be the most difficult issue to address, but that their dream is to have a show with no single use plastic and that is largely solar powered.
He told BBC: "We've done a lot of big tours at this point. How do we turn it around so it's no so much taking as giving?
"How can we harness the resources that our tour creates and make it have a positive impact?
"Everyone will catch up if you prove that it's easy to do it the right way."
Mr Martin said the band would be 'disappointed' if their next major tour isn't carbon neutral.
Instead of a traditional concert launch tour, Coldplay are playing two concerts in Jordan which will be broadcast free on YouTube tomorrow (coinciding with the local sunrise and sunset).
Coldplay's last 'Head Full of Dreams' world tour was in 2016/17, with the band playing venues in North / South America, Europe, Asia and Australia / New Zealand.
Reacting to the band's announcement, Technological University Dublin's Professor Gordon Chambers - who researches the impact of plastics on the environment - said these issues need to be addressed globally.
He noted: "I'm sure Coldplay and Chris Martin are very eco-friendly in their own lifestyle.
"[But] we need policies and real legislation that will help the situation, and that's up to the politicians."


Possible reasons:
* You are not connected to the Internet. If this is the case, then please connect to the Internet and try again. * The URL that Passenger Standalone tried to download from no longer exists. Please file a bug report if this is the case: http://code.google.com/p/phusion-passenger/issues/list * The download was corrupted. Please re-run Phusion Passenger Standalone; it will re-download Nginx. * Phusion Passenger Standalone is not able to write to /tmp. Please fix the permissions for this directory, or run Phusion Passenger Standalone as root.


no!
ok!
;-)
no!
no!
First
Second
Third
Fourth
Fifth
Sixth/td>
Text A
Text B
Adding/removing class
Text C
Toggling class


A cross platform solution to node’s spawn and spawnSync.
$ npm install cross-spawn
If you are using spawnSync
on node 0.10 or older, you will also need to install spawn-sync
:
$ npm install spawn-sync
Node has issues when using spawn on Windows:
options.shell
support on node < v6del
or dir
All these issues are handled correctly by cross-spawn
.
There are some known modules, such as win-spawn, that try to solve this but they are either broken or provide faulty escaping of shell arguments.
Exactly the same way as node’s spawn
or spawnSync
, so it’s a drop in replacement.
```js var spawn = require(‘cross-spawn’);
// Spawn NPM asynchronously var child = spawn(‘npm’, [‘list’, ‘-g’, ‘-depth’, ‘0’], { stdio: ‘inherit’ });
// Spawn NPM synchronously var results = spawn.sync(‘npm’, [‘list’, ‘-g’, ‘-depth’, ‘0’], { stdio: ‘inherit’ }); ```
options.shell
as an alternative to cross-spawn
Starting from node v6, spawn
has a shell
option that allows you run commands from within a shell. This new option solves most of the problems that cross-spawn
attempts to solve, but:
If you are using the shell
option to spawn a command in a cross platform way, consider using cross-spawn
instead. You have been warned.
While cross-spawn
handles shebangs on Windows, its support is limited: e.g.: it doesn’t handle arguments after the path, e.g.: #!/bin/bash -e
.
Remember to always test your code on Windows!
$ npm test
Released under the MIT License.


FOR A BISHOP (especially on the Anniversary of Ordination)
This
Mass is celebrated on the anniversary of the election of the bishop in places where
special celebrations are held, except on the Sundays of Advent, Lent, and
Easter, solemnities, Ash Wednesday, and the Weekdays of Holy Week.
ENTRANCE ANTIPHON
I will look after my sheep, says the Lord, and I will appoint a shepherd to pasture them, and I, the Lord, will be their God.
COLLECT
O God, eternal
shepherd of the faithful, who tend your Church in countless ways and rule over
her in love, grant, we pray, that N., your
servant, whom you have set over your people, may preside in the place of Christ
over the flock whose shepherd he is, and be faithful as a teacher of doctrine,
a Priest of sacred worship and as one who serves them by governing. Through our
Lord Jesus Christ, your Son, who lives and reigns with you in the unity of the
Holy Spirit, one God, for ever and ever.
Or:
O God,
shepherd and ruler of all the faithful, look favourably on your servant, whom
you have set at the head of your Church of N. as
her shepherd; grant, we pray, that by word and example he may be of service to
those over whom he presides, so that, together with the flock entrusted to his
care, he may come to everlasting life. Through our Lord Jesus Christ, your Son,
who lives and reigns with you in the unity of the Holy Spirit, one God, for
ever and ever.
PRAYER OVER THE OFFERINGS
May this oblation, O Lord, which we have presented for your servant N., become an offering acceptable to you and, for the good of the flock, may he, whom you have raised up among your people to be High Priest, be endowed, by your gift, with apostolic virtues. Through Christ our Lord.
COMMUNION ANTIPHON
The Son of Man did not come to be served but to serve, and to give his life as a ransom for many.
PRAYER AFTER COMMUNION
By the power
of this Sacrament, O Lord, increase the gifts of your grace in N., your servant and our
Bishop, that he may serve you worthily in the pastoral ministry and receive the
eternal rewards of a faithful steward. Through Christ our Lord.


Passport to Lifetime Fitness
My name is Mike. I have 11 years of tech experience. Take a look at some of my projects below.
Bio
I have spent the past decade or so working in tech as a Systems Engineer, Middleware Engineer, Project Manager, Technology Manager, and Product Owner. I have a passion for learning new technologies so I decided to learn to code to see where that could take me. Prior to this I spent time as a teacher in Japan, a tutor, grant writer and radio DJ in Alaska, Peace Corps volunteer in Cameroon and Sales Rep in Milwaukee. When not working or tinkering, I like to cook, try new restaurants, hike, travel, read history books and work out. I can currently be found in Milwaukee, WI but am open to relocation.
Projects
Skills
- Coding - HTML, CSS, Javascript, jQuery, SASS, EJS, Node.js, Express.js, React.js, Redux, Socket.io, Python, Git
- Infrastructure - Linux, Bash, Windows, Middleware Technologies, Monitoring Technologies, MongoDB, Automation
- DevOps - Puppet, Ansible, Jenkins
- Products - Google Cloud Platform, MicroStrategy, Informatica, SAS, Websphere MQ, Weblogic, Tibco Suite, Ayehu
- Process - LEAN, Mentoring, Team Building, Road Mapping, Scrum, Technical Writing, Change Management, ITSM
- Certifications - PMP, CSM, CSPO, ITILv3
- Superpowers - Spelling, Random Fact Retention
Experience
- Technical - Helpdesk, Middleware Engineer, Production Engineering, Sr. Middleware Engineer, Freelance Developer, Product Owner, Technical Writer
- Managerial - Project Mgmt, Technology Mgmt, Service Delivery Mgmt, IT Ops Mgmt, MSP Governance
- Past Lives - Lab Researcher, Middle School Teacher, Peace Corps Volunteer, Grant Writer, GED Tutor, Radio DJ, Sales
- Education - Bachelor's Geology & Geophysics, MBA


{% extends "base.html" %} {% load i18n %} {% block mainmenu %}{% include "main/mainmenu.html" with section='projects' %}{% endblock %} {% block content %}
{% blocktrans with object=object.name %}Are you sure you want to delete Note No "{{ object.pd }}"?{% endblocktrans %}
{% trans "Note is" %}:{{ object.text|safe }}


§101-17 Different properties in one action. All property necessary for any public use may be united in one action. [L 1896, c 45, §10; RL 1945, pt of §310; RL 1955, §8-15; HRS §101-17]


Thanks for purchasing the Quebec - Magazine, News & Blogging PSD Template.
The PSD file is setup at 1600px width RGB
1170px grid system with 12 columns used.
Download file includes 14 layered PSD files. Template is easy to Change and Customize.
The PSD file is very well organised, with groups and layers named appropriately.
Main Free fonts used in the design are:
Montserrat - https://www.google.com/fonts/specimen/Montserrat
Open Sans - https://www.google.com/fonts/specimen/Open+Sans
Other Free fonts used in the design are:
Sinkin Sans (for logo) - https://www.fontsquirrel.com/fonts/sinkin-sans
Raleway (for logo) - https://www.google.com/fonts/specimen/Raleway
Mr Bedfort - https://www.google.com/fonts/specimen/Mr+Bedfort
All texts are editable.
Don't forget to download and install fonts to your computer to edit fonts.
Any color can be changed easily. Only double click on shape layers colors and change any color.
So thanks again for your support, its greatly appreciated.
If you need any assistance, just contact us via our themeforest page.
We also love feedback on how we can improve our works for you guys!


Income Tax Credential Manager
Paste
Multiple Client [Import / Export]
Copy to Excel
Single Client [Add / Edit / Delete]
Save
New
Cancel
Extension by:
erpcloudanalysis.in


Copyright © 2019, 2020, 2021 Pavel Tisnovsky
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Generator of random payload for testing REST API, message consumers, test frameworks etc.
import string
import random
Generator of random payload for testing API.
class RandomPayloadGenerator:
Initialize the random payload generator.
def __init__(self):
Parameters that affect payload generator behaviour.
self.iteration_deep = 0
self.max_iteration_deep = 2
self.max_dict_key_length = 10
self.max_string_length = 20
Let’s be strict which characters should be used as keys in generated dictionaries.
self.dict_key_characters = string.ascii_lowercase + string.ascii_uppercase + "_"
Dtto for string contents.
self.string_value_characters = (string.ascii_lowercase + string.ascii_uppercase +
"_" + string.punctuation + " ")
Generate random string of length=n.
def generate_random_string(self, n, uppercase=False, punctuations=False):
String prefix has limited character range.
prefix = random.choice(string.ascii_lowercase)
The rest of string is more relaxed and the set of allowed characters is configurable.
mix = string.ascii_lowercase + string.digits
if uppercase:
mix += string.ascii_uppercase
if punctuations:
mix += string.punctuation
suffix = ''.join(random.choice(mix) for _ in range(n - 1))
return prefix + suffix
Generate a string key to be used in dictionary.
def generate_random_key_for_dict(self, data):
existing_keys = data.keys()
Try to generate new key which needs to be unique, i.e. it can not be already contained in set of keys.
while True:
new_key = self.generate_random_string(10)
if new_key not in existing_keys:
return new_key
Generate list filled in with random values.
def generate_random_list(self, n):
Generate random list which is to be heterogenous - it’s items can have (almost) any data type.
return [self.generate_random_payload((int, str, float, bool, list, dict)) for i in range(n)]
Generate dictionary filled in with random values.
def generate_random_dict(self, n):
Generate set of random keys and list of random values. Set and list should have the same number of items. Then construct dictionary by zipping these two data structures.
dict_content = (int, str, list, dict)
return {self.generate_random_string(10): self.generate_random_payload(dict_content)
for i in range(n)}
Generate list filled in with random strings.
def generate_random_list_or_string(self):
List are recursive structure that can contain other lists or dictionaries. So we need to check if we already reached recursion limit or not.
if self.iteration_deep < self.max_iteration_deep:
self.iteration_deep += 1
value = self.generate_random_list(5)
self.iteration_deep -= 1
else:
value = self.generate_random_value(str)
return value
Generate dict filled in with random strings.
def generate_random_dict_or_string(self):
Dictionaries are recursive structure that can contain other lists or dictionaries. So we need to check if we already reached recursion limit or not.
if self.iteration_deep < self.max_iteration_deep:
self.iteration_deep += 1
value = self.generate_random_dict(5)
self.iteration_deep -= 1
else:
value = self.generate_random_value(str)
return value
Generate one random value of given type.
def generate_random_value(self, type):
Create generators for all possible data types. Each generator is able to generate random values of given data type.
generators = {
str: lambda: self.generate_random_string(20, uppercase=True, punctuations=True),
int: lambda: random.randrange(100000),
float: lambda: random.random() * 100000.0,
bool: lambda: bool(random.getrandbits(1)),
list: lambda: self.generate_random_list_or_string(),
dict: lambda: self.generate_random_dict_or_string()
}
Select the generator specified by type
argument.
generator = generators[type]
And simply return it.
return generator()
Generate random payload with possibly restricted data types.
def generate_random_payload(self, restrict_types=None):
Types can be restricted by user during initialization of this class. If types are not restricted, we use the default set - strings, integers, floats, lists (recursive), dictionary (recursive), and booleans.
if restrict_types:
types = restrict_types
else:
types = (str, int, float, list, dict, bool)
selected_type = random.choice(types)
return self.generate_random_value(selected_type)


{% for short, full in ["Sensors","/settings/sensors"],
["Charts","/settings/charts"],
["Types","/settings/types"],
["Map","/settings/map/settings"],
["Users","/settings/users"],
["Mail","/settings/mail"],
["Devices","/settings/devices/drivers"],
["Nettemp","/settings/nettemp"],
["Node","/settings/node"],
["DB","/settings/db"],
%}
{% if geturl in full %}


Get information about your power devices using UPower and DBus.
Requirements
In addition to the requirements specified in the rockspec file, you need UPower and DBus (usually both are present in modern GNU/Linux systems). Note that you may need permissions to access the UPower DBus interface.
Installation
Luarocks
This module can be installed with Luarocks by running
luarocks install upower_dbus
Use the --local
option in luarocks
if you don't want or can't install it system-wide.
NixOS
If you are on NixOS, you can install this package from nix-stefano-m-overlays.
Example
This module exposes the following
- Manager singleton, containing its own properties and the
devices
array. - enums table containing the UPower enumerations as arrays of strings.
Device
constructor, although it's advised to use the Manager to get the devices rather then building them by hand.
local GLib = require("lgi").GLib local ctx = GLib.MainLoop():get_context() local upower = require("upower_dbus") -- What version of UPower is in use? upower.Manager.DaemonVersion -- Are we using a battery? upower.Manager.OnBattery -- Print all fields of the first device found for k, v in pairs(upower.Manager.devices[1]) do print(k, v) end -- Enumerate the Device Types known by UPower for _, v in ipairs(upower.enums.DeviceType) do print(v) end -- Say that the first device is a battery battery = upower.Manager.devices[1] print(battery.Percentage) -- may print 100.0 -- Update the devices in case something changed ctx:iteration() -- The battery discharged a bit battery.Percentage -- may print 99.0


Get the holiday you want, without spending hours researching
Our supplier relationships ensure you get access to the best possible rates
Add special requests, activities and events to make your holiday truly unique
Well, 4.9/5, but nobody’s perfect right?
Your money is 100% ATOL protected, just in case
Our experienced planners know all the ins and outs so you know you’ve got the best trip possible
Available on WhatsApp and Messenger to cover any questions you have before, during and after your trip
Our professional planners organise everything you need for the perfect trip


-ac_algo=verushash11
This is VerusHash version 1.1, it is the same as VerusHash 1, but there are no working FPGA or GPU miners for it. VerusHash 1, should also work with this.
To get this to work, I used 10,000 coins, split 20 utxo per segid, with variance of 20%. using 60% PoS and no block reward. The coins were distributed at block 2, but this is less important as its staking with a negative diff at the start, and basically every utxo is eligible..The first 100 blocks take a few secon...


Cereals
{% for cereal in cereals %}
{% include 'cereal/single_cereal.html' with cereal=cereal %}
{% endfor %}
Product categories:
{# Show all
#} {# Low in sugar
#} {# Sugary
#} {# Vegan#}
#} {# Low in sugar
#} {# Sugary
#} {# Vegan#}
Sort by:


Recent print jobs:
Title
Status
Time
Number of pages
Printer
Settings
Name
URI
Source
Color
Duplex
Paper width
Paper height
Copies


Stereotype Threat
Living In Your Own Shadow
July 26, 2015
Disclaimer: This is a sensitive topic to many, including myself.
The Civil Rights Act was passed 51 years ago. Think about that for a second. That was within many of our (or our parents) lifetimes. That fact simply astounds me.
I think about my grandmother, one of the strongest people I know. She, an African American woman, raised three kids as a single mother in the Jim Crow south. Yet, we can sit down together now, any place in the world, and experience life as if that burden has been lifted.
I live a life of such privilege compared to my parents; and compared to my grandmother… I can’t even fathom. My parents marriage would not have even been legal, and I, a product of our changing law, would not have existed. To grow up with these burdens and excel in a crowd of people who have experienced these freedoms since inception is quite the task.
Growing up, I was always the only ‘black’ kid in the class. I was never recognized as such. I pretty much went to the same school with the same group of people for thirteen years. I was however cast for many of minority roles in school plays and performances, including a 7 year old’s rendition of Crispus Attucks, the first victim of the Boston Massacre. I only look back on it today and laugh, I never really paid much attention to it growing up.
So, to answer the question, “Have I ever faced discrimination?”, yes, I have. My parents raised me to essentially be ‘race-blind’ so it wasn’t until much later than I realized that I was being treated differently for reasons that I couldn’t explain. Why some people would treat me with hostility without provocation. Why I had to wear nicer looking clothes when I go for runs in my own neighborhood, to avoid the police being called for “suspicious activity”... again. Why I’m seen as different.
For most, young African Americans growing up today in the United States, the luxury of being able to hide or simply to be unaware of one’s racial identity, is impossible. It is a burden that must be carried, a burden carried by their parents, and their parents before them. It has an influence on every aspect of your life, no matter how minute it may seem.
In college, I wrote about the effects of affirmative action on young minorities. My conclusion, was rather controversial, in that, it may have created a deeper chasm in the perception of equality. It wasn’t that these students didn’t do well. In fact, they achieved higher marks than many of their peers, but when self selecting and asked to determine the strengths of their own abilities, many had doubts. This is the stereotype threat.
To those of a minority community, the stereotype threat is a very real and very tangible phenomenon. It is something that we all have experienced even if we aren’t consciously aware. It’s a certain sense of ourselves that we fear.
The emotion of this fear and anxiety has an effect on us. We see objects and expectations and morph them into a standard cultural view. If we don’t see ourselves fitting within that mold, our worries distract our mental thought process. If we are expected to underperform, we will underperform because our fears are having an overarching influence on the entirety of self. This is a really wordy way of describing “spotlight anxiety.” Another issue worth mentioning is a psychological state called “John Henryism” where the student holds rigidly to the idea that discrimination and disadvantage can be overcome with hard work and active persistence. In reality, it’s just not that easy.
At the present moment, there really isn’t a viable solution. I would argue actually that policies such as Affirmative Action have made the Stereotype Threat even greater. The most important factor is trust. Minorities, such as myself, need to trust in themselves and they need to trust that others will evaluate them without the basis of race. We may feel that it's "on us" to prove stereotypes wrong - but it's not. It's on us, to simply be true to ourselves and live our lives the best we can.


See: Description
| Interface | Description |
|---|---|
| HL7Reader |
Input source for HL7 messages.
|
| HL7Writer |
Implemented by classes whose instances are capable of sending out HL7 messages.
|
| Class | Description |
|---|---|
| HL7Field |
Represents one field in an HL7 message, possibly with repeats.
|
| HL7Message |
Represents an HL7 message.
|
| HL7Segment |
Represents one segment in an HL7 message.
|
| HL7SegmentList |
List of
HL7Segment objects that requires there to always be an initial MSH segment. |
| HL7Seps |
Container for the HL7 separator and escape characters for an HL7 message.
|
| HL7Util |
Utility methods.
|
| MSHSegment |
Represents an MSH segment.
|
| XMLConverter |
Converts
HL7Message s to and from XML. |
| Exception | Description |
|---|---|
| HL7ContentException |
Exception thrown to indicate invalid HL7 content was encountered.
|
hl7lib is a small Java library for parsing and manipulating version 2.x HL7 messages.
Features include:
Copyright © 2018. All rights reserved.


About
Portfolio
Contact
Hi, I'm Brenna.
Kansas City-based full stack developer excited to work with you.
Learn More >


Try-Angle!
Enter the side-measurements of a triangle below to calculate its type.
Side 1:
Side 2:
Side 3:
Totally Pythagorean!
Your measurements [
,
,
] are
.


@Unsplash:
Christopher Burns
Andre Benz
Alex Sheldon
Robbie Down
Toni Hukkanen
M.T ElGassier
Timur Romanov
Yohann LIBOT
Luiz Rogério Nunes
@freepik.com:
Lines vector created by freepik
--- layout: default robots: noindex ---
Christopher Burns
Andre Benz
Alex Sheldon
Robbie Down
Toni Hukkanen
M.T ElGassier
Timur Romanov
Yohann LIBOT
Luiz Rogério Nunes
Lines vector created by freepik


|
IntroductionToObjectify
Beginner's guide to Objectify-Appengine
Featured If you haven't read the Concepts yet, please do so first.
This will explain how to use Objectify to get, put, delete, and query data. You may find it helpful to open the Objectify javadocs while reading. These examples omit getter and setter methods for clarity. Create Your Entity ClassesThe first step is to define your entity class(es). Here is an example of a Car: public class Car { @Id Long id; String vin; int color; @Transient String doNotPersist; private Car() {} public Car(String vin, int color) { this.vin = vin; this.color = color; } } Things to note:
More information can be found in the AnnotationReference. Registering Your ClassesBefore you perform any datastore operations, you must register all your entity classes with the ObjectifyService . ObjectifyService.register(Car.class); ObjectifyService.register(Motorcycle.class); Objectify does not scan your classpath for @Entity classes. There are good reasons for and against this - see the discussion in BestPractices. If you are using Spring, see the objectify-appengine-spring project. Basic Operations: Get, Put, DeleteYou can obtain an Objectify interface from the ObjectifyService : Objectify ofy = ObjectifyService.begin(); // Simple create Car porsche = new Car("2FAST", "red"); ofy.put(porsche); assert porsche.id != null; // id was autogenerated // Get it back Car fetched1 = ofy.get(new Key<Car>(Car.class, porsche.id)); Car fetched2 = ofy.get(Car.class, porsche.id); // equivalent, more convenient assert areEqual(porsche, fetched1, fetched2); // Change some data and write it porsche.color = "blue"; ofy.put(porsche); // Delete it ofy.delete(porsche); The interface supports batch operations: Objectify ofy = ObjectifyService.begin(); // Create Car porsche = new Car("2FAST", "red"); Car unimog = new Car("2SLOW", "green"); Car tesla = new Car("2NEW", "blue"); ofy.put(tesla, unimog, porsche); //varargs; Car[] and Iterable<Car> also work // Get the data back List<Key<Car>> carKeys = new ArrayList<Key<Car>>(); carKeys.add(new Key<Car>(Car.class, porsche.id)); carKeys.add(new Key<Car>(Car.class, unimog.id)); carKeys.add(new Key<Car>(Car.class, tesla.id))); Map<Key<Car>, Car> fetched1 = ofy.get(carKeys); // More convenient shorthand, note the return type Map<Long, Car> fetched2 = ofy.get(Car.class, new Long[] { porsche.id, unimog.id, tesla.id }); // This works too Map<Long, Car> fetched3 = ofy.get(Car.class, Arrays.asList(porsche.id, unimog.id, tesla.id)); // Batch operations need not be homogenous: List<Key<? extends Vehicle>> vehKeys = new ArrayList<Key<? extends Vehicle>>(); vehKeys.add(new Key<Car>(Car.class, porsche.id)); vehKeys.add(new Key<Motorcycle>(Motorcycle.class, ktm.id)); Map<Key<Vehicle>, Vehicle> fetched4 = ofy.get(vehKeys); // Delete the data ofy.delete(fetched1.values()); // You can delete by key without loading the objects ofy.delete( new Key<Car>(Car.class, porsche.id), new Key<Car>(Car.class, unimog.id), new Key<Car>(Car.class, tesla.id)); QueryingHere are some examples of using queries. Objectify's Query mimics the human-friendly Query class from GAE/Python rather than the machine-friendly GAE/Java version. Objectify ofy = ObjectifyService.begin(); Car car = ofy.query(Car.class).filter("vin", "123456789").get(); // The Query itself is Iterable Query<Car> q = ofy.query(Car.class).filter("vin >", "123456789"); for (Car car: q) { System.out.println(car.toString()); } // You can query for just keys, which will return Key objects much more efficiently than fetching whole objects Iterable<Key<Car>> allKeys = ofy.query(Car.class).fetchKeys(); // Useful for deleting items ofy.delete(allKeys); Note that queries are closely related to indexes. See the appengine documentation for indexes for detail about what you can and cannot filter by. CursorsCursors let you take a "checkpoint" in a query result set, store the checkpoint elsewhere, and then resume from where you left off later. This is often used in combination with the Task Queue API to iterate through large datasets that cannot be processed in the 30s limit of a single request. The algorithm for this is roughly:
Cursor ExampleThe Iterable s provided by Objectify (including the Query object) are actually QueryResultIterable . This will produce a QueryResultIterator , which allows you to obtain a Cursor . This is an example of a servlet that will iterate through all the Car entities: public static final long LIMIT_MILLIS = 1000 * 25; // provide a little leeway @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { long startTime = System.currentTimeMillis(); Objectify ofy = ObjectifyService.begin(); Query<Car> query = ofy.query(Car.class); String cursorStr = request.getParameter("cursor"); if (cursorStr != null) query.startCursor(Cursor.fromWebSafeString(cursorStr)); QueryResultIterator<Car> iterator = query.iterator(); while (iterator.hasNext()) { Car car = iterator.next(); ... // process car if (System.currentTimeMillis() - startTime > LIMIT_MILLIS) { Cursor cursor = iterator.getStartCursor(); Queue queue = QueueFactory.getDefaultQueue(); queue.add(url("/pathToThisServlet").param("cursor", cursor.toWebSafeString())); break; } } } Asynchronous CallsThe GAE's low-level datastore API supports parallel asynchronous operations. GAE's model of asynchrony does not follow Javascript's "pass in a callback function" model; rather, when you make an asynchronous call, you get back a reference to the pending operation. You can create multiple references which will execute in parallel, however, any request to fetch a concrete result will block until the result is available. This is better explained by example. Asynchronous QueriesAll queries are now asynchronous by default. The "reference" to a query is the Iterator object. For example, these two queries are executed in parallel: Iterator<Fruit> fruitIt = ofy.query(Fruit.class).filter("color", "red").iterator(); Iterator<Animal> animalIt = ofy.query(Animal.class).filter("hair", "short").iterator(); // both queries are executing in the backend while (fruitIt.hasNext()) { // hasNext() blocks until query results are available ... process fruits } Create multiple Iterator s, then execute over the iterators. Asynchronous get()/put()/delete()NOTE: This requires Objectify v3.x NOTE: If you use Objectify's global memcache with asynchronous operations, you MUST install the com.googlecode.objectify.cache.AsyncCacheFilter. If you do not, your cache will not properly synchronize with the datastore. This is a workaround for a limitation of the GAE SDK; please star this issue. Queries require no special interface to parallelize requests because the Iterator interface acts as a convenience reference to a pending operation. However, get() , put() , and delete() return concrete results. The GAE low-level API provides a parallel set of methods that return results in a layer of indrection, the java.util.concurrent.Future<?> class. However, Future<?> is cumbersome to use because it wraps and rethrows all exceptions as checked exceptions. Objectify provides a similar set of parallel methods, but they return Result<?> -- just like Future<?> but with sane exception handling behavior. Here are the salient parts of Objectify's API: public interface Result<T> { T get(); Future<T> getFuture(); } public interface Objectify { ... public AsyncObjectify async(); } public interface AsyncObjectify { ... <T> Result<T> get(Key<? extends T> key); <T> Result<T> get(Class<? extends T> clazz, long id); ... <T> Result<Key<T>> put(T obj); ... Result<Void> delete(Object... keysOrEntities); ... } You get the picture. The AsyncObjectify interface has methods that parallel the synchronous Objectify methods, but return Result<?> instead. You can issue multiple parallel requests like this: Objectify ofy = ObjectifyService.begin(); Result<Fruit> fruit = ofy.async().get(Fruit.class, "apple"); Result<Map<Long, Animal>> animals = ofy.async().get(Animal.class, listOfAnimalIds); Result<Key<Fruit>> key = ofy.async().put(new Fruit("orange")); Iterator<City> citiesIterator = ofy.query(City.class).filter("population >", 1000).iterator(); // All requests are executing in parallel String color = fruit.get().getColor(); // calling Result<?>.get() blocks until request is complete Considerations of Asynchronous RequestsParallel requests must be used carefully:
Optimizing StorageIndexes are necessary for queries, but they are very expensive to create and update. It costs, in api_cpu_ms, about 48ms to put() a single entity with no indexes. Each standard indexed field adds 17ms to this number. The indexes are written in parallel, so they do not add real-world time... but you'll see the real-world cost on your bill at the end of the week! Indexes also consume a significant amount of storage space - sometimes many times the amount of original data. @Indexed and @UnindexedBy default, all entity fields except Text and Blob are indexed. You can control this behavior with @Indexed and @Unindexed annotations on fields or classes: // By default, fields are indexed public class Car { @Id Long id; String vin; @Unindexed String color; } // This has exactly the same effect @Unindexed public class Car { @Id Long id; @Indexed String vin; String color; } Partial IndexesOften you only need to query on a particular subset of values for a field. If these represent a small percentage of your entities, why index all the rest? Some examples:
Objectify gives developers the ability to define arbitrary conditions for any field. You can create your own If classes or use one of the provided ones: public class Person { @Id Long id; String name; // The admin field is only indexed when it is true @Unindexed(IfFalse.class) boolean admin; // You can provide multiple conditions, any of which will satisfy @Unindexed({IfNull.class, IfEmptyString.class}) String title; } These If conditions work with both @Indexed and @Unindexed on fields. You cannot specify If conditions on the class-level annotations. Check the javadocs for available classes. Here are some basics to start: IfNull.class, IfFalse.class, IfTrue.class, IfZero.class, IfEmptyString.class, IfDefault.class IfDefault.classIfDefault.class is special. It tests true when the field value is whatever the default value is when you construct an object of your class. For example: public class Account { @Id Long id; // Only indexed when status is something other than INACTIVE @Unindexed(IfDefault.class) StatusType status = StatusType.INACTIVE; } Note that you can initialize field values inline (as above) or in your no-arg constructor; either will work. Custom ConditionsYou can easily create your own custom conditions by extending ValueIf or PojoIf . ValueIf is a simple test of a field value. For example: public static class IfGREEN extends ValueIf<Color> { @Override public boolean matches(Color value) { return color == Color.GREEN; } } public class Car { @Id Long id; @Unindexed(IfGREEN.class) Color color; } You can use PojoIf to examine other fields to determine whether or not to index! This example is inspired by the example in the Partial Index Wikipedia page, and will use a static inner class for convenience: // We are modeling: create index partial_salary on employee(age) where salary > 2100; @Unindexed public class Employee { static class SalaryCheck extends PojoIf<Employee> { @Override public boolean matches(Employee pojo) { return pojo.salary > 2100; } } @Id Long id; @Index(SalaryCheck.class) int age; int salary; } You can examine the source code of the If classes to see how to construct your own. Most are one or two lines of code. @NotSavedIf you would like to exclude a field value from being stored, you can use the @NotSaved annotation. The field will not be saved and will not occupy any space in the datastore. This works well in concert with IfDefault.class : @Unindexed public class Player { @Id Long id; @Indexed String name; @NotSaved(IfDefault.class) RankType rank = RankType.PRIVATE; @NotSaved(IfDefault.class) int health = 100; @NotSaved(IfDefault.class) Date retired = null; } Note that @NotSaved values are not stored at all, so they aren't indexed and you can't query for them. PolymorphismNOTE: This requires Objectify v3.x Objectify lets you define a polymorphic hierarchy of related entity classes, and then load and query them without knowing the specific subtype. Here are some examples: @Entity public class Animal { @Id Long id; String name; } @Subclass public class Mammal extends Animal { boolean longHair; } @Subclass public class Cat extends Mammal { boolean hypoallergenic; } Things to note:
In a polymorphic hierarchy, you can get() and query() without knowing the actual type: Objectify ofy = ObjectifyService.begin(); Animal annie = new Animal(); annie.name = "Annie"; ofy.put(annie); Mammal mam = new Mammal(); mam.name = "Mam"; m.longHair = true; ofy.put(mam); Cat nyan = new Cat(); nyan.name = "Nyan"; nyan.longHair = true; nyan.hypoallergenic = true; ofy.put(nyan); // This will return the Cat Animal fetched = ofy.get(Animal.class, nyan.id); // This query will produce three objects, the Animal, Mammal, and Cat Query<Animal> all = ofy.query(Animal.class); // This query will produce the Mammal and Cat Query<Mammal> mammals = ofy.query(Mammal.class); Implementation ConsiderationsWhen you store a polymorphic entity subclass (but not an instance of the base type), your entity is stored with two additional, hidden synthetic properties:
The indexed property is what allows polymorphic queries to work. It also means that you cannot simply change your hierarchy arbitrarily and expect queries to continue to work as expected - you may need to re-put() all affected entities to rewrite the indexed field. There are two ways you can affect this:
RelationshipsA relationship is simply a Key stored as a field in an entity. Objectify does not provide "managed" relationships in the way that JDO or JPA does; this is both a blessing and a curse. However, because Key is a generified class, it carries type information about what it points to. There are fundamentally three different kinds of relationships in Objectify: Parent RelationshipAn entity can have a single Key field annotated with @Parent : public class Person { @Id Long id; String name; } public class Car { @Id Long id; @Parent Key<Person> owner; String color; } Each Car entity is part of the parent owner's entity group and both can be accessed within a single transaction. When loading the child entity, the parent Key must be used to generate the child's key: Objectify ofy = ObjectifyService.begin(); Key<Person> owner = new Key<Person>(Person.class, somePersonId); Car someCar = ofy.get(new Key<Car>(owner, Car.class, someCarId)); Note that this is an inappropriate use of the @Parent entity; if a car were to be sold to a new owner, you would need to delete the Car and create a new one. It is often better to use Single Value Relationships even when there is a conceptual parent-child or owner-object relationship; in that case you could simply change the parent. If you get() an entity, change the @Parent key field, and put() the entity, you will create a new entity. The old entity (with the old parent) will still exist. You cannot simply change the value of a @Parent key field. This is a fundamental aspect of the appengine datastore; @Parent values form part of an entity's identity. Single-Value RelationshipIn Objectify (and the underlying datastore), Keys are just properties like any other value. Whether it defines a one-to-one relationship or a many-to-one relationship is up to you. Furthermore, a Key field could refer to any type of entity class. One To OneThe simplest type of single-value relationship is one-to-one. public class Person { @Id String name; Key<Person> significantOther; } Objectify ofy = ObjectifyService.begin(); Person bob = ofy.get(Person, "bob"); Person bobswife = ofy.get(bob.significantOther); Many To OneA Key field can represent a many-to-one relationship. public class Employee { @Id String name; Key<Employee> manager; } Objectify ofy = ObjectifyService.begin(); Employee bob = ofy.get(Employee.class, "bob"); Employee fred = ofy.get(bob.manager); It looks identical to the one-to-one relationship because it is. The only difference is a conceptual one. What if you want to know all the employees managed by Fred? You use a query. Objectify ofy = ObjectifyService.begin(); Iterable<Employee> subordinates = ofy.query(Employee.class).filter("manager", fred); Multi-Value RelationshipThe datastore can persist simple object types (Long, String, etc) and collections of simple object types. It can also persist collections (and arrays) of Keys . This creates an alternative approach for defining one-to-many (and many-to-many) relationships. public class Employee { @Id String name; Key<Employee>[] subordinates; } This is sometimes useful, but should be used with caution for two reasons:
Because appengine stores an index entry for each value in the collection, it is possible to issue queries like this: Objectify ofy = ObjectifyService.begin(); // should contain Fred Iterable<Employee> managers = ofy.query(Employee.class).filter("subordinates", bob); The decision to use a Multi-Value Relationship will depend heavily upon the shape of your data and the queries you intend to perform. TransactionsWorking with transactions is almost the same as working with Objectify normally. Objectify ofy = ObjectifyService.beginTransaction(); // instead of begin() try { ClubMembers cm = ofy.get(ClubMembers.class, "k123"); cm.incrementByOne(); ofy.put(cm); ofy.getTxn().commit(); } finally { if (ofy.getTxn().isActive()) ofy.getTxn().rollback(); } All data manipulation methods are the same as you would normally use. Since entities in Objectify really are Plain Old Java Objects and transactions are tied to the Objectify object, it's easy to work with data inside and outside of transactions (or multiple transactions running in parallel!): Objectify ofyNoTxn = ObjectifyService.begin(); Objectify ofyTxn = ObjectifyService.beginTransaction(); try { Foo f = ofyTxn.get(Foo.class, "k123"); Bar b = ofyNoTxn.get(f.barKey); if (b.wantsUp()) f.increment(); else f.decrement(); ofyTxn.put(f); ofyTxn.getTxn().commit(); } finally { if (ofyTxn.getTxn().isActive()) ofyTxn.getTxn().rollback(); } You can interleave multiple transactions or nontransactional actions as long as you obey the the cardinal rule: Within a single transaction (defined by an Objectify object created with beginTransaction()), you may only read or write from a single entity group. Yes, this means you can get() objects from a transactional Objectify and put() to a nontrasactional Objectify. Lifecycle CallbacksObjectify supports two of the JPA lifecycle callbacks: @PostLoad and @PrePersist . If you mark methods on your POJO entity class (or any superclasses) with these annotations, they will be called:
You can have any number of these callback methods in your POJO entity class or its superclasses. They will be called in order of declaration, with superclass methods called first. Two parameter types are allowed:
class MyEntityBase { String foo; String lowercaseFoo; @PrePersist void maintainCaseInsensitiveSearchField() { this.lowercaseFoo = foo.toLowerCase(); } } class MyEntity extends MyEntityBase { @Id Long id; @Transient Date loaded; @PostLoad void trackLoadedDate() { this.loaded = new Date(); } List<String> stuff = new ArrayList<String>(); int stuffSize; // indexed so we can query by list size @PrePersist void maintainStuffSize() { this.stuffSize = stuff.size(); } @PrePersist void doMore(Objectify ofy, Entity ent) { ... } } Caution: You can't update @Id or @Parent fields in a @PrePersist callback; by this time, the low-level Entity has already been constructed with a Key so it can be passed in to the callback as an optional parameter. You can, however, update any other fields and the new values will be persisted. Migrating SchemasIt is a rare schema that remains unchanged through the life of an application. BigTable's schemaless nature is both a blessing and a curse - you can easily change schemas object-by-object on the fly, but you can't easily do it in bulk with an ALTER TABLE. Objectify provides some simple but powerful tools to help with common types of structure change. The basic process of schema migration using Objectify looks like this:
Here are some common cases. Adding Or Removing FieldsThis is the easiest - just do it! You can add any fields to your classes; if there is no data in the datastore associated with that field, it will be left at its default value when the class is initialized. This is worlds better than the exceptions you often get from JDO. You can remove a field from your classes. The data in the datastore will be ignored when the entity is get(). When you next put() the entity, the entity will be saved without this field. Renaming A FieldLet's say you have an entity that looks like this: public class Person { @Id Long id; String name; } You're doing some refactoring and you want to rename the field "name" to "fullName". You can! public class Person { @Id Long id; @AlsoLoad("name") String fullName; } When a Person is get()ed, the fullName field will be loaded either the value of fullName or name. If both fields exist, an IllegalStateException will be thrown. When put(), only fullName will be written. Caveat: Queries do not know about the rename; if you filter by "fullName", you will only get entities that have been converted. You can still filter by "name" to get only the old ones. Transforming DataNow that you've migrated all of your data to the new Person format, let's say you now want to store separate first and last names instead of a single fullName field. Objectify can help: public class Person { @Id Long id; String firstName; String lastName; void importCruft(@AlsoLoad("fullName") String full) { String[] names = full.split(" "); this.firstName = names[0]; this.lastName = names[1]; } } You can specify @AlsoLoad on the parameter of any method that takes a single parameter. The parameter must be type-appropriate for what is in the datastore; you can pass Object and use reflection if you aren't sure. Process the data in whatever way you see fit. When the entity is put() again, it will only have firstName and lastName. Caution: Objectify has no way of knowing that the importCruft() method has loaded the firstName and lastName fields. If both fullName and firstName/lastName exist in the datastore, the results are undefined. Changing EnumsChanging enum values is just a special case of transforming data. Enums are actually stored as Strings (and actually, all fields can be converted to String automatically), so you can use an @AlsoLoad method to process the data. Let's say you wanted to delete the AQUA color and replace it with GREEN: public enum Color { RED, GREEN } // AQUA has been removed from code but it still exists in the datastore public class Car { @Id Long id; Color color; void importColor(@AlsoLoad("color") String colorStr) { if ("AQUA".equals(colorStr)) this.color = Color.GREEN; else this.color = Color.valueOf(colorStr); } } The @AlsoLoad method automatically overrides the loading of the Color field, but the Color field is what gets written on save. Note that you cannot have conflicting @AlsoLoad values on multiple methods. Moving FieldsChanging the structure of your entities is by far the most challenging kind of schema migration; perhaps you want to combine two entities into one, or perhaps you want to move an @Embedded field into a separate entity. There are many possible scenarios that require many different approaches. Your essential tools are:
Let's say you have some embedded address fields and you want to make them into a separate Address entity. You start with: public class Person { @Id Long id; String name; String street; String city; } You can take two general approaches, either of which can be appropriate depending on how you use the data. You can perform the transformation on save or on load. Here is how you do it on load: public class Address { @Id Long id; String street; String city; } public class Person { @Id Long id; String name; @NotSaved String street; @NotSaved String city; Key<Address> address; @PostLoad void onLoad(Objectify ofy) { if (this.street != null || this.city != null) { this.address = ofy.put(new Address(this.street, this.city)); ofy.put(this); } } } If changing the data on load is not right for your app, you can change it on save: public class Address { @Id Long id; String street; String city; } public class Person { @Id Long id; String name; @NotSaved String street; @NotSaved String city; Key<Address> address; @PrePersist void onSave(Objectify ofy) { if (this.street != null || this.city != null) { this.address = ofy.put(new Address(this.street, this.city)); } } } If you have an especially difficult transformation, post to the objectify-appengine google group. We're happy to help. @EmbeddedObjectify supports embedded classes and collections of embedded classes. This allows you to store structured data within a single POJO entity in a way that that remains queryable. With a few limitations, this can be an excellent replacement for storing JSON data. Embedded ClassesYou can nest objects to any arbitrary level. class LevelTwo { String bar; } class LevelOne { String foo; @Embedded LevelTwo two } class EntityWithEmbedded { @Id Long id; @Embedded LevelOne one; } Embedded Collections and ArraysYou can use @Embedded on collections or arrays: class EntityWithEmbeddedCollection { @Id Long id; @Embedded List<LevelOne> ones = new ArrayList<LevelOne>(); } Some things to keep in mind:
Indexing Embedded ClassesAs with normal entities, all fields within embedded classes are indexed by default. You can control this:
@Indexed class LevelTwo { @Indexed String gamma; String delta; } @Indexed class LevelOne { String beta; @Unindexed @Embedded LevelTwo two; } @Unindexed class EntityWithComplicatedIndexing { @Id Long id; @Embedded LevelOne one; String alpha; } If you persist one of these EntityWithComplicatedIndexing objects, you will find:
Note that one.two.delta is not indexed; the annotation on LevelOne.two overrides LevelTwo 's class default. Querying By Embedded FieldsFor any indexed field, you can query like this: Objectify ofy = ObjectifyService.begin(); ofy.query(EntityWithEmbedded.class).filter("one.two.bar =", "findthis"); Filtering works for embedded collections just as it does for normal collections: Objectify ofy = ObjectifyService.begin(); ofy.query(EntityWithEmbeddedCollection.class).filter("ones.two.bar =", "findthis"); Entity RepresentationYou may wish to know how @Embedded fields are persisted so that you an access them through the Low-Level API. Here is an example: class LevelTwo { String bar; } class LevelOne { String foo; @Embedded LevelTwo two } class EntityWithEmbedded { @Id Long id; @Embedded LevelOne one; } EntityWithEmbedded ent = new EntityWithEmbedded(); ent.one = new LevelOne(); ent.one.foo = "Foo Value"; ent.one.two = new LevelTwo(); ent.one.two.bar = "Bar Value"; Objectify ofy = ObjectifyService.begin(); ofy.put(ent); This will produce an entity that contains:
You can see why query filters work the way they do. For @Embedded collections and arrays, the storage mechanism is more complicated: EntityWithEmbeddedCollection ent = new EntityWithEmbeddedCollection(); for (int i=1; i<=4; i++) { LevelOne one = new LevelOne(); one.foo = "foo" + i; one.two = new LevelTwo(); one.two.bar = "bar" + i; ent.ones.add(one); } Objectify ofy = ObjectifyService.begin(); ofy.put(ent); This will produce an entity that contains:
This is what the entity would look like if the second and third values in the ones collection were null :
The synthetic ^null property only exists if the collection contains nulls. It is never indexed. Schema MigrationThe @AlsoLoad annotation can be used on any field, including @Embedded fields. For example, this class will safely read in instances previously saved with EntityWithEmbeddedCollection : class Together { @AlsoLoad("foo") String partOne; @AlsoLoad("two.bar") String partTwo; } class NextEntity { @Id Long id; @AlsoLoad("ones") @Embedded List<Together> stuff = new ArrayList<Together>(); } @AlsoLoad methods work as well, however you cannot use @Embedded on method parameters. Embedded MapsThere is one additional special behavior of @Embedded : If you put it on a Map keyed by String, this will allow you to create "expando" dynamic properties. For example: class MyEntity { @Id Long id; @Embedded Map<String, String> stuff = new HashMap<String, String>(); } MyEntity ent = new MyEntity(); ent.stuff.put("foo", "fooValue"); ent.stuff.put("bar", "barValue"); ofy.put(ent); ...will produce this entity structure:
If the Map field is indexed, you can filter by "stuff.foo" or "stuff.bar". Note that while the Map value can be of any type, the Map key must be String. @SerializedAn alternative to @Embedded is to use @Serialized , which will let you store nearly any Java object graph. class EntityWithSerialized { @Id Long id; @Serialized Map<Object, Object> stuff; } There are some limitations:
However, there are significant benefits to storing data this way:
You are strongly advised to place serialVersionUID on all classes that you intend to store as @Serialized . Without this, any change to your classes will prevent stored objects from being deserialized on fetch. Example: class SomeStuff implements Serializable { /** start with 1 for all classes */ private static final long serialVersionUID = 1L; String foo; Object bar; } class EntityWithSerialized { @Id Long id; @Serialized SomeStuff stuff; } CachingObjectify provides two different types of caches:
You must explicitly decide to use these caches. If you do nothing, every get() will read through to the datastore. Session CacheThe session cache associates your entity object instances with a specific Objectify instance. You must explicitly enable it by passing in ObjectifyOpts to the ObjectifyService.begin() method: ObjectifyOpts opts = new ObjectifyOpts().setSessionCache(true); Objectify ofy = ObjectifyService.begin(opts); Note:
Global CacheObjectify can cache your entity data globally in the appengine memcache service for improved read performance. This cache is shared by all running instances of your application. The global cache is enabled by default, however you must still annotate your entity classes with @Cached to make them cacheable: @Cached public class MyEntity { @Id Long id; ... } That's it! Objectify will utilize the memcache service to reduce read load on the datastore. What you should know about the global cache:
Warning: Objectify's global cache support prior to v3.1 suffered from synchronization problems under contention. Do not use it for entities which require transactional integrity, and you are strongly advised to apply an expiration period to all cache values. The cache in 3.1 has been rewritten from scratch to provide near-transactional consistency with the datastore. Only DeadlineExceededException should be able to produce synchronization problems. For more commentary about the new v3.1 cache, see MemcacheStandalone. ExampleAndrew Glover wrote an excellent article for IBM developerWorks: Twitter Mining with Objectify-Appengine, part 1 and part 2. Now, read the BestPractices. |
||||||||||||||||||||||||||


1 write to _delaySpecified
Microsoft.PowerShell.Commands.Management (1)
commands\management\Computer.cs (1)
289
_delaySpecified
= true;
1 reference to _delaySpecified
Microsoft.PowerShell.Commands.Management (1)
commands\management\Computer.cs (1)
793
if ((_timeoutSpecified || _waitForSpecified ||
_delaySpecified
) && !Wait)


2016-09-06: v1.3 — Added _setStyleAttr_
method. PowerCSS can now change styles on-the-fly after a
stylesheet is written. Here is an example:
// Rewrite an attribute for a style. // This will update all elements with this class in the DOM immediately // pcss._setStyleAttr_({ _selector_str_ : '.xhi-_svg_ellipse_', _attr_key_ : 'rx', _attr_val_ : x_radius_px });
If you have just a few style changes, _setStyleAttr_
can be more efficient or easier to implement. Other times, double-buffer
stylesheet flipping will be much faster or easier. The easiest solution
is usually the best; however, if performance is critical you should
profile both approaches in you applicaiton to help you determine which
makes the most sense.
PowerCSS v1.3 is backward compatible with all versions since 1.0.
PowerCSS is a JavaScript library that create run-time CSS optimized for performance. Watch this presentation for an an overview of CSS double-buffering. PowerCSS is all-new code with many additional capabilities and optimizations.
The project is hosted on GitHub and is available as an
npm package.
It can be installed using npm install powercss
. After
installation, if you'd like to run the regression tests, enter the
following into a Bash shell:
cd node_modules/powercss npm install npm test
This page is styled using PowerCSS. I know, dog-food much? Anyway, click at the top right to change the palette or cascade at any time. It looks good on a phone as well as a desktop. There are 5 examples discussed in the documentation. These include:
Traditional CSS is created well before it is used,
not when the application needs it. While preprocessors such as
{less}
, Stylus
, or Sass
can help
reduce some of the tedium of creating styling variations, they complicate the
tool chain and can hinder design iterations.
PowerCSS is designed and optimized for run-time creation and application of CSS. It can be responsive to the user's environment to a level not possible with preprocessors. Even better, there is no additional compile step to hinder design iteration. Styling can be infinitely adjust based on almost any real-time data available to an application such as ambient temperature, device orientation, ambient light, GPS location, heart rate, or time of day. Static CSS can't compete with this flexibility.
PowerCSS has not only achieved its primary goal, but it is often better than static CSS in many other respects as well. It provides a simple and familiar API where experienced CSS authors can use their existing skills to be up and running in minutes. When compressed, a PowerCSS solution can download and render faster, and it can speed up some CSS operations by 10x or more. What's not to like?
2016-09-03: v1.2 — External symbol
definitions. PowerCSS can now use custom symbol maps.
The pcss._initModule_({...})
method has two additional
options: _css_key_map_
and _css_val_map_
.
PowerCSS v1.2 is fully backward compatible with v1.1
and v1.0 as long as we add the pcss.cfg.js
source file:
page like so:
<!-- v1.1 --> <script>../dist/pcss.js</script> <!-- v1.2+ --> <script>../dist/pcss.js</script> <script>../dist/pcss.cfg.js</script>
No changes to client code is necessary, as PowerCSS checks and
includes the default CSS key and value maps from pcss.cfg.js
file if they are not otherwise provided in the pcss._initModule_({...})
call. The API remains fully backward compatible with 1.0.
2016-03-25: v1.1 — Conditional expressions.
PowerCSS now supports arbitrary-depth conditional CSS and media
queries. See the Conditional Expressions
section of updated
documentation. We added 22 regression tests to
ensure quality and reliability.
2016-03-25: v1.0 — First production release. We have a strong set of regression tests and has been used in a number of production and production-intent projects with good results. Expect per-cascade double-buffered stylesheets in the 1.2.x release.
2016-03-20: v0.7.1 — Rewrote the rule-map
resolver. It now processes arbitrarily complex data
structures. This allows mixin maps with any nesting of
alternate-lists, concatenations, and symbol-lookups. The isolated code
is found in test/resolve.js
.
2016-03-09: v0.6.6 — Fixed bugs found from
testing. Also added process events: _pcss_merged_
,
_pcss_prepared_
, and _pcss_used_
.
The event object provides the ID of the cascade
affected.
2016-03-07: v0.6.2 — Added automated regression tests. Production deployments underway.
2016-03-04: v0.5.20 — Added key benefits section .
2016-02-24: v0.5.16 — Completed 1.x API design. Also added double-buffering and theming demo to the home page.
2016-02-24: v0.5.0 — First beta announcment. PowerCss was nearly feature complete on this date and considered Beta. The API was overhauled, cutting the number of methods in half while adding many capabilities. Documentation and examples were expanded and updated. The cookbook section was added.
If you want your voice heard, join the project! PowerCSS is hosted on GitHub and is also distrubted as an npm package. The best way to contribute is to report issues on Github. Pull request are strongly encoouraged