|
Perl Weekly
Issue #70 - 2012-11-26 - Announcing the Regex Maven for Android
latest | archive | by Gabor Szabo
|
|
Hi,
Great news! I have released my first mobile application. Well, this is still only a skeleton. There are only 4 pages, but it is very promising. :) By the time you read this, I might be able to release a new version, which is slightly better. OK I admit. If you install it in the next 24 hours, I have chance of winning a Nexus 7. See 'Regex Maven for Android' below.
|
|
|
Announcements
|
Announcing the Regex Maven for Android
This application (will) help you learn or improve your knowledge of Regular Expression. It has (or will have) a tutorial, a cheat-sheet and a quiz. Currently available for Android, but once it has reasonable content, I am planning to release it to the iPhone as well.
|
|
Articles
|
Cool things you can do with Perl 5.14
Mauke introduces 3 modules using pluggable keywords that are available from version 5.14 of Perl: Quote::Code - quoted strings with arbitrary code interpolation; Switch::Plain - a simple switch statement for Perl; Function::Parameters - subroutine definitions with parameter lists. This is nice. Just a few days ago I was searching CPAN for solutions to declare parameters for a subroutine in Perl. I have not seen this one.
|
|
Web
|
Scraping pages full of JavaScript
The main (or only?) drawback of the pure-perl web scrapping modules such as Web::Scraper, is their lack of JavaScript parsing capability. Viacheslav Tykhanovskyi (vti) uses WebKit and its Gtk3::WebKit binding to bridge the gap.
|
|
DevOps
|
Upcoming Presentations on Pinto and Stratopan
As Jeff Thalhammer writes, Pinto is a turnkey solution for managing custom repositories of Perl modules. Stratopan is a hosted service built upon Pinto. If you are interested in presentations, you can get them in Los Angeles and in Thousand Oaks. (Sometimes they have pizza!). There is also a link to the video recording of his presentation, in case you cannot attend those Perl Monger meetings.
|
|
How Perl is seen?
|
Repainting the Monastery
Do you use Perl Monks? What do you think about the look-and feel? Is this something you would be happy to use to show how nice and modern is Perl? Tudor Constantin thought otherwise and came up a new design based on Twitter Bootstrap. I am not sure it will make a difference, but I think it would be good to repaint the Monastery.
|
|
Databases
|
The next Galileo will allow database upgrades
Galileo is a CMS written by Joel Berger, but the main point of interest in this article is how he found out - without a lot of SQL knowledge - the way to handle changes in the schema. It is frightening. Especially on a live, public facing system. How can you make drastic changes to your database, without interrupting service? If you are already using DBIx::Class, then DBIx::Class::DeploymentHandler can help you.
|
|
Fun
|
Play Perl project
Vyacheslav Matyukhin has started to work on an open source project. In his description it is a gamified todo-list and a social network for Perl developers. I don't yet understand what is really the objective of the project, but if you'd like to get involved in developing an open source web application, this might be a good opportunity. The technology behind it certainly sounds interesting: Perl Dancer, MongoDB, Twitter Bootstrap, Backbone.js and Ubic.
|
|
Grants
|
|
|
Perl 6
|
|
|
Weekly collections
|
|
|
|
|
|
|
Past events
|
Austrian Perl Workshop 2012
Thomas Klausner (Domm) describes how did APW go for him. There were 25 people, some of them new to the Vienna Perl Mongers. It seems they had fun, which is not surprising to me, and they plan to do it again next year.
|
|
|
|
|
|
Events
I usually list the next 3-4 events here. The list of all the events can be found on the web site. If your Perl event is not listed there, please let me know.
|
|
|
|
|
|
|
|
|
You know, you could get the Perl Weekly right in your mailbox. Every Week. Free of charge!
|


South Korea Cell Broadcasting Service (CBS) API
Starts with querying the API for current alerts and uses the returned data to create a diverse, user-friendly viewing format.
Any projects currently being worked on
Just memes my dude
ChrasSC Industry prides itself on its approach to community. Hear testimonials from a select group of those who have used our services.
I hear this ChrasSC guy can do some heavy lifting
I'm a bearded man and have important things to say
My smile puts any potential customer at ease


More About Direct Kitchen
Direct kitchen is focusing on unique & specialised products and services to construction companies, Developers ,home builders, kitchens and joinery companies within Auckland and surrounding cities.
We provide prefessional kitchen cabinets design ,manufacture and installation.we use New Zealand material supplier,like Bestwood for the kitchen units.
We are also specialising in importing and manufacturing natural stone products and engineered stone.we are one of the preferred fabricator of all leading brands like Caesar Stone,Sile Stone,Trend Stone and Uni quartz.
No matter how large or small the project may be, our aim has been to meet the clients budget without compromising on quality and professionalism completing the job at the specified date.
We have been very successful in achieving this by the dedication of our crafts people and providing all the new technologies and the latest machinery for both naturaland engineered stones.
So whatever your kitchen needs may be, we will provide you with excellent service to supply and install your next kitchen.


Prepare to scan the file and extract the dates.
Compile all due dates at the click of a button.
Implements an easy to manuever interface.
No more flipping back and forth to type each due date.
Make sure the information looks correct. Make any changes necessary and hit confirm.
Confirm


Summary
Each of the following sections contains the results of a specific test.
Within each section there is a subsection for each processor the tests were run on.
Under each processor each run of each test is described with the following information:
- The language the test was written in
- The library used to execute the test (if any)
- The average execution time of a single test run in ms
- The standard devition of the execution time of a single test run in ms
- The maximum execution time of a single test run in ms
- The minimum execution time of a single test run in ms
- A link to a graph of the raw data
Results
Thread Startup
Time between immediately before the thread creation function is called and the first execution of that thread.
| A = python3 - thread |
| C = C - pthread |
| B = C++ - std::async |
| E = C++ - pthread |
| D = C++ - std::thread |
| F = C++ - boost::thread |
1st Gen Intel Core i7
Raspberry Pi B2
Message Send/Receive
Time between when one thread sends a message and a waiting thread receives it.
| A = C++ - boost::message_queue_large |
| B = C++ - boost::message_queue_small |
1st Gen Intel Core i7
| Language |
Library |
Average |
Std Dev |
Max |
Min |
Graph |
| C++ |
boost::message_queue_large |
1.882 |
0.397 |
40.525 |
1.745 |
Result Graph |
| C++ |
boost::message_queue_small |
0.057 |
0.010 |
0.122 |
0.027 |
Result Graph |
Raspberry Pi B2
| Language |
Library |
Average |
Std Dev |
Max |
Min |
Graph |
| C++ |
boost::message_queue_large |
14.218 |
0.615 |
43.510 |
13.981 |
Result Graph |
| C++ |
boost::message_queue_small |
0.149 |
0.029 |
1.778 |
0.098 |
Result Graph |
Semaphore Unlock
Time between when one thread posts a semaphore and a waiting thread is running.
| A = C++ - semt |
| C = C++ - boost_namedmutex_fast |
| B = C++ - boost_mutex_fast |
| E = C++ - pthread_mutex_fast |
| D = C - pthread_mutex_fast |
| G = C - pthread_mutex_recursive |
| F = C++ - boost_namedmutex_recursive |
| I = C++ - pthread_mutex_recursive |
| H = C - semt |
| J = C++ - boost_mutex_recursive |
1st Gen Intel Core i7
| Language |
Library |
Average |
Std Dev |
Max |
Min |
Graph |
| C++ |
semt |
0.042 |
0.010 |
0.111 |
0.017 |
Result Graph |
| C++ |
boost_mutex_fast |
0.039 |
0.013 |
0.315 |
0.017 |
Result Graph |
| C++ |
boost_namedmutex_fast |
0.044 |
0.011 |
0.293 |
0.017 |
Result Graph |
| C |
pthread_mutex_fast |
0.040 |
0.011 |
0.202 |
0.016 |
Result Graph |
| C++ |
pthread_mutex_fast |
0.042 |
0.010 |
0.119 |
0.016 |
Result Graph |
| C++ |
boost_namedmutex_recursive |
0.044 |
0.010 |
0.113 |
0.018 |
Result Graph |
| C |
pthread_mutex_recursive |
0.041 |
0.009 |
0.096 |
0.016 |
Result Graph |
| C |
semt |
0.042 |
0.010 |
0.136 |
0.016 |
Result Graph |
| C++ |
pthread_mutex_recursive |
0.044 |
0.009 |
0.182 |
0.018 |
Result Graph |
| C++ |
boost_mutex_recursive |
0.038 |
0.012 |
0.157 |
0.017 |
Result Graph |
Raspberry Pi B2
| Language |
Library |
Average |
Std Dev |
Max |
Min |
Graph |
| C++ |
semt |
0.064 |
0.014 |
0.517 |
0.054 |
Result Graph |
| C++ |
boost_mutex_fast |
0.064 |
0.014 |
0.729 |
0.055 |
Result Graph |
| C++ |
boost_namedmutex_fast |
0.068 |
0.014 |
0.638 |
0.058 |
Result Graph |
| C |
pthread_mutex_fast |
0.058 |
0.011 |
0.501 |
0.050 |
Result Graph |
| C++ |
pthread_mutex_fast |
0.061 |
0.013 |
0.549 |
0.052 |
Result Graph |
| C++ |
boost_namedmutex_recursive |
0.068 |
0.012 |
0.326 |
0.058 |
Result Graph |
| C |
pthread_mutex_recursive |
0.056 |
0.010 |
0.383 |
0.047 |
Result Graph |
| C |
semt |
0.058 |
0.016 |
0.709 |
0.049 |
Result Graph |
| C++ |
pthread_mutex_recursive |
0.063 |
0.013 |
0.529 |
0.054 |
Result Graph |
| C++ |
boost_mutex_recursive |
0.065 |
0.012 |
0.525 |
0.055 |
Result Graph |
Thread Shutdown
Time between immediately before a thread terminates and when the creator of the thread receives notification that the thread shut down.
| A = python3 - thread |
| C = C - pthread |
| B = C++ - std::async |
| E = C++ - pthread |
| D = C++ - std::thread |
| F = C++ - boost::thread |
1st Gen Intel Core i7
Raspberry Pi B2


UK Store Details
Filter list by:
-
101 Collectors Records - Visit website
101 West Street, Farnham, Surrey GU9 7EN
- Mailorder Available
-
Action Records - Visit website
46 Church Street, Preston, Lancs, PR1 3DH
- Mailorder Available
-
Adrians - Visit website
Adrians Alley, 36/38 High Street, Wickford, Essex SS12 9AZ
- Mailorder Available
-
Assai - Visit website
33 Union Street Dundee DD1 4BS
- Mailorder Available
-
Assai - Visit website
1 Grindlay St, Edinburgh EH3 9AT
- Mailorder Available
-
Avalanche Records - Visit website
21 St Marys Street Edinburgh EH1 1TA
- Mailorder Available
-
Badlands - Visit website
11 St Georges Place, Cheltenham, Glouscestershire, GL50 3LA
- Mailorder Available
-
Banquet - Visit website
52 Eden Street, Kingston, Surrey, KT1 1EE
- Mailorder Available
-
Bear Tree Records - Visit website
Unit 13-16, The Forum, 127 Devonshire St, Sheffield, S3 7SB
- Mailorder Available
-
Beatdown Records - Visit website
Unit 1, Clarendon House, Bewick Street, Newcastle Upon Tyne NE1 5EE
- Mailorder Available
-
Beyond Vinyl - Visit website
88 Westgate Road, Newcastle Upon Tyne NE1 4AF
- Mailorder Available
-
Black Circle Records - Visit website
2 Roebuck Mews, 2a Hockliffe St, Leighton Buzzard LU7 1HJ
- Mailorder Available
-
Bleep - Visit website
Spectrum House, 32–34 Gordon House Road, London, NW5 1LP
- Mailorder Available
-
Boomkat - Visit website
Second Floor Swan Building 20 Swan Street Manchester M4 5JW
- Mailorder Available
-
Casbah Records - Visit website
320–322 Creek Road, Greenwich SE10 9SW
- Mailorder Available
-
Chalkys - Visit website
36-38 High Street, Wickford, Essex SS12 9AZ
- Mailorder Available
-
Chameleon - Visit website
162 Union Grove, Aberdeen, AB10 6SR
- Mailorder Available
-
Container Records - Visit website
Unit S01, POP Brixton (At The Back), 49 Brixton Station Road, SW9 8PQ
- Mailorder Available
-
Cool Discs - Visit website
6 Lesley House, Foyle Street, Derry City. BT48 6AP
- Mailorder Available
-
Crash Records - Visit website
35 The Headrow, Leeds, W.Yorks, LS1 6PU
- Mailorder Available
-
Crazy Beat Records - Visit website
87 Corbets Tey Road, Upminster, Essex, RM14 2AH,
- Mailorder Available
-
Defend Vinyl - Visit website
395 Smithdown Rd, Liverpool L15 3JJ
- Mailorder Available
-
Derricks Music - Visit website
221 Oxford Street, Swansea SA1 3BQ
- Mailorder Available
-
Disc World - Visit website
Arch 3, Deptford Market Yard, London, SE8 4BX
- Mailorder Available
-
Diverse Music - Visit website
10 Charles Street, Newport, South Wales. NP20 1JU
- Mailorder Available
-
Drift Records - Visit website
103B High Street, Totnes, Devon, TQ9 5SN
- Mailorder Available
- Pick Up Available
-
Eel Pie Records - Visit website
44-45 Church St, Twickenham TW1 3NR
- Mailorder Available
- Local Delivery Available
-
Elsewhere - Visit website
21-22 The Centre, Margate, CT9 1JG
- Mailorder Available
-
Endless Music - Visit website
377-379 Bury Old Road, Prestwich, Manchester M25 1QA
- Mailorder Available
-
Fish Records - Visit website
Unit 2, Crown Courtyard, Crown Street, Stone, Staffordshire, ST15 8UY
- Mailorder Available
-
Five Rise Records - Visit website
30c Park Road, Bingley, West Yorkshire BD16 4JQ
- Mailorder Available
-
Fives Records - Visit website
103 The Broadway, Leigh On Sea, Essex, SS9 1PG
- Mailorder Available
-
Flashback - Visit website
144 Crouch Hill, Crouch End, London, N8 9DX
- Mailorder Available
-
Forest Vinyl - Visit website
7 Hollyhill Park Hollyhill Road Cinderford, Gloucestershire, GL14 2YB
- Mailorder Available
-
Friendly Records - Visit website
59 North Street, Bedminster, Bristol BS3 1ES
- Mailorder Available
-
Gatefield Sounds - Visit website
70 High St, Whitstable CT5 1BB
- Mailorder Available
-
Global Grooves - Visit website
Global House, Bucknall New Road, Hanley, Stoke-on-Trent, Staffordshire, ST1 2BA
- Mailorder Available
-
Grind & Groove Records - Visit website
59b Cavendish Street, Keighley, West Yorkshire, BD21 3RL
- Mailorder Available
-
Honest Jon's - Visit website
278 Portobello Road London W10 5TE
- Mailorder Available
-
Hot Salvation Records - Visit website
32 Rendezvous St, Folkestone CT20 1EZ
- Mailorder Available
-
Intense Records - Visit website
33/34 Viaduct Road, Chelmsford, Essex CM1 1TS
- Mailorder Available
-
Jam - Visit website
Jam 32 High St, Falmouth TR11 2AD
- Mailorder Available
-
JG Windows - Visit website
1-7 Central Arcade, Newcastle Upon Tyne, NE1 5BP, UK
- Mailorder Available
-
Jumbo Records - Visit website
Units 1-3, Merrion Centre, leeds, LS2 8NG
- Mailorder Available
-
Juno Records - Visit website
PO Box 45557, London NW1 0UT
- Mailorder Available
-
KCC Vinyl - Visit website
292 High St, Kirkcaldy KY1 1LB
- Mailorder Available
-
Keymailrecords - Visit website
151A London Road, Camberley, Surrey GU15 3JY
- Mailorder Available
-
Let It Roll Records - Visit website
121 Kentish Town Rd, London NW1 8PB
- Mailorder Available
-
Lion Coffee & Records - Visit website
118 Lower Clapton Road, London, E5 0QR
- Mailorder Available
-
Lion Vibes - Visit website
98 Granville Arcade, Brixton Village SW9 8PS
- Mailorder Available
-
Longwell Records - Visit website
36 Temple St, Keynsham BS31 1EH
- Mailorder Available
-
Lost In Vinyl - Visit website
14 Magdalene Street, Cambridge, CB3 0AF
- Mailorder Available
-
Love Music - Visit website
34 Dundas Street, Glasgow, Scotland, G1 2AQ
- Mailorder Available
-
Matters Of Vinyl Importance - Visit website
163 Hoxton St, London N1 6PJ
- Mailorder Available
-
Monorail Music - Visit website
97 King Street 12 Kings Court, King Street, Glasgow, G1 5RB
- Mailorder Available
-
Music Mania - Visit website
3-6, Piccadilly Arcade, Hanley, Stoke-on-Trent ST1 1D
- Mailorder Available
-
Music Nostalgia - Visit website
Units 56 - 58 Pannier Market Back Quay Truro Cornwall TR1 2LL
- Mailorder Available
-
Norman Records - Visit website
Unit 20, Croydon House, Croydon Street, Leeds, LS11 9RT
- Mailorder Available
-
Opus 13 - Visit website
14 St Michael's Hill, Bristol BS2 8DT
- Mailorder Available
-
Pebble Records - Visit website
The Basement 14 Gildredge Rd, Eastbourne BN21 4RL
- Mailorder Available
-
Piccadilly Records - Visit website
53 Oldham Street, Manchester, M1 1JR
- Mailorder Available
-
Pie & Vinyl - Visit website
61 Castle Rd, Portsmouth, Southsea, P05 3AY
- Mailorder Available
-
Presto Music - Visit website
7 Park Street, Leamington Spa, CV32 4QN
- Mailorder Available
-
Rarekind Records - Visit website
104 Trafalgar Street, Brighton, East Sussex BN1 4ER
- Mailorder Available
-
Raves From The Grave - Visit website
5 Weymouth Street Warminster BA12 9NP
- Mailorder Available
-
Raves From The Grave - Visit website
2- 3 King Street Frome BA11 1BH
- Mailorder Available
-
Record Collector - Visit website
233 Fulwood Rd, Sheffield S10 3BA
- Mailorder Available
-
Record Corner - Visit website
Pound Lane, Godalming, Surrey GU7 1BX
- Mailorder Available
-
Red House Records - Visit website
21-23 Farringdon Road, Swindon SW1 5AR
- Mailorder Available
-
Reflex - Visit website
23 Nun Street, Newcastle-Upon-Tyne, Tyne & Wear, NE1 5AG
- Mailorder Available
-
Reflex Records - Visit website
94 High Street, Gosport, Hampshire PO12 1DS
- Mailorder Available
-
Released Records - Visit website
15/16 The Corn Exchange, Leeds, LS1 7BR
- Mailorder Available
-
Relevant Records - Visit website
260 Mill Road, Cambridge, CB1 3NF
- Mailorder Available
-
Resident - Visit website
28 Kensington Gardens, North Laine Brighton, BN1 4AL
- Mailorder Available
-
Rough Trade Bristol - Visit website
3 New Bridewell, Nelson Street, Bristol BS1 2QD
- Mailorder Available
-
Rough Trade East - Visit website
Old Truman Brewery 91 Brick Lane London E1 6QL GB
- Mailorder Available
-
Rough Trade Nottingham - Visit website
5 Broad St, Nottingham NG1 3AJ
- Mailorder Available
-
Rough Trade West - Visit website
130 Talbot Road, London, W11 1JA
- Mailorder Available
-
Seismic Records - Visit website
The Neighbourhood 1st Floor, 44-46 Warwick Street, Leamington Spa CV32 5JS
- Mailorder Available
-
Sister Ray - Visit website
75 Berwick Street, Soho, London W1F 8RP
- Mailorder Available
-
Sleeve Notes Records - Visit website
16 Richmond Hill ,Richmond Upon Thames TW10 6QX
- Mailorder Available
-
Smugglers Records - Visit website
9 King Street, Deal CT14 6HX
- Mailorder Available
-
Soul Brother Records - Visit website
1 Keswick Rd, Putney, London SW15 2HL.
- Mailorder Available
-
Sounds Of The Universe - Visit website
7 Broadwick Street, London, W1F 0DA
- Mailorder Available
-
South Records - Visit website
22a Queens Road, Southend-on-Sea, Essex SS1 1LU
- Mailorder Available
- Pick Up Available
- Local Delivery Available
-
Spinning Discs - Visit website
55 Chesterfield Road ,Meersbrook, Sheffield S8 0RL
- Mailorder Available
-
Spiral Classics - Visit website
52 Herbert St, Loughborough LE11 1NX
- Mailorder Available
-
Stranger Than Paradise - Visit website
Mare Street Market, 117 Mare Street, Hackney, London, E8 4RU
- Mailorder Available
-
Tallbird Records - Visit website
10 Soresby Street, Chesterfield, Derbyshire, S40 1JN
- Mailorder Available
-
The Left Legged Pineapple - Visit website
PO Box 8676, Loughborough, Leicestershire LE11 9DY
- Mailorder Available
-
The LP Café - Visit website
173 The Parade, Watford WD17 1NJ
- Mailorder Available
-
The Rock Box - Visit website
34 Obelisk Way, The Square Shopping Centre, Camberley, Surrey GU15 3SG
- Mailorder Available
-
The Vinyl Exchange - Visit website
18 Oldham Street Manchester M1 1JN
- Mailorder Available
-
The Vinyl Whistle - Visit website
39 Otley Road, Headingley, Leeds LS6 3AB
- Mailorder Available
-
Townsend Music - Visit website
Blackburn
- Mailorder Available
-
Transmission - Visit website
105 Northdown Road, Margate, Kent, CT9 2QY
- Mailorder Available
-
Underground Solu'shn - Visit website
9 Cockburn Street, Edinburgh EH1 1BP
- Mailorder Available
-
Union Music Store - Visit website
1 Lansdown Pl, Lewes BN7 2JT, UK
- Mailorder Available
-
Up North Records - Visit website
19 St Werburgh Street, Chester CH2 1DY
- Mailorder Available
-
Venus Vinyl - Visit website
Quanström Studio, 136 Magdalen St, Norwich NR3 1JD
- Mailorder Available
-
Vinilo - Visit website
55 Queensway, Southampton SO14 3BL
- Mailorder Available
-
Vinyl Café - Visit website
44 Abbey Street, Carlisle, Cumbria CA3 8TX
- Mailorder Available
-
Vinyl Fiction - Visit website
103 Manchester Rd, Chorlton-cum-Hardy M21 9GA
- Mailorder Available
-
Vinyl Guru - Visit website
69 Westgate Road, Newcastle upon Tyne, NE1 1SG
- Mailorder Available
-
Vinyl Hunter - Visit website
Allens Farm, Tye Road, Elmstead, Colchester Essex CO7 7BN
- Mailorder Available
-
Vinyl Hunter - Visit website
56 St Johns Street, Bury St.Edmunds, Suffolk, IP33 1SN
- Mailorder Available
-
Vinyl Revival Store - Visit website
3 Church Street, Buckden, St Neots PE19 5TE
- Mailorder Available
-
Vinyl Tap - Visit website
42 John William Street (Opposite the Railway Station), Huddersfield, West Yorkshire HD1 1ER
- Mailorder Available
-
Vinyl Tap - Visit website
31 Chapel Hill, Linthwaite, Huddersfield, West Yorkshire HD7 5NJ
- Mailorder Available
-
Vinyl Underground - Visit website
2nd Floor Watts, 80 Abingdon Street NN1 2BB
- Mailorder Available
-
Vinylstore Jr - Visit website
20 Castle Street, Canterbury CT1 2QJ
- Mailorder Available
-
VOD Music - Visit website
28 New Street, Mold CH7 1NZ
- Mailorder Available
-
Wax and Beans Ltd - Visit website
50 Haymarket Street, Bury BL9 0AY
- Mailorder Available
-
Wax At Moorgate - Visit website
643 Chesterfield Road, Sheffield S8 0RY
- Mailorder Available
-
What Records - Visit website
Shelford House Farm Barn, Lutterworth Road, Burton Hastings, Warwickshire CV11 6RD
- Mailorder Available
-
Winyl - Visit website
16 South Street, Manningtree, CO11 1BB
- Mailorder Available
-
World of Echo - Visit website
128 Columbia Road, London E2 7RG
- Mailorder Available
-
X Records - Visit website
44 Bridge Street, Bolton, BL1 2EG
- Mailorder Available


I have a passion for web development and software engineering. I like figuring out the never-ending puzzles that computer science creates.
I graduated with a degree in Computer Science with a 3.45 GPA. While at UPS I played on the women's soccer team and was a member of Phi Eta Sigma honors society.
While attending UPS, I worked on campus as an Archives Assitant in the library. I wrote blog posts every month and helped organize books and documents. I also did data entry for some of the collections.
Over the summer I worked at a camp and taught kids ages 6-15 how to code using Scratch. I also taught them coding concepts such as conditionals and variables through offline games and activities.
For my senior capstone project I, along with two others, built a device using an Arduino Yun and other software that will text the user when their laundry is done. We worked along with the UPS makerspace staff.
I am working at VICI as a Web developer where I redsign and create websites for multiple VICI companies. I work with the Shopify platform and use HTML and CSS to update product information and website pages.
I moved back to my hometown (Sandpoint, ID) and got a job at Kochava. I work on the marketing team writing blog posts, designing webpages, and creating a lot of other marketing material.
Sandpoint, ID 83864 ● +1<PHONE_NUMBER> ● sierramscott33@gmail.com


Create Department
Welcome to Create Department. Here you can see and edit all the departments of our company.
All Departments
Number of departments per page
| Name | Phone | Creation Date | Active | ||
|---|---|---|---|---|---|
| {{dep.dep_name|default:"-"}} | {{dep.dep_mail_1|truncatechars:max_char_desc|default:"-"}} | {{dep.dep_phone|default:"-"}} | {{dep.dep_creation_date|date:"d/M/Y"}} | {{dep.dep_active|default:"-"}} | |
|
Page
|
of
|
||||
Number of departments listed:
{{number_of_dep}} |
Actions
Edit Selected Departments With
Active?
Create New Department
Filter Departments With
Active?


In Seattle
- location: Lorem ipsum, dolor sit amet consect.
- working hours: 6am - 7pm
- Contact Info: +1 2546468
In Tokyo
- location: Lorem ipsum, dolor sit amet consect.
- working hours: 6am - 7pm
- Contact Info: +20 2546468
In Paris
- location: Lorem ipsum, dolor sit amet consect.
- working hours: 6am - 7pm
- Contact Info: +63 2546468
In Dubai
- location: Lorem ipsum, dolor sit amet consect.
- working hours: 6am - 7pm
- Contact Info: +960 2546468
In Lima
- location: Lorem ipsum, dolor sit amet consect.
- working hours: 6am - 7pm
- Contact Info: +22 2546468


This page lets you safely generate a mnemonic seed phrase offline with your mouse movement as entropy.
This page is OPEN SOURCE and should be ran offline by saving this site and launching the index.html file inside of the BIP39 directory.


When Does This Is Us Return? Hopefully We'll Get Some Answers to That Finale in 2020
by Kelsie GibsonThe This Is Us season four midseason finale ended on quite a big cliffhanger (a few, actually), and we're already anxious about what's to come. Why are Randall and Kevin not on speaking terms? Who is Kevin's expectant fiancée? And what is going on with Rebecca? Well, unfortunately, we'll have to wait until January 2020 to get answers.
Shortly after the midseason finale, it was revealed that the series would be returning on Tuesday, Jan. 14, 2020. Yes, that means we'll have to endure the entire Winter break without our beloved Pearson family on our screens. Thankfully, we'll be keeping busy with all of our theorizing.


Rachel Allen: 'The smell of sweet, buttery cakes brings me home'
I love baking at this time of the year. Sweet, buttery smells coming out of the oven and wafting through the house create such a feeling of homely cosiness. Unless I'm baking for a specific celebration, I want to know that my cake will last for a few days.
These are three of my favourite treats to enjoy with a cup of tea. Simple, uncomplicated, and a bit old-worldly, these stand the test of time. Two of them are baked in loaf tins for easy slicing - and buttering, too, if you wish. The lemon slab cake, far right, is cooked in a Swiss-roll tin and covered with a layer of glace icing - as well as being delicious, it prevents the cake from drying out, and keeps it fresh for a few days, if you can keep it for that long!
The banana, ginger and golden syrup loaf, right, is from my book, All Things Sweet. It's gently comforting, and I love to have a slice with a cup of something hot. The ground ginger brings a welcome warm hit to the banana and sweet golden syrup, giving you a really satisfying sweet treat.
If it's a real ginger kick that you're looking for, then try out the dark, sticky gingerbread, also far right. Warmly spiced with ginger, cinnamon and nutmeg, this treacly gingerbread has a gorgeously sticky, gingery glaze on top. Now that's really the icing on the cake.
Please log in or register with Independent.ie for free access to this article.
New to Independent.ie? Create an account
Rachel recommends
When baking cakes and loaves, it's really important not to open the oven for the first 75pc of cooking time. If you do, you'll notice a dip in the centre when they come out of the oven. This is a particularly important thing to remember with the dark, sticky gingerbread and the banana, ginger and golden syrup bread.
Rachel's top tip
If you're using a fan-assisted oven, reduce the temperature by 10pc, and remember that your cakes might take a few minutes less to bake.
Dark sticky gingerbread
Makes 1 loaf
You will need:
60g butter
75g treacle
50g golden syrup
140g plain flour
1 teaspoon bread soda
Half teaspoon baking powder
2 teaspoons ground ginger
1 teaspoon ground cinnamon
1 teaspoon freshly grated nutmeg
100g caster sugar
Pinch of salt
1 egg
120ml milk For the ginger syrup, you will need:
75g caster sugar
75ml water
2 teaspoons finely grated root ginger, or finely chopped crystallised ginger
1 You'll also need a 2lb loaf tin. Preheat the oven to 170°C, 340°F, Gas 3. Line the base and sides of the loaf tin with parchment paper.
2 Melt the butter, the treacle and the golden syrup in a small saucepan on a low heat, then set aside.
3 Sift the plain flour, the bread soda and the baking powder into a mixing bowl, then stir in the ground ginger, the ground cinnamon and the freshly grated nutmeg. Mix in the caster sugar and the pinch of salt.
4 In another bowl, whisk the egg, then add the milk, and the melted butter, treacle and golden syrup mixture you set aside earlier. Pour it into the bowl of dry ingredients and mix until smooth. It will have a wet, sloppy consistency.
5 Pour the cake mix into the prepared loaf tin and bake it in the oven for 50-55 minutes, or until it is risen and firm to the touch, and a skewer inserted into the centre comes out clean. (Wait for at least 45 minutes before opening the oven to check whether the gingerbread has cooked, otherwise it can collapse in the centre.)
6 While the gingerbread is cooking, make the ginger syrup. Place the caster sugar, the water and the grated fresh ginger or the chopped crystallised ginger, whichever you're using, in a small saucepan over a medium heat, and boil, uncovered, for 5 minutes until the mixture is slightly thickened and syrupy.
7 Once the gingerbread is cooked, take it out of the oven and, leaving it in the tin, pierce it all over the top with a fine skewer, pour over the warm syrup, and leave the loaf to cool in the tin.
8 When it's cooled, take it out of the tin and cut it into slices to serve.
Lemon slab cake
Makes about 24 slices
You will need:
225g butter
300g sugar
2 eggs
250g creme fraiche
Finely grated zest and juice of 1 lemon
225g flour
2 teaspoons baking powder
For the icing, you will need:
225g icing sugar, sifted
Juice of ½ lemon
1 You'll also need a 20cm x 30cm Swiss-roll tin. Preheat the oven to 180°C, 350°F, Gas 4.
2 Line the base and sides of the tin with parchment paper.
3 Melt the butter in a pot on a low heat, then pour it into a large mixing bowl. Add in the sugar and whisk to mix, then mix in the eggs, the creme fraiche, the finely grated lemon zest and the lemon juice.
4 In a separate mixing bowl, combine the flour and the baking powder, then sift it into the large mixing bowl, and lightly but thoroughly fold into the butter, sugar, egg, creme fraiche and lemon mix. Now tip the mixture into the prepared tin, spreading it out to level the top.
5 Place the tin in the preheated oven and bake it for 25-30 minutes, or until a skewer inserted into the centre comes out clean. Allow the cake to cool completely before icing it.
6 To make the icing, put the sifted icing sugar in a bowl and add the lemon juice gradually - you may not need it all. If you've added all the lemon juice, and the icing is still too stiff, then add a tiny bit of water to bring it to a spreadable consistency. Spread the icing over the top of the cooked and cooled cake. Set the cake aside, uncovered, for at least 20 minutes in order for the icing to dry. Cut into slices to serve.
Banana, ginger and golden syrup loaf
Serves 8
You will need:
110g butter
50g soft brown sugar
125g golden syrup
2 eggs
125g plain flour
2 teaspoons baking powder
1 tablespoon ground ginger
2 medium bananas, mashed
1 Preheat the oven to 180°C, 350°F, Gas 4. Line the base and sides of a loaf tin with parchment paper.
2 In a bowl, cream the butter until it is soft, then beat in the brown sugar and the golden syrup, continuing to beat until the mixture is lovely and light.
3 Now, one at a time, beat in the eggs. The mixture will look sloppy, but don't worry.
4 In a separate bowl, mix the flour, the baking powder and the ground ginger, and sift it into the butter, sugar, golden syrup and egg mixture. Lightly but thoroughly fold the mixtures together.
5 Next, mix in the mashed bananas, to form a soft, wet dough. Pour the dough into the prepared loaf tin, and place it in the preheated oven to bake for about 45 minutes until the loaf is risen, golden brown, and a skewer inserted into the centre comes out clean.


Cristiano Ronaldo is one of the best soccer players to ever play the game.
He
was born on Feburary 5,1985 in Funchal, Madeira Portugal. He played soccer at a very
young age, in 2003 he went to Manchester United he played there for 6 years. After that
he went to Real Madrid and is still playing there. He has recently taken portugal
all the way in a recent cup and won.


Free Messaging
Whenever, Wherever
Send free one-on-one and group texts to your friends
anytime, anywhere!
LINE is available for a variety of smartphone devices
(iPhone, Android, Windows Phone, BlackBerry, and Nokia)
and even your PC.
Free Voice &
Video Calls
Call your friends and family as often as you want,
for as long as you want!
Free international voice and video calls make it easy
to stay connected with your loved ones.
Currently available for iPhone, Android, Windows Phone,
BlackBerry (voice only), and PC (Windows and Mac).
Exciting Stickers
to Jazz Up
Your Chats
Share exactly how you’re feeling by choosing from
over 10,000 stickers and emoticons!
Visit the Sticker Shop to discover original stickers
of your favorite characters and celebrities.
From Photo and Video Sharing to Voice Messages
LINE lets you share photos, videos, voice messages,
contacts, and location information in the moment.
The Latest News and Special Coupons from Popular Artists and Brands
Follow the official accounts of your favorite artists,
celebrities, brands, and TV shows for exclusive news,
promotions, and more.
-
Timeline
Exchange stories with your close
friends by sharing texts, photos,
videos, and stickers on your Timeline. -
Keep
Save your favorite messages,
photos, and videos in Keep.
Save time finding files and easily share
your stuff with friends. -
Add Friends
Quickly add friends using
the "Shake It!" function,
a QR code, or a LINE ID.


Saxon has been under development for over five years. Almost all the code was written by one person, Michael Kay, which has resulted in a high level of design integrity.
Saxon was originally written to support an internal project in ICL, and ICL continued to sponsor development of Saxon until Michael Kay the company in January 2001. ICL chose not to market it as a commercial product, but to make the code available to the public under the Mozilla public license. From 2001 through 2003 Michael Kay worked for Software AG, who continued to sponsor the development of Saxon as an open source product.
In March 2004 Michael Kay founded Saxonica Limited to provide ongoing development and support of Saxon as a commercial venture. The intent of the new company is to continue to produce the basic (non-schema-aware) version of Saxon as an open source product, while at the same time delivering professional services and additional modules (including a schema-aware processor) as commercial offerings. The commercial product incorporates the code of the open-source product in its entirety, with the addition of schema-processing technology, and is produced in accordance with the provisions defined by the Mozilla Public License.
The name Saxon was chosen because originally it was a layer on top of SAX. Also, it originally used the Ælfred parser (among others); Ælfred of course was a Saxon king...


It looks like you're using Safari! Unfortunately because of a
WebKit bug,
transcription is significantly slower on Safari than other browsers.
Allegretta
Powered with the Magenta Onset and Frames neural network, Allegretta can convert any instrumental or vocal solo into a MIDI file for easy DAW manipulation and production.
Loading model...
or
Oh no, recording audio is not available on your device 😰. Try uploading a file instead!
Because of some WebAudio API issues, we can't get this model to work on your iOS device. We've tested it
on Android and desktop Chrome/Safari/FF, and it works there, so maybe grab a different device? We're really sorry. 😰


Hello and Welcome to Dance Layers!
Inspired by Julie Brown's excellent solo class at The Spoonful 2016. The idea here is to explore combinations of movement that you might otherwise not do.
Play some blues, get used to each 'layer' and then add another.
They're randomly generated from a predefined list, so some of the combinations may be impossible. Just hit refresh to get a new one. Enjoy!
Start with your {{first[0]}}: {{first[1]}}
Add {{second[0]}}: {{second[1]}}
Then add {{third[0]}}: {{third[1]}}
Source code available on github and contributions welcome.


H
appy
H
earts
Home
About
Features
Contact
Add Record.
Add File
Manual Record
Enter the patient detail here!
Select Gender
Male
Female
Other
Save
Back


IPL 2020: From Rahane to Steyn and Shakib, players released by teams so far
Sunrisers Hyderabad has released Deepak Hooda, Martin Guptill, Ricky Bhui, Shakib Al Hasan, Yusuf Pathan.
by Press Trust of IndiaFollowing is the list of players released by Indian Premier League teams ahead of next month's auction for 2020 season:
Chennai Super Kings: Chaitanya Bishnoi, David Willey, Dhruv Shorey, Mohit Sharma, Sam Billings, Scott Kuggeleijn.
Delhi Capitals: Ankush Bains, Bandaru Ayyappa, Chris Morris, Colin Ingram, Colin Munro, Hanuma Vihari, Jalaj Saxena, Manjot Kalra, Nathu Singh.
Kings XI Punjab: Agnivesh Ayachi, Andrew Tye, David Miller, Moises Henriques, Prabhsimran Singh, Sam Curran, Varun Chakaravarthy.
Kolkata Knight Riders: Anrich Nortje, Carlos Brathwaite, Chris Lynn, Joe Denly, KC Cariappa, Matt Kelly, Nikhil Naik, Piyush Chawla, Prithvi Raj Yarra, Robin Uthappa, Shrikant Mundhe.
Mumbai Indians: Adam Milne, Alzarri Joseph, Barinder Sran, Ben Cutting, Beuran Hendricks, Evin Lewis, Jason Behrendorff, Pankaj Jaswal, Rasikh Dar, Yuvraj Singh.
Rajasthan Royals: Aryaman Birla, Ashton Turner, Ish Sodhi, Jaydev Unadkat, Liam Livingstone, Oshane Thomas, Prashant Chopra, Rahul Tripathi, Shubham Ranjane, Stuart Binny, Sudhesan Midhun.
Royal Challengers Bangalore: Akshdeep Nath, Colin de Grandhomme, Dale Steyn, Heinrich Klassen, Himmat Singh, Kulwant Khejroliya, Marcus Stoinis, Milind Kumar, Nathan Coulter-Nile, Prayas Ray Barman, Shimron Hetmyer, Tim Southee.
Sunrisers Hyderabad: Deepak Hooda, Martin Guptill, Ricky Bhui, Shakib Al Hasan, Yusuf Pathan.


setup-exercise
Welcome to this setup assignment as part of your training on IyaSchool. In this excerise, you are required to complete setup of a brand new fictitious school on IyaSchool platform; you need to populate the site with all relevant details required. Be sure to review the setup guidelines first before attempting this exercise. You may refer to the guidelines as you complete the excerise. The estimated during is about 3 hrs.
You can obtain details of the blank site to complete for your new fictious school from your assessor. The blank site is identitical to a new site created for a new client. Best of luck!
Setup Up Entries
1. General School Info
1.1. Enter general school details. Choose your own school name. 1.2. Insert own logo.
2. Programs / Departments / Subjects / Levels
2.1. Edit default programs - delete one of existing programs, and enter two new programs.
2.2. Edit default departments - delete one of existing departments, and enter two new departments.
2.3. Review default levels and amend as required to remain with those your particular school needs. If your school is a primary school, levels 8 and above should be removed. You need to have a least 5 levels for this excerise.
2.4. Edit default subjects - delete two of default ones and enter four new ones.
3. Streams / Classes
3.1. Create between 5 to 10 streams.
3.2. Create at least 10 classes. (Ensure you set stream for each class).
3.3. Add at least 4 courses to each class.
4. Job Titles & Staff Details
4.1. Leaving default job titles as they are, add 2 additional job titles.
4.2. Create 5 to 10 Staff, at least 3 of which shall have job title of teacher.
4.3. Assign 4 courses to each teacher.
5. Academic Years / School Terms / Holidays & Other Calendar Items
5.1. Add 1 new academic year.
5.2. Add 1 new term. Delete all terms more than one year prior.
5.3. Add 1 new fictcious holiday.
5.4. Add 4 notices - 1 for staff, 2 for staff and guardians, and 1 for guardians and students.
5.5. Add Add 3 events.
6. Students / Guardians
6.1. Create at least 10 students, minimum 2 for each class.
6.2. Create at least 5 guardians.
6.3. Attached guardians to students. All students to have at least 1 guardian.
6.4. Create a csv file with 8 students. Upload the csv file to create students for new class.
7. System Users
7.1. Attach profile to ‘school_admin’.
7.2. Create the following users and attach them to relevant profiles: head teacher 1, deputy head 1, teachers 3, guardians 3, students 5
7.3. Log out as school_admin and log in and out in turn as head teacher, deputy head, teacher, guardian, and student. In each case make a note of side bar menu items that are accessible.
8. Terminology (Optional)
8.1. Review terminology used, and amend to suit your school’s jargon.
Routine Entries
9. Class Timetables (typically every term)
9.1. Create class timetable for current term for 2 of the classes.
10. Attendance (typically daily)
10.1. Enter class attendance for the last one week including today, for 2 of the classes.
11. Exams / Performance Mgt (monthly / every term)
11.1. Set exams for each subject for 2 of the classes.
11.2. Set eam schedule for 2 of the classes. 4 exams to be scheduled for each class.
11.3. Mark exams for all the above set exams.
11.4. View exam reports and print. (email prints to<EMAIL_ADDRESS>- use your ordinary email.)
12. Email/SMS Messages (any time)
12.1. Send an email message to all staff using platform Send Message functionality. (if feature is available)
12.2. Send an email message to all guardians using platform Send Message functionality. (if feature is available)
12.3. Send an sms message to all guardians using platform Send Message functionality. (if feature is available)
13. Promote class
13.1. Assume it’s the beginning of new academic year. Promote two classes to next grade.
Congrulations! contact your assessor for assessment.


HTML - ELEMENTS
An element is a part of a webpage. In XML and HTML, an element may contain a data item or a chunk of text or an image, or perhaps nothing. A typical element includes an opening tag with some attributes, enclosed text content, and a closing tag.
| Start tag | Element content | End tag |
|---|---|---|
|
 | My First Heading |
 |
|
 | My first paragraph. |
 |
|  | emphasized |  |
Note : In HTML, a self-closing element is written simply as
. In XHTML, a self-closing element requires a space and a trailing slash, such as
.
Nesting HTML Elements
It is often necessary to code certain tags (and their text) within the definition of other tags (between the start and end tags).
Element inside another element is bascially known as nesting of elements.
All HTML documents contain four HTML elements (  ,  , <title> , )
Note : Never Skip the End Tag. Some HTML elements will display correctly, even if you forget the end tag.


I recently moved to Pittsburgh, Pennsylvania from Youngstown, Ohio. I'm a software engineer and do most of my work in front-end web development and general software application development. I'm also a vegetarian, musician, explorer, and gamer.
University of Pittsburgh - Computer Science
Youngstown State University - Biology


Festival Guide:
Your party is set to participate in the next festival. Please wait patiently until it begins.
Go back


Workers can be at increased risk for heat illness. Important reminders:
Water and Shade:
- Drinking water must be on site.
- Drink plenty of water, even if you’re not thirsty – every 15 minutes (about 4 cups/hour).
- Set up cool, shaded rest areas.
Emergency planning and response:
- Make sure medical help (clinic, hospital, emergency services) is nearby – if not, first aid must be on site.
- Call 911 and cool a worker who is unconscious, confused, or uncoordinated. This may be heat stroke, which is a medical emergency.
- Know where you are in case you need to call 911.
Work and rest:
- Schedule frequent breaks in cool, shaded area.
- Gradually build up workload and allow more breaks over the first week for new or returning workers (acclimatize workers).
- Use more precautions for heavy work, layers of protective clothing, and work in the direct sun
- Schedule activities at a time when the heat index is lower
- Develop and follow work/rest schedules (amount of work time and rest time each work hour)
- Decrease the pace of heavy job tasks
- Monitor workers closely for signs of heat illness
- Use sunscreen and wear light-colored clothing.
Training:
- Make sure everyone reviews heat-related illness topics
- How to recognize heat-related illness
- How to prevent it
- What to do if someone gets sick
Watching out for heat illness:
- Watch out for each other.
- Set up a buddy system.


Notice*
You can test different categories of transition effects.
It will open and close menus for you.
It's normal.
Staggering Menu Item Effects:
Slide in Menu item one by one
3D Page Transition Effects
Active when the menu is opened.
2D Page Transition
Designed for iOS7/Maverics EdgeSwipeUX/ Browser Back Button:
Auto Scroll Resume
Automatically record and resume page-scroll position.


Damage grid :
Damage grid left:
Damage grid right:
Damage spiral (format is x-y-z , x = number of total circles in branches 1,2 ; y for branches 3,4 ; z for 5,6) :
Advance deploy,
amphibious,
arc node,
assault,
cavalry,
CMA,
CRA,
construct,
eyeless,
flight,
gunfighter,
incorporeal,
immune corr.
immune elect.
immune fire,
immune frost,
jack marshal,
officer,
parry,
pathfinder,
soulless,
standard bearer,
stealth,
tough,
Undead


I'm a web developer based in North Carolina. I love creating simple responsive web designs.
I design and create web applications using various front end technologies. I also build servers and work with databases.
Recipe Finder App
Train Schedule App
Custom Bootstrap Sass theme
A Looney based trivia app
RPG game
|


Amkhatar wrote:ORFK wrote:using chrome too, but if you scroll, is it really scrolling? by me it stops in in the first quarter.
The plugin (or the stream) has a bug... For me too, it stops sometimes in the first quarter (on chrome or on FF without a theme)
dapil wrote:Can you please update this to work with v3.0? It's very useful.
Brady_The wrote:It's not working anymore after the Battlelog update. Could you maybe look into it? Thanks in advance!
Pun1a wrote:Brady_The wrote:It's not working anymore after the Battlelog update. Could you maybe look into it? Thanks in advance!
works again.


Managing Journals
Your Journals
All of your journals are displayed here.
{{journal.title}}
{{journal.body}}
There was a problem loading the journals. Possibly the server is down or perhaps there are network
issues.
Please wait a bit and try again or start the server.


I learned how drones tick, the usage of trackers to get indoor navigation capabilities, concepts of swarming and the problems in controlling many drones simultaneously.
The course though me allot, i got allot of hands on experience while learning many aspects of the robotics world and i recommend taking it for anyone who enjoys getting there hands dirty.. :)


# Copyright 2018 The TensorFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
"""Helper class for implementing a beam search decoder.
Individual models just need to provide a few callback functions.
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import collections
import tensorflow as tf
from lingvo.core import base_layer
from lingvo.core import py_utils
from lingvo.core.ops import py_x_ops
# TODO(yonghui):
# 1) Change the tensor shape [max_decoder_time_steps, batch_size *
# num_hyps_per_beam] to [max_decoder_time_steps, num_hyps_per_beam,
# batch_size] to avoid confusing and mis-interpretation of the results.
# Defines a namedtuple to store the results of BeamSearchDecode. It contains
# the following entries:
# done_hyps: A string Tensor of shape
# [max_decoder_time_steps, batch_size * num_hyps_per_beam] which can be
# either an empty string, or a serialized Hypothesis proto. The non-empty
# hyps in done_hyps are terminated hypotheses. The 'h'-th hyp for sample
# 'b' at time step 't' can be found at done_hyps[t, batch_size * h + b].
# topk_hyps: A string Tensor of shape [batch_size, num_hyps_per_beam].
# topk_hyps[b, h] is the h-th hypothesis for the sample 'b' in the
# batch, which can either be an empty string or a serialized Hypothesis
# proto.
# topk_ids: Int32 Tensor of shape [batch_size * num_hyps_per_beam,
# target_seq_len] which contains the IDs of the targets in each of the
# hypotheses in the beam for the samples in the batch. For sample
# 'b' in the batch, the h-th hypothesis for this sample can be found at
# position [b * num_hyps_per_beam + h, :].
# topk_lens: Int32 Tensor of shape [batch_size * num_hyps_per_beam] which
# indicates the length (>=0) of each of the hypotheses.
# topk_scores: Float32 Tensor of shape [batch_size * num_hyps_per_beam]
# containing the scores (negative log probabilities) of each of the
# hypotheses in the beam.
# topk_decoded: A string Tensor of shape [batch_size * num_hyps_per_beam] which
# contains the decoded target strings in each of the hypotheses in the
# beam for the samples in the batch. The 'h'-th hyp for sample 'b' can
# be found at topk_decoded[b * num_hyps_per_beam + h]
BeamSearchDecodeOutput = collections.namedtuple(
'BeamSearchDecodeOutput',
[
'done_hyps', 'topk_hyps', 'topk_ids', 'topk_lens', 'topk_scores',
'topk_decoded', 'other_states'
],
)
# Make the last attribute default to None.
BeamSearchDecodeOutput.__new__.__defaults__ = (None,)
[docs]class BeamSearchHelper(base_layer.LayerBase):
"""Helper class for performing beam search.
The user of this helper class needs to implement three callbacks.
This callback is called once only at the beginning of beam search:
.. code-block:: none
def InitBeamSearchState(source_encs,
source_paddings,
num_hyps_per_beam,
additional_source_info):
Args:
source_encs: A tensor of shape [src_len, src_batch, source_dim].
source_paddings: A tensor of shape [src_len, src_batch].
num_hyps_per_beam: An int, number hyps to keep for source sentence.
additional_source_info: a NestedMap of tensors containing extra
information about the source that may be useful for decoding.
Returns:
initial_results: a NestedMap of initial results. It should contain the
following tensors at the minimum.
atten_probs: The initial attention probs, of shape [tgt_batch,
src_len].
states: a NestedMap of tensors representing states that the client
would like to keep track of for each hyp.
This callback is called once every decoding time step before beam_search_step
is called:
.. code-block:: none
def PreBeamSearchStepCallback(source_encs,
source_paddings,
step_ids,
in_states,
num_hyps_per_beam,
additional_source_info):
Args:
source_encs: A tensor of shape [src_len, src_batch, source_dim].
source_paddings: A tensor of shape [src_len, src_batch].
step_ids: A tensor of shape [tgt_batch, 1].
in_states: A NestedMap of tensors representing states that the clients
would like to keep track of for each of the active hyps.
additional_source_info: a NestedMap of tensors containing extra
information about the source that may be useful for decoding.
Returns:
results: A NestedMap of beam search results. It should contain
the 'atten_probs' and 'log_probs' tensors at the minimal.
Optionally it may contain 'lm_log_probs' if a LM is used during
decoding and 'is_last_chunk' if it is decoding a neural transducer
model.
atten_probs: The updated attention probs, of shape [tgt_batch,
src_len].
log_probs: Log prob for each of the tokens in the target vocab. This
is of shape [tgt_batch, vocab_size].
lm_log_probs: Language model prob for each of the tokens in the target
vocab. If not empty, this is of shape [tgt_batch, vocab_size].
is_last_chunk: Whether or not each of the hyp is at the end of a
chunk. If non-empty, it is of shape [tgt_batch, 1]
out_states: A NestedMap. The updated states. This 'out_states' should
be of the exact same structure as 'in_states'
This callback is called once every decoding time step after beam_search_step
is called:
.. code-block:: none
def PostBeamSearchStepCallback(source_encs,
source_paddings,
new_step_ids,
other_states,
additional_source_info):
Args:
source_encs: The same as above.
source_paddings: The same as above.
new_step_ids: Token ids for the next beam search step.
other_states: A NestedMap.
additional_source_info: a NestedMap of tensors containing extra
information about the source that may be useful for decoding.
Returns:
final_states, A NestedMap.
"""
[docs] @classmethod
def Params(cls):
p = super(BeamSearchHelper, cls).Params()
p.Define('num_hyps_per_beam', 8,
'Num of hyps to keep per beam during decoding.')
p.Define(
'target_seq_length_ratio', 1.0,
'Ratio of the average target sequence length over the average '
'source sequence length.')
p.Define('length_normalization', 0.0,
'Beam search length normalization ratio.')
p.Define('coverage_penalty', 0.0, 'Beam search coverage penalty.')
p.Define(
'valid_eos_max_logit_delta', 5.0,
'During beam search, allow </s> to terminate a hyp only if its '
'logit is no more than than this value away from the logit of the '
'best candidate.')
p.Define(
'beam_size', 3.0,
'The maximum difference between best hyp and the worst in a beam.'
' This allows to prune our search when none of the active hyp is'
' close enough to the current best.')
p.Define(
'lm_log_probs_weight', 0.0,
'How much weight to put on lm log probs when re-scoring the top k '
'hyps. Must be within -1 to 1. If less than 0, lm log probs are'
'used to reduce the scores given by the model. If 0, lm log probs'
'are unused.')
p.Define('target_sos_id', 1, 'Id of the start of sentence token.')
p.Define('target_eos_id', 2, 'Id of the end of sentence token.')
p.Define(
'target_eoc_id', -1,
'Id of the end of chunk token. Used by neural transducer only.'
' Set this id to a non-negative value only for NT.')
p.Define('target_seq_len', 0, 'Maximum allowed target seq length.')
p.Define(
'merge_paths', False, 'If true, hyps which are identical when '
'epsilons are removed will be combined into a single hyp. The '
'probability for that combined hyp will be the sum of the '
'probabilities of the component hyps. This can only be applied '
'for epsilon-emitting models (RNN-T and NT).')
p.name = 'beam_search'
return p
@base_layer.initializer
def __init__(self, params):
super(BeamSearchHelper, self).__init__(params)
p = self.params
self._is_neural_transducer = p.target_eoc_id >= 0
self._has_lm = p.lm_log_probs_weight != 0.0
[docs] def _BeamSearchStep(self, source_encs, source_paddings, cur_step, step_ids,
core_bs_states, other_states, num_hyps_per_beam,
pre_beam_search_step_callback,
post_beam_search_step_callback, additional_source_info):
"""Extend beam search hyps for one step.
| num_beams = Number of source sequences to be decoded.
| num_hyps_per_beam = Number of hyps to keep per source sequence.
| num_hyps = num_beams * num_hyps_per_beam
| src_seq_len = Number of time steps in the source sequence.
| tgt_seq_len = Maximum allowed time steps in the target sequence.
Args:
source_encs: A tensor of the shape [time, batch, depth]. The encoding of
the source.
source_paddings: A tensor of the shape [time, batch]. Padding state of
the source.
cur_step: A scalar int tensor, the current time step, 0-based.
step_ids: An int tensor of shape [num_hyps, 1]. The input ids to the
current search step.
core_bs_states: A tuple of core beam search states. This list is
maintained by this helper class.
other_states: A `.NestedMap` of other beam search states. This `.NestedMap`
is managed and updated by the client. It is expected that each of its
member tensors are of rank >= 1. t[i, ...] is the state of the i-th
hyp at the beginning of this search step.
num_hyps_per_beam: Num of hyps to keep per beam.
pre_beam_search_step_callback: The `PreBeamSearchStepCallback` callback.
See class header comments for more details.
post_beam_search_step_callback: The `PostBeamSearchStepCallback` callback.
See class header comments for more details.
additional_source_info: a `.NestedMap` of tensors containing extra context
information about the source that may be useful for decoding.
Returns:
A tuple of following elements for the next beam search step,
(next step, all_done, step_ids, core_bs_states, other_states)
"""
p = self.params
bs_results, other_states = pre_beam_search_step_callback(
source_encs, source_paddings, step_ids, other_states, num_hyps_per_beam,
additional_source_info)
(best_scores, cumulative_scores, in_scores, in_hyps, in_prev_hyps,
in_done_hyps, in_atten_probs) = core_bs_states
(out_best_scores, out_cumulative_scores, out_scores, out_hyps,
out_prev_hyps, out_done_hyps, out_atten_probs,
all_done) = py_x_ops.beam_search_step(
bs_results.log_probs,
bs_results.atten_probs,
best_scores,
cumulative_scores,
in_scores,
in_hyps,
in_prev_hyps,
in_done_hyps,
in_atten_probs,
bs_results.is_last_chunk if self._is_neural_transducer else [],
cur_step,
bs_results.lm_log_probs
if self._has_lm else tf.zeros_like(bs_results.log_probs),
eoc_id=p.target_eoc_id,
eos_id=p.target_eos_id,
beam_size=p.beam_size,
num_hyps_per_beam=num_hyps_per_beam,
valid_eos_max_logit_delta=p.valid_eos_max_logit_delta,
lm_weight=p.lm_log_probs_weight,
merge_paths=p.merge_paths)
new_step_ids = tf.reshape(out_hyps[cur_step, :], tf.shape(step_ids))
new_step_ids.set_shape(step_ids.get_shape())
old_hyp_ids = tf.reshape(
tf.slice(out_prev_hyps, begin=[cur_step, 0], size=[1, -1]), [-1])
new_bs_states = (out_best_scores, out_cumulative_scores, out_scores,
out_hyps, out_prev_hyps, out_done_hyps, out_atten_probs)
def ReOrderHyps(x_in):
if (isinstance(x_in, tf.Tensor) and x_in.shape.ndims and
x_in.shape.ndims > 0):
x_out = tf.gather(x_in, old_hyp_ids)
x_out.set_shape(x_in.get_shape())
return x_out
else:
return x_in
new_other_states = other_states.Transform(ReOrderHyps)
final_other_states = post_beam_search_step_callback(
source_encs, source_paddings, new_step_ids, new_other_states,
additional_source_info)
return (cur_step + 1, all_done, new_step_ids, new_bs_states,
final_other_states)
[docs] def BeamSearchDecode(self,
source_encs,
source_paddings,
num_hyps_per_beam_override=0,
init_beam_search_state=None,
pre_beam_search_step_callback=None,
post_beam_search_step_callback=None,
additional_source_info=None):
"""Performs beam-search based decoding.
Args:
source_encs: source encoding, of shape [time, batch, depth]. In case of
multi-source decoding, a `.NestedMap` object containing source encoding
tensors, again each of shape [time, batch, depth].
source_paddings: source encoding's padding, of shape [time, batch]. In
case of multi-source decoding, A `.NestedMap` object containing source
padding tensors, each of shape [time, batch].
num_hyps_per_beam_override: If set to a value <= 0, this parameter is
ignored. If set to a value > 0, then this value will be used to
override `p.num_hyps_per_beam`.
additional_source_info: a `.NestedMap` of tensors containing extra context
information about the source that may be useful for decoding.
init_beam_search_state: The `InitBeamSearchState` callback. Please refer
to the class header comments for more details.
pre_beam_search_step_callback: The `PreBeamSearchStepCallback` callback.
Please refer to the class header comments for more details.
post_beam_search_step_callback: The `PostBeamSearchStepCallback` callback.
Please refer to the class header comments for more details.
Returns:
A `BeamSearchDecodeOutput`.
"""
p = self.params
num_hyps_per_beam = p.num_hyps_per_beam
if num_hyps_per_beam_override > 0:
num_hyps_per_beam = num_hyps_per_beam_override
# Branch to multi-source according to type.
is_multi_source = isinstance(source_encs, py_utils.NestedMap)
if is_multi_source:
num_beams = tf.shape(source_encs.Flatten()[0])[1]
else:
num_beams = tf.shape(source_encs)[1]
num_hyps = num_beams * num_hyps_per_beam
initial_results, other_states = init_beam_search_state(
source_encs, source_paddings, num_hyps_per_beam, additional_source_info)
if is_multi_source:
if isinstance(source_paddings, py_utils.NestedMap):
source_seq_lengths = tf.to_int32(
tf.reduce_sum(1.0 - tf.transpose(source_paddings.Flatten()[0]), 1))
else:
source_seq_lengths = tf.to_int32(
tf.reduce_sum(1.0 - tf.transpose(source_paddings), 1))
else:
source_seq_lengths = tf.to_int32(
tf.reduce_sum(1.0 - tf.transpose(source_paddings), 1))
step_ids = tf.fill([num_hyps, 1],
tf.constant(p.target_sos_id, dtype=tf.int32))
min_score = -1e36
best_scores = (tf.zeros(shape=[num_beams], dtype=p.dtype) + min_score)
cumulative_scores = tf.zeros(shape=[num_hyps], dtype=p.dtype)
in_scores = tf.zeros([p.target_seq_len, num_hyps], dtype=p.dtype)
in_hyps = tf.zeros([p.target_seq_len, num_hyps], dtype=tf.int32)
in_prev_hyps = tf.zeros([p.target_seq_len, num_hyps], dtype=tf.int32)
in_done_hyps = tf.zeros([p.target_seq_len, num_hyps], dtype=tf.string)
bs_atten_probs = tf.zeros(
[p.target_seq_len, num_hyps,
tf.shape(initial_results.atten_probs)[1]],
dtype=p.dtype)
cur_step = tf.constant(0, dtype=tf.int32)
all_done = tf.constant(False, dtype=tf.bool)
core_bs_states = (best_scores, cumulative_scores, in_scores, in_hyps,
in_prev_hyps, in_done_hyps, bs_atten_probs)
def LoopContinue(cur_step, all_done, unused_step_ids, unused_core_bs_states,
unused_other_states_list):
return tf.logical_and(cur_step < p.target_seq_len,
tf.logical_not(all_done))
def LoopBody(cur_step, unused_all_done, step_ids, core_bs_states,
other_states_list):
(cur_step, all_done, new_step_ids, new_bs_states,
new_other_states) = self._BeamSearchStep(
source_encs, source_paddings, cur_step, step_ids, core_bs_states,
other_states.Pack(other_states_list), num_hyps_per_beam,
pre_beam_search_step_callback, post_beam_search_step_callback,
additional_source_info)
return (cur_step, all_done, new_step_ids, new_bs_states,
new_other_states.Flatten())
flat_other_states = other_states.Flatten()
_, _, _, final_bs_states, flat_final_other_states = tf.while_loop(
LoopContinue,
LoopBody,
loop_vars=(cur_step, all_done, step_ids, core_bs_states,
flat_other_states),
parallel_iterations=10,
back_prop=False,
swap_memory=False,
shape_invariants=(tf.TensorShape(cur_step.get_shape()),
tf.TensorShape(all_done.get_shape()),
tf.TensorShape(step_ids.get_shape()),
_GetShapes(core_bs_states),
_GetShapes(flat_other_states, none_shapes=True)))
final_done_hyps = final_bs_states[5]
final_other_states = other_states.Pack(flat_final_other_states)
topk_hyps = py_x_ops.top_k_terminated_hyps(
final_done_hyps,
source_seq_lengths,
k=num_hyps_per_beam,
num_hyps_per_beam=num_hyps_per_beam,
length_normalization=p.length_normalization,
coverage_penalty=p.coverage_penalty,
target_seq_length_ratio=p.target_seq_length_ratio,
eoc_id=p.target_eoc_id,
merge_paths=p.merge_paths)
topk_ids, topk_lens, topk_scores = py_x_ops.unpack_hyp(
tf.reshape(topk_hyps, [-1]), max_seq_length=p.target_seq_len)
topk_scores = tf.reshape(topk_scores, tf.shape(topk_hyps))
return BeamSearchDecodeOutput(final_done_hyps, topk_hyps, topk_ids,
topk_lens, topk_scores, None,
final_other_states)
[docs]def _GetShapes(tensors, none_shapes=False):
"""Util for getting nested structure of shapes from structure of tensors.
Args:
tensors: Structure of Tensors to get shapes for.
none_shapes: Returns None shapes if true.
Returns:
The same structure as tensors but of corresponding `TensorShape` objects.
"""
shapes = []
for t in tf.contrib.framework.nest.flatten(tensors):
shape = t.get_shape() if isinstance(t, tf.Tensor) else None
if none_shapes:
if shape:
shapes.append(tf.TensorShape([None] * len(shape)))
else:
shapes.append(tf.TensorShape(None))
else:
shapes.append(tf.TensorShape(shape))
return type(tensors)(
tf.contrib.framework.nest.pack_sequence_as(tensors, shapes))


library(deSolve)
library(tidyverse)
3 Anti-viral Drug Therapy
From pages 35-37.
3.1 Set Up the ODE
Represents infected cells becoming:
- Latently infected: do not produce new virions, but contain replication competent virus that can be re-activated to become virus producing
- long-lived chronic producers: produce small amounts of virus over long periods
- cells which harbor defective provirus
These dynamics can be represented by the below equations:
\[ \frac{dx}{dt} = \lambda - dx - \beta x v \\ \] \[ \frac{dy_1}{dt} = q_1 \beta x v-a_1y_1+\alpha y_2 \\ \] \[ \frac{dy_2}{dt} = q_2 \beta x v-a_2y_2-\alpha y_2 \\ \] \[ \frac{dy_3}{dt} = q_3 \beta x v-a_3y_3 \\ \] \[ \frac{dv}{dt} = k y_1 - u v \]
These equations can then be coded as follows:
<- function(time, state, parameters){
base_ode with(as.list(c(state, parameters)),{
<- lambda - d*x - beta * x * v
dx <- q1*beta * x * v - a1 * y1 + alpha * y2
dy1 <- q2*beta * x * v - a2 * y2 - alpha * y2
dy2 <- q3*beta * x * v - a3 * y3
dy3 <- k * y1 - u * v
dv
return(list(c(dx, dy1, dy2, dy3, dv)))
})
}
Now we can set up the initial conditions and constants to simulate the outputs from this system of equations.
<- seq(0,30,.1)
t
<- c(
params lambda =1e7,# Uninfected cell production rate
d = .1, # Cell Death Rate
a1 = .5, # Infected Cell Death Rate
a2 = .01, # Infected Cell Death Rate
a3 = .008, # Infected Cell Death Rate
beta = 5e-10, # "Rate Constant"
alpha = .3, # Virus Production rate of reactivated latent
k = 500, # Virus productin from Infected cell
u = 5, # Free Virus lifestapn
q1 = .55, # P(Infected State | Infected)
q2 = .05, # P(Latent State | Infected)
q3 = .4 # P(Defective Provirus | Infected)
)
#' Guessing Initial values from a graph
<- params["lambda"][1]/params["d"][1]
x0 <- c(x = unname(x0),
init y1 = 1,y2=0,y3=0, v = 1)
<- ode(init, t, base_ode, params)
out
<- as_tibble(as.data.frame(out)) out_df
Funny side note is that the differences in the scales are almost immediately reproduced as in the book.
<- c("Uninfected Cells",
compartment_names "Actively Infected Cells",
"Latently Infected Cells",
"Cells Infected with Defective Virus",
"Free Virus")
<- out_df %>%
p setNames(c("time", compartment_names)) %>%
gather(compartment, value, -time) %>%
mutate(compartment = factor(compartment,
%>%
compartment_names)) ggplot(aes(time, y = value))+
geom_line()+
facet_wrap(~compartment, ncol = 1,scales = "free_y")+
theme_classic()+
labs(
title = "Viral Dynamics of Primary Phase of HIV or SIV Infection",
x = "Days",
y = "Count"
+
)scale_y_continuous(labels = scales::comma_format(accuracy = 1000))+
theme(strip.background = element_blank())
p
3.1.1 Equilibrium Conditions
\[ \hat{x} = \frac{x_0}{R_0} \\ \] \[ \hat{y_1} = (R_0-1)\frac{du}{\beta k} = \hat{v}\frac{u}{k} \\ \] \[ \hat{y_2}=\frac{\hat{y_1}\frac{a_1}{q_1}}{\frac{\alpha +a_2}{q_2}+\frac{\alpha}{q_1}}\\ \] \[ \hat{y_3} = \hat{y_2} \frac{\frac{\alpha + a_2}{q_2}}{\frac{a_3}{q_3}}\\ \] \[ \hat{v} = (R_0-1)\frac{d}{\beta} \]
With \(R_0\) given by:
\[ R_0 = \frac{\beta \lambda \ k}{a_1du}(q_1+q_2 \frac{\alpha}{\alpha + a_2}) \]


Ray tracing is the definitive solution for lifelike lighting, reflections, and shadows, offering a level of realism far beyond what’s possible using traditional rendering techniques. Turing is the first GPU capable of real-time ray tracing.
Artificial intelligence is driving the greatest technology advancement in history, and Turing is bringing it to computer graphics. Armed with Tensor Cores that can deliver over 100 TFLOPs of AI computing horsepower, Turing GPUs can run powerful AI algorithms in real time to create crisp, clear, lifelike images and special effects that were never before possible.
Programmable shaders defined modern graphics. Turing GPUs feature new advanced shading technologies that are more powerful, flexible, and efficient than ever before. Combined with GDDR6—the world’s fastest memory—this performance lets you tear through games with maxed-out settings and incredibly high frame rates.


This is an introduction to Tursi. You will learn how to write tm-files, load and execute them using the GUI or console mode.
If you want to use Tursi as soon as possible, I recommend to skip this tutorial and download the tm-file examples instead. Most things should be self-explanatory. If you don't get everything, you can always search this tutorial or the manual for an explanation.
This is not a tutorial for turing machines (abbreviated tm).
However there are many different definitions of turing machines, so it has to be described, which one we use:
Our turing machine has
A special alphabet is not required. We just use all available symbols.
The transition function takes the current state and the symbol under the
head as input. It returns a further symbol, a direction and a state.
Therefore, our table has 5 columns. We call its lines rules.
As mentioned above, it must be deterministic. So that there's at most one
output for each input. On the other side, you don't have do define an
output for every input.
Our machine starts with the initial state and calls the transition
function (basically, it searches the table). The output symbol will be
written over the current position. Then, the head will move in the
indicated direction (it can also stay, where it was). Finally the
current state will be changed.
This steps are repeated, until no rule for the current state and symbol
under the head was found or an end state was reached.
When the machine has stopped, you can read what it wrote on the tape and in which state it ended. Tursi just executes the machine and does not validate the result - you have to decide, if your machine did the right thing.
Normally the cells on the tape aren't numbered, but we will number them,
because it's easier to talk about cell n instead of the cell,
which lies n cells to right of the initial head position.
0 is the cell where the head was, as we started the turing machine. We count upwards, when moving right and backwards when moving left.
Tursi is not designed, to create and edit turing machines. So you will need a simple text editor (not word!) to write a tm-file, which describes a turing machine and can be loaded into Tursi.
If you use GEdit, you may want to install tm.lang (see Downloads) to enable syntax highlighting.
a tm-file is basically the transition table, but it can also contain comments and commands. Here's an example:
# this is a comment
# the following 3 lines are commands
#! start s
#! end e0 e1
#! fill *
# Now we specify some rules
s 0 0 R s
s 1 0 R q
s * * N e0
q 0 0 R q
q 1 0 R q
q * * N e1
This is a turing machine, with 4 states - 2 of them (e0 and e1) are end states. It starts in state s on a tape, filled with *. When you open this tm in Tursi, write a binary number onto the tape and execute the machine. It replaces every 1 with a 0 and stops when reaching the end of the word. If it stopped in e0, the word contained no 1.
The tm format is case-sensitive! So q is another state than Q.
A comment starts with # and ends at the
end of the line. If you want to use the symbol # in your machine, you have
to escape it - just write ##.
So ###... would be a #, followed by a comment.
#### would be ## and so on.
This may be a little confusing, but it's easy to type and we don't need
a special escape character, which then also had to be escaped.
A command starts with #! and ends at the next command, comment or
line end.
Even though it begins with #, it's not a comment! This is not very
beautiful, but guarantees compatibility to the old format, which did not
know commands.
The first word after this sequence is interpreted as the command name,
all further words will be passed to this command as arguments (you probably
expected that, if you ever used a shell like bash).
Commands are not mandatory, but Tursi will complain, when it has to
guess vital informations like the start state, end states or default
tape content.
The most important commands are
If you always use these three commands, you're on the safe side.
Here, we used * as fill, because the real space
is used for separating the components of a tm-file. Therefore, it cannot
be interpreted differently.
If you really want to use a space, you could use a non-breaking space.
However, it's not recommended, since you wouldn't be able to keep it apart
from a normal space or even an empty part of your file.
Normally, most of your lines are rules. Remember: A rule is a line of your transition table, which has 5 columns (2 input, 3 output). The columns are separated by whitespace (e.g. tab or space) and have to be in the following order:
Keep in mind, that the turing machine has to be deterministic. This means, all rules must be distinguishable by their first two columns (the input of the transition function).
When you have a tm-file, you can execute it. To do so, we use Tursi's GUI.
Open Tursi, then open your tm-file. If your tm-file is flawless, you will see your transition table on the left.
Before you execute your turing machine, you likely want to write something
onto the tape. To do so, use the top text field on the the right.
Write something and then press enter. You can modify the position, where
your text is written to, by changing the number underneath.
To reset the tape, click the top right button with the tape roll on it.
Now let your machine take its first step. To manually step forwards,
click the right footprint button. You can also use the
right arrow key (click onto the tape, to make sure, that no text field has
the keyboard focus).
After each step, the executed rule pops up in history. You can undo steps
from the history. Click on the left footprint button or use the left
arrow key.
Instead of clicking a button for every step, you can run your machine.
Click on the play button (green triangle arrow) or use the space bar.
Stop it with the same button or key.
Speed it up or down, using the slider on the right. This changes the
pause time between every step.
Some window managers show a number on the slider. This is not the pause time! That's because the slider has a quadratic scale (smaller values can be set with more precision). The real pause time is displayed in a tooltip (move your mouse over the slider and stand still).
Reseting is split into two functions: Reseting the machine to the start state (left button with the purple triangle arrow) and reseting the tape (top right button with the tape roll).
Say, you have a program, that increments a number and stops, where it
has started. You can reset the state, but keep the tape for each run to
increment your number multiple times.
In this scenario, you wouldn't even have to reset at all. Tursi
automatically resets the state, when the machine is in an end state
and is executed again (see File/Preferences/"Reset when starting from
end state").
If you want to reset both, the state and the tape, you can also reload your file (use File/Reload or press ctrl+R).
When working with turing machines, that read or write long words, your
tape will not fit into the window. In such cases Tursi can follow the
head as it moves. You can also scroll manually with your cursor.
Hold and drag the tape or make use of your mouse wheel.
You can change between manual and two different automatic scroll modes.
Just press one of the three buttons on the top right.
There are four special cells, which are marked in the tape viewer. The cell under the head, the leftmost and rightmost cell ever accessed and the cell, where the head has started (0). To jump to one of them, click onto the according labels down right.
Some turing machines can make thousands of steps before they stop.
Even with full speed (0 ms pause time), you might have to wait
long for them to finish.
Like the graphic settings of a video game, Tursi offers options that
reduce or disable graphical features, but relief your system. Most of
them are in the category View of the menu bar. The more you disable,
the faster your machine will run.
When you don't want to disable the tape viewer, you can make your window
narrow, so that less tape is drawn. You can also increase the frame length.
This is the delay for repainting, after the tape was changed. The higher,
the more changes can be packed into one repaint, but your tape will begin
to stutter. You can set the frame length under File/Preferences.
The highest frame length is limited to 1000 ms.
For very long running turing machines, you're better off using the console mode.
Another (and faster) way to execute your tm-file is Turi's console mode. This mode is not interactive - Tursi just runs your machine once and terminates.
Since you won't be able to modify the tape in console mode, you have to use the write command in your tm-file. It writes something onto the tape, before the machine is executed. The machine is not affected by this command (especially the head does not move).
You can use write multiple times or even write multiple times
with only one call of write. The commands will be executed in the
order they were called.
The command comes in two forms:
Keep in mind, that a word can't contain whitespace (space or tab), because
this would split it into two arguments. One of them would be interpreted
as a position.
You also can't simply write #, because this would be a comment.
Write ## instead, to eascape it.
Let's have a look at an example:
# some examples for the write command
#! write abcdefgh
#! write 0 Z 4 ABCD # now the tape will contain 'ZbcdABCD'
#! write ## # and now '#bcdABCD'
To start Tursi in console mode, you have to use the console (what a
suprise).
Note the -c which activates console mode. Remove it to open your
file in the GUI.
java -jar /path/to/tursi.jar /path/to/your/file.tm -c
Windows users may have to add Java to their PATH variable first.
Mac users who have downloaded the app, don't have to download the jar. The app is practically a directory, which includes the jar. You can write Tursi.app/Contents/Resources/Java/Tursi.jar
After your machine was executed, your output may look like this:
(let \t be a tabulator)
57\tq
\ttape (-3, 11, 7), head 4
\txyz
\tabcdefgh
This means, after 57 steps, your machine reached state q.
At this time, the leftmost cell ever accessed was -3 and the
rightmost cell ever accessed was 7. Cells that were never reached,
will not be printed. So the printed tape contains 11 cells.
The head is currently on cell 4 (reads e, because
a is in cell 0).
The last two lines are the tape. The first is the part left from cell 0.
The second is the part from cell on to the right (including cell 0).
The tape would look like "xyzabcdefgh" if you used the GUI. But if
it was written in one line, you had to count characters and calculate, just
to find cell 0. That would be annoying.
You can modify when and what Tursi should print. Just append a further argument to the command line, when starting Tursi.
java -jar tursi.jar file.tm -c <groups>=<options> [...]
The defaults are 'e=st bo='.
If you set options multiple times for one group, only the last one counts.
When a state is in multiple groups (e.g. it is a break and an end state),
the options from the strongest group will be chosen (end >
break > other). Only the nth-step groups mix with
other groups (options are combined with a logical OR).
Lets make an example:
ebo=str e=st bo= 5000=s 10000=t
the first part is wasted - all groups are overwritten by other specifications. This makes the example equal to
e=st b= o= 5000=s 100000=t
With this options, Tursi will print the number of steps and the tape when it reached an end state. Every 5000 steps, the current state and number of steps are printed and every 100000 steps the tape is printed (in addition to the steps and the state, because 100000 is a multiple of 5000).
There are two more commands, which weren't discussed.
You can define break states. This can be used to stop your run in the GUI when reaching a certain state or to apply print options to only a subset of your states in the console mode.
To do so, use the command break. It works just like the end command.
wildcard <symbol> defines <symbol> as a wildcard.
Only one single symbol can be defined as a wildcard.
Wildcards can help you writing tm-files faster when you have a lot of similar rules.
# same output for all inputs
q0 a x R q1
q0 b x R q1
q0 c x R q1
...
This could be written as
#! wildcard ?
q0 ? x R q1
The symbol ? is now a wildcard and applies to all symbols. When in state q0, the rule will be executed no matter what symbol was read.
You can also use the wildcard in the write column, where it is interpreted as the symbol, that was read.
#! wildcard ?
q0 a ? R q1 # ? would be an a
q1 ? ? R q2 # this rule moves to right, without changing the tape
Rules with wildcards will only be executed, if no other rule matches the current state and symbol under the head. You can see it as a fallback.
#! wildcard ?
q0 1 0 R q0
q0 0 1 R q0
q0 ? ? R qErr # error when something other than 0 or 1 was read
Wildcards can only be used in the read and write column of rules. write ? will write a ? and "? r w N ?" will be a rule for state ?, no matter if ? is defined as wildcard or not.


by Curtis Edmonds --<EMAIL_ADDRESS>If Princess Mononoke ever gets an American remake, it will be a western.
I say this not to make some kind of point about The Seven Samurai evolving into The Magnificent Seven (and I'm sure there are other examples) but to say that Princess Mononoke is very much a frontier movie. I don't imagine that 15th century Japan was all that much like 18th century America, but (at least in this retelling) they both appear to be frontier societies.
The first thing you need in a frontier society is the technological progress that allows you to get to the frontier in the first place. In America, you have things like the rifle and the Conestoga wagon. To colonize Australia, you need a working chronometer and a knowledge of how Vitamin C wards off scurvy. To tackle the Japanese forests, you need to know how to make iron and guns. The iron in Princess Mononoke is made at the fortress of Irontown, which serves as the prerequisite Western town. (It's even in the western part of Japan.)
But like all Western towns, Irontown is menaced by outside forces. Unlike Western towns, Irontown is not menaced by outlaws or ranchers or Indians, but by... er... well.. gods. Irontown needs iron ore and wood to make iron, and the forest has plenty of both. Unfortunately, the forest also has wolf gods and boar gods and the "spirit of the forest", none of whom like the idea of people cutting down trees and mining.
In the middle of all this madness walks one lone, silent, honorable man carrying a terrible curse. But unlike the guilt carried by gunfighters like The Outlaw Josey Wales or Shane or Bill Munny from Unforgiven, this curse has a little more of a physical manifestation. Prince Ashitaka (Billy Crudup) carries a horrible, spreading infection, the legacy of a battle with a boar god. The boar god was wounded by an iron bullet fired from an Irontown gun. Instead of dying, the boar god was consumed by nightmarish snakelike demons, which caused Ashitaka's wound. Ashitaka travels to both Irontown and the forest to discover the cause of the enmity between humans and the gods.
Irontown is a busy place. It's an island fortress, ruled by Lady Eboshi (Minnie Driver, with the haughty accent down pat), where the fires of the forges burn all night. In an American film, the capitalist owner of the steel mill would be a villain, and a nasty one too. In contrast, Lady Eboshi is a real sweetheart, looking after her employees in a manner that is both egalitarian and matriarchal. She even hires women -- straight from the brothels -- and people with disabilities. (The latter employees are lepers, building rifles in the ultimate sheltered workshop, but hey, it's the 15th century for crying out loud, give her some credit.) It's a tribute to Lady Eboshi that the character who steals the show is Toki (Jada Pinkett Smith), an outspoken, liberated ex-brothel girl.
We get to the forest before we get to Irontown, though, and it's an alien world. It's ruled by the "spirit of the forest", which takes on all different forms. The deputy rulers of this forest are Moro the wolf god (Gillian Anderson) and her three kids -- two wolf, one human. The human is San, the Princess Mononoke (the spunky Claire Danes), the ultimate Woman Who Runs With The Wolves and a supercool ninja to boot.  The forest gods are rightfully unhappy about their trees being cut down left, right and center, and they're getting ready for a final battle with the humans.
Ashitaka walks right into this sorry mess like Gary Cooper, with Crudup's voice supplying the steely will and moral courage of a true Western hero. But unlike a good-guy bad-guy Western, Ashitaka isn't on one side or the other. Instead, he's looking at the situation with "eyes unclouded by hate", seeking an elusive harmony between the forest and the city. Ashitaka sees the goodness inherent in both the forest and the city and seeks to preserve both the lives of the villagers and the mystery of the forest.
Observant readers (that's you, right?) will notice that so far in this review, I haven't mentioned that Princess Mononoke is an animated film. Nor have I mentioned the name of the director (Hayao Miyazaki) or the word "anime". I've done this intentionally. Princess Mononoke is first and foremost a good story with some decent characters, and if that's what you're looking for, don't let the "anime" tag scare you. People who know more about Japanese animation than I do (that is to say, anyone who knows anything about Japanese animation) already know about this movie and can tell you much more about it than you probably want to know. Go see Princess Mononoke -- not just for the stunning animation, but for what it says about the frontier of all our hearts.
-- Curtis Edmonds<EMAIL_ADDRESS>Movie Reviews: http://www.hsbr.org/buzz/reviewer/reviews/bdreviews.html http://www.epinions.com/user-curtisedmonds
"Oh, if life were like the movies, I'd never be blue." -- Alan Jackson, "Here In The Real World"
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Air Pollution
Monthly Sales
Air Pollution
iMacs 80%
iBooks 50%
iPhone 5s 70%
iPhone 6 65%
iPhone 6s 40%
Projects
| # | Project Name | Start Date | Due Date | Status | Assign |
|---|---|---|---|---|---|
| 1 | Ubold Admin v1 | 01/01/2015 | 26/04/2015 | Released | Coderthemes |
| 2 | Ubold Frontend v1 | 01/01/2015 | 26/04/2015 | Released | Coderthemes |
| 3 | Ubold Admin v1.1 | 01/05/2015 | 10/05/2015 | Pending | Coderthemes |
| 4 | Ubold Frontend v1.1 | 01/01/2015 | 31/05/2015 | Work in Progress | Coderthemes |
| 5 | Ubold Admin v1.3 | 01/01/2015 | 31/05/2015 | Coming soon | Coderthemes |
| 6 | Ubold Admin v1.3 | 01/01/2015 | 31/05/2015 | Coming soon | Coderthemes |
| 7 | Ubold Admin v1.3 | 01/01/2015 | 31/05/2015 | Cool | Coderthemes |
| 8 | Ubold Admin v1.3 | 01/01/2015 | 31/05/2015 | Coming soon | Coderthemes |


The Coca-Cola Company, American corporation founded in 1892 and today engaged primarily in the manufacture and sale of syrup and concentrate for Coca-Cola, a sweetened carbonated beverage that is a cultural institution in the United States and a global symbol of American tastes. The company also produces and sells other soft drinks and citrus beverages.
Microsoft Corporation is an American multinational technology company with headquarters in Redmond, Washington. It develops, manufactures, licenses, supports, and sells computer software, consumer electronics, personal computers, and related services. Microsoft was founded in 1975.
Nike is an American multinational association that is involved in the design, development, manufacturing and worldwide marketing and sales of apparel, footwear, accessories, equipment and services. The company’s world headquarters are situated near Beaverton, Oregon, in the Portland metropolitan area (USA).
Mercedes-Benz was founded in 1926 by Karl Benz, Gottlieb Daimler, Wilhelm Maybach and Emil Jellinek, whose daughter Mercedes is our original namesake. With offices in 93 locations worldwide and a corporate headquarters in Stuttgart, Germany, our global presence continues to grow.
Prada S.p.A. is an Italian luxury fashion house that was founded in 1913 by Mario Prada. It specializes in leather handbags, travel accessories, shoes, ready-to-wear, perfumes and other accessories.


Counter Strike and Pebble
Hey all, it’s been a while! I’ve been busy. Combining my enthusiasm to CS and the usefulness of a pebble watch to create you CSontheGO
Pretty cool huh? Being able to keep up to date with CS matches from your watch. I decided to do this because I:
- wanted to Learn a php framework
- Enjoy developing things in my spare time
This project had to be split into 2 parts, the backend/data store, and the pebble watch. Surprisingly I had a pretty much a beta version of the app running in about 45hours of dev time. This is probably mostly due to the paths I took with each part of the project
the backend
So I wanted to learn a php framework (because I like php) and laravel and lumen came to me highly recommended. All I have to say is amazing
So I needed a backend/data store for this project because there were no publicly consumable APIs from any sites that report on Counter Strike, so I had to make my own. For something the pebble app can use to give you information at your wrist
Currently I am getting the data I need by scraping a well known e Sports website. The plan is to add other sites, for redundancy, incase I get blocked, or that particular site doesn’t provide updates for unknown reasons
I ended up using lumen, as I didn’t need the full laravel install to make my idea come to life, this data store would only provide an API for the pebble app to connect to anyway, and the scraping is all done via headless cli scripts. Perfect
IDE choice
So because this was the first “big” personal project I was making, I decided to try out an IDE that supports PHP
I have created various things in php previously, but they have never been big, so I just stuck to using vim
which has suited my needs fine
The choices only really come down to
- Php storm by jetbrains
- Eclipse PDT
- Netbeans
- Atom not an IDE per say but including because a legitimate option
- VS code same as atom
PHP storm If I had the cash to splash, I would have bought this. I used the 30 day trial, and its pretty amazing. Has all the bells and whistles you’d expect from an IDE and it does really well at on the fly suggestions and hints while developing, even with lumen. I was quite impressed with it. I’ve used the base product before though, while developing on an Android app. Android studio uses the indelij platform underneath it, which is the same as php storm
Eclipse I switched over to eclipse after my trial of above had finished. Eclipse was fine, but it was lacking in the suggestions and hints during development. It didn’t seem as robust and complete as php storm. I found myself having to just look up the docs more often then not when I was using eclipse. To see what parameters where etc.
And that is why I ended up just using atom. It has a decent enough support for PHP to give me syntax errors, and if I’m using the docs anyway, I may as well use something a little more light weight. I’ve used atom previously, mainly as just a text editor of choice (after vim
) but it’s come a long way since I last used it so it was quite pleasant. And does exactly what i need it to do. I know I’m missing the big IDE features like integrated testing, integrated environments and things like that, but that’s okay with me
pebble app
There were 2 paths I could have taken with this. Write in c, with the pebble c framework, or use pebblejs, a framework that allows you to write the app in JavaScript. I chose pebblejs. There were a few downfalls with pebblejs, namely, it “runs” on the phone and sends all the data to the watch, causing more BT round trips, using more battery. The good thing about it was it was very quick to get an app up and running. No worrying about appmessage and dealing with all that in c. Although I will eventually rewrite in c to support all watches and the new APIs, which pebblejs doesn’t support (and probably won’t)
Writing this was pretty neat, JavaScript is super powerful and includes all the things I needed (pulling data from the API and showing it in a menu) and I could utilise things like timeline pins via the rest API too.
All in all, I’ve had fun! I’ve learnt alot, both in PHP frameworks and development in general. I have a long list of fixes/feature I want to add but don’t exactly have the usage of the app to really continue :( I will certainly leave the backend up for those (and myself) that are currently using it. I guess there isn’t much of a user base that like CSGO and have a Pebble!