--- body_id: team ---
We are Engineers. Physicians. Designers. Scientists. Together, we're working to bring mobile health technology to the underserved.
Click on a picture to learn more about each team member.
Cecilia oversees all aspects of product development, including the core CareMessage application and associated disease management content. She works with partner organizations and patients to design, test and refine CareMessage products. She is proficient in the process of human-centered design pioneered by the Hasso Plattner Institute of Design (d.school) at Stanford University, where she graduated with a degree in Product Design Engineering. A native Spanish speaker who grew up in South Texas and Mexico, Cecilia helps ensure that all CareMessage programs accommodate the cultural and linguistic needs of our minority patients.
Manuel Rivera is a software engineer who leads all aspects of privacy, security and interoperability for CareMessage's core product. He comes to the organization with a passion for health IT and expertise with real-time client-server communication, computer graphics, and interaction design. Manuel has an MS in Telecommunication Engineering from the Technical School of Madrid (UPM) with a specialty in Biomedical Engineering and has studied the social impact of technology at UC Berkeley.
Daniel is a full stack software engineer with over 10 years of experience, and has expertise in Ruby on Rails, Javascript, HTML, CSS, Git, SASS, and HAML. He has previously built multiple web and mobile platforms for both startups and Fortune 500 companies, and loves working on important projects that can have a significant impact.
Patricia helps develop many of CareMessage's programs, especially those focused on childhood and adolescence health issues. She comes to the organization with a passion to improve health literacy among low income populations. She has over 8 years of experience creating health education materials that are both culturally and low literacy appropriate. She has worked with a Medi-Cal managed care population at the Contra Costa Health Plan, and holds a Masters in Public Health (MPH) from San Diego State University.
Karen helps in the development of CareMessage's mental health specific programs through targeted clinical consultation. She is passionate about making mental health tools more accessible to larger populations and integrating mental health care more seamlessly into primary care. Karen is currently finishing her fellowship in Child & Adolescent Psychiatry at the University of California, San Francisco (UCSF). She completed her undergraduate work at the University of California, Los Angeles (UCLA) in Spanish Literature, and completed both medical school and General Adult Psychiatry Residency at UCSF.
Bruno is a full stack software engineer with a specialized expertise in front-end web development. He has over a decade of experience, which includes expertise in HTML5, Ruby on Rails, Javascript, AngularJS, JQuery etc.
Gabriel is a full stack software engineer with broad experience in Ruby on Rails, Javascript, HTML5, Git, CSS and its flavours. In his 8 years of industry experience he worked in several roles with projects varying greatly in length and expertise area.
Ronaldo is a full stack software engineer with extensive expertise in back-end development. Ronaldo is a self-learner that is driven by results, and brings over a decade of experience to the team. He is proficient in Ruby, Java, SQL and NoSQL databases, application servers and integrations.
Aareet is a quality engineer who is passionate about working on meaningful projects. He studied Nanotechnology Engineering at the University of Waterloo in Canada, has worked on prototyping an anti-cancer drug delivery system and has worked at software companies big and small.
Nicco helps to write and customize culturally relevant messages for Care Message’s users based on cultural relevance, community needs, and trends at an appropriate literacy level. She comes to the organization with a passion for health and wellness. She has over 10 years of experience in social services and health education working with diverse populations. She hopes to empower and motivate people to make positive health changes that will change their lives. She has worked as a health coach and a natural chef. Most recently, she has worked with a partnership between a non-profit and a county health care system to help facilitate patient group visits, develop culturally appropriate curriculums, and train new staff around group facilitation. She holds a Masters in Holistic Health Education from John F. Kennedy University.
Click on a picture to learn more about each team member.
Vineet is honored to lead the most amazing team on the planet, and is passionate about seeing CareMessage's customers succeed in the process of creating a better, smarter healthcare system. Previously, he conducted and published peer-reviewed research in molecular biology and epidemiology at the Mount Sinai School of Medicine, the National Institutes of Health, and the Stanford School of Medicine. A Forbes '30 under 30' social entrepreneur, Vineet has served as a student representative on the Stanford Board of Trustees and the Stanford Medicine Community Council and graduated with University Distinction from Stanford.
Grace oversees the implementation and ongoing support of CareMessage's portfolio of existing and new partners and is passionate about helping our partner organizations and the patients they serve. She loves empowering health care providers with more efficient ways to serve their patient populations. Prior to joining CareMessage, Grace worked for a top management consulting firm and has experience helping diverse health care organizations adopt new technologies. She graduated from UCLA with a BA in Business Economics. Outside of her professional career, Grace has worked with a number of non-profit health education organizations, most notably supporting children with parents fighting cancer.
Fiona helps guide the launch process and ongoing support for CareMessage's partner organizations. She comes to CareMessage with a background in emergency services in Israel, and public health outreach in Eastern Europe and Central Asia. Fiona is interested in implementing scalable, low-cost solutions to preventable conditions, and reaching populations that have traditionally lacked access to health care. Her idols include Paul Farmer, Jimmy Carter, and Tintin. She received her bachelor's degree in Human Biology from Stanford.
Jesse supports CareMessage's day-to-day operations, and contributes to development and marketing efforts. He strongly believes in the power of technology to drive social impact, and is excited to be part of a small and passionate team. Prior to joining CareMessage, Jesse worked as freelance writer, and volunteered at Kiva.org, the UN Environment Program, and the Sarvodaya Shramadana Movement in Sri Lanka. Jesse holds a BA in Political Science from Vassar College, and a MA in International Development from the Graduate Institute of International and Development Studies in Geneva, Switzerland.
Click on a picture to learn more about each team member.
Greg leads the clinical review and oversight of CareMessage's programs and works with the Scientific Advisory Board to produce high-quality data to help drive informed decisions about CareMessage's clinical products. He comes to the organization with a passion to educate and empower patients to make smarter healthcare decisions, as well as creating and implementing new technologies to improve healthcare outcomes. Greg is currently an Assistant Professor of Clinical Medicine at the University of California, San Francisco (UCSF). He received his bachelors degree from Northwestern, his medical degree from the Pritzker School of Medicine at the University of Chicago, and completed his internal medicine residency at UCSF.
Aditya leads all aspects of data collection, analysis and reporting for CareMessage's partner projects. Passionate about infusing more data-driven strategies into healthcare technology infrastructures, Aditya previously worked on digital health projects in both the academic and private sectors. Aditya holds a Bachelors of Arts in Anthropology from Stanford University and a Masters of Science in Epidemiology from the Stanford University School of Medicine.
Wilfred Jaeger, MD, MBA, is the Chairman of the CareMessage Board and has over 25 years of experience investing in healthcare companies. He is currently Managing Partner at Three Arch Partners and Health Invest Equity Partners. Collectively managing over $1 billion in capital, the funds are focused on investing in healthcare companies focusing on areas with significant unmet clinical or infrastructure needs. A former practicing clinician, Wilfred received his MD from the University of British Columbia and MBA from the Stanford Graduate School of Business.
Harsh Patel, MBA, is a Partner at Claremont Creek Ventures with over 20 years of experience building, operating and investing in technology growth companies. He’s been particularly focused on big data analytics and SaaS solutions applied to large markets in healthcare, energy, government, and retail. Previously, Harsh was General Partner at RRE Ventures and In-Q-Tel, the CIA’s venture capital arm, and has invested in technology companies including Palantir, Tendril, and Flipswap (now ERecyclingCorps). Harsh received his MBA from the Stanford Graduate School of Business and a B.S. in Engineering from the University of Illinois at Urbana-Champaign.
Doyle is a member of Pershing Square Capital Management, L.P.’s Investment Team and a member of the Advisory Board of the Pershing Square Foundation. He is also the Executive Chairman of Novocure Ltd., a company commercializing a new therapeutic modality for solid tumors using low intensity electric fields. Previously Doyle served as an executive of Johnson & Johnson and as a management consultant with McKinsey & Company. Doyle is a graduate of MIT and Harvard Business School. He serves as a member of the Dean’s Advisory Board of Harvard Business School; Harvard Business School’s Healthcare Advisory Board; and the MIT Corporation’s Visiting Committee for Undergraduate Education.
Christy Chin is a managing director at the Draper Richards Kaplan Foundation (DRK), a venture philanthropy group focused on early-stage high-impact nonprofits. At DRK, Christy engages donors in new funds and supports DRK entrepreneurs. In addition to Care Message, she sits on the boards of Avanti, Blue Engine, Green City Force, Jacaranda Health, Students for Education Reform and Watsi. Before DRK, Christy worked in philanthropy at the William & Flora Hewlett and Skoll Foundations, as well as in venture capital at Bedrock Capital Partners and Norwest Venture Capital. She currently serves on the boards of Benetech, her children's PTA, and is an advisor to Ashoka U. Christy received her Master of Business Administration from the Harvard Business School and holds a Bachelor of Arts in History from Colgate University.
Stuart Burden, MHS, is the Associate Director for Effectiveness Fellow at the S.D. Bechtel Jr. Foundation, and has over 25 years of experience working with major foundations and philanthropic institutions. He previously served as a Senior Consultant for the Monitor Institute, the Director of Community Affairs for the Levi Strauss Foundation and as a Senior Program Officer for the John D. and Catherine T. MacArthur Foundation. Stuart received his B.S. in human biology from Stanford University and his Master of Health Sciences (MHS) degree from Johns Hopkins University.
Brian Driscoll is the Director of Individual Philanthropy at Genesys Works and has over 25 years of experience leading major fundraising initiatives for nonprofit organizations. Brian has led development efforts at nationally recognized organizations like Health Leads and Genesys Works, and has spearheaded fundraising campaigns for educational institutions including the Thacher School, Babson College, and Regis College. Brian received his B.A. in English from Columbia University.


We're sorry but my-plugin doesn't work properly without JavaScript enabled. Please enable it to continue.
Message container


The CVM is intended to be run in the standard configuration for a system
utlizing a hardware TTP: a small component (ie. which needs little RAM) in the
secure hardware, and a larger component on the standard host machine, which handles all larger storage. The secure
hardware we support is the IBM 4758 secure coprocessor (SCop). The SCop component
is called cvm
, and the host program is called
card_server
.
The SCop piece can also be compiled to run on the host, communicating to the storage server over UDP. See the INSTALL file for details on how to do this.
prog.runtime
.
sfdl
module, eg. gcd-input.cjs
and insert-sort-input.cjs
.
Note that the CSON library used by the CVM has some support for concatenating data files. Eg.
The inputs for gcd
could be the monolithic {a=35,b=28}
, or the
concatenation of {a=25}
and {b=35}
.
$ card_server -d /tmp/faerieplayto use the directory
/tmp/faerieplay
for writing the data. NOTE: this working directory is just an example, but it should be on a local, not a network drive. Otherwise the circuit VM will be very slow.
The running server can be used for many runs of the CVM.
It responds to two signals:
$ cvm prog.runtime < inputs.cjsThis will print the results on standard output.
NOTE: the development version of the 4758 runs Linux and has a shell, so the cvm is invoked in the same manner on a 4758 as on a normal Linux host.


xzgrep
Search possibly compressed files with xz, lzma, gzip, bzip2, lzop, or zstd for regular expressions.
See also: `grep`.
More information: home page
- Search for a pattern within a file:
xzgrep "search_pattern" path/to/compressed/file
- Search for an exact string (disables regular expressions):
xzgrep --fixed-strings "exact_string" path/to/compressed/file
- Search for a pattern in all files showing line numbers of matches:
xzgrep --line-number "search_pattern" path/to/compressed/file
- Use extended regular expressions (supports `?`, `+`, `{}`, `()` and `|`), in case-insensitive mode:
xzgrep --extended-regexp --ignore-case "search_pattern" path/to/file
- Print 3 lines of context around, before, or after each match:
xzgrep --context|before-context|after-context=3 "search_pattern" path/to/file
- Print file name and line number for each match with color output:
xzgrep --with-filename --line-number --color=always "search_pattern" path/to/file
- Search for lines matching a pattern, printing only the matched text:
xzgrep --only-matching "search_pattern" path/to/file


|
retinanet-cell-detection
1
retinanet-cell-detection: RetinaNet for cell detection.
|
Describes backbone information and provides utility functions. More...
Public Member Functions | |
| def | retinanet (self, args, kwargs) |
| Returns a retinanet model using the correct backbone. More... | |
| def | download_imagenet (self) |
| Download pre-trained weights for the specified backbone name. More... | |
| def | validate (self) |
| Checks whether the backbone string is correct. More... | |
| def | preprocess_image (self, inputs) |
| Takes as input an image and prepares it for being passed through the network. More... | |
Static Public Attributes | |
| list | allowed_backbones = ['mobilenet128', 'mobilenet160', 'mobilenet192', 'mobilenet224'] |
Describes backbone information and provides utility functions.
| def mynet_keras.models.mobilenet.MobileNetBackbone.download_imagenet | ( | self | ) |
Download pre-trained weights for the specified backbone name.
This name is in the format mobilenet{rows}_{alpha} where rows is the imagenet shape dimension and 'alpha' controls the width of the network. For more info check the explanation from the keras mobilenet script itself.
| def mynet_keras.models.mobilenet.MobileNetBackbone.preprocess_image | ( | self, | |
| inputs | |||
| ) |
Takes as input an image and prepares it for being passed through the network.
| def mynet_keras.models.mobilenet.MobileNetBackbone.retinanet | ( | self, | |
| args, | |||
| kwargs | |||
| ) |
Returns a retinanet model using the correct backbone.
| def mynet_keras.models.mobilenet.MobileNetBackbone.validate | ( | self | ) |
Checks whether the backbone string is correct.
|
static |


Connections are the primary unit of resource management. Sessions and Links are components of connections. When the Connection is destroyed/discarded, any resources associated with the Sessions and Links are automatically destroyed or discarded as well.
Each of the Connection, Session, and Link endpoints share a common state model. Note that although this follows the same pattern as the protocol state model for open/close, begin/end, and attach/detach, this does not necessarily correspond one to one to the protocol state model for endpoints. For example the engine implementation may detach/reattach a link endpoint without visibly changing the external state.
The state of each endpoint is divided into two parts, one reflecting the state of the local endpoint, and the other reflecting the state of the remote endpoint as last communicated.
LOCAL: UNINIT ACTIVE CLOSED REMOTE: UNINIT ACTIVE CLOSED
In total there are 9 possible states:
LOCAL REMOTE Example ------------------------------------------------------------------------- UNINIT UNINIT A newly created connection. UNINIT ACTIVE A remotely initiated connection prior to full establishment. UNINIT CLOSED A remotely initiated connection that has been closed prior to full establishment. ACTIVE UNINIT A locally initiated connection prior to full establishment. ACTIVE ACTIVE A fully established connection. ACTIVE CLOSED A remotely terminated connection. CLOSED UNINIT A locally initiated connection that has been closed prior to full establishment. CLOSED ACTIVE A locally terminated connection. CLOSED CLOSED A fully terminated connection.
Additionally each endpoint has a local and remote error slot which may be filled with additional information regarding why the endpoint was transitioned to CLOSED.


recipes | brew-journal
recipes
${field(form.type)}
${field(form.style)}
name
style
type
author
insert date
${recipe_a(recipe)}
${recipe.get_type_display()}
${recipe.style.name} (${recipe.style.bjcp_code})
—
${recipe.author.username}
${std.fmt.date.best(recipe.insert_date, recipe.author)}


4 references to CurrentUser
System.Management.Automation (4)
security\SecuritySupport.cs (4)
130
ExecutionPolicyScope.
CurrentUser
,
173
case ExecutionPolicyScope.
CurrentUser
:
297
case ExecutionPolicyScope.
CurrentUser
:
478
case ExecutionPolicyScope.
CurrentUser
:


--- layout: post status: publish published: true title: Game-watch at Twenty Sports Grille Monday Night author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 2998 wordpress_url: http://ivyenvy.com/?p=2998 date: '2010-07-18 15:43:43 +0000' date_gmt: '2010-07-18 20:43:43 +0000' categories: - Ivy Envy - Events tags: - Astros - Twenty Sports Grille - Game-Watch comments: - id: 1489 author: Ryan author_email<EMAIL_ADDRESS>author_url: '' date: '2010-07-19 01:02:16 +0000' date_gmt: '2010-07-19 06:02:16 +0000' content: "Won't be able to make it down for the game watch but I strongly encourage all of the Cubs fans to be there!!!\r\n\r\nMeehan" ---
We are having our monthly Cubs game-watch at Twenty Sports Grille in Moline. Twenty has been a great sponsor and eager to work with us. They have twenty beers on tap and a menu with great food.
The Cubs will play the Astros and the game starts at 7pm, so come on down. Twenty is located at 1405 5th Avenue in Moline.


Svendborg is a large town situated on the southern side of Fyn.
The approaches from both east or west are attractive. The Svendborg Sund offers fourteen yacht harbours and numerous anchorages, all set in excellent surroundings. The main harbour attracts many classic yachts and old wooden working boats.
The current in the Sund can be strongly influenced by the wind, and usually follows the wind direction in a strong blow. In calmer weather, the current changes every six hours and rarely reaches more than two or three knots.
Last updated February 2013.


named-checkzone — zone file validity checking tool
named-checkzone
[-d
] [-j
] [-q
] [-v
] [-c
] [class
-k
] [mode
-n
] [mode
-o
] [filename
-t
] [directory
-w
] [directory
-D
] {zonename} {filename}
named-checkzone checks the syntax and integrity of a zone file. It performs the same checks as named does when loading a zone. This makes named-checkzone useful for checking zone files before configuring them into a name server.
Enable debugging.
Quiet mode - exit code only.
Print the version of the named-checkzone program and exit.
When loading the zone file read the journal if it exists.
class
Specify the class of the zone. If not specified "IN" is assumed.
mode
Perform "check-names" checks with the specified failure mode. Possible modes are "fail", "warn" (default) and "ignore".
mode
Specify whether NS records should be checked to see if they are addresses. Possible modes are "fail", "warn" (default) and "ignore".
filename
Write zone output to filename
.
directory
chroot to directory
so that include
directives in the configuration file are processed as if
run by a similarly chrooted named.
directory
chdir to directory
so that relative
filenames in master file $INCLUDE directives work. This
is similar to the directory clause in
named.conf
.
Dump zone file in canonical format.
The domain name of the zone being checked.
The name of the zone file.


This site uses local storage to save your choices and requires Javascript to function properly.
Select a page:
(warning not reversible)


Holodeck automatically intercepts all messages sent and received over the network. These messages can be found in the network logs pane.
Select which columns are displayed by right clicking and selecting "Select Visible Columns
View the message details of a network message by opening the Network Message Details Pane
Export the contents of the Network logs by right clicking the Network Logs node in the Project Pane and selecting "Export Log to File"
Show the Network Logs pane by double-clicking on the Network Logs node in the Project Pane.
TimeStamp The time at which the network message was sent or received.
Thread The thread ID that sent or received the network message.
Direction If the packet was sent or received.
Protocol The protocol over which the packet was sent.
Msg Length The length of this single message packet, long messages sometimes span multiple packets.
Destination IP The IP the message was sent to.
Destination Port The port used to receive the message.
Source IP The IP the message was sent from.
Source Port The port used to send the message
Start of Message The first eight (8) bytes of the message.
Right click anywhere in this pane for the following options:
Copy Copy the currently selected Network message; a sample copied function follows
Type: Outgoing
TimeStamp: 05/28/2004 00:25:48:031
ThreadID: 3364
Protocol: MSAFD Tcpip [TCP/IP]
Destination IP Address: <IP_ADDRESS>
Destination Port: 80
Source IP Address: <IP_ADDRESS>
Source Port: 7685
Export Log to File Export the currently displayed log into an easy to parse Comma Separated Value file.
Select Visible Columns Select which columns are displayed in the log pane.
Note: In order to get network logs, Holodeck has to be attached when the connection is first established. This means if Holodeck has been attached to an already running instance of an application network logs will not show up.
For more information regarding the Network Logs see the help topic within Holodeck in Depth


---
layout: page
id: handbook
title: Our Handbook - 14islands
og_image: /images/about/we-are-14islands-2.jpg
---
{% include svgs/logo/logo-new-symbol.min.svg %}
{% markdown %}
# Our Handbook
Hi there!
Welcome to the 14islands Handbook.
This is where we try to document the *why*, *what* and the *how* of 14islands.
Just like the company itself, this book is a living organism. It shouldn’t be taken as gospel, and everyone is free to propose additions/changes to it.
Dig in, enjoy and most importantly; “Don't Panic”.
{% endmarkdown %}
{% markdown %}
## Quicklinks
* [Why the name?](#name)
* [It’s in the water](#purpose)
* [Our culture](#culture)
* [Getting started](#getting-started)
* [Tools of the trade](#tools)
* [Sales & Marketing](#sales)
* [Change is good™](#the-end)
{% endmarkdown %}
{% markdown %}
## First things first - why the name?
A part from having a nice ring to it, the idea came from reading the [Wikipedia article](https://en.wikipedia.org/wiki/Stockholm) article about Stockholm:
{% include blog-quote.html quote="The city is spread across 14 islands on the coast in the southeast of Sweden" %}
Most Stockholmers have no idea how many islands the city is built on, so this is a great conversation piece at parties. *🍹*{: class="emoji"}
As an added bonus, Hjörtur comes from [Iceland](https://en.wikipedia.org/wiki/Iceland) (a very big island) and Marco from [Florianópolis](https://en.wikipedia.org/wiki/Florianópolis) which is a beautiful island in the south of Brazil. Coincidence? We think not.
One day we will buy our own island. And if you're looking for a lucky number, make it [14](https://en.wikipedia.org/wiki/14_(number)).
Now that we have that out of the way, let’s go through some serious business.
{% endmarkdown %}
{% markdown %}
## It’s in the water
We believe great user experiences set companies apart in the digital age. A great user experience is a sum of many parts. As a development studio, it’s our mission to help companies craft these experiences in a responsible, responsive, and playful way.
{% include blog-quote.html quote="We are united by our passion for great user experiences, beautiful design and creative technologies." %}
We don’t have a mission statement or [insert corporate buzzword] strategy. Instead, we’ve managed to agree on five principles that we think are extra important. We try to keep these in mind when talking to each other and to clients.
#### Honesty.
We don't lie to get ahead or to hide our failures.
#### Quality.
We care about the details, in graphical design, code and process.
#### Openness.
We give credit to individuals and share our work with the community.
#### User experience.
We are passionate about creating great user experiences. The end result is what matters the most.
#### Playful.
We have fun and make cool things. We don’t take ourselves too seriously.
{% endmarkdown %}
{% markdown %}
## Our Culture
We are a small company and we don’t need lots of policies or rules. If you want to update, change or fix something, go for it.  We all make things here.
{% include blog-quote.html quote="The best way to motivate your fellow islanders is to lead by example and show something awesome you made." %}
We don’t have a hierarchy in 14islands. We don’t have managers, we have collaborators. Everyone is creative and everyone’s opinion matters.
{% include blog-quote.html quote="Humans are not “resources” - we are individuals." %}
### Language
All of us come from different cultures - this is an amazing thing and gives us a unique point of view. Sometimes communication needs a bit of extra work because of this, and an open mind is the best way to approach any situation.
{% include blog-quote.html quote="Avoid corporate speak - use simple words if you can." %}
The official 14islands language is english. Currently, none of us are native english speakers so this can be challenging. Try to avoid unnecessary, complicated words that don’t add value. Keep it simple!
### Avoid distractions
We try to keep meetings to a minimum. If you need to call a meeting, keep it short and sweet. A good meeting should have a clear agenda and fixed time frame.
We often sit together in the same room - it’s awesome because we can skip sending emails and speak like humans instead. However, remember to be respectful and not interrupt people when they are in the zone.
{% include blog-quote.html quote="The official 🎧 rule is: headphones on → please don’t interrupt (unless the building is on fire)" %}
Slack is great for passive communication where you don’t need an answer straight away. Interactions are good and we enjoy talking most of the time.
### Work-life balance
There’s no reason to pretend you’re busy or stay late just because you think it’s expected. Living a rich life outside of work is the best fuel for creativity.
No one should have to feel guilty for:
* leaving early / arriving late.
* taking vacation
* having a long lunch
* going to the dentist
* watching a funny video
* others working late nights out of free will
* etc.
Just do great work and have fun. Fun is important.
### Stay healthy
It’s not healthy to stay seated in the same position for eight hours every day. That’s why we got height-adjustable desks and laptops. Move around, go for a walk, meditate. Join the [20 pullups](http://twentypullups.com/) challenge. It’s better for you and for productivity.
Don’t forget to claim your health contribution. We each get 750 SEK per month to spend on gym memberships, new shoes, kettlebells, and other health related activities.  Healthy body means a healthy mind.
### Feedback
Good constructive feedback is how we help each other to get better. It’s important we all feel comfortable giving and receiving feedback.
{% include blog-quote.html quote="Don’t be afraid to speak your mind. Just be honest and respectful." %}
Code reviews can happen via [Github](https://github.com/14islands) pull requests or pair programming. This is intended to keep the quality up and make sure we can all improve on something.
[Lunch & Learn](#lunch--learn) also provides opportunities to discuss strategies and have a collective mind on how to best solve a problem.
### Lunch & Learn
Ever so often we grab lunch in the office to learn something new together. It’s usually very informal and happens on Fridays. We might review a recent project, learn about the latest JavaScript library, or we watch a video from a recent conference talk.
If you have a subject you like to talk about, check the [Office Whiteboard](https://trello.com/b/ECJob6Yz/office-whiteboard) to find out who is currently responsible for planning lunch & learns and make a suggestion!
These gatherings are optional and food is provided for the attendants. There is no such thing as a free lunch, or is there? *🍜*{: class="emoji"}
### A note on music 🎶
We love music and have a collaborative [Spotify playlist](https://open.spotify.com/user/14islands/playlist/0CIMPJgWH8ETTnn0ArbaRY) for the office. Participate, add songs and don’t be shy playing anything you are in the mood for. If you don’t like what’s playing, either ask if we can switch song or put on your headphones.
### Company Credit Card
When permanently hired everyone gets a company credit card. You are free to spend up to 1000 SEK every month without asking on anything company related (books, video courses, headphones etc.). To spend more, ping the [#requests](https://14islands.slack.com/messages/requests/) channel on Slack and we'll discuss.
### Rotating roles
We have a number of rotating responsibilities to keep things running smooth. One of us is always assigned to one of these roles and it’s their mission to make sure it is taken care of.
* *Breakfast champion* - schedules and buys food for the company breakfast every week
* *Lunch & Learn legend* - organises the next Lunch & Learn session and get’s food for attendees.
* *Party planner* - makes fun stuff happen outside the office.
* *Gardener* - gives half liter of water to our Bonsai tree every other week.
It’s important to keep this a company effort and rotate the roles between us the first Monday meeting of every month. You can see who is currently responsible on the [Office Whiteboard](https://trello.com/b/ECJob6Yz/office-whiteboard).
{% endmarkdown %}
{% markdown %}
## Getting started - Welcome onboard
Welcome to 14islands, we super happy that you are here. At this point, we already have a very good idea of what level you are at and what to expect from you. Make yourself at home *😃*{: class="emoji"}
{% include blog-quote.html quote="Don’t be afraid to ask for help." %}
We are on a journey, we will all make mistakes, learn from them and improve. We are in this together.
#### Mentor
During your first days you will be assigned a mentor which will help you and be a point of contact for questions regarding your work and your role.
#### Keys & alarm code
You’ll be given keys to the building and office on your first day. We will run you through how the alarm works and give you all the confidential secret codes.
#### Office hours
Most of us are doing work between 9 and 18 Swedish time. However, we don’t focus too much on the hours, the work is really what matters.
#### Monday morning meetings
We jump-start the week with a meeting every Monday morning normally at 9:00. Some people might not be in the office and are free to join remotely. We might temporarily adjust the time if people are meeting clients or are working in another time-zone.
Breakfast is on the company, for the ones present in the office.
#### Time reports
You are not required to do detailed time reports other than when working on client projects with a budget. You or someone on the project needs to create tasks in [Harvest](https://14islands.harvestapp.com/) to log time for the appropriate project tasks.
#### Salary payments
Salaries are paid out on the 25th of each month, or on the closest non-holiday weekday.
#### Overtime
You shouldn’t work overtime unless very necessary. In those occasions, register the time on the internal Harvest task called [14islands internal - Approved Overtime](https://14islands.harvestapp.com/time). This way we’ll know how much time you should get compensated later.

#### Vacation
25 days per year. Go nuts.
#### Email signature
You can be creative on the title, but here is an example:
{% highlight Text %}
Erlich Bachman
Chief Creative Visionary
http://14islands.com
{% endhighlight %}
{% endmarkdown %}
{% markdown %}
## Sales & Marketing
We have gotten most of our projects through personal relationships and recommendations.
{% include blog-quote.html quote="Doing great work is our marketing strategy." %}
We have no marketing people at the company. Marketing is everyone’s job. We use hack days and time between projects to write blog posts, case studies, create innovative things and talk to people.
Currently, around 86% of our work comes from our friends and people we’ve met in person. It’s always great to meet new people and be nice to others.
We try not to sell resources, we want to work as a team and focus on selling the unique value we can bring to every project.
### Social Sharing
In all our sharing efforts we should talk as we normally do with other people.  Lets keep it honest, fun and playful.
To get feedback and ideas from colleagues, post on the [#social-media](https://14islands.slack.com/messages/social-media/) channel on Slack. We have a [Buffer](https://buffer.com/) account to post to [Facebook](https://www.facebook.com/14islands), [LinkedIn](https://www.linkedin.com/company/14islands) and [Google+](https://googleplus.com/+14islands) at the same time.
#### [Codepen](http://codepen.io/14islands)
This is our lab if you will, its helpful to experiment new ideas and build out small things.
#### [Blog](http://14islands.com/blog/)
Long-form write-ups. Can be about anything we are inspired to write.
#### [Github](https://github.com/14islands/)
This is where we share our open source projects. We should aim to document things well in a readme.md, each file should answer what the project is, why its done, how to get started with documentation about features.
#### [Facebook](https://www.facebook.com/14islands)
Facebook is where friends live. We share news and whats going on inside and out of the company. Most are not technical people on FB, so lets minimise nerdy posts.
#### [Instagram](https://www.instagram.com/14islands)
Instagram is were people share beautiful imagery. We post if we catch a nice shot.
#### [Twitter](twitter.com/14islands)
Twitter is a short form real-time feed. We can share anything we think is interesting. Use handles and hash tags when appropriate to amplify content.
#### [LinkedIn](https://www.linkedin.com/company/14islands)
LinkedIn is a professional network. Its were we can share about new projects. We usually double post everything here using Buffer.
#### [Google+](https://googleplus.com/+14islands)
Not many people that use Google+, but its used by Google Search. We can double post everything here using Buffer.
{% endmarkdown %}
{% markdown %}
## Change is good™
We are still young and finding our way. We want to keep changing because this is how we grow and improve. New people bring new great ideas - you are one of us!
{% endmarkdown %}


Check out the gameplay trailer for Age of Empires IV
A gameplay trailer for Age of Empires IV has finally been revealed.
by Samuel TolbertSource: Xbox Game Studios
What you need to know
- Age of Empires IV is being developed by Relic Entertainment with support from World's Edge, the studio at Xbox Game Studios that oversees Age of Empires.
- Age of Empires IV was first announced back in 2017.
- At X019, we got a look at the game with the first ever Age of Empires IV gameplay trailer.
- Age of Empires IV will launch as a part of Xbox Game Pass.
Age of Empires IV was first announced back in 2017 during Gamescom. Fans of the real-time strategy series have been waiting since then for additional information since then. Earlier this year at E3 2019, Xbox formally showed off Age of Empires II: Definitive Edition, as well as announcing that a new studio focused on the Age of Empires series and headed up by Shannon Loftis.
At X019, more info was released as the new studio has been named World's Edge and Loftis stopped by to talk about the future of Age of Empires. Part of that future included showing a new gameplay trailer for Age of Empires IV, which you can check out below.
Right now, the game is only coming to PC however, that could change in the future. Like all Xbox Game Studios titles, Age of Empires IV is coming to Xbox Game Pass at launch. In the meantime, fans of the series can also check out Age of Empires II: Definitive Edition, which launched today.
Best of both worlds
Xbox Game Pass Ultimate 3 Month Subscription
Xbox Game Pass and Xbox Live Gold in one
Xbox Game Pass gives you access to over 200 games for one monthly fee. Xbox Game Pass Ultimate also adds Xbox Live Gold to the package so you can play online with your friends. Right now, you can purchase a three-month subscription for $45 through Amazon.
Get more Xbox
Xbox
- Xbox One S vs. Xbox One X: Which should you buy?
- Best Xbox One X and Xbox One S Accessories
- Best Xbox One Headsets 2019
- Best Xbox One Wireless Headsets 2019
- Best Xbox Controller Charging Stations in 2019
We may earn a commission for purchases using our links. Learn more.


--- layout: post status: publish published: true title: easiest ssh tunnel, saves you from internal surveillance author: display_name: vishvendra login: vishvendra email<EMAIL_ADDRESS>url: '' author_login: vishvendra author_email<EMAIL_ADDRESS>wordpress_id: 464 wordpress_url: https://vishvendrasingh.com/?p=464 date: '2017-02-12 09:43:29 +0530' date_gmt: '2017-02-12 09:43:29 +0530' categories: - Hacking - Linux - Proxy tags: [] comments: [] ---
just execute this command in linux terminal and get the easiest ssh tunnel, saves you from internal surveillance
ssh -D 8080 -f -C -q -N username@server.com


|
| void | Recenter () |
| | Re-centers the target in the next update. More...
|
| |
| void | RecalculateBoundsExtents () |
| | Recalculates the bounds based on the angular clamp mode. More...
|
| |
| override void | SolverUpdate () |
| | Should be implemented in derived classes, but Solver can be used to flush shared transform to real transform More...
|
| |
| void | SolverUpdateEntry () |
| | Tracks lifetime of the solver, disabling it when expired, and finally runs the orientation update logic More...
|
| |
| virtual void | SnapTo (Vector3 position, Quaternion rotation, Vector3 scale) |
| | Snaps the solver to the desired pose. More...
|
| |
| virtual void | SnapGoalTo (Vector3 position, Quaternion rotation, Vector3 scale) |
| | SnapGoalTo only sets the goal orientation. More...
|
| |
| virtual void | SnapTo (Vector3 position, Quaternion rotation) |
| | Snaps the solver to the desired pose. More...
|
| |
| virtual void | SnapGoalTo (Vector3 position, Quaternion rotation) |
| | SnapGoalTo only sets the goal orientation. More...
|
| |
| virtual void | AddOffset (Vector3 offset) |
| | Add an offset position to the target goal position. More...
|
| |
| void | UpdateWorkingToGoal () |
| | Updates the Working orientation (which may be the object, or the shared orientation) to the goal with smoothing, if enabled More...
|
| |
| void | UpdateWorkingPositionToGoal () |
| | Updates only the working position to goal with smoothing, if enabled More...
|
| |
| void | UpdateWorkingRotationToGoal () |
| | Updates only the working rotation to goal with smoothing, if enabled More...
|
| |
| void | UpdateWorkingScaleToGoal () |
| | Updates only the working scale to goal with smoothing, if enabled More...
|
| |
|
| SolverOrientationType | OrientationType [get, set] |
| | The desired orientation of this object. More...
|
| |
| bool | FaceTrackedObjectWhileClamped [get, set] |
| | The object will face the tracked object while the object is outside of the distance/direction bounds defined in this component. More...
|
| |
| bool | FaceUserDefinedTargetTransform [get, set] |
| | Face a user defined transform rather than using the solver orientation type. More...
|
| |
| Transform | TargetToFace [get, set] |
| | Transform this object should face rather than using the solver orientation type. More...
|
| |
| AxisFlags | PivotAxis [get, set] |
| | Rotation axes used when facing target. More...
|
| |
| float | MinDistance [get, set] |
| | Min distance from eye to position element around, i.e. More...
|
| |
| float | MaxDistance [get, set] |
| | Max distance from eye to element. More...
|
| |
| float | DefaultDistance [get, set] |
| | Initial placement distance. More...
|
| |
| float | MaxViewHorizontalDegrees [get, set] |
| | The horizontal angle from the tracked target forward axis to this object will not exceed this value. More...
|
| |
| float | MaxViewVerticalDegrees [get, set] |
| | The vertical angle from the tracked target forward axis to this object will not exceed this value. More...
|
| |
| bool | ReorientWhenOutsideParameters [get, set] |
| | The element will only reorient when the object is outside of the distance/direction bounds above. More...
|
| |
| float | OrientToControllerDeadzoneDegrees [get, set] |
| | The element will not reorient until the angle between the forward vector and vector to the controller is greater then this value. More...
|
| |
| bool | IgnoreAngleClamp [get, set] |
| | Option to ignore angle clamping. More...
|
| |
| bool | IgnoreDistanceClamp [get, set] |
| | Option to ignore distance clamping. More...
|
| |
| bool | IgnoreReferencePitchAndRoll [get, set] |
| | Option to ignore the pitch and roll of the reference target More...
|
| |
| float | PitchOffset [get, set] |
| | Pitch offset from reference element (relative to MaxDistance). More...
|
| |
| float | VerticalMaxDistance [get, set] |
| | Max vertical distance between element and reference. More...
|
| |
| AngularClampType | AngularClampMode [get, set] |
| | Accessors for specifying the method used to ensure the refForward vector remains within the bounds set by the leashing parameters. More...
|
| |
| int | TetherAngleSteps [get, set] |
| | The division of steps this object can tether to. More...
|
| |
| float | BoundsScaler [get, set] |
| | Scales the bounds to impose a larger or smaller bounds than the calculated bounds. More...
|
| |
| bool | UpdateLinkedTransform [get, set] |
| | If true, the position and orientation will be calculated, but not applied, for other components to use More...
|
| |
| float | MoveLerpTime [get, set] |
| | If 0, the position will update immediately. More...
|
| |
| float | RotateLerpTime [get, set] |
| | If 0, the rotation will update immediately. More...
|
| |
| float | ScaleLerpTime [get, set] |
| | If 0, the scale will update immediately. More...
|
| |
| bool | Smoothing [get, set] |
| | If true, updates are smoothed to the target. More...
|
| |
| Vector3 | GoalPosition [get, set] |
| | The final position to be attained More...
|
| |
| Quaternion | GoalRotation [get, set] |
| | The final rotation to be attained More...
|
| |
| Vector3 | GoalScale [get, set] |
| | The final scale to be attained More...
|
| |
| Vector3? | WorkingPosition [get, protected set] |
| | Automatically uses the shared position if the solver is set to use the 'linked transform'. More...
|
| |
| Quaternion? | WorkingRotation [get, protected set] |
| | Rotation version of WorkingPosition More...
|
| |
| Vector3? | WorkingScale [get, protected set] |
| | Scale version of WorkingPosition More...
|
| |
Follow solver positions an element in front of the of the tracked target (relative to its local forward axis).
The element can be loosely constrained (a.k.a. tag-along) so that it doesn't follow until the tracked target moves beyond user defined bounds.


Tasks on AWS
You can set bds
tasks to run on the Amazon cloud (i.e. an EC2 instance).
This is achieved by using system='aws'
.
WARNING
WARNING: Using bds
with cloud can incur in costs, unexpected expenses
You need to thoroughly review cloud resources used by your bds
programs to make sure you are not incurring into unwanted or unexpected expenses.
bds
does not make any warranties, use at your own risk.
Pre-requisites
You need all the following to run tasks on AWS:
- Amazon AWS access: Obviously you need an AWS account
- Privileges: The AWS security role should have access to the following services
- EC2: Create, run and terminate EC2 instances
- S3: Read, write and delete objects from an S3 bucket
- SQS: Create, send messages and delete SQS queues
- EC2 image (AMI): An image with
bds
installed (i.e. in order to runbds
tasks on an instance, you need an image that is capable of runningbds
)
Example walk-through
Example walk-through: Program and AWS parameters
The next "toy example" shows how to run a simple tasks on AWS.
Parameters for the EC2 instance are set in taskResources
hash.
In this example, the task will run on an instance in us-east-1
region.
It is also assumed that the EC2 image has been setup and bds
is properly installed in that image.
Obviously, you should replace the AMI number ami-123456abcdef
with your own image ID.
Similarly, all the other parameters in taskResources
should be set properly according to your account.
#!/usr/bin/env bds
# These hash called 'taskResources' contains the parameters we need to run a task on AWS
# WARNING: You need to replace ALL this parameters to use your account's settings
taskResources := { \
'region' => 'us-east-1' \
, 'instanceType' => 't3a.medium' \
, 'imageId' => 'ami-123456abcdef' \
, 'securityGroupIds' => 'sg-987654321abc' \
, 'subnetId' => 'subnet-192837465fed' \
, 'instanceProfile' => 'AWS_BDS_INSTANCE_ROLE' \
}
# This task is run on an AWS instance!
task(system := 'aws') {
sys echo HI
sys for i in `seq 10`; do echo "count: \$i"; sleep 1; done
sys echo BYE
}
println "After" # This message is show after the task is scheduled (the instance being requested in the background)
wait # Wait until the task finishes (i.e. the instance finishes running)
println "Done" # This message is shown after the task finished running
Example walk-through: Running the program
OK, let's run this example program and analyze each step of the bds
output.
We run using the -v
command line options, so we'll see more verbose output and -log
to get the outputs logged to files.
$ bds -log -v z.bds
00:00:00.004 Bds 3.0b (build 2021-01-14 14:34), by Pablo Cingolani
Before
After
These are just the println
statements from our example program.
The message After
is shown after the task statement, so at this point the task was scheduled for execution (but it's not running yet).
00:00:00.484 INFO : Creating AWS SQS queue 'bds_20210121_090423_234750293cafe'
This indicates that an SQS queue was created.
This SQS queue is used to communicate task StdOut, StdErr, and task exit status to the computer running the bds
program (e.g. your laptop)
Since the instance can be inaccessible from our network and vice-versa (e.g. we could be running the script on our laptop behind a corporate firewall), SQS is used to communicate both ends.
00:00:04.229 INFO Cmd 'z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785': Created EC2 instance: 'i-0d5931b8e30fba349', for task 'z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785'
The instance was created and the task will be executed in that instance. Note that the instance will be automatically terminated when the task finishes executing.
00:01:01.835 INFO : Writing report file 'z.bds.20210121_090423_293.report.html'
00:01:05.810 INFO : Tasks [CloudAws[13]] Pending: 0 Running: 1 Done: 0 Failed: 0
| PID | Task state | Task name | Dependencies | Task definition |
| ------------------- | ----------------- | ------------------------------------ | ------------ | ------------------------------------------------------------------------ |
| i-0d5931b8e30fba349 | running (RUNNING) | task.z.line_16.id_1.337e55c1b5c62785 | | echo HI; for i in `seq 10`; do echo "count: $i"; sleep 1; done; echo BYE |
The instance usually takes over a minute to startup.
We run using bds -v ...
, in verbose mode bds
will show a report of all tasks running (roughly) every one minute.
In this case, there is only one task.
HI
count: 1
count: 2
count: 3
count: 4
count: 5
count: 6
count: 7
count: 8
count: 9
count: 10
BYE
These are the output lines from the task, which is running on the EC2 instance. Note that even though we are not connected to the instance, we can the task's Stdout because it's sent via an SQS queue. After the task finished, the instance is terminated. You can check on the AWS management console that the instance changes state first to "Shutting down" and later to "Terminated".
Done
This was the println "Done"
statement from our program, since the statement was after a wait
statement, this is shown after the task finished running.
00:01:36.518 INFO : Writing report file 'z.bds.20210121_090423_293.report.html'
00:01:36.524 INFO : Writing report file 'z.bds.20210121_090423_293.report.yaml'
00:01:36.529 INFO : Deleting AWS SQS queue 'az-ngs-seqauto_20210121_090423_74c7f1be2f3ccca5', url: 'https://sqs.us-east-1.amazonaws.com/671016219382/az-ngs-seqauto_20210121_090423_74c7f1be2f3ccca5'
The last messages show that a report was created and the SQS queue was deleted.
Example walk-through: Looking to the log files
When the bds
script is run using -log
command line option, files will be created to log every task.
In the previous example there was only one task, here are the files and details:
# Go to the log direcotory (created by 'bds -log ...')
$ cd z.bds.20210121_090423_293
# List files (added comments for each file)
$ ls
task.z.line_16.id_1.337e55c1b5c62785.ec2_request_response.i-0d5931b8e30fba349.txt
task.z.line_16.id_1.337e55c1b5c62785.startup_script.sh
task.z.line_16.id_1.337e55c1b5c62785.exitCode
task.z.line_16.id_1.337e55c1b5c62785.stdout
task.z.line_16.id_1.337e55c1b5c62785.stderr
task.z.line_16.id_1.337e55c1b5c62785.sh
Let's review each file:
- Task STDOUT (task.z.line_16.id_1.337e55c1b5c62785.stdout
): The standard output from the task is logged in this file. Note that these are messages sent by the EC2 instance via SQS.
$ cat task.z.line_16.id_1.337e55c1b5c62785.stdout
HI
count: 1
count: 2
count: 3
count: 4
count: 5
count: 6
count: 7
count: 8
count: 9
count: 10
BYE
- Task STDERR (
task.z.line_16.id_1.337e55c1b5c62785.stderr
): The standard error from the task is logged in this file. Note that these are messages sent by the EC2 instance via SQS. IMPORTANT: If there is no STDERR, this file is not created.
# This file was not created because the task did not have any output to STDERR
$ cat task.z.line_16.id_1.337e55c1b5c62785.stderr
cat: task.z.line_16.id_1.337e55c1b5c62785.stderr: No such file or directory
- Task exit code (
task.z.line_16.id_1.337e55c1b5c62785.exitCode
): This is the exit code from the task
# Exit code '0' means that the task run succesfully
$ cat task.z.line_16.id_1.337e55c1b5c62785.exitCode
0
- EC2 request file (
task.z.line_16.id_1.337e55c1b5c62785.ec2_request_response.i-0d5931b8e30fba349.txt
): This file logs the detailed request parameters when requesting the EC2 instance.
$ cat task.z.line_16.id_1.337e55c1b5c62785.ec2_request_response.i-0d5931b8e30fba349.txt
RunInstancesResponse(Groups=[], Instances=[Instance(AmiLaunchIndex=0, ImageId=ami-123456abcdef, InstanceId=i-0d5931b8e30fba349, InstanceType=t3a.medium, LaunchTime=...
- Task script (
task.z.line_16.id_1.337e55c1b5c62785.sh
): This is "raw" script defined in the task.
$ cat task.z.line_16.id_1.337e55c1b5c62785.sh
#!/bin/bash -eu
set -o pipefail
cd '/home/myuser/bds/example'
# SYS command. line 17
echo HI
# SYS command. line 18
for i in `seq 10`; do echo "count: $i"; sleep 1; done
# SYS command. line 19
echo BYE
# Checksum: 3a69f4dc
- Startup script (
task.z.line_16.id_1.337e55c1b5c62785.startup_script.sh
): This is the startup script provided to the instance (EC2 "user data" parameter). This is how the instance knows how to execute the task. we'll discuss this in the next sub-section
Example walk-through: The instance startup script
Whenever bds
creates an instance, it must also instruct the instance on what to do (i.e. how to execute the task).
This is achieved using a start-up script (a.k.a. "used data" if you are familiar with the aws ec2 run-instances
command).
In the example, we saw that there was a "startup script" file created (task.z.line_16.id_1.337e55c1b5c62785.startup_script.sh
).
Here is the startup script, we'll analyze each part:
#!/bin/bash -eu
set -o pipefail
function exit_script {
shutdown -h now
}
export HOME='/root'
trap exit_script EXIT
echo "INFO: Starting script '$0'"
mkdir -p '/home/myuser/bds/example/z.bds.20210121_090423_293'
# #!/bin/bash -eu
# set -o pipefail
#
# cd '/home/myuser/bds/example'
#
# # SYS command. line 17
# echo HI
# # SYS command. line 18
# for i in `seq 10`; do echo "count: $i"; sleep 1; done
# # SYS command. line 19
# echo BYE
# # Checksum: 3a69f4dc
grep '^# ' "$0" | cut -c 3- > '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.startup_script_instance.sh'
chmod u+x '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.startup_script_instance.sh'
bds exec -stdout '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.stdout' -stderr '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.stderr' -exit '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.exit' -taskId 'z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785' -awsSqsName 'https://sqs.us-east-1.amazonaws.com/671016219382/az-ngs-seqauto_20210121_090423_74c7f1be2f3ccca5' -timeout '86400' '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.startup_script_instance.sh'
echo "INFO: Finished script '$0'"
The script has three main sections:
- Capture any error (trap) and make sure the instance is shut down if any error occurs or when the script finishes successfully. Since the instances are run with "terminate on shutdown" option enabled, this forces the instance to be terminated (so you don't get charged by an instance that has finished or failed to run the task)
- Copy the task lines defined in the
bds
program, into a new file and change mode to allow execution - Execute the file that runs the task using
bds ... -awsSqsName ...
which redirect STDOUT, STDERR (and exit code) to the SQS queue - Script finishes
Let's see some details of each part of the startup script:
- Capture any error (trap) and make sure the instance is shut down if any error occurs or when the script finishes successfully. Since the instances are run with "terminate on shutdown" option enabled, this forces the instance to be terminated (so you don't get charged by an instance that has finished or failed to run the task)
#!/bin/bash -eu # This makes sure that bash exits if there are any errors
set -o pipefail # Tell bash to exit even if the errors are in piped command
function exit_script { # This function is used to shutdown the instance
shutdown -h now
}
export HOME='/root' # The startup script is executed by the instance at startup time as 'root' user, HOME variable is not defined yet so we define it
trap exit_script EXIT # Trap any EXIT signal and execute 'exit_script' funtion (which shut downs the instance)
- Copy the task lines defined in the
bds
program, into a new file and change mode to allow execution
mkdir -p '/home/myuser/bds/example/z.bds.20210121_090423_293' # Create a directory (same location as in the original bds program)
The lines below are the script lines defined by the bds program (see "task line").
Note that they are the exact same lines as defined in the task script (task.z.line_16.id_1.337e55c1b5c62785.sh
), but they have a #\t
prepended to each line
# #!/bin/bash -eu
# set -o pipefail
#
# cd '/home/myuser/bds/example'
#
# # SYS command. line 17
# echo HI
# # SYS command. line 18
# for i in `seq 10`; do echo "count: $i"; sleep 1; done
# # SYS command. line 19
# echo BYE
# # Checksum: 3a69f4dc
Next, there is a grep
command to extract all the lines starting with #\t
to a new file.
So this writes all the line defined in the original task to a new script file and makes it executable
grep '^# ' "$0" | cut -c 3- > '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.startup_script_instance.sh'
chmod u+x '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.startup_script_instance.sh'
- Execute the file that runs the task using
bds ... -awsSqsName ...
which redirect STDOUT, STDERR (and exit code) to the SQS queue
bds exec -stdout '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.stdout' -stderr '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.stderr' -exit '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.exit' -taskId 'z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785' -awsSqsName 'https://sqs.us-east-1.amazonaws.com/671016219382/az-ngs-seqauto_20210121_090423_74c7f1be2f3ccca5' -timeout '86400' '/home/myuser/bds/example/z.bds.20210121_090423_293/task.z.line_16.id_1.337e55c1b5c62785.startup_script_instance.sh'
echo "INFO: Finished script '$0'"
- Script finishes: Several things happen whenever the startup script finishes executing:
- After the last line is successfully executed, the script will exit, i.e. issue an
EXIT
signal. - This signal is trapped (see previous
trap exit_script EXIT
line) and theexit_script
function will be invoked. - The
exit_script
function performs ashutdown -h now
which shuts down the instance. - Since the instance was run using "terminate on shutdown" behaviour (i.e.
instance-initiated-shutdown-behavior='shutdown'
), the instance will be terminated.
- After the last line is successfully executed, the script will exit, i.e. issue an
AWS tasks
In the next sub-sections we cover some details on AWS tasks resources, EC2 parameters, task dependencies, etc.
AWS resource cleanup
bds
will try to clean up AWS resources when the program ends successfully or when it is interrupted (e.g. you press Ctr-C
on the terminal running the script).
This means that, under normal circumstances, EC2 instances will be terminated, SQS queues deleted, etc.
Unfortunately, there is no way to guarantee that the cleanup will be performed or that it will succeed.
You can easily imagine a situations where the bds
script is unable to clean up AWS resources, for instance:
- It is running on a laptop and you accidentally close the laptop
- The server where the bds
script is running loses internet connection
- The bds
script is killed with kill -9 ...
, thus it has no chance to send API messages to AWS to clean up.
IMPORTANT: There is no warranty on cleaning resources. bds
attempt to cleanup resources on AWS, but this is a "best effort" approach.
WARNING: In order to avoid unnecessary AWS costs, you should always monitor AWS resources used by bds
.
StdOut / StdErr
As we've already mentioned, the instance executing a Task will send bith STDOUT and STDERR to an SQS queue so that the original program can show them on the main terminal.
It is important to understand that if a task generates many output lines, this could potentially generate millions of SQS messages. Not only this could generates costs due to SQS messages, but also can create high network traffic and delay the task significantly (since the process must wait for all those messages to be sent).
A simple option would be to redirect STDOUT/STDERR to a file (or to /dev/null
) when not needed, e.g.:
task( system := 'aws' ) {
sys command_with_lots_of_output > /dev/null 2>&1
}
Improper tasks
AWS tasks can also be "improper", this means that they can execute arbitrary bds
code.
In this case, as always happens in improper tasks, the whole program state will be accessible to the task runningin the instance:
task( system := 'aws' ) {
println "Executing standard bds code in this task"
for(int i=0 ; i < 10 ; i++ ) {
println "Count: $i"
}
println "End of task, the EC2 instance will terminate after this"
}
Dependencies
Tasks executed on AWS can have dependencies, as any other tasks. Usually dependencies are files on S3.
In this example you see two tasks dependent on each other:
1. The main bds script creates an "input" file on S3 (in := "s3://my_bds_test_bucket/exmaple/in.txt"
)
1. The first task (task(out1 <- in) ...
) reads the input file, adds some data and writes the result to out1
output file (out1 := "s3://my_bds_test_bucket/exmaple/out1.txt"
)
1. The second task (task(out2 <- out1) ...
) reads the out1
file, adds some more data and writes the result to out2
output file (out2 := "s3://my_bds_test_bucket/exmaple/out2.txt"
)
system = 'aws'
# These hash called 'taskResources' contains the parameters we need to run a task on AWS
# WARNING: You need to replace ALL this parameters to use your account's settings
taskResources := { \
'region' => 'us-east-1' \
, 'instanceType' => 't3a.medium' \
, 'imageId' => 'ami-123456abcdef' \
, 'securityGroupIds' => 'sg-987654321abc' \
, 'subnetId' => 'subnet-192837465fed' \
, 'instanceProfile' => 'AWS_BDS_INSTANCE_ROLE' \
}
# Input and output files on S3
in := "s3://my_bds_test_bucket/exmaple/in.txt"
out1 := "s3://my_bds_test_bucket/exmaple/out1.txt"
out2 := "s3://my_bds_test_bucket/exmaple/out2.txt"
# Create input file
in.write(inTxt)
# Task 1
println "Before task1"
task(out1 <- in) {
println "Start: Task1 improper"
inFileTxt := in.read().trim()
println "Input text: '$inFileTxt'"
out1.write("OUT1: '$inFileTxt'")
println "End: Task1 Improper"
}
println "After task1"
# Task 2
println "Before task2"
task(out2 <- out1) {
sys echo "Start: Task2"
sys echo 'OUT2' > '$out2'
sys cat '$out1' >> '$out2'
sys echo 'Input:'
sys cat '$out1'
sys echo
sys echo "End: Task2"
}
println "After task2"
wait
println "Done"
Each of these two tasks are executed in different EC2 instances.
There is a dependency: the second needs out1
which is created by the first task.
So the second task will not be executed until the first task finishes successfully, i.e. the second instance will only be created when the first instance finishes executing the first tasks and the output file out1
is created.
Detached tasks
A "detached" task is a task that is run independently from bds
.
The original bds
program can finish and the detached task continue running.
In this case it will continue in an AWS EC2 instance.
Here is an example with a "detached" task (i.e. detached := true
)
system = 'aws'
# These hash called 'taskResources' contains the parameters we need to run a task on AWS
# WARNING: You need to replace ALL this parameters to use your account's settings
taskResources := { \
'region' => 'us-east-1' \
, 'instanceType' => 't3a.medium' \
, 'imageId' => 'ami-123456abcdef' \
, 'securityGroupIds' => 'sg-987654321abc' \
, 'subnetId' => 'subnet-192837465fed' \
, 'instanceProfile' => 'AWS_BDS_INSTANCE_ROLE' \
}
# This detached AWS taks will continue executing after the bds script finishes
task(system := 'aws', detached := true) {
sys echo HI
sys for i in `seq 60`; do echo "count: \$i"; sleep 1; done
sys echo BYE
}
println "After"
wait
println "Done"
The task continues running in the EC2 instance, even though the bds
script finishes immediately after the instance has been requested.
dep
and goal
As any other tasks, AWS tasks can also be defined using dep
and goal
statements, e.g.:
Here is an example that we saw before (two dependent tasks) using dep
and goal
:
system = 'aws'
# These hash called 'taskResources' contains the parameters we need to run a task on AWS
# WARNING: You need to replace ALL this parameters to use your account's settings
taskResources := { \
'region' => 'us-east-1' \
, 'instanceType' => 't3a.medium' \
, 'imageId' => 'ami-123456abcdef' \
, 'securityGroupIds' => 'sg-987654321abc' \
, 'subnetId' => 'subnet-192837465fed' \
, 'instanceProfile' => 'AWS_BDS_INSTANCE_ROLE' \
}
# Input and output files on S3
in := "s3://my_bds_test_bucket/exmaple/in.txt"
out1 := "s3://my_bds_test_bucket/exmaple/out1.txt"
out2 := "s3://my_bds_test_bucket/exmaple/out2.txt"
# Create input file
in.write(inTxt)
# Dep 1
println "Before task1"
dep(out1 <- in) {
println "Start: Dep1 improper"
inFileTxt := in.read().trim()
println "Input text: '$inFileTxt'"
out1.write("OUT1: '$inFileTxt'")
println "End: Dep1 Improper"
}
println "After task1"
# Dep 2
println "Before task2"
dep(out2 <- out1) {
sys echo "Start: Dep2"
sys echo 'OUT2' > '$out2'
sys cat '$out1' >> '$out2'
sys echo 'Input:'
sys cat '$out1'
sys echo
sys echo "End: Dep2"
}
println "After task2"
# Goal
println "Goal: '$out2'"
goal out2
wait
println "Done"
AWS task parameters
Any task running on AWS requires many parameters to be set.
Most parameters can be set in the tataskResources
hash we've seen in the examples.
Here is a list of all the parameters for AWS tasks:
tataskResources entry |
Meaning |
|---|---|
| region | AWS region where the EC2 instance should run |
| bucket | Bucket name, the bucket can sometimes used to store data by bds |
| instanceType | AWS EC2 instance type (e.g. t3a.medium) |
| imageId | Image used to create the instance (AMI ID). The image must have bds installed |
| securityGroupIds | A comma separated list of security groups IDs |
| subnetId | A comma separated list of subnet IDs |
| instanceProfile | Profile (role name) to use for the instance |
| s3tmp | S3 temporary path, this is used to store temporary data (e.g. checkpoints for improper tasks) |
| keepInstanceAliveAfterFinish | If this is set to true , the instance will NOT be terminated after the task is finished. This is used for loggging into the instance and debugging AWS tasks |
Other task parameters can also be used (timeout
, taskName
, allowEmpty
, etc.).
Here are some parameters specific to AWS tasks:
| Variable | Meaning |
|---|---|
| cloudQueueNamePrefix | Is non-empty, the name will be used as a prefix for the SQS quque |
| system | Must be set to 'aws' for a task to be executed in an AWS EC2 instance |
Instance request retry
Assuming that all parameters are set correctly, an EC2 instance request can still fail for many different reasons, e.g.: - AWS doesn't have availability of a specific instance type in the requested region - There are no more IPs in the network - You've reached some limit in any EC2 related parameter (total number of instances, total disk, etc)
In any case when bds
cannot launch an EC2 instance it will retry several times, waiting some random time between each try
The retry algorithm is:
START_FAIL_MAX_ATTEMPTS = 50
START_FAIL_SLEEP_RAND_TIME = 60
for i in 1 .. START_FAIL_MAX_ATTEMPTS:
- parse_ec2_instance_parametres # Parse hash tataskResources
- randomly_select_subnetId # If more than one is specified as a comma separated list of values
- request_ec2_instance # Request instance to AWS
- if succeess: return OK # Success, instance created
- wait_random_time # Reuqest failed, wait up to START_FAIL_SLEEP_RAND_TIME seconds
Note: Randomly selecting a subnet from a comma separated list in tataskResources{'subnetId'}
, allows you to randomly create instances on different zones within a region.


- Basic Refactorings
- QuickCheck Refactorings
- Code Inspection
- Similar Code Detection
- API Migration
- Module Structure
- Manage self-defined refactorings
- Rename variable/function
- Place cursor at the identifier to be renamed; you'll be prompted for a
new name.
- Rename module
- Place cursor anywhere within the module; you'll be prompted for a new
name.
- Generalise definition
- Highlight the expression on which the function is going to be
generalised, you'll be prompted for a new parameter name.
- Move a function definition to another module
- Place cursor anywhere within the function definition; you'll be
prompted for the target module name.
- Function extraction
- Highlight the expression/expression sequence that you wish to extract,
you'll be prompted for a new function name.
- Introduce a new variable
- Highlight the expression of interest, then select Introduce New
Variable from the Refactor menu; Wrangler will then prompt for the
new variable name.
- Inline a variable
- To unfold a particular use instance of a variable, point the cursor to
that instance, and then select Inline Variable from
the Refactor menu. To unfold all (or some) uses of a variable,
point the cursor to the defining occurrence of the variable and select
the refactoring command. Wrangler will then search for uses of the
selected variable, and let you choose which instances to unfold. Only
variables defined via a match expression of the format `VarName = Expr'
can currently be inlined.
- Fold expression against function
- Place cursor anywhere within the function clause. Wrangler will guide
you through the possible candidates one by one, and ask whether you
want to fold it or not. If you would like to fold expressions against a
function defined in another module, answer 'no' to the first question asked,
and you'll be prompted for the module name, name and arity of the
function and also the index (starting from 1) of the clause to be folded against.
- Tuple function arguments
- Highlight the sequence of parameters to be grouped into a tuple from
the function definition, then select the refactoring command from the
menu.
- Unfold a function application
- Place the cursor at the function name part of the function application,
then select the Unfold Function Application command.
- Introduce new macro
- Highlight the expression/pattern that you wish to replace with macro
application, and you'll be prompted from a new macro name.
- Fold against macro definition
- Place cursor anywhere within the function definition. Wrangler will
direct you through the possible candidates one by one, and for each
candidate ask whether you want to fold it or not.
- Rename a process
- Place the cursor at the process name to be renamed, and you will be
prompted for the new name.
- Register a process
- Highlight the match expression whose right-hand side is the spawn
expression that creates the process, and left-hand side is the process
identifier, and you will be prompted for the new process name.
- From fun to process
- Place the cursor at the function name of the function definition to be
refactored, and you will be prompted for the new process name.
- Add tag to messages
- Place the cursor at the function whose body contains the receive
expression of the server process, and you will be prompted for the tag
name.
- Normalise Record Expression
- Place the cursor at the record expression of interest, then select the
refactoring command.
- Partition Export Functions
- Select the refactoring command, and you will be prompted for an instance
threshold value between 0.1 and 1.0
- gen_fsm State to Record
- Select the refactoring command, and Wrangler will check the current
type of the state machine, and prompt you to input the record and field
names if Wrangler is able to process the refactoring.
- Introduce a ?LET
- Highlight the expression which should be a QC generator, then select
the refactoring command; you will be prompted for the pattern variable
name.
- Merge ?LETs
- Select the refactoring command, and Wrangler will guide you through the
possible candidates one by one, and ask whether you want to merge it or
not.
- Merge ?FORALLs
- Select the refactoring command, and Wrangler will guide you through the
possible candidates one by one, and ask whether you want to merge it or
not.
- eqc_statem State to Record
- Select the refactoring command, and Wrangler will check the current
type of the state machine, and prompt you to input the record and field
names if Wrangler is able to proceed the refactoring.
- eqc_fsm State to Record
- Select the refactoring command, and Wrangler will check the current
type of the state machine, and prompt you to input the record and field
names if Wrangler is able to process the refactoring.
- Test Cases to Property
- Place the cursor at the function definition of interest, then select the
refactoring command.
- Refactor Bug PreCond
- Select the refactoring command, and Wrangler will do the transformation; no
user input is needed.
- Rename an operation argument
- Select the argument to be renamed from the wrapper function, Wrangler will
prompt you to input the new argument name.
- Add an operation argument
- Point the cursor to the wrapper function of this operation, Wrangler will
prompt you to input the new argument name.
- Remove an operation argument
- Point the cursor to the arugument to be removed in the wrapper function of
the operation.
- Add an operation
- Select the menu item for this refactoring, Wrangler will prompt you to input
the new operation name and its parameters.
- Remove an operation
- Point the cursor to the wrapper function of operation to be removed, then
select the menu item for this refactoring.
- Re-order operation arguments
- Point the cursor to the wrapper function of the operation, Wrangler will prompt
you to input the new order of the parameters in terms of the indexes of the
current parameters.
- Instances of a Variable
- Place the cursor at one instance of the variable, select the command, and Wrangler
will highlight all the instances of this variable. An instance highlighted in blue
is a use-instance of the variable, and an instance highlighted in orange is a
define-instance of the variable. Type 'Ctrl-c Ctrl-w e' to remove highlighting.
- Calls to a Function
- Place the cursor the function definition of interest, then select the command.
- Dependencies of a Module
- Just select the command; no user-input is needed.
- Nested If Expressions
- Select the command, the you'll be prompted to input the minimum nest level.
- Nested Case Expressions
- Select the command, the you'll be prompted to input the minimum nest level.
- Nested Receive Expressions
- Select the command, the you'll be prompted to input the minimum nest level.
- Long Functions
- Select the command, then you'll be prompted to input the minimum number of
lines of code for a function to be considered as a long function.
- Large Modules
- Select the command, then you'll be prompted to input the minimum number of
lines of code for a module to be considered as a large module.
- Show Non Tail Recursive Servers
- Select the command, and Wrangler will ask you whether to check the current
buffer only, or the whole application.
- Incomplete Receive Patterns
- Select the command, and Wrangler will ask you whether to check the current
buffer only, or the whole application.
- Similar code in current buffer
- Select the refactoring command from the menu, and you'll be prompted
for 5 parameters, i.e. i.e. the minimum number of expressions in a
expression sequence, the minimum number of tokens, the minimum number of
duplication, the maximum number of New_Vars, and a similarity score.
- Similar code in dirs
- Select the refactoring command from the menu, and you'll be prompted
for 5 parameters, i.e. i.e. the minimum number of expressions in a
expression sequence, the minimum number of tokens, the minimum number of
duplication, the maximum number of New_Vars, and a similarity score.
Wrangler searches similar code in the directories specified by the
search-paths (see Customize Wrangler).
- Similar expression search in current buffer
- Highlight the expression/expression sequence you are interested, select
the command from the menu, and Wrangler will prompt you to input a
similarity score.
- Similar expression search in Dirs
- Highlight the expression/expression sequence you are interested, select
the command from the menu, and Wrangler will prompt you to input a
similarity score. Wrangler searches similar expressions in the directories specified by the
search-paths (see Customize Wrangler).
- Generate API Migration Rules
- Make sure that the current buffer is an Erlang module implementing a set of 'adaptor' functions, select the
command, and you'll be prompt for a new file name where the new rules generated will be saved.
- Apply API Migration to Current File
- Select the command from the menu, and you'll be prompted for the name of the module containing the API migration rules.
Make sure that the API migration module has been compiled before use.
- Apply API Migration to Dirs
- Select the command from the menu, and you'll be prompted for the name of the module containing the API migration rules.
Make sure that the API migration module has been compiled before use.
- From Regexp to RE
- Select the command from the menu, and you'll be able to choose whether to apply the migration to the current
buffer only or to the whole application
- Generate Function Callgraph
- Select the command, and you'll be prompted for the name of the file where the callgraph is going
to be stored. The file generated is a .dot file, and you need to compile it using Graphviz to generate
the graph image.
- Generate Module Graph
- Select the command, and you'll be prompted for the name of the file where the callgraph is going
to be stored. Wrangler ask to confirm the directories to be search, and whether to label the edges with
names of functions called. The file generated is a .dot file, and you need to compile it using Graphviz to generate
the graph image.
- Cyclic Module Dependency
- Select the command, and you'll be prompted for the name of the file where the callgraph is going
to be stored. Wrangler ask to confirm the directories to be search, and whether to label the edges with
names of functions called. The file generated is a .dot file, and you need to compile it using Graphviz to generate
the graph image.
- Module Dependency via only Internal Functions
- Select the command, and you'll be prompted for the name of the file where the callgraph is going
to be stored. Wrangler ask to confirm the directories to be search, and whether to label the edges with
names of functions called. The file generated is a .dot file, and you need to compile it using Graphviz to generate
the graph image.
- Apply Adhoc Refactoring
- Select the command from the menu, and you'll be prompted for the name of the callback module implementing
a gen_refac behaviour. Please make sure that the callback module is compiled before use.
- Apply Adhoc Composite Refactoring
- Select the command from the menu, and you'll be prompted for the name of the callback module implementing
a gen_composite_refac behaviour. Please make sure that the callback module is compiled before use.
- Add to My gen_refac Refactorings
- Make sure that the current buffer is an Erlang module implementing a gen_refac behaviour, then
select the command from the menu.
- Add to My gen_composite_refac Refactorings
- Make sure that the current buffer is an Erlang module implementing a gen_composite_refac behaviour, then
select the command from the menu.
- Remove from My gen_refac Refactorings
- Select the command from the menu, and you'll be prompted for the menu item name to be removed.
- Remove from My gen_composite_refac Refactorings
- Select the command from the menu, and you'll be prompted for the menu item name to be removed
-


Class: Haml
| Defined in: | node_modules/haml-coffee/src/nodes/haml.coffee |
| Inherits: | Node |
Variables Summary
Variable inherited from Node
CLEAR_WHITESPACE_LEFT CLEAR_WHITESPACE_RIGHT
Instance Method Summary
- # (void) evaluate() Evaluate the node content and store the opener tag and the closer tag if applicable.
- # (Object) parseExpression(exp) Parses the expression and detect the tag, attributes and any assignment.
- # (Object) parseTag(exp) Parse a tag line.
-
#
(Object)
parseAttributes(exp)
Parse attributes either in Ruby style
%tag{ :attr => 'value' }
or HTML style%tag(attr='value)
. - # (String) buildHtmlTagPrefix(tokens) Build the HTML tag prefix by concatenating all the tag information together.
- # (String) interpolateCodeAttribute(text, unwrap = false) Wrap plain attributes into an interpolation for execution.
- # (String) quoteAndEscapeAttributeValue(value, code = false) Quote the attribute value, depending on its content.
- # (Array<String>) splitInterpolations(value) Split expression by its interpolations.
-
#
(String)
buildDocType(doctype)
Build the DocType string depending on the
!!!
token and the currently used HTML format. -
#
(Boolean)
isNotSelfClosing(tag)
Test if the given tag is a non-self enclosing tag, by matching against a fixed tag list or parse for the self
closing slash
/
at the end.
Inherited Method Summary
Methods inherited from
Node
#addChild #getOpener #getCloser #isPreserved #isCommented #markText #markRunningCode #markInsertingCode #evaluate #render
Instance Method Details
#
(void)
evaluate()
Evaluate the node content and store the opener tag and the closer tag if applicable.
#
(Object)
parseExpression(exp)
Parses the expression and detect the tag, attributes and any assignment. In addition class and id cleanup is performed according the the Haml spec:
- Classes are merged together
- When multiple ids are provided, the last one is taken, except they are defined in shortcut notation and attribute notation. In this case, they will be combined, separated by underscore.
Examples:
Id merging
#user{ :id => @user.id } =>

#
(Object)
parseTag(exp)
Parse a tag line. This recognizes DocType tags !!!
and
HAML tags like #id.class text
.
It also parses the code assignment =
, }=
and )=
or
inline text and the whitespace removal markers <
and >
.
It detects an object reference [
and attributes (
/ {
.
#
(Object)
parseAttributes(exp)
Parse attributes either in Ruby style %tag{ :attr => 'value' }
or HTML style %tag(attr='value)
. Both styles can be mixed:
%tag(attr='value){ :attr => 'value' }
.
This takes also care of proper attribute interpolation, unwrapping
quoted keys and value, e.g. 'a' => 'hello'
becomes a => hello
.
#
(String)
buildHtmlTagPrefix(tokens)
Build the HTML tag prefix by concatenating all the tag information together. The result is an unfinished html tag that must be further processed:
The Haml spec sorts the class
names, even when they
contain interpolated classes. This is supported by
sorting classes at template render time.
If both an object reference and an id or class attribute is defined, then the attribute will be ignored.
Examples:
Prefix tag
<a id='id' class='class' attr='value'
Template render time sorting

#
(String)
interpolateCodeAttribute(text, unwrap = false)
Wrap plain attributes into an interpolation for execution. In addition wrap it into escaping and cleaning function, depending on the options.
#
(String)
quoteAndEscapeAttributeValue(value, code = false)
Quote the attribute value, depending on its content. If the attribute contains an interpolation, each interpolation will be cleaned and/or escaped, depending on the compiler options.
#
(Array<String>)
splitInterpolations(value)
Split expression by its interpolations.
Examples:
'Hello #{ "#{ soso({}) }" } Interpol') => ["Hello ", "#{ "#{ soso({}) }" }", " Interpol"]
'Hello #{ "#{ soso }" } Interpol') => ["Hello ", "#{ "#{ soso }" }", " Interpol"]
'Hello #{ int } Interpol') => ["Hello ", "#{ int }", " Interpol"]
'Hello Interpol') => ["Hello Interpol"]
'#{ int } Interpol') => ["#{ int }", " Interpol"]
'Hello #{ int }') => ["Hello ", "#{ int }"]
'#{ int }') => ["#{ int }"]
#
(String)
buildDocType(doctype)
Build the DocType string depending on the !!!
token
and the currently used HTML format.
#
(Boolean)
isNotSelfClosing(tag)
Test if the given tag is a non-self enclosing tag, by
matching against a fixed tag list or parse for the self
closing slash /
at the end.


{% extends 'base.html' %} {% load staticfiles i18n %} {% block container %}
After completing the instructions and comprehension check, you will enter the game's lobby. The game will start automatically after {{ players_num }} players enter the lobby, and you will hear a bell ring.
The game consists of {{ rounds_num }} rounds. At each round you will see a scatter plot and be asked to estimate the correlation of the X and Y variables. Correlation measures how strongly two variables are related to each other. For example, the graph below depicts the correlation between weight and height. As weight increases, height tends to increase as well.
Each round will consist of 3 stages: "Your Guess", "Interactive Guess", and "Round Outcome".
1. Your Guess: Guess the correlation of the plot shown. Use the slider below the plot to pick a value, and click "Submit" when you are ready. You can take maximum 30 seconds to submit.
2. Interactive Guess: Here you will see the guesses of other players. You can change your guess by using the slider bar, and see how other players change their guesses in real-time. Click "Submit" when you are ready to submit your final guess. You can take maximum 30 seconds to submit.
3. Round Overview: See your final guess vs. the actual correlation value, as well as the score you earned. Click “Next” to go to the next round.
In this game, your correlation guess can range from 0 to 1, and the closer the points fit to a straight line, the closer the correlation will be to 1. No calculations are necessary, just make your best estimate.
Note that different scatter plots may have the same correlation value. Plots can vary in number of points and shape, which can make them easier or harder to guess. For example, both plots in the first row below have a correlation of 0.89, and both plots in the second row a correlation of .55
You will see more than one type of plot along the 20 rounds. Different players may see different plots, but at each round all players will see plots with the exact same correct correlation.


I am a freelance front end developer with 4 years of experience in marketing and design who has decided to pursue a career in web development.
As a freelancer, I have learned great focus and discipline in achieving the goals I have set forth.
In my free time I study elegant and simple code, learn new skills and technologies, or simply play with other people's code.
When I'm not in front of my computer I like to run, play basketball or soccer, cook a nice meal, or watch TV shows about crime
My main objective is to find an energetic team of developers in a start up or agency setting that shares my vision for clean and simple code, continuous improvement, and a desire for a good work life balance
Download Resume


WITNESS LIST Human Services Committee March 24, 1997-10:30A HB 159 For: Driver, Joe (Author) HB 1596 For: Austin, Timothy (City of Houston) Hochberg, Scott (Author) Registering, but not testifying: For: Graves, Tim (THCA) Hardy, Alan (AARP) Holtermann, John (SilverHaired Legislator) Lattimer, David (TxAssocHomesServ.forAge) Nigh, Felix (TxSilverHairedLegislat.) HB 2306 For: Counts, David (Author) Registering, but not testifying: On: Graves, Tim (THCA) Greenspan, Ira (AG) HB 2313 For: DeArrigunaga, Ray (Via Metro Transit) Plaster, Michael (Tx Transit Assoc.) Van De Putte, Leticia (Author) On: Griebel, Tom (TXDOT) Janek, Christine (THHSC) HB 2321 For: Palmer, Sue (Author) On: Venza, Tony (TDHS) Registering, but not testifying: For: Hardy, Alan (AARP) Lattimer, David (TxAssocHomesServ.forAge) Against: Graves, Tim (THCA) HB 2509 For: Arnold, Carter (Alzheimer Assoc. Coalit) Bonner, Loretto (Alzheimer Assoc Coalit) Campbell, Laura (Self) Jarmon, Judy (Alzheimer Assoc. Coalit) Latimer, David (TxAssocHomesServ.Aging) Registering, but not testifying: For: Graves, Tim (THCS) Hardy, Alan (AARP) Holtermann, John (TxSilverhairedLegislat) Nigh, Felix (TxSilverHairedLegislat.) On: Wilson, Sue (TDHS) HB 2510 Registering, but not testifying: For: Hardy, Alan (AARP) HB 2601 For: Benson, Johnnie (TARCC) Nail, Elaine (self) On: Venza, Tony (TDHS) Registering, but not testifying: For: Rich, Sid (Dar-Rell Enterprises) HB 3069 For: Hardy, Alan (AARP) Wheatley, Melinda (self) Against: Lattimer, David (TxAssocHomesServicesAge) On: Speights, Sara (TAHC) Venza, Tony (TDHS) Registering, but not testifying: For: Graves, Tim (THCA) Holtermann, John (TxSilverHairedLegislat.) Nigh, Felix (TxSilverHairedLegislat.) On: Coombes, Phyllis (Comptroller)


alex kersten
hello
contact
My email is my first name at my last name dot email.
You can find me on the sites below.
GitHub
Keybase


Cape Canaveral Air Force Station Space Launch Complex 40
Rocket name:
"Falcon 9"
Mission:
This mission will launch the tenth batch of operational Starlink
satellites, which are expected to be version 1.0, from LC-39A, Kennedy
Space Center. It is the eleventh Starlink launch overall. The satellites
will be delivered to low Earth orbit and will spend a few weeks
maneuvering to their operational altitude of 550 km.


Lil’ Bookninja
After helping Bookninja with their blog, George kindly sent me some swag, (or “thanking him by advertising on his chest“, as George put it), including a baby-grow (we were expecting Katelyn at the time).

I promised George that I’d sent him a photo when we got chance. It was by pure coincidence that I was wearing a WordPress hoodie! (I’m such a geek!)


Jacqueline Jossa's mum and Dan Osborne ignore each other despite sharing hotel
Dan Osborne and his daughters are staying in Australia with Jacqueline Jossa's family as they support her I'm A Celebrity stint
by Irishmirror.ieDan Osborne has been accused of ignoring his mother-in-law despite sharing hotel with her and the rest of Jacqueline Jossa's family as they wait for her to finish her I'm A Celebrity stint.
Even though Dan and Selina Jossa have been sharing childcare of Dan and Jac's two daughters, Mia and Ella, they've each kept their social media feeds free of each other.
Selina and her husband John Jossa have been sharing snaps of themselves hanging out at the plush five-star Palazzo Versace, where Dan is also staying.
But even though they all arrived on the same flight to Brisbane airport, Selina and Dan have pointedly not included each other in their Instagram updates.
Both, however, have been sharing plenty of snaps of the girls.
After Wednesday night's episode, Jacqueline's parents posed outside the Palazzo's sunny courtyard and wrote: "We're here for #junglejac come on our girl your doing great."
The family also posed for a snap on the plane from Heathrow Airport with their granddaughters, but Dan was missing from the social media snap.
He has been busy updating his own followers with posts of him supporting Jacqueline through her various ordeals in camp.
During the nightly episodes, Dan has taken to his Instagram to share his live reactions with fans and keep them updated on how he's coping without his wife-of-two years.
The EastEnders actress suffered major heartbreak during her time on the show after campmate Myles Stephenson, 28, told her Dan, 28, had a fling with Love Island star Gabby Allen last year, something both deny.
But as he arrived at Brisbane aiport this week, Dan insisted Jacqueline had "nothing to worry about".
"Listen, she is my wife, I have got nothing to worry about, nothing to think about. I am just coming out to support her and that is the only reason I am here," he told the Mirror.
"I am just excited to see her and the last person on my mind is Myles or anyone else."
Asked if he had anything to say to Myles, who dated Gabby, 27, Dan said: "Nah. I have got nothing to say to him or anything else, only my wife."
After Myles had dripped poison in her ear, Jacqueline insisted on contacting Dan from the I’m A Celebrity camp to clear the air.
Dan, who also has a five-year-old son, Teddy, said: "She is a great mum and she does loads. It is a lot tougher without her but we have done all right, it has been good, it will just be nice to have their mum back.
"What would I like to say to her? That life is a lot harder without you. That I miss you and you have done amazing and I will see you when you get out of there.
"I can't wait to see her," he added.
*I'm A Celebrity continues tonight at 9pm on ITV


PWG October F2F Meeting
I. When/Where
The PWG F2F meeting will be held on October 26-27, 2006 at Lexmark International Inc. in
the site as well.
Address:
Lexmark International Inc.
Bldg. 082
740 West New Circle Road
II. Detailed Meeting
Agenda:
|
|
|
|
|
|
|
|
|
|
|
Topic |
Duration |
Speaker |
|
Thur 10/26 |
|
|
|
|
|
|
Joint Plenary |
8:30 AM |
8:40 AM |
Welcome, Intro, Overview |
10 |
Harry Lewis |
|
|
8:40 AM |
8:50 AM |
Welcome, Intro, Overview |
10 |
Till Kamppeter |
|
|
8:50 AM |
9:00 AM |
FSG OP Vector Driver (PDAPI) - Status, Overview |
10 |
Till Kamppeter |
|
|
9:00 AM |
9:10 AM |
FSG OP Directory Structure for Printing (w/ LSB and FHS) -
Status, Overview |
10 |
Till Kamppeter |
|
|
9:10 AM |
9:15 AM |
FSG OP Print Service (PAPI) - Status, Overview |
5 |
Till Kamppeter |
|
|
9:15 AM |
9:20 AM |
FSG OP Job Ticket (JTAPI) - Status, Overview |
5 |
Till Kamppeter |
|
|
9:20 AM |
9:25 AM |
FSG OP Print Channel Manager (PCMAPI) - Status, Overview |
5 |
Till Kamppeter |
|
|
9:25 AM |
9:30 AM |
FSG OP Status Monitor (SMAPI) - Status, Overview |
5 |
Till Kamppeter |
|
|
9:30 AM |
9:35 AM |
FSG OP Device Discovery (DDAPI) - Status, Overview |
5 |
Till Kamppeter |
|
|
9:35 AM |
9:40 AM |
FSG OP Capabilities (PCAPI) - Status, Overview |
5 |
Till Kamppeter |
|
|
9:40 AM |
9:50 AM |
FSG OP Next Steps |
10 |
Till Kamppeter |
|
|
9:50 AM |
10:10 AM |
Summary and Q & A |
20 |
Till Kamppeter |
|
|
10:10 AM |
10:40 AM |
Print |
30 |
Till Kamppeter |
|
|
10:40 AM |
10:55 AM |
Break |
15 |
|
|
|
10:55 AM |
11:00 AM |
WIMS Protocol - Status, Overview |
5 |
Bill Wagner |
|
|
11:00 AM |
11:10 AM |
WIMS CIM - Status, Overview |
10 |
Bill Wagner |
|
|
11:10 AM |
11:20 AM |
MFD Alerts - Status, Overview |
10 |
Ron Bergman |
|
|
11:20 AM |
11:30 AM |
Semantic Model - Status, Overview |
10 |
Pete Zehler |
|
|
11:30 AM |
11:40 AM |
Projector & Display Mgmt BOF - Status, Overview |
10 |
Rick Landau |
|
|
11:40 AM |
11:50 AM |
IPP PSX - Status, Overview |
10 |
Craig Whittle |
|
|
11:50 AM |
12:10 PM |
Summary and Q & A |
20 |
Harry Lewis |
|
|
12:10 PM |
12:25 PM |
PWG/FSG "Next Steps" & Wrap-up |
15 |
H Lewis/T Kamppeter |
|
|
12:25 PM |
1:50 PM |
Lunch |
85 |
|
|
|
|
|
|
|
|
|
PWG Only |
1:50 PM |
3:20 PM |
MFD Alerts |
90 |
Ron Bergman |
|
|
3:20 PM |
3:40 PM |
Break |
20 |
|
|
|
3:40 PM |
4:10 PM |
WIMS Counter Specification Issue |
30 |
Bill Wagner |
|
|
4:10 PM |
5:10 PM |
Projector & Display Mgmt BOF |
60 |
Rick Landau |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fri 10/27 |
8:30 AM |
10:00 AM |
WIMS CIM |
90 |
Bill Wagner |
|
PWG Only |
10:00 AM |
10:15 AM |
Break |
15 |
|
|
|
10:15 AM |
10:45 AM |
WIMS CIM - continued |
30 |
Bill Wagner |
|
|
10:45 AM |
12:15 PM |
IPP PSX |
90 |
Craig Whittle |
|
|
12:15 PM |
1:40 PM |
Lunch |
85 |
|
|
|
1:40 PM |
3:10 PM |
Semantic Model |
90 |
Pete Zehler |
|
|
3:10 PM |
3:30 PM |
Break |
20 |
|
|
|
3:30 PM |
5:00 PM |
Semantic Model - continued |
90 |
Pete Zehler |
III. Meeting Registration
There will be a $20 per day meeting fee for this meeting to cover catering.
This fee will be collected by the ISTO and will be managed in the same way as the
meeting fees for other previous PWG Face to Face meetings. Registration is required for this meeting.
If you are attending both the FSG and PWG meetings please register for both at the same time.
You do not need to register at both the PWG and FSG sites.
PWG and FSG meeting registration page
IV. Hotel information for
the October PWG and FSG meetings:
The following hotels are some of the options available while
staying in
Lexmark has negotiated rates that may be available but only if you make arrangements through Lexmark's travel
coordinator WorldTravel (aka BCD Travel). You can make arrangements by one of the following methods.
You must mention both the meeting you are attending (PWG and/or FSG) and the Lexmark contact name (Jerry Thrasher) to get the negotiated rate.
Note: Your company may have better negotiated rates with these hotel chains so you may want to verify before booking. In that case please make reservations directly with the hotel and not through Lexmark's travel coordinator. Also keep in mind that this week is also one of the weeks that the local horse racing track (Keenland Race Course) is holding its fall meet. This may affect room availability at some of these hotels.
Hotels close to the Lexmark site:
Embassy Suites
Lexmark 2006 rate = $99 Monday - Thursday,
$129 weekends
1801 Newtown Pike
859-455-5000
Courtyard by Marriott
Lexmark 2006 rate = $89
859-253-4646
Sheraton Four Points
Lexmark 2006 rate = $65
859-259-1311
Hotels in downtown
Lexmark 2006 rate = $75
369
859-231-9000
Hyatt
Lexmark 2006 rate = $87
401
859-253-1234
Other hotels that do NOT have a Lexmark negotiated rate.
Please make arrangements directly with the hotel if you choose any other hotel than those above.
1800 Newtown Pike
859-231-5100
V. Other items of note for
travel to Lexington.
The local airport in
Other airports that may be options are the Cincinnati Northern Kentucky International Airport (CVG)
or the
Both of these airports are a 1.5 to 2 hour drive from
Taxi service and public transportation in
and to/from the Lexmark site, however a rental car is probably the best option.
Other various links that may be helpful if you are looking for local events.
http://www.woodfordreserve.com/story3.asp
Google Map of the Lexmark location: