This article explains the basics of the Simple Mail Transport Protocol (SMTP) and its extension, SMTP-AUTH. SMTP is the de facto standard application layer protocol for sending e-mail across the Internet, and SMTP-AUTH augments SMTP by supporting client authentication, which allows clients to use an SMTP server as an e-mail relay.
If you haven’t played with SMTP over telnet before, it’s entertaining and possibly even eye-opening. You’ll learn how spammers use SMTP and SMTP-AUTH to achieve their nefarious ends. Hopefully you won’t use it for that but this article explains enough of SMTP that you’ll understand how to use and abuse it.
Send yourself an e-mail from <insert_sith_lord_here>
Have you ever wanted to receive an e-mail from your favorite Sith Lord? Let’s open up a telnet session that does just that. To do that you will need an SMTP server, which as mentioned above allows you to send e-mail over the Internet. You will also need to know your username and password for the SMTP server as most SMTP servers require that. You can get the SMTP server’s host and port from your ISP, and presumably you set the username and password up with your ISP as well.
$ telnet smtp.example.com 25 S: 220 smtp.example.com ESMTP Sendmail 8.13.8/8.13.6; Thu, 27 Mar 2008 23:14:59 -0700 C: EHLO wheelersoftware.com S: 250-smtp.example.com Hello wheelersoftware.com [<IP_ADDRESS>], pleased to meet you S: 250-ENHANCEDSTATUSCODES S: 250-PIPELINING S: 250-EXPN S: 250-VERB S: 250-8BITMIME S: 250-SIZE 20000000 S: 250-DSN S: 250-ETRN S: 250-AUTH LOGIN PLAIN S: 250-STARTTLS S: 250-DELIVERBY S: 250 HELP C: AUTH LOGIN S: 334 VXNlcm5hbWU6 C: d2lsbGll S: 334 UGFzc3dvcmQ6 C: ZnVuc210cA== S: 235 2.0.0 OK Authenticated C: MAIL<EMAIL_ADDRESS>S: 250 2.1.0<EMAIL_ADDRESS>Sender ok C: RCPT<EMAIL_ADDRESS>S: 250 2.1.5<EMAIL_ADDRESS>Recipient ok C: DATA S: 354 Enter mail, end with "." on a line by itself C: Date: Thu, 27 Mar 2008 23:12:49 -0700 (MST) C: From<EMAIL_ADDRESS>C: To<EMAIL_ADDRESS>C: Subject: Great article C: C: Hi Willie, C: I enjoyed your article on TCP/IP-based application protocols. C: Join me, and together we can rule the galaxy as father and son. C: Darth Vader C: . S: 250 2.0.0 m2S6ExD6029743 Message accepted for delivery C: QUIT S: 221 2.0.0 smtp.example.com closing connection [The server closes the connection]
Session analysis
$ telnet smtp.example.com 25 S: 220 smtp.example.com ESMTP Sendmail 8.13.8/8.13.6; Thu, 27 Mar 2008 23:14:59 -0700
The session begins with me telnetting to an SMTP server using port 25, which is the default SMTP port. If you don’t know the location of an SMTP server on your network, you’ll need to talk to your local sysadmin or else your ISP.
The server issues a 220 reply code (indicating that the service is ready) and identifies itself as being an ESMTP (Extended SMTP) server.
C: EHLO wheelersoftware.com S: 250-smtp.example.com Hello wheelersoftware.com [<IP_ADDRESS>], pleased to meet you S: 250-ENHANCEDSTATUSCODES S: 250-PIPELINING S: 250-EXPN S: 250-VERB S: 250-8BITMIME S: 250-SIZE 20000000 S: 250-DSN S: 250-ETRN S: 250-AUTH LOGIN PLAIN S: 250-STARTTLS S: 250-DELIVERBY S: 250 HELP
SMTP has a HELO
command that one uses to communicate the client host to the SMTP server, but ESMTP servers support EHLO
(which stands for “Extended HELLO”), which returns a list of extensions (commands and keywords) that the ESMTP server supports. For example, the STARTTLS
command allows the client to start a TLS (Transport Layer Security) session with the server so that the communication will be encrypted.
C: AUTH LOGIN S: 334 VXNlcm5hbWU6 C: d2lsbGll S: 334 UGFzc3dvcmQ6 C: ZnVuc210cA== S: 235 2.0.0 OK Authenticated
This is the SMTP-AUTH part. SMTP-AUTH adds to SMTP support for client authentication, and so now I tell the server that I want to log in. The server responds with the humorous (to me, anyway) response “VXNlcm5hbWU6”, which is the base64 encoding of “Username:”. (You can encode and decode these using this base64 encoder/decoder; now you can see why I said above that base64 doesn’t provide you any real protection.) I provide the base64-encoded version of my username (willie → d2lsbGll). Then the server asks me for my password; “UGFzc3dvcmQ6” is the base64 encoding of “Password:”. So I provide it (funsmtp → ZnVuc210cA==). Server checks the password and gives me the A-OK.
C: MAIL<EMAIL_ADDRESS>S: 250 2.1.0<EMAIL_ADDRESS>Sender ok C: RCPT<EMAIL_ADDRESS>S: 250 2.1.5<EMAIL_ADDRESS>Recipient ok C: DATA S: 354 Enter mail, end with "." on a line by itself C: Date: Thu, 27 Mar 2008 23:12:49 -0700 (MST) C: From<EMAIL_ADDRESS>C: To<EMAIL_ADDRESS>C: Subject: Great article C: C: Hi Willie, C: I enjoyed your article on TCP/IP-based application protocols. C: Join me, and together we can rule the galaxy as father and son. C: Darth Vader C: . S: 250 2.0.0 m2S6ExD6029743 Message accepted for delivery
Here I’m just entering in the e-mail headers and body itself. When I’m done, I just enter . on a line by itself, and the server accepts the message for delivery.
C: QUIT S: 221 2.0.0 smtp.example.com closing connection
Finally I log out.
Conclusion
That’s it! Nothing new or earth-shattering here, but it’s definitely useful to know how the SMTP protocol works and what you can do with it. Happy e-mailing!
Resources
- SMTP - Wikipedia: Nice overview of SMTP, including a sample communications session over telnet.
- SMTP-AUTH - Wikipedia: Describes the SMTP-AUTH extension to SMTP, which adds client authentication to the SMTP protocol.
- SMTP: Simple Mail Transfer Protocol
- The EHLO verb and SMTP extensions
- SMTP reply codes


It reports unclosed or unopened xml tags in scala xml notation.
In the following example,
open
is marked as unopened:
val someXml = <xml>> </open> </xml>


--- layout: page weight: 0 title: General Statistics navigation: show: true --- {% anchor h2 %} Retrieve Statistics {% endanchor %} {% info %} You can specify either the days parameter or the start_date and end_date parameters. If provided with no parameters, the current day's statistics are returned. {% endinfo %} {% anchor h2 %} Parameters {% endanchor %}
| Parameter | Required | Requirements | Description |
|---|---|---|---|
| days | No | Must be an integer greater than 0 | Number of days in the past to include statistics (Includes today) |
| start_date | No | Date must be in YYYY-MM-DD format and be before the end_date parameter | The start date to look up statistics |
| end_date | No | Date must be in YYYY-MM-DD format and be after the start_date parameter | The end date to look up statistics |
| aggregate | No | 0 or 1 | This is used to indicate you are interested in all-time totals |
| Parameter | Required | Requirements | Description |
|---|---|---|---|
| category | Yes | Must be an existing category that has statistics. | The category you will specify to retrieve detailed stats |
| days | No | Must be an integer greater than 0 | Number of days in the past to include statistics (Includes today) |
| start_date | No | Date must be in YYYY-MM-DD format and be before the end_date parameter | The start date to look up statistics |
| end_date | No | Date must be in YYYY-MM-DD format and be after the start_date parameter | The end date to look up statistics |
| aggregate | No | 0 or 1 | This is used to indicate you are interested in all-time totals |


{% extends "layout.html" %} {% block body %}
please feel free to contact me if you have any suggestions :)


Click HERE for the sensor readings
Sensor data can also be seen here: https://thingspeak.com/channels/669891 https://thingspeak.com/channels/703349 https://thingspeak.com/channels/703353


Enjoy our virtual online gallery from the comfort of your home. We showcase and sell artwork of Academically-trained, popular artists from the Middle East.
Register to gain access to the latest artist news, our blogpost, events/webinars, special offerings or to contact your favorite artist to commission your own art for that special occasion
Buy your favorite painting or piece of art from our gallery and have it sent directly to your home
"This is fantastic! A great selection of local art not found anywhere else in the region"
"Virtuality is an amazing platform to interact with artists and view beautiful paintings"
"Thanks so much, as an artist this has really helped promote my work"


Iterator for recursively traversing filesystem structure to render tree views.
Located in /lib/sfFilebasePluginRecursiveIteratorIterator.php (line 19)
RecursiveIteratorIterator | --sfFilebasePluginRecursiveIteratorIterator
Inherited From RecursiveIteratorIterator (Internal Class)
constructor __construct ( $iterator, [$mode = ], [$flags = ] )
beginChildren ( )
beginIteration ( )
callGetChildren ( )
callHasChildren ( )
current ( )
endChildren ( )
endIteration ( )
getDepth ( )
getInnerIterator ( )
getMaxDepth ( )
getSubIterator ( [$level = ] )
key ( )
next ( )
nextElement ( )
rewind ( )
setMaxDepth ( [$max_depth = ] )
valid ( )
Documentation generated on Mon, 25 May 2009 15:21:38 +0200 by phpDocumentor 1.4.2


{% load staticfiles %} {% load user_extras %}
MyAnimeFigures - {{ mal_name }}
{% favicon %}
MyAnimeFigures
{% if watching %}
{{ mal_name }}'s currently watching anime
{% show_content_rows watching watching_nofigs series_id_to_figures %}
{% endif %} {% if recently_completed %}
{{ mal_name }}'s recently completed anime
{% show_content_rows recently_completed completed_nofigs series_id_to_figures %}
{% endif %} {% if not watching and not recently_completed %}
Unfortunately, no figures were found for any of {{ mal_name }}'s currently watching or recently completed anime.
{% endif %} {% if recent_figures %}
Recent and upcoming figures from {{ mal_name }}'s anime list
{% for figure in recent_figures %}
{% show_figure figure %}
{% if forloop.counter|divisibleby:4 %}
{% endif %} {% if forloop.counter|divisibleby:2 %}
{% endif %} {% endfor %}
{% endif %}


I am a physician, biomedical scientist, and computational biologist. I accumulated versatile skill sets from working in the clinic, lab bench, and on the Linux terminal during my career. As a physician-scientist, my long-term career goal is to study the genetic basis of disease. I have a particular interest in the role of so-called "Junk" non-coding DNA in genetic diseases and cancer.
Now I am working in Macfarlan lab at the National Institutes of Health (NIH). I am broadly interested in studying transposable elements' expression regulation during meiosis. My research explores how mammals evolved self-protection mechanisms during meiosis to prevent homologous recombination at repetitive regions, which can lead to severe genetic disorders. I identified two novel genes (Zcwpw1 and Zcwpw2), which play a critical role in DNA repair during meiotic recombination and are essential for fertility. My career path allowed me to gain a wide array of molecular biology, mouse genetics, and computation biology experience. After finishing my research at the NIH, I plan to pursue training in clinical genetics. By taking advantage of the unique combination of skills that I acquired, I aspire to be a pioneer in human genetics.
I did my PhD in Matsuoka's lab at Kyoto University, Japan. My study there was a unique research experience, as I worked on projects in a field in which virology, immunology, and cancer all overlap. I studied the molecular mechanisms of viral oncogenesis by using HTLV-1 (Human T-cell leukemia virus type 1) as a model. My focus was on how the virus can establish latency and fine-tune its gene expression to simultaneously evade immunity and manipulate the transcriptome of hosting cells to promote cancer. I used cutting-edge molecular techniques to monitor viral and host gene expression at the single-cell level.
Resident Doctor in pediatrics Department.
As teaching assistant in department of microbiology at faculty of Medicine, I taught undergraduate medical students in practical sessions. Also I supervised group discussions for clinical-oriented microbiology problems' tutorials.
Postgraduate medical internship training, rotating between different clinical departments (Medicine, Pediatrics, Surgery, Obstetrics & Gynecology, Orthopedics).
Mahgoub M, Paiano J, Bruno M, Wu W, Pathuri S, Zhang X, Ralls S, Cheng X, Nussenzweig A,
Macfarlan TS. Dual histone methyl reader ZCWPW1 facilitates repair of meiotic double strand breaks in male
mice. Elife. 2020 Apr 30;9.
PubMed
Journal
Bruno M, Mahgoub M, Macfarlan TS. The Arms Race Between KRAB-Zinc Finger Proteins and
Endogenous Retroelements and Its Impact on Mammals. Annu Rev Genet. 2019 Dec
3;53:393-416.
PubMed Journal
Mahgoub M, Yasunaga JI, Iwami S, Nakaoka S, Koizumi Y, Shimura K, Matsuoka M. Sporadic
on/off switching of HTLV-1 Tax expression is crucial to maintain the whole population of virus-induced
leukemic cells. Proc Natl Acad Sci U S A. 2018 Feb 6;115(6):E1269-E1278.
PubMed Journal
Furuta R, Yasunaga JI, Miura M, Sugata K, Saito A, Akari H, Ueno T, Takenouchi N, Fujisawa JI, Koh KR,
Higuchi Y, Mahgoub M, Shimizu M, Matsuda F, Melamed A, Bangham CR, Matsuoka M. Human T-cell
leukemia virus type 1 infects multiple lineage hematopoietic cells in vivo. PLoS
Pathog. 2017 Nov;13(11):e1006722.
PubMed
Journal
Sugata K, Yasunaga J, Kinosada H, Mitobe Y, Furuta R, Mahgoub M, Onishi C, Nakashima K,
Ohshima K, Matsuoka M. HTLV-1 Viral Factor HBZ Induces CCR4 to Promote T-cell Migration and Proliferation.
Cancer Res. 2016 Sep 1;76(17):5068-79.
PubMed
Journal
Apart from biology and medicine, I enjoy reading a book while drinking coffee. I am interested in history and fiction books. Carlos Zafon’s masterpiece “The Shadow of the Wind” is my favorite book. I also enjoy learning to code for fun (and to make my life in science easier!)


On 31 December 2019, the WHO China Country Office was informed of cases of pneumonia of unknown etiology (unknown cause) detected in Wuhan City, Hubei Province of China. As of 3 January 2020, a total of 44 patients with pneumonia of unknown etiology have been reported to WHO by the national authorities in China. Of the 44 cases reported, 11 are severely ill, while the remaining 33 patients are in stable condition. According to media reports, the concerned market in Wuhan was closed on 1 January 2020 for environmental sanitation and disinfection.
The causal agent has not yet been identified or confirmed. On 1 January 2020, WHO requested further information from national authorities to assess the risk.
National authorities report that all patients are isolated and receiving treatment in Wuhan medical institutions. The clinical signs and symptoms are mainly fever, with a few patients having difficulty in breathing, and chest radiographs showing invasive lesions of both lungs.
According to the authorities, some patients were operating dealers or vendors in the Huanan Seafood market. Based on the preliminary information from the Chinese investigation team, no evidence of significant human-to-human transmission and no health care worker infections have been reported.
National authorities have reported the following response measures:
WHO is closely monitoring the situation and is in close contact with national authorities in China.
There is limited information to determine the overall risk of this reported cluster of pneumonia of unknown etiology. The reported link to a wholesale fish and live animal market could indicate an exposure link to animals. The symptoms reported among the patients are common to several respiratory diseases, and pneumonia is common in the winter season; however, the occurrence of 44 cases of pneumonia requiring hospitalization clustered in space and time should be handled prudently.
Wuhan city, with a population of 19 million, is the capital city of Hubei province, with a population of 58 million people. WHO has requested further information on the laboratory tests performed and the differential diagnoses considered.
Based on information provided by national authorities, WHO’s recommendations on public health measures and surveillance of influenza and severe acute respiratory infections still apply.
WHO does not recommend any specific measures for travellers. In case of symptoms suggestive of respiratory illness either during or after travel, travellers are encouraged to seek medical attention and share travel history with their healthcare provider.
WHO advises against the application of any travel or trade restrictions on China based on the current information available on this event.
For more information:


On the Homepage, locate the Search box and input the name or
the location of the school you are looking for, and click on the search button.
Alternatively, click on the school link on the top menu to view the list of all schools.
2 - LOCATE
Get to see where the school is located by clicking on the school profile.
It's even more exciting, you can get the direction from anywhere in the country.
3 - APPLY
Apply for your child's interview to the school of your choice. Click on the APPLY button to get
the appliction form. We also follow up on the application to make sure you get a reply on time.
4 - RELAX
Once your child gets adimitted. you can now relax.
You can check out our blog
to see what we recommend when school hunting.
Over 1000 Schools Registered with us.
Find a school by using our filtered search engine.
Find a school nearby
No need to stress yourself looking for schoools in the country
Just click on the search button and you are all set


| dacca {pomp} | R Documentation |
dacca
constructs a ‘pomp’ object containing census and cholera
mortality data from the Dacca district of the former British province of
Bengal over the years 1891 to 1940 together with a stochastic differential
equation transmission model.
The model is that of King et al. (2008).
The parameters are the MLE for the SIRS model with seasonal reservoir.
dacca(
gamma = 20.8,
eps = 19.1,
rho = 0,
delta = 0.02,
deltaI = 0.06,
clin = 1,
alpha = 1,
beta_trend = -0.00498,
logbeta = c(0.747, 6.38, -3.44, 4.23, 3.33, 4.55),
logomega = log(c(0.184, 0.0786, 0.0584, 0.00917, 0.000208, 0.0124)),
sd_beta = 3.13,
tau = 0.23,
S_0 = 0.621,
I_0 = 0.378,
Y_0 = 0,
R1_0 = 0.000843,
R2_0 = 0.000972,
R3_0 = 1.16e-07
)
gamma |
recovery rate |
eps |
rate of waning of immunity for severe infections |
rho |
rate of waning of immunity for inapparent infections |
delta |
baseline mortality rate |
deltaI |
cholera mortality rate |
clin |
fraction of infections that lead to severe infection |
alpha |
transmission function exponent |
beta_trend |
slope of secular trend in transmission |
logbeta |
seasonal transmission rates |
logomega |
seasonal environmental reservoir parameters |
sd_beta |
environmental noise intensity |
tau |
measurement error s.d. |
S_0 |
initial susceptible fraction |
I_0 |
initial fraction of population infected |
Y_0 |
initial fraction of the population in the Y class |
R1_0 , R2_0 , R3_0 |
initial fractions in the respective R classes |
Data are provided courtesy of Dr. Menno J. Bouma, London School of Tropical Medicine and Hygiene.
dacca
returns a ‘pomp’ object containing the model, data, and MLE
parameters, as estimated by King et al. (2008).
A.A. King, E.L. Ionides, M. Pascual, and M.J. Bouma. Inapparent infections and cholera dynamics. Nature 454, 877-880, 2008
More examples provided with pomp:
blowflies
,
childhood_disease_data
,
compartmental_models
,
ebola
,
gompertz()
,
ou2()
,
pomp_examples
,
ricker()
,
rw2()
,
verhulst()
More data sets provided with pomp:
blowflies
,
bsflu
,
childhood_disease_data
,
ebola
,
parus
# takes too long for R CMD check
po <- dacca()
plot(po)
## MLE:
coef(po)
plot(simulate(po))


National Careers Service
We provide information, advice and guidance to help you make decisions on learning, training and work.
We are redesigning this service. If you had a Lifelong Learning Account you can still use your existing details to sign in. You'll be able to view your saved:
- CVs
- Skills health check reports
- action plans
- course searches
Job profiles
Find out what a job involves and if it's right for you.
Skills health check
Use our assessment to find out what kind of jobs could suit you and save your results.
Find a course
Look for courses and learning providers and save information about them.
Contact an adviser
Find out about the different ways to get in touch.
Help to get a job
Get advice on the different stages of a job hunt, including how to improve your interview technique and write an effective CV. You can get help to search for your first job, get back into work or change career direction.


You are initiating process to submit ECE Return for the year "{{vm.fields.this_year}}".
Please carry out following task.
-
Recorded child attendance for the return week
-
Update staff details
-
Ensure all children have been allocated an NSN
-
Record home-based coordinator work hours for the return week (Show this line only when Centre type is set to Homebased)


Hello, there.
Stephanie Yung
I'm a
GitHubber
!
I work on Customer Success
I
really
love—
to hang out with my dog, Oliver!
Elsewhere on the Internet
GitHub
Email me!


I wrote a Python script that lets you loop .mp3 files seamlessly, forever, based on a loop point determined automatically. This means that you can now listen to your favorite video game music on repeat, forever, sounding just like it does in the game! You can download the script here:
What follows is a longer explanation of why I did this and how it works. If you are interested in ad-hoc online communities for handcrafted video game music extensions, digital signal processing, the Fourier Transform, and Super Mario games, then read on.
I love to listen to video game music - especially in the background while doing other things.
Game music is literally made for looping in the background: it gets used in an environment, like a menu or level, where you have no idea how long the player will spend there, and you don't want it to go eerily quiet after a few minutes, but you also don't want to have any noticeable "break" where the song stops and starts again. So you ideally make something that can loop seamlessly, without an audible pause or "hiccup." Also, it should be catchy to listen to, but not so catchy that it distracts the player from the particular game it is supposed to be supporting. Switch out "playing that particular game" for "doing anything else", and you've got perfect ambient music.
But... how do you listen to it while doing something else? You could leave the game itself on pause, playing the audio. This works great, sometimes: Super Smash Bros. Ultimate has such a huge variety of well-composed music that they literally built a music player into the game - which works especially well because that game was released on a console you can carry around with you.
On the other hand, if you want to listen to the music from Super Mario 64 in the background, you will have to drag around a Nintendo 64 and a TV with you. Also, like many other games, that game will stop the music when you pause it. So "use the game itself" is not always a viable option.
No, if you want to listen to game music outside of a game, you probably buy the soundtrack on a CD or a download, and then play it from your phone or your computer. But that's not always perfect either. When you get a soundtrack, you usually get it as a series of audio files, and they're all probably something like 2 to 6 minutes long. Once the 2 to 6 minutes are through, the music stops, usually after fading out to silence.
That's fine - that's how most recorded music works - but if you love game music partly because it's been fine-tuned to play on repeat forever, then only getting 1 or 2 repeats out of it is a crying shame. It's so much a crying shame, in fact, that a community of people on YouTube has literally emerged around hand-crafting 30-minute extensions of game music. Here is a taste of the collective work put in for literally just the Mario games.
30 minutes is better than 3 for putting it on in the background, but it's still short enough that switching between music tracks can get distracting. (I am not the only one who feels this way! Here's the smaller 10-hour community on Youtube, again just for Mario.) You start running into other issues, too. A 30-minute video is a big thing: it takes a lot of space to store, a lot of Internet traffic to download, and a lot of work to stitch together and upload in the first place. And those difficulties are compounded as the track gets longer, which is why there are much fewer 10-hour tracks than 30-minute ones.
These videos are also frequently reported by the game creators as copyright infringment and summarily taken down. This happened a few months ago to BrawlBRSTMs, one of the first accounts to do it for a lot of music tracks, and people were devastated. (There's also a whole separate issue there, which is getting the music in any form at all when game companies are slow to sell soundtracks, but that is another story.)
Finally... doesn't the whole thing feel strangely sub-optimal? You download the soundtrack, and you listen to the music, and you know it was made to loop seamlessly, and making it loop seamlessly feels like it could be done automatically, but you can't, so you have to resort to handcrafted legally questionable YouTube videos, or to carrying a PlayStation in your backpack or something.
I wanted to make something marginally less hacky than those options. More explicitly, I wanted to make a program which does the following:
Most music, including most recorded video game music, is stored in .mp3 files, so that is the format I've focused on supporting here (at least initially.) Decoding .mp3 files into their raw audio data is not trivial, so I used a separate library called mpg123 along with a Python wrapper to perform the decoding.
The .mp3 file gets decoded into what is called pulse-code modulated audio, or PCM audio for short. PCM is just about as close to "looking at sound" as you can get. That is because all the sounds you hear - from ambulance sirens, to gentle babbling brooks, to video game music - is a series of very gentle changes in the pressure of the air. When you hear sound, those differences in pressure cause your eardrum to wiggle, and your brain performs the translation for you. PCM data is essentially just a digitized stream of those pressure readings collected over time. Here is a taste of raw PCM data from one "frame" of a music track:
To use a very rough analogy, PCM data is to speakers as 1s and 0s are to computer memory: this data (or the near-identical analog version of it) is what actually gets fed directly through speakers or read directly through a microphone, but it's in such a raw form that we don't get much information from looking at it in this state. We need it to be in a more usable format - something looking more like sheet music - and it turns out there is a time-honored way to accomplish that.
When you think of sheet music, you think of something like this:
(Source: Mario Piano)
The notes move up and down in pitch over time, giving us a familiar melody. If we can read the above PCM data to get the pitches of the notes being played, then we can get something like this sheet music. But if the PCM data is nothing but pressure over time, how do we obtain the pitch from that?
Pitch, it turns out, is how we perceive frequency, and frequency is just how quickly the pressure varies over time. Looking at the PCM data above, you can see that sometimes it changes very quickly after only a few samples, and then sometimes it takes 20 or 30 samples to change. The quicker the pressure changes, the "higher" of a note your brain will hear. (Within a certain range of frequencies, at least.)
So, that is the conceptual relationship, but how do we actually calculate what our frequencies are? The answer is an extremely influential mathematical technique called the Fourier Transform. In short, the Fourier Transform takes a signal like ours and "decomposes" it into the frequencies that make it up. In long... this video from 3Blue1Brown does a great job explaining the way it actually works, and how it applies not just to sound but to other things as well.
But the practical upshot here is that the Fourier Transform will take the above PCM data and transform it into something closer to the following. (Note that I've also narrowed the data to exclude a bunch of high-frequency noise we won't use):
Where before we had pressure over time, now we have pressure (or, more precisely, the "amplitude" of our changes in pressure) over time. That is certainly less busy - and we can see that one frequency, around 400 Hz, seems to be the most prominent. This is all just information from one "frame" of PCM data. If we take a bunch of frames' Fourier transforms and stack them together to see which frequencies dominate or "light up" over time, we get something like this...
...and if you squint, you may recognize the opening notes of the main theme to Super Mario Bros. in there! But you have to squint hard, because there is some noise in this graph from the .mp3 compression, and from the Fourier Transform. We can simplify a bit by filtering out some of the weak noise and then only recording whichever frequency at each frame has the highest amplitude:
That gives us the same overall "shape" as before, but in a simpler form with less data to process. Now we are in a good place to find out where it loops.
Next, now that we have a simplified set of "sheet music"-like points representing the dominant notes in our audio track, we'll compare different sections of it to find out where it best overlaps. There are lots of options for doing this; the method I've found runs reasonably quickly (within a few seconds for typical music tracks) and obtains a good match for most of the songs I test it on, but I suspect that even faster and/or more accurate methods are possible.
The goal is to find two matching "windows" at separate points in the song - a "start" window, and an "end" window. Then, if we get a good match, we can splice the song together so that, when the "end" window is supposed to begin, the program cuts instead to the beginning of the "start" window. If the windows match, the cut will be imperceptible, giving us the loop we want.
The longer the windows, the better we can be sure that we are matching the whole song, and not just one verse of it. But longer windows also take longer for the program to compare, and if our window is too long, we might not catch any matches at all. I've found that a window of 500 frames strikes a good compromise.
So, we walk through the file, checking pairs of 500-frame windows to get as good a match as possible. The "check" in this case uses NumPy's correlation coefficient function:
81 82 83 84 85 86 87 88 89 90 | def sig_corr(self, s1, s2, comp_length):
"""Calculates the auto-correlation of the track (as compressed into
max_freq) with itself, based on sub-samples starting at frames
s1 and s2, each comp_length frames long."""
# np.corrcoef returns an array of coefficients -
# the simple 'R' value is at row 1, col 0
return np.corrcoef(
self.max_freq[s1:s1+comp_length],
self.max_freq[s2:s2+comp_length])[1, 0]
|
The walking itself happens mostly across possible "end" windows: beginning just after the "start" window, we step one frame at a time to the end of the file, checking for better and better matches. We also try different values of the "start" window, just in case the looping portion actually begins late in the song.
110 111 112 113 114 115 116 117 118 119 120 121 122 123 | max_corr = 0
best_start = None
best_end = None
for start in range(200, len(self.max_freq) - test_len,
int(len(self.max_freq) / 10)):
for end in range(start + 500, len(self.max_freq) - test_len):
sc = self.sig_corr(start, end, test_len)
if sc > max_corr:
best_start = start
best_end = end
max_corr = sc
return (best_start, best_end, max_corr)
|
So how does it work out? For the main theme to Super Mario Bros., we find an excellent match:
Once a loop point is found, all that is left to do is play the file. The mpg123 library comes with a playback library, out123, that makes playback as easy as iterating through the frames:
142 143 144 145 146 147 148 149 150 | i = 0
try:
while True:
out.play(self.frames[i])
i += 1
if i == loop_offset:
i = start_offset
except KeyboardInterrupt:
print() # so that the program ends on a newline
|
This will automatically play the file until it hits the looping point, at which point it will jump (hopefully, and usually, imperceptibly) back to the "start" window.
This was my first time working with audio data, and it was really fun. Audio is a challenging data type to work with - there's a lot to learn up front - but it's satisfying to get results out of, and you can do some really interesting stuff.
Right now, this program only supports .mp3 files with 16-bit encoding. If you would love to see other audio formats, or if you find that the script is botching tracks that it should be able to handle, feel free to drop me a line.
At the time of writing, this works on about 90% of the game music I throw at it. The other 10% is largely songs where the looping portion is small or nonexistent; the program needs something to grab on to. But for music which has a nice, long looping period, it seems to do quite well.
I also wondered whether or not it might somehow handle "ordinary" music tracks with a clear beginning and end, so I tried putting in All Star by Smash Mouth. It couldn't find a good loop point.
Some songs weren't meant to go on forever, I guess.


Why Is Responsive Design So Important: A Brief Look Into a Deep Subject
By Arthur Felipe
July 12, 2021
SUMMARY: Why is software design so important for usability
Sweet jelly beans pastry sweet pudding toffee powder liquorice. Cupcake wafer tootsie roll tiramisu chocolate cake. Cheesecake croissant chocolate. Cupcake topping dessert croissant icing. Gingerbread cake sugar plum chupa chups halvah. Biscuit cookie halvah chocolate oat cake ice cream muffin fruitcake cookie. Fruitcake jelly beans pie chocolate cake biscuit pastry. Gummi bears topping chocolate bar tootsie roll cake jelly-o. Croissant halvah jujubes jelly cake pie donut. Chocolate chocolate soufflé. Dragée marzipan pudding tiramisu pastry sugar plum tiramisu. Cotton candy gummi bears biscuit dessert candy bonbon. Dragée halvah dragée gummies bonbon jujubes apple pie. Gummies tootsie roll liquorice jujubes dragée cotton candy toffee.
But There's a Catch
Sweet jelly beans pastry sweet pudding toffee powder liquorice. Cupcake wafer tootsie roll tiramisu chocolate cake. Cheesecake croissant chocolate. Cupcake topping dessert croissant icing. Gingerbread cake sugar plum chupa chups halvah. Biscuit cookie halvah chocolate oat cake ice cream muffin fruitcake cookie. Fruitcake jelly beans pie chocolate cake biscuit pastry. Gummi bears topping chocolate bar tootsie roll cake jelly-o. Croissant halvah jujubes jelly cake pie donut. Chocolate chocolate soufflé. Dragée marzipan pudding tiramisu pastry sugar plum tiramisu. Cotton candy gummi bears biscuit dessert candy bonbon. Dragée halvah dragée gummies bonbon jujubes apple pie. Gummies tootsie roll liquorice jujubes dragée cotton candy toffee.


001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019package org.apache.shiro.concurrent; 020 021import org.apache.shiro.subject.Subject; 022 023import java.util.ArrayList; 024import java.util.Collection; 025import java.util.List; 026import java.util.concurrent.*; 027 028/** 029 * {@code ExecutorService} implementation that will automatically first associate any argument 030 * {@link Runnable} or {@link Callable} instances with the {@link #getSubject currently available subject} and then 031 * dispatch the Subject-enabled runnable or callable to an underlying delegate 032 * {@link java.util.concurrent.ExecutorService ExecutorService} instance. The principle is the same as the 033 * parent {@link SubjectAwareExecutor} class, but enables the richer {@link ExecutorService} API. 034 * <p/> 035 * This is a simplification for applications that want to execute code as the currently 036 * executing {@code Subject} on another thread, but don't want or need to call the 037 * {@link Subject#associateWith(Runnable)} or {@link Subject#associateWith(Callable)} methods and dispatch them to a 038 * Thread manually. This simplifies code and reduces Shiro dependencies across application source code. 039 * <p/> 040 * Consider this code that could be repeated in many places across an application: 041 * <pre> 042 * {@link Callable Callable} applicationWork = //instantiate or acquire Callable from somewhere 043 * {@link Subject Subject} subject = {@link org.apache.shiro.SecurityUtils SecurityUtils}.{@link org.apache.shiro.SecurityUtils#getSubject() getSubject()}; 044 * {@link Callable Callable} work = subject.{@link Subject#associateWith(Callable) associateWith(applicationWork)}; 045 * {@link ExecutorService anExecutorService}.{@link ExecutorService#submit(Callable) submit(work)}; 046 * </pre> 047 * Instead, if the {@code ExecutorService} instance used at runtime is an instance of this class 048 * (which delegates to the target ExecutorService that you want), all places in code like the above reduce to this: 049 * <pre> 050 * {@link Callable Callable} applicationWork = //instantiate or acquire Callable from somewhere 051 * {@link ExecutorService anExecutorService}.{@link ExecutorService#submit(Callable) submit(work)}; 052 * </pre> 053 * Notice there is no use of the Shiro API in the 2nd code block, encouraging the principle of loose coupling across 054 * your codebase. 055 * 056 * @since 1.0 057 */ 058public class SubjectAwareExecutorService extends SubjectAwareExecutor implements ExecutorService { 059 060 private ExecutorService targetExecutorService; 061 062 public SubjectAwareExecutorService() { 063 } 064 065 public SubjectAwareExecutorService(ExecutorService target) { 066 setTargetExecutorService(target); 067 } 068 069 public ExecutorService getTargetExecutorService() { 070 return targetExecutorService; 071 } 072 073 public void setTargetExecutorService(ExecutorService targetExecutorService) { 074 super.setTargetExecutor(targetExecutorService); 075 this.targetExecutorService = targetExecutorService; 076 } 077 078 @Override 079 public void setTargetExecutor(Executor targetExecutor) { 080 if (!(targetExecutor instanceof ExecutorService)) { 081 String msg = "The " + getClass().getName() + " implementation only accepts " + 082 ExecutorService.class.getName() + " target instances."; 083 throw new IllegalArgumentException(msg); 084 } 085 super.setTargetExecutor(targetExecutor); 086 } 087 088 public void shutdown() { 089 this.targetExecutorService.shutdown(); 090 } 091 092 public List<Runnable> shutdownNow() { 093 return this.targetExecutorService.shutdownNow(); 094 } 095 096 public boolean isShutdown() { 097 return this.targetExecutorService.isShutdown(); 098 } 099 100 public boolean isTerminated() { 101 return this.targetExecutorService.isTerminated(); 102 } 103 104 public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { 105 return this.targetExecutorService.awaitTermination(timeout, unit); 106 } 107 108 protected <T> Callable<T> associateWithSubject(Callable<T> task) { 109 Subject subject = getSubject(); 110 return subject.associateWith(task); 111 } 112 113 public <T> Future<T> submit(Callable<T> task) { 114 Callable<T> work = associateWithSubject(task); 115 return this.targetExecutorService.submit(work); 116 } 117 118 public <T> Future<T> submit(Runnable task, T result) { 119 Runnable work = associateWithSubject(task); 120 return this.targetExecutorService.submit(work, result); 121 } 122 123 public Future<?> submit(Runnable task) { 124 Runnable work = associateWithSubject(task); 125 return this.targetExecutorService.submit(work); 126 } 127 128 protected <T> Collection<Callable<T>> associateWithSubject(Collection<? extends Callable<T>> tasks) { 129 Collection<Callable<T>> workItems = new ArrayList<Callable<T>>(tasks.size()); 130 for (Callable<T> task : tasks) { 131 Callable<T> work = associateWithSubject(task); 132 workItems.add(work); 133 } 134 return workItems; 135 } 136 137 public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException { 138 Collection<Callable<T>> workItems = associateWithSubject(tasks); 139 return this.targetExecutorService.invokeAll(workItems); 140 } 141 142 public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) 143 throws InterruptedException { 144 Collection<Callable<T>> workItems = associateWithSubject(tasks); 145 return this.targetExecutorService.invokeAll(workItems, timeout, unit); 146 } 147 148 public <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException { 149 Collection<Callable<T>> workItems = associateWithSubject(tasks); 150 return this.targetExecutorService.invokeAny(workItems); 151 } 152 153 public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) 154 throws InterruptedException, ExecutionException, TimeoutException { 155 Collection<Callable<T>> workItems = associateWithSubject(tasks); 156 return this.targetExecutorService.invokeAny(workItems, timeout, unit); 157 } 158}


Whoa, your good!
Click to play again
Haha, Loser!!
Click to play again
No winner!!
Click to play again


These self-contained instructions show how to install Clozure CL on Linux. They might be a bit more convenient for ACL2 users than those on the "Installing Clozure CL" page. A table on that page shows how to make small changes in the names below if your platform is other than Linxu, e.g., Mac OS X (Darwin).
# Initially, in a fresh directory: # git clone https://github.com/Clozure/ccl # Rename that directory suitably, e.g., using the # first 10 hex digits of the commit hash: cd ccl git rev-parse HEAD cd ../../ # Change directory name, and then go back to ccl directory: # NOTE!! Change the name below (e.g., its date and hash) as # appropriate, twice here and once further below. mv temp 2017-12-07-6be8298fe5 cd 2017-12-07-6be8298fe5/ccl # Build the lisp kernel in the appropriate directory: cd lisp-kernel/linuxx8664/ make clean && make # Move back to ccl directory and fetch/unpack the heap image. cd ../../ # If you don't have wget (e.g., on a Mac), skip this wget command and see just below). wget https://github.com/Clozure/ccl/releases/download/v1.12-dev.1/linuxx86.tar.gz # Or instead, if you don't have wget, e.g. on a Mac: # curl --location https://github.com/Clozure/ccl/releases/download/v1.12-dev.1/darwinx86.tar.gz > darwinx86.tar.gz tar xfz linuxx86.tar.gz # Rebuild the kernel: ./lx86cl64 # This welcomes you, e.g.: # Clozure Common Lisp Version 1.12-dev/v1.12-dev.1 (LinuxX8664) # Now submit this command: ? (rebuild-ccl :full t) # After it returns, quit: ? (quit) # Now, back at the shell, rebuild the kernel again just to be safe: ./lx86cl64 ? (rebuild-ccl :full t) ? (quit)
#!/bin/sh export CCL_DEFAULT_DIRECTORY=/projects/acl2/lisps/ccl/2017-12-07-6be8298fe5/ccl ${CCL_DEFAULT_DIRECTORY}/scripts/ccl64 "$@"
chmod +x my-script


Like Ruby, JavaScrip has ways of storing a collection of data. One way you can store a collection of data in Ruby is through hashes. Hashes use a key and value index that allows you to call on the key to access the value within the hash. You can also create the hash using symbols. The nice thing about storing a collection in a hash is that you don't have to use a number index like you would in arrays, but instead you can use any object type as your index. Similar to hashes in Ruby, in JavaScript you have objects. Objects are containers for named values. These named values are called properties. Objects, like hashes, do not use a number index. Though objects and hashes are very similar, there are differences in their structure and syntax, but rather than telling you, I have listed both an object and hash below. I used the same information on both the hash and object.
//JavaScript Object
//Ruby Hash (symbol index)
Below is an example of how you would access a property within an object and a value within a hash. In the example they will both return "Alan".
//JavaScrip Object
person.firstName
//Ruby Hash (symbol index)
person[:first_name]
As you can see from the examples listed above that they work very similarly. Of course, there are some subtle differences due to the syntax that comes with their respective languages. Both are great ways of containing a collection of data. Hopefully this has been helpful in understanding the similarities and differences between Ruby hashes and JavaScript Objects.


In search of a new car, the player picks a door, say 1. The game host then opens one of the other doors, say 3, to reveal a goat and offers to let the player pick door 2 instead of door 1. The Monty Hall problem is a brain teaser, in the form of a probability puzzle (Gruber, Krauss and others), loosely based on the American television game show Let's Make a Deal and named after its original host, Monty Hall. The problem was originally posed in a letter by Steve Selvin to the American Statistician in 1975 (Selvin 1975a), (Selvin 1975b). It became famous as a question from a reader's letter quoted in Marilyn vos Savant's "Ask Marilyn" column in Parade magazine in 1990 (vos Savant 1990a):
Suppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat. He then says to you, "Do you want to pick door No. 2?" Is it to your advantage to switch your choice?
Vos Savant's response was that the contestant should switch to the other door. (vos Savant 1990a) Contestants who switch have a 2/3 chance of winning the car, while contestants who stick to their choice have only a 1/3 chance.
Many readers of vos Savant's column refused to believe switching is beneficial despite her explanation. After the problem appeared in Parade, approximately 10,000 readers, including nearly 1,000 with PhDs, wrote to the magazine, most of them claiming vos Savant was wrong (Tierney 1991). Even when given explanations, simulations, and formal mathematical proofs, many people still do not accept that switching is the best strategy (vos Savant 1991a). Paul Erdős, one of the most prolific mathematicians in history, remained unconvinced until he was shown a computer simulation confirming the predicted result (Vazsonyi 1999).
The problem is a paradox of the veridical type, because the correct result (you should switch doors) is so counterintuitive it can seem absurd, but is nevertheless demonstrably true. The Monty Hall problem is mathematically closely related to the earlier Three Prisoners problem and to the much older Bertrand's box paradox.
Watch this numberphilie video about the Monty Hall Problem!
You can see the source code for this experiment on github.
| Wins | Loses | Total | Total matches | |
| Change Door | 0 | 0 | 0 | 0 |
| Without change door | 0 | 0 | 0 |


1 /** 2 * Abstract; not implemented. There is no explicit constructor; this class 3 * merely serves to document the representation used by {@link pv.Geo.scale}. 4 * 5 * @class Represents a geographic projection. This class provides the core 6 * implementation for {@link pv.Geo.scale}s, mapping between geographic 7 * coordinates (latitude and longitude) and normalized screen space in the range 8 * [-1,1]. The remaining mapping between normalized screen space and actual 9 * pixels is performed by <tt>pv.Geo.scale</tt>. 10 * 11 *
Many geographic projections have a point around which the projection is 12 * centered. Rather than have each implementation add support for a 13 * user-specified center point, the <tt>pv.Geo.scale</tt> translates the 14 * geographic coordinates relative to the center point for both the forward and 15 * inverse projection. 16 * 17 *
In general, this class should not be used directly, unless the desire is 18 * to implement a new geographic projection. Instead, use <tt>pv.Geo.scale</tt>. 19 * Implementations are not required to implement inverse projections, but are 20 * needed for some forms of interactivity. Also note that some inverse 21 * projections are ambiguous, such as the connecting points in Dymaxian maps. 22 * 23 * @name pv.Geo.Projection 24 * @see pv.Geo.scale 25 */ 26 27 /** 28 * The forward projection. 29 * 30 * @function 31 * @name pv.Geo.Projection.prototype.project 32 * @param {pv.Geo.LatLng} latlng the latitude and longitude to project. 33 * @returns {pv.Vector} the xy-coordinates of the given point. 34 */ 35 36 /** 37 * The inverse projection; optional. 38 * 39 * @function 40 * @name pv.Geo.Projection.prototype.invert 41 * @param {pv.Vector} xy the x- and y-coordinates to invert. 42 * @returns {pv.Geo.LatLng} the latitude and longitude of the given point. 43 */ 44


--- title: Generic List Operations keywords: fastai sidebar: home_sidebar summary: "This module houses generic operations on data held in lists." description: "This module houses generic operations on data held in lists." nb_path: "nbs/list.ipynb" ---
To start, Python already has the reduce()
function in the functools
library, but reduce
is strictly less powerful than fold
) insofar as it is designed to stay within the type boundary. That is, reduce
takes a callable of type (A, A) -> A
, while fold
can break through the type boundary by taking a callable of (B, A) -> B
. In some cases, Python's reduce
seems to handle this just fine, but it isn't consistent. We can take care of this by forcing the developer to adhere to the contract in fold
.
Note that Python does not natively support tail call elimination. Consequently, we must be mindful of blowing the stack. The imperative implementations of a normally recursive approach is motivated by this concern.
The fold
pattern is quite generic. It can be used to simply add numbers up...
xs: List[int] = list(range(5))
xs_sum: int = foldl_list(xs, 0, lambda b, a: b + a)
xs_sum
assert foldl_list(xs, 0, lambda b, a: b + a) == 10 # This actually gets run when we run the test suite
... it can also be used to convert data between different type representations.
@dataclass
class Foo:
value: int
even: bool = field(default_factory=bool)
def __post_init__(self) -> None:
self.even = self.value % 2 == 0
def allocate(out: Dict[str, List[Foo]], next_i: int) -> Dict[str, List[Foo]]:
f: Foo = Foo(next_i)
if f.even:
out.update({"even": out["even"] + [f]})
else:
out.update({"odd": out["odd"] + [f]})
return out
xs_to_foos: Dict[str, List[Foo]] = foldl_list(xs, {"even": [], "odd": []}, allocate)
xs_to_foos
As can be seen, the transformation is arbitrary. What makes this pattern powerful is that allows us to focus on a single transformation while fold
takes care of traversal.
The l
is foldl_list
indicates that we are folding from the left, in the sense that we are updating our output value and carrying forward to the next value in the list. We can also fold from the right. Effectively, we wait until the last stack frame before resolving any of the calls. It is harder to avoid a recursive approach here, so we should use it with caution.
foldr_list
is deployed in a very similar fashion to foldl_list
.
xs_sum2: int = foldr_list(xs, 0, lambda a, b: a + b)
xs_sum2
assert foldr_list(xs, 0, lambda a, b: a + b) == 10
However, there is a difference that is more apparent when order is important. Suppose we wanted to use fold
to implement a mapping operating. We can note that folding right will reverse the order unless we go out of our way to prevent it.
map_left: Callable[[List[int], int], List[int]] = lambda b, a: b + [a]
map_right: Callable[[int, List[int]], List[int]] = lambda a, b: b + [a]
foldl_list(xs, [], map_left), foldr_list(xs, [], map_right)
Given the concern about stack overflows, defaulting to foldl_list
is a reasonable bias. The onus should be on the developer to demonstrate that foldr_list
is more appropriate.


Split a column into tokens using the tokenizers package, splitting the table into one-token-per-row. This function supports non-standard evaluation through the tidyeval framework.
unnest_tokens(tbl, output, input, token = "words", format = c("text", "man", "latex", "html", "xml"), to_lower = TRUE, drop = TRUE, collapse = NULL, ...)
| tbl | A data frame |
|---|---|
| output | Output column to be created as string or symbol. |
| input | Input column that gets split as string or symbol. The output/input arguments are passed by expression and support quasiquotation; you can unquote strings and symbols. |
| token | Unit for tokenizing, or a custom tokenizing function. Built-in options are "words" (default), "characters", "character_shingles", "ngrams", "skip_ngrams", "sentences", "lines", "paragraphs", "regex", "tweets" (tokenization by word that preserves usernames, hashtags, and URLS ), and "ptb" (Penn Treebank). If a function, should take a character vector and return a list of character vectors of the same length. |
| format | Either "text", "man", "latex", "html", or "xml". If not text, this uses the hunspell tokenizer, and can tokenize only by "word" |
| to_lower | Whether to convert tokens to lowercase. If tokens include
URLS (such as with |
| drop | Whether original input column should get dropped. Ignored if the original input and new output column have the same name. |
| collapse | Whether to combine text with newlines first in case tokens (such as sentences or paragraphs) span multiple lines. If NULL, collapses when token method is "ngrams", "skip_ngrams", "sentences", "lines", "paragraphs", or "regex". |
| ... | Extra arguments passed on to tokenizers, such
as |
If the unit for tokenizing is ngrams, skip_ngrams, sentences, lines,
paragraphs, or regex, the entire input will be collapsed together before
tokenizing unless collapse = FALSE
.
If format is anything other than "text", this uses the
hunspell_parse
tokenizer instead of the tokenizers package.
This does not yet have support for tokenizing by any unit other than words.
#> # A tibble: 13,030 x 1 #> txt #> <chr> #> 1 PRIDE AND PREJUDICE #> 2 "" #> 3 By Jane Austen #> 4 "" #> 5 "" #> 6 "" #> 7 Chapter 1 #> 8 "" #> 9 "" #> 10 It is a truth universally acknowledged, that a single man in possession #> # … with 13,020 more rowsd %>% unnest_tokens(word, txt)#> # A tibble: 122,204 x 1 #> word #> <chr> #> 1 pride #> 2 and #> 3 prejudice #> 4 by #> 5 jane #> 6 austen #> 7 chapter #> 8 1 #> 9 it #> 10 is #> # … with 122,194 more rowsd %>% unnest_tokens(sentence, txt, token = "sentences")#> # A tibble: 7,066 x 1 #> sentence #> <chr> #> 1 pride and prejudice by jane austen chapter 1 it is a truth universally… #> 2 however little known the feelings or views of such a man may be on his first… #> 3 "\"my dear mr." #> 4 "bennet,\" said his lady to him one day, \"have you heard that netherfield p… #> 5 mr. #> 6 bennet replied that he had not. #> 7 "\"but it is,\" returned she; \"for mrs." #> 8 "long has just been here, and she told me all about it.\"" #> 9 mr. #> 10 bennet made no answer. #> # … with 7,056 more rowsd %>% unnest_tokens(ngram, txt, token = "ngrams", n = 2)#> # A tibble: 122,203 x 1 #> ngram #> <chr> #> 1 pride and #> 2 and prejudice #> 3 prejudice by #> 4 by jane #> 5 jane austen #> 6 austen chapter #> 7 chapter 1 #> 8 1 it #> 9 it is #> 10 is a #> # … with 122,193 more rowsd %>% unnest_tokens(chapter, txt, token = "regex", pattern = "Chapter [\\d]")#> # A tibble: 62 x 1 #> chapter #> <chr> #> 1 "pride and prejudice\n\nby jane austen\n\n\n\n" #> 2 "\n\n\nit is a truth universally acknowledged, that a single man in possessi… #> 3 "\n\n\nmr. bennet was among the earliest of those who waited on mr. bingley.… #> 4 "\n\n\nnot all that mrs. bennet, however, with the assistance of her five\nd… #> 5 "\n\n\nwhen jane and elizabeth were alone, the former, who had been cautious… #> 6 "\n\n\nwithin a short walk of longbourn lived a family with whom the bennets… #> 7 "\n\n\nthe ladies of longbourn soon waited on those of netherfield. the visi… #> 8 "\n\n\nmr. bennet's property consisted almost entirely in an estate of two\n… #> 9 "\n\n\nat five o'clock the two ladies retired to dress, and at half-past six… #> 10 "\n\n\nelizabeth passed the chief of the night in her sister's room, and in … #> # … with 52 more rowsd %>% unnest_tokens(shingle, txt, token = "character_shingles", n = 4)#> # A tibble: 536,526 x 1 #> shingle #> <chr> #> 1 prid #> 2 ride #> 3 idea #> 4 dean #> 5 eand #> 6 andp #> 7 ndpr #> 8 dpre #> 9 prej #> 10 reju #> # … with 536,516 more rows#> # A tibble: 124,032 x 1 #> word #> <chr> #> 1 pride #> 2 and #> 3 prejudice #> 4 "" #> 5 by #> 6 jane #> 7 austen #> 8 "" #> 9 "" #> 10 "" #> # … with 124,022 more rows# tokenize HTML h <- tibble(row = 1:2, text = c("
Text is", "here")) h %>% unnest_tokens(word, text, format = "html")#> # A tibble: 3 x 2 #> row word #> <int> <chr> #> 1 1 text #> 2 1 is #> 3 2 here


| Pedigree of : |
| Am Can Ch Staghorn's Bearridge Caliber (Callie - a.k.a. Sally) |
| Born: January 28, 2006. |
|
Ch BNB's Flash |
Ch Tormentil Chaiblais Charlie Lad |
BISS Am/Can Ch Wiscoy Noah
|
BISS Am/Can Ch Linrays Over The Top |
| Ch Wiscoys Skyes T'Limit | |||
|
Ch Toplicht Fleur's Charlee My Girl |
Multi Dual Ch Carromer Charlie Chalk | ||
| Toplicht Bonny's Amber Fleur | |||
|
Ch BNB's Cultured Catch
|
Nyroca's Instant Message JH
|
BIS Ch Balcrofts Silonas Time To Reign | |
|
Ch JNyroca's Polly Pocket
|
|||
|
Ch BNB's Diamond in the Ruff
|
Am/Can Ch Zane Hills Nine One One | ||
| Ch Highcaliber Alexandrite at BNB Am/Can CD WC |
|
Parents
|
Grand Parents
|
Great Grand Parents
|
Great Great Grand Parents
|
|
Ch BNB's Plaid Skirt At Staghorn |
Winterwinds Tartan
Plaid
|
Am Ch Valleywood
Vagabond
|
Am Ch Tabatha's Drifter At Dickendall JH |
| Am Ch Valleywood Nightmoves | |||
|
Rozzay's Winterwind
A WhistlinI
|
Am Ch Moraines Malcolm
At Zinfindel
|
||
|
Muskelunges Happiness
Is
|
|||
|
Ch Ashstone's Dallas
at BNB
|
Am Ch Dickendall
Arnold
|
Am Ch Dickendall's Ruffy SH | |
| Dickendall's A-Ha | |||
|
Ch Ashstone's Ivory
Lace
|
Am Ch Borador's Carondelet Risk | ||
| Ch Corhampton's Victorian Lace |
Copyright © 2000 - 2008 Harold
deGroot - Last Update :
April 4, 2010
All Rights Reserved
Webmaster: webmaster@staghorn-labs.com


| T. Nixon |
System Architect |
Edinburgh |
61 |
Mon 25th Apr 11 |
$320,800/y |
| G. Winters |
Accountant |
Tokyo |
63 |
Mon 25th Jul 11 |
$170,750/y |
| A. Cox |
Junior Technical Author |
San Francisco |
66 |
Mon 12th Jan 09 |
$86,000/y |
| C. Kelly |
Senior Javascript Developer |
Edinburgh |
22 |
Thu 29th Mar 12 |
$433,060/y |
| A. Satou |
Accountant |
Tokyo |
33 |
Fri 28th Nov 08 |
$162,700/y |
| B. Williamson |
Integration Specialist |
New York |
61 |
Sun 2nd Dec 12 |
$372,000/y |
| H. Chandler |
Sales Assistant |
San Francisco |
59 |
Mon 6th Aug 12 |
$137,500/y |
| R. Davidson |
Integration Specialist |
Tokyo |
55 |
Thu 14th Oct 10 |
$327,900/y |
| C. Hurst |
Javascript Developer |
San Francisco |
39 |
Tue 15th Sep 09 |
$205,500/y |
| S. Frost |
Software Engineer |
Edinburgh |
23 |
Sat 13th Dec 08 |
$103,600/y |
| J. Gaines |
Office Manager |
London |
30 |
Fri 19th Dec 08 |
$90,560/y |
| Q. Flynn |
Support Lead |
Edinburgh |
22 |
Sun 3rd Mar 13 |
$342,000/y |
| C. Marshall |
Regional Director |
San Francisco |
36 |
Thu 16th Oct 08 |
$470,600/y |
| H. Kennedy |
Senior Marketing Designer |
London |
43 |
Tue 18th Dec 12 |
$313,500/y |
| T. Fitzpatrick |
Regional Director |
London |
19 |
Wed 17th Mar 10 |
$385,750/y |
| M. Silva |
Marketing Designer |
London |
66 |
Tue 27th Nov 12 |
$198,500/y |
| P. Byrd |
Chief Financial Officer (CFO) |
New York |
64 |
Wed 9th Jun 10 |
$725,000/y |
| G. Little |
Systems Administrator |
New York |
59 |
Fri 10th Apr 09 |
$237,500/y |
| B. Greer |
Software Engineer |
London |
41 |
Sat 13th Oct 12 |
$132,000/y |
| D. Rios |
Personnel Lead |
Edinburgh |
35 |
Wed 26th Sep 12 |
$217,500/y |
| J. Caldwell |
Development Lead |
New York |
30 |
Sat 3rd Sep 11 |
$345,000/y |
| Y. Berry |
Chief Marketing Officer (CMO) |
New York |
40 |
Thu 25th Jun 09 |
$675,000/y |
| C. Vance |
Pre-Sales Support |
New York |
21 |
Mon 12th Dec 11 |
$106,450/y |
| D. Wilder |
Sales Assistant |
Sidney |
23 |
Mon 20th Sep 10 |
$85,600/y |
| A. Ramos |
Chief Executive Officer (CEO) |
London |
47 |
Fri 9th Oct 09 |
$1,200,000/y |
| G. Joyce |
Developer |
Edinburgh |
42 |
Wed 22nd Dec 10 |
$92,575/y |
| J. Chang |
Regional Director |
Singapore |
28 |
Sun 14th Nov 10 |
$357,650/y |
| B. Wagner |
Software Engineer |
San Francisco |
28 |
Tue 7th Jun 11 |
$206,850/y |
| F. Green |
Chief Operating Officer (COO) |
San Francisco |
48 |
Thu 11th Mar 10 |
$850,000/y |
| S. Itou |
Regional Marketing |
Tokyo |
20 |
Sun 14th Aug 11 |
$163,000/y |
| M. House |
Integration Specialist |
Sidney |
37 |
Thu 2nd Jun 11 |
$95,400/y |
| S. Burks |
Developer |
London |
53 |
Thu 22nd Oct 09 |
$114,500/y |
| P. Bartlett |
Technical Author |
London |
27 |
Sat 7th May 11 |
$145,000/y |
| G. Cortez |
Team Leader |
San Francisco |
22 |
Sun 26th Oct 08 |
$235,500/y |
| M. Mccray |
Post-Sales support |
Edinburgh |
46 |
Wed 9th Mar 11 |
$324,050/y |
| U. Butler |
Marketing Designer |
San Francisco |
47 |
Wed 9th Dec 09 |
$85,675/y |
| H. Hatfield |
Office Manager |
San Francisco |
51 |
Tue 16th Dec 08 |
$164,500/y |
| H. Fuentes |
Secretary |
San Francisco |
41 |
Fri 12th Feb 10 |
$109,850/y |
| V. Harrell |
Financial Controller |
San Francisco |
62 |
Sat 14th Feb 09 |
$452,500/y |
| T. Mooney |
Office Manager |
London |
37 |
Thu 11th Dec 08 |
$136,200/y |
| J. Bradshaw |
Director |
New York |
65 |
Fri 26th Sep 08 |
$645,750/y |
| O. Liang |
Support Engineer |
Singapore |
64 |
Thu 3rd Feb 11 |
$234,500/y |
| B. Nash |
Software Engineer |
London |
38 |
Tue 3rd May 11 |
$163,500/y |
| S. Yamamoto |
Support Engineer |
Tokyo |
37 |
Wed 19th Aug 09 |
$139,575/y |
| T. Walton |
Developer |
New York |
61 |
Sun 11th Aug 13 |
$98,540/y |
| F. Camacho |
Support Engineer |
San Francisco |
47 |
Tue 7th Jul 09 |
$87,500/y |
| S. Baldwin |
Data Coordinator |
Singapore |
64 |
Mon 9th Apr 12 |
$138,575/y |
| Z. Frank |
Software Engineer |
New York |
63 |
Mon 4th Jan 10 |
$125,250/y |
| Z. Serrano |
Software Engineer |
San Francisco |
56 |
Fri 1st Jun 12 |
$115,000/y |
| J. Acosta |
Junior Javascript Developer |
Edinburgh |
43 |
Fri 1st Feb 13 |
$75,650/y |
| C. Stevens |
Sales Assistant |
New York |
46 |
Tue 6th Dec 11 |
$145,600/y |
| H. Butler |
Regional Director |
London |
47 |
Mon 21st Mar 11 |
$356,250/y |
| L. Greer |
Systems Administrator |
London |
21 |
Fri 27th Feb 09 |
$103,500/y |
| J. Alexander |
Developer |
San Francisco |
30 |
Wed 14th Jul 10 |
$86,500/y |
| S. Decker |
Regional Director |
Edinburgh |
51 |
Thu 13th Nov 08 |
$183,000/y |
| M. Bruce |
Javascript Developer |
Singapore |
29 |
Mon 27th Jun 11 |
$183,000/y |
| D. Snider |
Customer Support |
New York |
27 |
Tue 25th Jan 11 |
$112,000/y |


Theo Armour on GitHub
Here are links to demo files for repositories with source code available at GitHub
Jaanga
Application and source code for jaanga.com
Threo.js
Demos and source code in support of the wonderful three.js
Explayrimental
Odds and ends added just for the fun of it...


Souslesens Search admin
| index type |
| rootDir | |
| mongo DB | |
| mongo Collection | |
| mongoQuery | |
|
size
seed word minWordLength filters lemme WordNetEntities GoogleEntities Extracted Entities |
found entities |
|
selected entities |
|
ontologies
lang |
Generated Thesaurus |
Your Thesaurus |
thesaurus
|


*** DEMONSTRATION VERSION ONLY ***
This Registry is for demonstration purposes only. The current content of the Registry is provided only to demonstrate the features and capabilities of the Registry software.
The Registry content should NOT be used for any other purposes.
In no way should the content be considered valid data!
Registry (ISOGR)
Der Benutzer wurde erfolgreich angelegt
Der Benutzer wurde erfolgreich angelegt
Der Benutzer wurde gelöscht.
The ISO Geodetic Registry is a structured database of coordinate reference systems (CRS) and transformations that is accessible through this online registry system. The Register includes only systems and transformations of international application. It does not include all possible coordinate reference systems and transformations.
This Registry is provided under the auspices of ISO Technical Committee 211 on geographic information/geomatics and conforms to the following ISO standards:
- ISO 19111:2007 (Spatial referencing by coordinates)
- ISO 19127:2019 (Geodetic register)
- ISO 19135-1:2015 (Procedures for item registration -- Part 1: Fundamentals)
Work is also underway to upgrade the Registry to conform to the recently revised ISO 19111:2019 standard, which includes support for dynamic datums and geoid-based datums.
July 2022: ISO/TC 211, OGC and IOGP have jointly published the "Guide to Coordinate Reference System (CRS) Resources". The guide describes basic information and the intended purposes of the three authoritative CRS registers: EPSG, ISO Geodetic and OGC CRS registries, for the user community.
Usage and license
The Registry may be used free of charge but its use is subject to acceptance of the Terms of Use. Use of the Registry implies acceptance of these Terms of Use.
Users of the Registry may query and view data and generate reports via anonymous guest access. Only approved authoritative agencies may submit proposals for new additions or clarifications to the Registry. Authoritative agencies may request to register for submissions using the Feedback page.
Registration Authority
Ribose was appointed as Registration Authority of the ISO Geodetic Register by ISO in 2019 in accordance to ISO/TMB resolution 4/2019 and ISO/TC 211 Resolution 912. As Registration Authority, Ribose is responsible for providing registration services for the ISO Geodetic Register following the ISO 19127 International Standard.
Contacting us
If you encounter issues or have any questions about the ISO Geodetic Register, please use the Feedback page to submit them. A member of the team will reach out to you directly.
Sponsors
The ISO Geodetic Register is made available to the public free of charge with financial support provided by the following sponsors:


Analytical Graphs
Select Graph Type
Chart
BarChart
PieChart
Graph
ForceGraph
Sankey
Tree
RoundTree
DendroGram
TreeMap
SunBurst
CirclePack
Query
Show


Limau Resort is a welcoming, cosy and stylish hotel convinietly located at the base of mount Kenya and ensures privacy, quietness and tranquil environment


Eddie Stobart given breathing space by creditors ahead of takeover vote
by Harry RobertsonStruggling haulier Eddie Stobart has been given more than a year’s extra time to get its finances in order by its creditors as it prepares to put a takeover deal to its shareholders.
Allied Irish Bank, Bank of Ireland, BNP Paribas, and KBC – who are owed £200m between them – will postpone loan repayments until next summer and not put Eddie Stobart’s finances through rigorous checks until 2021.
Read more: Eddie Stobart agrees to £55m rescue package
The plan, first reported by the Sunday Telegraph, was initiated by Dbay Advisors, an Isle of Man investment group that has offered an emergency loan in a bid to gain control of Eddie Stobart.
Dbay’s bid for the company was given a major boost on Friday when advisory group Pirc recommended Eddie Stobart shareholders vote for the deal.
The £55m high-interest loan is part of a takeover deal that has been approved by Eddie Stobart’s board but will be voted on by shareholders on 6 December.
The deal would see Dbay regain control of Eddie Stobart, which it floated in 2017, and try to turn around the scandal-hit firm.
The haulier has been in crisis since auditors revealed a number of accounting discrepancies three months ago. Accountants PwC are yet to finalise and sign off the firm’s accounts for the half-year to May.
Eddie Stobart’s shares were suspended from trading on the London Stock Exchange’s Aim market and its chief executive Alex Laffey stood down.


Debonairs Online Pizza
Welcome to our online portal
Make your order here
Size:
Small
Medium
Large
Crust type:
Cracker Crust
Thin Crust
Stuffed Crust
Cheese Crust
Toppings:
Margherita
BBG Chicken
Buffalo
Pepperoni
Veggie
Cheese
Meat
Supreme
Add another pizza
Order pizza(s)
Delivery Options
Delivery cost of ksh 100 outside CBD
Yes
No
Confirm


WebSite http://landenlabs.com/code/javatree
Github https://github.com/landenlabs/javatree
Sample Android class tree diagrams, tables and direct graphs http://landenlabs.com/android/classtree/classtree.html
javatree (v1.4) Des: Generate Java class dependence tree (Dec 30 2017) Use: Javatree [-+ntgxshjz] header_files...Switches (*=default)(-=off, +=on): n ; Show alphabetic class name list * t ; Show class dependency tree
Output format (single choice): * g ; Use graphics for tree connections x ; Use (+|-) for tree connections s ; Use spaces for tree connections h ; Html tree connections (needs images 0.png, 1.png, 2.png, n.png) j ; Java tree connections (needs dtree www.destroydrop.com/javascript/tree/) z ; GraphViz (see https://graphviz.gitlab.io/)
Modifiers: Z ; Split GraphViz by tree, use with -O N=nodesPerFile ; Split by nodes per file, use with -O O=outpath ; Save output in file T=tabular ; Tabular html V=filePattern ; Ignore files A=allClasses ; Defaults to public F=full path ; Defaults to relative
Examples (assumes java source code in directory src): javatree -t +n src\*.java ; *.java prevent recursion javatree -x src > javaTree.txt javatree -h src > javaTree.html javatree -h -T src > javaTable.html javatree -j src > javaTreeWithJs.html
-V is case sensitive javatree -z -Z -O=.\viz\ -V=*Test* -V=*Exception* src >directgraph.dot javatree -z -N=10 -O=.\viz\ -V=*Test* -V=*Exception* src >directgraph.dot
#!/bin/csh -f # # Generate test reports # javatree test > reports/windows.txt javatree -h test > reports/html.html javatree -h -T test > reports/tabular.html javatree -x test > reports/text.txt javatree -t +n test > reports/list.txt javatree -j test > reports/tree.html javatree -z test > reports/directgraph.dot
javatree -h test > reports/html.html
The above html report needs several png images to correctly display the page.
javatree -h -T test > reports/tabular.html
Uses jquery table. Links to include jquery script are autogenerated.
javatree -x test > reports/text.txt
javatree -t +n test > reports/list.txt
javatree -j test > reports/tree.html
Needs dtree java script www.destroydrop.com/javascript/tree/
javatree -z test > reports/directgraph.dot
neato -Tpng reports/directgraph.dot > images/directgraph.png
Needs Graphviz to render dot as an image, https://graphviz.gitlab.io


@(page: model.Page)(implicit request: RequestHeader)
@import model.EmailAddons.EmailContentType
|
|
Thank you to all of you who have generously supported The Guardian’s journalism. Support from our readers helps protect our essential editorial independence, so if you value what we do, please support The Guardian today. Thank you.
|
|


{% extends "layout.html" %} {% block page_title %} GOV.UK prototype kit {% endblock %} {% block content %} {% include "includes/phase_banner_beta.html" %} Back to team members Invite a team member Invite somebody to access this levy account. password Email An invitation will be sent to this email address. Full name Team member access Team member access Choose the level of access this user can have. Can view financial information but can't make changes Can create and stop payments and view financial information Everything - they're the owner Send invitation {% endblock %}
Invite somebody to access this levy account.
Choose the level of access this user can have.


public class Config
extends java.lang.Object
A Utility class containing all the configurations required
| Modifier and Type | Field and Description |
|---|---|
static int |
BUFFERING
The
int represents how many buffers should be user in the @link BufferStrategy |
static java.awt.Color |
DEFAULT_BG_COLOR
The
Color represents the default Fill color for the Fillable . |
static java.awt.Dimension |
DEFAULT_DIMENSION
The
int represents the default dimension of the window |
static java.awt.Color |
DEFAULT_FILL_COLOR
The
Color represents the default fill color for Fillable . |
static RendererType |
DEFAULT_RENDERER
The
RendererType represents the default Renderer |
static java.awt.Color |
DEFAULT_STROKE_COLOR
The
Color represents the default stroke color for the Strokable . |
static int |
DEFAULT_STROKE_THINKNESS
The
int represents the default stroke thickness for the Strokable . |
static java.lang.String |
LIBRARY_NAME
The
String is self explanatory |
static int |
MIN_SIZE
The
int represents the minimum possible size of the window (in square form) |
public static final int MIN_SIZE
int
represents the minimum possible size of the window (in square form)AbstractCanvas.setDimension(Dimension)
,
Dimension
,
Constant Field Valuespublic static final int BUFFERING
int
represents how many buffers should be user in the @link BufferStrategyBufferStrategy.BufferStrategy()
,
Renderer.render(Graphics)
,
Constant Field Valuespublic static final java.awt.Color DEFAULT_FILL_COLOR
Color
represents the default fill color for Fillable
.Fillable.fill(Color)
public static final java.awt.Color DEFAULT_BG_COLOR
Color
represents the default Fill color for the Fillable
.Fillable.fill(Color)
public static final java.awt.Color DEFAULT_STROKE_COLOR
Color
represents the default stroke color for the Strokable
.Strokable.stroke(Color, int)
public static final int DEFAULT_STROKE_THINKNESS
int
represents the default stroke thickness for the Strokable
.public static final java.lang.String LIBRARY_NAME
String
is self explanatorypublic static java.awt.Dimension DEFAULT_DIMENSION
int
represents the default dimension of the windowAbstractCanvas.setDimension(Dimension)
,
Dimension
public static RendererType DEFAULT_RENDERER
RendererType
represents the default Renderer
RendererType
,
Renderer


This component provides features added to PHP 8.0 core:
Stringable
interfacefdiv
ValueError
classFILTER_VALIDATE_BOOL
constantget_debug_type
preg_last_error_msg
str_contains
str_starts_with
str_ends_with
get_resource_id
More information can be found in the main Polyfill README.
This library is released under the MIT license.


Nanogen
Minimalist static site generator, powered by Node.js
Features
- Generate HTML pages from EJS and/or Markdown files.
- The site can have a global layout (the common header, navigation, footer) and some pages may have a specific one.
- It can read site metadata from a global file and have specific data for individual pages.
- Allow partials (blocks of reusable interface components)
Getting started
Prerequisites
- Node.js installed (version 8 or above)
Install
You may install it globally with:
npm i -g nanogen
Or run the cli directly with npx (available with npm 5.2 or above):
npx nanogen <command>
Creating a new site
To create a brand new site, navigate to the folder you want your site to be and run:
nanogen init
This will create a initial site structure like this:
/
src/
assets/
layouts/
pages/
partials/
site.config.js
To build the site and open it in a browser, run:
npm start
There is already a default layout inside the layouts
folder, but you may add more.
Read more about Layouts.
Inside the pages
folder is where you put ejs, md or html files that will generate the pages of the final site. Any file name and folder structure used here will be transposed to the resulting site (without the pages
part).
Read more about Pages.
Available commands and options
You may run nanogen -h
to see the available commands and options:
Initialize a new site:
$ nanogen init
Start the current site:
$ nanogen start [options]
Build the current site:
$ nanogen build [options]
Options
-c, --config <file-path> Path to the config file (default: site.config.js)
-p, --port <port-number> Port to use for local server (default: 3000)
-h, --help Display this help text
-v, --version Display Nanogen version


| Auto-Liking-following Service |
| Up to 15,000 Likes Monthly |
| Up to 10,000 Follows Monthly |
| Inappropriate Content Filtering |
| Unique User Engagement |
| Auto-Liking-following Service |
| Up to 22,500 Likes Monthly |
| Up to 15,000 Follows Monthly |
| Inappropriate Content Filtering |
| Unique User Engagement |
| Auto-Liking-following Service |
| Up to 30,000 Likes Monthly |
| Up to 20,000 Follows Monthly |
| Inappropriate Content Filtering |
| Unique User Engagement |


FleetApi behaviour
This module contains callback declarations for interacting with a Fleet API endpoint.
Callbacks
Specs:
- delete_unit(pid, unit_name :: String.t) :: :ok | {:error, any}
Remove a unit from the Fleet cluster.
Specs:
- get_api_discovery(pid) :: {:ok, Map.t} | {:error, any}
Retrieve the API Discovery document JSON for the Fleet API.
Specs:
- get_unit(pid, unit_name :: String.t) :: {:ok, FleetApi.Unit.t} | {:error, any}
Retrieve the details for a specific unit in the Fleet cluster.
Specs:
- list_machines(pid) :: {:ok, [FleetApi.Machine.t]} | {:error, any}
Retrieve the list of nodes currently in the Fleet cluster.
Specs:
- list_unit_states(pid, opts :: [{atom, String.t}]) :: {:ok, [FleetApi.UnitState.t]} | {:error, any}
Get the detailed state information for all the units in the Fleet cluster.
You may optionally provide options machineID
and/or unitName
to filter
the response to a particular host or unit.
Specs:
- list_units(pid) :: {:ok, [FleetApi.Unit.t]} | {:error, any}
Retrieve the list of units that the Fleet cluster currently knows about.
Specs:
- set_unit(pid, unit_name :: String.t, FleetApi.Unit.t) :: :ok | {:error, any}
Adds or updates a unit in the Fleet cluster. If the cluster doesn’t contain a unit with the given name, then a new unit is added to it. If a unit with the given name exists, it is updated with the new unit definition.


---
layout: page
title: Contact
---
Contact
Work with us
Join the team:
There are many opportunities to join the team, check them out.
Collaborate with us:
We are working with academic, industry and government partners. We welcome collaborators to jointly foster the new material revolution. To be part of our journey to foster discovery of novel, multi-functional materials by building on computational design and broadening participation, please reach out to Prof. Alexandra Ion.
Visit us


Rosa Doornenbal
Gentle Push
Commit to Relax
Mind My Tea
The Workshop
Hunnybunlookingforsculpture
Monumentals
And about Carry
Hanging Out
Good Vibes, Living Water
Round Object
CV
Ashtray Sculpture
, 2012
epoxy


<!doctype html>
Untitled Custom SSG
# 🔗 makesite
Create your own custom Static Site Generator (like Jekyll or Hugo) by cloning and fulfilling the requirements in this repo!
📚 Table of Contents
- Project Structure
- Getting Started
- Deliverables
- Resources
Project Structure
📂 makesite
├── README.md
├── first-post.txt
├── latest-post.txt
├── makesite.go
└── template.tmpl
Getting Started
- Visit github.com/new and create a new repository named
makesite
.
- Run each command line-by-line in your terminal to set up the project:
$ cd ~/go/src
$ git clone git@github.com:Make-School-Labs/makesite.git
$ cd makesite
$ git remote rm origin
$ git remote add origin git@github.com:YOUR_GITHUB_USERNAME/makesite.git
Deliverables
For each task:
- Complete each task in the order they appear.
- Use GitHub Task List syntax to update the task list.
MVP
Complete the MVP as If you finish early, move on to the stretch challenges.
If you get stuck on any step, be sure to print the output to stdout
!
Requirements
- [X] Read in the contents of the provided
first-post.txt
file.
- [X] Edit the provided HTML template (
layout.html
) to display the contents of first-post.txt
.
- [X] Render the contents of
first-post.txt
using Go Templates.
- [X] Write the HTML template to the filesystem to a file. Name it
first-post.html
.
- [X] Manually test the generated HTML page by double-clicking the
first-post.html
and opening it in your browser.
- [X] Add, commit, and push to GitHub.
- [X] Add an argument to your CLI command: the name of any
.txt
file in the same directory as your program. Use latest-post.txt
to test.
- [X] Update the
save
function to use the input filename to generate a new HTML file. For example, if the input file is named latest-post.txt
, the generated HTML file should be named latest-post.html
.
- [X] Add, commit, and push to GitHub.
Stretch Challenges
- [ ] Use Bootstrap, or another CSS framework, to enhance the style and readability of your template. Get creative! Writing your very own website generator is a great opportunity to broadcast your style, personality, and development preferences to the world!
Resources
Lesson Plans
Example Code


Preparation time
30 mins to 1 hour
Cooking time
10 to 30 mins
Serves
Serves 4
Preheat the oven to 200C/400F/Gas 6.
Season the lamb with salt and freshly ground black pepper. In a heavy frying pan, heat 3 tablespoons of the olive oil until it is nearly smoking. Add the lamb and cook over a high heat until browned all over. This should take about 5 minutes; the lamb loin should still be rare inside. Place on a wire rack and allow to cool to room temperature.
Pour the breadcrumbs onto a baking sheet and drizzle with the remaining olive oil. Mix gently with your fingers. Put into the oven and toast the crumbs until lightly browned, stirring two or three times. When browned, allow to cool, then add the herbs.
For the sauce, reduce the lamb stock until it has a light sauce consistency. Remove from the heat and stir in the herbs, mustard and butter. Check for seasoning.
To prepare the scallion crushed potatoes, cook the new potatoes in boiling salted water until tender, then drain. Melt the butter in a saucepan over a moderate heat, add the spring onions and a little salt and cook gently for one minute. Add the potatoes and crush gently with a fork. Keep warm.
While the potatoes are cooking, finish the lamb. Mix the two mustards together and brush over the top of each loin. Dip the mustard-coated part of the loin into the breadcrumbs and gently press the crumbs onto the mustard. Set the loins on a baking sheet, crumb-side up.
Place in the top of the oven and roast for 4-5 minutes for medium rare, or 8 minutes for medium-well done. Remove from the oven and allow to rest.
Heat a little oil in a pan and sauté the blanched carrots, lettuce and broad beans with the girolles for a few minutes. Season to taste with salt and freshly ground black pepper.
To serve, spoon the vegetable garnishes and some of the crushed potatoes onto the warmed plates. Slice the lamb, allowing three thick slices for each person, and place on the potatoes. Spoon over the sauce and garnish with fresh parsley.


new Row
Represents the columns in a row
Parameters:
| Name | Type | Description |
|---|---|---|
data |
Object | The data returned from the cql request |
schema |
Object | The schema returned from the cql request |
- Source:
- row.js, line 11
Methods
-
forEach
-
Overrides the Array.forEach to callback with (name, value, timestamp, ttl)
Parameters:
Name Type Description callback
Function The callback to invoke once for each column in the Row - Source:
- row.js, line 94
-
get
-
Adds the ability to get a column by its name rather than by its array index
Parameters:
Name Type Description name
String The name of the column to get - Source:
- row.js, line 107
Returns:
a tuple of the column name, timestamp, ttl and value- Type
- Object
-
inspect
-
Inspect method for columns
- Source:
- row.js, line 114
-
nameSlice
-
Slices out columns based on their name
Parameters:
Name Type Description start
String The starting string end
String The ending string - Source:
- row.js, line 139
Returns:
Row with the sliced out columns- Type
- Row
-
slice
-
Slices out columns based ont their index
Parameters:
Name Type Description start
Number Required. An integer that specifies where to start the selection (The first columns has an index of 0). You can also use negative numbers to select from the end of the row end
Number Optional. An integer that specifies where to end the selection. If omitted, slice() selects all elements from the start position and to the end of the row - Source:
- row.js, line 162
Returns:
Row with the sliced out columns- Type
- Row
-
toString
-
ToString method for columns
- Source:
- row.js, line 173
- See:
-
<static> fromThrift
-
Create a row object using data returned from a thrift request
Parameters:
Name Type Description key
String The key of the row columns
Array The response from the thrift request cf
ColumnFamily The column family creating the row - Source:
- row.js, line 64


Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from typing import Any
2from typing import cast
3from typing import Dict
4from typing import Generic
5from typing import TypeVar
6from typing import Union
9__all__ = ["Store", "StoreKey"]
12T = TypeVar("T")
13D = TypeVar("D")
16class StoreKey(Generic[T]):
17 """StoreKey is an object used as a key to a Store.
19 A StoreKey is associated with the type T of the value of the key.
21 A StoreKey is unique and cannot conflict with another key.
22 """
24 __slots__ = ()
27class Store:
28 """Store is a type-safe heterogenous mutable mapping that
29 allows keys and value types to be defined separately from
30 where it (the Store) is created.
32 Usually you will be given an object which has a ``Store``:
34 .. code-block:: python
36 store: Store = some_object.store
38 If a module wants to store data in this Store, it creates StoreKeys
39 for its keys (at the module level):
41 .. code-block:: python
43 some_str_key = StoreKey[str]()
44 some_bool_key = StoreKey[bool]()
46 To store information:
48 .. code-block:: python
50 # Value type must match the key.
51 store[some_str_key] = "value"
52 store[some_bool_key] = True
54 To retrieve the information:
56 .. code-block:: python
58 # The static type of some_str is str.
59 some_str = store[some_str_key]
60 # The static type of some_bool is bool.
61 some_bool = store[some_bool_key]
63 Why use this?
64 -------------
66 Problem: module Internal defines an object. Module External, which
67 module Internal doesn't know about, receives the object and wants to
68 attach information to it, to be retrieved later given the object.
70 Bad solution 1: Module External assigns private attributes directly on
71 the object. This doesn't work well because the type checker doesn't
72 know about these attributes and it complains about undefined attributes.
74 Bad solution 2: module Internal adds a ``Dict[str, Any]`` attribute to
75 the object. Module External stores its data in private keys of this dict.
76 This doesn't work well because retrieved values are untyped.
78 Good solution: module Internal adds a ``Store`` to the object. Module
79 External mints StoreKeys for its own keys. Module External stores and
80 retrieves its data using these keys.
81 """
83 __slots__ = ("_store",)
85 def __init__(self) -> None:
86 self._store: Dict[StoreKey[Any], object] = {}
88 def __setitem__(self, key: StoreKey[T], value: T) -> None:
89 """Set a value for key."""
90 self._store[key] = value
92 def __getitem__(self, key: StoreKey[T]) -> T:
93 """Get the value for key.
95 Raises ``KeyError`` if the key wasn't set before.
96 """
97 return cast(T, self._store[key])
99 def get(self, key: StoreKey[T], default: D) -> Union[T, D]:
100 """Get the value for key, or return default if the key wasn't set
101 before."""
102 try:
103 return self[key]
104 except KeyError:
105 return default
107 def setdefault(self, key: StoreKey[T], default: T) -> T:
108 """Return the value of key if already set, otherwise set the value
109 of key to default and return default."""
110 try:
111 return self[key]
112 except KeyError:
113 self[key] = default
114 return default
116 def __delitem__(self, key: StoreKey[T]) -> None:
117 """Delete the value for key.
119 Raises ``KeyError`` if the key wasn't set before.
120 """
121 del self._store[key]
123 def __contains__(self, key: StoreKey[T]) -> bool:
124 """Return whether key was set."""
125 return key in self._store


Dozens Wounded in Bus Accident in Northern France - Reports
In early October, one person was killed and 17 injured in a traffic accident with a bus in the Aude department in southern France.
More than 30 people were injured on Sunday as a result of a bus crash in the northern French department of Somme, national media reported.
The incident occurred on the A1 highway where the bus of the FlixBus company, which was heading for London, overturned over the wet road, the Courrier Picard media outlet.
A total of 29 people sustained slight injuries while four more are in a critical condition.
"As the gendarmerie told us, there are no Russian citizens in the list of the people affected by the bus accident that took place in the Department of Somme," a spokesperson for the embassy told Sputnik.
The deadliest bus crash in several decades took place in France on October 23, 2015, when a bus collided with a lorry in the commune of Puisseguin, the department of Gironde, leaving 43 people dead and eight more injured.


Hey there! I'm Absall.
I am a student at Thinkful learning the skills to become a web developer. I am currently located in Bowie, MD.
About Me
I first started my web development journey as a student at Bowie State University. After persuing a Computer Science degree for a couple of years, I realized that the university didn't have the major that I was actually interested in, which was web development. And so, I looked up coding bootcamps, analyzed them, and saw concluded that Thinkful was the best fit for my career goals.
I realized my love for web development when I found myself being mesmerized by websites with cool looking UI and asking myself, "how can I do that?" I find myself curiously going from website to website implementing cool features that I see into my own websites that I use for practice. What I love even more are the websites that are constantly being worked on by a team and seeing different peoples input on a certain aspect of said website.
A couple of things that i'm interested in outside if web development includes:
- Video Games
- Anime
- Playing the bass
Fun Facts
Fun facts about me:
- I think I have a fear of heights.
- I'm addicted to shoegaze.
- My favorite colors are burgeny and pink.


Meditation Process
18 Dec 2017How did the 'process over product' concept affect the way you tackled the site redesign and rebuild?
I rather consider the 'process over product' as a kind of work flow. It makes the design and build process very clear and orderly. I took the following process.
- develop the layout of the page.
- convert the wireframe into semantic html.
- set up the style from big elements to small elements.
- improve and adjust details.
What did you think about meditation before reading chapter 2?
Before, I thought meditation was a kind mysterious practice that could only be mastered by a few monks. I also thought meditators could absorb the energy of nature to become more powerful. I thought of the meditators as a kind of people who was very close to God.
What new things have you learnt about meditation?
I have know that meditation is just a kind of mental practice that everyone can take like physical practice. Through the meditation, people will become more healthy, happiness, and focused. I have learned almost anything about how to do a meditate. If I want to meditate I whould create a intention, then follow my breath. When my attention wander away I should bring it back gently. The good way to bring my attention back is ackownledge, experience without judging and reacting, if need to react, continue maintaining mindfulness, let it go.
Did any of the suggested meditation techniques stand out to you?
I tried the meditation instruction in the chapter 2. Actually, It is very hard to me that is to open my eyes slightly. I prefer to close my eyes. And ten minute is a little long to me.


TileCoords
open class TileCoords
Class to convert from Map Tiles to coordinates and from coordinates to tiles
Coordinates (latitude and longitude) are ALWAYS expressed in degrees. The max latitude that can be converted to tiles is +85.0511 and the minimum is -85.0511 (see https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames).
Zoom level (z) range is from 0 to 19.
The earth is represented by a square that is divided in small pieces (tiles). The number of tiles depends on the zoom value and is equal to: 2^z x 2^z
The values of tiles can be from 0 to 2^z - 1. For instance, for z=10 the max tile would be 1023 (2^10 - 1 = 1024 - 1)
This diagram represents the equivalent lat/long vs tileX/tileY
(-180,85.0511) (180,85.0511) <----- coords (lat, long)
0,0 2^z -1, 0 <---------- Tile number (x,y)
+-------------------------+
| |
| + (0.0,0.0) |
| |
+-------------------------+
0,2^z - 1 2^z - 1, 2^z - 1
(-180,-85.0511) (180,-85.0511)
All the wisdom of this class comes from: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
-
Max value of latitude that can be retrieved with tiles (-85.0511 degrees)
Declaration
Swift
static let maxLatitude: Double
-
Min value of latitude that can be retrieved with tiles (-85.0511 degrees)
Declaration
Swift
static let minLatitude: Double
-
Max value of a longitude (<180.0). Any longitude has to be strictly minor than this value 180.0
Declaration
Swift
static let maxLongitude: Double
-
Min value of a longitude (>=180.0) Any longitude has to be mayor or equal to this value -180.0.
Declaration
Swift
static let minLongitude: Double
-
Max zoom supported in tile servers (19)
Declaration
Swift
static let maxZoom: Zoom
-
Min zoom supported (0)
Declaration
Swift
static let minZoom: Zoom
-
Based on current zoom it indicates what is the max tile
Declaration
Swift
public static func maxTile(forZoom zoom: Zoom) -> TileNumber
-
Validates if longitude is between min and max allowed longitudes
Throws
LongitudeErrorSee also
maxLatitude, minLatitudeDeclaration
Swift
public static func validate(longitude: Double) throws
Parameters
longitude
the longitude to validate
-
Validates if a latitude is between min and max allowed latitudes. Throws LongitudeError if it is not.
Declaration
Swift
public static func validate(latitude: Double) throws
-
Validate zoom is less or equal to the maxZoom Throws ZoomError if is greater than maxZoom
Declaration
Swift
public static func validate(zoom: Zoom) throws
-
Validates if the tile is within the range for the zoom A tile must be always be less than 2^zoom.
Declaration
Swift
public static func validate(tile: TileNumber, forZoom zoom: Zoom) throws
-
Returns the tile in the X axis for the longitude and zoom. Can throw ZoomError and LongitudeError if these are out of the boundaries.
Declaration
Swift
public static func longitudeToTileX(longitude: Double, zoom: Zoom) throws -> TileNumber
-
Returns the tile in the Y axis for the latitude and zoom. Can throw ZoomError and LongitudeError if these are out of the boundaries.
Declaration
Swift
public static func latitudeToTileY(latitude: Double, zoom: Zoom) throws -> TileNumber
-
Returns the corresponding longitude in degrees for the tileX at zoom level
Declaration
Swift
public static func tileXToLongitude(tileX: TileNumber, zoom: Zoom) throws -> Double
-
Returns the corresponding latitude in degrees for the tileY at zoom level
Declaration
Swift
public static func tileYToLatitude(tileY: TileNumber, zoom: Zoom) throws -> Double
-
Holds the zoom level. For internal use only.
Declaration
Swift
private var _zoom: Zoom
-
Zoom level. Read only. Use setZoom() to change it.
Declaration
Swift
public var zoom: Zoom { get }
-
Holds the actual latitude
Declaration
Swift
private var _latitude: Double
-
Latitude for this tile. Use set() to change it.
Declaration
Swift
public var latitude: Double { get }
-
Holds the actual longitude
Declaration
Swift
private var _longitude: Double
-
Longitude for this tile. Use set() to change it.
Declaration
Swift
public var longitude: Double { get }
-
Holds the actual tileX
Declaration
Swift
private var _tileX: TileNumber
-
Tile in the X axis for current longitude and zoom. Use set() to change it.
Declaration
Swift
public var tileX: TileNumber { get }
-
Holds the actual tileY
Declaration
Swift
private var _tileY: TileNumber
-
Tile in the Y axis for current latitude and zoom. Use set() to change it.
Declaration
Swift
public var tileY: TileNumber { get }
-
Set zoom level. Throws ZoomError if zoom is not valid.
Declaration
Swift
public func set(zoom: Zoom) throws
-
Set tile X and Y values. Throws TileError if latitude or longitude are out of range.
Declaration
Swift
public func set(tileX: TileNumber, tileY: TileNumber) throws
-
Sets latitude and longitude. Throws LatitudeError and LongitudeError if they are out of range.
Declaration
Swift
public func set(latitude: Double, longitude: Double) throws
-
Init a TileCoords instance using tile and zoom info. Will return nil if any of the parameters is out of range.
Declaration
Swift
public init?(tileX: TileNumber, tileY: TileNumber, zoom: Zoom)
-
Init a TileCoords instance using latitude, longitude and zoom info. Will return nil if any of the parameters is out of range.
Declaration
Swift
public init?(latitude: Double, longitude: Double, zoom: Zoom)
-
Creates a new Tile Coord with the same latitude and longitude as the the parameter but with a different zoom.
Declaration
Swift
public init?(_ tileCoords: TileCoords, zoom: Zoom)
-
Returns the maximum tile number for current set zoom.
Declaration
Swift
public func maxTile() -> TileNumber


Success! Your new code is ready to be stashed somewhere safe
Error! Invalid secret code
Error! Invalid secret code length
Error! An unknown error occurred


Tasty Perth fundraiser to help tiny tots
by Laura PondA FUNDRAISER in Tuart Hill aims to help WA babies enjoy the best possible start to life.
Charity Little Things for Tiny Tots is holding a morning tea on December 3, which is also the international day of generosity known as Giving Tuesday.
Local businesses will be providing sweet treats, beverages, a parent pamper station and children’s activities at Tuart Hill Community Centre from 9.30am to 11am.
Funds raised will go towards the charity’s operational costs for 2020 so it can continue working towards its goal of ensuring every baby in WA has the support, care and essentials they need to grow and thrive.
The volunteer-run organisation provides new and pre-loved essential baby items to Perth families in need, including people impacted by domestic violence, homelessness, mental illness, drug or alcohol addiction and bereavement.
Tickets to the fundraiser cost $15 for one adult and one child.