Organizations are rapidly moving their IT infrastructure on public clouds and using their native services. AWS cloud remains to be the mostly widely used public cloud service. Development and IT teams are adopting cloud services and deploying their infrastructure to scale up their operations. Cloud security is another aspect where the security team of an organization should work together with the development and operation teams. Cloud security refers to a broad set of policies, controls, procedures, and technologies that work together to protect cloud-based systems, data, and infrastructure.
Motivation
Cloud security is a popular topic in the industry as organizations migrate their IT from on-premise to cloud environment. Security professionals also need to upskill their knowledge as per industry requirements and enhance their overall knowledge and understanding of cloud security. When I started learning cloud security and practicing practical hands-on skills, I struggled initially to find tutorials on cloud security. I will try to cover all concepts and hands-on step by step tutorial through a series of posts. We will start with setting up the environment and perform an AWS configuration security review. Also, we will explore multiple AWS security misconfigurations that expose sensitive information or take control of hosted applications.
In this post, we will talk about AWS “Shared Responsibility Model” and then set up an AWS Free tier account. We will also set up AWS CLI to perform some actions from commands in your terminal. This blog post is for beginners and for those who never used AWS services.
Shared Responsibility Model
Before starting the tutorial it is important to understand the shared responsibility model in cloud computing. Amazon Web Services (AWS) has developed a shared responsibility model to regulate the security and compliance of its end-users. Your cloud provider is responsible for making sure your infrastructure built within its platform is secure and reliable. On the other hand, customizable cloud capabilities like application management, network configuration, and encryption are the responsibilities of end-users.
According to the Gartner report, it is expected that over the next upcoming years, at least 95% of cloud security failures will be the customer’s fault, and due to misconfiguration of implementation. So it is essential to review cloud configuration and implementation of cloud-native services periodically to protect assets on the public cloud.
Setup AWS Account
In order to start with, we need an AWS account and set up users with appropriate permissions. You can sign up for an AWS Free Tier account and get access to the AWS cloud.
Follow the steps given below to Sign Up AWS Free Tier account:
- Go to AWS Free Tier https://aws.amazon.com/free/ and click on create a free account.
- Provide your details and signup with an AWS free tier account.
Setting Up Identity And Access Management
Once you have signed up you need to configure your AWS account and make sure security best practices are implemented in your IAM after signing up with the AWS account.
Go to Services > IAM to configure your account.
As you can see in your account, most of the security status flags are showing warnings and you need to configure all of them by following instructions.
Activate Multi-Factor Authentication (MFA)
Activate your multi-factor authentication (MFA) using any Virtual MFA device. In my case, I am using an Authy app to configure multi-factor authentication.
Create Individual IAM Users
Create two user accounts one is an Admin and another Audit user to access your AWS account through programmatically and console. Do not use your AWS root account for day-to-day interaction with AWS. Learn More
Create an admin group and attach it with admin users. You needed to select permission of the admin group as AdministratorAccess.
Note and store securely your admin account Access key ID and Secret access key.
Next, create an audit user account similar to how we have created an admin account. We will use an audit user account for our further activities.
Select “Attach existing policies directly” and attach below policies shown in the below pictures.
- SecurityAudit
- ReadOnlyAccess
Set Password Policy
Setup you password policy
AWS Command Line Interface
The AWS Command Line Interface (AWS CLI ) is a tool that allows you to interact with AWS services using commands in your command-line shell. It requires minimal configuration and enables you to start running commands that implement functionality equivalent to that provided by the browser-based AWS management console from the command prompt in your terminal.
In order to install AWS CLI, follow the below given instruction in AWS official website:
AWS CLI Configuration
AWS CLI configuration required AWS Access key ID, AWS Secret access key, and AWS Region.
This information was found while creating users that you noted. We’ll be using the audit user’s access key and secret key.
Type the below command to configure AWS keys and provide your AWS Access Key ID, AWS Secret Access key and region you preferred :
aws configure
CLI credentials file – The credentials and config file are updated when you run the command aws configure. The credentials file is located at ~/.aws/credentials
on Linux or macOS, or at C:\Users\USERNAME\.aws\credentials
on Windows. This file can contain the credential details for the default profile and any named profiles.
Getting Started With AWS CLI
To start with AWS CLI it is very important to have AWS CLI Command Reference which provides a consistent interface for interacting with all parts of AWS.
We are going to widely use the AWS CLI Command reference that helps us explore all parts of AWS services. Using AWS CLI you can perform all actions in your AWS account such as create a user, group, policy even you can delete, modify, and update users through IAM.
Let’s explore some of the IAM functionality using AWS CLI by running some commands.
We are going to widely use the AWS CLI Command reference that helps us explore all parts of AWS services. Using AWS CLI you can perform all actions in your AWS account such as create a user, group, policy even you can delete, modify, and update users through IAM.
Let’s explore some of the IAM functionality using AWS CLI by running some commands.
Create A New User
aws iam create-user --user-name Bob
As you can see below, the picture from the AWS console, user was created successfully.
Create Access Key
Now let’s create user’s access key by using the following command
aws iam create-access-key --user-name Bob
As you can see we have successfully created a user’s access key by using the AWS CLI command.
But our new user Bob does not have permission or not added to any group. So, our next task is to add Bob users to the admin group.
Let’s suppose you don’t know how many groups into an AWS account. You can get the list by below command and add any user to the group.
aws iam list-groups
Let’s add Bob user into AdminGroup by typing below command.
aws iam add-user-to-group --user-name Bob --group-name AdminGroup
As you can see in the picture below after running the above command Bob user added into AdminGroup and get access to all admin permission.
Now let’s delete Bob user from our AWS account by following the below command.
We Cannot delete the entity and must be removed from the group first and remove the access key from the user.
aws iam remove-user-from-group --user-name Bob --group-name AdminGroup
aws iam delete-access-key --access-key-id AKIDPMS9RO4H3FEXAMPLE --user-name Bob
aws iam delete-user --user-name Bob
These are just examples to show how AWS CLI works and we can access functionalities by running commands. In a similar manner, you can perform multiple actions from the command line which we will explore in future tutorial blog posts.
Conclusion
In this blog post, we’ve learned about AWS Shared Responsibility Model, then created an AWS account and set up AWS CLI to get comfortable with command-line functionality. In our next blog posts, we’ll explore more about AWS security configuration and implementation.
About Author
Anand Tiwari is a Senior Security Consultant at NotSoSecure with expertise in Web Application Security, Cloud Security and DevSecOps. He is also the author of an Open Source tool called ArcherySec.
References:
https://aws.amazon.com/compliance/shared-responsibility-model/
https://docs.aws.amazon.com/cli/latest/index.html
https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-mac.html
Edit me on Github


Considering #WordPress Plugin Development? Do a search on GitHub for “WordPress plugin“ and find all the sample code you ever wanted.
Let’s say, for example, I have a photo on Facebook that I want to use in a WordPress post. It’s Public so anyone with the URL can view it without even logging in. It’s not very difficult. Just get the image URL, add a new image block, and use the URL instead of uploading or selecting from the existing Media Library.
This seems to me like a common use case. It’s not just Facebook, either. There are countless popular websites that let people post their own images. Many of them are more focused on images than Facebook. It could be easier. It’d be great if there was an alternative Facebook Image block that I could add to my post. So, there must be a plugin for that, right? Well, maybe, but there are hundreds of Facebook plugins. Their descriptions mention galleries and feeds and posts, but none of them seem to succinctly say “Use Facebook photos in your posts.” So, let the trial and error begin.


What‘s the first organic search result in Google when you type in “technical recruiting?”
For me, the answer was a blog titled, “Why are technical recruiters so clueless?”, by none other than the creator of Ruby on Rails web development framework - David Heinemeier Hansson of 37Signals, known in the software community as DHH. In this blog, David Heinemeier Hansson opened with -
“Are there any recruiters working in technology who get it? Anyone putting in just a minimum of effort to appear even half-way competent? If so, they need to speak up. The reputation of their profession is being soiled by completely clueless hacks.”
DHH then included an actual email that he received from a recruiter, urging him to apply for “a rapidly expanding, VC-funded tech startup positioned squarely on top of the social media marketing revolution.” Here is an analogy for this situation - It’s like a recruiter asking Iron Chef Bobby Flay if he would like to apply for a position at a promising neighborhood eatery, and that his pay would “depend on his experience.”
DHH went on,
“If they’re just going to spam people from emails they find on tech sites, why not just pay some shady Russians to do it? […] The problem with this kind of hackery is that it has bred an outright animosity to recruiters in large parts of the tech world.”
Fast forwarding, the conclusion of his blog was -
“As things stand right now, though, I would never recommend the use of recruiters to anyone for a technical position. You’re much more likely to be associated with the incompetence of the recruiter than you are to find highly skilled technical talent.”
Among the 140+ comments on this blog, many shared similar experience.
Having been on both sides (being a programmer and being a recruiter), I understand why the programmers dislike thoughtless and impersonal phone calls and emails. I also see why recruiters are tempted to skip doing research before contacting programmers.
As a developer, you get bombarded with countless generic emails and messages constantly. It’d be awesome if the positions in these emails actually matched what you looked for in an ideal job. Unfortunately, 99% of these look nothing interesting, and you can’t stop them from coming.
As a recruiter, you wish you could prepare personalized sales pitch for each developer you reach out to and your email would create high level of interest. But, if you don’t even understand half of what’s in the job description and what these developers have been working on, you simply have no way to know how developers would think about the positions you’re recruiting for. While constantly being under the tremendous pressure to quickly bring candidates to the hiring managers, you decide to play the “numbers game.”
This means, if you saw in the past that you get a 1% response rate, you believe you need to send out emails to 300 developers to get 3 candidates for your hiring manager. It’s next to impossible for anyone to write 300 personalized emails given the time constraint, so your only option is to blast out a generic email to 300 people.
After reading this blog, I felt compelled to find ways to improve this situation and promote better communication and relationships between programmers and recruiters. Since the recruiters are those who initiate the interaction, here are some proactive steps recruiters can take:
- Have a basic level of understanding of technology: Know what your candidates and hiring mangers spend all day using and go beyond just keyword matching
- Understand what technical people value: Put yourself in technical talent’s shoes and know what is important in their work and career
- Be value-add for potential candidates: Offer job opportunities to developers because these opportunities improve their career, not just because you’ll fill a role or get paid
Doing these is not only for the developers’ benefits; doing these is also good for the recruiters. As a recruiter, the most valuable business asset is the relationship you build with people. Today, there is a short supply of developers. This shortage will last for the foreseeable future. This means your ability to connect with technical talent is the most crucial aspect to perform your work. The only way you can gain developers’ trust is when you put their interest before your own. Only then will you have a chance of building meaningful relationships with them.
I can’t wait to see the day when the technical recruiting profession being widely valued and recognized by the technical talent community as a partner in the software business ecosystem.


nnvm.graph¶
NNVM Graph IR API.
This is a developer API that is used to manipulate and transform graphs.
-
nnvm.graph.
create
(symbol)¶ Create a new graph from symbol.
-
class
nnvm.graph.
Graph
(handle)¶ Graph is the graph object that can be used to apply optimization pass.
It contains additional graphwise attribute besides the internal symbol.
-
apply
(passes)¶ Apply passes to the graph
-
ir
(join_entry_attrs=None, join_node_attrs=None)¶ Get text form of graph ir.
- Parameters
join_entry_attrs (list of str) – List of graph NodeEntry attribute to be printed along each operator.
join_node_attrs (list of str) – List of graph node attribute to be printed along each operator.
-
json
()¶ Get JSON representation of the graph
- Returns
json – JSON representation of the graph
- Return type
-


{% extends 'layout.html' %} {% load static %} {% block layout-content %} {% if student.is_payment_locked %}
Payment information linked can be found in the OTIS syllabus and in more detail in the parent info. All quantities below are in US dollars (USD).
Here is a link to a copy of the invoice that works without login (so obviously, only send this to people you trust).
This invoice was last updated on {{ invoice.updated_at }} server time.
Please contact me if you think there are any errors (I make mistakes every year!).
{% if student.semester.first_payment_deadline or student.semester.most_payment_deadline %}As a reminder, the payment deadlines are:
If you have an assistant instructor, that payment should be done separately.
{% if request.user.is_staff %}No invoice is currently available.
{% endif %} {% include 'dashboard/back_link.html' %} {% endblock %}


| Word | % Non-toxic | % Toxic |
|---|---|---|
| gay | 43 | 57 |
| lesbian | 68 | 32 |
| black | 86 | 14 |
“A Stanford unsupervised learning algorithm for obtaining vector representations for words. ”
| Word | Vector |
|---|---|
| the | [-0.550, -0.271, ... , 0.142, -1.139] |
| to | [ 0.325, 0.400, ... ,-0.740, -1.341] |
| of | [ 0.966, 0.579, ... , 0.038, -2.754] |
| and | [ 0.129, 0.663, ... , -0.302, -1.382] |
33 / 66
Toxic: 8 | S. Toxic: 6 | Obscene: 5
Threat: 9 | Insult: 5 | Hate: 6


“In the twenty-first century, the robot will take the place which slave labor occupied in ancient civilization.” -Nikola Tesla. We are now in the twenty-first century. Are we ready to make Tesla’s words come true? Enter the world of Robots through the SP ROBOTIC work shop .Do you have to be a tech or a topper? Of course not .Attend the workshop built your own bots.
VIT University, Near Katpadi Road, Vellore, Tamil Nadu 632014.
| ITEMS INCLUDED IN THE KIT | Qty |
|---|---|
| SP DUINO BOARD | 1 |
| SP STARTER SHIELD | 1 |
| SP AUTON SHIELD | 1 |
| SP IR SENSOR | 3 |
| CHASSIS (3 LAYERS) | 1 |
| MOTOR CLAMPS | 2 |
| MOTOR | 2 |
| WHEELS | 2 |
| CASTOR WHEEL | 1 |
| POWER BANK | 2 |
| USB A TO B CABLE | 1 |
| SCREW DRIVER | 1 |
| SCREWS & NUTS PACK | 1 |
| USB TO BARREL JACK | 1 |
| CONNECTOR |
A Workshop from SP Robotic Works is not a one day or two day interaction with the students – this is life-long! We provide a range of other services to the workshop students to get benefitted from the most active tech-community in India. Below are the some of the offerings that each participant would receive.
1. Will participation certificate will be provided?
You will receive participation certificate of kurukshetra
2. Do I need to carry laptops?
No. You can bring if possible
3. Do I need to have programming knowledge?
No, your interest is most suffice.
4.Do I need to carry any ID proof for the visit?
It is mandatory to carry your college ID card.
5.What is the cancellation/refund policy?
No refund on cancellation/no-show at the event.
6. Is there a dress code to be followed?
Wear comfortable semi-formals
7. Will Lunch be provided?
No, Lunch will not be provided.
 SP Robotic Works, one of India’s leading edu-tech companies helping students explore robotics through hands on curriculum guided by a unique gamified online platform. We offer programs with various levels of proficiency in which students, from 11+ years to graduates up to 50+ years - learn from the basics of electronics to building a walking robot. Our intent is to inspire Students to take on challenges confidently; relying on the skills they have developed through the robotic course.


Please provide the required data
population
timeToElapse
reportedCases
totalHospitalBeds
periodType
Days
Weeks
Months


I recently acquired a supply of 20mg Adderall pills intended to treat my ADD. I really don't believe that I have such a condition, but I certainly enjoy the medications. Anyway, I had been taking Adderall daily and performing brilliantly in my day to day activities. After perusing the information sheets provided me by my psychiatrist about the drug, I noticed that alkylizing agents, i.e., baking soda, would 'potentiate the actions of amphetamines' by increasing their absorption rate. Exctited by the prospect of an even stronger buzz, I consumed baking soda according to the instructions on the box and took my usual first pill of Adderall.
There was a dramatic difference between using the drug by itself and with the accompaniment of baking soda! The initial wave of stimulation came on faster and stronger than usual, but felt great! However, as matters progressed - and this is my main point - the usually smooth and happy effect of the amphetamine gave way to a state of excess energy and a marked decrease in mental acuity. I felt paranoid and claustrophobic in the library where I was trying to study, and could not settle down. It reminded me of too much Ritalin, or caffeine, or even low quality cocaine. A few hours later I took a half pill of Adderall, and managed to regain the 'in control' feeling of unadulterated amphetamine I've come to know and love. All in all, my message is this: baking soda definitely detracts from the good clean fun of Adderall.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


FAQ
QUESTIONS
The Basics :
What is HoldMyMemories.com?
What is the difference between HoldMyMemories.com and other social networking sites?
Site Navigation :
How do I upload pictures, video, and audio?
Can I put professional studio photographs on my page?
How do I share my images on other social networking sites like Facebook and Twitter?
Does HoldMyMemories.com resize my image files?
How do I move pictures to a different folder?
Why can't I see the pictures from my studio session?
How do I change the privacy settings on my chapters?
How do I change my family icon?
How do I change my site background?
How do I enter a contest?
How do I vote for my contest entry?
How do I order images online?
Subscription Information :
How much is a HoldMyMemories.com account?
What are studio credits?
How do I use my studio credit?
Why am I seeing a $9.95 charge on my account every month?
How do I upgrade my account?
How do I change the credit card that my account is charged to?
How do I cancel my site?
The Basics:
HoldMyMemories.com is the place to hold, organize, and share your family memories.
There are many social networking sites out there; Facebook, MySpace, and LinkedIn to name a few. These sites are great for connecting and "sharing the moment" letting your friends know what you are doing now.

HoldMyMemories.com is also unique in that our network of HoldMyMemories.com licensed studios can post images from you professional portrait session to your family website. Other sites can't do that!
At HoldMMemories.com we don't compete with the other social networking sites, we integrate with them. Your photos, videos, and other memories can be easily shared with your Facebook, MySpace, Twitter and other accounts.
Site Navigation:
To upload new media content:
1. Click on "Manage My Site"
2. Click on "Upload Files"
3. Choose the directory you wish to upload to or create a new folder.
4. If creating a new folder to upload to, you can either create an album and upload images directly to there or
5. You can create a chapter, then a subchapter, and then a gallery and upload images to the gallery
You must own the copyright for any image you upload to HoldMyMemories.com. We currently have a network of HoldMyMemories.com licensed studios. If you visit a Holdmymemories.com studio, that studio will post your images to your account, allowing you to share those special photo sessions with family and friends, post your images to Facebook, and share in ways that were previously not possible with images taken at a professional studio!
Upon logging in to your account, there is a tab along the bottom of the page. Along the left hand side there are icons for different social networking sites. Simply click on the site you wish to post to, and you will be redirected to a screen prompting you for your login information. Once you log in, you will be able to share content from HoldMyMemories.com on that site.
HoldMyMemories.com keeps the original full resolution image file of all personal uploaded images. The resolution of your uploaded studio images will vary by location.
To move pictures:
1. Click on "Manage My Site"
2. Click on "Reorganize Files"
3. Drag and drop images from one directory to the next by expanding and contracting the desired chapters
Note: You cannot move or rearrange images stored in the "Studio Sessions" chapter.
There are a few reasons that you may not be able to see the images from your studio session.One is that the studio may not have uploaded your images yet.In this case, please contact the studio where you had your session.
The second reason may be that you are not a premium member and your 30 day premium trial has expired.Unless you sign up for a premium (or family) membership, your studio sessions are only visible for 30 days after your session.If you choose to activate your premium (or family) membership in the future, your images will become visible again.
The third reason that you might not be able to see your images is if your chapters are set to "private."
To change your chapter's privacy setting:
1. Click on "Manage My Site"
2. Click on "Upload Files"
3. Right click on the chapter you want to alter the privacy settings on
4. From the dropdown menu, select "Set Permissions"
5. Choose "Public" or "Private" then click "Ok"
To change your family icon:
1. Click on "Manage My Site"
2. Click on "Upload Files"
3. Navigate to the image you wish to have as your family icon
4. Right click the image and select "Set Family Image" from the dropdown menu
or
1. Click on "Manage My Site"
2. Click on "Edit Header"
3. Click on "Choose File" next to "Upload Family Image"
4. Browse folders on your desktop and select the image you would like to use
5. Click "Save & Preview"
To change your site theme:
1. Click on "Manage My Site"
2. Click on "Edit Theme"
3. Click "Apply ___ Theme" under the theme you want
To enter a contest:
1. Click on "Contests"
2. Read the rules for the contest you wish to enter, then click "Click to Enter"
3. After agreeing to the rules and regulations, you will be prompted to select the image or video you wish to enter
4. First select the chapter that the image or video is in, then click "Submit" under the image or video you wish to enter
All contest entries must first be approved before they are posted to the contest page. You will receive an email with this confirmation that provides a button you can click to view and vote for your entry. You can also send this link to friends and family.
Upon logging in to your account, there is a tab along the bottom of the page. To order images online, simply click "Order Prints" which is in the center of this tab. You will then be taken to a page where you can choose the images you wish to order. If you are prompted for a password prior to placing a print order, contact the family that owns the website for permission.
There are three different types of accounts that HoldMyMemories.com users can have. The first account is completely free! It easily allows users to post up their personal memories to share with friends and families. Free accounts are limited to 1,000 photos, one hour of video, and one hour of audio.
Our family account provides unlimited storage space and allows users to view images from their studio sessions.
Our premium account, in addition to everything from the other two accounts, provides studio benefits to users such as free sessions, free products, discounts, and
studio credits. Click
here to see a side by side comparison! (Benefits vary by location.)
Studio credits are one of the many great studio benefits of your HoldMyMemories account. A percentage of your subscription fee, up to 100%, is applied as a credit at your HoldMyMemories.com studio. Your current studio credit amount is displayed along the bottom of the screen and also on the initial page of the "Manage My Site" tab. Please note that only premium memberships accrue studio credits. Studio credits may vary by location.
Studio credits can be used towards your purchase at your local HoldMyMemories.com studio. You can either tell the studio what your credit is, or you can have them look it up for you. They will then apply it towards your purchase.
Your premium membership can be paid for in one month, six months, or one year increments. Regardless of which method you initially paid for, at the end of that time period, your membership will begin to automatically renew on a monthly basis at $9.95/month. If you would prefer, at any time you can upgrade to a six month membership for a savings of $10 or a one year membership for a $20 savings.
To upgrade your account:
1. Click on "Manage My Site"
2. Click on "Account Settings"
3. Click on "Upgrade My Account"
4. Select which type of membership you would prefer (note: only premium memberships give studio benefits and allow you to view your studio sessions online)
5. Enter your billing and credit card information, as well as the duration of membership you would like to purchase
To change your credit card:
1. Click on "Manage My Site"
2. Click on "Account Settings"
3. Click on "Upgrade My Account"
4. Select which type of membership you would prefer (note: only premium memberships provide studio benefits)
5. Enter your billing and credit card information, as well as the duration of membership you would like to purchase
Note: Once you enter you submit your new credit card information, your card will be billed immediately so it is best to wait until your previous billing period is about to expire before doing this. However, do not wait until 24 hours before your membership is about to renew as this can result in a double billing.
To cancel your Premium Membership:
1. Log in to your account at HoldMyMemories.com
2. Click on "Manage My Site"
3. Click on "Account Settings"
4. Click on "Cancel My Account"
If you cancel you will still have access to the admin portion of your site and can still upload and share personal images and videos; however you will lose your family website address, access to your studio images, and your studio benefits. These may be restored should you choose to reactivate your account in the future.
22. What do I do if I have forgotten my login information?
To obtain your login information simply click "I cannot access my account" underneath the login boxes. Enter the e-mail address that the account is registered to in the next box then click "Submit" You will receive an e-mail with your login information within the next business day.
If you can no longer access the email your account was registered to, or the email that was registered was incorrect, please feel free to
contact us. Please provide us with as much of the following as possible:
The first and last name(s) on the account
Any e-mail addresses associated with the account
The studio name and location where the account was opened
To reset your password:
1. Click on "Manage My Site"
2. Click on "Manage Password Settings"
3. Click on "Change My Admin Password"
4. Enter your previous password and the new password you want to change it to
Unless you request so when your site is created by the studio, your site will be publically accessible to those who know your family site url. All of your public images and videos will be visible even if they are not logged in.
To password protect your site:
1. Click on "Manage My Site"
2. Click on "Manage Password Settings"
3. Click on "Change My Website Password"
4. Select "Yes" and then enter the password you would like to use
For further questions, please feel free to contact us.


Data from Ontogenetic thermal tolerance and performance of ectotherms at variable temperatures
Sources
Cavieres G, Bogdanovich JM, Bozinovic F (2016) Ontogenetic thermal tolerance and performance of ectotherms at variable temperatures. Journal of Evolutionary Biology 29(7): 1462-1468. https://doi.org/10.1111/jeb.12886. Google Scholar
Cavieres G, Bogdanovich JM, Bozinovic F (2016) Data from: Ontogenetic thermal tolerance and performance of ectotherms at variable temperatures. Dryad Digital Repository. https://doi.org/10.5061/dryad.dm93h
Background
Explored changes in thermal performance curve in response to rearing at 1 of 4 temperature classes (2 mean temperatures x 2 temperature fluctations). Compared to Huey & Kingsolver’s three evolutionary responses, so considered this an ontogenetic response. The three kinds of responses are 1) right shift in upper thermal limit (UTL), 2) right shift in whole curve – so increase in UTL but decrease in lower thermal limit (LTL) - this is a trade-off, 3) increase in both UTL and LTL, which broadens the thermal performance (Thermal breath (Tbr) and possibly Optimal Range (OR))
Just looking at their Fig. 2, the response was a right shift of the whole curve. They used a model selection procedure to reduce to a minimum adequate model but this is a case where they want estimates for LTL, UTL, TB, and OR to compare to the H&K models!
Reproducibility key
- Reproducibility: 1 (fails to reproduce). Not really close
- Reproducibility: 2 (reproduces to a similar value). Differences may be due to slightly different specification of model or to slight differences in data (case may be excluded or missing)
- Reproducibility: 3 (reproduces to decimal or random error). Differences due to rounding or stochastic part of estimation.
- Reproducibility: 3- (reproduces to something close to random error). Differences very small and due to either different specification or stochastic or maybe algorithmic differences between packages.
A “+” means that the precise method wasn’t specified and reproducibility required exploration.
Caveats
Failure to reproduce (level 1) or partial reproducibility (level 2 or 3-) very well might be an error in my coding, or my misunderstanding of the author’s methods, or my lack of knowledge of statistics generally or the R functions that I use more specifically. Similarly, my Red Flags may also represent my own lack of knowledge or best practices in statistics.
Summary of Re-analysis
Reproducibility
Table 1 - mostly reproducible but some rounding error.
Table 2 - not reproducible. The methods aren’t clear on the model to compute the marginal means and I cannot recover them.
Post-publication review
Their Fig. 2 is good but their Tables 1 and 2 are not the tables needed to make the claims they do. Where were the reviewers? I add this. There is one red flag based on anomalous data in Fig. 1 that suggests (contrary to authors) that there is a right shift in \(UTL\) in the constant-\(T\) group.
Reproducibility
library(knitr)
library(readxl)
library(ggplot2)
library(doBy)
library(data.table)
library(MuMIn)
library(emmeans)
library(cowplot)
library(harrellplot)
## Warning: replacing previous import 'lme4::lmer' by 'lmerTest::lmer' when
## loading 'harrellplot'
base_path <- "../data" #knitr
#base_path <- "content/data" # console
folder <- '2018-05-26-data-from-ontogenetic-thermal-tolerance'
fn <- 'data_cavieres et al JEB 2016.xls'
file_path <- paste(base_path,folder, fn, sep='/')
dt <- data.table(read_excel(file_path))
old_colnames <- colnames(dt)
ycols <- c('Tbar', 'Tfluc', 'Sex', 'X1', 'X2', 'OR', 'To', 'Vmax', 'Tbr', 'LTL', 'UTL')
setnames(dt, old_colnames, ycols)
dt[,Tbar:=factor(Tbar, c('15','28'))]
dt[,Tfluc:=factor(Tfluc, c('0','4'))]
# order by factor for HarrelPlot
dt <- orderBy(~ Tbar + Tfluc, dt)
The authors used a model selection method to get something like minimum adequate model for the effects of \(Sex\) + \(Tbar\) + \(Tfluc\) on 8 performance curve traits. The model selection method was
To test the potential effects of mean of temperature and daily fluctuation, we performed a linear model, with following variables: sex + mean of temperature * daily fluctuation. Model selection was performed using Akaike’s information criterion for finites sample (AICc); both delta AIC (Di) values, a measure of each model relative to the best model, and model weights (wi), a measure of the evidence supporting a specific model, were used for selections and model comparison. When there were multiple models with Di < 2, selection was based on the difference in parameters present in each model, reduction in deviance and log-likelihood values (Burnham & Anderson, 2003)
“selection was based on the difference in parameters present in each model, reduction in deviance and log-likelihood” is not reproducible language. I don’t know what this means but this is a critical part of the methods? Did the reviewers understand this or did they just give it a pass?
 The authors seem to have merely not reported the Sex effect – otherwise how to explain equivalence of coefficients, SE, and T
- \(UTL\) reproduces
- \(OR\) reproduces
- \(X1\) reproduces
- \(X2\) reproduces
Table 2
These seem to be estimated marginal means, presumably from the models in Table 1. But this can’t be because 28C-15 != 28V-15V for \(T_o\) and others. Also, \(OR\) is not simply the intercept (and must have an interaction too).
Tried various combinations of the IVs. An additive model ignoring sex is similar but again, cannot be it because there is some kind of interaction in their results, just not the modeled interaction.
dredge_it <- FALSE
table2 <- list()
for(j in 1:length(ycols)){
full_model <- formula(paste(ycols[j], "~ Tbar + Tfluc"))
fit <- lm(full_model, data=dt, na.action=na.fail)
if(dredge_it){
fit.all <- dredge(fit)
fit <- get.models(fit.all, subset=1)[[1]]
best_vars <- all.vars(formula(fit))[-1] # if using dredge
if(length(best_vars > 0)){
table2[[j]] <- emmeans(fit, specs=best_vars)
}else{
table2[[j]] <- coefficients(fit)[1]
}
}else{
table2[[j]] <- emmeans(fit, specs=c('Tbar', 'Tfluc'))
}
}
names(table2) <- ycols
table2
## $To
## Tbar Tfluc emmean SE df lower.CL upper.CL
## 15 0 26.4 0.602 130 25.2 27.6
## 28 0 30.8 0.578 130 29.7 31.9
## 15 4 28.5 0.578 130 27.4 29.7
## 28 4 32.9 0.596 130 31.8 34.1
##
## Confidence level used: 0.95
##
## $Vmax
## Tbar Tfluc emmean SE df lower.CL upper.CL
## 15 0 2.14 0.0933 130 1.96 2.33
## 28 0 2.17 0.0896 130 2.00 2.35
## 15 4 1.95 0.0896 130 1.77 2.13
## 28 4 1.98 0.0923 130 1.80 2.16
##
## Confidence level used: 0.95
##
## $Tbr
## Tbar Tfluc emmean SE df lower.CL upper.CL
## 15 0 17.0 0.630 130 15.8 18.3
## 28 0 18.4 0.605 130 17.2 19.6
## 15 4 15.8 0.605 130 14.6 17.0
## 28 4 17.1 0.624 130 15.9 18.4
##
## Confidence level used: 0.95
##
## $LTL
## Tbar Tfluc emmean SE df lower.CL upper.CL
## 15 0 3.49 0.645 130 2.21 4.76
## 28 0 9.34 0.620 130 8.12 10.57
## 15 4 3.29 0.620 130 2.06 4.52
## 28 4 9.15 0.639 130 7.88 10.41
##
## Confidence level used: 0.95
##
## $UTL
## Tbar Tfluc emmean SE df lower.CL upper.CL
## 15 0 49.5 1.11 130 47.3 51.7
## 28 0 51.7 1.06 130 49.6 53.8
## 15 4 53.9 1.06 130 51.8 56.0
## 28 4 56.2 1.10 130 54.0 58.3
##
## Confidence level used: 0.95
##
## $OR
## Tbar Tfluc emmean SE df lower.CL upper.CL
## 15 0 13.4 0.826 130 11.8 15.1
## 28 0 13.1 0.793 130 11.6 14.7
## 15 4 14.6 0.793 130 13.0 16.2
## 28 4 14.3 0.818 130 12.7 15.9
##
## Confidence level used: 0.95
##
## $X1
## Tbar Tfluc emmean SE df lower.CL upper.CL
## 15 0 20.3 0.615 130 19.1 21.5
## 28 0 24.5 0.591 130 23.4 25.7
## 15 4 21.2 0.591 130 20.1 22.4
## 28 4 25.4 0.609 130 24.2 26.6
##
## Confidence level used: 0.95
##
## $X2
## Tbar Tfluc emmean SE df lower.CL upper.CL
## 15 0 33.8 0.692 130 32.4 35.1
## 28 0 37.7 0.665 130 36.4 39.0
## 15 4 35.8 0.665 130 34.5 37.2
## 28 4 39.8 0.685 130 38.4 41.1
##
## Confidence level used: 0.95
Table 2 reproducibility – partial.
Regardless, this makes little difference to the inference.
Table 3
Is this correlated change across the trial temperatures? There is no data for this!
Figure 2
The data to re-plot Figure 2 were not made available.
Post-publication review
Use the full model to compare to Huey & Kinsolver
To compare to H&K models, we need estimates for change in \(LTL\), \(UTL\), \(Tbr\) and possibly \(OR\) across treatment effects. If the interaction is very smallish, one could report the pooled effects across both levels of the other treatment. Here I report the simple effects (differences within each level of the other treatment).
ycols <- c('To', 'Vmax', 'Tbr', 'LTL', 'UTL', 'OR', 'X1', 'X2')
table_list <- list()
gg_list <- list()
for(j in 1:length(ycols)){
res <- harrellplot(x="Tfluc", y=ycols[j], g="Tbar", data=dt,
add_interaction=TRUE, interaction.group = TRUE,
contrasts.method='revpairwise')
table_list[[j]] <- res$tables$contrasts
gg_list[[j]] <- res$gg
}
names(table_list) <- ycols
names(gg_list) <- ycols
Table of contrasts needed for interpretation
table_list
## $To
## contrast estimate SE df lower.CL upper.CL t.ratio
## 1: 15:4 - 0 2.005530 0.9689541 129 0.08843055 3.922629 2.069788
## 2: 28:4 - 0 2.257143 0.9608918 129 0.35599487 4.158291 2.349008
## 3: 0:28 - 15 4.291244 0.9689541 129 2.37414484 6.208344 4.428738
## 4: 4:28 - 15 4.542857 0.9608918 129 2.64170916 6.444005 4.727751
## p.value
## 1: 4.046770e-02
## 2: 2.034248e-02
## 3: 2.000712e-05
## 4: 5.856090e-06
##
## $Vmax
## contrast estimate SE df lower.CL upper.CL t.ratio
## 1: 15:4 - 0 0.02203687 0.1478656 129 -0.27051879 0.3145925 0.1490331
## 2: 28:4 - 0 -0.40155357 0.1466352 129 -0.69167499 -0.1114322 -2.7384520
## 3: 0:28 - 15 0.24375115 0.1478656 129 -0.04880451 0.5363068 1.6484645
## 4: 4:28 - 15 -0.17983929 0.1466352 129 -0.46996070 0.1102821 -1.2264397
## p.value
## 1: 0.881760239
## 2: 0.007046106
## 3: 0.101690787
## 4: 0.222267170
##
## $Tbr
## contrast estimate SE df lower.CL upper.CL t.ratio
## 1: 15:4 - 0 -1.335382 1.014871 129 -3.3433306 0.6725656 -1.315814
## 2: 28:4 - 0 -1.104607 1.006427 129 -3.0958479 0.8866336 -1.097553
## 3: 0:28 - 15 1.203760 1.014871 129 -0.8041877 3.2117084 1.186121
## 4: 4:28 - 15 1.434536 1.006427 129 -0.5567050 3.4257764 1.425375
## p.value
## 1: 0.1905699
## 2: 0.2744442
## 3: 0.2377546
## 4: 0.1564641
##
## $LTL
## contrast estimate SE df lower.CL upper.CL t.ratio
## 1: 15:4 - 0 -0.40878341 1.039078 129 -2.464625 1.647058 -0.39340976
## 2: 28:4 - 0 0.01297321 1.030432 129 -2.025762 2.051709 0.01259007
## 3: 0:28 - 15 5.64235945 1.039078 129 3.586518 7.698201 5.43015994
## 4: 4:28 - 15 6.06411607 1.030432 129 4.025381 8.102851 5.88502194
## p.value
## 1: 6.946663e-01
## 2: 9.899743e-01
## 3: 2.697909e-07
## 4: 3.233610e-08
##
## $UTL
## contrast estimate SE df lower.CL upper.CL t.ratio
## 1: 15:4 - 0 3.0005530 1.775223 129 -0.5117690 6.512875 1.6902401
## 2: 28:4 - 0 5.9270089 1.760452 129 2.4439115 9.410106 3.3667541
## 3: 0:28 - 15 0.7362673 1.775223 129 -2.7760547 4.248589 0.4147464
## 4: 4:28 - 15 3.6627232 1.760452 129 0.1796258 7.145821 2.0805584
## p.value
## 1: 0.093397110
## 2: 0.001002643
## 3: 0.679016489
## 4: 0.039452975
##
## $OR
## contrast estimate SE df lower.CL upper.CL t.ratio
## 1: 15:4 - 0 1.40776959 1.329947 129 -1.223562 4.039101 1.05851595
## 2: 28:4 - 0 0.94876786 1.318881 129 -1.660670 3.558205 0.71937360
## 3: 0:28 - 15 -0.05765899 1.329947 129 -2.688991 2.573673 -0.04335436
## 4: 4:28 - 15 -0.51666071 1.318881 129 -3.126098 2.092777 -0.39174185
## p.value
## 1: 0.2917983
## 2: 0.4732120
## 3: 0.9654861
## 4: 0.6958953
##
## $X1
## contrast estimate SE df lower.CL upper.CL t.ratio
## 1: 15:4 - 0 0.6445069 0.9897446 129 -1.3137271 2.602741 0.6511851
## 2: 28:4 - 0 1.1631429 0.9815094 129 -0.7787975 3.105083 1.1850553
## 3: 0:28 - 15 3.9487926 0.9897446 129 1.9905586 5.907027 3.9897086
## 4: 4:28 - 15 4.4674286 0.9815094 129 2.5254883 6.409369 4.5515904
## p.value
## 1: 5.160854e-01
## 2: 2.381741e-01
## 3: 1.102706e-04
## 4: 1.215281e-05
##
## $X2
## contrast estimate SE df lower.CL upper.CL t.ratio
## 1: 15:4 - 0 2.052276 1.115120 129 -0.15401653 4.258570 1.840408
## 2: 28:4 - 0 2.111911 1.105842 129 -0.07602462 4.299846 1.909776
## 3: 0:28 - 15 3.891134 1.115120 129 1.68484062 6.097427 3.489429
## 4: 4:28 - 15 3.950768 1.105842 129 1.76283252 6.138703 3.572633
## p.value
## 1: 0.0680065144
## 2: 0.0583821961
## 3: 0.0006628669
## 4: 0.0004976790
Harrell Plots of full model ignoring sex
gg_list
## $To
##
## $Vmax
##
## $Tbr
##
## $LTL
##
## $UTL
##
## $OR
##
## $X1
##
## $X2
Summary of my Harrell Plots and Table of contrasts
\(T_o\)
\(Tbr\) is noisy relative to signal but the pattern is small decrease in \(Tbr\) given temperature flucation but no change in mean and small increase in \(Tbr\) given change in temperature regardless of fluctuation.
\(LTL\) increases with mean temp in both constant and fluctuating T levels but simple fluctuation (with no increase in mean temperature) has effectively zero response.
\(UTL\) increase with mean temp in fluctuation level but only small increase with mean temp in no-fluctuation level. Increase with fluctuation at both mean temperature levels.
\(OR\)
Shift in UTL
in variable environments the upper thermal limit of performance curve shifted to the right, but flies reared in constant environments did not exhibit changes in UTL and the curve did not shift.
Note that their Fig. 2 shows a clear right shift even in the non-fluctuating environment but an anomaly with the data at 40 degrees where the high temperature treatment is unusually low.
Their Table 1 doesn’t present the evidence for this – indeed their presented model does not include the interaction, which suggests a uniform “right shift” (increase in \(UTL\)) independnet of level of \(Tfluc\). But the conclusion implies an interaction. Their Table 2 doesn’t present this because it doesn’t seem to include the modeled interaction even though there is some small interaction since the contrasts within each level are not equal. Also, a table of marginal means + SE does is not what we want anyway, we want a table of the contrasts (my version of table 2)
The HarrellPlot of the model with interaction shows the result nices - increased \(UTL\), with increased \(Temperature\), in the fluctuating temperature group but trivially small change in the constant temperature group. The top two contrasts are the \(Tbar\) effect, which is the evidence for the shift to right in fluctuating environment vs. non fluctuating environment. The bottom two contrasts are the \(Tfluc\) effect. The proper table to show these results are in my version of Table 1.
Red Flags
- Fig 1 shows a right shift in UTL in the constant \(T\) group but the anomalously low walking speed at 40 C seems to have effected the estimate of \(UTL\) (I don’t know how this was estimated from the data but the authors give a reference). The fact that this is an anomalously low speed in both groups suggest that it was a systematic error in the measurement (maybe that accidentally increased the to 44 C).
Statistical misconceptions
- “Nevertheless, Tbr was not affected by environmental variability.” P > 0.05 != “no effect”


FIG2PS2TEX(1) FIG2PS2TEX(1) NAME fig2ps2tex - generate a TeX file for including a PostScript file SYNOPSIS fig2ps2tex file DESCRIPTION Fig2ps2tex generates a TeX file for including a PostScript file in a TeX document. This involves calculating the bounding box from the Postscript document. The TeX inclusion file is written to stdout. There is also Fig2ps2tex.sh for those systems without csh and/or dc (Linux for example). Note that the psfig macro package provides a more sophisticated approach to including Postscript files in LaTeX docuements. Fig2ps2tex works with plain TeX however. USAGE Assume the Postscript file is called foo.ps . The command % fig2ps2tex foo.ps >foo.tex will create the inclusion file with bounding information. Then include this file in your TeX document with the command \input{foo} SEE ALSO psfig(1), latex(1), fig2dev(1), transfig(1). AUTHOR Micah Beck Cornell University Man page by George Ferguson<EMAIL_ADDRESS>COPYRIGHT Copyright 1994 Micah Beck The X Consortium, and any party obtaining a copy of these files from the X Consortium, directly or indirectly, is granted, free of charge, a full and unrestricted irrevocable, world-wide, paid up, royalty-free, nonex‐ clusive right and license to deal in this software and documentation files (the "Software"), including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons who receive copies from any such party to do so, with the only requirement being that this copyright notice remain intact. This license includes without limitation a license to do the foregoing actions under any patents of the party supplying this software to the X Consortium. 14 Mar 1991 FIG2PS2TEX(1)


Janelle Shane (@JanelleCShane) is the reigning queen of making funny, silly, and downright bizarre texts with neural networks. She's an electrical engineer who works with holographic laser beams by day, and plays with neural networks in her spare time.
Her projects use char-rnn, a type of neural network which she explains by linking to Andrej Karpathy's "The Unreasonable Effectiveness of Recurrent Neural Networks," which details how recurrent neural networks process the data fed into them, such as the complete works of William Shakespeare, and produce something that looks exactly like Shakespeare, but is a genuine fake.
Andrej Karpathy is currently the Director of AI at Tesla, and his blog and github page have been cited by innumerable data scientists, hobbyists, and others interested in learning about how neural networks work and how to set them up themselves for fun and profit.
Janelle Shane's projects started going viral this year with a popular one being a neural network that could design and name paint colors. Here are some of the best results:
Her conclusions: the neural network really likes brown, beige, and grey, and has "really really bad ideas" for paint names.
But if you think Clardic Fug, Burble Simp, and Stanky Bean are as weird as it's going to get, please read on.
What's in a name?
Names are short and pretty easy for a char-rnn network to re-arrange and re-combine into something that sounds vaguely plausible to us, so many of her projects have involved naming conventions.
Cheese Breeze and beer please
Training the network on 1,500 names from the My Little Pony Friendship is Magic Wiki, she had one experiment naming new My Little Ponies. With names like "Rainbow Dash" and "Fluttershy" already extant in the Ponyverse, this one was marked as a partial success. While plausible ponies like Sunshine Star and Glowberry were produced, there were also ponies like Cheese Breeze, Apple Ronch, and Groan.
Another similar project created craft beer names, with a delightful degree of realism. Look out for the Dang River IPA, Frog Trail Amber Ale, and the Sir Coffee Stout on your next trip to the neural network taproom.
May the farce be with you
Another project creating Star Wars character names unsurprisingly produced a lot of Siths at the lowest creativity levels, including "Darth Darth." And wasn't Darth Teen the villain in The Force Awakens?
She also created one for Star Wars planets (with extant names like "Tatooine," and "Hoth," anything is possible) and used @i_find_planets to flesh out their descriptions. If you haven't had your personal planet found, we recommend tweeting "Planet, please!" at @i_find_planets for a planet of your very own.
Foppin and Popchop
Shane's project to produce cat names was trained on several hundred names from a cat rescue in Alabama, and several thousand cats registered in Toronto, which should have created names following North American cat naming conventions.
But she first trained the network on the wrong data set, using a list of fantasy names by J. R. R. Tolkien, George R. R. Martin, and others, producing such exquisite cat names as Mankith, Belfine Bracken, and Grim Wyyne.
Eventually (when trained on the correct data set) this project resulted in such suitable names as Snox Boops, Foppin, and Mr Gruffles. Other cat names that she deemed less successful, but we must beg to differ: Sofa, Pope, and Pissy.
She also named guinea pigs for the Portland Guinea Pig Rescue. Meet Popchop and Fuzzable:
If The Adventures of Popchop and Fuzzable isn't a buddy comedy in the making, what is?
The best of the rest
In addition to naming new sports teams, cars, and Pokémon, she created neural networks that could name 80s action figures and new musical acts.
The 80s action figures project created Thunderator, Mannosaurus, and Action Bun, which calls to mind a cute little bunny rabbit armed with a bullet bandolier, as well as Ninja Rat, the Mr. Splinter spinoff show which definitely had a TV spot between the Teenage Mutant Turtles and the Samurai Pizza Cats:
Most people think anything could be a band name, and with bands like Shpongle, Spoon, and !!! out there, it's hard to dispute these neural network names' plausibility: The Freights (which probably sounds like The Shins, but recorded from inside a boxcar rolling down a lonely track at midnight), Nighty Daggers (maybe something like the Arctic Monkeys? but with more stabbing), and Skins of Space (which was definitely a rejected name for the glam rock band that would become The Darkness).
She was also able to name metal bands with a huge amount of data (100,000 bands including genre and country of origin) and I personally can't wait to go see Death from the Trend, the Black Metal outfit from Croatia, next time they tour with the Russian Melodic Death Metal band Inhuman Sand.
Stranger Than Fiction
"Yer a wizard, Harry!"
The first experiment in neural network-generated Harry Potter fan fiction used a data set of 10,000 examples from Archive of our Own (or AO3), which produced very weird but still plausible stories such as:
"The Perfect Cow by alafaye
Severus and Hermione start a horcruxes"
"Birds of a Saturday by SasuNarufan13
Harry Potter is drunk and discovers he is an alternate universe."
Then to refine her slash machine, she retrained the network to work on the word level, and not the character level. Word-level allows for more grammatical sentences, longer memory, and generally more readable output, and is limited to using words that appear more than 200 times. Here are a few things that appear way more than 200 times: Happy Birthdays, Christmas, Harry Potter characters together in bars, and the phrase "more than they bargained for."
When the network is instructed "to play it Really Really Safe, and choose the most likely next word in each sentence," the output is, well, Harry Potter in a nutshell:
"A Hero’s Tale by orphan _ account | Harry Potter is a wizard, and he is a wizard. He is a wizard. He is a wizard, a wizard, a wizard, and a son. He is also a Slytherin, and he is a wizard. He is a wizard, and he is a wizard. He is also a wizard, and he has not been the one to be a father."
"A Hero’s Tale by 1001Angel | Harry’s life is turned upside down when he finds out that he is a wizard, and is a wizard."
The show must go on
A neural network trained to create Broadway productions, including closing and opening dates, produced plays that were not limited in their performances by the constraints of linear time, or the normal rules of decorum in naming conventions.
Results included a comedy entitled Butt, which ran for over 7 years and was only performed once, and a much more successful play called Fart, with a 4-year run and performance count of 23 times.
Wise or otherwise
Three more of her experiments relied on tricky human patterns of speech: proverbs, fortune cookies, and knock-knock jokes.
Many of the ancient proverbs sound like they were dreamed up by the Inspirobot and could pass: "No wise man ever wishes to be sick." While others revealed a strange obsession with oxen.
The fortune cookies produced almost no usable answers. But the knock-knock joke generator produced this laugh-out-loud gem that you will definitely want to use at parties:
Knock Knock
Who’s There?
Ireland
Ireland who?
Ireland you money, butt.
Mastchar-rnn chef
Saving the best for last, Shane's most hilarious project to date was trained on 30,000 cookbook recipes, and based on Tom Brewe's project to create recipes using a neural network.
The results sound like something out of the surrealist cookbook by Salvador Dali Les Diners de Gala, or from the Manifesto of Futurist Cooking.
Combine chunks and sprout clams
The network created disturbingly vague ingredients:
1 cup mixture
1 teaspoon juice
1 chunks
and oddly specific ones "that you could plausibly ask for at Whole Foods and act all disappointed when they don’t have any" such as "milked salt."
Which combined with dubious cooking instructions such as "Fold water. Roll into small cubes." and "Sprout clams; add vanilla." to produce the most improbable meals since bread in a can.
Just for fun, she once gave her cooking network the complete works of H. P. Lovecraft, and asked it to complete sentences, or start them, producing such spooky instructions as:
"Coat apple slices with strange things."
"Cook over medium heat until thickened and bubbly. Spoon over bizarre eyes."
"Sometimes, in the throes of a nightmare when unseen powers whirl one over the roofs of strange dead cities toward the grinning chasm of Nis, it is a relief and even a delight to make the soup."
The cake is a lie
Here's one recipe for a "cake":
BAKED OTHER LIE 1993 CAKE
appetizers, fish
8 rounds; chicken
¼ lb butter (soaked)
1 can tomato sauce (½ lb)
1 salmon steaks sauteed
½ teaspoon red pepper, chunked
1 tablespoon margarine or oil
Meanwhile, transfer the chicken breast to a serving platter and simmer for about 5 minutes, then lemon juice that has been stirring well; if on the side, as becomes warmed, carefully frost them with a sauce. Spread them and garnish with water or parsley.
The intrepid Jono Ellis actually baked a vaguely-chocolate-chip-cookie-related recipe created by Shane's neural network, with the secret ingredient of horseradish.
They did not follow the instructions, only the ingredient list, and said it made a very fine cake-like mixture:
"The horseradish is a subtle background flavour and the overall spicy, peanut-y, chocolate-y flavour is ace."
In an interview with NY Mag, Janelle Shane said she tried the recipe herself and
"It was the most horrible chocolate thing I have ever tasted in my life. I opened the oven and my eyes just watered. It was so bad."
She then reveals that she brought cupcakes of it to two different parties, and none of the guests shared Ellis' opinion on the palatability of the baked good:
"The two different parties that I took it to, I found out that somebody had quietly taken a bite out of one of these cupcakes, and abandoned it somewhere."
Super Deluxe also recreated one of her recipes, which no one was brave or misguided enough to try eating:
Taste test
In interview with the Daily Dot, Shane was asked whether she thought computers in the future could create recipes that would actually be good to eat:
“I could imagine a consciousness appreciating food even with no way of ingesting it—as long as they had sensors to pick out nuance and complexities the same way we might appreciate a symphony or a painting.”
Relying purely on the text of cookbooks, rearranged however which way the neural network pleases, has none of the nuance or complexity of taste bud sensors, but produces an absurdity that delights the mind more than a tasty snack.
And for creating or recreating things like humor or wisdom, the char-rnn algorithms do about as good a job as can be expected of a non-thinking entity; it's probably a good thing that computers haven't developed a sense of humor yet.
But maybe we don't need nuance and sensitivity for everything. For the things that really matter (like bands, cats, and craft beers), the proof is in the pudding.


Sorting is important. Sorting in JavaScript can be quirky. This blog post will be regarding a recent post made by the v8 team regarding the Array.prototype.sort.
This blog post will demonstrate an example where the stability of a sort becomes important. This situation is normally known as the two-pass sorting, which is a technique commonly used sort two columns. In other words, I would like to use one function to sort one column first and then another function to sort another column. This is different in comparison to having a single function that sorts two columns in a single pass. Hence, with a two-pass, two different functions will be used for sorting instead of a call to a single function. (This would apply for two or more passes as well, otherwise known as a chain.)
JavaScript implementation of sort is not stable.
Fig 1. Flow Chart of the Two pass sorting.
Fig 2. Flow Chart of the sorting with a single pass.
Let’s have a look at a JavaScript example below.
const sortExample = () => {
const students = [
{ name: "Charlie Doe", score: 50 },
{ name: "Alex Smith", score: 60 },
{ name: "Alex Doe", score: 60 },
{ name: "Drew Doe", score: 50 },
{ name: "Taylor Doe", score: 50 },
{ name: "Jordan Doe", score: 55 },
{ name: "Blake Doe", score: 50 }
];
const sortByScore = students => students.sort((a, b) => b.score - a.score);
const sortByName = students =>
students.sort((a, b) => ("" + a.name).localeCompare(b.name));
sortByName(students);
console.log(JSON.parse(JSON.stringify(students)));
sortByScore(students);
console.log(JSON.parse(JSON.stringify(students)));
};
sortExample();
In this example, I have two functions one of them sortByScore and another sortByName. Each of them would work individually and let’s assume that test cases have been written for them. So what I would do is, I would use sortByName first. After, it is completed, I would then use sortByScore. I would expect my results to be sorted by the score but ordered based on the alphabetical order as I have already sorted by their names.
However, this will only be the case if, the sort is stable. If the sort is not stable, the final results might not be in alphabetical order for the same scores.
The output for the sortByName.
0: {name: "Alex Doe", score: 60}
1: {name: "Alex Smith", score: 60}
2: {name: "Blake Doe", score: 50}
3: {name: "Charlie Doe", score: 50}
4: {name: "Drew Doe", score: 50}
5: {name: "Jordan Doe", score: 55}
6: {name: "Taylor Doe", score: 50}
Notice that in this output, the array is sorted by their names.
We will now sort the entries by the score by using the same function on the array using the sortByScore function.
0: {name: "Alex Doe", score: 60}
1: {name: "Alex Smith", score: 60}
2: {name: "Jordan Doe", score: 55}
3: {name: "Blake Doe", score: 50} 😄
4: {name: "Charlie Doe", score: 50}😄
5: {name: "Drew Doe", score: 50} 😄
6: {name: "Taylor Doe", score: 50} 😄
A stable sort will return the entries in the order they would appear in the original array. If the sorting algorithm used is not stable, an outcome that could happen from the sortByScore can be something like the following.
0: {name: "Alex Doe", score: 60}
1: {name: "Alex Smith", score: 60}
2: {name: "Jordan Doe", score: 55}
3: {name: "Charlie Doe", score: 50} 😓
4: {name: "Blake Doe", score: 50} 😓
5: {name: "Drew Doe", score: 50} 😄
6: {name: "Taylor Doe", score: 50} 😄
Here the entries Charlie Doe and Blake Doe has been swapped. This is not the intended result from the sorting algorithm as the sort itself is not stable.
Of course, I could rewrite the sort to be a single pass by using. However, this single pass sort function is still not stable because of the implementation of the sorting algorithm in which JavaScript uses. However, it does fit for my specific use case.
const sortByScoreThenName = students =>
students.sort((a, b) => {
if (b.score > a.score) return 1;
if (b.score < a.score) return -1;
if (b.score == a.score) return ("" + a.name).localeCompare(b.name);
});
But the main objective of this blog post is to describe a situation where the stability of the sort becomes important. In short, the stability of a sort matters when there is a need for the list or array to be chained through multiple conditions.
The take away message from this blog post is


Sample of a contract
This is a subtitle
Interpretations
1. Unless the context requires otherwise, other words or expressions contained in these Articles bear
the same meaning as in the Companies Act 2006 as in force on the date when these Articles become
binding on the Co-operative.
Schedule 1 to the Companies (Model Articles) Regulations 2008 shall apply to the Co-operative, save
where amended or replaced by these Articles.
In the case of any variation or inconsistency between these Articles and the model articles, these
Articles shall prevail.


|
pf
|
A class template for HMM filtering. More...
#include <cf_filters.h>
Public Types | |
| using | ssv = Eigen::Matrix< float_t, dimstate, 1 > |
| "state size vector" | |
| using | osv = Eigen::Matrix< float_t, dimobs, 1 > |
| "observation size vector" | |
| using | ssMat = Eigen::Matrix< float_t, dimstate, dimstate > |
| "state size matrix" | |
| Public Types inherited from cf_filter< dimstate, dimobs, float_t > | |
| using | ssv = Eigen::Matrix< float_t, dimstate, 1 > |
| using | osv = Eigen::Matrix< float_t, dimstate, 1 > |
Public Member Functions | |
| hmm () | |
| Default constructor. More... | |
| hmm (const ssv &initStateDistr, const ssMat &transMat) | |
| Constructor. More... | |
| virtual | ~hmm () |
| The (virtual) desuctor. | |
| float_t | getLogCondLike () const |
| Get the latest conditional likelihood. More... | |
| ssv | getFilterVec () const |
| Get the current filter vector. More... | |
| void | update (const ssv &condDensVec) |
| Perform a HMM filter update. More... | |
| Public Member Functions inherited from cf_filter< dimstate, dimobs, float_t > | |
| virtual | ~cf_filter () |
| The (virtual) destructor. | |
Private Attributes | |
| ssv | m_filtVec |
| filter vector | |
| ssMat | m_transMatTranspose |
| transition matrix | |
| float_t | m_lastCondLike |
| last conditional likelihood | |
| bool | m_fresh |
| has data been observed? | |
A class template for HMM filtering.
| hmm< dimstate, dimobs, float_t >::hmm | ( | ) |
Default constructor.
Need ths fir constructing default std::array<>s. Fills all vectors and matrices with zeros.
| hmm< dimstate, dimobs, float_t >::hmm | ( | const ssv & | initStateDistr, |
| const ssMat & | transMat | ||
| ) |
Constructor.
allows specification of initstate distn and transition matrix.
| initStateDistr | first time state prior distribution. |
| transMat | time homogeneous transition matrix. |
| auto hmm< dimstate, dimobs, float_t >::getFilterVec | ( | ) | const |
Get the current filter vector.
get the current filter vector.
|
virtual |
Get the latest conditional likelihood.
Implements cf_filter< dimstate, dimobs, float_t >.
| void hmm< dimstate, dimobs, float_t >::update | ( | const ssv & | condDensVec | ) |
Perform a HMM filter update.
Perform a HMM filter update.
| condDensVec | the vector (in x_t) of p(y_t|x_t) |


In this tutorial you will learn how to create your own tutorial using the Tutorial Template as a base to work from by completing the following steps:
Note: It is recommended that you look over the first tutorial of this workshop, 1. Tutorial Template, before you begin.


--- layout: default permalink: where title: "Zeeduino-XC - wider open playground" ---
Zeeduino-XC is available at GitHub.
Zeeduino port to LPC1347 controller using Zeeduino-XC is also available, yes, on GitHub.
Check out the videos on how to set up Zeeduino-XC for LPC1347 using LPCXpresso IDE here.
Enjoy!


Bidding System
Features
- * Incremental bidding
- * Auto-bidding – bidders can set a maximum bid and leave the system to bid on their behalf
- * Buy Now bidding – an instant purchase can be made. This can be connected to a payment system and purchase made on line immediately
Images courtesy of unsplash.com


Welcome!
Use these awesome forms to login or create new account in your project for free.
{% block content %}
{% endblock content %}
{% load static %}
Use these awesome forms to login or create new account in your project for free.


In this tutorial, we will transform a short program from legacy C++ into C++11, and learn a few of the new features along the way.
The tutorial is designed for you to follow along hands-on: We will alternate between meeting a feature and integrating it into our code. If you want to get your hands dirty, the presentation slides and code samples are available on
git clone https://github.com/nikolausmayer/cpp11presentation
(please use GCC/g++ ≥ 4.7) but you are not required to do so.
I am not an expert in C++(11). I may or may not be able to answer technical questions.
The code examples are designed to highlight specific language features, and may not always represent best code practices or sensible program design.
If you are using Boost, you may already know much of what follows.
auto
for
loops -std=c++11
(-std=c++0x
for GCC ≤ 4.6) sudo apt-get install g++-4.9 gcc-4.9
git clone https://github.com/nikolausmayer/cpp11presentation
code/Makefile
-std=c++11
to CXXFLAGS
make
to make sure it works. If you had to install a new g++, you might want to use CXX=g++-4.9 make
auto
auto
keyword is not new, but its meaning has changed static
, extern
)
float almostpi = 3.14f;
std::vector<SomeClass<SomeType> >::iterator it = myvec.begin();
auto almostpi = 3.14f;
auto it = myvec.begin();
auto
ignores references and const
/volatile
(there are special cases) auto
, decltype
template <typename T1, typename T2>
auto add(T1 t1, T2 t2) {
return t1 + t2;
}
auto v = add(2, 3.14);
template <typename T1, typename T2>
auto add(T1 t1, T2 t2) -> decltype(t1 + t2) {
return t1 + t2;
}
auto v = add(2, 3.14);
decltype
can do anything that auto
can. Why not write...
template <typename T1, typename T2>
decltype(t1 + t2) add(T1 t1, T2 t2) { // (a)
return t1 + t2;
}
decltype(add(2, 3.14)) v = add(2, 3.14); // (b)
t1
and t2
are technically unknown at that point -std=c++1y
in GCC 4.8, -std=c++14
in GCC≥4.9):
template <typename T1, typename T2>
auto add(T1 t1, T2 t2) {
return t1 + t2;
}
int i = 5;
ProbabilityModel obj = m[i];
std::pair<int,int> p = m_hocos[0];
std::cout << obj.prob(p);
|
|
auto
is a double-edged sword. If you let it loose, it will destroy your code. Use it wisely, and keep in mind: Either declaration or handle must be informative.
auto point = m_homogeneous_coords[0];
std::cout << model.prob(point);
std::vector
for (unsigned int i = 0; i < m_homogeneous_coords.size(); ++i)
std::cout << model.prob(m_homogeneous_coords[i]);
i
. The “good” solution (which also works for e.g. std::map
) is far worse still:
for (std::vector<std::pair<int,int> >::iterator it = m_...begin();
it != m_homogeneous_coords.end();
++it)
std::cout << model.prob(*it);
for point in m_homogeneous_coords:
print(point)
for (auto point: m_homogeneous_coords)
std::cout << model.prob(point);
for (const auto& point: m_homogeneous_coords)
std::cout << model.prob(point);
auto
way does not work.
std::vector<myClass*> vec;
myClass* instance = new myClass(...);
vec.push_back(instance);
<memory>
header and write
std::vector<std::unique_ptr<myClass> > vec;
vec.push_back(std::unique_ptr<myClass>(new myClass(...));
vec
is destroyed, all of its elements are automatically and safely destroyed as well.
unique_ptr
is useful if an instance is never shared and never copied. To get the full functionality of naked pointers (e.g. copyability), use shared_ptr
instead.
std::vector<std::shared_ptr<myClass> > vec;
std::shared_ptr<myClass> myClass_ptr{0};
myClass_ptr = std::make_shared<myClass>(...);
vec.push_back(myClass_ptr);
*
and ->
, as well as checked for not-null using
if (myClass_ptr) {...}
unique_ptr
has virtually no overhead; a shared_ptr
has some due to e.g. reference counting (weak_ptr
can help).
std::shared_ptr<myClass> myClass_ptr{0};
then you are right. The correct way to write this used to be
std::shared_ptr<myClass> myClass_ptr = 0;
or
std::shared_ptr<myClass> myClass_ptr = {0};
class myClass;
void Func() {
int foo(myClass());
}
foo
?
int
variable myClass
and returns an int
myClass
, and returns an int
class myClass;
void Func() {
int foo{myClass{}};
}
foo
can only be a variable of type int
. This is almost universally preferrable to legacy style. The only real restriction is that narrowing is no longer allowed:
int a(5.2); // ok, a==5
int a{5.2}; // error!
int main() {
std::vector<float> numbers;
...
auto multiplier = [&numbers](float factor) -> void {
for (auto& elem: numbers) elem *= factor;
};
multiplier(3.0f);
}
multiplier
is a function. It
numbers
by reference, float
argument factor
, void
(remember trailing return?), numbers
by factor
. auto
is necessary because the type of a lambda function is complicated and inferred at compile time.
[](){}();
is an in-place definition and immediate call of an anonymous void
function which takes no parameters and does nothing. It is also completely legal.
def argmin(sequence):
min_index = ...
min_value = ...
return [min_index, min_value]
mini, minv = argmin(v)
|
|
template <typename T>
std::tuple<int, T> argmin(std::vector<T>& v)
{
int min_index = {...}
T min_value = {...}
return std::make_tuple(min_index, min_value);
}
...
int mini;
float minv;
std::tie(mini, minv) = argmin(numbers);
std::tuple
can take arbitrarily many elements and types.
std::tie(mini, std::ignore) = argmin(numbers);
#if __cplusplus > 199711L
std::cout << "Compiled using C++11 or later\n";
#else
std::cout << "Compiled using C++03 or earlier\n";
#endif
__cplusplus
are 199711L
(C++98/C++03 aka "C++"), 201103L
(C++11) and 201402L
(C++14).
#ifdef HAS_MOVE_SEMANTICS
std::vector<std::vector<int>> vec;
What is wrong with this line?
GCC says:
error: '>>' should be '> >' within a nested template argument list
std::vector<std::vector<int> > vec;
int stupid_division(int a, int b) {
assert(b != 0);
return (a / b);
}
template <int N>
class Filter {
...
}
What if Filter
is only valid for N>1
?
template <int N>
class Filter {
Filter() {
if (N<=1) throw std::runtime_error("Filter invalid for N<=1");
}
...
}
template <int N>
class Filter {
Filter() {
static_assert(N>1, "Filter invalid for N<1");
}
...
}
template <typename T>
T very_small_value() {
return (T)0.00001;
}
What if T
is an integer type?
template <typename T>
T very_small_value() {
throw std::runtime_error("Bad type");
return (T)0.00001;
}
template float very_small_value<float>() { return 0.00001f; }
template double very_small_value<double>() { return 0.00001; }
...
template <typename T>
T very_small_value() {
return (T)0.00001;
}
What if T
is an integer type?
template <typename T>
T very_small_value() {
static_assert(std::is_floating_point<T>::value,
"very_small_value only works for float types");
return (T)0.00001;
}
type_traits
header:is_enum
, is_const
, is_move_assignable
...
enum
... enum
s have underlying types
Standard C++ 7.2/5:
The underlying type of an enumeration is an integral type
that can represent all the enumerator values defined in the
enumeration.
they are effectively just integers.
enum boyfriend_type { rich, nice, cool };
enum CERN_magnet_status { warm, cool, supercool };
error: redeclaration of ‘cool’
note: previous declaration ‘boyfriend_type cool’
enum
... (cont.)
enum class boyfriend_type { rich, nice, cool };
enum struct CERN_magnet_status { warm, cool, supercool };
...
int magnet = CERN_magnet_status::supercool; // not ok
CERN_magnet_status magnet = CERN_magnet_status::supercool; // ok
enum class boyfriend_type : short { rich, nice, cool };
enum CERN_magnet_status : int { warm, cool, supercool };
type_values = {int: 1, float: 2}
std::map<std::typeinfo, int> type_values;
type_values[typeid(int)] = 1;
template <typename T>
struct type_values { static const int value = 0; }
template struct type_values<int> { static const int value = 1; }
std::map<std::typeinfo, int> type_values;
type_values[typeid(int)] = 1;
type_index
:
std::map<std::type_index, int> type_values;
type_values[std::type_index(typeid(int))] = 1;
auto
decltype
,
initializer lists,
constexpr
,
Constructors calling other constructors of the same class,
override
and final
keywords,
rvalue references,
[[noreturn]]
and other attributes,
Variadic templates,
std::nullptr_t
,
type traits,
std::thread
,
std::promise
,
std::future
,
std::packaged_task
,
static_assert
,
std::chrono::steady_clock
,
class enum
,
std::I_hope_this_is_too_small_to_read
, ...
auto


SKYNET
My Profile
Log out
About
Add branch
Edit branch
Delete branch
Add car
Edit car
Delete car
Fast reservation
Cars on fast reservation
Reports
Reports:
Grades of cars
Amounts of this rentacar in concrete period:
Start date:
End date:
Search
Amount of money in period
0
Start date:
Start date:
Price per day:
Save
Back
Cars
Cars on fast reservation
Adding a car:
Name:
Price:
Year:
Car type:
Family
Sports
Van
Brand:
Model:
Seats:
Submit
Adding branch:
City:
Address:
Submit
List of car in service:
List of branches in service:
List of cars in service:
List of branches in service:
Editing car:
Name:
Price:
Year:
Car type:
Family
Sports
Van
Brand:
Model:
Seats:
Submit
Editing branch:
City:
Address:
Submit
×
Name:
Address:
Description:
×
Image:


Design and Implementaion of a Vehicle Registration Web Application
Vehicle Plate Number Registration Made Easy
New Registration
Login
© All Right Reserved.Thrillers 2018


Rethinking travel booking
in terms of cross-device behaviour Sigma Software took part in a challenge to create a clear and intuitive booking experience
How we work
To ensure throughout consideration and in-depth elaboration of the design project, we apply a proven 5 stage approach
Wireframing
Our UX designers depicted the screens and structure of the new system in a set of page layouts presenting all UI elements.
Intuitive flight Search
Clean and simple flight search screen presents no distractions and complications to the user.
stopovers
class
Ticket info
The all important information about tickets is presented in a structured and easily recognizable way.


An example:
function hello() { echo "Hello $1" } hello "Albert"
When you hoover your mouse over the hello call in last script line and press CTRL a link to the function appears where you just can click and open the function.
CTRL


Picker demo
Main demo
Pick a date
09-04-2012
Pick a time
9:05
Pick a date and time
09-04-2012 9:05
Hidden fields
Mobiscroll
Theme
Default
Android ICS (New)
Android ICS Light (New)
Android
Sense UI
iOS
Mode
Scroller
Clickpick
Mixed (New)
Date
Time
Datetime
Custom (Fruits :D)


“A sarcastic chuckle from the professor interrupted: “Don't try heroics, my friend. It is useless!” As Flannery cursed, the fiend turned to a metal cabinet on the wall beside his desk. He busied himself with glass tubes for a while, mad mutterings and chuckles falling from his throat in an unintelligible rumble of sound. Then, without looking at the reporter, he approached the girl, a large red pill on his outstretched palm. A lurid oath spewed from Arn Flannery's lips as he strained upward. Blind fury gave him the strength of a maniac.” — Lars Anderson, The Yellow Curse


Basic Pagination
Pagination showing items
Pagination with custom showing template
- Set
[displayTextTemplate]
property to specify the display template for showing items.
Pagination with per page select.
Pagination with custom showing template
- Set
[itemsPerPage]
property to number of items per page. It's equal 10 by default.
- Set
[itemsPerPageOptions]
property to array of numbers for items per page select.
-
Set
[itemsPerPageTemplate]
property to custom template. You will have
onSelect
property to interact with component. This property has higher priority than
[itemsPerPageOptions]
.
Mobile
Pagination component switches to mobile mode automatically when screen's size is smaller than 1024px in width but
can set mobile
or [mobile]="true"
to show it always in mobile mode.
Labels shown before and after current page input and can be changed using next input values:
pageLabelBeforeInputMobile
(string) - label shown before input.
-
pageLabelAfterInputMobile
(function) - label with total pages count, shown after input, total
pages count passed as a parameter.


org.hamcrest.beans
Class HasPropertyWithValue<T>
java.lang.Object
org.hamcrest.BaseMatcher<T>
org.hamcrest.TypeSafeDiagnosingMatcher<T>
org.hamcrest.beans.HasPropertyWithValue<T>
- All Implemented Interfaces:
- Matcher<T>, SelfDescribing
public class HasPropertyWithValue<T>
- extends TypeSafeDiagnosingMatcher<T>
Matcher that asserts that a JavaBean property on an argument passed to the
mock object meets the provided matcher. This is useful for when objects
are created within code under test and passed to a mock object, and you wish
to assert that the created object has certain properties.
Example Usage
Consider the situation where we have a class representing a person, which
follows the basic JavaBean convention of having get() and possibly set()
methods for it's properties:
public class Person {
private String name;
public Person(String person) {
this.person = person;
}
public String getName() {
return name;
}
}
And that these person objects are generated within a piece of code under test
(a class named PersonGenerator). This object is sent to one of our mock objects
which overrides the PersonGenerationListener interface:
public interface PersonGenerationListener {
public void personGenerated(Person person);
}
In order to check that the code under test generates a person with name
"Iain" we would do the following:
Mock personGenListenerMock = mock(PersonGenerationListener.class);
personGenListenerMock.expects(once()).method("personGenerated").with(and(isA(Person.class), hasProperty("Name", eq("Iain")));
PersonGenerationListener listener = (PersonGenerationListener)personGenListenerMock.proxy();
If an exception is thrown by the getter method for a property, the property
does not exist, is not readable, or a reflection related exception is thrown
when trying to invoke it then this is treated as an evaluation failure and
the matches method will return false.
This matcher class will also work with JavaBean objects that have explicit
bean descriptions via an associated BeanInfo description class. See the
JavaBeans specification for more information:
http://java.sun.com/products/javabeans/docs/index.html
- Author:
- Iain McGinniss, Nat Pryce, Steve Freeman
|
Method Summary |
void |
describeTo(Description description)
Generates a description of the object. |
static
|
hasProperty(java.lang.String propertyName,
Matcher<?> valueMatcher)
Creates a matcher that matches when the examined object has a JavaBean property
with the specified name whose value satisfies the specified matcher. |
boolean |
matchesSafely(T bean,
Description mismatch)
Subclasses should implement this. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
HasPropertyWithValue
public HasPropertyWithValue(java.lang.String propertyName,
Matcher<?> valueMatcher)
matchesSafely
public boolean matchesSafely(T bean,
Description mismatch)
- Description copied from class:
TypeSafeDiagnosingMatcher
- Subclasses should implement this. The item will already have been checked
for the specific type and will never be null.
- Specified by:
matchesSafely
in class TypeSafeDiagnosingMatcher<T>
describeTo
public void describeTo(Description description)
- Description copied from interface:
SelfDescribing
- Generates a description of the object. The description may be part of a
a description of a larger object of which this is just a component, so it
should be worded appropriately.
- Parameters:
description
- The description to be built or appended to.
hasProperty
public static <T> Matcher<T> hasProperty(java.lang.String propertyName,
Matcher<?> valueMatcher)
- Creates a matcher that matches when the examined object has a JavaBean property
with the specified name whose value satisfies the specified matcher.
For example:
assertThat(myBean, hasProperty("foo", equalTo("bar"))
- Parameters:
propertyName
- the name of the JavaBean property that examined beans should possessvalueMatcher
- a matcher for the value of the specified property of the examined bean


Husband of 12 years to a loving and patient woman.
Father to 3 very energetic boys.
Addicted to cycling.
I do geeky stuff with machines, electronics, and computers.


This is a survey collecting data on individuals' social lives. This project is meant to gain insight into the differences of social lives of people based on age and regional assets.


15 November 1996
Disease Outbreak Reported
The WHO epidemiologist in Kigali, Rwanda visited Goma, Zaire on 13 November to investigate rumours of suspected cholera. Specimens from two patients in the Goma central hospital were obtained and have now been investigated in the laboratory. The investigations confirmed infection with Vibrio cholerae. The patients were local residents of Sake situated six km from the Mugunga refugee camp. At present it is not possible to reach this area. The WHO team in Kigali is being reinforced by WHO's Cholera Task Force Coordinator who departs for Kigali on Saturday 16 November.


> #### “Operate what you build” puts the devops principles in action by having the team that develops a system also be responsible for operating and supporting that system
Project A - Client X
Microservices Architecture
25 services - 90 pods
Java/Spring - NodeJs
Kubernetes
Google Cloud Platform
5 people
Project A - Client X
Project A - Wall of Shame
No Code Coverage
No Static Code Analysis
Few Integration tests
No Stress tests
Quality is Ownership
Empower each team member to react to a crisis on its own
> #### Improving daily work is even more important than doing daily work
Phoenix Project
Quality is Teamwork
> #### A great team doesn’t mean that they had the smartest people. What made those teams great is that everyone trusted one another. It can be a powerful thing when that magic dynamic exists.


I am a video game designer and writer who lives in Portland, Oregon, where I’m active in the indie game community.
I spend my time trying to do “new stuff’ with narrative in my own games, and playing every game I can get my hands on to learn from them.
I enjoy all aspects of the creative and production process; writing, bringing together creative and technical team members, and programming.
I’m also an experienced freelance video editor. I graduated from Columbia College Chicago with a B.A. in Film.
I am currently studying computer science in Portland while working on my games.
Video Game Projects
These are the video game projects I have worked on.
Waiting For The Loop
2016
Shifters
2016
Hot Cuppa Joe
2016
Golden
Website Design
Escape
Website Design
Dreams
Website Design
Software Development Projects
These are the software development projects I have worked on.
Round Icons
Graphic Design
Startup Framework
Website Design
Treehouse
Website Design
Contact Me
Waiting For The Loop
Writing, programming, design, VO direction
Download From Adventure Game Studio (Platform: PC)
A sci fi family drama visual novel in which a brilliant computer scientist builds an artificial intelligence that passes as human… but also attracts the attention of the government. Team of 6.
Features characters and events from Throw Me In The River and Interstellar Borders, but can be enjoyed and understood without knowledge of either.
Fully voice acted, with 450+ lines of dialog. Roughly 15 minutes long.
There are multiple endings, and one secret ending.
Made in one week fora game jam hosted in Portland, Oregon by Portland Indie Game Squad, then touched up over the course of two additional weeks.
Download From Adventure Game Studio (Platform: PC)
A story driven visual novel in which a paranoid scientist with a flair for the dramatic teaches a seminar on the existence of Shape Shifters who live among us. Solo Project.
For this project, I was entirely on my own (I entered this game into the ‘Compo’ category for Ludum Dare). Shifters placed #91 in Mood, #118 in Theme and #122 in Humor in Ludum Dare 35.
Hot Cuppa Joe
Writing, design, voice acting
Help Joe Cuppa save his friends with his sick burns! Team of 5.
Hot Cuppa Joe placed in the top 16 entries for the Cartoon Network Game Jam.
All screenshots above are from builds of Hot Cuppa Joe during development, and were shared in blogs and social media while the game was in production.
Hot Cuppa Joe is currently unavailable for download, but will be made available on Cartoon Network’s website in 2017.
Download From Adventure Game Studio (Platform: PC)
A sci fi family drama visual novel in which a brilliant computer scientist builds an artificial intelligence that passes as human… but also attracts the attention of the government. Team of 6.
Features characters and events from Throw Me In The River and Interstellar Borders, but can be enjoyed and understood without knowledge of either.
Fully voice acted, with 450+ lines of dialog. Roughly 15 minutes long.
There are multiple endings, and one secret ending.
Made in one week fora game jam hosted in Portland, Oregon by Portland Indie Game Squad, then touched up over the course of two additional weeks.
Download From Adventure Game Studio (Platform: PC)
A sci fi family drama visual novel in which a brilliant computer scientist builds an artificial intelligence that passes as human… but also attracts the attention of the government. Team of 6.
Features characters and events from Throw Me In The River and Interstellar Borders, but can be enjoyed and understood without knowledge of either.
Fully voice acted, with 450+ lines of dialog. Roughly 15 minutes long.
There are multiple endings, and one secret ending.
Made in one week fora game jam hosted in Portland, Oregon by Portland Indie Game Squad, then touched up over the course of two additional weeks.
Download From Adventure Game Studio (Platform: PC)
A sci fi family drama visual novel in which a brilliant computer scientist builds an artificial intelligence that passes as human… but also attracts the attention of the government. Team of 6.
Features characters and events from Throw Me In The River and Interstellar Borders, but can be enjoyed and understood without knowledge of either.
Fully voice acted, with 450+ lines of dialog. Roughly 15 minutes long.
There are multiple endings, and one secret ending.
Made in one week fora game jam hosted in Portland, Oregon by Portland Indie Game Squad, then touched up over the course of two additional weeks.
Download From Adventure Game Studio (Platform: PC)
A sci fi family drama visual novel in which a brilliant computer scientist builds an artificial intelligence that passes as human… but also attracts the attention of the government. Team of 6.
Features characters and events from Throw Me In The River and Interstellar Borders, but can be enjoyed and understood without knowledge of either.
Fully voice acted, with 450+ lines of dialog. Roughly 15 minutes long.
There are multiple endings, and one secret ending.
Made in one week fora game jam hosted in Portland, Oregon by Portland Indie Game Squad, then touched up over the course of two additional weeks.
Download From Adventure Game Studio (Platform: PC)
A sci fi family drama visual novel in which a brilliant computer scientist builds an artificial intelligence that passes as human… but also attracts the attention of the government. Team of 6.
Features characters and events from Throw Me In The River and Interstellar Borders, but can be enjoyed and understood without knowledge of either.
Fully voice acted, with 450+ lines of dialog. Roughly 15 minutes long.
There are multiple endings, and one secret ending.
Made in one week fora game jam hosted in Portland, Oregon by Portland Indie Game Squad, then touched up over the course of two additional weeks.
Download From Adventure Game Studio (Platform: PC)
A sci fi family drama visual novel in which a brilliant computer scientist builds an artificial intelligence that passes as human… but also attracts the attention of the government. Team of 6.
Features characters and events from Throw Me In The River and Interstellar Borders, but can be enjoyed and understood without knowledge of either.
Fully voice acted, with 450+ lines of dialog. Roughly 15 minutes long.
There are multiple endings, and one secret ending.
Made in one week fora game jam hosted in Portland, Oregon by Portland Indie Game Squad, then touched up over the course of two additional weeks.


Projects on this site were conveived and designed by students on the MABD course in the Department of Typography and Graphic Communication, University of Reading. The projects were completed during the Publishing Platforms spring module in 2020, taught by Lozana Rossenova.
Site design & development by Lozana Rossenova.
Site concept is based on Rhizome's Narrative Archives platform.


--- title: Tutorials ---
The following articles are tutorials. They should act as a zero to complete guide of how to accomplish a certain task.
The following tutorials are available:


TransferLog
or CustomLog
directive. These directives can be
repeated to create more than one log file (in previous releases,
only one logfile could be given per server configuration).
The TransferLog
directive creates a log file
in the standard "common log format", although this can be customized
with LogFormat
. The syntax of these two
directives is the same as for the config log module in previous
Apache releases.
The real power of multiple log files come from the ability to create log files in different formats. For example, as well as a CLF transfer log, the server could log the user agent of each client, or the referrer information, or any other aspect of the request, such as the language preferences of the user.
The new CustomLog
directive takes both a filename to log
to, and a log file format.
The first argument is the filename to log to. This is used
exactly like the argument to TransferLog
, that is,
it is either a file as a full path or relative to the current
server root, or |programname. Be aware that anyone who can write to
the directory where a log file is written can gain access to the uid
that starts the server. See the
security tips document for details.
The format argument specifies a format for each line of the log file.
The options available for the format are exactly the same as for
the argument of the LogFormat
directive. If the format
includes any spaces (which it will do in almost all cases) it
should be enclosed in double quotes.
TransferLog
or CustomLog
directives, the
logs defined for the main server will be used. If it does
contain one or more of these directives, requests serviced by
this virtual host will only be logged in the log files defined
within its definition, not in any of the main server's log files.
See the examples below.
TransferLog logs/access_log CustomLog logs/agents "%{user-agent}i"To define a CLF transfer log and a referrer log which log all accesses to both the main server and a virtual host:
TransferLog logs/access_log CustomLog logs/referer "%{referer}i" <VirtualHost> DocumentRoot /whatever ServerName my.virtual.host </VirtualHost>Since no TransferLog or CustomLog directives appear inside the <VirtualHost> section, any requests for this virtual host will be logged in the main server's log files. If however the directive
TransferLog logs/vhost_access_logwas added inside the virtual host definition, then accesses to this virtual host will be logged in vhost_access_log file (in common log format), and not in logs/access_log or logs/referer.


Module: ActiveModel::AttributeAssignment
| Relationships & Source Files | |
| Extension / Inclusion / Inheritance Descendants | |
|
Included In:
| |
| Defined in: | activemodel/lib/active_model/attribute_assignment.rb |
Instance Method Summary
-
#assign_attributes(new_attributes)
Allows you to set all the attributes by passing in a hash of attributes with keys matching the attribute names.
Instance Method Details
#assign_attributes(new_attributes)
Allows you to set all the attributes by passing in a hash of attributes with keys matching the attribute names.
If the passed hash responds to permitted?
method and the return value of
this method is false
an ForbiddenAttributesError exception
is raised.
class Cat
include ActiveModel::AttributeAssignment
attr_accessor :name, :status
end
cat = Cat.new
cat.assign_attributes(name: "Gorby", status: "yawning")
cat.name # => 'Gorby'
cat.status => 'yawning'
cat.assign_attributes(status: "sleeping")
cat.name # => 'Gorby'
cat.status => 'sleeping'
26 27 28 29 30 31 32 33 34
# File 'activemodel/lib/active_model/attribute_assignment.rb', line 26
def assign_attributes(new_attributes) if !new_attributes.respond_to?(:stringify_keys) raise ArgumentError, "When assigning attributes, you must pass a hash as an argument." end return if new_attributes.nil? || new_attributes.empty? attributes = new_attributes.stringify_keys _assign_attributes(sanitize_for_mass_assignment(attributes)) end


--- layout: page title: About header-img: "img/Volcanoes.JPG" ---
Full stack software engineer with a passion for solving complex problems through code. Experienced in Ruby on Rails, JavaScript, and React as well as 5+ years professional experience in data analytics and technical consulting. I discovered software development by using statistical programs to solve problems and through my experience working for a hyper-growth SaaS technology company. I bring strong skills in problem-solving, communication, and teamwork that help organizations drive growth and meet goals through technical solutions. When I’m not coding, I love exploring the Hawaiian outdoors.