Radio Buttons
First Option default
Second Option primary
Fourth Option danger
Fifth Option warning
Sixth Option info
Checkbox Buttons
First Option default
Second Option primary
Third Option success
Fourth Option danger
Fifth Option warning
Sixth Option info


How to set up a WordPress Backup Plugin
Backups are so important
Part of a series of posts from my days of self employment.
This week I’m going to cover how to set up a WordPress backup plugin. Think of this as a form of disaster insurance. Nobody knows more than you just how important your website is to the health of your business. It’s just super important to make sure that you have a proper backup of your WordPress website; not just your files, but your database as well.
Meet BackWPup
Luckily this is a super easy thing to get going. There are tons of great options on the market. The one that I am going to cover today is called BackWPup, a free plugin from MarketPress. You can find the plugin here on the WordPress plugin directory. For this post I will be using the free version, but MarketPress also offers a premium version of the plugin that does lots of extra cool stuff.
Installation
Installation is super easy. Just go to your WP Admin page, select plugins, and add new. Search for BackWPup and the plugin will be the first in the list. Check out those stats, the plugin has 4 stars, with 240 reviews and at the time of this writing nearly 1.7 million downloads! That’s pretty impressive.
Configure Backup Jobs
Once you’ve installed and activated the plugin you’ll be directed to the landing page for the plugin. You will also notice that a new menu item for BackWPup has been added to your WordPress admin menu. The next thing that we want to do is to configure some backup tasks to run. Each backup task is called a job, in this blog post we are going to configure 2 jobs. We are going to configure a weekly full site back up, and a daily database backup.
Weekly Backup vs. Daily Backup
The weekly full site backup will be an all inclusive backup of our entire site. All our site files, themes, plugins, and database will be included in this back up. I run this task weekly because it generates a larger backup and takes more server resources to run. I find that the database backup is the most critical thing to keep backed up regularly. The database is also a much smaller file and it takes less resources to run the task. That’s why I am going to configure the database to backup daily.
The next thing to do it to add a new job. In the general tab of the BackWPup plugin, type in the name of your job as shown. I’ve named mine “Weekly Full Site Backup”. All of the default settings are fine for this page. The default settings are pretty robust and unless you have a specific need they should work pretty well for you.
Job Destination
[caption id=“attachment_834” align=“alignnone” width=“1349”] The backup to Dropbox option selected[/caption]
One thing that I am going to change on the general page is the Job Destination settings. I’m going to use the backup to Dropbox feature for this post but it’s just as easy to backup to Amazon S3. The option for “Backup to folder” will store the backups on your server. I don’t recommend this for the simple fact that your backups are now stored in the same location as your website. If something happens with your web host and the server is wiped out, you’ve now lost your sit and your backups.
It’s kind of like having a backup hard drive attached to your computer at home. It’s great to have backups, if something happens to your computer you are covered.
It’s a good idea to keep your backups in a separate location!
Go ahead and click save, then click on the schedule job tab. This is where we will tell the plugin when to run our back up job. The default is manual, which means you’ll need to remember to come here and run backups. We don’t want to do this, we want to set this up, let WordPress take care of it for us, and not have to worry about it.
[caption id=“attachment_836” align=“alignnone” width=“1349”] The default backup schedule tab[/caption]
If you click on the WP Cron radio button you’ll be able to set up a time for the job to run. I’m leaving mine at the default, which is 3:00 am on Sundays. I suggest choosing a time where you have minimal traffic on your site. Once you’ve set up your schedule, click save.
[caption id=“attachment_839” align=“alignnone” width=“1140”] The backup task set to run weekly[/caption]
Connect to Dropbox
The next thing to do is to configure the Dropbox settings. This is super easy. Go ahead and click on the “To:Dropbox” tab.
[caption id=“attachment_840” align=“alignnone” width=“1349”] The Dropbox settings page[/caption]
If you don’t have a Dropbox account head over to Dropbox.com and sign up for a free account. The free account offers 2GB of storage for free, which will be more than enough to back up most basic sites. If you’re a photographer you likely will have a much larger site, and will need more space. Dropbox offers 1 Terabyte of storage for around $10 per month, and unlimited storage for $15 dollars a month.
Once you have your Dropbox account set up go ahead and click on the “Get Dropbox auth code” button. You’re going to be directed to a Dropbox page which is going to ask you if it is okay for WordPress to interact with it. Click allow here, and use your mouse to copy the code that appears once you’ve clicked allow.
Head back over to your WordPress site and paste the Dropbox code into the auth field, as shown.
[caption id=“attachment_842” align=“alignnone” width=“1140”] Dropbox successfully authenticated![/caption]
Next, click save. If you’ve done everything correctly you should now see a success message as shown.
How many backups to keep?
Now we’re going to change the file deletion settings. All this is saying is, “Hey, how many copies of this backup do you want to keep?”. I’m going got set mine to 5, which will give me access to 5 weeks of backups. This means that, should disaster strike, I can roll my site back to any of the backs that were taken over the past 5 weeks. You can set this however you’d like, but realize that the more backups you keep, the more space you need. Go ahead and click save again.
[caption id=“attachment_843” align=“alignnone” width=“1140”] I set my file deletion setting to 5[/caption]
Run the backup!
With these settings configured I’m going to go ahead and run the back up. You can run the job by going to the Jobs section of the plugin or, there should be a link titled “Run Now” that appears on the page after you click save. Either one is fine.
Depending on the size of your site, this may take quite a while.  If your site is 3GB and you are trying to backup to a 2GB Dropbox account, the backup will fail.
Looks like the backup task ran successfully! Now it’s time to configure the daily database backup. I run database backups daily because the database file is just a fraction of the size of a full site backup. This task uses less server resources to run and requires less space to store.
Protect that database!
The database is also, arguably, the most important thing to keep backed up.  It contains all your posts, all your pages, and all your configurations. When a visitor comes to your WordPress site, it’s the database that tells WordPress what content to put together for them as they browse through your site.  This is why it’s super important to keep the database backed up, and protected.
Configure the job
The process for setting this task up is the same as the full site backup. The exceptions being that we will configure the general tab to just backup the database. Give the task a name, I’m using “Daily Database Backup” for mine.
In the Job Tasks section, uncheck everything but “Database Backup”, like shown. I’m going to choose to send my database backups to Dropbox as well, but in most cases you can also have the database backups sent to your email. If you’d like to do this go ahead and click the “Backup sent via email” checkbox, along with the Dropbox checkbox. Next, click save.
Schedule the job
Next click the Schedule tab and schedule your database back up to run daily. I’ve set mine up to run every day at 2am. Once you’ve configured the schedule, click save.
Authenticate with Dropbox again
If you are sending your database to Dropbox, head over to the Dropbox tab next. We need to authenticate with Dropbox for each backup job that we set up, so just follow the same steps that we went thorough earlier, when we authenticated our weekly backup.
Once you’ve done that, click save.
You’re done.
That’s it. If you’ve followed along you now not only know how to Install and configure a WordPress backup plugin, but you’ve also got 2 backup jobs setup to backup your entire site once a week, and your database once a day.
Important: Check with your host about their backup policies.
It’s important to mention that it might be a good idea to check with your web host about their backup policies. Running backups puts additional strain on a server. Also, if you do opt to keep your backups on your server then you’ll want to make sure you are mindful of your space. Even “unlimited” storage isn’t really unlimited, as your host will likely remind you if you’ve got 15 copies of a 10 gig website sitting on a shared hosting account.
I suggest reading this article, Beware of shared hosting and the storage of backups, by Richard Best. Richard runs a site called WP and Legal Stuff that covers, you guessed it, legal issues relevant to business owners running their own websites. It’s definitely a site to bookmark and follow.
Thanks for reading!
That does it for this week. I hope this walk through was helpful. As always, if you have any questions or suggestions please feel free to drop me a line or leave a comment.
Next week I’ll be covering how to take one of these backups and get a copy of your WordPress website running on your computer. This is a great way to safely test out new themes and plugins without having to change your live site.


This API has been deprecated.
Partners and customers using a deprecated API should contact SAP Concur and discuss moving to the latest versions.
Learn more in the API Lifecycle & Deprecation Policy.
Retrieves the full set of information for the report. Includes the Report Header, Entry, Attendee, Itemization and Allocation details.
This URI is returned in the Report-Full-Details-Url
element by the Expense Reports List v1.1 endpoint. The report key is the encrypted database key for the report.
GET https://www.concursolutions.com/api/expense/expensereport/v1.1/reportfulldetails/_{reportKey}_
This request will return a <ReportDetails>
parent element with an xmlns version attribute and the following child elements:
| Element | Description |
|---|---|
X-UserID |
The user ID of the report owner. |
ReportId |
The unique identifier for the report, which appears in the Concur Expense UI. |
ReportName |
The name of the report. |
Purpose |
The information from the Business Purpose field. |
CrnCode |
The 3-letter ISO 4217 currency code for the expense report currency. The expense report currency is defined as the report creator’s default reimbursement currency. |
ApsKey |
The approval status code for the report. |
ReportDate |
The date from the report header. Format: YYYY-MM-DDThh:mm:ss |
CreationDate |
The date the report was created. Format: YYYY-MM-DDThh:mm:ss |
ReceiptImageUrl |
The URL to access the image associated with the report. This URL is only valid for 30 minutes after the web service call. |
HasException |
Whether the report has exceptions. Format: Y/N |
EverSentBack |
Whether the report has ever been sent back to the employee. Format: Y/N |
EmployeeName |
The name of the employee who created the report. |
ApvStatusName |
The approval status name for the report. |
PayKey |
The unique identifier for the payment status of the report. |
PayStatusName |
The payment status of the report. |
PaidDate |
The date the report was extracted for payment. This element has an attribute named i:nil. If the value for this element is null, the i:nil attribute will be set to true. Format: YYYY-MM-DDThh:mm:ss |
SubmitDate |
The date the report was submitted. |
EntryCount |
The number of expense entries in the report. This count includes itemized entries. |
LedgerName |
The name of the expense report ledger. |
OrgUnit1 through OrgUnit6 |
The details from the Org Unit custom fields. These may not have data, depending on configuration. |
Custom1 through Custom20 |
The details from the Custom fields. These may not have data, depending on configuration. If the custom field is a list field, the data will be returned as: (list item short code) list item name. List Field Example: |
PolKey |
The unique identifier of the policy that applies to this report. |
RptKey |
The encrypted database key for the report, which is used as the unique identifier in other web service requests. |
ReportTotal |
The total amount of the report. |
PersonalExpenses |
The total amount of expenses marked as personal. |
AmountDueEmployee |
The total amount due to the employee for the report. |
AmountDueCompanyCard |
The total amount due to the company card for the report. |
TotalClaimedAmount |
The total amount of all non-personal expenses in the report. |
TotalApprovedAmount |
The total amount of approved expenses in the report. |
WorkflowActionURL |
The URL to post a workflow action to the report using the Post Report Workflow Action endpoint. |
Entries |
This parent element has a Count attribute indicating the number of entries (not including itemization entries) that are included in the report. It has an ExpenseEntry child element for each entry. Refer to the Expense Entry Child Elements table for more information. |
| Element | Description |
|---|---|
ReceiptRequired |
Whether the original receipt is required for the entry. |
ImageRequired |
Whether a receipt image is required for the entry. |
EreceiptId |
The ID for the attached e-receipt, if available. |
Custom1 through Custom40 |
The details from the Custom fields. These may not have data, depending on configuration. If the custom field is a list field, the data will be returned as: (list item short code) list item name. List Field Example: |
RpeKey |
The ID of the report entry. |
RptKey |
The encrypted database key of the report. |
ExpKey |
The expense type key for the expense entry. Expense Type Keys are returned in the ExpKey element by the Expense Group Configuration endpoint. |
FormKey |
The key for the expense entry form. |
ReceiptImageId |
The unique identifier for the image associated with the entry. |
ExpName |
The expense type name. |
SpendCategory |
The spend category specified for this expense type. Varies by client, used in reporting. |
BusinessPurpose |
The text from the Business Purpose field of the entry. |
HasVat |
Whether the entry contains VAT data. |
ExchangeRate |
The exchange rate that applies to the entry. |
TransactionAmount |
The amount of the expense entry in the original transaction currency. |
PostedAmount |
The amount of the expense entry in the user’s reimbursement currency. The user’s reimbursement currency is returned in the <CrnCode element for the report. |
ApprovedAmount |
The approved amount of the expense entry in the user’s reimbursement currency. The user’s reimbursement currency is returned in the <CrnCode element for the report. |
TransactionCurrencyName |
The name of the transaction currency. |
VendorDescription |
The vendor name of the expense entry, which can be entered manually by the user or imported from the card transaction Merchant Name field. |
LocationName |
The location for the expense entry, usually the city name. |
LocationSubdivision |
The location’s State, Province, or Country Subdivision. |
LocationCountry |
The location’s Country. |
OrgUnit1 through OrgUnit6 |
The details from the Org Unit custom fields. These may not have data, depending on configuration. |
HasComments |
Whether the expense entry has comments. |
CommentCount |
The number of comments associated with the expense entry. |
PaymentTypeKey |
The key for the payment type. |
IsItemized |
Whether the expense entry is itemized. |
HasExceptions |
Whether the expense entry has exceptions. |
IsPersonal |
Whether the expense entry is marked as personal. |
HasAttendees |
Whether the expense entry has attendees. |
HasAllocation |
Defines the amount of allocations for the expense. Possible values are: P, for partial allocation, F, for full allocation, or N, for no allocation. |
IsCreditCardCharge |
Whether the expense came from a credit card feed. |
AttendeeCount |
The number of attendees associated with the expense entry. |
IsPersonalCardCharge |
Whether the expense came from a personal card feed. |
TransactionDate |
The date of the expense entry. |
LastModifiedDate |
The date the expense entry was last changed. |
ItemizationList |
The list of itemizations for the expense entry. This parent element is empty if there are no itemizations. When the report has itemizations, this element contains an ItemizationEntry Details element for each itemization. Refer to the Itemization Entry Details Child Elements table for more information. |
| Element | Description |
|---|---|
Custom1 through Custom40 |
The custom fields associated with the itemization. These may not have data, depending on your configuration. If the custom field is a list field, the data will be returned as: (list item short code) list item name. List Field Example: |
ItemizationKey |
The unique identifier for the itemization. |
ExpenseKey |
The expense type key for the itemization. |
ExpenseName |
The expense type for the itemization. |
BusinessPurpose |
The business purpose field from the report header. |
TransactionAmount |
The amount for the itemization in the expense currency. |
TransactionDate |
The date of the transaction. |
PostedAmount |
The amount for the itemization in the user’s reimbursement currency. The user’s reimbursement currency is returned in the <CrnCode element for the report. |
ApprovedAmount |
The approved amount of the itemization in the user’s reimbursement currency. The user’s reimbursement currency is returned in the <CrnCode element for the report. |
HasComments |
Whether the itemization has comments. |
IsPersonal |
Whether the itemization is personal. |
LastModified |
The UTC date when the itemization was last modified. |
AllocationsList |
This parent element contains one Allocations element for each associated allocation. This element will be empty if there are no allocations. The |
Allocations |
This element appears once for each allocation associated with the expense entry if the entry is not itemized. This element will be empty if there are no allocations, or if the ItemizationList element contains the allocation data. This element contains child elements. |
AttendeeDetails |
This parent element appears once for each associated attendee, and contains child elements. |
| Element | Description |
|---|---|
Custom1 through Custom20 |
The custom fields associated with the allocation. These may not have data, depending on your configuration. If the custom field is a list field, the data will be returned as: (list item short code) list item name. List Field Example: |
AllocationKey |
The unique alphanumeric identifier for the allocation. |
Percentage |
The percentage of the expense that is included in this allocation. |
AccountCode1 |
The account code for the allocation. |
AccountCode2 |
The second account code for the allocation. This is only populated in rare cases, such as when using travel allowance, where one expense might have an account code for the allowed amount, and a second account code for the overage. |
| Element | Description |
|---|---|
Custom1 through Custom20 |
The custom fields associated with the allocation. These may not have data, depending on your configuration. If the custom field is a list field, the data will be returned as: (list item short code) list item name. List Field Example: |
AccountCode1 |
The account code for the allocation. |
AccountCode2 |
The second account code for the allocation. This is only populated in rare cases, such as when using travel allowance, where one expense might have an account code for the allowed amount, and a second account code for the overage. |
allocKey |
The unique alphanumeric identifier for the allocation. |
percentage |
The percentage of the expense that is included in this allocation. |
| Element | Description | ||
|---|---|---|---|
Custom1 through Custom20 |
The details from the Custom fields. These may not have data, depending on configuration. If the custom field is a list field, the data will be returned as | (list item short code) list item name. List Field Example | |
AttendeeType |
The type of attendee. | ||
FirstName |
The attendee’s first name. | ||
LastName |
The attendee’s last name. | ||
Company |
The attendee’s company name. | ||
ExternalId |
The unique identifier for the attendee, managed outside Concur. | ||
HasExceptionsPrevYear |
Whether the attendee has exceptions in the previous year, based on yearly total limits for attendees. | ||
HasExceptionsYtd |
Whether the attendee has exceptions in the current year, based on yearly total limits for attendees. | ||
IsDeleted |
Whether the attendee is marked as deleted. | ||
OwnerEmpName |
The name of the employee that owns the attendee record. | ||
Title |
The attendee’s title. | ||
TotalAmountPrevYear |
The total amount spent on the attendee in the previous calendar year. | ||
TotalAmountYtd |
The total amount spent on the attendee in the current calendar year. | ||
VersionNumber |
The attendee’s version number. | ||
AttendeeKey |
Attendee unique identifier within Concur. |
GET http://www.concursolutions.com/api/expense/expensereport/v1.1/reportfulldetails/n6ujbuLd1Arwe45lT7As3ThJYJf2dAsrrEW HTTPS/1.1
Host: www.concursolutions.com
Authentication: OAuth
HTTPS/1.1 200 OK
Content-Type: application/xml
<ReportDetails xmlns:ns="http://www.concursolutions.com/api/expense/expensereport/2011/03" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<EMAIL_ADDRESS><ReportId>4681D8C33A284E91A46E</ReportId>
<ReportName>Client Meeting </ReportName>
<Purpose>Sales meeting</Purpose>
<CrnCode>USD</CrnCode>
<ApsKey>A_NOTF</ApsKey>
<ReportDate>2011-05-12T00:00:00</ReportDate>
<CreationDate>2011-05-12T14:15:36</CreationDate>
<ReceiptImageUrl>http://www.concursolutions.com/getImage?cid=p0000002tcnl&val=D9EC86BB902B8D48</ReceiptImageUrl>
<HasException>N</HasException>
<EverSentBack>N</EverSentBack>
<EmployeeName>Miller, Chris </EmployeeName>
<ApvStatusName>Not Submitted</ApvStatusName>
<PayKey>P_NOTP</PayKey>
<PayStatusName>Not Paid</PayStatusName>
<PaidDate i:nil="true"/>
<SubmitDate>0001-01-01T00:00:00</SubmitDate>
<EntryCount>2</EntryCount>
<LedgerName>DEFAULT</LedgerName>
<OrgUnit1 />
<OrgUnit2 />
<OrgUnit3 />
<OrgUnit4 />
<OrgUnit5 />
<OrgUnit6 />
<Custom1 />
<Custom2 />
<Custom3 />
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<PolKey>n3VIbuLd1AU4tlT7As3ThJYJf2dADsJ1V</PolKey>
<RptKey>n6ujbuLd1Arwe45lT7As3ThJYJf2dAsrrEW</RptKey>
<ReportTotal>129.00000000</ReportTotal>
<PersonalExpenses>0.00000000</PersonalExpenses>
<AmountDueEmployee>129.00000000</AmountDueEmployee>
<AmountDueCompanyCard>0.00000000</AmountDueCompanyCard>
<TotalClaimedAmount>129.00000000</TotalClaimedAmount>
<TotalApprovedAmount>129.00000000</TotalApprovedAmount>
<WorkflowActionURL>http://www.concursolutions.com/api/expense/expensereport/v1.1/report/Ko9%t8GHpERQVpk$pS2EL6EDHRwi9r$paQS1UqyL6a454QitqQ/WorkFlowAction</WorkflowActionURL>
<Entries Count="2">
<ExpenseEntry>
<ReceiptRequired>N</ReceiptRequired>
<ImageRequired>Y</ImageRequired>
<EreceiptId />
<OrgUnit1 />
<OrgUnit2 />
<OrgUnit3 />
<OrgUnit4 />
<OrgUnit5 />
<OrgUnit6 />
<Custom1 />
<Custom2 />
<Custom3 />
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<Custom21 />
<Custom22 />
<Custom23 />
<Custom24 />
<Custom25 />
<Custom26 />
<Custom27 />
<Custom28 />
<Custom29 />
<Custom30 />
<Custom31 />
<Custom32 />
<Custom33 />
<Custom34 />
<Custom35 />
<Custom36 />
<Custom37 />
<Custom38 />
<Custom39 />
<Custom40 />
<RpeKey>nfUEGTNhWxbXkeT26XlVm9Gdqvbi8hlDa</RpeKey>
<RptKey>nbe1LDA99RdTx0fUEuZiYd5WW8afkjew$p</RptKey>
<EMAIL_ADDRESS><ExpKey>BUSMEAL</ExpKey>
<FormKey>nnamf5z0cLe4MHs53YwSIjwY0uP8kby5p</FormKey>
<ReceiptImageId />
<ExpName>BUSMEAL</ExpName>
<BusinessPurpose />
<HasVat>N</HasVat>
<ExchangeRate>1.00000000000000</ExchangeRate>
<TransactionAmount>115.00000000</TransactionAmount>
<PostedAmount>115.00000000</PostedAmount>
<ApprovedAmount>115.00000000</ApprovedAmount>
<TransactionCurrencyName>Dollar, United States</TransactionCurrencyName>
<VendorDescription>Mel's Diner </VendorDescription>
<LocationName>Seattle</LocationName>
<LocationSubdivision>WA</LocationSubdivision>
<LocationCountry>US</LocationCountry>
<SpendCategory>Meals and Entertainment</SpendCategory>
<HasComments>N</HasComments>
<CommentCount>0</CommentCount>
<PaymentTypeKey>CASH</PaymentTypeKey>
<IsItemized>Y</IsItemized>
<HasExceptions>N</HasExceptions>
<IsPersonal>N</IsPersonal>
<HasAttendees>Y</HasAttendees>
<HasAllocation>Y</HasAllocation>
<IsCreditCardCharge>N</IsCreditCardCharge>
<AttendeeCount>2</AttendeeCount>
<IsPersonalCardCharge>N</IsPersonalCardCharge>
<TransactionDate>2011-05-19T00:00:00</TransactionDate>
<LastModifiedDate>2011-05-19T14:44:50</LastModifiedDate>
<ItemizationsList>
<ItemizationEntryDetails>
<Custom1 />
<Custom2 />
<Custom3 />
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<Custom21 />
<Custom22 />
<Custom23 />
<Custom24 />
<Custom25 />
<Custom26 />
<Custom27 />
<Custom28 />
<Custom29 />
<Custom30 />
<Custom31 />
<Custom32 />
<Custom33 />
<Custom34 />
<Custom35 />
<Custom36 />
<Custom37 />
<Custom38 />
<Custom39 />
<Custom40 />
<ItemizationKey>nE0avYnILN6vKNUGsh5lCg6vt$sqc9qB$sq</ItemizationKey>
<ExpenseKey>MISCL</ExpenseKey>
<ExpenseName>Miscellaneous</ExpenseName>
<BusinessPurpose>Promo T-shirt</BusinessPurpose>
<TransactionAmount>8.00000000</TransactionAmount>
<TransactionDate>2011-05-19T00:00:00</TransactionDate>
<PostedAmount>8.00000000</PostedAmount>
<ApprovedAmount>8.00000000</ApprovedAmount>
<HasComments>Y</HasComments>
<CommentCount>0</CommentCount>
<IsPersonal>N</IsPersonal>
<LastModified>2011-05-19T14:06:53</LastModified>
<AllocationsList>
<Allocations>
<Custom1>North America</Custom1>
<Custom2>West</Custom2>
<Custom3 />
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<AllocationKey>ngYn5SB4OUXwHnBjh8$pBIT8oPxe9G$shCi</AllocationKey>
<Percentage>100.00000000%</Percentage>
<AccountCode1>MISC_EXP</AccountCode1>
<AccountCode2 />
</Allocations>
</AllocationsList>
</ItemizationEntryDetails>
<ItemizationEntryDetails>
<Custom1 />
<Custom2 />
<Custom3 />
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<Custom21 />
<Custom22 />
<Custom23 />
<Custom24 />
<Custom25 />
<Custom26 />
<Custom27 />
<Custom28 />
<Custom29 />
<Custom30 />
<Custom31 />
<Custom32 />
<Custom33 />
<Custom34 />
<Custom35 />
<Custom36 />
<Custom37 />
<Custom38 />
<Custom39 />
<Custom40 />
<ItemizationKey>nE0avYnILN6hfJ8LSXF8Qd9WkOkwSp83G</ItemizationKey>
<ExpenseKey>BRKFT</ExpenseKey>
<ExpenseName>Breakfast</ExpenseName>
<BusinessPurpose>Client Meeting</BusinessPurpose>
<TransactionAmount>107.00000000</TransactionAmount>
<TransactionDate>2011-05-19T00:00:00</TransactionDate>
<PostedAmount>107.00000000</PostedAmount>
<ApprovedAmount>107.00000000</ApprovedAmount>
<HasComments>Y</HasComments>
<CommentCount>0</CommentCount>
<IsPersonal>N</IsPersonal>
<LastModified>2011-05-19T14:06:33</LastModified>
<AllocationsList>
<Allocations>
<Custom1>North America</Custom1>
<Custom2>West</Custom2>
<Custom3>Oregon</Custom3>
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<AllocationKey>ngYn5SB4OUQfJtTrUBq94qWUuDk8g6fo$s</AllocationKey>
<Percentage>50.00000000%</Percentage>
<AccountCode1>MEAL_BRKFST</AccountCode1>
<AccountCode2 />
</Allocations>
<Allocations>
<Custom1>North America</Custom1>
<Custom2>West</Custom2>
<Custom3>Washington</Custom3>
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<AllocationKey>ngYn5SB4OUX$pWN0Y6bkzFZZhdQ2PJ$pc6b</AllocationKey>
<Percentage>50.00000000%</Percentage>
<AccountCode1>MEAL_BRKFST</AccountCode1>
<AccountCode />
</Allocations>
</AllocationsList>
</ItemizationEntryDetails>
</ItemizationsList>
<Allocations />
<AttendeeDetails>
<Custom1 />
<Custom2 />
<Custom3 />
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<AttendeeType>SYSEMP</AttendeeType>
<FirstName>Chris</FirstName>
<LastName>Miller</LastName>
<Company />
<ExternalId />
<HasExceptionsPrevYear>N</HasExceptionsPrevYear>
<HasExceptionsYtd>N</HasExceptionsYtd>
<IsDeleted>N</IsDeleted>
<OwnerEmpName>Miller, Chris</OwnerEmpName>
<Title />
<TotalAmountPrevYear>0.00000000</TotalAmountPrevYear>
<TotalAmountYtd>0.00000000</TotalAmountYtd>
<VersionNumber>1</VersionNumber>
<AttendeeKey>njxM6iDZutaiGWiqbak$sEciMQPevMSInD</AttendeeKey>
</AttendeeDetails>
<AttendeeDetails>
<Custom1 />
<Custom2 />
<Custom3 />
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<AttendeeType>BUSGUEST</AttendeeType>
<FirstName>Pat</FirstName>
<LastName>Davis</LastName>
<Company>Medico</Company>
<ExternalId />
<HasExceptionsPrevYear>N</HasExceptionsPrevYear>
<HasExceptionsYtd>N</HasExceptionsYtd>
<IsDeleted>N</IsDeleted>
<OwnerEmpName>Miller, Chris</OwnerEmpName>
<Title>Finance Manager</Title>
<TotalAmountPrevYear>0.00000000</TotalAmountPrevYear>
<TotalAmountYtd>0.00000000</TotalAmountYtd>
<VersionNumber>1</VersionNumber>
<AttendeeKey>njxM6iDZpwahAX2jt$pdRQ1etD1lNzfW83</AttendeeKey>
</AttendeeDetails>
</ExpenseEntry>
<ExpenseEntry>
<ReceiptRequired>N</ReceiptRequired>
<ImageRequired>Y</ImageRequired>
<EreceiptId />
<OrgUnit1 />
<OrgUnit2 />
<OrgUnit3 />
<OrgUnit4 />
<OrgUnit5 />
<OrgUnit6 />
<Custom1 />
<Custom2 />
<Custom3 />
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<Custom21 />
<Custom22 />
<Custom23 />
<Custom24 />
<Custom25 />
<Custom26 />
<Custom27 />
<Custom28 />
<Custom29 />
<Custom30 />
<Custom31 />
<Custom32 />
<Custom33 />
<Custom34 />
<Custom35 />
<Custom36 />
<Custom37 />
<Custom38 />
<Custom39 />
<Custom40 />
<RpeKey>nfUEGTNhWxbQmRXziCxZr2FNJmJWOcx0G</RpeKey>
<RptKey>nbe1LDA99RdTx0fUEuZiYd5WW8afkjew$p</RptKey>
<ExpKey>TRDSH</ExpKey>
<FormKey>nnamf5z0cLe4MHs53YwSIjwY0uP8kby5p</FormKey>
<ReceiptImageId>6EA8D791D82231349763EFCBC1822318</ReceiptImageId>
<ExpName>PARKING</ExpName>
<HasVat>N</HasVat>
<ExchangeRate>1.00000000000000</ExchangeRate>
<TransactionAmount>14.00000000</TransactionAmount>
<PostedAmount>14.00000000</PostedAmount>
<ApprovedAmount>14.00000000</ApprovedAmount>
<TransactionCurrencyName>US, Dollar</TransactionCurrencyName>
<VendorDescription>Saf-T-Park</VendorDescription>
<LocationName />
<LocationSubdivision />
<LocationCountry />
<SpendCategory>Transportation</SpendCategory>
<HasComments>N</HasComments>
<CommentCount>0</CommentCount>
<PaymentTypeKey>CASH</PaymentTypeKey>
<IsItemized>N</IsItemized>
<HasExceptions>N</HasExceptions>
<IsPersonal>N</IsPersonal>
<HasAttendees>N</HasAttendees>
<HasAllocation>N</HasAllocation>
<IsCreditCardCharge>N</IsCreditCardCharge>
<AttendeeCount>0</AttendeeCount>
<IsPersonalCardCharge>N</IsPersonalCardCharge>
<TransactionDate>2011-05-19T00:00:00</TransactionDate>
<LastModifiedDate>2011-05-26T20:22:03</LastModifiedDate>
<ItemizationList />
<Allocations>
<Custom1 />
<Custom2 />
<Custom3 />
<Custom4 />
<Custom5 />
<Custom6 />
<Custom7 />
<Custom8 />
<Custom9 />
<Custom10 />
<Custom11 />
<Custom12 />
<Custom13 />
<Custom14 />
<Custom15 />
<Custom16 />
<Custom17 />
<Custom18 />
<Custom19 />
<Custom20 />
<AccountCode1>PARKING</AccountCode1>
<AccountCode2 />
<allocKey>ki7UU3hd447dlKuCVH6D7Sla83Di4kl</allocKey>
<Percentage>100.00000000%</Percentage>
</Allocations>
</ExpenseEntry>
</Entries>
</ReportDetails>


I never had any experience with creating frontend web applications, so my portfolio is a bit short at the moment. The only pages I have to showcase are the one's I created by completing the free code camp challenges. I also created a backed in .NET Core for a CRM like web application that I develop at work.
I work as a software engineer in a small company in Slovenia. My work usually consists of designing software architecture, programming, consulting and other software development related work. I like technology, gadgets, code, diversity, culture, where we're going and where we've been. I'm excited about, social equity, media, entrepreneurship and above all, the open source.
My passion is to code, to tweak and improve the code, making it more elegant, clean and easy to understand. I also like to play computer games, but it is hard to find the time for that now since there are so many new things that I wish to learn.
Before my current job, I was working on Healthcare information systems and laboratory processing systems. I am building desktop apps with WinForms on .NET technology. I want to shift to web development, as a Full Stack engineer. That is the main reason I joined freecodecamp.com I wish to learn AngularJS and NodeJS and so far It has been a pleasant experience.
If you want to get in touch with me, to request more info, CV, or any other related mater, please feel free to fill out the form. I'll try my best to respond quickly.


--- layout: page title: Newsletter description: Talking is good. Let's do some. permalink: /newsletter/ ---


2. Select mesh on which species will diffuse and react
Mouse Controls:
- Rotation -- Left button
- Translation -- Right button
- Zoom -- Mouse wheel, or left + right button
Select subdomains below to visualize them in mesh:
3. Select which species should diffuse in each subdomain (and visualize which subdomains are which using the checkboxes above).
4. Select which reactions should be enabled in each subdomain
5. Select initial conditions for the model
| Delete |
Initial Conditions Type |
Species |
Custom |


This an example of re-usable component.
This button component is pretty useless by it self, but it shows you how to make a re-usable component.
Look into the HTML and VBA code how to implements properties for your components using interpolations and props dictionary.
This is a normal HTML button.
This button calls a VBA Sub that will execute a javascript function in the buttonExample component.
This is a HandleView component.
This button calls a VBA Sub in the component.
This is a HandleView component.
This button calls a VBA Sub that will execute a method in the parent component. For this button, the parent component is buttonExample component.
Now this is a usefull HandleView component !
This button will automatically call the Bootstrap 4 javascript validation routine before submitting your form to your component.
Try to submit empty value.


{% block body %}
Thanks!
Your account has been activated, if you need calcel it follow this link:
See later.
The Taiga development team.


Next: copy-symbol, Previous: keywordp, Up: Symbols Dictionary
make-symbol
name ⇒ new-symbol
name—a string.
new-symbol—a fresh, uninterned symbol.
make-symbol creates and returns a fresh, uninterned symbol whose name is the given name. The new-symbol is neither bound nor fbound and has a null property list.
It is implementation-dependent whether the string that becomes the new-symbol’s name is the given name or a copy of it. Once a string has been given as the name argument to make-symbol, the consequences are undefined if a subsequent attempt is made to alter that string.
(setq temp-string "temp") ⇒ "temp" (setq temp-symbol (make-symbol temp-string)) ⇒ #:|temp| (symbol-name temp-symbol) ⇒ "temp" (eq (symbol-name temp-symbol) temp-string) ⇒ implementation-dependent (find-symbol "temp") ⇒ NIL, NIL (eq (make-symbol temp-string) (make-symbol temp-string)) ⇒ false
Should signal an error of type type-error if name is not a string.
No attempt is made by make-symbol to convert the case of the name to uppercase. The only case conversion which ever occurs for symbols is done by the Lisp reader. The program interface to symbol creation retains case, and the program interface to interning symbols is case-sensitive.


events tab
Below you can find the list of purchaseable in game events. When purchased, they will take place in the colony immediately, assuming that the game handles it properly. Raids will feature names from chat, too.
Use !bal to check your coin balance!
Find the "eventname" of the item you want, and type in the Twitch chat: "!buy (eventname) "
ex: "!buy raid 1500" would send a low tier raid to me. Watch your karma! Having lower karma lowers the ammount of coins you gain over time; the lowest karma you can have is 20, which would give you .20 of your usual coin gain. Higher karma will give you more coins though! 150 karma would be 150% more coins.
| eventname | price | karmatype |
|---|---|---|
| tornado | 800 | Bad |
| tornados | 2600 | Bad |
| clearweather | 400 | Good |
| rain | 350 | Good |
| vomitrain | 650 | Neutral |
| foggyrain | 300 | Neutral |
| rainythunderstorm | 250 | Neutral |
| drythunderstorm | 450 | Bad |
| snowgentle | 350 | Neutral |
| snowhard | 450 | Bad |
| fog | 300 | Neutral |
| heatwave | 750 | Bad |
| flashstorm | 400 | Bad |
| coldsnap | 800 | Bad |
| solarflare | 500 | Bad |
| shortcircuit | 500 | Bad |
| toxicfallout | 6500 | Doom |
| volcanicwinter | 3200 | Doom |
| eclipse | 450 | Bad |
| aurora | 200 | Good |
| blight | 700 | Bad |
| animaltame | 150 | Good |
| resourcepodcrash | 300 | Good |
| transportpodcrash | 600 | Good |
| tradercaravan | 275 | Good |
| orbitaltraderarrival | 350 | Good |
| meteor | 150 | Neutral |
| maninblack | 350 | Good |
| madanimal | 200 | Bad |
| psychicdrone | 400 | Bad |
| psychicsoothe | 250 | Good |
| ambrosiasprout | 150 | Good |
| herdmigration | 200 | Good |
| farmanimals | 400 | Good |
| wildman | 300 | Good |
| rarethrumbos | 500 | Good |
| shipchunkdrop | 300 | Good |
| travelergroup | 80 | Good |
| visitorgroup | 200 | Good |
| skillincrease | 200 | Good |
| party | 400 | Good |
| alphabeavers | 600 | Bad |
| shippartpoison | 1900 | Bad |
| shippartpsychic | 2400 | Bad |
| militaryaid | 700 | Good |
| raid | 1500 | Bad |
| dropraid | 1500 | Bad |
| sapperraid | 1500 | Bad |
| siegeraid | 2500 | Bad |
| mechanoidraid | 2500 | Bad |
| infestation | 2500 | Bad |
| manhunterpack | 1500 | Bad |
| predators | 2500 | Bad |
| randomdisease | 1000 | Bad |
| disease | 1000 | Bad |
| reviveanypawn | 1200 | Good |
| pawn | 1500 | Good |
| levelskill | 1500 | Good |
| trait | 3500 | Good |
| removetrait | 5500 | Good |
| genderswap | 600 | Neutral |
| prisoner | 800 | Good |
| visitcolony | 300 | Good |
| randominspire | 450 | Good |
| torytalkervote | 750 | Neutral |
| hodlbotvote | 600 | Neutral |


or if there is a strong neutral mech package printed (which it seems like there must be, right?), In Wild where Mechwarper already exists, perhaps, but in Standard I can expect them to stray well away from repeating the same mistakes. then Magnetic will give Priest the ability to make some HUGE Steamboats, and that's before starting in on the Divine Spirits/Inner Fires. Aye, people always thought Divine Spirit + Inner Fire was a bit of a dream combo that wasn't really feasible, but for quite some time now it has been shown as straight-up viable. There is the potential depending on cards delivered this set for Mech Priest to be a real thing. And, depending on how it works, that'll be really cool.


Toggle navigation
Brand
Link
Link
Dropdown
Action
Another action
Something else here
Separated link
One more separated link
Submit
Link
Dropdown
Action
Another action
Something else here
Separated link
span 10
span 2
span 10
span 2
span 10
span 2
span 10
span 2
span 10
×
Places Control Box
Search
Sort places
Popularity
Distance


This feature will allow users to disable the dropdown and restrict the access in to dropdown data fields.
For disable the dropdown, it is required to set value as true for disabled property. by default it's value is false.
disabled


<glossAlternateFor>
The <glossAlternateFor> element indicates when a variant term has a relationship to another variant term in addition to the preferred term.
Category: Glossentry elements


Create Repo For Hugo On GitHub
This tutorial covers the creation of a private and public repo including the setup of workflows for automated deployment.
TutorialWhat you will learn
In this document, I’ll show how to create your own website using Hugo, a template, and GitHub pages. I struggled setting up my very first page and was thankful for getting help on the setup. I want to share my experience and help you create the infrastructure for your own website.
Requirements
The editor of my choice is Visual Studio Code. There are plugins for almost everything e.g. GitHub.
| Step | Requirement |
|---|---|
| 1 | I expect that you have already installed Hugo (extended) on your machine. If this is not the case, go to their website and read the quick-start section. |
| 2 | I’ll use my favorite template Doks. This template is different because it requires installing Node. If you choose another theme that’s fine, some of the following steps can be skipped. |
| 3 | Install Node. |
Setup Hugo Site
| Theme | Description |
|---|---|
| Doks | Navigate to the root folder and open a console. Install all dependencies with npm install . |
| Non-Doks | Create a new site with Hugo and insert your theme in the themes folder. |
Start you local webserver by typing hugo server
in the console. By default your site is hostet on localhost:1313
.
Btw. if you like that template, check out Doks Homepage.
Create Source repo (private)
Create a new private repo on GitHub. This will be the source repo which you will use to make changes. The content is private and nothing you want to share. Open GitHub on your browser and create a new repo.
Switch over to VSCode and add your project to the repo.
Initialize GitHub repo locally with git init
on the root directory.
Ensure that there is no public
and resources
folder in your project.
Also delete the files from /.github/workflows
marked in the next picture:
| Step | Command |
|---|---|
| Connect to source repo | git remote add origin https://github.com/[your github name]/[your PRIVATE repo name].git |
| Add all files | git add . |
| Commit | git commit -m "initial commit" |
| Push to GitHub | git push origin master |
Create GH-pages repo (public)
First, create another repo. This time make it public. Then create a submodule that will be publicly available and represent the source for GitHub pages.
git submodule add https://github.com/[your github name]/[your PUBLIC repo name].git public
This should now create the public folder.
Ignored by .gitignore (optional)
If you receive a message like this:
$ git submodule add https://github.com/xuptox/public_gh_pages_repo.git public
The following paths are ignored by one of your .gitignore files:
public
hint: Use -f if you really want to add them.
hint: Turn this message off by running
hint: "git config advice.addIgnoredFile false"
Open .gitignore
and remove the line for public
.
Create Submodule
If you created the public repo and removed public
from .gitignore
.
Rerun the git submodule...
command again.
You should get a message like this:
$ git submodule add https://github.com/xuptox/public_gh_pages_repo.git public
Cloning into '[path to project]/doks-master/public'...
warning: You appear to have cloned an empty repository.
fatal: You are on a branch yet to be born
Unable to checkout submodule 'public'
| Step | Command |
|---|---|
| Build your website | hugo |
Navigate to public folder |
cd public or use VSCode |
| Add the file | git add . |
| Commit | git commit -m "first build" |
| Navigate back to root | cd .. |
| Add all files | git add . |
| Commit everything (incl. the submodule) | git commit -m "first build incl. submodule ref" |
| Push source and public (ref) to GitHub | git push -u origin master --recurse-submodules=on-demand |
Check your project hierarchy. Right next to your public folder you should see the letter S
indicating that it’s a submodule.
Your private repo on GitHub should also indicate that the public folder is referencing another repo.
Add Actions
Create Personal Token
Before we create the actual workflow, you need to create a personal access token that allows you to commit and push to the public repo.
Create a token in your Token Settings on GitHub. Hit Generate new token
and select the checkbox repo
.
This allows full control on the repo. Scroll down and hit Generate
to create the actual token value.
You must copy that string as it will not be shown again when you leave this page.
Open another tab in your browser and add the created token to your Secrets Page on GitHub.
Click New repository secret
and paste the created token to the lower textbox. Give that token a name e.g. PERSONAL_TOKEN
and hit Add secret
.
Create Workflow
Navigate to /.github/workflows
and create a new file gh-pages.yml
. Copy and paste the following content into the file and save.
name: github pages
on:
push:
branches:
- master # Set a branch to deploy
jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
with:
submodules: true # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: "latest"
extended: true
- uses: actions/setup-node@v2
with:
node-version: "14"
check-latest: true
- run: npm install
- name: Build
run: hugo --gc --minify && npm run build:functions
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
external_repository: [YOUR USER]/[YOUR PUBLIC REPO NAME]
publish_dir: ./public
# keep_files: true
user_name: [YOUR USER]
user_email: [YOUR MAIL]
publish_branch: master
Change the values in brackets []
corresponding to your user name, GitHub repo, and mail.
I’m not sure if the user_email needs to be a real mail address.
Save the file and push changes to GitHub.
If you use VSCode you can also use the GitHub plugin. It’s another way to add, commit…
and finally, push your content to GitHub.
The rest is up to you.
- You need to activate your GitHub-Page via Settings.
- In case you have a custom domain, you also need to set up your DNS.
- Also use encryption on your page.
Contributes
I used the following sources to create this guide:
- GitHub Reference on Authentication in a Workflow
- Peaceiris - Actions GitHub Pages
- Jaid - Action to install NPM
- Adam Ormsby - Setup GitHub Submodule
Special Thanks goes to Alechandro!
Thanks to everyone!


Awesome-o
Barbara Streissand Robot
Cat Robot
Hello there,
I am the Cat Robot!
On/Off
Speaking capabilities
Rockets
Talk!


Aloha
Etymology
The word aloha derives from the Proto-Polynesian root *qalofa. It has cognates in other Polynesian languages, such as Samoan alofa and Māori aroha, also meaning "love."
Aloha Editor is the word's most advanced browser based Editor made with aloha passion.
A folk etymology claims that it derives from a compound of the Hawaiian words alo meaning "presence", "front", "face", or "share"; and ha, meaning "breath of life" or "essence of life." Although alo does indeed mean "presence" etc., the word for breath is spelled with a macron or kahakō over the a (hā) whereas the word aloha does not have a long a.
Usage
Before contact with the West, the words used for greeting were welina and anoai. Today, "aloha kakahiaka" is the phrase for "good morning." "Aloha ʻauinalā" means "good afternoon" and "aloha ahiahi" means "good evening." "Aloha kākou" is a common form of "welcome to all."
In modern Hawaiʻi, numerous businesses have aloha in their names, with more than 3 pages of listings in the Oʻahu phone book alone.
Trends
Recent trends are popularizing the term elsewhere in the United States. Popular entertainer, Broadway star and Hollywood actress Bette Midler, born in Honolulu, uses the greeting frequently in national appearances. The word was also used frequently in the hit television drama Hawaii Five-O. In the influential 1982 film comedy Fast Times at Ridgemont High, the eccentric teacher Mr. Hand makes use of the greeting. The Aloha Spirit is a major concept in Lilo and Stitch, a very popular Disney series of movies and TV shows, set in Hawaiʻi. The drama series Lost, shot in Hawaiʻi, has a thank you note at the end of the credits saying "We thank the people of Hawaiʻi and their Aloha Spirit". Aloha is a term also used in the Nickelodeon program Rocket Power.
- Arguably the most famous historical Hawaiian song, "Aloha ʻOe" was written by the last queen of Hawaii, Liliʻuokalani.
- The term inspired the name of the ALOHA Protocol introduced in the 1970s by the University of Hawaii.
- In Hawaii someone can be said to have or show aloha in the way they treat others; whether family, friend, neighbor or stranger.


Contents
valueT.m
Summary: Test derivatives of the propagate function, which computes the mean and the variance of the successor state distribution, assuming that the current state is Gaussian distributed with mean m and covariance matrix s.
[d dy dh] = valueT(p, delta, m, s, dynmodel, policy, plant, cost, H)
Input arguments:
p policy parameters (can be a structure) .<> fields that contain the policy parameters (nothing else) m mean of the input distribution s covariance of the input distribution dynmodel GP dynamics model (structure) policy policy structure plant plant structure cost cost structure H prediction horizon delta (optional) finite difference parameter. Default: 1e-4
Output arguments:
dd relative error of analytical vs. finite difference gradient dy analytical gradient dh finite difference gradient
Copyright (C) 2008-2013 by Marc Deisenroth, Andrew McHutchon, Joe Hall, and Carl Edward Rasmussen.
Last modified: 2013-03-21
function [d dy dh] = valueT(p, m, s, dynmodel, policy, plant, cost, H, delta)
Code
if nargin < 9; delta = 1e-4; end if nargin < 8; H = 4; end % call checkgrad directly [d dy dh] = checkgrad('value',p,delta,m,s,dynmodel,policy,plant,cost,H);


|
Boat Wallet
0.0.1
An Ethereum compatible wallet C SDK for IoT
|
libcurl porting for RPC More...
#include "wallet/boattypes.h"
#include "utilities/utility.h"
#include "rpc/rpcport.h"
#include "rpc/curlport.h"
#include "curl/curl.h"
Data Structures | |
| struct | TCurlPortStringWithLen |
| A struct to maintain a dynamic length string. More... | |
Macros | |
| #define | CURLPORT_RECV_BUF_SIZE_STEP 1024 |
| Defines the buffer size to receive response from peer. More... | |
Typedefs | |
| typedef struct TCurlPortStringWithLen | CurlPortStringWithLen |
| A struct to maintain a dynamic length string. More... | |
Functions | |
| BOAT_RESULT | CurlPortInit (void) |
| Initialize libcurl. More... | |
| void | CurlPortDeinit (void) |
| Deinitialize libcurl. More... | |
| BOAT_RESULT | CurlPortSetOpt (const RpcOption *rpc_option_ptr) |
| Set options for use with libcurl. More... | |
| size_t | CurlPortWriteMemoryCallback (void *data_ptr, size_t size, size_t nmemb, void *userdata) |
| Callback function to write received data from the peer to the user specified buffer. More... | |
| BOAT_RESULT | CurlPortRequestSync (const CHAR *request_str, UINT32 request_len, BOAT_OUT CHAR **response_str_ptr, BOAT_OUT UINT32 *response_len_ptr) |
| Perform a synchronous HTTP POST and wait for its response. More... | |
Variables | |
| CurlPortStringWithLen | g_curlport_response = {NULL, 0, 0} |
libcurl porting for RPC
curlport.c is the libcurl porting of RPC.
DO NOT call functions in this file directly. Instead call wrapper functions provided by rpcport.
To use libcurl porting, RPC_USE_LIBCURL in boatoptions.h must set to 1.
| #define CURLPORT_RECV_BUF_SIZE_STEP 1024 |
Defines the buffer size to receive response from peer.
The step to dynamically expand the receiving buffer.
| typedef struct TCurlPortStringWithLen CurlPortStringWithLen |
A struct to maintain a dynamic length string.
| void CurlPortDeinit | ( | void | ) |
Deinitialize libcurl.
Function: CurlPortDeinit()
This function de-initializes libcurl. It also frees the dynamically allocated storage to receive response from the peer.
| This | function doesn't take any argument. |
| BOAT_RESULT CurlPortInit | ( | void | ) |
Initialize libcurl.
Function: CurlPortInit()
This function initializes libcurl. It also dynamically allocates storage to receive response from the peer.
| This | function doesn't take any argument. |
| BOAT_RESULT CurlPortRequestSync | ( | const CHAR * | request_str, |
| UINT32 | request_len, | ||
| BOAT_OUT CHAR ** | response_str_ptr, | ||
| BOAT_OUT UINT32 * | response_len_ptr | ||
| ) |
Perform a synchronous HTTP POST and wait for its response.
Function: CurlPortRequestSync()
This function initiates a curl session, performs a synchronous HTTP POST and waits for its response. is a callback function as per libcurl CURLOPT_WRITEFUNCTION option. libcurl will call this function (possibly) multiple times to write received data from peer to the buffer specified by this function. The received data are typically some RESPONSE from the HTTP server.
| [in] | request_str | A pointer to the request string to POST. |
| [in] | request_len | The length of <request_str> excluding NULL terminator. This function is wrapped by RpcRequestSync() and thus takes this argument for compatibility with the wrapper function. Typically it equals to strlen(request_str). |
| [out] | response_str_ptr | The address of a CHAR* pointer (i.e. a double pointer) to hold the address of the receiving buffer. The receiving buffer is internally maintained by curlport and the caller shall only read from the buffer. DO NOT modify the buffer or save the address for later use. |
| [out] | response_len_ptr | The address of a UINT32 integer to hold the effective length of <response_str_ptr> excluding NULL terminator. This function is wrapped by RpcRequestSync() and thus takes this argument for compatibility with the wrapper function. Typically it equals to strlen(response_str_ptr). |
| BOAT_RESULT CurlPortSetOpt | ( | const RpcOption * | rpc_option_ptr | ) |
Set options for use with libcurl.
Function: CurlPortSetOpt()
This function is a dummy function for compatible with RPC Port skeleton. curl_easy_setopt() is actually called in CurlPortRequestSync() because some options are per-session effective.
| [in] | rpc_option_ptr | A pointer to the option struct of RpcOption. |
| size_t CurlPortWriteMemoryCallback | ( | void * | data_ptr, |
| size_t | size, | ||
| size_t | nmemb, | ||
| void * | userdata | ||
| ) |
Callback function to write received data from the peer to the user specified buffer.
Function: CurlPortWriteMemoryCallback()
This function is a callback function as per libcurl CURLOPT_WRITEFUNCTION option. libcurl will call this function (possibly) multiple times to write received data from peer to the buffer specified by this function. The received data are typically some RESPONSE from the HTTP server. The receiving buffer is dynamically allocated. If the received data from the peer exceeds the current buffer size, a new buffer that could hold all data will be allocated and previously received data will be copied to the new buffer as well as the newly received data.
| [in] | data_ptr | A pointer given by libcurl, pointing to the received data from peer. |
| [in] | size | For historic reasons, libcurl will always call with <size> = 1. |
| [in] | nmemb | <nmemb> is the size of the data chunk to write. It doesn't include null terminator even if the data were string. For backward compatibility, use <size> * <nmemb> to calculate the size of the received data. |
| [in] | userdata | <userdata> is the value previously set by CURLOPT_WRITEDATA option. Typically it's a pointer to a struct which contains information about the receiving buffer. |
| CurlPortStringWithLen g_curlport_response = {NULL, 0, 0} |


Digital Shaper Certificate
${ year }
${ firstName } ${ lastName }
completed the TechLabs Academy Track
${ trackName }
successfully with the final project
${ projectName }
.
${ firstName } ${ lastName }
${ trackName } | ${ location }
www.techlabs.org
Track: ${ trackName }
${ trackDescription }
Project: ${ projectName }
${ projectDescription }


LUIS GARCIA
Position: Midfielder
Date of Birth: 24/06/1978
Height: 5'6
Weight: 10 st 7
1st team games: 121
1st team goals: 30
International caps: 18
International goals: 4
Former clubs: Valladolid, Tenerife, Atletico Madrid, Barcelona
Birth Place: Badalona, Spain


- Download the Eeze app for Android or iOS
- Go to https://eeze.io/login and scan the code with the app to register for an account
- Create a new Domain for your site, using = Url::to('/'); ?> as the value for the "Website" field.
- Note: Make sure you have HTTPS setup and are using it first.
- Copy the Client ID and Client Secret from the success page and paste them in these fields.
- Note: These values will not be visible after navigating away from that page so make sure you copy them down first!
- Choose a role that you want new users to be enrolled with by default
- Click the Save button
- That's it! Logging in with Eeze has been fully configured!


|
hcash
2.0.0
hcash
|
Namespaces | |
| api | |
| blockchain | |
| cli | |
| client | |
| db | |
| lua | |
| net | |
| rpc | |
| rpc_stubs | |
| utilities | |
| wallet | |
lua module injector header in hsrcore
lua module injector header in hsrcore
This code has no hsr dependencies, and it could be moved to fc, if fc ever adds a leveldb dependency
This code enables legacy databases files created by older programs to be upgraded to the current database formats. Whenever a database is first opened, this code checks if the database is stored in an old format and looks for an upgrade function to upgrade it to the current format. If found, the objects in the database will be immediately upgraded to the current format.
Upgrades are performed by executing a series of chained copy constructors from the legacy object format to the current object format. This means that only one new copy constructor typically needs to be written to support upgrading any previous version of the object when an object type is modified.


{% extends "global/Page.html" %} {% load staticfiles otree_tags %} {% block title %}
First, you will read the instructions for Part {{ Constants.part_fluid }}.
Then, you will participate in Part {{ Constants.part_fluid }} for {{ Constants.rounds_fixed }} rounds.
You will be paid for one of the {{ Constants.rounds_fixed }} rounds in Part {{ Constants.part_fluid }}.
As in Part {{ Constants.part_fixed }}, at the end of the study, the computer will randomly choose which round
will be used for payment.


{% if current_user.has_role("admin") %} {% set source = search_query_source( term=[ {"admin.editor.exact" : current_user.id}, {"index.application_type.exact" : "new application"} ], sort=[{"admin.date_applied": {"order": "asc"}}] ) %} All priority tasks have been done. Check your queue for more open applications {% elif current_user.has_role("editor") %} {% set source = search_query_source( term=[ {"index.application_type.exact" : "new application"} ], sort=[{"admin.date_applied": {"order": "asc"}}] ) %} All priority tasks have been done. Check your queue for more open applications. If you need more applications to be assigned to your group, contact your Managing Editor. {% elif current_user.has_role("associate_editor") %} {% set source = search_query_source( term=[ {"index.application_type.exact" : "new application"} ], sort=[{"admin.date_applied": {"order": "asc"}}] ) %} All priority tasks have been done. Check your queue for more open applications. If you need more to be assigned to you, contact your Editor or Managing Editor. {% endif %}


GETGRENT
Section: Linux Programmer's Manual (3)
Updated: 2014-08-19
Index
Return to Main Contents
NAME
getgrent, setgrent, endgrent - get group file entry
SYNOPSIS
#include <sys/types.h>
#include <grp.h>
struct group *getgrent(void);
void setgrent(void);
void endgrent(void);
Feature Test Macro Requirements for glibc (see
feature_test_macros(7)):
setgrent():
-
_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED ||
/* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
getgrent(),
endgrent():
-
_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
DESCRIPTION
The
getgrent()
function returns a pointer to a structure containing
the broken-out fields of a record in the group database
(e.g., the local group file
/etc/group,
NIS, and LDAP).
The first time
getgrent()
is called,
it returns the first entry; thereafter, it returns successive entries.
The
setgrent()
function rewinds to the beginning
of the group database, to allow repeated scans.
The
endgrent()
function is used to close the group database
after all processing has been performed.
The group structure is defined in <grp.h> as follows:
struct group {
char *gr_name; /* group name */
char *gr_passwd; /* group password */
gid_t gr_gid; /* group ID */
char **gr_mem; /* NULL-terminated array of pointers
to names of group members */
};
For more information about the fields of this structure, see
group(5).
RETURN VALUE
The
getgrent()
function returns a pointer to a
group
structure,
or NULL if there are no more entries or an error occurs.
Upon error,
errno
may be set.
If one wants to check
errno
after the call, it should be set to zero before the call.
The return value may point to a static area, and may be overwritten
by subsequent calls to
getgrent(),
getgrgid(3),
or
getgrnam(3).
(Do not pass the returned pointer to
free(3).)
ERRORS
- EINTR
-
A signal was caught.
- EIO
-
I/O error.
- EMFILE
-
The calling process already has too many open files.
- ENFILE
-
Too many open files in the system.
- ENOMEM
-
Insufficient memory to allocate
group
structure.
- ERANGE
-
Insufficient buffer space supplied.
FILES
- /etc/group
-
local group database file
ATTRIBUTES
Multithreading (see pthreads(7))
The
getgrent()
function is not thread-safe.
The
setgrent()
and
endgrent()
functions are thread-safe.
CONFORMING TO
SVr4, 4.3BSD, POSIX.1-2001.
SEE ALSO
fgetgrent(3),
getgrent_r(3),
getgrgid(3),
getgrnam(3),
getgrouplist(3),
putgrent(3),
group(5)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ERRORS
-
- FILES
-
- ATTRIBUTES
-
- Multithreading (see pthreads(7))
-
- CONFORMING TO
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 02:55:10 GMT, September 18, 2014


Update user subscription
Please correct the following error(s):
- {{ error }}
Explore official resources
- Check out recent Azure releases.
Azure updates - See where we're heading. Check out upcoming changes to Azure products.
Azure roadmap - Hear from experts and developers about the latest Azure news.
Blog - Tell us what you think of Azure and what you want to see in the future.
Provide feedback


ABOUT THE AUTHOR
C.J.Date is an independent author, lecturer, researcher, and consultant special-izing in relational database systems. He was one of the first persons anywhere to recog-nize the fundamental importance of Codd's pioneering work on the relational model. He was also involved in technical planning for the IBM products SQL/DS and DB2 at the IBM Santa Teresa Laboratory in San Jose, California. He is best known for his books, in particular An Introduction to Database Systems, Eighth Edition (Addison-Wesley, 2004), the standard text in the field, which has sold nearly three quarters of a million copies world-wide, and (with Hugh Darwen and Nikos A. Lorentzos) Temporal Data and the Relational Model (Morgan Kaufmann, 2003). He enjoys a reputation that is second to none for his ability to explain complex technical material in a clear and understandable fashion.
|


title=JoshLong.com on EC2 date=2009-07-19 type=post tags=blog status=published ~~~~~~
This is my first working version of the system being posted from the EC2 cloud. Performance seems alright. I'll update as I dig more into the capabilities. So far getting things up and running has been relatively painless. There's something inherently awesome about being able to login and setup your own server without having to beg for certain extra capabilities.
I like most that this could eventually grow with a minimum of fuss.


Chapter 7¶
This is the seventh in a series of notebooks related to astronomy data.
As a continuing example, we will replicate part of the analysis in a recent paper, “Off the beaten path: Gaia reveals GD-1 stars outside of the main stream” by Adrian M. Price-Whelan and Ana Bonaca.
In the previous notebook we selected photometry data from Pan-STARRS and used it to identify stars we think are likely to be in GD-1
In this notebook, we’ll take the results from previous lessons and use them to make a figure that tells a compelling scientific story.
Outline¶
Here are the steps in this notebook:
Starting with the figure from the previous notebook, we’ll add annotations to present the results more clearly.
The we’ll see several ways to customize figures to make them more appealing and effective.
Finally, we’ll see how to make a figure with multiple panels or subplots.
After completing this lesson, you should be able to
Design a figure that tells a compelling story.
Use Matplotlib features to customize the appearance of figures.
Generate a figure with multiple subplots.
Installing libraries¶
If you are running this notebook on Colab, you can run the following cell to install Astroquery and a the other libraries we’ll use.
If you are running this notebook on your own computer, you might have to install these libraries yourself.
If you are using this notebook as part of a Carpentries workshop, you should have received setup instructions.
TODO: Add a link to the instructions.
# If we're running on Colab, install libraries
import sys
IN_COLAB = 'google.colab' in sys.modules
if IN_COLAB:
!pip install astroquery astro-gala pyia python-wget
Making Figures That Tell a Story¶
So far the figure we’ve made have been “quick and dirty”. Mostly we have used Matplotlib’s default style, although we have adjusted a few parameters, like markersize
and alpha
, to improve legibility.
Now that the analysis is done, it’s time to think more about:
Making professional-looking figures that are ready for publication, and
Making figures that communicate a scientific result clearly and compellingly.
Not necessarily in that order.
Let’s start by reviewing Figure 1 from the original paper. We’ve seen the individual panels, but now let’s look at the whole thing, along with the caption:
Exercise: Think about the following questions:
What is the primary scientific result of this work?
What story is this figure telling?
In the design of this figure, can you identify 1-2 choices the authors made that you think are effective? Think about big-picture elements, like the number of panels and how they are arranged, as well as details like the choice of typeface.
Can you identify 1-2 elements that could be improved, or that you might have done differently?
Some topics that might come up in this discussion:
The primary result is that the multiple stages of selection make it possible to separate likely candidates from the background more effectively than in previous work, which makes it possible to see the structure of GD-1 in “unprecedented detail”.
The figure documents the selection process as a sequence of steps. Reading right-to-left, top-to-bottom, we see selection based on proper motion, the results of the first selection, selection based on color and magnitude, and the results of the second selection. So this figure documents the methodology and presents the primary result.
It’s mostly black and white, with minimal use of color, so it will work well in print. The annotations in the bottom left panel guide the reader to the most important results. It contains enough technical detail for a professional audience, but most of it is also comprehensible to a more general audience. The two left panels have the same dimensions and their axes are aligned.
Since the panels represent a sequence, it might be better to arrange them left-to-right. The placement and size of the axis labels could be tweaked. The entire figure could be a little bigger to match the width and proportion of the caption. The top left panel has unnused white space (but that leaves space for the annotations in the bottom left).
Plotting GD-1¶
Let’s start with the panel in the lower left. The following cell reloads the data.
import os
from wget import download
filename = 'gd1_merged.hdf5'
path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
if not os.path.exists(filename):
print(download(path+filename))
import pandas as pd
selected = pd.read_hdf(filename, 'selected')
import matplotlib.pyplot as plt
def plot_second_selection(df):
x = df['phi1']
y = df['phi2']
plt.plot(x, y, 'ko', markersize=0.7, alpha=0.9)
plt.xlabel('$\phi_1$ [deg]')
plt.ylabel('$\phi_2$ [deg]')
plt.title('Proper motion + photometry selection', fontsize='medium')
plt.axis('equal')
And here’s what it looks like.
plt.figure(figsize=(10,2.5))
plot_second_selection(selected)
Annotations¶
The figure in the paper uses three other features to present the results more clearly and compellingly:
A vertical dashed line to distinguish the previously undetected region of GD-1,
A label that identifies the new region, and
Several annotations that combine text and arrows to identify features of GD-1.
As an exercise, choose any or all of these features and add them to the figure:
To draw vertical lines, see
plt.vlines
andplt.axvline
.To add text, see
plt.text
.To add an annotation with text and an arrow, see plt.annotate.
And here is some additional information about text and arrows.
# Solution
# plt.axvline(-55, ls='--', color='gray',
# alpha=0.4, dashes=(6,4), lw=2)
# plt.text(-60, 5.5, 'Previously\nundetected',
# fontsize='small', ha='right', va='top');
# arrowprops=dict(color='gray', shrink=0.05, width=1.5,
# headwidth=6, headlength=8, alpha=0.4)
# plt.annotate('Spur', xy=(-33, 2), xytext=(-35, 5.5),
# arrowprops=arrowprops,
# fontsize='small')
# plt.annotate('Gap', xy=(-22, -1), xytext=(-25, -5.5),
# arrowprops=arrowprops,
# fontsize='small')
Customization¶
Matplotlib provides a default style that determines things like the colors of lines, the placement of labels and ticks on the axes, and many other properties.
There are several ways to override these defaults and customize your figures:
To customize only the current figure, you can call functions like
tick_params
, which we’ll demonstrate below.To customize all figures in a notebook, you use
rcParams
.To override more than a few defaults at the same time, you can use a style sheet.
As a simple example, notice that Matplotlib puts ticks on the outside of the figures by default, and only on the left and bottom sides of the axes.
To change this behavior, you can use gca()
to get the current axes and tick_params
to change the settings.
Here’s how you can put the ticks on the inside of the figure:
plt.gca().tick_params(direction='in')
Exercise: Read the documentation of tick_params
and use it to put ticks on the top and right sides of the axes.
# Solution
# plt.gca().tick_params(top=True, right=True)
rcParams¶
If you want to make a customization that applies to all figures in a notebook, you can use rcParams
.
Here’s an example that reads the current font size from rcParams
:
plt.rcParams['font.size']
10.0
And sets it to a new value:
plt.rcParams['font.size'] = 14
Exercise: Plot the previous figure again, and see what font sizes have changed. Look up any other element of rcParams
, change its value, and check the effect on the figure.
If you find yourself making the same customizations in several notebooks, you can put changes to rcParams
in a matplotlibrc
file, which you can read about here.
Style sheets¶
The matplotlibrc
file is read when you import Matplotlib, so it is not easy to switch from one set of options to another.
The solution to this problem is style sheets, which you can read about here.
Matplotlib provides a set of predefined style sheets, or you can make your own.
The following cell displays a list of style sheets installed on your system.
plt.style.available
['Solarize_Light2',
'_classic_test_patch',
'bmh',
'classic',
'dark_background',
'fast',
'fivethirtyeight',
'ggplot',
'grayscale',
'seaborn',
'seaborn-bright',
'seaborn-colorblind',
'seaborn-dark',
'seaborn-dark-palette',
'seaborn-darkgrid',
'seaborn-deep',
'seaborn-muted',
'seaborn-notebook',
'seaborn-paper',
'seaborn-pastel',
'seaborn-poster',
'seaborn-talk',
'seaborn-ticks',
'seaborn-white',
'seaborn-whitegrid',
'tableau-colorblind10']
Note that seaborn-paper
, seaborn-talk
and seaborn-poster
are particularly intended to prepare versions of a figure with text sizes and other features that work well in papers, talks, and posters.
To use any of these style sheets, run plt.style.use
like this:
plt.style.use('fivethirtyeight')
The style sheet you choose will affect the appearance of all figures you plot after calling use
, unless you override any of the options or call use
again.
Exercise: Choose one of the styles on the list and select it by calling use
. Then go back and plot one of the figures above and see what effect it has.
If you can’t find a style sheet that’s exactly what you want, you can make your own. This repository includes a style sheet called az-paper-twocol.mplstyle
, with customizations chosen by Azalee Bostroem for publication in astronomy journals.
The following cell downloads the style sheet.
import os
filename = 'az-paper-twocol.mplstyle'
path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
if not os.path.exists(filename):
print(download(path+filename))
You can use it like this:
plt.style.use('./az-paper-twocol.mplstyle')
The prefix ./
tells Matplotlib to look for the file in the current directory.
As an alternative, you can install a style sheet for your own use by putting it in your configuration directory. To find out where that is, you can run the following command:
import matplotlib as mpl
mpl.get_configdir()
LaTeX fonts¶
When you include mathematical expressions in titles, labels, and annotations, Matplotlib uses mathtext
to typeset them. mathtext
uses the same syntax as LaTeX, but it provides only a subset of its features.
If you need features that are not provided by mathtext
, or you prefer the way LaTeX typesets mathematical expressions, you can customize Matplotlib to use LaTeX.
In matplotlibrc
or in a style sheet, you can add the following line:
text.usetex : true
Or in a notebook you can run the following code.
plt.rcParams['text.usetex'] = True
plt.rcParams['text.usetex'] = True
If you go back and draw the figure again, you should see the difference.
If you get an error message like
LaTeX Error: File `type1cm.sty' not found.
You might have to install a package that contains the fonts LaTeX needs. On some systems, the packages texlive-latex-extra
or cm-super
might be what you need. See here for more help with this.
In case you are curious, cm
stands for Computer Modern, the font LaTeX uses to typeset math.
Multiple panels¶
So far we’ve been working with one figure at a time, but the figure we are replicating contains multiple panels, also known as “subplots”.
Confusingly, Matplotlib provides three functions for making figures like this: subplot
, subplots
, and subplot2grid
.
subplot
is simple and similar to MATLAB, so if you are familiar with that interface, you might likesubplot
subplots
is more object-oriented, which some people prefer.subplot2grid
is most convenient if you want to control the relative sizes of the subplots.
So we’ll use subplot2grid
.
All of these functions are easier to use if we put the code that generates each panel in a function.
Upper right¶
To make the panel in the upper right, we have to reload centerline
.
import os
filename = 'gd1_dataframe.hdf5'
path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
if not os.path.exists(filename):
print(download(path+filename))
import pandas as pd
centerline = pd.read_hdf(filename, 'centerline')
And define the coordinates of the rectangle we selected.
pm1_min = -8.9
pm1_max = -6.9
pm2_min = -2.2
pm2_max = 1.0
pm1_rect = [pm1_min, pm1_min, pm1_max, pm1_max]
pm2_rect = [pm2_min, pm2_max, pm2_max, pm2_min]
To plot this rectangle, we’ll use a feature we have not seen before: Polygon
, which is provided by Matplotlib.
To create a Polygon
, we have to put the coordinates in an array with x
values in the first column and y
values in the second column.
import numpy as np
vertices = np.transpose([pm1_rect, pm2_rect])
vertices
array([[-8.9, -2.2],
[-8.9, 1. ],
[-6.9, 1. ],
[-6.9, -2.2]])
The following function takes a DataFrame
as a parameter, plots the proper motion for each star, and adds a shaded Polygon
to show the region we selected.
from matplotlib.patches import Polygon
def plot_proper_motion(df):
pm1 = df['pm_phi1']
pm2 = df['pm_phi2']
plt.plot(pm1, pm2, 'ko', markersize=0.3, alpha=0.3)
poly = Polygon(vertices, closed=True,
facecolor='C1', alpha=0.4)
plt.gca().add_patch(poly)
plt.xlabel('$\mu_{\phi_1} [\mathrm{mas~yr}^{-1}]$')
plt.ylabel('$\mu_{\phi_2} [\mathrm{mas~yr}^{-1}]$')
plt.xlim(-12, 8)
plt.ylim(-10, 10)
Notice that add_patch
is like invert_yaxis
; in order to call it, we have to use gca
to get the current axes.
Here’s what the new version of the figure looks like. We’ve changed the labels on the axes to be consistent with the paper.
plt.rcParams['text.usetex'] = False
plt.style.use('default')
plot_proper_motion(centerline)
Upper left¶
Now let’s work on the panel in the upper left. We have to reload candidates
.
import os
filename = 'gd1_candidates.hdf5'
path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
if not os.path.exists(filename):
print(download(path+filename))
import pandas as pd
filename = 'gd1_candidates.hdf5'
candidate_df = pd.read_hdf(filename, 'candidate_df')
Here’s a function that takes a DataFrame
of candidate stars and plots their positions in GD-1 coordindates.
def plot_first_selection(df):
x = df['phi1']
y = df['phi2']
plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)
plt.xlabel('$\phi_1$ [deg]')
plt.ylabel('$\phi_2$ [deg]')
plt.title('Proper motion selection', fontsize='medium')
plt.axis('equal')
And here’s what it looks like.
plot_first_selection(candidate_df)
Lower right¶
For the figure in the lower right, we need to reload the merged DataFrame
, which contains data from Gaia and photometry data from Pan-STARRS.
import pandas as pd
filename = 'gd1_merged.hdf5'
merged = pd.read_hdf(filename, 'merged')
From the previous notebook, here’s the function that plots the color-magnitude diagram.
import matplotlib.pyplot as plt
def plot_cmd(table):
"""Plot a color magnitude diagram.
table: Table or DataFrame with photometry data
"""
y = table['g_mean_psf_mag']
x = table['g_mean_psf_mag'] - table['i_mean_psf_mag']
plt.plot(x, y, 'ko', markersize=0.3, alpha=0.3)
plt.xlim([0, 1.5])
plt.ylim([14, 22])
plt.gca().invert_yaxis()
plt.ylabel('$g_0$')
plt.xlabel('$(g-i)_0$')
And here’s what it looks like.
plot_cmd(merged)
Exercise: Add a few lines to plot_cmd
to show the Polygon we selected as a shaded area.
Run these cells to get the polygon coordinates we saved in the previous notebook.
import os
filename = 'gd1_polygon.hdf5'
path = 'https://github.com/AllenDowney/AstronomicalData/raw/main/data/'
if not os.path.exists(filename):
print(download(path+filename))
coords_df = pd.read_hdf(filename, 'coords_df')
coords = coords_df.to_numpy()
coords
array([[ 0.21505376, 17.5481972 ],
[ 0.38978495, 18.94628403],
[ 0.53763441, 19.90286976],
[ 0.70340502, 20.60191317],
[ 0.82885305, 21.30095659],
[ 0.66308244, 21.52170714],
[ 0.43010753, 20.78587196],
[ 0.27329749, 19.71891096],
[ 0.17473118, 18.68874172],
[ 0.17473118, 17.95290655]])
# Solution
#poly = Polygon(coords, closed=True,
# facecolor='C1', alpha=0.4)
#plt.gca().add_patch(poly)
Subplots¶
Now we’re ready to put it all together. To make a figure with four subplots, we’ll use subplot2grid
, which requires two arguments:
shape
, which is a tuple with the number of rows and columns in the grid, andloc
, which is a tuple identifying the location in the grid we’re about to fill.
In this example, shape
is (2, 2)
to create two rows and two columns.
For the first panel, loc
is (0, 0)
, which indicates row 0 and column 0, which is the upper-left panel.
Here’s how we use it to draw the four panels.
shape = (2, 2)
plt.subplot2grid(shape, (0, 0))
plot_first_selection(candidate_df)
plt.subplot2grid(shape, (0, 1))
plot_proper_motion(centerline)
plt.subplot2grid(shape, (1, 0))
plot_second_selection(selected)
plt.subplot2grid(shape, (1, 1))
plot_cmd(merged)
poly = Polygon(coords, closed=True,
facecolor='C1', alpha=0.4)
plt.gca().add_patch(poly)
plt.tight_layout()
We use plt.tight_layout
at the end, which adjusts the sizes of the panels to make sure the titles and axis labels don’t overlap.
Exercise: See what happens if you leave out tight_layout
.
Adjusting proportions¶
In the previous figure, the panels are all the same size. To get a better view of GD-1, we’d like to stretch the panels on the left and compress the ones on the right.
To do that, we’ll use the colspan
argument to make a panel that spans multiple columns in the grid.
In the following example, shape
is (2, 4)
, which means 2 rows and 4 columns.
The panels on the left span three columns, so they are three times wider than the panels on the right.
At the same time, we use figsize
to adjust the aspect ratio of the whole figure.
plt.figure(figsize=(9, 4.5))
shape = (2, 4)
plt.subplot2grid(shape, (0, 0), colspan=3)
plot_first_selection(candidate_df)
plt.subplot2grid(shape, (0, 3))
plot_proper_motion(centerline)
plt.subplot2grid(shape, (1, 0), colspan=3)
plot_second_selection(selected)
plt.subplot2grid(shape, (1, 3))
plot_cmd(merged)
poly = Polygon(coords, closed=True,
facecolor='C1', alpha=0.4)
plt.gca().add_patch(poly)
plt.tight_layout()
This is looking more and more like the figure in the paper.
Exercise: In this example, the ratio of the widths of the panels is 3:1. How would you adjust it if you wanted the ratio to be 3:2?
Summary¶
In this notebook, we reverse-engineered the figure we’ve been replicating, identifying elements that seem effective and others that could be improved.
We explored features Matplotlib provides for adding annotations to figures – including text, lines, arrows, and polygons – and several ways to customize the appearance of figures. And we learned how to create figures that contain multiple panels.
Best practices¶
The most effective figures focus on telling a single story clearly and compellingly.
Consider using annotations to guide the readers attention to the most important elements of a figure.
The default Matplotlib style generates good quality figures, but there are several ways you can override the defaults.
If you find yourself making the same customizations on several projects, you might want to create your own style sheet.


Headphones R US
Product Page
About
Products
Sort By
ID
Brand (A-Z)
Style (A-Z)
Price
High-Low
Low-High
Connection
View All
Wireless


Gold
{{population.gold}}
Wood
{{population.wood}}
Stone
{{population.stone}}
Food
{{population.food}}
Silver
{{population.silver}}
Platinum
{{population.platinum}}


Calling event.pause() works similar to
event.stopImmediatePropagation() and
stops calling other event handlers for the event.
When event.resume() is called, it will continue calling events on event handlers
after the 'paused' event handler.
Pause-able events complement the default
event plugin, providing the ability to easy create widgets with
an asynchronous API.
Limitations
The element and event handler that the pause is within can not be removed before
resume is called.
Example
The following example implements a tabs widget using CanJS which uses jQuery.fn.triggerAsync to hide the tab:
can.Control("Tabs", {
init : function (el) {
$(el).children("li:first").addClass('active');
var tab = this.tab;
this.element.children("li:gt(0)").each(function () {
tab($(this)).hide()
})
},
tab : function (li) {
return $(li.find("a").attr("href").match(/#.*/)[0])
},
"li click" : function (el, ev) {
ev.preventDefault();
var active = this.element.find('.active')
old = this.tab(active),
cur = this.tab(el);
old.triggerAsync('hide', function () {
active.removeClass('active')
old.slideUp(function () {
el.addClass('active')
cur.slideDown()
});
})
}
})
Each tab panel contains a form to input data and has a Dirtybit control attached to it which keeps track if the form has been saved or not. When the form data changes and you go to another tab The Saver widget will pause the hide event and show a modal that allows you to save the form, or cancel to stay in the current tab. Saving the data will send a POST Ajax request and resume the event when it returns:
can.Control("Saver", {
}, {
" hide" : function (el, ev) {
if (el.hasClass('dirty')) {
ev.pause()
new Modal('#modal', {
yes : function () {
var save = $('Saving').appendTo(el);
$.post("/update", el.serialize(), function () {
save.remove();
el.trigger('set');
ev.resume();
})
},
no : function () {
ev.resume();
},
cancel : function () {
ev.preventDefault();
ev.resume();
}
})
}
}
});
jQuery.event.pause
adds the ability to pause and resume events.Calling
event.pause()
works similar to event.stopImmediatePropagation() and stops calling other event handlers for the event. Whenevent.resume()
is called, it will continue calling events on event handlers after the 'paused' event handler.Pause-able events complement the default event plugin, providing the ability to easy create widgets with an asynchronous API.
Limitations
The element and event handler that the
pause
is within can not be removed before resume is called.Example
The following example implements a
tabs
widget using CanJS which usesjQuery.fn.triggerAsync
to hide the tab:Each tab panel contains a form to input data and has a
Dirtybit
control attached to it which keeps track if the form has been saved or not. When the form data changes and you go to another tab TheSaver
widget will pause thehide
event and show a modal that allows you to save the form, or cancel to stay in the current tab. Saving the data will send a POST Ajax request and resume the event when it returns:


Through this effect a macro is executed, what means a simple set of default effects are launched. The effect launches all the effects assigned to the macro.
Create a launch macro effect:
Select in this panel among the created macros for the project. Note that we can not create this effect if we are selecting effects for a macro, or if there is no macro created.


PouchDB
The JavaScript Database that Syncs!
Production (Nightly)
Development (Nightly)
Download PouchDB
What is PouchDB?
API Documentation
Wiki
Mailing List
Source & Issues
Twitter
{{ content }}


Log in to check/update your appointment bookings and update your personal details.
Please type in the email address you used for signup and we will send you the new password.
I would like to subscribe to KPJ Sentosa KL Specialist Hospital's newsletter and get latest news & events, promotions & packages.
Password must be at least 12 characters. The combination of the password must be alphanumeric with one special character (eg. ! @ # $ % ^ & * ( ) _ + { } | : < > ? " \ [ ] ' ; / . ~ `)
All Topics by Letters


Our Bloomingdales Registry
Click Here to go to our Bloomingdales Registry
We shop at Bloomingdales ALOT. The registry here has all of the essentials that we might need to start our married life with.
Our Crate & Barrel Registry
Click Here to go to our Crate & Barrel Registry
We want to start our married life with some stylish utensils and chic looking dishes. There is no better place than Crate & Barrel for these type of items!


See: Description
| Interface | Description |
|---|---|
| BarTimeChartData<S extends PeriodSetPlot> | |
| ChartData<P extends Plot> |
Interface for objects that represent the actual Chart graphic Objects
implementing this interface are intended to be the graphic-library internal
implementation of chart objects.
|
| PeriodChartData<P extends PeriodPlot> | |
| PeriodPlot |
A
SetPlot where each data value in a set corresponds to a period of time. |
| PeriodSequencePlot |
Each set of data consists of a sequence of time periods.
|
| PeriodSetPlot | |
| PieChartData<P extends SingleValueSetPlot> |
A ChartData that represents a PieChart
|
| PieTimeChartData<P extends PeriodSetPlot> | |
| Plot |
A class representing plot data
|
| ScatterPeriodChartData<P extends ScatterPeriodPlot> | |
| ScatterPeriodPlot | |
| SetPlot |
Plot represents the Data in the chart being created.
|
| SingleValueSetPlot |
This is a Plot where each member of the set only contain a single value.
|
| TimeChartData<P extends PeriodSequencePlot> |
A ChartData that represents a TimeChart
|
| Class | Description |
|---|---|
| AbstractPeriodSetPlot | |
| AbstractSingleValueSetPlot |
This is a abstract superclass for
SingleValueSetPlot that implements the methods from SetPlot via the additional methods in SingleValueSetPlot . |
| BarTimeChart<S extends PeriodSetPlot> |
BarTimeChart This is the bar chart equivalent of a TimeChart
and is functionally equivalent to
PieTimeChart . |
| Chart<P extends Plot> |
Chart is a base class for chart generation.
|
| GenericSetPlot |
generic version of plot for use where the underlying data-model of the
graphics class is radically different
|
| GenericSplitSetPlot |
generic version of plot for use where the underlying datamodel of the
graphics class is radically different
|
| GraphService |
An
AppContextService that selects the desired chart implementation classes |
| ListSorter |
ListSorter sorts an array of indecies according to the values in an array
|
| PeriodChart<P extends PeriodPlot> |
PeriodChart is a
Chart where the data represents a plot over some period of time. |
| PieChart |
A basic piechart where the data comes from a Table or Map
|
| PieTimeChart<P extends PeriodSetPlot> |
PieTimeChart This is the PieChart equivalent of a TimeChart It plots the sum
of quantities over a period and uses the same mapping classes the intention
is that you can use this to generate piecharts and timecharts interchangably.
|
| ScatterPeriodChart<P extends ScatterPeriodPlot> |
A
ScatterPeriodChart is a scatter plot where each point
is generated by a different time period. |
| SetPeriodChart<P extends PeriodPlot> |
PeriodChart s that represent a set of values such as
a pie-chart of bar-chart. |
| SplitSetPlot |
A SplitSetPlot is a
PeriodSequencePlot where the data is split over a series of time periods
The time periods are divided into Major/Minor sub-divisions called
Catagories and Items. |
| TimeChart<P extends PeriodSequencePlot> |
A helper class used to make graphs
Basic constructors define the time range, We then use call methods that add
additional plots these return the
PeriodSequencePlot so we can add data with the addData
methods. |
| Exception | Description |
|---|---|
| InvalidTransformException |
Exception thrown when a problem occurs mapping data to a plot
|


Stay healthy, live longer with top quality herbal products that are known to work. Take good care of yourself check out www.ariseandshine.com. You will find a wide range of herbal products for your complete body. These products are chemical free and do not have harmful side effects. They are made from natural ingredients and are highly effective. Use our discount coupons to get a great price.
Arise and Shine is an herbal product company that specializes in high quality herbal formulas that are safe and effective. Their flagship product for over 20 years is a highly effective cleansing product. They also have a number of all natural daily products. There are many items that will help you fight stress, boost your energy, and improve your day to day life. You can get anti- oxidants, anti-parasite dietary support. There are very affective products for your bone and joint health, for your cardiovascular health, brain and eye health and lots of great products at great affordable prices. Check it out.
www.ariseandshine.com has a nice selection of great products that will make your everyday life healthy, happy and full of energy. Take care of your bladder and kidney and heart and lungs. Improve the quality of your life by improving your everyday health. Check out herbal products that are good for you and your body. All products are made from the highest quality ingredients and are perfectly safe and chemical free. For affordable, healthy, side effect free products visit www.ariseandshine.com and use the easy to navigate website to find products that you need. Save money by using our coupons.