#Davis Doan Computer Science Student and Technology Newbie
Currently
Pursuing an education in Computer Science with a focus on Software Engineering. Seeking to leverage fundamental knowledge of object-oriented programming, data structures, and algorithms.
Education
2017-18
San Diego State University Masters’s degree in Computer Science
2009-11
San Diego State University Bachelor’s degree in Finance
Technical skills
- HTML5 and CSS3
- Javascript
- jQuery
- mySQL
- Java
- PHP
Projects
Fall 2016
SDSU Intro to Web Development - Online Chocolate Shop
-
Website for an imaginary chocolate shop with full check out and order confirmation
-
Web pages generated inventory and stock categories via PHP requests to mySQL database
Fall 2016
SDSU Intro to Web Development - Online Marathon Registration
-
Website for an imaginary SDSU Marathon with runner registration and confirmation
-
Runner registration stored in mySQL database with duplicate runner checking
Professional Experience
Aug 2016-Current
Ingenu - Performance Engineer Intern
-
Met with product developers to document and understand the product performance expectations
-
Analyze system resource metrics and logs to identify bottlenecks
-
Coordinate with software teams to develop and implement performance test plan
-
Created bash scripts to collect service logs across multiple virtual machines and initialize database environments
-
Deploy and configure proprietary software across multiple virtual machines
May 2016-Aug 2016
Ingenu - Software Release Intern
-
Coordinate the deploy and build process for software releases by using source management tools to compile, package and deploy application components
-
Create change requests and perform validations on software deployments
-
Examine and execute application specific deployment processes
-
Resolved build and release dependencies in collaboration with other departments
Hobbies
- Hiking
- Outdoor Photography
- Cooking


DENTCA provides high quality, 100% accurate dentures using award-winning computer-aided design (CAD) and computer-aided manufacturing (CAM) with state-of-the-art 3D printing technology. Research has shown our advanced 3D software provides increased accuracy, creates more comfortable dentures for patients, and allows you to complete a full denture case 2.5x faster.
Step 1: Spend 45 minutes to take an impression of your patient's mouth using DENTCA’s patented tray system. Send us the impression.
Step 2: Approximately 5 days after we receive your impression, your final denture will be shipped out.** Your patient will return home with a new smile on their face in only 2 visits and less than 1 hour of chair time!
**If you choose the free try-in option, the try-in will be shipped out 3 days after we receive your impression


Here's some info about me...
Here's some info about me...
My name is Jamie Delekta and I'm from Northern Michigan. I am learning to code! Each day I work hard to learn something new that will get me closer to becoming a Front End Developer. I want to work from home so I can hang out with my dog all day.
I love to read books, stream awesome shows, and play with my dog. She is a 5 pound black Chihuahua named Raven. She's my best friend and about the cutest thing you'll ever see! Raven is obsessed with playing ball and I end up throwing it about 100 times per day.
I can't wait to finish my Skillcrush Break into Tech course and become a Front End Developer! I am having so much fun designing all types of sites and I'm super excited to get paid for such a cool skill. I am working hard to make that happen as soon as possible.


In order to write a Wi-Fi application, you need to follow these steps.
nvs_flash_init
routine to initialize the non-volatile storage library. See esp-idf/docs/api-reference/storage/nvs_flash.html for more detailstcpip_adapter_init
routine to create an LwIP core task and initialize LwIP-related work. esp_event_loop_init
routine to create a system event task and initialize a callback function for the application events .
esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx)
where cb
is the callback routine. The callback signature is
typedef esp_err_t (*system_event_cb_t)(void *ctx, system_event_t *event);
esp_wifi_init
routine to create the Wi-Fi driver task and initialize the Wi-Fi driver.esp_wifi_set_storage
routine to specify if the Wi-Fi configurations should be stored in RAM (WIFI_STORAGE_RAM
) or in RAM/FLASH (WIFI_STORAGE_FLASH
)esp_wifi_set_mode
routine to configure the Wi-Fi as STAtion (WIFI_MODE_STA
), AP (WIFI_MODE_AP
) or both (WIFI_MODE_APSTA
).esp_wifi_set_config
routine to configure the Wi-Fi parameters.
typedef enum {
WIFI_AUTH_OPEN = 0,
WIFI_AUTH_WEP,
WIFI_AUTH_WPA_PSK,
WIFI_AUTH_WPA2_PSK,
WIFI_AUTH_WPA_WPA2_PSK,
WIFI_AUTH_MAX
} wifi_auth_mode_t;
typedef struct {
char ssid[32];
char password[64];
uint8_t ssid_len;
uint8_t channel;
wifi_auth_mode_t authmode;
uint8_t ssid_hidden;
uint8_t max_connection;
uint16_t beacon_interval;
} wifi_ap_config_t;
typedef struct {
char ssid[32];
char password[64];
bool bssid_set;
uint8_t bssid[6];
} wifi_sta_config_t;
typedef union {
wifi_ap_config_t ap;
wifi_sta_config_t sta;
} wifi_config_t;
esp_wifi_start
routine to start the Wi-Fi.esp_event_loop_init
associated to the following events:
Now, when a SYSTEM_EVENT_STA_START event is received, you should try to connect to the Wi-Fi network using the esp_wifi_connect
. See esp_wifi_connect.
After that, when a SYSTEM_EVENT_STA_GOT_IP event is received, you should start the mqtt library using the mqtt_start
routine.
The mqtt_start routine receives a pointer to the mqtt_settings
datatype, to be able to configure the library.
typedef struct mqtt_settings {
mqtt_connect_callback connect_cb;
mqtt_disconnect_callback disconnect_cb;
mqtt_read_callback read_cb;
mqtt_write_callback write_cb;
mqtt_event_callback connected_cb;
mqtt_event_callback disconnected_cb;
mqtt_event_callback subscribe_cb;
mqtt_event_callback publish_cb;
mqtt_event_callback data_cb;
char host[CONFIG_MQTT_MAX_HOST_LEN];
uint32_t port;
char client_id[CONFIG_MQTT_MAX_CLIENT_LEN];
char username[CONFIG_MQTT_MAX_USERNAME_LEN];
char password[CONFIG_MQTT_MAX_PASSWORD_LEN];
char lwt_topic[CONFIG_MQTT_MAX_LWT_TOPIC];
char lwt_msg[CONFIG_MQTT_MAX_LWT_MSG];
uint32_t lwt_msg_len;
uint32_t lwt_qos;
uint32_t lwt_retain;
uint32_t clean_session;
uint32_t keepalive;
bool auto_reconnect;
} mqtt_settings;
with the following signatures for the callback routines.
typedef bool (* mqtt_connect_callback)(mqtt_client *client);
typedef void (* mqtt_disconnect_callback)(mqtt_client *client);
typedef int (* mqtt_read_callback)(mqtt_client *client, void *buffer, int len, int timeout_ms);
typedef int (* mqtt_write_callback)(mqtt_client *client, const void *buffer, int len, int timeout_ms);
typedef void (* mqtt_event_callback)(mqtt_client *client, mqtt_event_data_t *event_data);
and the associated datatypes
typedef struct mqtt_event_data_t
{
uint8_t type;
const char* topic;
const char* data;
uint16_t topic_length;
uint16_t data_length;
uint16_t data_offset;
uint16_t data_total_length;
} mqtt_event_data_t;
After calling the mqtt_start
routine, the mqtt callbacks
should be called, responding to the mqtt events.
~/esp/
git clone http://server:8081/PerformanceIOT/esp32-mqtt esp-mqtt
~/esp/esp-mqtt/components/
git clone http://server:8081/PerformanceIOT/espmqtt.git espmqtt
~/esp/esp-mqtt/
make menuconfig
git clone http://server:8081/PerformanceIOT/esp32-mqtt-patched.git esp32-mqtt
main/main.cpp
file, the mqtt_settings
struct with the appropriate values make
make flash
commandmosquitto_sub -t /test
commandmake monitor
commandmosquitto_pub -t /test -m 123
command
Merge the actual project with the previous one, to be able to manage a GPIO output remotely with a mqtt message and locally with an input GPIO.
Also report both states regularly.


|
UnabomberTed KaczynskiTheodore Kaczynski, PhD was no poseur. He wasn't one of those fake Luddites, who only claim to hate modern technology but can't go three days without HBO. Ted practiced what he preached. You have to give him that.The Unabomber's manifesto, submitted to Penthouse magazine and a couple of newspapers, identified a bunch of pet peeves: overcrowding, dissociation from nature, social conformity, rapid pace of technological change, consumerism, corporate domination, etc. Ted was a true believer. He cranked out that diatribe in a one-room, 10-by-12 plywood shack situated on 1.4 acres of Montana forest. The cabin had no electricity or plumbing. He used a manual typewriter. It took the FBI 17 years to track the guy down, and they never would have caught him if his brother hadn't recognized Ted's writing and squealed. And that couldn't have happened if Ted hadn't insisted on publishing that manifesto. So really this is Ted's own damn fault. But he felt compelled to write his essay, which won kudos from the establishment it attacked. One professor at the University of Wisconsin praised the Unabomber's masterful grammar and punctutation. "It's good prose. The sentences flow well into one another, the paragraphs are coherent. The Unabomber even knows how to punctuate, and that's a very rare gift." (That's right, people: he said gift.) When it appeared initially that neither the New York Times nor the Washington Post were willing to publish the manifesto in full, Penthouse magazine publisher Bob Guccione stepped forward. He took out a full-page ad in the New York Times to send an open letter to the Unabomber. In it, Guccione pledged not only to publish the essay in its entirety, he also offered a regular column. To get over any misgivings the Unabomber might have, Guccione pointed out the tremendous popularity his magazine held in the corridors of power:
"Penthouse is one of the biggest and most quoted magazines in the history of our industry. For 25 years it was and continues to be the single, biggest selling magazine in the Pentagon. If it's attention you want, you'd be hard-pressed to do better." Ted made contact with Guccione a couple of times, via mail and phone, but they drifted apart after the newspapers finally complied and printed "Industrial Society and Its Future" in unexpurgated form. His brother David Kaczynski read the thing and got a sinking feeling. David's wife contacted a childhood friend of hers working as a detective at Investigative Group International, the same agency that smeared tobacco industry whistleblower Jeffrey Wigand. The detective lined up some writing analysis experts, and then they went to the FBI. In jail awaiting trial, Ted attempted to hang himself with his underwear to avoid submitting to a psychiatric evaluation. Well, he got one anyway. The court appointed Sally Johnson, M.D. to determine whether Ted was too nuts to stand trial. This is the same doctor who examined John Hinckley and Jim Bakker. The shrink's report included a biographical sketch of her subject. Ted was your ordinary 16-year-old Harvard freshman.   As a matter of fact, Ted scheduled an appointment with a campus shrink to get the ball rolling. But he chickened out in the waiting room and settled on telling the doctor that he was just afraid of getting drafted. When we walked out the door, Ted's outlook suddenly zigzagged, as described in his diary:
As I walked away from the building afterwards, I felt disgusted about what my uncontrolled sexual cravings had almost led me to do and I felt humiliated, and I violently hated the psychiatrist. Just then there came a major turning point in my life. Like a Phoenix, I burst from the ashes of my despair to a glorious new hope. I thought I wanted to kill that psychiatrist because the future looked utterly empty to me. I felt I wouldn't care if I died. And so I said to myself why not really kill the psychiatrist and anyone else whom I hate. What is important is not the words that ran through my mind but the way I felt about them. What was entirely new was the fact that I really felt I could kill someone. My very hopelessness had liberated me because I no longer cared about death. I no longer cared about consequences and I said to myself that I really could break out of my rut in life an do things that were daring, irresponsible or criminal. Ted made the decision to keep a diary in the first place primarily because he was worried that people might believe that he was mentally ill:
I intend to start killing people. If I am successful at this, it is possible that, when I am caught (not alive, I fervently hope!) there will be some speculation in the news media as to my motives for killing (As in the case of Charles Whitman, who killed some 13 people in Texas in the '60s). If such speculation occurs, they are bound to make me out to be a sickie, and to ascribe to me motives of a sordid or "sick" type. At his sentencing hearing, Ted told the judge: "I ask that people reserve their judgment about me." He received four life sentences, no parole.
After he wound up in a federal supermax in Florence, CO, Ted built a friendship with fellow inmate Timothy McVeigh. During their shared one-hour-per-day exercise period, Ted and Tim would chat about all kinds of crap. "On a personal level I like McVeigh and I imagine most people would like him." Oh!   Well, he did.
Timeline
|


Bios for CSM Exec Members.
|
Kevin Lin |
President. I like teaching! |
|
Jerry Huang |
External Vice President. Hi! I'm a third year CS / Applied Math major with an English minor...so yes I'm all over the place. I really enjoy the stats-y / math-y / algorithm-y side of CS and I've been teaching since the second semester of freshman year. I joined CSM in Fall 2016 as a 70 JM and I really fell in love with CSM and teaching 70! So I've continued doing both since! On the non-CS side of things, I like squealing at dogs, cooking Chinese food, piano, poetry, fountain pens and general stationery things, fashion, running, and boba! |
|
Jason Goodman |
Internal Vice President. Hi! I began my journey in CSM as a freshman student in CS 61A, an experience that I found extremely helpful and an essential part of my success in the course. The following semester, I became a junior mentor while still taking CSM courses as a student, and it was then that CSM became not only a place that I went to for academic support, but also my community. I am now in my fifth semester of mentoring for CSM, and I have previously been a senior mentor and course coordinator. I am excited to help CSM continue to grow this semester and look forward to helping both mentors and students find their CS journeys at Cal. Please feel free to contact me with any suggestions/questions, thoughts about life, or grumblings about the state of Cal Athletics. Oh, and go Bears! |
|
Joy Tang |
Communications Chair. Hi my name is Joy, and I'm a 3rd year computer science major. This is my 3rd semester mentoring for 61B, and I can't wait to meet you! I'm obsessed with dance, cybersecurity, standup, and food, so come talk to me if you think I'm interesting or cool :) or just come talk to me :) I promise I'm fun |
|
James Jiang |
Technology Chair. TL;DR I like to read novels and play sports. I study Computer Science and Theater with an acting focus. In my free time, I play soccer and work out at the gym, ice skate, read new novels/plays, and write. On campus, I'm involved with a product design research project on called theDesignExchange, the HOS Christian Fellowship and I'm on the Cal Figure Skating team. I have played competitive chess in the past and really wish I still have time for it. I am passionate about writing and design. I joined CSM at first to see how it is like to teach and taught 61B, but I ended up loving how nice and enthusiastic our mentors are! Now I handle the CSM applications. Come talk to me about web development, design, books, sports, board games or life in general! |
|
Paul Bitutsky |
Social Chair. I’m a web developer, programmer, and an undergraduate student at the University of California, Berkeley, where I am studying Computer Science and Business Administration. My passion for technology was initially sparked by my parents, both IT professionals. I pursued my interest from a young age by building websites and creating mobile apps. My dream is to use technology to improve the world and help people lead more productive lives. |
|
Jennie Chen |
CS61A Coordinator. Hi! I'm a third year studying CS and Statistics from San Jose. This is my fourth semester with CSM, and I'm also currently TA'ing 61A for the third time. In my spare time, I like doing puzzles, listening to music, and finding pictures of animals, especially dogs. Let me know if you ever need some cute pictures to cheer you up! |
|
Chris Allsman |
CS61A Coordinator. Hi there! I'm a 3rd year Computer Science major from Fresno, California. I've been teaching 61A for 4 semesters now, and have been involved with CSM for just as long. Outside of teaching, my interests include cooking, video editing, and 20th century avant-garde music. |
|
Mudit Gupta |
CS61B Coordinator. Hello! I'm a 3rd year EECS undergrad and I'm interested in algorithms application-y / software engineering-y things. I intend to take pretty much all the undergraduate courses in these areas, and some grad courses too. I have a particular kind of notebook I like and I bring a suitcase filled with them from Dubai every year or so... heh. |
|
Matthew Soh |
CS61B Coordinator. Hi! I'm a second-year EECS major from sunny Singapore. I've been a tutor for CS61A and CS61B, and I'm currently a reader for CS170. I love data structures and algorithms, especially graph algorithms (that you'll learn this semester!). I'm a big fan of musical theater (I know most of Hamilton by heart.) I spend my Sundays at church. I drink a lot of coffee that I brew with my espresso machine. On campus, I've also been in CodeBase and ML@B. I recently joined the Robotics & AI Lab @ BAIR as an undergraduate researcher. |
|
Suraj Rampure |
CS70 Coordinator. Hey! I'm a sophomore EECS major from southwestern Ontario, Canada. This is my third semester teaching 70 for CSM; I've also TA'd Data 8 in the past and am currently TA'ing CS 61A. In my spare time, I like bumping Drake and Future, repeating DJ Khaled quotes, rooting for Lebron and eating Urban Turbann religiously. |
|
Yining Liu |
CS70 Coordinator. Hi! I’m a second year studying CS and Applied Math. Apart from math, I’m also obsessed with earrings and making pancakes. Come talk to me about anything! |
|
Aditya Baradwaj |
EE16A Coordinator. Hi all! I am a third-year EECS major from Chennai, India. I took the first large-scale offering of EE 16A as a freshman, and I loved it! I also enjoy CS theory, and have TA'd CS 70 and 170. I'm very interested in learning how to improve educational outcomes, particular in fields like CS. In my free time, I enjoy reading about history and languages, and walking to the Big C. |
|
Varsha Ramakrishnan |
EE16A Coordinator. Varsha Ramakrishnan is a sophomore EECS major and Co-Coordinator for CSM EE16A. She began to enjoy teaching when she ran a tutoring business in high school, and carried it over to college by tutoring CS61A, EE16A, EE16B, and CS188. Although she is generally likened to a robot, Varsha spends her days doing classwork and research, reading sci-fi/fantasy novels and manga, playing Nintendo games, and attempting to draw. Varsha also codes sometimes, when the occasion calls for it, and is always down to try new boba places or discuss anything, from personal thoughts to archaic fictional time travel theories. At present, Varsha would like to thank you for taking the time to get to the end of this, and wish you a good day! |
|
Jiana Huang |
Advisor. Hello! I'm a 4th year Computer Science and Cognitive Science double major. You might find me taking snaps of squirrels all over campus or climbing at the bouldering gym! Come say hi whenever you see me and I hope to meet you all soon! |
|
Fahad Kamran |
Advisor. Hey everyone! My name is Fahad, and I am a senior studying mathematics, statistics, and computer science. I has taken a wide variety of courses and I am happy to answer any questions people might have about which courses to take. I have TA'd for 6 semesters, most often for Data 8. If you have any questions about TAing, Data Science, getting research, etc., feel free to hit me up! In my spare time, I like to play and watch sports, sleep, and eat. |
|
Anwar Baroudi |
Advisor. Hi I am Anwar. *sushi alert*. WHERE? I'm from Mississippi, and I am teaching 61B this semester, so I will have taught all 4 CSM classes! Also, did I mention I like sushi yet? Oh, and I refused to write my own bio so James wrote this for me. |
|
Tiffany Perumpail |
Advisor. Hey folks! During the spring semester of my freshman year, CSM launched its pilot semester (yes, I am old) and I junior mentored for CS61A. And I've been in love with teaching CS61A ever since! In my free time, I like skateboarding, writing short stories, and cooking vegan pies. I'm also a major fan of Tame Impala. Feel free to talk to me about anything (especially if you have questions about teaching CS)! |


#
Chatbot
Bot Conversation Designer 机器人对话设计师
Save diagram to JSON & memory
Load diagram from JSON
Reset
Realign
Download
Recognition Language
English-US
English-GB
English
Spanish
Arabic
French
Russian
Italian
Japanese
Chinese-CN
Diagram Model saved in JSON format:


Welcome to The Jam(.vg) Hub!
We are the brain (database) behind these great Jam websites.
The worlds largest and most prestigious Online Game Jam. Check us out every April, August, and December
The online home of game jamming (coming soon)
Your Jammer biography. An online portfolio of your jam creations, without all the noise (coming soon)
Aggregator of live video from jammers, game jams, and game development (coming soon, with a preview on Ludum Dare)


Before Change
// Merge batch and beam dimensions.
original_shape = tf.shape(target_tokens)
target_tokens = tf.reshape(target_tokens, [-1, original_shape[-1]])
attention = tf.reshape(alignment, [-1, tf.shape(alignment)[2], tf.shape(alignment)[3]])
// We don"t have attention for </s> but ensure that the attention time dimension matches
// the tokens time dimension.
attention = reducer.align_in_time(attention, tf.shape(target_tokens)[1])
After Change
// Merge batch and beam dimensions.
original_shape = tf.shape(target_tokens)
target_tokens = tf.reshape(target_tokens, [-1, original_shape[-1]])
align_shape = shape_list(alignment)
attention = tf.reshape(
alignment, [align_shape[0] * align_shape[1], align_shape[2], align_shape[3]])
// We don"t have attention for </s> but ensure that the attention time dimension matches
// the tokens time dimension.
attention = reducer.align_in_time(attention, tf.shape(target_tokens)[1])


Returning to our example above, we have (mean \(-\) median) = \(-4.8\) and number of districts is \(5\text{.}\) Using technology, we compute \(t\text{:}\)
Since \(|t| = 1.33 < 1.75\text{,}\) we conclude here that there is no statistically significant evidence of gerrymandering. in-context


Add Folder
Add Folder
My First Folder
Created 01/02/2020 5:12 PM
My First Folder
Created 01/02/2020 5:12 PM
My First Folder
Created 01/02/2020 5:12 PM


Table Name: tabPayroll Period
| Sr | Fieldname | Type | Label | Options |
|---|---|---|---|---|
| 1 | company |
Link | Company | Company |
| 2 | column_break_2 |
Column Break | ||
| 3 | start_date |
Date | Start Date | |
| 4 | end_date |
Date | End Date | |
| 5 | section_break_5 |
Section Break | Payroll Periods | |
| 6 | periods |
Table | Payroll Periods | Payroll Period Date |
| 7 | section_break_7 |
Section Break | Taxable Salary Slabs | |
| 8 | taxable_salary_slabs |
Table | Taxable Salary Slabs | Taxable Salary Slab |
Inherits from frappe.model.document.Document
erpnext.hr.doctype.payroll_period.payroll_period.get_payroll_period_days (start_date, end_date, employee)
No docs


You are viewing an historical archive of past issues. Please report new issues to the appropriate project issue tracker on GitHub.
Issues
| # | Summary | Product | Status | Kind | When |
|---|---|---|---|---|---|
| 660 |
Album artwork only come up when synergy preferences are manipulated |
Synergy | closed | bug | Created , updated |
| 659 |
Synergy crashes when using Apple built-in media keys and Growl enabled |
Synergy | closed | bug | |
| 658 |
Show play/pause bezel on notification from iTunes |
Synergy | open | bug | |
| 657 |
Synergy crashes due to NSGenericException thrown by scripting bridge on Apple Event errors |
Synergy | closed | bug | Created , updated |
| 656 |
Synergy keeps crashing |
Synergy | closed | bug | Created , updated |
| 655 |
Synergy keeps quitting |
Synergy | closed | bug | Created , updated |
| 654 |
Numerous crash |
Synergy | open | bug | Created , updated |
| 653 |
Synergy does not auto-start on OS bootup (Leopard 10.5.2) |
Synergy | closed | bug | |
| 652 |
Random crashes |
Synergy | closed | bug | |
| 651 |
getting errors in the console |
Synergy | closed | bug |


My favourite things
Food edition
Here is a list of my favorite things:
Sweets
Shawarma
Pizza
Burgers
Chocolate
Wine


CHAPTER 373L
PROFESSIONAL EMPLOYER ORGANIZATIONS
Section
373L-1 Definitions
373L-1.5 Names; registration of person required
373L-2 Registration required
373L-3 Bond required
373L-4 Exemptions
373L-5 Rules
373L-6 Responsibility of professional employer organizations
373L-7 Payroll cost exemption
373L-8 Fees


The Story of Duel City
Welcome to Duel City. The weather is fair, the ladies are
pretty, and our diet is high in lead. You probably heard some yelling when you arrived,
that would be Sally Sissypants and
Riley Roundbottom. They are always getting into arguments over
the most trivial of things: missing steps during the square dance, overcooking vegetables,
extra-marital affairs, century-long blood feuds, etc.
I wouldn't be surprised if one of them asked you to be their second.
You don't know what a second is?!? Well, fry me in peanut
butter! Listen up, there are four parts to a duel: the challenge,
determining the location, the ten paces, and the aftermath.
- The Challenge: Those two knuckleheads are always challenging each other. Why, just this morning I heard Sally challenge Riley because Riley's underwear was too yellow. Now, how did Sally even know that?
- The Location: As a second, this will be your most important responsibility. You should choose terrain that benefits your duelist.  Duel City is littered with traps, so there shouldn't be any problem finding some. Just make sure to remember which traps you've used!
- The Ten Paces: The duelists take ten paces, turning and firing after each step. Ten trap filled paces. That's where you come in: advise the duelist about the traps they should expect.
- The Aftermath: If all goes well, honor is restored and drinks flow freely. Don't dwell on the alternative: the alcohol doesn't taste as sweet.
Three Tips to be First among the Seconds
Having trouble keeping your duelist alive? One too many holes spoiling your afternoon plans?
Buy the complete guide to duel-assistance for four easy payments of $9.99! Be the envy of your
neighbors, grow taller and more handsome, impress your friends! "Seconds for Dummies" is
chocked full of helpful tips like these:
- Always remember what traps were available at the start of the duel
- When choosing to remove traps, try to remove a class of traps from the duel altogether
- Keep track of which traps have been sprung over the course of the duel
Enough Fighting, Spread the Love
Put down your pistols and fire up Facebook. It's time to share this bad-ass
game with your friends:
Hastily Built for Ludum Dare
We built this game for Ludum Dare 27 – a 48-hour game making competition.
The theme of the contest was "10 seconds". Please vote for our game on the Ludum
Dare website:
Vote for Second's Showdown
Nuts & Bolts
Don't just settle for fun and games. Roll up your sleeves and poke around!
Second's Showdown is an open source project,
so download the code and create your own Duelopolis!
Visit the project on GitHub


Verifies that there are no pending tasks that need to be flushed. It throws an error if there are still pending tasks.
You can check for a specific type of tasks only, by specifying a taskType
.
Available task types:
$timeout
: Pending timeouts (via $timeout
).$http
: Pending HTTP requests (via $http
).$route
: In-progress route transitions (via $route
).$applyAsync
: Pending tasks scheduled via $applyAsync.$evalAsync
: Pending tasks scheduled via $evalAsync.
These include tasks scheduled via $evalAsync()
indirectly (such as $q
promises).$verifyNoPendingTasks([taskType]);
| Param | Type | Details |
|---|---|---|
|
taskType
(optional)
|
string |
The type of tasks to check for. |


Elastos is an operating system that is designed with universal apps in mind. It facilitates applications developed in any of three kinds of languages, i.e., C/C++, Java and HTML/JS, to interact with each other automatically. Elastos is Android compatible and open source.
Elastos Headless v5.0
This version is a major improvement since the previous series: improved TLS, add additional support for OSX and BSD, the scheduler is aware about protocol handlers (HTTP2 is coming!), a new HTTP parser have been implemented, the plugins can be static or dynamic, the build system is now based on CMake, general performance have been improved and much more. We invite you to read our official release notes:
Performance & Innovation
The goal of Elastos OS is different from Android in at least four aspects:
1. Elastos has a complete set of C/C++ APIs, so it's a better fit for embedded systems and systems with detached peripherals.
2. Elastos is a distributed OS across the Internet to improve end-to-end security and integrity of user experiences.
3. Elastos is pioneering a service oriented (componentized) architecture that is designed to execute in a container/virtual machine. Using this technology, Elastos can take advantage of universal applications that can run on phones, PCs, game consoles, servers, and cloud centers, etc., regardless of CPU types, screen sizes, I/O scenarios (e.g. keyboard, mouse, touch, remote control, etc.).
4. Elastos is decentralized build on top of blockchains and p2p networks, so nobody controls the Elastos eco system, i.e., you may feel free to implement your own markets, search engines, location based services, advertisement agents, and so on.
Ultimately, our passion is to build a new innovative Internet infrastructure that is useful to the world.


Ph.D. Candidate, University of Michigan Mechanical Engineering
My thesis investigates the fatigue and fracture mechanics of shape memory alloys with techniques that redefine the limits of experimental mechanics. I’m also studying the coupled mechanical, electrochemical, and thermal interactions of lithium metal anodes for next-generation batteries. After completing my PhD, I aspire to be a professor who cultivates a dedication to helping people and the planet through excellence in engineering.
Find out more about my research on this website and on Google Scholar and ResearchGate:
Technologies to combat climate change require advancements in materials for lightweight structures and energy storage systems. My research focuses on understanding and enhancing the durability limits of energy materials, with an emphasis on shape memory alloys and lithium metal batteries.
Shape memory alloys (SMAs) are unique metals that are most commonly used in biomedical devices such as stents and root canal files, but can also be leveraged to make weight-saving actuators with exceptionally low mass and high specific power. Currently, SMA actuators are limited in their cyclic capacity and confound durability predictions because of their complex phase transformations. New insights on the fundamental damage mechanisms in SMAs will enable more cyclic durability, better failure predictions, and new frontiers for lightweight structures with these promising materials.
In addition, I investigate the connections between battery performance and the coupled mechanical, thermal, and electrochemical properties of materials for next-generation batteries with lithium metal anodes.
En route to building new understandings about material degradation and failure, I am developing novel experimental frameworks to characterize material responses with unprecedented breadth and precision between the millimeter and nanometer length scales, as well as among mechanical, electrical, chemical, and thermal potentials.
Peer-reviewed journal publications
LePage W, Shaw J, Daly S. Optimized paint sequence for speckle patterns in digital image correlation. Experimental Techniques, submitted, 2017.
Chen K, Wood K, Kazyak E, LePage W, Davis A, Sanchez A, Dasgupta N. Dead lithium: mass transport effects on voltage, capacity, and failure of lithium metal anodes. Journal of Materials Chemistry A, 2017. doi:10.1039/c7ta00371d.
Major findings:
during continued cycling, dead Li accumulates and impedes ionic mass transport, requiring a greater concentration gradient for diffusion
this accumulated dead Li is responsible for capacity fade in Li metal full cells, before dendrite shorting or electrolyte depletion occur
voltage measurements during galvanostatic cycling indicate mass transport effects by changing from “peaking” to “arcing”
my major contributions to this work: quantitative measurement of dead Li layer thickness with SEM images; coin cell fabrication and electrochemical testing
LePage W, Daly S, Shaw J. Cross polarization for improved digital image correlation. Experimental Mechanics, 2016. doi:10.1007/s11340-016-0129-2.
Major findings:
expedient method for optimizing a popular and powerful experimental mechanics technique, optical digital image correlation (DIC)
eliminates saturated pixels to preserve sub-pixel displacement resolution
improves correlation confidence interval by about 10%
reduces 2-D DIC error by up to 60%
Athuada T, LePage W, Chalker J, Ozer R. High density growth of ZnO nanorods on cotton fabric enables access to a flame resistant composite. RSC Advances, 2014. doi:10.1039/C4RA01543F.
Awards
Fellow, National Defense Science & Engineering Graduate (NDSEG) Program, 2014
Honorable mention, NSF Graduate Research Fellowship Program, 2014


Before Change
// Test a module with no owner (stdlib). This also sanity checks that we can handle when
// there is no parent module.
assert get_owner("typing") is None
// Test a module with a single owner with a top-level source root of ".". Also confirm we
// can handle when the module includes a symbol (like a class name) at the end.
rule_runner.create_file("script.py")
After Change
// Now test that we can handle first-party type stubs that go along with that third party
// requirement. Note that `colors.pyi` is at the top-level of the source root so that it strips
// to the module `colors`.
rule_runner.create_file("source_root1/colors.pyi")
rule_runner.add_to_build_file("source_root1", "python_library()")
assert get_owners("colors.red") == [
Address("3rdparty/python", target_name="ansicolors"),
Address("source_root1", relative_file_path="colors.pyi"),


DFA
DoubleClick for Advertiser is Google ad server platform. You can ge statistics about consumer usage such as clicks, conversions, views across multiple dimensions such as geography, date, browsers, and devices.
ButtonCard title
Some quick example text to build on the card title and make up the bulk of the card's content.
ButtonCard title
Some quick example text to build on the card title and make up the bulk of the card's content.
Button


For the week3, our group started to implement the workflow and recorded our chain working cutted it into a short clip:
For the week2, our group started to refine the workflow:
For the first week, our group came up with several inspiring ideas:
And we decided to engaged all three ideas into one project, then we had the "Momlovesyoulovesyou" - a virtual online mom paying endless attention on your online states and trying her best to connect with you, to show her love to you. The digital like and text are never enough...


Fun with graphs
Graph Theory is definitely one of my favorite branches of the Mathematics & Computer Science, mostly because of its nearest infinity applications, in both real world problems and pure theoretical problems.
These days I’ve been working (with my buddy Daniel Almeida) in a framework to create and manipulate graphs. Which means, creating a data structure to represent graphs, edges, vertexes and creating algorithms to work on this structure. All this is being made with Java and I’ll expose this code here, as I saw a terrible lack of good readable codes about it on the internet.
So, before we start coding the graph’s structure… we must clarify what a graph is and why it’s so important to the Computer Science (and many other sciences).
A graph is a ordered pair (G = (V,E)) , where (V) is a set of Vertices/Nodes and (E) is a set of Edges, an extremely mple example of a complete simple, connected and complete graph is:
So, what’s the huge deal with this graph theory thing?
Well, not only theoretical computer science problems lay on the graph theory but also in many other distinct fields, from particle physics, chemistry to sociology.
All this because every little thing in our universe is linked, and when this set of things became a “web of things”, we need to study its properties. And that’s where graph theory get in.
So when a graph gets bigger, we need to represent this structure in a computational way, so we can compute things like shortest path between two nodes, connectivity and thousand of other properties and techniques.
The most common ways to represent graph mathematically are:
Adjacency Matrix
It’s a matrix that represent the adjacency of every node in a graph, it’s an excellent way to work computationally with graphs. The same graph that I presented previously in a visual way can be represented by the following adjacency matrix:
Adjacency List
This is another common way to represent graph mathematically, it’s a simple list of lists, each node in the main list points to a list of their adjacent nodes.
Here’s an example:
Data Structures to represent Graphs
Ok, so, how do we represent graphs, edges and vertexes in terms of data structures? Before we dig deeper in the algorithms and the mathematical properties of the graphs, we need to create our Data Structure to work with.
The vertex
package GraphModels;
public class Vertex {
/* This Data Structure will be capable to represent a Vertex,
* which is a Node that will be used on a graph
*/
public String id;
public String name;
public boolean visited = false;
public Vertex(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
}
For now you may be asking yourself why do we need a variable called “Visited”. Well, we’ll be using it in algorithms to walk through the graph, so we must need to know which nodes were visited. It will became more clear soon!
The Edge
Yes, the edge must be represented computationally! That’s our way to figure out paths through the vertexes, the edge may or may not have a weight, the edge must know its source vertex and its destination vertex
package GraphModels;
public class Edge {
/* This Data Structure will be capable to represent a Edge,
* that will be used on a graph
*/
public String id;
public Vertex source;
public Vertex destination;
private final int weight;
public Edge(String id, Vertex source, Vertex destination, int weight) {
this.id = id;
this.source = source;
this.destination = destination;
this.weight = weight;
}
public String getId() {
return id;
}
public Vertex getDestination() {
return destination;
}
public Vertex getSource() {
return source;
}
public int getWeight() {
return weight;
}
@Override
public String toString() {
return source + " " + destination;
}
}
The Graph
That’s for sure the biggest and most complex part, don’t panic with the many algorithms already implemented in this code. I’ll be explaining one by one.
We’re reading a text file containing the text file, if you want to test by yourself, make sure to create a .txt in the correct way and to pass the correct file path! You can find the instructions to write the .txt graph in the comments of this code
package GraphModels;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
public class Graph {
/* This Data Structure will be capable to represent a Graph,
* where G = (V, E)
*/
private List nodes;
private List edges;
public Vertex node;
public Edge edge;
private String path;
private int [][] adjacencyMatrix;
private Map nodesMatrixMap;
private List adjacentNodes;
public int degree;
public int minDegree;
public int maxDegree;
public int avgDegree;
public Graph() {
}
public List getNodes() {
return nodes;
}
public List getEdges() {
return edges;
}
public void setNodes(List vertex){
this.nodes = vertex;
}
public void setEdges(List edges){
this.edges = edges;
}
// Find an edge
// TO-DO: Change == to equals
public Edge getEdge(Vertex source, Vertex destination) {
for (Edge edge : this.getEdges()) {
if ((edge.getSource().getId() == source.getId() && edge.getDestination().getId() == destination.getId()) || (edge.getSource().getId() == destination.getId() && edge.getDestination().getId() == source.getId())) {
return edge;
}
}
return null;
}
// Check if there is an edge for two given vertices
public boolean hasEdge(Vertex source, Vertex destination) {
Edge result = this.getEdge(source, destination);
if (result != null) {
return true;
} else {
return false;
}
}
public List getAdjacentNodes(Vertex node){
adjacentNodes = new ArrayList();
for (Vertex currentNode : nodes){
if (hasEdge(node, currentNode)){
adjacentNodes.add(currentNode);
}
}
return adjacentNodes;
}
public int getMinDegree(){
minDegree = 99999999;
for (Vertex node : nodes){
if (this.getDegree(node)maxDegree){
maxDegree = this.getDegree(node);
}
}
return maxDegree;
}
public int getAvgDegree(){
avgDegree = 0;
for (Vertex node : nodes){
avgDegree += this.getDegree(node);
}
avgDegree = avgDegree/nodes.size();
return avgDegree;
}
//modified for our needs
public int breadthFirstSearch(Vertex rootNode){
int visitedNodes = 0;
Queue q = new LinkedList();
q.add(rootNode);
while (!q.isEmpty()){
Vertex currentNode = (Vertex) q.peek();
for (Vertex node : this.getAdjacentNodes(currentNode)){
if (!node.visited){
node.visited = true;
q.add(node);
visitedNodes++;
}
}
q.remove();
}
//reseting all flags
for (Vertex node : nodes){
node.visited = false;
}
return visitedNodes;
}
public boolean isConnected(){
int numberOfNodes = nodes.size();
for (Vertex node : nodes){
if (!(this.breadthFirstSearch(node) == numberOfNodes)){
return false;
}
}
return true;
}
//TO-DO: error treatment.
// while this treatment doesn't exist: BE EXTREMELY CAREFUL WITH GRAPH.TXT
// the right syntax is:
//line (1) :1,2,...,n
//line (2) :1-2
//line (3) : weight of the previous connection
//line (n) :2-n
//line (n+1) : weight of the previous connection
//line (n+2) :-1
//where the first line you must declare the nodes, each one separated by comma
//the second til the n-th line you must declare the connections between the nodes declared
//in the first line
//after every connection, in the next line, you must declare the weight of the connection
// leave everything zero to create a unweighted graph
//after the last connection, you must end with a -1
// if you don't do this your computer may explode lol
//...
//...
//...
// i don't know, i did never try that.
public void createGraph(String path) throws FileNotFoundException, IOException{
this.path = path;
nodes = new ArrayList();
edges = new ArrayList();
FileReader fr = new FileReader(path);
BufferedReader textReader = new BufferedReader(fr);
//gets the first line, which are the nodes that must be created
String TextData = textReader.readLine();
//separate the string with numbers
String[] nodesInString = TextData.split("\\s*,\\s*");
//create the list of nodes
for (String nodeInString : nodesInString){
node = new Vertex(nodeInString, "node " + nodeInString);
nodes.add(node);
}
//create the list of edges
String edgeIntoString;
Vertex vertex_aux1 = new Vertex("-1","-1");
Vertex vertex_aux2 = new Vertex("-1","-1");;
int n = 0;
//varre a linha que tem x-y
while (!(edgeIntoString = textReader.readLine()).equals("-1")){
String[] nodesConnected = edgeIntoString.split("\\s*-\\s*");
//varre os dois nodes
int peso = Integer.parseInt(textReader.readLine());
//verifica se x e y passados no txt estão instanciados em nodes
for (Vertex node : nodes){
if (nodesConnected[0].equals(node.getId())){
//se o node do txt foi achado em nodes
vertex_aux1 = new Vertex(node.getId(), node.getName());
}
}
for (Vertex node : nodes){
if (nodesConnected[1].equals(node.getId())){
vertex_aux2 = new Vertex(node.getId(), node.getName());
}
}
edge = new Edge(Integer.toString(n),vertex_aux1, vertex_aux2, peso);
edges.add(edge);
}
}
// Add a new edge
public boolean addEdge(Vertex source, Vertex destination) {
Edge newEdge = new Edge("id", source, destination, 0);
return this.edges.add(newEdge);
}
// Remove an edge
public boolean removeEdge(Vertex source, Vertex destination) {
Edge result = this.getEdge(source, destination);
if (result != null) {
return this.edges.remove(result);
} else {
System.out.println("Couldn't find edge");
return false;
}
}
public int getDegree(Vertex node){
degree = 0;
for (Vertex CurrentNode : nodes){
if (hasEdge(node, CurrentNode)){
degree++;
}
}
return degree;
}
public void printGraph() {
for (Vertex node: this.getNodes()){
System.out.println(node.getName());
System.out.print("Adjacent nodes: ");
adjacentNodes = getAdjacentNodes(node);
for (Vertex adjacentNode : adjacentNodes){
System.out.print(adjacentNode.getName() + " ");
}
System.out.println(" ");
System.out.println("Degree of this node: " + getDegree(node));
System.out.println(" ");
}
System.out.println("- - - - - - - - - - - - - - - - ");
System.out.println(" ");
System.out.println("Min Degree of this Graph: " + getMinDegree());
System.out.println(" ");
System.out.println("Max Degree of this Graph: " + getMaxDegree());
System.out.println(" ");
System.out.println("Average Degree of this Graph: " + getAvgDegree());
System.out.println(" ");
System.out.println("Graph is connected: " + this.isConnected());
System.out.println(" ");
System.out.println("- - - - - - - - - - - - - - - - ");
System.out.println("Connections: ");
System.out.println(" ");
for (Edge edge : this.getEdges() ){
System.out.print(edge.getSource().getId() +"<->"+edge.getDestination().getId()+" ");
System.out.println("weight: " + edge.getWeight());
}
System.out.println(" ");
System.out.println("- - - - - - - - - - - - - - - - ");
}
public void setAdjacencyMatrix() {
initializeAdjacencyMatrix();
int weigth;
int source;
int destination;
for (Edge currentEdge : this.getEdges() ){
weigth = currentEdge.getWeight();
source = (int) nodesMatrixMap.get(currentEdge.getSource().getName());
destination = (int) nodesMatrixMap.get(currentEdge.getDestination().getName());
adjacencyMatrix[source][destination] = weigth;
//must be symmetric
adjacencyMatrix[destination][source] = weigth;
}
}
public void initializeAdjacencyMatrix(){
int numNodes = this.nodes.size();
adjacencyMatrix = new int[numNodes][numNodes];
nodesMatrixMap = new HashMap();
for (int i = 0; i < numNodes; i++) {
nodesMatrixMap.put(this.nodes.get(i).getName(), i);
for (int j = 0; j < numNodes; j++) {
adjacencyMatrix[i][j] = -1;
}
}
}
public void printAdjacencyMatrix() {
String sourceName;
String destName;
int source;
int dest;
System.out.println(" ");
System.out.println("Adjacency Matrix: ");
System.out.println(" ");
for (int i = 0; i < this.nodes.size(); i++) {
sourceName = this.nodes.get(i).getName();
source = (int) nodesMatrixMap.get(sourceName);
for (int j = 0; j < this.nodes.size(); j++) {
destName = this.nodes.get(j).getName();
dest = (int) nodesMatrixMap.get(destName);
if (adjacencyMatrix[source][dest] == -1) {
System.out.print("- ");
} else {
System.out.print(adjacencyMatrix[source][dest] + " ");
}
}
System.out.print("\n");
}
}
}
The test file
Here’s the file containing the main, if you want to test, remember to change the path file!
package graphproject;
import GraphModels.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class GraphProject {
//graph creation procedure
private List nodes;
private List edges;
private Graph graph;
public Vertex node;
public Edge edge;
public void printGraph(Graph graph) {
for (Vertex node: graph.getNodes()){
System.out.println(node.toString());
}
for (Edge edge : graph.getEdges() ){
System.out.println(edge.toString());
System.out.println(" ");
}
}
public void test() throws IOException{
Graph graph = new Graph();
graph.createGraph("/Users/daniel/Documents/workspace_java/GraphProject/src/graphproject/graph.txt");
graph.printGraph();
graph.setAdjacencyMatrix();
graph.printAdjacencyMatrix();
}
//end of graph creation procedure
public static void main(String[] args) throws IOException {
GraphProject gp = new GraphProject();
gp.test();
}
}
Conclusion and next steps
At this moment, you’re perfectly able to create a graph (via .txt file) and run all those algorithms to extract information about your graph. Just make sure to import the right libraries and to put the files in the right package. Doing these little things right, I’m pretty sure this will work perfectly.
But I’m sure you may be a little lost about a few algorithms and techniques we’ve implemented in the Graph.java. But, don’t worry, i’ll be explaining each method one by one in the next parts of this post!


Dongyin HU
<EMAIL_ADDRESS><EMAIL_ADDRESS>University of Science and Technology of China,
B.Eng. from School of Information Science and Technology,
GPA : 3.91/4.30, ranking 2/60 (Dpt.) 11/363 (Sch.) (Tscpt.)
Incoming student of UCSD ECE department.
Welcome to Dongyin Hu's personal website. I earned my B.Eng. degree from University of Science and Technology of China in Jul, 2020 and will continue my education in University of California, San Diego. My research interests lie in networking, mobile and wireless networks, and develop interactive systems using these techniques. I believe research in this field will enable modern electronic devices which are capable to benefit all.
Publications
2020
-
Jiaming Wang, Dongyin Hu, Chirag Shetty, and Haitham Hassanieh. 2020. Understanding and Embracing the Complexities of the Molecular Communication Channel in Liquids. In MobiCom’20.
Research
Milliback : Real-Time Plug-n-Play mm-Level Tracking Using Wireless Backscattering
University of Science and Technology of China, Lab for Intelligent Networking and Knowledge
Engineering
(LINKE)
Published in UbiComp
19 (Not author). From Jan 2018 - Aug 2019.
In Milliback, we devised a real-time accurate tracking system using wireless backscatter signals. This is especially useful for applications such as AI-assisted education, remote healthcare, and handwriting-training for kids. Existing sensing modalities (such as inertial, vision or Wi-Fi) fail to offer the necessary accuracy (mm-level) due to occlusion, error accumulation or deployment cost. Therefore, we focused on low-cost RFID tags, and utilized GHz signals to reach high accuracy for their sensitivity to distance change. However, this posed a new challenge for us: we had to discard current RFID protocol due to frequency mismatch, and thus also discarded much information about the channel state. I proposed and implemented two O(n) tracking algorithms with a little knowledge of channel, and actively assisted in the design of two corresponding systems consisting of multiple receivers and one position-constrained/free transmitter. The system reaches an excellent performance of merely 4.9mm mean error.
Understanding and Embracing the Complexities of the Molecular Communication Channel in Liquids
University of Illinois at Urbana-Champaign, System & Networking Research Group
(SyNRG)
Published in MobiCom'20,
with me as second author. From Jul 2019 - Sep 2019.
Using molecular communication (MC) to build a network within the human body is promising, yet not well understood. A key challenge lies in the different channel properties of MC and traditional communication methods. Our proposed MC protocol, μ-Link, tackled that challenge with a Viterbi decoder that captures these properties precisely. I improved the performance of the decoder in μ-Link by updating the channel state information, and then modified the design of our novel macro-scale platform to achieve higher stability. Comparing with other works who model MC channels, μ-Link achieves 5x higher throughput and 20x lower bit error rate, exhibiting both high efficiency and reliability. Our work is currently under submission for MobiCom, with me as the second author.
Scholarships and Honors
- Honorary Rank, 2019
- Graduation honor, top 5%.
- TANG Lixin Scholarship, 2019
- 60 out of the whole university, including undergraduate and graduate students.
- National Scholarship, 2019
- 7 out of 363.
- Scholarship of Institute of Microsystem and Information Technology, 2018
- 11 out of 363.
- Outstanding Student Scholarship, USTC, 2017 & 2016


This is Cristiano Ronaldo
Ronaldo was born on February 5, 1985, in Funchal, Madeira, Portugal, a small island off the western coast of the country. Ronaldo is the youngest of four children. He grew up extremely poor and was diagnosed with a irregular heart beat quite young that he eventually had to get surgery for. He fell in love with soccer through his Father who eventually passed away.
Ronaldo left home at age 13 to play for a club in Portugal called "Sporting CP". He played there for years, scoring goals and making a name for himself. He got noticed by biggest clubs around the world and in 2003 went on to sign for Manchester United. Ronaldo spent a total of 6 years at Manchester, scoring 118 goals in 292 appearances. He was a wonderkid and that led to other clubs wanting him, Real Madrid in 2009 then signed Ronaldo for a world record transfer fee.
Ronaldo quickly rose to fame even more as being considered one of the greatest players of all time.
His Achievements: Record tying 5 Best Player in the world awards, Ronaldo holds the record for most goals in the UEFA Champions League (127), the UEFA European Championship (9), the FIFA Club World Cup (7), and the UEFA Nations League Finals (3), as well as most goals scored in a UEFA Champions League season (17). He has scored 702 senior career goals for club and country. Moreover, he is also the first player in history to win four European Golden Shoes.
As a person who has played soccer competetively all my life, Ronaldo is an idol. I look up to him and want to base my play style off him because of how good he is. I've followed his life since I was young, he has had an impact on millions of kids lives like mine.


Example 02 - User Input
In this example we will use some user's input to get information from another API and display it.
Enter your favourite number:


Choose size
Small
Medium
Large
Choose crust
Original crust
Gluten-friendly crust
Cheese toppings
Veggie toppings
Meet toppings
Sauce
Add to Cart
Your Cart
Cart
Back to Menu


fun loadFromFile(assetFile: String): LoadableBuilding?
Takes a given file and (possibly) returns a LoadableBuilding
assetFile - filename to load from
assetFile


Photo by Herson Rodriguez
2131 Hog Mountain Rd Watkinsville, GA 30677
Hours: Monday - Wednesday 11AM–8PM Thursday - Saturday 11AM–9PM Sunday 11AM–5PM
Phone:<PHONE_NUMBER>


 Takes minutes but looks stunning.
Place a 20-25cm/8-10in stainless steel ring onto the flan case and use it to cut through, discarding the outer sponge.
Cut the flan in half, to get two thin layers.
Place the steel ring onto a large flat plate and place one of the sponge layers inside and press down lightly.
Sprinkle two tablespoons of the Drambuie over the sponge then set aside.
Place the double cream into a bowl with the vanilla extract, the remaining Drambuie and 75g/3oz of the sugar and whip to soft peaks.
Line the flan ring with the largest strawberry halves, cut side against the ring. Reserve the rest of the strawberries.
Carefully place the whipped cream into the centre of the flan and spread out gently to fill the whole mould – adding as much cream as necessary to fill to the top of the strawberries.
Place the remaining flan case on top and press down lightly.
Remove the ring by carefully warming the edges with a hot cloth and lifting it straight off.
Dust the top with the icing sugar.
Place the remaining caster sugar into a very clean frying pan and place on the stove to caramelise.
Once it is caramelised remove from the heat to cool slightly.
While this is cooling, take a hot metal skewer that is red hot and score the topof the gateau in lines to create a diamond style pattern.
Dress the top of the gateau with the leftover strawberries and berries and garnish with sprigs of fresh mint.
To finish, dip a small spoon into the sugar and twist around a long narrow cylinder, like a steel used to sharpen knives, or even a wooden spoon handle, to create some curls then balance on top of the gateau.
Serve cut into wedges with more pouring cream if needed.


By working with CDL and EZID, you are automatically working with DataCite, because CDL is a full DataCite member. This diagram may help explain the relationships.
Once the main account is set up, if you would like to sponsor other groups, then you would use the sponsored account order form to request new accounts. Please contact us for this form if you don't have it. In addition, we provide customizable outreach materials and presentations you can re-purpose to use at your institution.
We take care of this for you, based on the information you provide on the forms mentioned above.
If you submit content to a repository or service working with EZID, the ARKs or DOIs it assigns come from EZID.
EZID identifiers can be related to external links if you associate them with metadata, for example by using the relatedIdentifier field in the DataCite metadata schema.
If you would like to include clickable links to DOIs and ARKs on a landing page, we recommend that you format them following this html template:
DOI: doi:10.1234/ABCD
ARK: ark:/12345/abcde
Because EZID has an API, it is possible to write code to interact with your Dspace repository.
If an account-holder leaves your institution, please let us know so that we revoke their CREATE access to EZID. They will continue to be able to maintain all existing identifiers.
If there is a researcher from your institution associated with the project, and if you want to sponsor the access, then we are okay with extending access. Please use the sponsored account order form (see above) to request the new account.
As of August, 2017, only University of California clients are eligible to participate. Please contact us if you have questions about your existing Crossref service account.


?*
/
v'.
The
University
of
Texas
at
Arlington
Nama
jamaicense
L.
John
D.
Bacon
1984
THE
NEW
YORK
BOTANICAL
GARDEN
Plants
of
Hispaniola
Dominican
Republic
No.
14591
Nama
jamaicensis
L.
Det.
Alain
H.
Liogier,
March
I969
Creeping
on
sand,
from
taproot,
about
350
cm
in
diam.
Flowers
white*1
On
seashore,
Luper<5n.
6
7
8
9
10
The
New
York
copyright
reserved
Botanical
Garden
01498400
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


30 May 2000
Disease Outbreak Reported
The Public Health Unit for the town of Walkerton, Ontario (population 5000) has reported an outbreak of E.coli O157. To date, 5 people have died and 27 are hospitalized. Exposure to E. coli is believed to have occurred between 12-15 May. Tests have confirmed E. coli contamination in the Walkerton water supply system. On 21 May, the Public Health Unit issued a "Boil Water Order" to the residents of Walkerton which is still in effect.
Investigations are underway by provincial and federal health and environmental authorities.


brush with some oil and keep in the oven. after 10 minutes remove from the oven, turn the skewers, brush some oil and again keep in the oven. 15. remove after 10 or 15 minutes. serve the paneer tikka sprinkled with 1 tsp chaat masala along with mint chutney, onion slices and lemon wedges


IPSJ Programming Contest Committee
2020/09/29
The SamurAI Dig Here page is a tool to enjoy the game of SamurAI Dig Here on HTML browsers.
You can do the following in the SamurAI Dig Here page.
The figure below shows a sample display image of the page.
The game field is divided into grid-aligned cells.
Four agents, one samurai and one dog for each side, are initially located on some of the distinct cells of the game field.
Agents can move to one of the neighboring cells in a single game step, or can also choose to stay on the same cell. Dogs can move to any of the eight neighboring cells. Samurai can usually move only one of the four neighboring cells, however, when they take a rest, they can move to any of the eight neighbors in the step immediately following. Samurai in such a state are colored more brightly.
Initially, some of the cells in the game field have a hole, preventing game agents from stepping into them.
 Usually, one of the four neighboring cells are the target of digging or plugging, however, in the step immediately after a rest step, any of the eight neighboring cells can be the target. Dogs can do neither.
Some of the cells have certain amounts of buried treasure. Positions and amounts of some of them are already known initially, while some are not. The objective of the game is to dig out more treasure than the opponent. Samurai can dig out the buried treasure in neighboring cells by digging new holes there.
Dogs on one of the eight neighboring cells can detect the existence and the amount of the buried treasure. When a dog is on a cell with buried treasure, the position and the amount of the treasure is revealed to all the agents of both teams.
Clicking the import button on top of the screen, a window for selecting a file to import pops up. A game log is imported by choosing a file.
Note that, when the game log is updated after importing, loading the same file expecting the updated one to be loaded may fail, because the browser sticks to the cache kept on the first import, that is, the version before the update. Reloading the whole web page by the reload feature of the browser may solve the problem.
The initial play mode is automatic. In the automatic mode, game steps recorded in the game log loaded are visualized, and steps beyond what are recorded are automatically generated with agent moves chosen by players built in the system. The generated moves are appended to the game record.
The game progresses controlled by some of the buttons on the top.
Buttons on the top left and their functions are as follows.
Buttons on the top right and their functions are as follows.
In the manual play mode, one of the two samurai can be controlled manually.
Clicking the manual play button on the top right starts the manual play mode.
The first click on the button makes the red samurai controlled manually. The button changes its color to red . All the other agents, dogs and the blue samurai, are controlled by the built-in players. Another click makes the blue samurai under manual control, and changes the button color to blue . The the red samurai is then controlled by the built-in player, as well as dogs. Still another click will revert the play mode to automatic, changing the button color back to the original white.
In the manual play mode, arrow symbols are displayed on cells around the manually controlled agent, showing possible plays. Clicking the cells marked with arrows tells the following.
Actions of the manually controlled samurai can also be told by pressing keys. The keys and their meaning are as follows.
| y | Upper left cell (↖) | u | Upper right cell (↗) |
|---|---|---|---|
| b | Lower left cell (↙) | n | Lower right cell (↘) |
| h ← | Left cell (←) | l → | Right cell (→) |
| k ↑ | Upper cell (↑) | j ↓ | Lower cell (↓) |
| . space | Take a rest |
Stepping manually deletes any play records of steps beyond the played step, and the result of the stepping is recorded as the last step.
Automatic plays can also be instructed in the manual play mode. Single step by the step forward button , and repetitive play by the play button , are possible. When the play stops, the play mode is kept to be manual. Rolling back to the initial state by the rewind button is also possible.
Edit mode is enabled by clicking the edit button on top of the screen. The edit mode enables editing, saving, and loading the game log and/or configuration of the game field.
The following changes are made on the displayed screen.
In the edit mode, the border of the cell with the mouse pointer becomes white, indicating that the cell is being edited. Any configuration changes discard all of the recorded play.
Pressing a mouse button on a cell with an agent on it, and dragging the mouse moves the agent another cell. Agents cannot be moved to a cell with buried treasure or a hole; instead, the position will be the cell the mouse cursor was previously on.
If a shift key is pressed when the mouse mouse button is pressed, the agent rotates clockwise. Note that, although this changes the appearance of the agent in the initial state, it has no influence on the game play.
The amount of buried treasure in a cell can be increased or decreased by clicking the mouse button on the cell. With a mouse click without pressing a shift key decreases the amount by 2. When the amount becomes 0, the buried treasure in the cell disappears. A mouse click while pressing a shift key increases the amount by 2. When the click is on a cell while pressing a shift key on a cell without any buried treasure, treasure of amount 2 is buried in the cell.
A mouse click on a cell with buried treasure while pressing a control key toggles the treasure initial status between apparent and hidden. Amounts of hidden treasures are displayed in red figures while those of apparent ones are in yellow.
 Otherwise, if the cell does not have any buried treasure, a new hole is dug out.
Clicking the expand button increments the number of cells in one side of the field. Clicking it with a shift key pressed down decrements it. The size cannot be made smaller than 6 nor larger than 20. Agents on cells lost on resize will be moved to some other cells. Any holes and buried treasures in the cells lost or on the cell to which an agent is moved will be lost.
The maximum number of steps of the game can be incremented or decremented by a mouse click or mouse wheel rotation on the clock icon while in the edit mode. Clicking the icon while pressing a shift key increments the maximum number of steps and decrements otherwise. Rotating the wheel up or down increments or decrements it respectively. When a control key is pressed, the change amount is multiplied by 10. It cannot be set to be less than 10.
Clicking the random configurations button makes a new random field configuration. Play logs, if any, will be lost.
If a shift key is pressed on clicking, only the buried treasures (both hidden and known) are reconfigured at random, without changing the positions of agents and holes.
Clicking the clear log button discards play logs, if any, keeping the field configuration as is. This is meant for saving or exporting the field configuration without any play logs.
The current game state, that is, the configuration of the game field as well as the play log, can be saved to the storage of the browser for loading afterwards. This storage is kept in the browser of the system; Neither page reloading reload nor browser is restart will destroy the record. The record, however, cannot be accessed with other browsers or on other systems.
Clicking the save button on the screen top, a dialog window pops up for entering a name. When the name is entered, the current game is saved with that name. Game states saved with the same name, if any, will be overwritten.
Clicking the load button on the screen top, a list of names of saved game states appears. Choosing one of them will load the game state with that name.
Clicking the remove button on the screen top, a list of names of saved game states appears. Choosing one of them will remove the game state with that name from the storage.
Clicking the export button on top of the screen, a window to input the name for a file pops up. Game log of the current game is exported into the file with given name. If no file name extension is specified, the extension of ".dighere" is automatically appended to the name.
Clicking the exit edit mode button on the screen top ends the edit mode, and the display the initial state reflecting the editing.
Detailed settings can be altered with the settings dialog shown by clicking the settings button .
Several music tunes are provided to be played during the automatic plays. They are different arrangements of Hanasaka Jijii, a popular nursery song about a dog barked on embedded treasure. You can choose a tune, with the selector labeled "BGM", or choose "MUTE" if you don't want music.
Clicking the random configurations button randomly reconfigure the game field setting. Which game features to be randomized can be chosen can be chosen. There are four icons for agents , holes , known treasures , and hidden treasures . Icons with red borders mean that the corresponding features are to be configured randomly. Others are kept without reconfiguration. Clicking these icons can toggle whether or not the features are to be configured.
The field to the right of the hole icon is for setting the probability of holes in the game field cells on random configurations.
The two fields to the right of the known treasure icon are for setting parameters used in random reconfiguration of known treasures. The first one is for setting the probability of treasures in game field cells. The next, labeled "max", is for setting the maximum amount of treasure in one cell. This should be a positive even number. If an odd number or a number less than 2 is specified, the value is adjusted to satisfy the constraints.
The two fields to the right of the hidden treasure icon are for setting parameters used in random reconfiguration of hidden treasures in the same manner.
Clicking the "Done" button will make the changes made take effect. Clicking the "Cancel" button will discard all the changes. Either will close the dialog.


RunningAchilles.Rmd
In this vignette we cover how to run the Achilles package on your Common Data Model (CDM) database in order to characterize the dataset. The characterizations can help you learn more about your dataset’s features and limitations.
It is a best practice for all OHDSI sites to run Achilles on their CDM datasets to ensure researchers can evaluate study feasibility and contextualize study results.
The Achilles package consists of:
In most Achilles functions, you can specify
sqlOnly = TRUE
in order to produce the SQL without
executing it, which can be useful if you’d like to examine the SQL
closely or debug something. The SQL files are stored in the
outputFolder
.
File and console logging is enabled across most Achilles functions.
The status of each step is logged into files in the
outputFolder
. You can review the files in a common text
editor.
The verboseMode
parameter can be set to FALSE if you’d
like less details about the function execution to appear in the console.
Either way, all details are written to the log files. By default, this
is set to TRUE.
In order to run the package, you will need to determine if you’d like the Achilles tables and staging tables to be stored in schemas that are separate from your CDM’s schema (recommended), or within the same schema as the CDM.
As the achilles functions can run independently, we have added a multi-threaded mode to allow for more than 1 SQL script to execute at a time. This is particularly useful for massively parallel processing (MPP) platforms such as Amazon Redshift and Microsoft PDW. It may not be beneficial for traditional SQL platforms, so only use the multi-threaded mode if confident it can be useful.
Further, while multiple threads can help performance in MPP platforms, there can be diminishing returns as the cluster has a finite number of concurrency slots to handle the queries. A rule of thumb: most likely you should not use more than 10.
In the multi-threaded mode, all scripts produce permanent staging tables, whereas in the single-threaded mode, the scripts produce temporary staging tables. In both, the staging tables are merged to produce the final Achilles tables.
The following sub-sections describe the optional parameters in achilles that can be configured, regardless of whether you run the function in single- or multi-threaded mode.
To keep the staging tables organized, the achilles
function will use a table prefix of “tmpach” by default, but you can
choose a different one using the tempAchillesPrefix
parameter. This is useful for database platforms like Oracle, which
limit the length of table names.
The sourceName
parameter is used to assign the name of
the dataset to the Achilles results. If you set this to
NULL
, the achilles function will try to
obtain the source name from the CDM_SOURCE table.
The createTable
parameter, when set to
TRUE
, drops any existing Achilles results tables and builds
new ones. If set to FALSE
, these tables will persist, and
the achilles function will just insert new data to
them.
By default, the achilles function runs all default
analyses detailed in the getAnalysisDetails
function.
However, it may be useful to focus on a subset of analyses rather than
running the whole set. This can be accomplished by specifying analysis
Ids in the analysisIds
parameter.
By default, the achilles function does not run
analyses on the COST table(s), as they can be very time-consuming, and
are not critical to most OHDSI studies. However, you can choose to run
these analyses by setting runCostAnalysis
to
TRUE
. The cost analyses are conditional on the CDM version.
If using CDM v5.0, then the older cost tables are queried. If using any
version after 5.0, the unified cost table is queried.
To avoid patient identification, you can establish the minimum cell
size that should be kept in the Achilles tables. Cells with small counts
(less than or equal to the value of the smallCellCount
parameter) are deleted. By default, this is set to 5. Set to 0 for
complete summary without small cell count restrictions.
See the Post-Processing section to read about how to run this step separately
This parameter is only necessary if running in multi-threaded mode
The dropScratchTables
parameter, if set to
TRUE
, will drop all staging tables created during the
execution of achilles in multi-threaded mode.
See the Post-Processing section to read about how to run this step separately
The createIndices
parameter, if set to
TRUE
, will result in indices on the Achilles results tables
to be created in order to improve query performance.
When running achilles, the return value, if you assign a variable to the function call, is a list object in which metadata about the execution and all of the SQL scripts executed are attributes. You can also run the function call without assigning a variable to it, so that no values are printed or returned.
In single-threaded mode, there is no need to set a
scratchDatabaseSchema
, as temporary tables will be
used.
connectionDetails <- createConnectionDetails(dbms = "postgresql",
server = "localhost/synpuf",
user = "cdm_user",
password = "cdm_password")
achilles(connectionDetails = connectionDetails,
cdmDatabaseSchema = "cdm",
resultsDatabaseSchema = "results",
outputFolder = "output")
In multi-threaded mode, you need to specify
scratchDatabaseSchema
and use > 1 for
numThreads
.
connectionDetails <- createConnectionDetails(dbms = "postgresql",
server = "localhost/synpuf",
user = "cdm_user",
password = "cdm_password")
achilles(connectionDetails = connectionDetails,
cdmDatabaseSchema = "cdm",
resultsDatabaseSchema = "results",
scratchDatabaseSchema = "scratch",
numThreads = 5,
outputFolder = "output")
This section describes the usage of standalone functions for post-processing that can be invoked if you did not use them in the achilles function call.
Not supported by Amazon Redshift or IBM Netezza; function will skip this step if using those platforms
To improve query performance of the Achilles results tables, run the createIndices function.
connectionDetails <- createConnectionDetails(dbms = "postgresql",
server = "localhost/synpuf",
user = "cdm_user",
password = "cdm_password")
createIndices(connectionDetails = connectionDetails,
resultsDatabaseSchema = "results",
outputFolder = "output")
If the achilles execution has errors, or if you did
not enable this step in the call to these functions, use the
dropAllScratchTables
function.
The tableTypes
parameter can be used to specify which
batch of staging tables to drop (“achilles”).
connectionDetails <- createConnectionDetails(dbms = "postgresql",
server = "localhost/synpuf",
user = "cdm_user",
password = "cdm_password")
dropAllScratchTables(connectionDetails = connectionDetails,
scratchDatabaseSchema = "scratch", numThreads = 5)
Considerable work has been dedicated to provide the
Achilles
package.
citation("Achilles")
#>
#> To cite package 'Achilles' in publications use:
#>
#> DeFalco F, Ryan P, Schuemie M, Huser V, Knoll C, Londhe A,
#> Abdul-Basser T, Molinaro A (2023). _Achilles: Achilles Data Source
#> Characterization_. R package version 1.7.1.
#>
#> A BibTeX entry for LaTeX users is
#>
#> @Manual{,
#> title = {Achilles: Achilles Data Source Characterization},
#> author = {Frank DeFalco and Patrick Ryan and Martijn Schuemie and Vojtech Huser and Chris Knoll and Ajit Londhe and Taha Abdul-Basser and Anthony Molinaro},
#> year = {2023},
#> note = {R package version 1.7.1},
#> }


{{ selectedEvent.eventName }}.
0
"
>This event is being shared with
{{ selectedEvent.usersToShareWith.length }}
{{
selectedEvent.usersToShareWith.length === 1 ? 'user' : 'users'
}}
This event has received:
{{ selectedEvent.totalFeedbacks }}
feedbacks


Translator: floatLig
Author: labuladong
This article shows you the magic template for “sliding window” with two pointers: the left and right of the window. With this, you can easily solve several difficult substring matching problems.
There are at least 9 problems in LeetCode that can be solved efficiently using this method. In this article, we choose three problems with the most votes, more classical to explain. The first question, in order for the reader to master the algorithm template, the last two questions are easy to answer according to the template.
This article code for C++ implementation, will not use any programming quirks, but still briefly introduce some of the data structure used, in case some readers because of the language details of the problem hindering the understanding of the algorithm idea:
unordered_map
is hashmap
, one of its methods, count(key)
, corresponds to containsKey(key)
to determine whether the key exists or not.
Map [key]
can be used to access the corresponding value
of the key
. Note that if the key does not exist, C++ automatically creates the key and assigns the map[key]
value to 0.
map[key]++
, which appears many times in the code, is equivalent to map.put(key, map.getordefault (key, 0) + 1)
in Java.
Now let’s get to the point.
The question asks us to return the minimum substring from the string S (Source) which has all the characters of the string T (Target). Let us call a substring desirable if it has all the characters from T.
If you don’t use any optimization, the code would look like this:
for (int i = 0; i < s.size(); i++)
for (int j = i + 1; j < s.size(); j++)
if s[i:j] contains all letters of t:
update answer
Although the idea is very straightforward, but the time complexity of this algorithm is O(N^2).
We can solve it with sliding window. The sliding window algorithm idea is like this:
We start with two pointers, left and right initially pointing to the first element of the string S.
We use the right pointer to expand the window [left, right] until we get a desirable window that contains all of the characters of T.
Once we have a window with all the characters, we can move the left pointer ahead one by one. If the window is still a desirable one we keep on updating the minimum window size.
If the window is not desirable any more, we repeat step 2 onwards.
This idea actually not difficult. Move right pointer to find a valid window. When a valid window is found, move left pointer to find a smaller window (optimal solution).
Now let’s graph it. needs
and window
act as counters. needs
record the number of occurrences of characters in T, and window
record the number of occurrences of the corresponding character.
Initial State:
Moving the right pointer until the window has all the elements from string T.
Now move the left pointer. Notice the window is still desirable and smaller than the previous window.
After moving left pointer again, the window is no more desirable.
We need to increment the right pointer and left pointer to look for another desirable window until the right pointer reaches the end of the string S (the algorithm ends).
If you can understand the above process, congratulations, you have fully mastered the idea of the sliding window algorithm.
Here comes the simple pseudocode.
string s, t;
// Looking for the "minimum substring" of t in s
int left = 0, right = 0;
string res = s;
while(right < s.size()) {
window.add(s[right]);
right++;
// When we found a valid window, move left to find smaller window.
while (found a valid window) {
// If the window's substring is shorter, update the res
res = minLen(res, window);
window.remove(s[left]);
left++;
}
}
return res;
If you can understand the code above, you are one step closer to solving the problem. Now comes the tricky question: how do you tell if the window (substring s[left…right]) meets the requirements (contains all characters of t)?
A general way is to use two hashmap as counters. To check if a window is valid, we use a map needs
to store (char, count)
for chars in t. And use counter window
for the number of chars of t to be found in s. If window
contains all the keys in needs
, and the value of these keys is greater than or equal to the value in needs
, we know that window
meets the requirements and can start moving the left pointer.
Refinement pseudocode above.
string s, t;
// Two pointers
int left = 0, right = 0;
string res = s;
// Initialize the map
unordered_map<char, int> window;
unordered_map<char, int> needs;
for (char c : t) needs[c]++;
// The number of characters that meet the requirement
int match = 0;
while (right < s.size()) {
char c1 = s[right];
if (needs.count(c1)) {
window[c1]++; // Add to window
if (window[c1] == needs[c1])
// The number of occurrences of the character c1 meets the requirement
match++;
}
right++;
// When we found a valid window
while (match == needs.size()) {
// Update res here if finding minimum
res = minLen(res, window);
// Increase left pointer to make it invalid/valid again
char c2 = s[left];
if (needs.count(c2)) {
window[c2]--; // Remove from window
if (window[c2] < needs[c2])
// The number of occurrences of the character c2 no longer meets the requirement
match--;
}
left++;
}
}
return res;
The above code already has complete logic, only a pseudo-code, that is, update res
, but this problem is too easy to solve, directly see the solution!
The code of solving this problem is below.
string minWindow(string s, string t) {
// Records the starting position and length of the shortest substring
int start = 0, minLen = INT_MAX;
int left = 0, right = 0;
unordered_map<char, int> window;
unordered_map<char, int> needs;
for (char c : t) needs[c]++;
int match = 0;
while (right < s.size()) {
char c1 = s[right];
if (needs.count(c1)) {
window[c1]++;
if (window[c1] == needs[c1])
match++;
}
right++;
while (match == needs.size()) {
if (right - left < minLen) {
// Updates the position and length of the smallest string
start = left;
minLen = right - left;
}
char c2 = s[left];
if (needs.count(c2)) {
window[c2]--;
if (window[c2] < needs[c2])
match--;
}
left++;
}
}
return minLen == INT_MAX ?
"" : s.substr(start, minLen);
}
I think it would be hard for you to understand if you were presented with a large piece of code, but can you understand the logic of the algorithm by following up? Can you see clearly the structure of the algorithm?
Time Complexity: O(|S| + |T|) where |S| and |T| represent the lengths of strings S and T. In the worst case we might end up visiting every element of string S twice, once by left pointer and once by right pointer. ∣T∣ represents the length of string T.
The reader might think that the nested while loop complexity should be a square, but you can think of it this way, the number of while executions is the total distance that the double pointer left and right traveled, which is at most 2 meters.
The difficulty of this problem is medium, but using the above template, it should be easy.
If you update the res of the original code, you can get the answer to this problem.
vector<int> findAnagrams(string s, string t) {
// Init a collection to save the result
vector<int> res;
int left = 0, right = 0;
// Create a map to save the Characters of the target substring.
unordered_map<char, int> needs;
unordered_map<char, int> window;
for (char c : t) needs[c]++;
// Maintain a counter to check whether match the target string.
int match = 0;
while (right < s.size()) {
char c1 = s[right];
if (needs.count(c1)) {
window[c1]++;
if (window[c1] == needs[c1])
match++;
}
right++;
while (match == needs.size()) {
// Update the result if find a target
if (right - left == t.size()) {
res.push_back(left);
}
char c2 = s[left];
if (needs.count(c2)) {
window[c2]--;
if (window[c2] < needs[c2])
match--;
}
left++;
}
}
return res;
}
Since this problem is similar to the previous one, the window
also needs to contain all the characters of the string t, but the last problem is to find the shortest substring. This problem is to find a substring of the same length.
When you encounter substring problems, the first thing that comes to mind is the sliding window technique.
Similar to the previous idea, use window
as a counter to record the number of occurrences of characters in the window. Then move the right pointer to scan through the string. If the character is already in window
, move the left pointer to the right of the same character last found.
int lengthOfLongestSubstring(string s) {
int left = 0, right = 0;
unordered_map<char, int> window;
int res = 0; // Record maximum length
while (right < s.size()) {
char c1 = s[right];
window[c1]++;
right++;
// If a duplicate character appears in the window
// Move the left pointer
while (window[c1] > 1) {
char c2 = s[left];
window[c2]--;
left++;
}
res = max(res, right - left);
}
return res;
}
One thing needs to be mentioned is that when asked to find maximum substring, we should update maximum after the inner while loop to guarantee that the substring is valid. On the other hand, when asked to find minimum substring, we should update minimum inside the inner while loop.
Through the above three questions, we can summarize the abstract idea of sliding window algorithm:
int left = 0, right = 0;
while (right < s.size()) {
window.add(s[right]);
right++;
while (valid) {
window.remove(s[left]);
left++;
}
}
The data type of the window can vary depending on the situation, such as using the hash table as the counter, or you can use an array to do the same, since we only deal with English letters.
The slightly tricky part is the valid
condition, and we might have to write a lot of code to get this updated in real time. For example, the first two problems, it seems that the solution is so long, in fact, the idea is still very simple, but most of the code is dealing with this problem.


My Muse is back. Unfortunately, she’s not a very good one. I imagine her sitting on a barstool with too much makeup, chipped nail polish and an unlit cigarette dangling from her lips. She bats asterisks of mascara at me and if I light her cigarette she’ll push a pen in my hand. It seems she’s only good for one-night stands or at best a weekend fling. Period.
And what would I write? Maybe I’d pen “Emma”, but I’d make her a prostitute and ruin the story.
My Muse would be aghast, her chins quivering in disgust.
And the fruit of my labor? Two published books, both on computer programming. My first article in print? “Logic Programming in Perl,” published in the now defunct The Perl Review. Numerous technical articles on the web. I love what I do for a living, but my Muse keeps sneaking back and pinching my bottom for another flirtation with writing fiction.
Don’t get my wrong. I do write fiction. I wrote a screenplay, have an unfinished screenplay, an unfinished novel. A few short stories. All of it unpublished.
I fear my long-standing fling with my Muse has conditioned me to accept what I do have rather than what I could have. I mock her, but she knows how to show me a good time if I only let my guard down.
I think of writing as a dream. I also think of it as a supreme act of narcissism. Of vanity. Who am I to think that others will want to read what I write? And yet here I am, perversely, writing. I’ve stolen a quickie from my Muse. No wonder she doesn’t stay long. Why should she satisfy me if I don’t satisfy her?
Sometimes we go for long walks together and we plot our novel. How is this different from daydreaming? Writing is almost respectable, but until I set pen to paper or fingers to keys, even toying with respectability eludes me.
I’m a daydreamer who has succeeded by finding himself competent in a field he enjoys. And it’s not even that I’m the best in my field. I’ve worked hard to learn more, but harder to market myself. I get hired not because I am an astonishingly good programmer. I get hired because I am Ovid. Because my ability to write, though not noteworthy, is nonetheless more interesting than a few others in my field and people remember me.
I am known for my writing, not my technical ability. Despite this I rely on the latter and not the former. I know if I pay attention to my Muse, perhaps even trouble to learn her name, she’ll reward me. She’ll strip off her makeup, her fickleness, and open herself to me. Perhaps I’d be poorer and happier and writing about missing the technical challenge of programming, but at least I would know.
Until then, my writing will reflect my Muse. Sickly sweet perfume and trying too hard to please. My writing, though cloying, reflects how I think when the Muse is nearby. I’m a saccharine Faulkner. I’m artificial. My Muse and I grunt and groan and sweat and thrust and play and writhe and finally lie back in exhaustion, each secretly fearing that we’ve let the other down. And I still don’t know her name.


Kieran Milligan, Web Developer
Menu
Home
Resume
Contact
Thanks for Reaching Out to Me. I'll get back to you shortly.
Main


{% extends 'base.html' %} {% block body_block %} Thanks for your sweet words ! I will review your message and come back to you as soon as possible. {% endblock body_block %}


This plugin use:
LanguageTool’s multilingual grammar and style checker is used by millions of people around the world.
Version: 1.0


{% extends "base.html" %} {% block content %} Link Shortener Simple link shortener made in flask. New Link URL Enter the URL you want to shorten. ID Enter the ID you want your shortened url to have.Random if not specified. {% endblock %}
New Link
Enter the URL you want to shorten.
Enter the ID you want your shortened url to have.Random if not specified.


---
sort_order: 74
tei_id: rdx_b5h9g.p.idm185143536
annotation_count: 0
images:
small-thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pckr7/mini-thumbnail/
json: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pckr7/info/
full: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pckr7/fs/
page: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pckr7/single-page/
thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pckr7/thumbnail/
title: Page 74
number: 74
---
{% raw %}66{% endraw %}
{% raw %}JACOB HODGES.{% endraw %}
{% raw %}given to ine in the prison, I seem to be{% endraw %}
{% raw %}more touched with it, because out of it I{% endraw %}
{% raw %}found relief from my sins, and rest to my{% endraw %}
{% raw %}soul; out of that very same Bible."{% endraw %}
{% raw %}" So you cannot let me have it."{% endraw %}
{% raw %}" No, master, I would let you have it{% endraw %}
{% raw %}if I could go with you, so that I could{% endraw %}
{% raw %}read it every night and morning. But{% endraw %}
{% raw %}even if I would give it to you, you would{% endraw %}
{% raw %}not have it, you would not take it from{% endraw %}
{% raw %}me."{% endraw %}
{% raw %}" If I left you a new one, and a better{% endraw %}
{% raw %}one—and a larger print ?"{% endraw %}
{% raw %}" It would not answer. Mr. Curtis led{% endraw %}
{% raw %}me on by that Bible. Mr. Curtis led me{% endraw %}
{% raw %}to the feet of Jesus out of that same Bible,{% endraw %}
{% raw %}and by Mr. Curtis leading me by that{% endraw %}
{% raw %}Bible, I saw by the 51st psalm, and the{% endraw %}
{% raw %}55th chaptei of Isaiah ; the 51st psa.m{% endraw %}
{% raw %}condemned me to eternal death and there{% endraw %}
{% raw %}was no help for me, and by the 55th{% endraw %}
{% raw %}chapter of Isaiah I found relief to my{% endraw %}
{% raw %}soul."{% endraw %}
{% raw %}Mr. Dwight had been long and un-{% endraw %}
{% raw %}weajiedlv devoted to the improvement of{% endraw %}