Developers’ Guide¶
See git resources for some useful links.
Cloning the most recent code from Github¶
You can create a read-only development version of Clawpack via:
git clone git://github.com/clawpack/clawpack.git
cd clawpack
python setup.py git-dev
This downloads the following clawpack modules as subrepositories checked out at specific commits (as opposed to the tip of a branch).
- https://github.com/clawpack/pyclaw (Python code, some of which is needed also for Fortran version)
- https://github.com/clawpack/clawutil (Utility functions, Makefile.common used in multiple repositories)
- https://github.com/clawpack/classic (Classic single-grid code)
- https://github.com/clawpack/amrclaw (AMR version of Fortran code)
- https://github.com/clawpack/riemann (Riemann solvers)
- https://github.com/clawpack/visclaw (Python graphics and visualization tools)
- https://github.com/clawpack/geoclaw (GeoClaw)
This should give a snapshot of the repositories that work well together. (Note that there are many inter-dependencies between code in the repositories and checking out a different commit in one repository may break things in a different repository.)
If you want to also install the PyClaw Python components, you can then do:
python setup.py install
If you plan to work on the Python parts of Clawpack as a developer, you may instead wish to do:
pip install -e .
The advantage of this is that when you edit Python code in your clawpack directly, it will immediately take effect, without the need to install again. However, the (potential) danger of this approach is that the path to your clawpack directory will be stored in the file site-packages/easy-install.pth and prepended to your PYTHONPATH whenever you run Python. This path will take precedence over any manually added paths, unless you delete the .pth file.
If you want to use the Fortran versions in classic, amrclaw, geoclaw, etc., you need to set environment variables and proceed as described at Set environment variables.
Installation instructions for developers¶
Install a read-only copy of all the main repositories as described above in Cloning the most recent code from Github.
Important Note: The repositories will each be checked out to a specific commit and will probably be in a detached-head state. You will need to checkout master in each repository to see the current head of the master branch.
You should never commit to master, only to a feature branch, so the master branch should always reflect what’s in the main clawpack repository. You can update it to reflect any changes via:
git checkout master
git fetch origin
git merge origin/master
or simply:
git pull origin master:master
Remember that you need to do this in each repository before running anything to make sure everything is up to date with master.
Setting a remote to point to your fork¶
If you plan to make changes and issue pull requests to one or more repositories, you will need to do the following steps for each such repository:
Go to http://github.com/clawpack and fork the repository to your own Github account. (Click on the repository name and then the Fork button at the top of the screen.)
Add a remote pointing to your repository. For example, if you have forked the amrclaw repository to account username, you would do:
cd amrclaw git remote add username git@github.com:username/amrclaw.git
You should push only to this remote, not to origin, e.g.:
git push username
You might also want to clone some or all of the following repositories:
- https://github.com/clawpack/doc (documentation)
- https://github.com/clawpack/apps (To collect applications)
- https://github.com/clawpack/regression (Regression tests)
- https://github.com/clawpack/clawpack-4.x (Previous versions, 4.6)
These are not brought over by cloning the top clawpack super-repository. You can get one of these in read-only mode by doing, e.g.:
git clone git://github.com/clawpack/doc.git
Then go through the above steps to add a remote to your own fork of the repository if you plan to modify and issue pull requests.
Modifying code¶
Before making changes, you generally want to make sure master is up to date:
git checkout master
git pull
Then create a new branch based on master for any new commits:
git checkout -b new_feature master
# make some changes
# git add the modified files
git commit -m "describe the changes"
Now make changes, add and commit them, and then push to your own fork:
git push username new_feature
If you want these changes pulled into master, you can issue a pull request from the github page for your fork of this repository (make sure to select the correct branch of your repository).
Note: If you accidentally commit to master rather than creating a feature branch first, you can easily recover:
git checkout -b new_feature
will create a new branch based on the current state and history (including your commits to master) and you can just continue adding additional commits.
The only problem is your master branch no longer agrees with the history on Github and you want to throw away the commits you made to master. The easiest way to do this is just to make sure you’re on a different branch, e.g.,
git checkout new_feature
and then:
git branch -D master
git checkout -b master origin/master
This deletes your local branch named master and recreates a branch with the same name based on origin/master, which is what you want.
Pull requests¶
Before issuing a pull request, you should make sure you have not broken anything:
Make sure you are up to date with master:
git checkout master git pull
If this does not say “Already up-to-date” then you might want to rebase your modified code onto the updated master. With your feature branch checked out, you can see what newer commits have been added to master via:
git checkout new_feature git log HEAD..master
If your new feature can be added on to the updated master, you can rebase:
git rebase master
which gives a cleaner history than merging the branches.
Run the appropriate regression tests. If you have modified code in pyclaw or riemann, then you should run the pyclaw tests. First, if you have modified any Fortran code, you need to recompile:
cd clawpack/ pip install -e .
Then run the tests:
cd pyclaw nosetests
If any tests fail, you should fix them before issuing a pull request.
To issue a pull request (PR), go to the Github page for your fork of the repository in question, select the branch from which you want the pull request to originate, and then click the Pull Request button.
Testing out a pull request¶
To test out someone else’s pull request, follow these instructions: For example, if you want to try out a pull request coming from a branch named bug-fix from user rjleveque to the master branch of the amrclaw repository, you would do:
cd $CLAW/amrclaw # (and make sure you don't have uncommitted changes)
git checkout master
git pull # to make sure you are up to date
git checkout -b rjleveque-bug-fix master
git pull https://github.com/rjleveque/amrclaw.git bug-fix
This puts you on a new branch of your own repository named rjleveque-bug-fix that has the proposed changes pulled into it.
Once you are done testing, you can get rid of this branch via:
git checkout master
git branch -D rjleveque-bug-fix
Top level pull requests¶
The top level clawpack repository keeps track of what versions of the subrepositories work well together.
If you make pull requests in two different repositories that are linked, say to both pyclaw and riemann, then you should also push these changes to the top-level clawpack repository and issue a PR for this change:
cd $CLAW # top-level clawpack repository
git checkout master
git pull
git checkout -b pyclaw-riemann-changes
git add pyclaw riemann
git commit -m "Cross-update pyclaw and riemann."
git push username pyclaw-riemann-changes
Git workflow¶
See git resources for useful links.


Types Of Art
Art has been around for many centuries now and has been made in different forms. Art can be a form used to express emotions the artist felt during their life. even after the artist has passed away the painting can still be used to show other people how that artist felt during their lifetime.


ACC Emerging Teams Asia Cup: Armaan Jaffer’s knock in vain for India u-23
India, which had defeated Nepal in its opening match, will play Hong Kong on Monday
by Sports BureauSoumya Sarkar and Najmul Hossain starred with the bat as Bangladesh defeated India Under-23 by six wickets in the ACC Emerging Teams Asia Cup (under-23) on Saturday.
Najmul, Sarkar shine
Chasing a target of 247, Sarkar (73) and skipper Najmul (94) added 144 for the second wicket to put the team on course. Afif Hossain’s unbeaten 34 off 46 deliveries took Bangladesh home.

India, which had defeated Nepal in its opening match, will play Hong Kong on Monday.
The scores: India under-23 246 in 50 overs (Armaan Jaffer 105, Sumon Khan 4/64) lost to Bangladesh under-23 250/4 in 42.1 overs (Najmul Hossain 94, Soumya Sarkar 73).


RMS would like to thank, and give credit to, the following sources:
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
Icons made by Smashicons from www.flaticon.com is licensed by CC 3.0 BY
Icons made by Iconnice from www.flaticon.com is licensed by CC 3.0 BY


$>^C
Welcome to Ctrl-C Club! Population: 689
Signups are open! Join us here!
| New to Ctrl-C.club? |
Already a member? |
|
|
|
CTRL-C.CLUB WEBJAM 2023
Hey all! We're having a webjam in August!
Have you always meant to finish setting up your site on Ctrl-C.club but never got around to it? From Aug. 25 to Sep. 1, we'll be taking a week to update, polish, and fix our sites. Details on how to participate are here.
Special thanks to ~gome for putting this on for us!
What's going on with the user count?
Our little server is filling up again. To make room for our active and new users, we're archiving accounts that have not been logged into in 5 years or more.
If your account was archived and you'd like it set back up, or if you'd just like the data you had on the server sent to you, reach out to<EMAIL_ADDRESS>Want to chat?
We're now part of the tilde.chat IRC network!
- ctrl-c.tilde.chat:6667, or
- ctrl-c.tilde.chat:6697 with SSL
How about a forum?
Our text forum, Iris, is availabable through SSH! Once you're logged in, type `iris` to join the conversation.
Want to get involved in the next big little thing?
If you've been paying attention to your home directory, you've noticed a new subdirectory: `public_gemini`. That's because we're now running a Gemini server! It's available at gemini://gemini.ctrl-c.club
Gemini is a new, collaboratively designed internet protocol that is less complicated than the web, but more robust and modern than gopher.
Add .gmi files to your public_gemini directory, and your Gemini site will be published to our Gemini home page in an hour or so.
Details about the protocol are available at https://gemini.circumlunar.space
It's a place for the curious to poke around and play.
Ctrl-C Club is a Linux server offering free SSH and web accounts to users who want to build webpages, chat online, learn Linux, play text console games, or fiddle around writing software.
You can:
- Make a web page
- Chat with others
- Learn some Linux
- Play games
- Do some programming
- And A Bunch of Other Stuff
Find more information in the FAQ.
What's everyone been up to?
- ~gome is putting on a Webjam for the whole server! See the announcement on the front page, or go here for details.
- ~loghead has released the first edition of Ctrl-ZINE, a zine started here on Ctrl-C.club. Read it here!
- ~nodisc has written an alternate client for Iris, with search! Check it out in Iris thread 268!
- ~loghead has been working on some more documentation for Iris. Check it out!
- ~quadruplea wrote a command,
newstuff
, that shows you a list of what everyone on the server's been up to. Try it out!
- ~cenalene has put together a comment page for his site. Stop by and say hi!
- ~fleg has been busy! He's built a tool to convert his blog from Jekyll to Gemini, and has been developing a COVID tracker for Poland! Keep it up!
- ~lovetocode999 built a script to turn Gemini sites into HTML sites. No more duplicated efforts! Check it out on their scripts page!
- ~aravk has put up a blog post on our gemini server about dependency ordering (gemini://gemini.ctrl-c.club/~aravk/ordep.gmi). Good stuff! We've been getting a lot of interest in our gemini server, feel free to check it out! gemini://gemini.ctrl-c.club
- ~nttp has been busy! In addition to setting up the most extensive Gemini capsule on Ctrl-C.club yet, he's developed a brand-new line-editor, Snaked. Check it out!
- ~sata has built an RGB guessing game here! How good are you at recognizing colors?
- ~nomius, the man behind the Kwort Linux distribution, is hosting a patch repository here on Ctrl-C.club!
- ~0x00ctrl made a page listing the social networks our users have posted on their personal pages!
- We now have a bot that tracks what's going on in the IRC channels! Big thanks to ~greymtr for getting that set up!
- ~philips has kicked off an ambitious new project: The Flow MUD! Check it out and pitch in to help!
- ~jstg is putting together a list of the software that's installed on Ctrl-C.club! Check it out!
- ~philips put together a new tool for creating polls from the command-line, which is now available system-wide.
- ~philips has updated Bake. Now it will set the author's name to the system username by default!
- ~ksikka hit the ground running with an in-depth look at Berkeley DB
- ~philips has put together a collaborative short story project. Go read and contribute!
- Bake has been updated to support multiple bakefiles and RSS feeds. Thanks, ~philips!
- ~Azmo has put together a tool for editing his site straight from the browser: Rotide! Some of us have taken to opportunity to leave little notes on his site. Check it out!
- Our own ~philips has been working on Bake, a templated blog generator. It's been installed for anyone to use, so give it a whirl!
-
~philips has made a new tool, netrec, for recording nethack sessions, which can be played back in your browser! Check it out and watch it play!
- ~bear has put together a map of Ctrl-C.club users. Find it here! Read the description of the page to find out how to opt-in.
- ~endorphant has set up a World File at /home/endorphant/HELLO.txt. Hop in and leave a message saying howdy!
- ~bear has been working on making a list of all the projects and code Ctrl-C.clubbers are working on! Check it out!
- A couple of Ctrl-C members have been working with Inform 7 to write text adventure games (aka Interactive Fiction). ~endorphant has put up some documentation about parchment, a system for running Z-Machine games in the browser!
- ~endorphant is building a page to make a narrative out of our nethack sessions! Check it out!
- ~pgadey keeps building new stuff! Now we have a place where you can see whose pages have been updated lately.
- We now have some docs on communicating with wall, who, finger, and write. Thanks, ~pgadey!
- See the nethack high scores here.
Links to useful Ctrl-C.club pages
Incident Report
Looking for information about the outage of Feb. 2016? Check here.


Passed: 0 Failed: 1
| Suite | Passed | Failed | Execution rate % | Time (seconds) |
|---|---|---|---|---|
| Names | 0 | 1 | 100.0 | 19.9 |
| File | TestNames.java |
| Method | FUNC321002_1_Update_an_active_Primary_Name_in_Peoplesoft |
| Line number | 75 |
| Error details | Unable to locate element: {"method":"partial link text","selector":"Corporate Governance d"} For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html Build ... |


The Why's
rich ecosystem
many problems to be solved
have a voice
innovation
source: simplyhired.com
source: infogr.am
source: googinvestor.blogspot.com
But how?
There are countless ways
Not a coder?
Not a problem
Summits
source: openstack.org
Docs, docs, docs!
source: openstack.org
Docs, docs, docs!
source: openstack.org
Code
launchpad account
github account
openstack foundation
ssh public key
contributor license agreement (cla)
source: memegenerator.net


Component: Msp430CounterC
generic module Msp430CounterC(typedef frequency_tag)
Msp430Counter is a generic component that wraps the MSP430 HPL timers into a TinyOS Counter.
Author:
Cory Sharp<EMAIL_ADDRESS>See:
Please refer to TEP 102 for more information about this component and its intended use.
Provides
interface
Counter
<frequency_tag, uint16_t>
Uses
interface
Msp430Timer


We are grateful to our customers and the esteemed jury for showing such overwhelming love and support for the Vitara Brezza. Thank you for choosing to Play Glamorous!
Know MoreMaruti Suzuki India Limited’s (MSIL) popular premium mid-size sedan, Ciaz, has crossed one lakh cumulative sales mark in the domestic market, in June 2016.
Know More


{% extends "base.html" %} {% import "helpers/macros.html" as macros %} {% block title %}Recent Transactions{% endblock %} {% block content %} {% include "includes/namebanner.html" %}


Dixon, Omar-S, Skrillex remix Kelsey Lu on new EP
Blood Transfusion reworks tracks from Lu's 2019 LP, Blood.
by Andrew RyceKelsey Lu's new remix EP is out now.
Blood Transfusions features six remixes of tracks taken from Lu's Blood album, released earlier this year.
Dixon, Omar-S, Skrillex, Lafawndah, Lil M and NAR x ADR all contribute remixes. The "Dixon Retouch" of "Why Knock For You" is only the second remix from the Innervisions head this year.
Listen to the EP.
Tracklist
01. Due West (Lafawndah Remix)
02. Why Knock For You (Dixon Retouch)
03. Shades Of Blue (Lil M Remix)
04. Poor Fake (Omar-S Remix)
05. Foreign Car (NAR x ADR Exhaust Diffusion Mix)
06. Due West (Skrillex Remix)
Blood Transfusion is out now via Columbia.


Middleware
This guide gives an overview of the different Rack middleware used by Utopia.
Static
The class Utopia::Static
middleware services static files efficiently. By default, it works with Rack::Sendfile
and supports ETag
based caching. Normally, you'd prefer to put static files into public/_static
but it's also acceptable to put static content into pages/
if it makes sense.
use Utopia::Static,
# The root path to serve files from:
root: "path/to/root",
# The mime-types to recognize/serve:
types: [:default, :xiph],
# Cache-Control header for files:
cache_control: 'public, max-age=7200'
Redirection
The module Utopia::Redirection
middleware is used for redirecting requests based on patterns and status codes.
# String (fast hash lookup) rewriting:
use Utopia::Redirection::Rewrite,
'/' => '/welcome/index'
# Redirect directories (e.g. /) to an index file (e.g. /index):
use Utopia::Redirection::DirectoryIndex,
index: 'index.html'
# Redirect (error) status codes to actual pages:
use Utopia::Redirection::Errors,
404 => '/errors/file-not-found'
Localization
The class Utopia::Localization
middleware provides non-intrusive localization on top of the controller and view layers. The middleware uses the accept-language
header to guess the preferred locale out of the given options. If a request path maps to a resource, that resource is returned. Otherwise, a non-localized request is made.
use Utopia::Localization,
:default_locale => 'en',
:locales => ['en', 'de', 'ja', 'zh']
To localize a specific xnode
, append the locale as a postfix:
pages/index.xnode
pages/index.de.xnode
pages/index.ja.xnode
pages/index.zh.xnode
You can also access the current locale in the view via Utopia::Content::Node::Context#localization
.
Controller
The class Utopia::Controller
middleware provides flexible nested controllers with efficient behaviour. Controllers are nested in the pages
directory and are matched against the incoming request path recursively, from outer most to inner most.
use Utopia::Controller,
# The root directory where `controller.rb` files can be found.
root: 'path/to/root',
# The base class to use for all controllers:
base: Utopia::Controller::Base,
A controller is a file within the specified root directory (typically pages
) with the name controller.rb
. This code is dynamically loaded into an anonymous class and executed. The default controller has only a single function:
def passthrough(request, path)
# Call one of:
# This will cause the middleware to generate a response.
# def respond!(response)
# This will cause the controller to skip the request.
# def ignore!
# Request relative redirect. Respond with a redirect to the given target.
# def redirect! (target, status = 302)
# Controller relative redirect.
# def goto!(target, status = 302)
# Respond with an error which indiciates some kind of failure.
# def fail!(error = 400, message = nil)
# Succeed the request and immediately respond.
# def succeed!(status: 200, headers: {}, **options)
# options may include content: string or body: Enumerable (as per Rack specifications
end
The controller layer can do more complex operations by prepending modules into it.
prepend Rewrite, Actions
# Extracts an Integer
rewrite.extract_prefix id: Integer do
@user = User.find_by_id(@id)
end
on 'edit' do |request, path|
if request.post?
@user.update_attributes(request[:user])
end
end
otherwise do |request, path|
# Executed if no specific named actions were executed.
succeed!
end
The incoming path is relative to the path of the controller itself.
Content
The class Utopia::Content
middleware parses XML-style templates with using attributes provided by the controller layer. Dynamic tags can be used to build modular content.
use Utopia::Content
A basic template create.xnode
looks something like:
<content:page>
<content:heading>Create User</content:heading>
<form action="#">
<input name="name" />
<input type="submit" />
</form>
</content:page>
This template would typically be designed with supporting _page.xnode
and _heading.xnode
in the same directory or, more typically, somewhere further up the directory hierarchy.
Session
The class Utopia::Session
middleware provides session storage using encrypted client-side cookies. The session management uses symmetric private key encryption to store data on the client and avoid tampering.
use Utopia::Session,
expires_after: 3600 * 24,
# The private key is retried from the `environment.yaml` file:
secret: UTOPIA.secret_for(:session),
secure: true
All session data is stored on the client, but it's encrypted with a salt and the secret key. It is impossible for the client to decrypt the data without the secret stored on the server.


Go Players Rating Visualization
Player Page
Team Page
Update Date: 2019-03-23
Team Fight:
VS
Please input team size


Python Tkinter EntryThe Entry widget is used to provde the single line text-box to the user to accept a value from the user. We can use the Entry widget to accept the text strings from the user. It can only be used for one line of text from the user. For multiple lines of text, we must use the text widget. The syntax to use the Entry widget is given below. SyntaxA list of possible options is given below.
ExampleOutput: Entry widget methodsPython provides various methods to configure the data written inside the widget. There are the following methods provided by the Entry widget.
Example: A simple calculatorOutput:
Next TopicPython Tkinter Frame
|
Python Tkinter EntryThe Entry widget is used to provde the single line text-box to the user to accept a value from the user. We can use the Entry widget to accept the text strings from the user. It can only be used for one line of text from the user. For multiple lines of text, we must use the text widget. The syntax to use the Entry widget is given below. SyntaxA list of possible options is given below.
ExampleOutput: Entry widget methodsPython provides various methods to configure the data written inside the widget. There are the following methods provided by the Entry widget.
Example: A simple calculatorOutput:
Next TopicPython Tkinter Frame
|
Python Tkinter EntryThe Entry widget is used to provde the single line text-box to the user to accept a value from the user. We can use the Entry widget to accept the text strings from the user. It can only be used for one line of text from the user. For multiple lines of text, we must use the text widget. The syntax to use the Entry widget is given below. SyntaxA list of possible options is given below.
ExampleOutput: Entry widget methodsPython provides various methods to configure the data written inside the widget. There are the following methods provided by the Entry widget.
Example: A simple calculatorOutput:
Next TopicPython Tkinter Frame
|
Python Tkinter EntryThe Entry widget is used to provde the single line text-box to the user to accept a value from the user. We can use the Entry widget to accept the text strings from the user. It can only be used for one line of text from the user. For multiple lines of text, we must use the text widget. The syntax to use the Entry widget is given below. SyntaxA list of possible options is given below.
ExampleOutput: Entry widget methodsPython provides various methods to configure the data written inside the widget. There are the following methods provided by the Entry widget.
Example: A simple calculatorOutput:
Next TopicPython Tkinter Frame
|


I'm a biotech graduate from Israel with 2 years of experience in genetic research in plants. I was exposed to the programming world during my 3 years of military service. I made my first steps in the programming world at She Codes - a community of women whose goal is to increase the presence of women in Israeli high-tech. 3 months ago I moved to Madrid and decided to turn my love for programming into a career. So, here I am, starting my adventure at Adalab :)
I’m Industrial Engineer from Venezuela, with tons of love for technology. I discovered programming at college, and it was love at first sight; solving problems using logic and creativity is more than awesome. My work experience includes 9 years working at the back-office of a Bank and 2 and a half years at a SME. I couldn't be more proud of being part of this amazing project, Adalab is giving me an incredible opportunity to grow as a professional and as a person... And I will gladly take it.
I am a Nurse and Educational Psychologist from Venezuela, living in Madrid for the last 4 years. After two degrees and many years helping children with learning disabilities, it’s time for a new challenge: becoming a front-end programmer with Adalab looking to improve my son’s life and mine. And like all the big challenges I have had proposed to myself in my life, I have all the motivation to reach it... and I will!
Formed in Philosophy and Cognitive Science in Madrid, New York and Edinburgh, I got in touch with the technological world through initiatives that wanted to raise women presence in STEAM. I have been part of training programs, such as Django Girls or the Technovation Challenge, that taught us how to start coding and the value of becoming part of a community. As part of that journey, I am currently an adalaber, willing to embrace new challenges as a front-end programmer while returning to the community what I have learnt so far!
I studied Spanish Literature in Madrid and Washington DC, coordinating a variety of projects on each side of the pond. I've helped developing magazines, conferences and novel educational tools for language learning in the universities I've worked for. I love creating and diving head first into new enterprises. Now I'm ready to translate all of that into digital products, typing as much code as I can until I become a front end developer!


September 5
Out of the abundance of the heart the mouth speaketh.  Matthew 12:34-35
Words won't work without faith any more than faith will work without words! It takes them both to put the law of faith in motion.
Many believers don't realize that. They'll continually speak words of doubt and unbelief, then they'll jumpup one day and say a couple of faith words and expect mountains to move-- and to their dismay, they don't.
Why not?
Because as Matthew 12:34-35 says, it's the words that come from the heart that produce results. The person who just throws in a couple of faith words now and then isn't speaking them from the abundance of his heart, so they're not effective.
Does that mean you shouldn't startspeaking words of faith until you're sure you have the faith to back them?
No! Speaking words of faith is good spiritual exercise. If you want to receive healing by faith, for example, fasten your mind and your mouth on the Word of God where your health is concerned. Instead of talking about how miserable you feel, quote Isaiah 53:5. Say, "Jesus was wounded for my transgressions. He was bruised for my iniquities. The chastisement of my peace was upon Him; and with His stripes, praise God, I was healed!"
If you'll continue to meditate on those words and continue to say them, the truth in them will begin to sink in. They'll take root in your heart and begin to grow. And eventually you really will be speaking from the abundance of your heart.
When that happens, it won't matter what the circumstances look like. You'll know you have what you've been believing for and the devil himself won't be able to talk you out of it. You'll cross the line from hope to faith, and you'll start seeing those mountains move!
Scripture Reading: Matthew 12:33-37


18.0 Naval Power
Skip this entire section if the game being played does not include ships!
Naval warfare is handled fairly simply, because the series is built around land and air combat. However, some detail in naval operations is needed to allow for campaigns with an important naval component (specifically naval gunfire support and amphibious landings).
18.1 General Naval Rules
18.1a Supply. Ships never need supply.
18.1b Stacking. There is no limit to the number of ships that can stack in a hex. Ships cannot stack with enemy ships. Ships can enter hexes with enemy non-combat units, but cannot stack with enemy combat units (see 4.8c).
18.1c Naval Movement. Most ships can only enter all-sea hexes. Landing Craft can additionally move in coastal hexes and in either hex bordering an estuary (see note below), even if it looks like they are crossing all-land hexsides.
Play Note: An Estuary is a sea hexside near the coast. It is often, but not always, marked with a prohibited hexside. The rule allowing landing craft to move along an estuary does not apply to rivers or canals!
Specific Game Note: In THE BLITTZKRIEG LEGEND Destroyers are allowed move into a port. This is an exception to normal rules. A large ship is automatically DG in a port, which makes it more susceptible to damage (since another DG converts to a loss).
18.1d Naval DG. Ships do not have modes, but they do use DG markers to show an increased vulnerability to damage (see 18.3d). DG markers are removed from ships during the player’s Clean Up Phase. Note that ship values are not affected.
18.1e Phasing. Ships can move during friendly Movement, Exploitation, and Reaction Phases, and expend 1 MP per hex. Every ship can move in all three phases (no need for Reserve markers).
18.1f Speed. Most ships can move 20 hexes per phase. Slow ships (designated with a white stripe) can only move 10 hexes per phase. A damaged single-ship counter converts to slow speed, but a damaged multi-ship counter (destroyers and cruisers) retains its normal speed. These changes are reflected on a coun- ter’s damaged side.
Design Note: The speeds above are indeed “slow” given regular steaming rates. They exist here not as a measure of how fast the ships can go, but rather as a measure of flexibility. Ships dedicated to an operation cannot instantly shift focus as would be the case if they had a movement rate matching their potential steaming distance.
18.2 Aircraft Carriers
18.2a Capacity.
Carriers are limited in the number and type of aircraft they carry. In some games, only planes with the carrier’s name on them can use that carrier. In other games, each carrier has a number on it for how many aircraft it can support (counting both Inactive and Active aircraft).
18.2b Refit. Carriers can refit all of their planes in the Aircraft Refit Phase. Exception: Damaged carriers can only refit 2 planes (regardless of their normal rating). There is no SP cost.
18.2c Carrier Planes. Air units on a carrier perform missions and project Patrol Zones from the carrier’s hex. A carrier can move in the same segment, either before or after, its planes perform missions. Aircraft stay with a carrier as it moves—and this includes a “move” to the Dead Pile. (Note tagging along with a moving carrier is not treated as a mission.) Otherwise, carrier planes operate as regular aircraft.
18.2d Surface ship gunfire cannot be directed at a carrier if any non-carrier surface ships are in range. This rule does not apply to coastal artillery gunfire (18.3g).
Design Note: This rule shows the effort by members of a carrier group to defend the carrier. A surface attack will not get to the carrier until the screen is eliminated.
18.3 Naval Combat
Ships attack enemy naval and ground targets using barrage. Anti-ship attacks of all kinds are also resolved via barrage.
18.3a Ship Barrages. A ship is able to barrage once per friendly Barrage Segment, choosing either a ground or naval target in range. There are some restrictions:
- A) A ship can fire at naval targets in every friendly Barrage Segment it does not fire at a ground target.
- B) A ship can fire at enemy ground targets only once per game turn. For example, a ship that barrages an enemy air base in its Reaction Phase is unable to fire at a target during Movement or Exploitation.
18.3b Ground Targets. Naval barrages against ground units have reduced effects as noted on the Barrage Table; barrages vs. Facilities have no special reduction. Ships firing together do not need to be stacked together. See 18.3g for special handling of Coastal Artillery.
18.3c Naval Targets. Enemy ships can only be barraged by naval units, planes, and Coastal Artillery. These barrages are made against individual ships, not entire stacks. There is no limit on the number of barrage missions that can be directed against ships in a single hex in a Barrage Segment, but no ship can be targeted by more than one barrage in a phase.
After announcing a barrage against a stack of ships, the firing player is allowed to see all the available ships (but not their cargoes, if any) before selecting individual targets. For example, a stack of two aircraft could combine against one ship or each attack a different ship. (The strength of a barraging unit cannot be split, however.) Resolve each barrage independently, using the regular Barrage Table. Several special rules apply when barraging ships:
- A) The only possible shifts are those related to an attacking aircraft’s distance from its base.
- B) Multiply the Barrage Strength of all attacking planes by x2.
- C) Divide the Barrage Strength of all attacking units by the target’s Protection Rating (treat as ‘1’ if none is printed on the counter).
- D) All Landing Craft in a stack are treated as “one individual ship” for target and DG purposes.
18.3d Naval Damage. A ship is affected by hits and DG results generated by the Barrage Table. Damaged ships cannot be repaired.
- A) Hits on Ships. A hit flips a ship to its damaged side; a second sinks it. Also apply a DG result to the ship (see below).
- B) Hits on Landing Craft. Each hit eliminates one point of the unit— use a counter of a reduced value to reflect the hit. (Exception: When an LST takes a hit, convert the counter to Landing Craft of the reduced point value.) Also apply a DG result (see below) to all the Landing Craft in the hex.
- C) DG results. These results affect the target only, not the entire hex or any cargo. The first DG does not cause damage, but on a second DG remove the marker and then apply a hit (per “A” or “B”).
Important Note: A player conducting a barrage selects its target if shooting against ships. If firing against Landing Craft, randomly determine the target. Eliminated cargo is also randomly determined. For example: a 2-point DUKW carrying a regiment and an SP takes a loss. Reduce the DUKW to 1 point, and then roll to see if the SP or the regiment is lost.
18.3e Torpedo Bombers.
Air units with a Barrage Strength in parentheses are Torpedo Bombers. They can only barrage ships; they can never barrage land targets of any kind.
18.3f Ship Flak. The Flak value of a ship (if any) is given on the counter. This adds to the Flak rolls made against all Air Barrage missions in the hex (not just those targeting that particular ship).
18.3g Coastal Artillery.
Coastal Artillery can fire as “land-based ships” using the rules for ship barrages (this includes being exempted from supply use). They are the only ground units that can barrage ships.
- A) Coastal Artillery can fire at ships in every friendly Barrage Segment it does not fire at ground targets. Resolve the barrages using 18.3c. These have no supply cost.
- B) Coastal Artillery can sometimes fire at ground targets in friendly Barrage Segments. They cannot fire at enemy ships in the same phase, however, and all normal rules for artillery barrage apply— including mode/phase restrictions and limits. These have the normal supply cost.
- C) Ships can fire at Coastal Artillery as a naval target, independent of other units in the hex. (Or they could do a regular barrage against the hex, per 18.3b.) Always treat these as “spotted” barrages, with Barrage Table results adjusted as follows: a step loss eliminates the Coastal Artillery unit and a DG result is ignored.
Design Note: It is important that players realize the abstractions represented in ship vs. ship exchanges. Ship location at this level is not all that precise—range changes and gunfire exchanges happen in the hours significantly “below” the resolution of this system. This is not a tactical naval system!
18.4 Landing Craft
Landing Craft, DUKWs, and LSTs are collectively called “Landing Craft.” These are naval units used to deliver cargo (troops and supplies) to invasion beaches. Landing Craft do not have a Flak value or Barrage Strength.
18.4a Capacity. Landing Craft have a capacity number on the counter and function much like Transport Points. They do not count for stacking.
18.4b Movement. Landing Craft are slow ships (18.1f). Exception: DUKW can only move 8 hexes per phase.
18.4c Loading. Landing Craft can carry combat units, SP, and Transport Points up to the limit of their capacity (see 4.7 for Transportation Equivalents). Loading has no movement cost, can only be done in port hexes (subject to current capacity), and the cargo cannot have been moved before being loaded.
Important Note: Unloading is done using Amphibious Landing (18.5) or Beach Assault (18.6) procedures.
18.4d Handling. Handle Landing Craft like SP and Transport Points—they can be split up and combined in various combinations of points. When taking losses, either from ALT results or from barrage, just replace the current counter with a Landing Craft of the reduced number of points. LSTs are an exception (see 18.3d).
18.4e DUKWs.
In addition to being Landing Craft, DUKWs can operate as Transport Points (see 13.2; captured as a Truck per 9.14c). When moving as Transport Points, DUKWs lose their ability to move in all three Movement Segments, but their MA is tripled to 24. The switch between Landing Craft and Transport Point (and vice versa) can occur at any time during the Movement Phase—just triple the remaining MA when it starts to move by land (or divide by 3 when it starts to move by water).
In addition…
- A) Make an ALT roll (see 18.5f) each time the DUKW switches movement type from Landing Craft to Transport Point (not vice versa). This can be the same roll used to unload cargo (but this will end movement, per 18.5e).
- B) When acting as Landing Craft, DUKWs can only carry the cargo types allowed on Air Transport Missions (restricted as per 14.9c). Treat as a Landing Craft if overrun (9.14g). Unloaded ground units can move after landing (18.5h).
- C) When acting as Transport Points, DUKWs can only carry SP. Treat as a truck when overrun (9.14c). Loading/unloading cost is 2 MP (per 4.7d and 13.2f).
18.4f LSTs.
In addition to being a type of Landing Craft, an LST in a coastal or estuary hex can be converted into a port (by flipping to its port side). This ‘conversion’ requires an ALT roll (see 18.5f). Any cargo on the LST unloads when it deploys as a port, using the same ALT roll as the port deployment. (The cargo is landed before the port exists in the hex, so note the restrictions of 18.5e do apply.)
Some special rules apply to LST ports:
- A) Unlike regular ports, they cannot be targeted by barrage (the hex can be barraged, but the port ignores any result).
- B) They are destroyed when an enemy Attack-Capable unit enters its hex. They can never be destroyed or captured by any other method.
- C) They can never move or convert back into an LST.
- D) They are a 1 SP port, which makes them a supply source.
- E) LST ports are not functional in the phase they deploy. (So in that phase no shipping is allowed into the port and the port does not assist other ALT rolls.)
- F) An LST cannot convert into a port in a hex with another port.
18.5 Amphibious Landings
Landing Craft can unload the combat units they are transporting when they end movement in coastal hexes. The risk attached to such landings is reflected by the required roll on the Amphibious Landing Table (ALT). These landings are limited to undefended coastal hexes. For hexes occupied by enemy combat units, see Beach Assaults (18.6).
18.5a There is no movement cost for unloading; just drop off the units when the Landing Craft enters the coastal hex. The Landing Craft must end its move at that point.
18.5b Any number of Landing Craft points can unload in a given hex in one phase.
18.5c Combat units must unload in either Combat or Move Mode.
18.5d Landings requiring an ALT roll can only be done during the player’s Movement Phase. Note that landings in ports which do not require an ALT roll can also be done in Reaction and Exploitation Phases (see 18.5g) — this is a way to get extra cargo ashore!
18.5e Transport Points and SP cannot be landed by ALT roll (but see 18.5g). SP loaded on Landing Craft can only be used by units in the same or an adjacent hex (even if off-shore), and HQs are not allowed to “throw” supply drawn from a Landing Craft.
18.5f The ALT Roll. Make ALT rolls after all Landing Craft have finished moving for the phase. Roll two dice per hex containing units that landed during the phase. Add applicable modifiers and execute the result.
- A) When there are several types of terrain in the hex, use the most difficult on the ALT.
- B) Roll and carry out ALT results separately for every group of 3 RE landed in a hex. Make as few rolls as possible, but otherwise a player can arrange units into these groups as desired.
- C) When partial losses are required by the ALT result, randomly choose the lost Landing Craft and cargo.
- D) Wait to do “after landing” moves (18.5h) until all of the player’s ALT rolls have been made.
- E) When entering a hex with enemy non-combat units, resolve Specialized Combats (9.14) after making the ALT roll.
18.5g Ports. Do not make an ALT roll for Landing Craft that unload cargo using a friendly port’s capacity (19.0a). (Additional units can be landed in a port hex, but these do require an ALT roll.) When no ALT roll is required, SP and loaded Transport Points can be unloaded.
18.5h After Landing. Combat units can move 1/2 their MA during that same Movement Phase after an ALT landing (per 4.7d). Such units are fueled before landing for free (at no SP cost) via the “single-unit method” (see 12.5c(C)). DUKW can move a proportion of their remaining MA (per 18.4e).
- Units that come ashore without an ALT roll (via 18.5g) do not get any after-landing movement.
18.6 Beach Assaults
Landing Craft can position units for an assault on a coastal hex that contains enemy combat units. Think of Beach Assaults (BA) as a last resort, when landings via the ALT are not possible.
18.6a Resolve Beach Assaults during the friendly Combat Phase. Several special rules apply:
- A) The attacking units in a BA must be in Combat Mode, stacked in the same hex, and total no more than 3 RE.
- B) Combat supply for a BA can be drawn only from Landing Craft carrying Supply Points in the same or an adjacent hex.
- C) All atacker option results must be taken as step losses.
- D) Units making a BA can keep any Exploit marker they might earn.
- E) If the BA does not dislodge the defenders from the hex, destroy all attacking units and also their Landing Craft.
- F) There is a nominal hexside terrain that makes all units x1/2 when attacking in a BA. The defender can choose that or the hex terrain in 9.4b.
- G) BA combats cannot be made in conjunction with attacking units that have already landed.
- H) If all of the defenders are destroyed by a barrage, resolve the assault on the ALT instead (but there is no “after landing” movement).
18.6b Just before the execution of a BA, the defending player can opt to resolve the landing as an ALT instead of as a BA. (This can be done if the odds are overwhelming and an ALT roll has a better chance of inflicting losses.) The decision cannot be changed once made, and must be made before any dice are rolled, units exposed, or combat supply paid. Spend no supply for a BA resolved on the ALT.
If the defender makes this choice, the normal ALT procedure is modified as follows:
- Regardless of the ALT result, the defenders are destroyed.
- Unloaded units advance into the vacated hex, but there is no “after landing” movement (per 4.7d).


Professional Experience
Business Development Manager / Account Manager
iProperty Express
Sep 2015 - Feb 2018
Melbourne, Australia
Inspection Express provides the best routine/condition reporting iPad app for property management in Australia. Commencing operations in 2013, we grew to over 450 clients using our services!
As the Business Development / Account Manager I keep our existing clients happily serviced and also advise the Director on strategic matters within our industry. This duty also includes providing advice on new product development and updates based on client feedback from sales and setup / training meetings.
Distributor
Inspect Real Estate
Oct 2014 - Sep 2016
Melbourne, Australia
As a Distributor at Inspect Real Estate, I was responsible for prospecting for new business, pitching, implementing our customised software solutions, training clients and being their first point of contact for support. This was a remote commission-only role which required me to be self-motivated and work independently with limited support from head office.
At the conclusion of my time at IRE, I had successfully prospected, pitched, implemented and supported software for 68 new happy clients. The majority of these client setups occurred on-site at various locations in Victoria and South Australia.
Fantastic Adventurer
World Traveller
Apr 2014 - Oct 2014
Europe
In this position I was responsible for maximising the enjoyment of my holiday.
I purchased a car and drove 15,000 miles solo across 10 countries in 6 months, learnt some German, a lot of history, a broader perspective and made long-life friends.
Client Transition Team Lead
REA Group
Jan 2014 - Mar 2014
Melbourne, Australia
1Form was acquired by REA Group in January 2014.
It was my responsibility to ensure a successful handover of all our technical knowledge, clients and key stakeholder relationships to REA Group's various teams including Customer Support, Account Management and the new General Manager.
I produced detailed documentation and undertook training with many REA Group employees.
Client Services Manager
1Form.com
Oct 2011 - Mar 2014
Melbourne, Australia
1Form is Australia's leading online tenancy application system, providing over 85% of the real estate industry nationally with the fully customisable Application Management System (AMS). The AMS allowed your business to make the entire tenancy application process paperless and assists your staff by providing online tools to help manage the process.
In January 2014, 1Form was purchased by REA Group, owner of Realestate.com.au.
As Client Services Manager for 1Form, I was responsible for everything that is client-related including managing our customer service team, recruiting new staff to serve client needs, reviewing, suggesting and implementing new features in our services to benefit our clients and rectifying system faults with our development team when necessary.
Often acting as the ‘face’ of 1Form, I frequently met with both existing and prospective clients to train their staff in our programs or present our services. When the opportunity arises I flew interstate to speak at property management conferences to promote 1Form’s services to our target audience.
I was the the main contact for our key franchise Head Office contacts. Together with the feedback I gather from our valued clients and our customer service team, I worked closely with our BDM and Chief Operations Officer to improve our services and explore future business opportunities.
Data Operations Analyst
Carsales.com.au
Feb 2011 - Aug 2011
Melbourne, Australia
Carsales.com.au is Australia's leading online Automotive classifieds portal.
As the Data Operations Analyst in my team, I was responsible for creating and evaluating reports to various clients as well as sales staff and account managers within the business. The work I undertook was able to assist account managers close important advertising deals with many iconic brands in Australia. These brands included, BMW, Holden, Ford, Honda, Toyota and Hyundai.
This was a temporary 6 month contract.
Education
Rithm School, San Francisco, CA
Full-stack web development, Feb - Jun, 2018
San Francisco's highest-quality coding bootcamp.
16 students taught by 4 expert instructors.
RMIT University - Melbourne, Australia
Bachelor of Business - Entrepreneurship, 2008-2010
Australia's only undergraduate Entrepreneurship bachelor degree.
Babson College - Wellesley, MA
Bachelor of Business - Entrepreneurship, 2010
Exchange program - Spring 2010
Deloitte Digital - Melbourne, Australia
Innovation Fastrack Programme, 2010
Internship providing consulting services to Deloitte Digital's clients.


Stop playing politics over Mahadayi issue, Raitha Sena tells parties
by Staff ReporterThe Karnataka Raitha Sena has called on parties to shun playing politics over the Mahadayi river water sharing issue and strive unitedly to ensure justice to farmers and people.
Speaking to journalists here on Friday, Sena president Veeresh Sobaradmath said it was unfortunate that 28 Lok Sabha members from the State are succumbing to the pressure tactics of Goa on this issue.
Taking exception to Congress leader and former minister D.K. Shivakumar’s statements blaming the BJP of doing nothing to resolve this issue, Mr. Sobaradmath said instead of blaming others, let Mr. Shivakumar explain what he or the Congress did to resolve this issue when they were in power.
All three political parties — Congress, BJP and JD(S) — have been in power on different occasions and did nothing to resolve this issue.
Expressing reservations over the indifferent attitude of the Governor Vajubhai Vala, he said he has asked the Governor’s office to furnish information about the memoranda submitted to his office so far. If the Governor’s office fails to rely, the Sena will take legal course of action.


Discover your programming skill level for free with CodeAcademia
Learn the programming skills you need online at your own pace.
CodeAcademia is a community that helps people around the world to learn programming by working on real project and solving complex problem. We also have big study group from people around the world. With CodeAcademia you can choose what programming language you want to learn, learn by doing, get an instant feedback from our professional mentors, and will help you land your dream job. CodeAcademia will allow you to code from browser, no installation required. We also provide interactive exercises and short videos to help you understand the concept of programming.
Trusted by 200,000 learners working in companies like
Python is a popular programming language. It was created by Guido van Rossum, and released in 1991. Whatever you want to do, Python can do it. From web development to machine learning to data science, Python is the language for you.
JavaScript is among the most powerful and flexible programming languages of the web. It powers the dynamic behavior on most websites, including this one (Source: codeacademy).
Java is a powerful general-purpose programming language. It is used to develop desktop and mobile applications, big data processing, embedded systems, and so on (Source: Programiz).
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.


---
layout: default
title: Home
---
Curveball is currently in Beta. It's close to a stable release, and any API changes will be minor. It's ready for production.Curveball is a framework for building APIs in Node.js.
Curveball makes it easy to build developer-friendly HTTP APIs that are simple and robust.
Design goals
Installation
npm install @curveball/core
Project status
Code samples
{% if post.quote %}{{ post.quote }}{% else %}{{ post.content | strip_html | truncatewords: 50 }}{% endif %}


|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.apache.axis.components.threadpool.ThreadPool
| Field Summary | |
boolean |
_shutdown
|
protected static org.apache.commons.logging.Log |
log
|
static long |
MAX_THREADS
|
protected long |
threadcount
|
protected java.util.Map |
threads
|
| Constructor Summary | |
ThreadPool()
|
| Method Summary | |
void |
addWorker(java.lang.Runnable worker)
Adds a new worker to the pool |
void |
awaitShutdown()
Await shutdown of the worker |
boolean |
awaitShutdown(long timeout)
Await shutdown of the worker |
void |
cleanup()
|
long |
getWorkerCount()
Returns the total number of currently active workers |
void |
interruptAll()
Forcefully interrupt all workers |
boolean |
isShutdown()
Returns true if all workers have been shutdown |
boolean |
isShuttingDown()
Returns true if all workers are in the process of shutting down |
void |
safeShutdown()
Forcefully shutdown the pool |
void |
shutdown()
Forcefully shutdown the pool |
void |
workerDone(java.lang.Runnable worker,
boolean restart)
Used by MessageWorkers to notify the pool that it is done |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
protected static org.apache.commons.logging.Log log
public static final long MAX_THREADS
protected java.util.Map threads
protected long threadcount
public boolean _shutdown
| Constructor Detail |
public ThreadPool()
| Method Detail |
public void cleanup() throws java.lang.InterruptedException
java.lang.InterruptedException
public boolean isShutdown()
public boolean isShuttingDown()
public long getWorkerCount()
public void addWorker(java.lang.Runnable worker)
public void interruptAll()
public void shutdown()
public void safeShutdown()
public void awaitShutdown() throws java.lang.InterruptedException
java.lang.InterruptedException
public boolean awaitShutdown(long timeout) throws java.lang.InterruptedException
java.lang.InterruptedException
public void workerDone(java.lang.Runnable worker, boolean restart)
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


|
Daniel T. Gilbert is Professor of Psychology at Harvard University. He is a social psychologist known for his research on affective forcasting, with a special emphasis on cognitive biases such as impact bias. He is the author of the international bestseller Stumbling on Happiness, which has been translated into more than 25 languages. He is also very well known for his TED talks, which were watched over 10 million times. |
What I enjoy most about my job as a researcher ... is working with my collaborators, who range from undergraduates to full professors. Spending your life exploring ideas is a pleasure, but spending your life exploring them with friends is a joy.
The biggest challenge in my career so far was ... finding a question worth answering. Answering questions is not difficult. Science tells us how to do this. But finding questions that have not yet been asked, and whose answers might generate even deeper and more interesting questions – THAT is a hard thing to do
One research project I will never forget is … the very first study we did on the effects of cognitive load on dispositional inference. My former-student, Brett Pelham, came running into my office one day with papers in his hand and shouted, “It worked!” The theory and the experimental paradigm were both utterly new, and we had no idea whether our study had even the slightest chance of working. That study ended up being rather famous – I think it has been cited roughly a thousand times – and I’ll never forget how excited we were to discover that we had discovered something new.
What I look for in a student who wants to work under my supervision ... dedication, intelligence, maturity -- and a very good sense of humor.
Student research could be improved by ... Students often think that the first idea they explore must be an entirely new one. In fact, students are almost always better off working on a question that is very close to the questions already being asked in their lab. First, when you don’t know a field very well, your “new” idea is almost surely old. Second, when you work on a question that is similar to the questions that others in your lab are working on, it ties you intellectually to the community and puts you in a position to receive a lot of good advice. Learning to generate new psychological findings is like learning to compose music. First you must learn to play the piano, and then you can use that skill to write a sonata. If you try to compose before you even know how to play, odds are small you will learn to do either.
Academically, I most admire ... my collaborator Tim Wilson, because he is brilliant, original, patient, humble, and willing to put up with me for the last 20 years.
I wish someone had told me at the beginning of my career ... that I could talk about research that was not my own. It was a revelation for me to discover in middle-age that I could write books and give lectures on OTHER PEOPLE’S research. Readers and listeners don’t really care who DID a piece of research, they just care if it is true and interesting!
The largest changes in psychological science in the next 10 years will be ... something we cannot yet foresee. Answers to this question are almost always trivially obvious or wrong. I’d rather be neither, so I will just wait patiently like everyone else and see where this always-exciting field takes us next.


SpeechToText
public class SpeechToText
The IBM Watson Speech to Text service enables you to add speech transcription capabilities to your application. It uses machine intelligence to combine information about grammar and language structure to generate an accurate transcription. Transcriptions are supported for various audio formats and languages.
This class makes it easy to recognize audio with the Speech to Text service. Internally, many
of the functions make use of the SpeechToTextSession
class, but this class provides a simpler
interface by minimizing customizability. If you find that you require more control of the session
or microphone, consider using the SpeechToTextSession
class instead.
-
The base URL to use when contacting the service.
Declaration
Swift
public var serviceURL = "https://stream.watsonplatform.net/speech-to-text/api"
-
The URL that shall be used to obtain a token.
Declaration
Swift
public var tokenURL = "https://stream.watsonplatform.net/authorization/api/v1/token"
-
The URL that shall be used to stream audio for transcription.
Declaration
Swift
public var websocketsURL = "wss://stream.watsonplatform.net/speech-to-text/api/v1/recognize"
-
The default HTTP headers for all requests to the service.
Declaration
Swift
public var defaultHeaders = [String: String]()
-
Create a
SpeechToText
object.Declaration
Swift
public init(username: String, password: String)
Parameters
username
The username used to authenticate with the service.
password
The password used to authenticate with the service.
-
Retrieve a list of models available for use with the service.
Declaration
Swift
public func getModels(failure: ((Error) -> Void)? = nil, success: @escaping ([Model]) -> Void)
Parameters
failure
A function executed if an error occurs.
success
A function executed with the list of models.
-
Retrieve information about a particular model that is available for use with the service.
Declaration
Swift
public func getModel( withID modelID: String, failure: ((Error) -> Void)? = nil, success: @escaping (Model) -> Void)
Parameters
withID
The alphanumeric ID of the model.
failure
A function executed if an error occurs.
success
A function executed with information about the model.
-
Perform speech recognition for an audio file.
Declaration
Swift
public func recognize( audio: URL, settings: RecognitionSettings, model: String? = nil, customizationID: String? = nil, learningOptOut: Bool? = nil, failure: ((Error) -> Void)? = nil, success: @escaping (SpeechRecognitionResults) -> Void)
Parameters
audio
The audio file to transcribe.
settings
The configuration to use for this recognition request.
model
The language and sample rate of the audio. For supported models, visit https://console.bluemix.net/docs/services/speech-to-text/input.html#models.
customizationID
The GUID of a custom language model that is to be used with the request. The base language model of the specified custom language model must match the model specified with the
model
parameter. By default, no custom model is used.learningOptOut
If
true
, then this request will not be logged for training.failure
A function executed whenever an error occurs.
success
A function executed with all transcription results whenever a final or interim transcription is received.
-
Perform speech recognition for audio data.
Declaration
Swift
public func recognize( audio: Data, settings: RecognitionSettings, model: String? = nil, customizationID: String? = nil, learningOptOut: Bool? = nil, failure: ((Error) -> Void)? = nil, success: @escaping (SpeechRecognitionResults) -> Void)
Parameters
audio
The audio data to transcribe.
settings
The configuration to use for this recognition request.
model
The language and sample rate of the audio. For supported models, visit https://console.bluemix.net/docs/services/speech-to-text/input.html#models.
customizationID
The GUID of a custom language model that is to be used with the request. The base language model of the specified custom language model must match the model specified with the
model
parameter. By default, no custom model is used.learningOptOut
If
true
, then this request will not be logged for training.failure
A function executed whenever an error occurs.
success
A function executed with all transcription results whenever a final or interim transcription is received.
-
Perform speech recognition for microphone audio. To stop the microphone, invoke
stopRecognizeMicrophone()
.Microphone audio is compressed to OggOpus format unless otherwise specified by the
compress
parameter. With compression enabled, thesettings
should specify acontentType
ofAudioMediaType.oggOpus
. With compression disabled, thesettings
should specify acontentType
ofAudioMediaType.l16(rate: 16000, channels: 1)
.This function may cause the system to automatically prompt the user for permission to access the microphone. Use
AVAudioSession.requestRecordPermission(_:)
if you would prefer to ask for the user’s permission in advance.Declaration
Swift
public func recognizeMicrophone( settings: RecognitionSettings, model: String? = nil, customizationID: String? = nil, learningOptOut: Bool? = nil, compress: Bool = true, failure: ((Error) -> Void)? = nil, success: @escaping (SpeechRecognitionResults) -> Void)
Parameters
settings
The configuration for this transcription request.
model
The language and sample rate of the audio. For supported models, visit https://console.bluemix.net/docs/services/speech-to-text/input.html#models.
customizationID
The GUID of a custom language model that is to be used with the request. The base language model of the specified custom language model must match the model specified with the
model
parameter. By default, no custom model is used.learningOptOut
If
true
, then this request will not be logged for training.compress
Should microphone audio be compressed to OggOpus format? (OggOpus compression reduces latency and bandwidth.)
failure
A function executed whenever an error occurs.
success
A function executed with all transcription results whenever a final or interim transcription is received.
-
Stop performing speech recognition for microphone audio.
When invoked, this function will
- Stop recording audio from the microphone.
- Send a stop message to stop the current recognition request.
- Wait to receive all recognition results then disconnect from the service.
Declaration
Swift
public func stopRecognizeMicrophone()
-
List information about all custom language models owned by the calling user. Specify a language to see custom models for that language only.
Declaration
Swift
public func getCustomizations( withLanguage language: String? = nil, failure: ((Error) -> Void)? = nil, success: @escaping ([Customization]) -> Void)
Parameters
language
The language of the custom models that you want returned.
failure
A function executed whenever an error occurs.
success
A function executed with a list of custom models.
-
Create a new custom language model for a specified base language model.
Declaration
Swift
public func createCustomization( withName name: String, withBaseModelName baseModelName: String, dialect: String? = nil, description: String? = nil, failure: ((Error) -> Void)? = nil, success: @escaping (CustomizationID) -> Void)
Parameters
name
The name of the new custom model.
baseModelName
The name of the language model that will be customized by the new model.
description
The description of the new model.
failure
A function executed whenever an error occurs.
success
A function executed with a
CustomizationID
object. -
Delete an existing custom language model with the given ID. The custom model can’t be deleted if another request, such as adding a corpus to the model, is currently being processed.
Declaration
Swift
public func deleteCustomization( withID customizationID: String, failure: ((Error) -> Void)? = nil, success: (() -> Void)? = nil)
Parameters
customizationID
The ID of the custom model to delete.
failure
A function executed whenever an error occurs.
success
A function executed whenever a success occurs.
-
Get information about a custom language model.
Declaration
Swift
public func getCustomization( withID customizationID: String, failure: ((Error) -> Void)? = nil, success: @escaping (Customization) -> Void)
Parameters
customizationID
The ID of the custom language model to return information about.
failure
A function executed whenever an error occurs.
success
A function executed with information about the custom model.
-
Initiates the training of a custom language model with new corpora, words, or both. The service cannot accept subsequent training requests, or requests to add new corpora or words, until the existing request completes.
Training will fail if no new training data has been added, if pre-processing of new corpora or words is incomplete, or if one or more words have errors that must be fixed.
Declaration
Swift
public func trainCustomization( withID customizationID: String, wordTypeToAdd: WordTypeToAdd? = nil, failure: ((Error) -> Void)? = nil, success: (() -> Void)? = nil)
Parameters
customizationID
The ID of the custom model to train.
wordTypeToAdd
The type of words from the custom model’s words resource on which to train the model:
all
trains the model on all new words.user
trains the model only on new words that were added or modified by the user - the model is not trained on new words extracted from corpora.failure
A function executed whenever an error occurs.
success
A function executed when a success occurs.
-
Resets a custom language model by removing all corpora and words from the model. Metadata such as the name and language of the model are preserved.
Declaration
Swift
public func resetCustomization( withID customizationID: String, failure: ((Error) -> Void)? = nil, success: (() -> Void)? = nil)
Parameters
customizationID
The ID of the custom model to reset.
failure
A function executed whenever an error occurs.
success
A function executed when a success occurs.
-
Upgrades a custom language model to the latest release level of the Speech to Text service.
Declaration
Swift
public func upgradeCustomization( withID customizationID: String, failure: ((Error) -> Void)? = nil, success: (() -> Void)? = nil)
Parameters
customizationID
The ID of the custom model to upgrade.
failure
A function executed whenever an error occurs.
success
A function executed when a success occurs.
-
Lists information about all corpora for a custom language model.
Declaration
Swift
public func getCorpora( customizationID: String, failure: ((Error) -> Void)? = nil, success: @escaping ([Corpus]) -> Void)
Parameters
customizationID
The ID of the custom language model whose corpora you want information about.
failure
A function executed whenever an error occurs.
success
A function executed with a list of corpora for this custom model.
-
Deletes a corpus from a custom language model. Note: removing a corpus doesn’t affect the custom model until you train the model with the
train
method.Declaration
Swift
public func deleteCorpus( withName name: String, customizationID: String, failure: ((Error) -> Void)? = nil, success: (() -> Void)? = nil)
Parameters
name
The name of the corpus to delete.
customizationID
The ID of the custom model the corpus belongs to.
failure
A function executed whenever an error occurs.
success
A function executed whenever a success occurs.
-
Lists information about a specific corpus for a custom language model.
Declaration
Swift
public func getCorpus( withName name: String, customizationID: String, failure: ((Error) -> Void)? = nil, success: @escaping (Corpus) -> Void)
Parameters
name
The name of the corpus you want details about.
customizationID
The ID of the custom language model that the corpus is for.
failure
A function executed whenever an error occurs.
success
A function executed with details of the corpus.
-
Add a corpus text file to a custom language model.
Declaration
Swift
public func addCorpus( withName name: String, fromFile textFile: URL, customizationID: String, allowOverwrite: Bool? = nil, failure: ((Error) -> Void)? = nil, success: (() -> Void)? = nil)
Parameters
textFile
A plain text file that contains the training data for the corpus. For more information about how to prepare a corpus file, visit this link: https://console.bluemix.net/docs/services/speech-to-text/custom-resource.html#corporaWords
name
The name of the corpus to be added. This cannot be
user
, which is a reserved word. If a corpus with the same name exists already, you must setallowOverwrite
to true or the request will fail.customizationID
The ID of the custom model to which this corpus should be added.
allowOverwrite
If a corpus with the same name exists, this value must be set to true or the request will fail. By default, this parameter is false. This parameter is ignored if there is no other corpus with the same name.
failure
A function executed whenever an error occurs.
success
A function executed when a success occurs.
-
List all custom words from a custom language model.
Declaration
Swift
public func getWords( customizationID: String, wordType: WordTypesToList? = nil, sortOrder: WordSort? = nil, sortDirection: WordSortDirection? = nil, failure: ((Error) -> Void)? = nil, success: @escaping ([Word]) -> Void)
Parameters
customizationID
The ID of the custom model.
wordType
The types of words to return. By default, all words are returned.
sortOrder
The order in which to return the list of words. By default, words are returned in sorted alphabetical order.
sortDirection
The order the list of words should be sorted. By default, words are sorted alphabetically in ascending order.
failure
A function executed whenever an error occurs.
success
A function executed with a list of words in the custom language model.
-
Add one or more words to the custom language model, or replace the definition of an existing word with the same name.
Declaration
Swift
public func addWords( customizationID: String, words: [NewWord], failure: ((Error) -> Void)? = nil, success: (() -> Void)? = nil)
Parameters
customizationID
The ID of the custom language model to add words to.
words
An array of
NewWords
objects that describes what words should be added.failure
A function executed whenever an error occurs.
success
A function executed whenever a success occurs.
-
Delete a custom word from the specified custom model. If the word also exists in the service’s base vocabulary, the service removes only the custom pronunciation for the word; the word remains in the base vocabulary.
Note: Removing a custom word does not affect the custom model until you train the model.
Declaration
Swift
public func deleteWord( withName name: String, customizationID: String, failure: ((Error) -> Void)? = nil, success: (() -> Void)? = nil)
Parameters
name
The name of the word you would like to delete.
customizationID
The ID of the custom model from which you would like to delete the word from.
failure
A function executed whenever an error occurs.
success
A function executed whenever a success occurs.
-
Get details of a word from a specific custom language model.
Declaration
Swift
public func getWord( withName name: String, customizationID: String, failure: ((Error) -> Void)? = nil, success: @escaping (Word) -> Void)
Parameters
name
The name of the word.
customizationID
The ID of the custom language model.
failure
A function executed whenever an error occurs.
success
A function executed with details of the word.
-
Add a single custom word to the custom language model, or modify an existing word.
Declaration
Parameters
customizationID
The ID of the custom language model to add the new word to.
name
The word that should be added.
word
An object describing information about the custom word.
failure
A function executed whenever an error occurs.
success
A function executed whenever a success occurs.