resources
Books (Free)
| Name | Author/s | link/s |
|---|---|---|
| Think Python | Allen Downey | link |
| Automate the Boring Stuff with Python | AlSweigart | link |
| Problem Solving with Algorithms and Data Structures using Python | Miller & Ranum | link |
| Python In Hydrology | Sat Kumar Tomer | link |
| Modeling Creativity | Tom D. De Smedt | link |
| Intermediate Python | Muhammad Yasoob Ullah Khalid | link |
| Think Stats | Allen Downey | link |
| Natural Language Processing with Python | Steven Bird, Ewan Klein, and Edward Loper | link |
| Python for you and me | Kushal Das (core dev) | link |


I graduated from Telerik academy with qualifications for web front-end developer. I went through courses in C #, JavaScript, HTML, CSS, High Quality Code, Database, Web services, Structure of data and algorithms, Photoshop, Slice and Dice, ASP.NET, MVC, Android, iOS, Windows Mobile. My experience in the sphere of programming is what I've done in the academy. I have a big interest in this field.


I am a fourth year PhD candidate at University of Michigan, Ann Arbor. My research interests are at the intersection of Machine Learning and Human-Computer Interaction (HCI).
I develop methods for Human-AI interaction that allows AI systems to utilize information about their users and the context to improve their performance. For example, a chatbot that efficiently selects queries to pose to the user to learn about a concept, or an AI educational support tool that observes student performance to adapt its recommendations. I borrow from cognitive science to build approximate user models for tasks, and use them with Reinforcement Learning to improve Human-AI interaction. I bring in strong computational and model building skills from my prior industry experience to build systems for Human-AI interaction and my training in HCI allows me to conduct real world study on improving Human-AI interaction. E.g., I recently built a bayesian network from a massive dataset of 3M records to model personal information and using it to study personalization - privacy trade-off.
I am an open source contributor to Wikipedia, and I also administered their Google Summer of Code internship program in 2016,17. Specifically, I contributed majorly to the mobile Wikipedia website to make it high-performant. For my services I was nominated by Wikimedia Foundation to attend Google summer of code mentor summit in 2017, and invited to present my research at the monthly Wikimedia research showcase in 2021.
asumit at umich dot edu
Computer Science and Engineering
University of Michigan, Ann Arbor
Ann Arbor
United States
Personalized AI can improve education significantly by giving each student the opportunity to learn at their own pace and understanding. In this work, I am leveraging cognitive theory retention of concepts to build an adaptive course practice scheduler that allows students to practice course materials. The algorithm uses RL on the underlying memory model to adaptively schedule concepts for practice that account for past recall of concepts as well as maximize lookahead gains of learning future concepts.
Understanding the privacy implications of human - agent interactions when agents try to learn about users for personalization. Built a bayesian network from a massive data of user preferences and using the network to drive interactions in a quantative study to measure privacy violations and privacy concerns, so that more privacy-aware agents can be built.
Research on conversational agents that learn to ask open domain questions to know their users that are relevant, and socially appropriate. The agent uses Reinforcement Learning to maximize information about the user as well as user's willingness to answer the question.
Built a system to evaluate the spread of covid-19 in indoor environments, by simulating human behavior using Reinforcement Learning. Through realistic models of home environments, and human behavior, we are understanding the spread of covid-19 due to human movements, to identify possible strategies to mitigate such spread. Click here for a demo video.
Developed a semi-supervised labeling method to learn about the intent of Wikipedia editors when they edit articles. We proposed the method to automatically learn about people's intent for edits to use that for developing article quality models.
Intelligent meeting recap - Designed, Built and Evaluated an LLM based meeting experiences and studied its effectivenss in the context of user's meeting. Insights informed to the development of a robust meeting recap exeperience within Microsoft.
Usefulness and challenges of devops bots in the software development landscape - Studied bots in a bot platform used by 10,000 developers daily for their workflows. Identified bot challenges such as too many recommendations, poorly grounded human-bot communication. Recommendation from the study helped improve bot engagement, and overall software development quality with Microsoft.
Developed a reviewer recommendations platform within Microsoft. Evaluated the platform through a continual quantative user study, and interviewed developers to understand the breakdowns of the system, and potential direction for improvement such as understanding code level semantic knowledge of developers for review recommendation.
Built a system to identify high level topics of Wikipedia articles using word embeddings, and RandomForests. The models are currently deployed on Wikipedia, and helping Wikipedia editors identify articles of interest to judge relevance, and decide their value for Wikipedia.
Worked on L2VPN routing solutions for Gigabit ethernet datacenter networks.


Lead Systems Engineer
Disney Parks, Experiences & Products
Built build & deploy pipelines for GKE along with their
monthly patching process
Deploy pipeline was implemented for GKE written in
golang using helm, k8s APIs. GCP auth was implemented as
well
3rd generation of internal pipeline was implemented to
support deployments for GCP, AWS & Azure.
We call this as GitOps & entire pipeline operations are done
at git repo.


Ball Clicker
Ball Color Changers
Original
Blue
Green
Yellow
Current Score: Ball Clicked
0
Times
Please install a newer broswer to play this game.


{% extends 'base.html' %} {% load bootstrap4 %} {% block content %} {{block.super}}
Name:{{hoods.name }}
Phone_number:{{hoods.phone_number}}
Email:{{hoods.email_address}}


--- layout: default title: About Shop60Seven ---
Shop60Seven is the bomb. Trust me. Read more about the owners...


Tiberias International Marathon
Tiberias ISR
Race Winners
(42 runnings)
2:42:18 2:40:37 2:25:45 2:51:16 2:54:02 2:34:42 2:40:22 2:40:08 2:44:31 2:36:40.3 2:39:07 10 Jan
2008
2:10:32
2:39:15
04 Jan
2007
2:13:13
2:39:25
05 Jan
2006
2:15:43
2:54:49
06 Jan
2005
2:18:08
2:44:50
08 Jan
2004
2:15:39
2:38:42
09 Jan
2003
2:12:45
2:51:06
03 Jan
2002
2:16:13
2:36:40
04 Jan
2001
2:17:06
2:44:57
05 Jan
2000
2:19:45
2:42:06
06 Jan
1999
2:17:38
2:48:39
07 Jan
1998
2:12:51
2:41:21
08 Jan
1997
2:16:41
2:52:48
10 Jan
1996
2:19:30
2:57:19
11 Jan
1995
2:15:10
2:56:38
12 Jan
1994
2:14:52
2:51:36
06 Jan
1993
2:17:30
2:39:11
08 Jan
1992
2:17:07
2:34:17
05 Dec
1990
2:18:55
3:00:32
06 Dec
1989
2:15:23
2:40:39
30 Nov
1988
2:18:08
2:40:01
09 Dec
1987
2:16:06
2:42:15
17 Dec
1986
2:23:12
2:36:33
17 Dec
1985
2:15:39
2:42:54
17 Dec
1984
2:16:28
3:05:19
21 Dec
1983
2:20:00
2:41:58
14
Dec
1982
2:16:39
2:46:09
22 Dec
1981
2:17:11
2:46:37
04 Jan
1981
2:16:19
2:52:45
20 Dec
1979
2:18:31+
3:16:06+
30 Dec
1978
2:14:02
3:08:18
31 Dec
1977
2:19:33
3:02:58
Notes: The elevation of this race is 200 meters below sea level, making it the lowest
elevation marathon in the world. This race has also been known as the Sea of Galilee Marathon. The 1979 course
was more than 43 km.
04 Jan
2019
2:15:16
Haimro Almaya (ISR)
(nc)
Beatie Deutsch (ISR) (nc)
07 Jan
2018
2:15:31
Girma Amare (ISR)
(nc)
Ayantu Abera Demissie
(ETH) (nc)
06 Jan
2017
2:16:39
Habtamu Arega Wegi (ETH)
(nc)
Hiwot Gebrekidan Gebremaryam
(ETH) (nc)
08 Jan
2016
2:15:31
Teferi Balcha Kebede (ETH)
(nc)
Ednah Kwambai Cherotich
(KEN) (nc)
09 Jan
2015
2:12:31
Hailu Mekonnen Legesse (ETH)
(nc)
Riki Salem
(ISR) (nc)
10 Jan
2014
2:10:33
Tariki Jifar (ETH)
(nc)
Davina Chepkosgei Wachira (KEN)
(nc)
10 Jan
2013
2:08:00
Pius Dominic Ondoro (KEN)
(nc)
Ashere Bekere Dido
(ETH) (nc)
12 Jan
2012
2:07:30
Patrick Tambwe (FRA)
(nc)
Tinet Woldegabriel Gidey
(ETH) (nc)
06 Jan
2011
2:10:02
Stephen Chemlany Kwelio (KEN)
(nc)
Abaynesh Sisay (ETH)
(nc)
07 Jan
2010
2:11:09.5
Simon Njoroge Kariuki (KEN)
(nc)
Emily Samoei
Chepkemoi (KEN)
(nc)
08 Jan
2009
2:08:07
Jackson Kipkoech Kotut (KEN)
(nc)
Irene Cherotich Kosgei (KEN)
(nc)
Leonard Mucheru Maina-2 (KEN) (nc)
Nili Avramski-9 (nc)
Leonard Mucheru
Maina (BRN) (nc)
Nili Avramski-8 (nc)
John Kipngeno
Rotich (KEN) (nc)
Nili Avramski-7 (nc)
Habtamu Bekele-2 (nc)
Nili Avramski-6 (nc)
Habtamu Bekele (ETH) (nc)
Nili Avramski-5 (nc)
Moges Taye-2
(nc)
Ester Einer (ISR)
(nc)
Simon Bor
Kipruto (KEN) (nc)
Nili Avramski-4 (nc)
Paul Tangus
Kipkemoi (KEN)
Nili Avramski-3
(nc)
Asaf Bimro (ISR)
(nc)
Nili Avramski-2
(nc)
Dube Jillo (ETH)
(nc)
Orna Blau (ISR)
(nc)
Moges Taye (ETH)
(nc)
Abeba Tola (ETH)
(nc)
Lemi Chengere-3
(nc)
Alemitu Bekele (ETH)
(nc)
Vodage Zvadya (ISR)
(nc)
Nili Avramski (ISR)
(nc)
Ahmed Hussein-3
(nc)
Tatyana Leonova (MDA)
(nc)
Ahmed Hussein-2
(nc)
Liora Leibowitz (ISR)
(nc)
Lemi Chengere-2
(nc)
Frith van der Merwe (RSA)
(nc)
Lemi Chengere (ETH)
(nc)
Marika Starowska-2
(nc)
Ahmed Hussein (ETH)
(nc)
Valentina Enaki (MOL)
(nc)
Reta Negasa (ETH)
(nc)
Marika Starowska (CZE)
(nc)
Patrick Joannes (FRA)
(nc)
Maija Vuorinen-2
(nc)
Lindsay Robertson-3
(nc)
Maija Vuorinen (FIN)
(nc)
Yair Karni (ISR)
(nc)
Kerstin Pressler (GER)
(nc)
Lindsay Robertson-2
(nc)
Sharlet Gilbert (USA)
(nc)
Lindsay Robertson (SCO)
(nc)
Siv Larsson (SWE)
(nc)
Hans Pfisterer (GER)
(nc)
Chantal Langlace (FRA)
(nc)
Ralf Salzmann (GER)
(nc)
Sally Strauss (USA)
(nc)
Colin Kirkham (ENG) (nc)
Gillian Drake (NZL) (nc)
James Dingwall (SCO)
(nc)
Zehava Shmueli-2
(nc)
Werner Dörrenbacher-2
(nc)
Mazal Shalom (ISR)
(nc)
Kevin Shaw (RSA)
(nc)
Claire Taylor (RSA)
(nc)
Werner Dörrenbacher (GER)
(nc)
Zehava Shmueli (ISR)
(nc)
(nc) => national championship
2018 Hagar Knanni was the ISR champion (2nd place, 2:49:13)
2017 Girma Amare was the ISR champion (2nd
place, 2:17:20)
2017 Mentamer Bikaya was the ISR champion (3rd
place, 2:53:24)
2016 Melkam Jamber was the ISR champion (5th
place, 2:24:02)
2016 Svetlana Bakhmend was the ISR champion (2nd place,
2:56:23)
2015 Zohar Zimro was the ISR champion (8th
place, 2:18:08)
2014 Zohar Zimro was the ISR champion (7th
place, 2:16:25)
2014 Svetlana Bakhmend was the ISR champion (3rd
place, 2:52:57)
2013 Asrat Mamo was the ISR champion (24th
place, 2:22:28)
2013 Ricki Salem was the ISR champion (12th
place, 2:54:31)
2012 Zohar Zimro was the ISR champion (15th
place, 2:15:06)
2012 Svetlana Bakhmand was the ISR champion (7th
place, 2:51:20)
2011 Ayele Setegne was the ISR champion (18th place, 2:18:57)
2011 Ya'ara Zanggi was the ISR champion (5th place, 2:51:54)
2010 Zohar Zimro was the ISR champion (18th
place, 2:28:54.7)
2010 Laurice Mendelovitz was the ISR champion (2nd place, 2:58:49.3)
2009 Wodage Zvadya was the ISR champion (17th place, 2:19:11)
2009 Orna Blau was the ISR champion (7th place, 3:00:30)
2008 Wodage Zvadya was the ISR champion (7th place, 2:18:45)
2007 Asaf Bimro was the ISR champion (9th place, 2:17:35)
2006 Ayele Setegne was the ISR champion (4th place, 2:16:59)
2005 Asaf Bimro was the ISR champion (6th place, 2:20:02)
2004 Asaf Bimro was the ISR champion (2nd place, 2:16:03)
2003 Asaf Bimro was the ISR champion (2nd place, 2:15:46)
2002 Wodage Zvadya was the ISR champion (4th place, 2:18:13)
2001 Asaf Bimro was the ISR champion (3rd place, 2:18:46)
1999 Asaf Bimro was the ISR champion (3rd place, 2:18:02)
1998 Vodage Zvadya was the ISR champion (4th place, 2:16:18)
1998 Nili Avramski was the ISR champion (3rd place, 2:48:23)
1997 Asaf Bimro was the ISR champion (2nd place, 2:16:45)
1997 Nili Avramski was the ISR champion (2nd place, 2:53:27)
1995 Asaf Bimro was the ISR champion (5th place, 2:17:12)
1995 Ayelet Shviro was the ISR champion (2nd place, 2:59:32)
1994 Dov Kremer was the ISR champion (2nd place, 2:18:08)
1993 Dov Kremer was the ISR champion (5th place, 2:19:57)
1993 Idit Ganot was the ISR champion (5th place, 3:03:26)
1992 Dov Kremer was the ISR champion (2nd place, 2:20:37)
1992 Idit Ganot was the ISR champion (2nd place, 2:51:08)
1990 Yuval Rakhmilevitz was the ISR champion (place unknown, 2:30:03)
1990 Eti Yagil was the ISR champion (place unknown, 3:06:03)
1989 Yair Karni was the ISR champion (place unknown, 2:26:49)
1989 Idit Ganot was the ISR champion (place unknown, 3:03:42)
1988 Amit Ne'eman was the ISR champion (3rd place, 2:23:54)
1988 Amal Abdallah was the ISR champion (6th place, 3:08:48)
1987 Shem-Tov Sabag was the ISR champion (place unknown, 2:27:57)
1987 Zehava Shmueli was the ISR champion (2nd place, 2:43:54)
1986 Zehava Shmueli was the ISR champion (2nd place, 2:49:22)
1985 Shlomo Azulau was the ISR champion (7th place, 2:22:34)
1985 Rosa Seiden was the ISR champion (place unknown, 3:25:11)
1984 Shem-Tov Sabag was the ISR champion (2nd place, 2:22:15)
1984 Rosa Seiden as the ISR champion (place unknown, 3:17:44)
1983 Yair Karni was the ISR champion (6th place, 2:25:59)
1983 Zehava Shmueli was the ISR champion (2nd, 2:49:14)
1982 Yair Karni was the ISR champion (2nd place, 2:18:32)
1982 Edna Fried was the ISR champion (place unknown. 2:59:59)
1981b Yair Karni was the ISR champion (2nd place, 2:17:34)
1981b Edna Fried was the ISR champion (place unknown. 3:13:37)
1981a Avi Levi was the ISR champion (7th place, 2:24:06)
1979 Yair Karni was the ISR champion (11th place, 2:29:38)
1978 Eli Avisroor was the ISR champion (place unknown, 2:24:47)
1978 Mazal Shalom was the ISR champion (3rd place, 3:24:48)
1977 Yair Karni was the ISR champion (place unknown, 2:39:01)
Most Wins
(1977-date)
Men
3
Lindsay Robertson (SCO)
1984-85,1987
Lemi Chengere (ETH)
1992-93,1997
Women
9
Nili Abramski (ISR)
1996,2000-02,2004-08
Prize Money
(ADR qualified runners)
Year Men Women Total 2017 $13,890 $18,180 $32,070 2016 18,790 12,290 31,080 2015 39,280 8,705 47,985 2014 50,000 17,300 67,300 2013 77,530 23,150 107,330 2012 134,860 16,560 154,220 2011 69,230 15,750 84,980 2010 41,100 10,700 51,800 2009 118,580 16,710 135,290 2008 104,740 7,060 111,800 2007 30,190 3,540 33,730 2006 15,050 3,900 18,950 2005 12,050 3,450 15,500 2004 11,000 6,500 17,500 2003 26,300 7,500 33,800 2002 11,650 11,000 22,650 2001 7,500 7,500 15,000 2000 8,750 7,500 16,250 1999 11,875 2,000 13,875 1998 29,720 7,500 37,220 1997 9,200 2,750 11,950 Sums $827,395 $191,365 $1,018,760
Race Time Bias (sec/km)
Year Men Women 2011 -3.7 n/c 2010 -2.3 n/c 2009 -2.4 n/c .... 2007 -1.4 n/c .... 1979 +4.7 n/c Avgs -1.0 n/c
Competitive Level (1990-date)
Year Men Women 2015 122 n/c 2014 415 n/c 2013<PHONE_NUMBER> 451 n/c 2011 491 n/c 2010 361 n/c 2009 459 n/c 2008 376 n/c 2007 379 n/c 2006 266 n/c 2005 191 n/c .... 2002 238 n/c .... 1998 423 n/c
Quality Performances
Men <2:08 4 <2:09 10 <2:10 16 <2:11 28 <2:12 44 <2:13 60 <2:14 70 <2:15 84 Women <2:26 1 <2:28 1 <2:30 1 <2:32 1 <2:34 1 <2:36 3 <2:38 6 <2:40 11
Last Updated on 19 Mar 2019
Contributors: David Eiger (33), Franco Civai (11), Kip Evans (1), Enzo Rivas (1)


AxisRangeDemo7
An example showing the effect of a restricted axis range on the chart rendering for a line chart. Use the sliders to modify the ranges of the axes and observe the effect on the chart rendering.


Top 10 Tips for Better Search Results
Last Updated Jan 2009
By: Mark Bennett - NIE VP of Engineering - Issue 7 - March 2004
Improving the Presentation and Usefulness of Your Site
- Resist Clutter
- Use Icons and Graphics When Appropriate
- Offer Both Native and HTML Views of Binary Documents
- Make it Easy to Refine Searches
- Searching for Nothing is Common: add "Null Search" Page(s)
- Finding Nothing is also Common: add a "Zero Results" Page
- Explain Your Search Syntax, It's Not Obvious
- If Your Document Dates are Always Recent, Check Them Again
- Omit or Truncate the Display of Long URLs in the Search Results
- Let Your Users Decide What's Relevant
1: Resist Clutter
We blame some of the early Internet portals for staring this trend. "If one column of content is good, the 4 or 5 must be great!"
With today's enterprise engines brimming with gee-whiz features, there's a temptation to turn them all on: resist!
Think "Zen rock garden", not "dot-com garage sale."
- Leave white space to the sides and top and bottom of the main results list.
- If your site navigation is on the left side and is large and/or complex, consider dropping it from the results list, and providing a "return" or "home" link in its place.
- Be sparing in your use of additional search options, widgets, and other search decorations: limit yourself to your one or two most important items.
Interestingly, we've seen sites with 3 column results lists (site navigation, main results, and a right column of text ads) that were clean: there was adequate white space and effective use of color to clearly demarcate items.
2: Use Icons and Graphics Where Appropriate
This does NOT apply to all sites. But, if your site search returns lists of specific products or other tangible items, perhaps even people, then we strongly suggest putting a small picture of the items in the results list.
A results list with tangible pictures is light years ahead of a results list without them. And if you have a competitor that shows icons in the results, and you don't, will certainly lose business to them. Pictures speak volumes and covey immense amounts of information that text cannot match.
If your site search is more document / information centric, then graphics are probably not applicable. For information centric sites, we have heard of folks trying to put a tiny thumbnail view of each page in the results list. We think this is an interesting idea, though we've not used it personally nor talked to any clients who have, so it's hard to gauge the effectiveness. A thumbnail might convey overall page content; seeing it might give the context of whether it was a news article, or mostly text, or a report with tables, etc. It might also help a user skip pages with ton of hyperlinks that tend to spuriously match lots of searches. On the other hand, showing a tiny picture of the 2002 sales forecast versus a tiny picture of the 2003 sales forecast may not be as helpful.
3: Offer Both Native and HTML Views of Binary Documents
If your site contains more than HTML documents--such as PDF, Microsoft Word, Power Point, etc--offer your visitors a choice: view the native document with a specialized viewer or view the document converted to HTML.
- Many search vendors support dynamically converting support binary document formats into rich HTML. Some will even markup the HTML version with highlighted search terms.
- When offering the binary / native version of the file, it's nice to indicate this in some way. We've seen folks use a small icon to represent each file type. A legend at the bottom of the results can explain where to get viewers.
- When offering binary files, it's nice to also show the file size. Rather than displaying the count in bytes, we suggest converting it to kilobytes or megabytes (dividing the size by the appropriate denominator) and adding a "k" or "M" suffix, and then rounding the results to the nearest integer.
4: Make it Easy to Refine Searches
- Add a search form to the results list.
You've probably noticed that many sites put a small search box at the top of the search results list. Most sites will even pre-fill the input box with the terms that were just searched for. This is a really nice touch, and allows visitors to refine or expand their search if they are not happy with the results. - Enable users to refine search from results list.
A really nice feature, if your search engine supports it, is to allow a subsequent search done from that mini form to search over just the current set of results. This should probably be a check box under the search form, and should default to being UNSELECTED--by default it should be a totally new search, unless they specifically check this checkbox.
An example: if the first search was just "printer", but the visitor really wanted troubleshooting a printing problem, they can then just enter "problems", and search against just the pages with problems and printers.
Some search engine vendors don't advertise this capability, but it's often still possible if the engine supports scripting. The idea is to keep taking the previous search and using it as a filter, along with the new search terms. If the search engine doesn't support "filters", then the previous search can be AND'ed in with the new search terms.
Offering only one form, perhaps overly complicated
5: Searching for Nothing is Common: Add "Null Search" Page(s)
Our work with search analytics has taught us what may seem like an odd fact: site visitors frequently click the search box without entering any search terms--they leave the input box blank. Some search engines don't allow this and bring back an error page, if this is true for yours then consider putting up a different page instead.
Why do people do this? More traditional enterprise search engines did allow null searches. If a null search was issued, the most recent documents known to the system were returned. This would effectively show "what's new" on the site. This was particularly useful if the user also selected a subsection of the site, such as FAQ's; they would see the newest FAQ's that had been added.
Fixes:
- If your search engine supports them, make sure that null searches are enabled. In the same way that you handled the zero-results page, offer some additional help text and help links.
- If your search engine cannot do null searches, considering redirecting these searches to a "what's new" page on the site.
Other times null searches can be generated by web crawling indexers (also known as spiders). If this is happening, try filtering them out of your search analytics via the user-agent field or by IP address, or perhaps try adding an appropriate entry to your site's robots.txt
6: Finding Nothing is also Common: add a "Zero Results" Page
Examples of helpful zero results information:
- A brief reminder of the search syntax
- An email link or phone number to ask a question of support or the IT department
- An automated way to expand the scope of search
- If a filter was applied, such as a sub-site search or a date range search, offer to remove the filter and rerun the search.
- If more than one term was entered and your search engine AND's together search terms by default, offer to re-issue the search with the terms OR'ed instead. Other engines treat strings of words as an exact phrase search by default: offer to re-issue the search with commas between each word.
- Suggest alternative spellings of words based on known terms used on the site
- Present a high level list of categories summarizing the type of information on the site
7: Explain Your Search Syntax, It's Not Obvious
The syntax of a search query, and therefore its meaning, are obvious to you at first glance, you work with it all of the time: you just type in what you're looking for and get what you want. Unfortunately, search engines vary widely in how they interpret search terms, especially if more than one word is entered.
For example, if two words are typed in, with just a single space to separate them, will your search engine: (a) look for documents with either word, (b) look for documents that must have both words, or (c) do an exact phrase search (both words in that exact order, with no words in between). And does your search engine understand the Internet style +/- prefixes to words, or does it prefer the older style "and" and "or" keywords; if it expects "and" and "or", do they need to be in upper case?
Add a small reminder message either under the search box or in a shaded box at the top or side of the page. Include a help link for more detailed information and examples.
Examples of hints you might give (depending on your search engine):
- Enter words and phrases separated by commas
Enter words and quoted phrases - Enter key words; prefix with +/- to include/exclude documents with those words.
- Please phrase your question in complete English sentences.
8: If Your Document Dates are Always Recent, Check Them Again
As we discussed in "Dated Material: The Sad State of Dates" many search engines have and display complete erroneous dates for the documents they retrieve. This is usually caused by the incorrect use the last-modified date of the HTTP header sent out by many web servers.
Check that the dates displayed in your results list are correct: if all of the documents show a very recent date, such as today, or this week, or the last time you indexed your site, they are probably wrong (or you have just started writing things down in your organization).
Fixes:
- If the dates are wrong you should correct the problem. Yes, this can be a complex issue to fix.
- If you can't easily fix the date problems, then don't display dates at all!
Note: if you are displaying dates, don't let them take up too much room. One major search vendor defaults the date format so that it takes up an ENTIRE COLUMN of the results list, consuming almost a third of the horizontal space. Dates are normally not that important, try displaying them in a smaller font in the last line of the results list.
9: Omit or Truncate the Display of Long URLs in the Search Results
Many results lists show the actual URL of the document, perhaps in a smaller font. If these URLs are too long, they can push the right edge of the table off the screen.
Fixes:
- Consider truncating the DISPLAY version of the URL; of course you need to keep the actual URL that goes in the anchor tag in tact. In our code we often declare two versions of the URL variable, one for "display" and one for the HREF attribute of the tag. If the displayURL is greater than some threshold, we truncate it and then add "?" to the end (to indicate truncation).
- Alternatively, put each results record in it's own table: instead of bounding each document record with

 ?

bound each record with

 ?

Be sure to set the widths of the overall table and of each
in the rows. To the end user, the results will still appear to be in a nice orderly table. A long URL will only affect that one record in the results. - At a minimum, put your Search Again form and Next Page / Previous Page links in a separate table, to insure that they are always visible.
10: Let Your Users Decide What's Relevant
Your search engine typically has a poor idea of what's relevant to a user's search, and attempting to disguise its ignorance with "relevancy bars" and the like is a waste of time and screen real estate.
You've seen then, the partially filled in green or blue bars in the left column of the results; maybe they are shaded to look 3D, or perhaps they have little green lights or stars to indicate "relevance". Not to offend those of you who still like them, but these went out of fashion long before the last millennium came to an end, yet some vendors still ship their default templates with these things turned on.
Such a cool idea, what went wrong? Some people thought they looked sexy, others silly, while still others worried about the valuable horizontal screen real estate these things used up. Our main problem with them is that they were often so misleading (or just wrong) that they are more annoying than not displaying anything.
For example: you do a search where the first screen of results is obviously junk, but the search engine assigns them all 5 stars. Or worse, all of the documents come back with exactly the same 3 star score.
Your users know whether a document is relevant or not, regardless of what your search engine thinks.
Fixes:
- Turn off relevancy indicators and focus on providing better summaries in your results list. Give the users the information to make their own decisions about what they are looking for.
- If your search engine REALLY gives great relevancy scores, or you paid too much money to not show this feature off, then at least consider using a numeric score or percentage in a plain text font next to the document title.
Making search results more relevant this should have been first on our list, but it's not always easy to fix, and in our experience is not amenable to any single approach or quick fix panacea. We've published a couple articles on this topic before if you're interested:


Home
Locations
Hours open
Contact Us
Sales
Order Now!
Welcome to Pat's Salmon Cookies
Once is Never Enough!
Explore more
Subscribe Us


Tic Tac Toe
by
Cory
and
Rose
Sponseller
When the game is over, click on the board to start a new game!


| Top |
| void | p11_kit_set_progname () |
| void | (*p11_kit_destroyer) () |
| P11KitIter * | p11_kit_iter_new () |
| void | p11_kit_iter_set_uri () |
| void | p11_kit_iter_add_callback () |
| void | p11_kit_iter_add_filter () |
| CK_RV | (*p11_kit_iter_callback) () |
| void | p11_kit_iter_begin () |
| void | p11_kit_iter_begin_with () |
| CK_RV | p11_kit_iter_next () |
| P11KitIterKind | p11_kit_iter_get_kind () |
| CK_FUNCTION_LIST_PTR | p11_kit_iter_get_module () |
| CK_SLOT_ID | p11_kit_iter_get_slot () |
| CK_SLOT_INFO * | p11_kit_iter_get_slot_info () |
| CK_TOKEN_INFO * | p11_kit_iter_get_token () |
| CK_SESSION_HANDLE | p11_kit_iter_get_session () |
| CK_SESSION_HANDLE | p11_kit_iter_keep_session () |
| CK_OBJECT_HANDLE | p11_kit_iter_get_object () |
| CK_RV | p11_kit_iter_get_attributes () |
| CK_RV | p11_kit_iter_load_attributes () |
| CK_RV | p11_kit_iter_destroy_object () |
| void | p11_kit_iter_free () |
| int | p11_kit_remote_serve_module () |
| int | p11_kit_remote_serve_token () |
| int | p11_kit_remote_serve_tokens () |
| typedef | P11KitIter |
| typedef | p11_kit_iter |
| enum | P11KitIterKind |
| enum | P11KitIterBehavior |
API that is not yet stable enough to be enabled by default. In all likelihood this will be included in the next release. To use this API you must define a MACRO. See the p11-kit.h header for more details.
void
p11_kit_set_progname (const char *progname
);
Set the program base name that is used by the enable-in
and disable-in
module configuration options.
Normally this is automatically calculated from the program's argument list. You would usually call this before initializing p11-kit modules.
P11KitIter * p11_kit_iter_new (P11KitUri *uri
,P11KitIterBehavior behavior
);
Create a new PKCS#11 iterator for iterating over objects. Only
objects that match the uri
will be returned by the iterator.
Relevant information in uri
is copied, and you need not keep
uri
around.
If no uri
is specified then the iterator will iterate over all
objects, unless otherwise filtered.
uri |
a PKCS#11 URI to filter on, or |
[allow-none] |
behavior |
various behavior flags for iterator |
void p11_kit_iter_set_uri (P11KitIter *iter
,P11KitUri *uri
);
Set the PKCS#11 uri for iterator. Only
objects that match the uri
will be returned by the iterator.
Relevant information in uri
is copied, and you need not keep
uri
around.
If no uri
is specified then the iterator will iterate over all
objects, unless otherwise filtered.
This function should be called at most once, and should be called before iterating begins.
void p11_kit_iter_add_callback (P11KitIter *iter
,p11_kit_iter_callback callback
,void *callback_data
,p11_kit_destroyer callback_destroy
);
Adds a callback to the iterator which will be called each time that an object is iterated.
These callbacks can also perform filtering. If any callback
indicates through it's matches
argument that
the object should not match, then that object will not be iterated
as far as p11_kit_iter_next()
is concerned.
The callbacks will be called with the matches
set to CK_TRUE
and it's up to filters to change
it to CK_FALSE
when necessary.
void p11_kit_iter_add_filter (P11KitIter *iter
,CK_ATTRIBUTE *matching
,CK_ULONG count
);
Add a filter to limit the objects that the iterator iterates over.
Only objects matching the passed in attributes will be iterated. This function can be called multiple times.
The matching
attributes are copied.
CK_RV (*p11_kit_iter_callback) (P11KitIter *iter
,CK_BBOOL *matches
,void *data
);
A callback setup with p11_kit_iter_add_callback()
. This callback is
called for each object iterated.
If the callback sets matches
to CK_FALSE, then this object is
skipped and not matched by p11_kit_iter_next()
. If you return
anything but CKR_OK, then the iteration is stopped, and
p11_kit_iter_next()
returns the result code.
void p11_kit_iter_begin (P11KitIter *iter
,CK_FUNCTION_LIST_PTR *modules
);
Begin iterating PKCS#11 objects in the given modules
.
The modules
arguments should be a null-terminated list of
pointers to the modules' PKCS#11 function pointers.
For each module, all initialized slots will be iterated over, having sessions opened for each of them in turn, and searched for objects matching the search criteria.
void p11_kit_iter_begin_with (P11KitIter *iter
,CK_FUNCTION_LIST_PTR module
,CK_SLOT_ID slot
,CK_SESSION_HANDLE session
);
Begin iterating PKCS#11 objects in the given module
.
If slot
is non-zero then the iteration will be limited to that
slot.
If session
is non-zero then the iteration will be limited to
objects visible through that session, which implies that they
are also limited to the slot which the session was opened for.
CK_RV
p11_kit_iter_next (P11KitIter *iter
);
Iterate to the next matching object.
To access the object, session and so on, use the p11_kit_iter_get_object()
,
p11_kit_iter_get_session()
, and p11_kit_iter_get_module()
functions.
This call must only be called after either p11_kit_iter_begin()
or p11_kit_iter_begin_with()
have been called.
Objects which are skipped by callbacks will not be returned here as matching objects.
P11KitIterKind
p11_kit_iter_get_kind (P11KitIter *iter
);
Get the kind of the current match (a module, slot, token, or an object).
This can only be called after p11_kit_iter_next()
succeeds.
CK_FUNCTION_LIST_PTR
p11_kit_iter_get_module (P11KitIter *iter
);
Get the module function pointers for the current matching object.
This can only be called after p11_kit_iter_next()
succeeds.
CK_SLOT_ID
p11_kit_iter_get_slot (P11KitIter *iter
);
Get the slot which the current matching object is on.
This can only be called after p11_kit_iter_next()
succeeds.
CK_SLOT_INFO *
p11_kit_iter_get_slot_info (P11KitIter *iter
);
Get the slot info for the slot which the current matching object is on.
This can only be called after p11_kit_iter_next()
succeeds.
CK_TOKEN_INFO *
p11_kit_iter_get_token (P11KitIter *iter
);
Get the token info for the token which the current matching object is on.
This can only be called after p11_kit_iter_next()
succeeds.
CK_SESSION_HANDLE
p11_kit_iter_get_session (P11KitIter *iter
);
Get the session which the current matching object is accessible through.
This can only be called after p11_kit_iter_next()
succeeds.
The session may be closed after the next p11_kit_iter_next()
call
unless p11_kit_iter_keep_session()
is called.
CK_SESSION_HANDLE
p11_kit_iter_keep_session (P11KitIter *iter
);
After calling this function the session open for iterating
the current object will not be automatically closed by
the iterator after later calls to p11_kit_iter_next()
or
p11_kit_iter_free()
.
It is the callers responsibility to close this session, after the iterator has been freed. The session may still be used by the iterator if further iterations are performed.
This can only be called after p11_kit_iter_next()
succeeds.
CK_OBJECT_HANDLE
p11_kit_iter_get_object (P11KitIter *iter
);
Get the current matching object.
This can only be called after p11_kit_iter_next()
succeeds.
CK_RV p11_kit_iter_get_attributes (P11KitIter *iter
,CK_ATTRIBUTE *template
,CK_ULONG count
);
Get attributes for the current matching object.
This calls C_GetAttributeValue
for the object
currently iterated to. Return value and attribute memory behavior
is identical to the PKCS#11 C_GetAttributeValue
function.
You might choose to use p11_kit_iter_load_attributes()
for a more
helpful variant.
This can only be called after p11_kit_iter_next()
succeeds.
CK_RV p11_kit_iter_load_attributes (P11KitIter *iter
,CK_ATTRIBUTE *template
,CK_ULONG count
);
Retrieve attributes for the current matching object.
Each attribute in the array will be filled in with the value
of that attribute retrieved from the object. After use the
attribute value memory pointed to by the pValue
of each attribute should be freed with the free()
function.
If the pValue
of an attribute is not NULL
passed
to this function, then it will be passed to
realloc()
to allocate the correct amount
of space for the attribute value.
If any attribute is not present on the object, or is sensitive and
cannot be retrieved, then the pValue
will be NULL.
If pValue
was not NULL
when passed to this function
then it will be freed with free()
. In these
cases CKR_OK
is returned.
This can only be called after p11_kit_iter_next()
succeeds.
CK_RV
p11_kit_iter_destroy_object (P11KitIter *iter
);
Destroy the current matching object.
This can only be called after p11_kit_iter_next()
succeeds.
void
p11_kit_iter_free (P11KitIter *iter
);
Frees the iterator and all resources, such as sessions or callbacks held by the iterator.
int p11_kit_remote_serve_module (CK_FUNCTION_LIST *module
,int in_fd
,int out_fd
);
Run a module on a given pair of input/output FDs.
int p11_kit_remote_serve_token (CK_FUNCTION_LIST *module
,CK_TOKEN_INFO *token
,int in_fd
,int out_fd
);
p11_kit_remote_serve_token
is deprecated and should not be used in newly-written code.
Run a token wrapped in a module on a given pair of input/output FDs.
int p11_kit_remote_serve_tokens (const char **tokens
,size_t n_tokens
,CK_FUNCTION_LIST *provider
,int in_fd
,int out_fd
);
p11_kit_remote_serve_tokens
is deprecated and should not be used in newly-written code.
Expose tokens on a given pair of input/output FDs. If provider
is
not NULL, all the tokens must be provided by the same module.
tokens |
a list of token URIs |
|
n_tokens |
the length of |
|
provider |
a PKCS#11 module that provides the tokens. |
[nullable] |
in_fd |
input fd |
|
out_fd |
output fd |
typedef struct p11_kit_iter P11KitIter;
Used to iterate over PKCS#11 objects, tokens, slots, and modules.
The kind of the current match.
Various flags controlling the behavior of the iterator.


The .well
class creates a box type element with padding, rounded corners and a grey background. All you need is a <div class="well">
to create a well that stretches across the entire screen.
Basic Well
The well below has been placed inside a .container
class layer.
Basic Well in a container class
You can change the size of the well by using the .well-sm
class for small wells or .well-lg
class for large wells
You can change the background colour of the well by altering the boootstrap css using your css file. Add this code .well {background-color:#FF7519;}
to your CSS or code it as inline css in the <div>.
.well {
min-height: 20px;
padding: 19px;
margin-bottom: 20px;
background-color: #f5f5f5;
border: 1px solid #e3e3e3;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
}
.well blockquote {
border-color: #ddd;
border-color: rgba(0, 0, 0, .15);
}
.well-lg {
padding: 24px;
border-radius: 6px;
}
.well-sm {
padding: 9px;
border-radius: 3px;
}


Select your default project. This is the project that the system will open when you login. If the project has experiments you can also select a default experiment in that project to open.


image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image


{% extends 'wildlifecompliance/emails/base_email.html' %} {% block content %} Wildlife Licensing application activity purposes have been proposed for issue. Please approve below details.
Application: {{ application.id }}
Details: {{ detail }}
Link: {{url}}
Note: If you haven't logged into the Wildlife Licensing System recently you may need to login first before using the provided link.
{% endblock %}


{% extends "layout.html" %} {% comment %} Licensed to Cloudera, Inc. under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. Cloudera, Inc. licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. {% endcomment %} {% block title %}Job - {{ submission.name }}{% endblock %} {% block head %} {% if not completed %} {% endif %} {% endblock %} {% block content %}
{{ job_data.stdout_tail }}
{{ job_data.stderr_tail }}


Public Attributes | |
| int | number_of_nodes |
| int | number_of_edges |
| int * | number_of_neighbours |
| int * | index_of_first_neighbour |
| int * | sorted_heads |
| int * | sorted_weights |
| int * | tail |
| int * | head |
| int * | edge_weight |
| int * | predecessor |
| int * | distance |
the graphs attributes
| int* graph::distance |
the distance of each vertex from source
| int* graph::edge_weight |
the weight corresponding to each edge
| int* graph::head |
the head corresponding to each edge
| int* graph::index_of_first_neighbour |
index of first neighbour for each vertex
| int graph::number_of_edges |
number of edges in the graph
| int* graph::number_of_neighbours |
number of neighbours for each vertex
| int graph::number_of_nodes |
number of vertices in the graph
| int* graph::predecessor |
the predecessor of each vertex in shortest path tree
| int* graph::sorted_heads |
heads of each edge sorded by vertex
| int* graph::sorted_weights |
weights of each edge sorded by vertex
| int* graph::tail |
the tail corresponding to each edge


StringScanner
public class StringScanner : CustomStringConvertible
A pure Swift implementation of a String
scanner, that can leverage some of the strengths of swift (over using NSScanner
). In general consumers of
OysterKit do not need to use this class directly as it is abstracted away by a concrete implementation of Lexical Analyzer
.
At this point (Swift 4.0) the Swift String
subsystem is still enjoying a reasonable amount of churn so details of the implementation will change to
fully leverage any improved performance affordances. However at this point the implementation is based around the UnicodeScalarView
of a String
as it enables direct cosumption of other useful classes such as CharacterSet
.
This may change in the future as Swift strings evolve.
-
The string being scanned
Declaration
Swift
public let string : String
-
The current scanning index in
scalars
Declaration
Swift
public var scanLocation : String.UnicodeScalarView.Index
-
true
if the scanner is at the end of theString
Declaration
Swift
public var isAtEnd : Bool
-
Create a new instance of the class.
Declaration
Swift
public init(_ string:String)
Parameters
string
The
String
to be scanned -
A useful description of the state of the scanner
Declaration
Swift
public var description: String
-
Advances the scan-head by one position. If it is at the end of the String it will not move (that is the scan-head will not advance past the last character in the
String
.Declaration
Swift
public func scanNext()->UnicodeScalar?
Return Value
The
UnicodeScalar
currently at the new scan-head position, or nil if the end of theString
has been reached. -
Scans all characters from the supplied set, continuing until the scanner hits a character not in the set.
Declaration
Swift
public func scan(charactersFrom set:CharacterSet)->Bool
Parameters
charactersFrom
The
CharacterSet
to scan forReturn Value
true
if at least one is found,false
otherwise -
Scans a single character from the supplied set
Declaration
Swift
public func scan(characterFrom set:CharacterSet)->Bool
Parameters
charactersFrom
The
CharacterSet
to scan forReturn Value
true
if one is found,false
otherwise -
Advances the scan-head until a character from the supplied
CharacterSet
is found, or the end of theString
is reached.Declaration
Swift
public func scanUpTo(characterFrom set:CharacterSet)->Bool
Parameters
charactersFrom
The
CharacterSet
that should stop scanningReturn Value
true
if a character from the supplied set is found before the end of the string. -
Advances the scan-head until a character from the supplied
String
is found, or the end of theString
is reached.Declaration
Swift
public func scanUpTo(string:String)->Bool
Parameters
string
The
String
that should stop scanningReturn Value
true
ifstring
is found before the end of the source. -
Advances the scan-head to the end of the supplied string providing it matches.
Declaration
Swift
public func scan(string:String)->Bool
Parameters
string
The
String
that should be matchedReturn Value
true
ifstring
is sfound strating from the current scan-head position and before the end of the source.


--- layout: post title: "At the boundaries, applications aren't functional" description: "Ten years later." date: 2022-05-02 5:29 UTC tags: [Architecture, Software Design, Functional Programming] --- {% include JB/setup %}
{{ page.description }}
In 2011 I published an article titled At the Boundaries, Applications are Not Object-Oriented. It made the observation that at the edges of systems, where software interacts with either humans or other software, interactions aren't object-oriented. The data exchanged is exactly that: data.
A common catchphrase about object-oriented design is that objects are data with behaviour. In a user interface, a REST API, at the command line, etcetera, data is transmitted, but behaviour is not.
The article was one of those unfortunately unsatisfying articles that point out a problem without offering a solution. While I don't like to leave readers hanging like that, I on the other hand think that it's important sometimes to ask open-ended questions. Here's a problem. Can anyone offer a solution?
People occasionally come by that old article and ask me if I've changed my mind since then. The short answer is that I believe that the problem persists. I may, however, today have another approach to it.
Starting around the time of the original article, I became interested in functional programming (FP). The more I've learned about it, the better it seems to address my concerns of eleven years ago.
I don't know if FP is a silver bullet (although I'd like to think so), but at least I find that I have fewer impedance mismatch issues than I did with object-oriented programming (OOP). In FP, after all, data is just data.
Except when it isn't, but more about that later.
It's easier to reconcile the FP notion of data with what actually goes on at the boundaries of a system.
Perhaps I should clarify what I mean by the word boundary. This is where a software system interacts with the rest of the world. This is where it receives HTTP requests and answers with HTTP responses. This is where it queries its database. This is where it sends emails. This is where it reads files from disk. This is where it repaints user interfaces. In short, the outermost circle in ports and adapters architecture.
Notice that what crosses the boundary tends to be data. JSON or XML documents, tabular data streams, flat files, etcetera. In OOP, your training tells you that you should associate some behaviour with data, and that's what creates dissonance. We introduce Data Transfer Objects (DTO) even though a DTO
"is one of those objects our mothers told us never to write."
We almost have to do violence to ourselves to introduce a DTO in an object-oriented code base, yet grudgingly we accept that this is probably better than the alternative.
In FP, on the other hand, that's just natural.
To paraphrase the simple example from the old article, imagine that you receive data like this as input:
{ "firstName": "Mark", "lastName": "Seemann" }
If we wanted to capture that structure as a type, in F# you'd write a type like this:
type Name = { FirstName : string; LastName : string }
And while you might feel icky defining such a DTO-like type in OOP, it's perfectly natural and expected in FP.
That type even supports JSON serialization and deserialization without further ceremony:
let opts = JsonSerializerOptions (PropertyNamingPolicy = JsonNamingPolicy.CamelCase) let n = JsonSerializer.Deserialize<Name> (json, opts)
where json
might contain the above JSON fragment.
To summarise so far: Data crosses the boundaries of systems - not objects. Since FP tends to separate data from behaviour, that paradigm feels more natural in that context.
FP is, however, not a perfect fit either. Let's paraphrase the above medial summary: Data crosses the boundaries of systems - not functions.
FP is more than just functions and data. It's also about functions as first-class concepts, including functions as values, and higher-order functions. While an object is data with behaviour, closures are behaviour with data. Such first-class values cross system boundaries with the same ease as objects do: Not very well.
I was recently helping a client defining a domain-specific language (DSL). I wrote a proof of concept in Haskell based on Abstract Syntax Trees (AST). Each AST would typically be defined with copious use of lambda expressions. There was also an existential type involved.
At one time, the question of persistence came up. At first I thought that you could easily serialize those ASTs, since, after all, they're just immutable values. Then I realised that while that's true, most of the constituent values were functions. There's no clear way to serialize a function, other than in code.
Functions don't easily cross boundaries, for the same reasons that objects don't.
So while FP seems like a better fit when it comes to modelling data, at the boundaries, applications aren't functional.
In my original article, I attempted to look ahead. One option I considered was dynamic typing. Instead of defining a DTO that mirrors a particular shape of data (e.g. a JSON document), would it be easier to parse or create a document on the fly, without a static type?
I occasionally find myself doing that, as you can see in my article To ID or not to ID. The code base already used Json.NET, and I found it easier to use the JToken
API to parse documents, rather than having to maintain a static type whose only raison d'être was to mirror a JSON document. I repeat an example here for your convenience:
// JToken -> UserData<string> let private parseUser (jobj : JToken) = let uid = jobj.["id"] |> string let fn = jobj.["firstName"] |> Option.ofObj |> Option.map string let ln = jobj.["lastName"] |> Option.ofObj |> Option.map string let email = jobj.["primaryEmail"] |> Option.ofObj |> Option.map (string >> MailAddress) { Id = uid FirstName = fn LastName = ln Email = email Identities = [] Permissions = [] }
Likewise, I also used JObject
to create and serialize new JSON documents. The To ID or not to ID article also contains an example of that.
F# types are typically one-liners, like that above Name
example. If that's true, why do I shy away from defining a static type that mirrors the desired JSON document structure?
Because typing (the other kind of typing) isn't a programming bottleneck. The cost of another type isn't the time it takes to write the code. It's the maintenance burden it adds.
One problem you'll commonly have when you define DTOs as static types is that the code base will contain more than one type that represents the same concept. If these types are too similar, it becomes difficult for programmers to distinguish between them. As a result, functionality may inadvertently be coupled to the wrong type.
Still, there can be good reasons to introduce a DTO type and a domain model. As Alexis King writes,
"Consider: what is a parser? Really, a parser is just a function that consumes less-structured input and produces more-structured output."
This is the approach I took in Code That Fits in Your Head. A ReservationDto
class has almost no invariants. It's just a bag of mutable and nullable properties; it's less-structured data.
The corresponding domain model Reservation
is more-structured. It's an immutable Value Object that guarantees various invariants: All required data is present, quantity is a natural number, you can't mutate the object, and it has structural equality.
In that case, ReservationDto
and Reservation
are sufficiently different. I consider their separate roles in the code base clear and distinct.
In 2011 I observed that at the boundaries, applications aren't object-oriented. For years, I've thought it a natural corollary that likewise, at the boundaries, applications aren't functional, either. On the other hand, I don't think I've explicitly made that statement before.
A decade after 2011, I still find object-oriented programming incongruent with how software must work in reality. Functional programming offers an alternative that, while also not perfectly aligned with all data, seems better aligned with the needs of working software.


- SATELLITE_DAY - Static variable in class com.here.android.mpa.mapping.Map.Scheme
-
Satellite tile scheme presented in "day" colors.
- SearchRequest - Class in com.here.android.mpa.search
-
The SearchRequest
processes text string queries based on the user's input to find
specific places.
- SearchRequest(String) - Constructor for class com.here.android.mpa.search.SearchRequest
-
SearchRequest constructor
- setAccuracyIndicatorVisible(boolean) - Method in class com.here.android.mpa.mapping.PositionIndicator
-
Sets a GPS accuracy indicator for the PositionIndicator
to be either visible or
hidden.
- setAllGesturesEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets all possible kinds of gesture interaction to be either enabled or disabled for the
MapGesture
.
- setAnchorPoint(PointF) - Method in class com.here.android.mpa.mapping.MapMarker
-
Sets an anchor point for this MapMarker
.
- setBitmap(Bitmap) - Method in class com.here.android.mpa.common.Image
-
Sets a Bitmap
for the Image
.
- setBoundingArea(GeoBoundingBox) - Method in class com.here.android.mpa.mapping.MapRasterTileSource
-
Sets a bounding area within which raster tiles are visible.
- setCacheExpiration(int) - Method in class com.here.android.mpa.mapping.MapRasterTileSource
-
Set the cache expiration time
- setCachePrefix(String) - Method in class com.here.android.mpa.mapping.MapRasterTileSource
-
Set the cache file prefix
- setCachingEnabled(boolean) - Method in class com.here.android.mpa.mapping.MapRasterTileSource
-
Set whether tiles are cached to the file system.
- setCarpoolAllowed(boolean) - Method in class com.here.android.mpa.routing.RouteOptions
-
Allow or disallow usage of HOV/Carpool roads.
- setCarShuttleTrainsAllowed(boolean) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets whether Car Shuttle Trains are allowed.
- setCategoryFilter(CategoryFilter) - Method in class com.here.android.mpa.search.DiscoveryRequest
-
- setCategoryFilter(CategoryFilter) - Method in class com.here.android.mpa.search.ExploreRequest
-
Sets a search filter based on categories.
- setCategoryFilter(CategoryFilter) - Method in class com.here.android.mpa.search.HereRequest
-
Sets a search filter based on categories.
- setCenter(GeoCoordinate, Map.Animation, double, float, float) - Method in class com.here.android.mpa.mapping.Map
-
Moves the center of this
Map
to a specific
GeoCoordinate
, while simultaneously setting
a zoom level (a fraction within the range of minimum and maximum levels), orientation (from 0
degrees to 360 degrees), and tilt (within the range of minimum and maximum tilt angles).
- setCenter(GeoCoordinate, Map.Animation) - Method in class com.here.android.mpa.mapping.Map
-
Moves the center of this
Map
to the specified
GeoCoordinate
using the given
Map.Animation
.
- setCenter(PointF, Map.Animation, double, float, float) - Method in class com.here.android.mpa.mapping.Map
-
Centers the map at the specified screen pixel coordinates.
- setCenter(GeoCoordinate) - Method in class com.here.android.mpa.mapping.MapCircle
-
- setCity(String) - Method in class com.here.android.mpa.search.Address
-
Sets a city name for the Address
.
- setCollectionSize(int) - Method in class com.here.android.mpa.search.DiscoveryRequest
-
Sets a collection size to be used for request responses.
- setCollectionSize(int) - Method in class com.here.android.mpa.search.GeocodeRequest
-
Sets a collection size to be used for request responses.
- setCollectionSize(int) - Method in class com.here.android.mpa.search.TextSuggestionRequest
-
Sets a collection size to be used for request responses.
- setColor(int) - Method in class com.here.android.mpa.mapping.MapRoute
-
Sets a color for displaying the route, using an ARGB (Alpha/Red/Green/Blue) integer color
value.
- setCoordinate(GeoCoordinate) - Method in class com.here.android.mpa.mapping.MapMarker
-
Sets a map GeoCoordinate
for this MapMarker
.
- setCopyrightBoundaryRect(Rect) - Method in class com.here.android.mpa.mapping.MapFragment
-
Sets a rectangle, in pixels, relative to the top left corner of the
MapFragment
's
boundary, for the placement of the HERE copyright logo.
- setCopyrightBoundaryRect(Rect) - Method in class com.here.android.mpa.mapping.MapView
-
Sets a rectangle relative to the view group as a container for the HERE copyright logo.
- setCopyrightLogoPosition(CopyrightLogoPosition) - Method in class com.here.android.mpa.mapping.MapFragment
-
Sets a position for the HERE copyright logo.
- setCopyrightLogoPosition(CopyrightLogoPosition) - Method in class com.here.android.mpa.mapping.MapView
-
Sets a position for the HERE copyright logo.
- setCopyrightMargin(int) - Method in class com.here.android.mpa.mapping.MapFragment
-
Sets a margin for the HERE copyright logo, in number of pixels, as an offset from the edge of
the visible map area to the edge of the logo (depending on the placement).
- setCopyrightMargin(int) - Method in class com.here.android.mpa.mapping.MapView
-
Sets a margin, in pixels, for the HERE copyright logo, an offset from the edge of the visible
map area to the edge of the logo (depending on the placement).
- setCountryCode(String) - Method in class com.here.android.mpa.search.Address
-
Sets an ISO 3166-1 (3-letter) country code for the Address
.
- setCountryName(String) - Method in class com.here.android.mpa.search.Address
-
Sets a country name for the Address
.
- setCounty(String) - Method in class com.here.android.mpa.search.Address
-
Sets a county name for the Address
.
- setDescription(String) - Method in class com.here.android.mpa.mapping.MapMarker
-
Sets the description text.
- setDirtRoadsAllowed(boolean) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets whether Dirt Roads are allowed.
- setDistrict(String) - Method in class com.here.android.mpa.search.Address
-
Sets a district name for the Address
.
- setDoubleTapEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether double-tap interactions are enabled or disabled for this MapGesture
.
- setDraggable(boolean) - Method in class com.here.android.mpa.mapping.MapMarker
-
Sets whether this marker is draggable or not.
- setFerriesAllowed(boolean) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets whether Ferries are allowed.
- setFillColor(int) - Method in class com.here.android.mpa.mapping.MapCircle
-
Sets a fill color for this MapCircle
using an ARGB (Alpha/Red/Green/Blue) integer
color value.
- setFillColor(int) - Method in class com.here.android.mpa.mapping.MapPolygon
-
Sets a fill color for this MapPolygon
, using an ARGB (Alpha/Red/Green/Blue) integer
color value.
- setFixedMapCenterOnMapRotateZoom(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether the transform center is applied during multitouch gestures.
- setFloorNumber(String) - Method in class com.here.android.mpa.search.Address
-
Sets a floor number (in a multi-story building) for the Address
.
- setGeoPolygon(GeoPolygon) - Method in class com.here.android.mpa.mapping.MapPolygon
-
Changes the GeoPolygon
rendered by this MapPolygon
.
- setHeight(int) - Method in class com.here.android.mpa.common.ViewRect
-
Sets a height, in pixels, for the ViewRect
.
- setHighwaysAllowed(boolean) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets whether Highways are allowed.
- setHouseNumber(String) - Method in class com.here.android.mpa.search.Address
-
Sets a house number for the Address
.
- setIcon(Image) - Method in class com.here.android.mpa.mapping.MapMarker
-
Sets an icon image for this MapMarker
.
- setImageAsset(String) - Method in class com.here.android.mpa.common.Image
-
Sets Image data by an image in the assets directory.
- setImageData(byte[]) - Method in class com.here.android.mpa.common.Image
-
Sets an array of byte
data for the Image
.
- setImageFile(String) - Method in class com.here.android.mpa.common.Image
-
Sets Image data by an image file located in the internal storage.
- setImageResource(int) - Method in class com.here.android.mpa.common.Image
-
Sets data for the Image
by way of an application's resource.
- setInfoBubbleAdapter(Map.InfoBubbleAdapter) - Method in class com.here.android.mpa.mapping.Map
-
Sets the custom info bubble adapter for this map.
- setKineticFlickEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether flick-to-scroll (with kinetic momentum) interactions are enabled for this
MapGesture
.
- setKineticPinchEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Deprecated.
As of release 2.0. This gesture is disabled at all times.
- setKineticRotationEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Deprecated.
As of release 2.0. This gesture is disabled at all times.
- setLineColor(int) - Method in class com.here.android.mpa.mapping.MapCircle
-
Sets a border line color for this MapCircle
, using an ARGB (Alpha/Red/Green/Blue)
integer color value.
- setLineColor(int) - Method in class com.here.android.mpa.mapping.MapPolygon
-
Sets a border line color for this MapPolygon
, using an ARGB (Alpha/Red/Green/Blue)
integer color value.
- setLineColor(int) - Method in class com.here.android.mpa.mapping.MapPolyline
-
Sets a line color for this MapPolyline
, using an ARGB (Alpha/Red/Green/Blue) integer
color value.
- setLineWidth(int) - Method in class com.here.android.mpa.mapping.MapCircle
-
Sets a border line width, in pixels, for this MapCircle
, an int
value within
the [0..100] range.
- setLineWidth(int) - Method in class com.here.android.mpa.mapping.MapPolygon
-
Sets a border line width, in pixels, for this MapPolygon
, an int
value within
the [0..100] range.
- setLineWidth(int) - Method in class com.here.android.mpa.mapping.MapPolyline
-
Sets a line width, in pixels, for this MapPolyline
, an int
value within the
[0..100] range.
- setLocalUrl(String) - Method in class com.here.android.mpa.common.Image
-
Sets a local URL that the Image
can access for an image.
- setLongPressEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether long-press interactions are enabled or disabled for this MapGesture
.
- setManeuverNumberVisible(boolean) - Method in class com.here.android.mpa.mapping.MapRoute
-
Sets maneuver numbers to be either displayed along with this route or not displayed.
- setMap(Map) - Method in class com.here.android.mpa.mapping.MapView
-
Associates the graphical view element with a Map
.
- setMapDisplayLanguage(Locale) - Method in class com.here.android.mpa.mapping.Map
-
Set the map display language using a locale.
- setMapMarkerDragListener(MapMarker.OnDragListener) - Method in class com.here.android.mpa.mapping.MapFragment
-
- setMapMarkerDragListener(MapMarker.OnDragListener) - Method in class com.here.android.mpa.mapping.MapView
-
- setMapScheme(String) - Method in class com.here.android.mpa.mapping.Map
-
Sets a scheme for the Map
to the specified <String>
value.
- setMapSecondaryDisplayLanguage(Locale) - Method in class com.here.android.mpa.mapping.Map
-
Set the map secondary display language using a locale.
- setMapViewport(GeoBoundingBox) - Method in class com.here.android.mpa.search.DiscoveryRequest
-
The map viewport is a bounding box of the map area currently visible to the user.
- setMapViewport(GeoBoundingBox) - Method in class com.here.android.mpa.search.GeocodeRequest
-
The map viewport is a bounding box of the map area currently visible to the user.
- setMapViewport(GeoBoundingBox) - Method in class com.here.android.mpa.search.TextSuggestionRequest
-
The map viewport is a bounding box of the map area currently visible to the user.
- setMarker(Image) - Method in class com.here.android.mpa.mapping.PositionIndicator
-
Sets a marker image, overriding the default marker image.
- setOnTouchListener(View.OnTouchListener) - Method in class com.here.android.mpa.mapping.MapFragment
-
Sets an
View.OnTouchListener
to be invoked whenever a touch event is sent to the
MapFragment
.
- setPanningEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets panning interactions to be either enabled or disabled for this MapGesture
.
- setParksAllowed(boolean) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets whether Parks are allowed.
- setPinchEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether pinch interactions are enabled or disabled for this MapGesture
.
- setPostalCode(String) - Method in class com.here.android.mpa.search.Address
-
Sets a postal code for the Address
.
- setQueryText(String) - Method in class com.here.android.mpa.search.SearchRequest
-
Set the search query text.
- setQueryText(String) - Method in class com.here.android.mpa.search.TextSuggestionRequest
-
Set the query partial search term.
- setRadius(double) - Method in class com.here.android.mpa.mapping.MapCircle
-
Sets a radius for this MapCircle
, in meters.
- setRenderType(MapRoute.RenderType) - Method in class com.here.android.mpa.mapping.MapRoute
-
Sets the RenderType
associated with this MapRoute
.
- setRichTextFormatting(RichTextFormatting) - Method in class com.here.android.mpa.search.DiscoveryRequest
-
Sets a RichTextFormatting
to be used in request responses.
- setRichTextFormatting(RichTextFormatting) - Method in class com.here.android.mpa.search.PlaceRequest
-
Sets a RichTextFormatting
to be used in request responses.
- setRichTextFormatting(RichTextFormatting) - Method in class com.here.android.mpa.search.TextSuggestionRequest
-
Sets a RichTextFormatting
to be used in request responses.
- setRotateEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether two-finger rotate interactions are enabled for this MapGesture
.
- setRoute(Route) - Method in class com.here.android.mpa.mapping.MapRoute
-
Sets a Route
that will be displayed on the Map
.
- setRouteCount(int) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets the desired number of route.
- setRouteOptions(RouteOptions) - Method in class com.here.android.mpa.routing.RoutePlan
-
Sets the route options.
- setRouteType(RouteOptions.Type) - Method in class com.here.android.mpa.routing.RouteOptions
-
- setSearchArea(GeoCoordinate, int) - Method in class com.here.android.mpa.search.DiscoveryRequest
-
- setSearchArea(GeoBoundingBox) - Method in class com.here.android.mpa.search.DiscoveryRequest
-
- setSearchArea(GeoCoordinate, int) - Method in class com.here.android.mpa.search.ExploreRequest
-
Sets the search area using a center location and radius.
- setSearchArea(GeoBoundingBox) - Method in class com.here.android.mpa.search.ExploreRequest
-
Sets the search area using a GeoBoundingBox
.
- setSearchArea(GeoCoordinate, int) - Method in class com.here.android.mpa.search.GeocodeRequest
-
Sets the search area using a center location and radius.
- setSearchArea(GeoBoundingBox) - Method in class com.here.android.mpa.search.GeocodeRequest
-
Sets the search area using a GeoBoundingBox
.
- setSearchCenter(GeoCoordinate) - Method in class com.here.android.mpa.search.DiscoveryRequest
-
- setSearchCenter(GeoCoordinate) - Method in class com.here.android.mpa.search.ExploreRequest
-
Sets the search center.
- setSearchCenter(GeoCoordinate) - Method in class com.here.android.mpa.search.HereRequest
-
Sets the search center.
- setSearchCenter(GeoCoordinate) - Method in class com.here.android.mpa.search.SearchRequest
-
Sets a GeoCoordinate
representing the location context used to search for results
that are appropriate to the query
parameter.
- setSearchCenter(GeoCoordinate) - Method in class com.here.android.mpa.search.TextSuggestionRequest
-
Sets the search center.
- setSingleTapEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether single-tap interactions are enabled or disabled for this MapGesture
.
- setStartDirection(int) - Method in class com.here.android.mpa.routing.RouteOptions
-
Start direction.
- setState(String) - Method in class com.here.android.mpa.search.Address
-
Sets a state name for the Address
.
- setStateCode(String) - Method in class com.here.android.mpa.search.Address
-
Sets a state code (abbreviation) for the Address
.
- setStreet(String) - Method in class com.here.android.mpa.search.Address
-
Sets a street name for the Address
.
- setSuiteNumberOrName(String) - Method in class com.here.android.mpa.search.Address
-
Sets a suite number or suite name for the Address
.
- setText(String) - Method in class com.here.android.mpa.search.Address
-
Sets text for the Address
.
- setTileResolution(MapView.TileSize) - Static method in class com.here.android.mpa.mapping.MapView
-
Changes the tiles source to use.
- setTiltEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether tilt interactions are enabled or disabled for this MapGesture
.
- setTime(Date, RouteOptions.TimeType) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets the arrival or departure time.
- setTitle(String) - Method in class com.here.android.mpa.mapping.MapMarker
-
Sets a title to be used by the default info bubble.
- setTollRoadsAllowed(boolean) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets whether Toll Roads are allowed.
- setTransformCenter(PointF) - Method in class com.here.android.mpa.mapping.Map
-
Sets a center coordinate for Map
transformations such as zooming and rotation.
- setTransparency(float) - Method in class com.here.android.mpa.mapping.MapMarker
-
Sets a transparency level, within the range of [0..1], for the icon.
- setTransportMode(RouteOptions.TransportMode) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets the Transport Mode.
- setTunnelsAllowed(boolean) - Method in class com.here.android.mpa.routing.RouteOptions
-
Sets whether Tunnels are allowed.
- setTwoFingerPanningEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether the two-finger panning interaction is enabled for this MapGesture
.
- setTwoFingerPinchRotateEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Deprecated.
As of release 2.0. This gesture is disabled at all times.
- setTwoFingerTapEnabled(boolean) - Method in interface com.here.android.mpa.mapping.MapGesture
-
Sets whether two-finger tap gestures are enabled or disabled for this MapGesture
.
- setUseSystemLanguage() - Method in class com.here.android.mpa.mapping.Map
-
Set the map display language using the system default locale.
- setVisible(boolean) - Method in class com.here.android.mpa.mapping.MapCircle
-
Sets whether this MapObject
is visible.
- setVisible(boolean) - Method in class com.here.android.mpa.mapping.MapContainer
-
Sets whether this MapContainer
is visible.
- setVisible(boolean) - Method in class com.here.android.mpa.mapping.MapObject
-
Sets whether this MapObject
is visible.
- setVisible(int, boolean) - Method in class com.here.android.mpa.mapping.MapObject
-
Sets whether this MapObject
is visible for the specified zoom level.
- setVisible(int, int, boolean) - Method in class com.here.android.mpa.mapping.MapObject
-
Sets whether this MapObject
is visible for the specified range of zoom levels.
- setVisible(boolean) - Method in class com.here.android.mpa.mapping.MapPolygon
-
Sets whether this MapObject
is visible.
- setVisible(boolean) - Method in class com.here.android.mpa.mapping.PositionIndicator
-
Sets a PositionIndicator
to be either visible or hidden.
- setVisibleMask(int, int) - Method in class com.here.android.mpa.mapping.MapObject
-
Sets the visibility bit mask of this MapObject
at the specified zoom level.
- setVisibleMask(int) - Method in class com.here.android.mpa.mapping.MapObject
-
Sets the visibility bit mask of this MapObject
at the specified zoom level.
- setWidth(int) - Method in class com.here.android.mpa.common.ViewRect
-
Sets a width, in pixels, for the ViewRect
.
- setX(int) - Method in class com.here.android.mpa.common.ViewRect
-
Sets an X-coordinate for the ViewRect
.
- setY(int) - Method in class com.here.android.mpa.common.ViewRect
-
Sets a Y-coordinate for the ViewRect
.
- setZIndex(int) - Method in class com.here.android.mpa.mapping.MapContainer
-
Sets a z-index (stacking order) value for this MapContainer
.
- setZIndex(int) - Method in class com.here.android.mpa.mapping.MapObject
-
Sets a z-index (stacking order) value for this MapObject
.
- setZIndex(int) - Method in class com.here.android.mpa.mapping.MapRasterTileSource
-
Sets a z-index (stacking order) value for the MapObject
.
- setZIndex(int) - Method in class com.here.android.mpa.mapping.PositionIndicator
-
Set the Z index of the position indicator.
- setZoomLevel(double) - Method in class com.here.android.mpa.mapping.Map
-
Sets a zoom level for the Map
to a fraction that is within the range of minimum and
maximum zoom levels.
- setZoomLevel(double, Map.Animation) - Method in class com.here.android.mpa.mapping.Map
-
Sets a zoom level for the Map
to a fraction that is within the range of minimum and
maximum zoom levels.
- setZoomLevel(double, PointF, Map.Animation) - Method in class com.here.android.mpa.mapping.Map
-
Sets a zoom level for the Map
to a fraction that is within the range of minimum and
maximum zoom levels while keeping the specified screen coordinate at the same Geographical
Location.
- showAtZoomLevel(int) - Method in class com.here.android.mpa.mapping.MapRasterTileSource
-
Shows tiles at the specified zoom level of the Map
.
- showAtZoomRange(int, int) - Method in class com.here.android.mpa.mapping.MapRasterTileSource
-
Shows tiles within a given zoom level range of the Map
.
- showInfoBubble() - Method in class com.here.android.mpa.mapping.MapMarker
-
Displays the default info bubble if setTitle(String)
has been set to something
non-null.
- Signpost - Class in com.here.android.mpa.routing
-
This class stores signpost information along the
Route
.
- start(PositioningManager.LocationMethod) - Method in class com.here.android.mpa.common.PositioningManager
-
Starts receiving position updates from the positioning device.
- stop() - Method in class com.here.android.mpa.common.PositioningManager
-
Stops receiving position updates from the positioning device.
- SupplierLink - Class in com.here.android.mpa.search
-
Represents a
SupplierLink
which contains meta-information about a supplier.


Architecting solutions to problems.
Design the components of applications according to requirements
Estimate pricing beforehand and avoid unnecessary costs
Make applications secure against external and internal threats
Optimize application code and implement best practices
Build a pipeline for Continuous Testing, Integration and Deployment
Develop your application on AWS and other cloud platforms


Instructions for you to follow in this document will be highlighted in blue.
Don't forget to cite your sources!
When we draw a particular pixel of a square on our cube (or triangle on the bunny model), we need to figure out where on the square this pixel is, so we know what pixel of the texture to read. Luckily our solve_pixel_t
function already calculates these u and v coordinates! We just need to capture these values and return them from the function as well.
We will return these several values by creating an object with the attributes .t
, .u
, and .v
, which will be set to the appropriate values. {t:1, u:2, v:3}
is an object, which we can store in a variable with var solution = {t:1, u:2, v:3}
, and solution.t
will evaluate to 1, solution.u
will evaluate to 2, and solution.v
will evaluate to 3.
Complete the following:
draw_persp_cube_zbuff
, based on your draw_persp_bunny_zbuff
function (and draw_persp_cube
).
minx
etc. to include the extra vertex.
solve_pixel_t
function to solve_pixel
, updated in the following way:
solve_pixel
so that instead of requiring u + v < 1, require u and v < 1.
solve_pixel
return {t:answer.x,u:answer.y,v:answer.z}
. This creates a new object that has the desired t, u, and v attributes. You could also return {t:t, u:u, v:v}
. On the left of the :s are the names of the attributes (strings) and on the right are the values they are set to.
draw_persp_cube_zbuff
function, replace var t = solve_pixel_t(x,y,w0,w1,w2)
with var answer = solve_pixel(x,y,w0,w1,w3)
. We replace w2 with w3 because we're capturing the vectors that form the sides of our square: w1-w0 and w3-w0.
t
with answer.t
set_rgba
call to set the red value based on answer.u
and green value based on answer.v
, and set blue to 0. You'll need to rescale these values. answer.u
and answer.v
go from 0 to 1 and the rgb values are from 0 to 255.
When you call set_rgba
, you have access to the following variables:
Your exact conversions may vary if you've zoomed in or out.
vec_length([t*x,t*y,t])
: the distance from the camera to the pixel
Date.now()
: the number of milliseconds since January 1, 1970 00:00:00 UTC
new Date().getSeconds()
: number of seconds since the beginning of the current minute. See here for various other time-related values you have access to.
In order to get animations working properly, you will need to constantly recalculate the scene. You can call a function at a regular interval using setInterval
.
vn
: the normal vector to the face, from which you can determine (with vc
):
continue;
).
Writing our images pixel-by-pixel is expensive and complicated, but here's where this technique shines: most graphical effects can be achieved with some relatively simple calculations at this step, including:
Indeed, nearly every graphical effect can be achieved with a combination of this, some advanced math, several render passes, and manipulating the vertex coordinates (which we could do earlier in our draw_persp_cube_zbuff
function.
We will experiment with some of these effects, and you are welcome to experiment with more, but we will come back to the rest after we have learned to program in the shader language GLSL: a specialized language for writing programs for your GPU. The GPU is specially designed for the fact that these pixel-by-pixel computations are:
We can draw graphs of functions on our surface to get various effects:
Complete the following:
set_rgba
and replace it by:
surfx
and surfy
which are answer.u
and answer.v
rescaled using convert_a_to_b
to go from -5 to 5 (instead of 0 to 1).
if
statement to set a pixel to green if surfy == Math.sin(surfx)
, and blue otherwise.
if
statement to check if Math.abs
of the difference between surfy
and Math.sin(surfx)
is less than .1
We can use the sine function to produce a repeating pattern.
Complete the following:
set_rgba
call to set red to 255*Math.sin(answer.u*30)
and green to 255*Math.sin(answer.v*30)
Complete the following:
set_rgba
call to set red to 255*Math.sin(x)
and green to 255*Math.sin(y)
.
A common tool in computer graphics is to have part of a mesh be completely transparent, based on a formula or a texture image. The formula or texture image can contain a high level of complexity, but the computer only has to deal with a small number of triangles.
Complete the following:
continue;
.
Reading image files is a challenge for Javascript because:
While there are better ways of solving these problems, we will be using the simple solution of including the texture as an image in our webpage and waiting for the page to load.
Complete the following:

cat_imagedata
load_cat()
:
var ctx = document.getElementById("canvas").getContext("2d");This function draws the contents of the
ctx.drawImage(document.getElementById("cat"),0,0);
cat_imagedata = ctx.getImageData(0,0,275,275);

in the webpage to the canvas, then writes this data to the cat_imagedata
variable.
load_cat();
to your
's onload property.
set_rgba
call within your draw_persp_cube_zbuff
function.
get_rgba
to get the rgba values you'd like to draw to the canvas at that pixel.
set_rgba
to set those rgba values to the canvas.
function get_rgba(imagedata,x,y) {
x = Math.floor(x);
y = Math.floor(y);
var pos = y*imagedata.width+x;
var r = imagedata.data[pos*4];
var g = imagedata.data[pos*4+1];
var b = imagedata.data[pos*4+2];
var a = imagedata.data[pos*4+3];
return([r,g,b,a]);
}
It is very tedious and inefficient to have a separate image file for each face of a 3d model. In fact, it is common for a 3d model to have a single texture image. For instance, take this space suit model from NASA:
The entire texture is stored in a single image:
Each vertex then keeps track of its corresponding location on the texture image, so the pixel shader can determine what part of the texture to look at.
This 3d model comes with a wide variety of images, including the normal map below. Each pixel of the normal map keeps track of the x, y, and z coordinates of a true normal vector relative to the surface. The main color you're seeing is (128,128,255). Each color gets remapped to the range from -1 to 1, so this color represents the vector (0,0,1): a vector straight out of the surface. This normal map data gets used when calculating lighting effects to give the illusion of much higher detail with fewer vertices and faces.
We will explore these effects once we start programming in GLSL, which has a number of built-in features that make these easier to implement.


I tried ivory wave or mdpv having previously experimented with mephedrone san pedro cactus lsa dxm among others.  The compulsive nature of it was terrifyingly strong. 60 MG WAS A STRONG DOSE BUT I CONSUMED BETWEEN 1 AND 1.5 GRAMS DAILY FOR A MONTH. This resulted in hospitalisation and being sectioned on a mental health ward. Vivid hallucinations and intense paranoia lasted weeks after stopping. I genuinely feared for my sanity.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Preface Installation Configuration Analytics Search
Architecture Twitter Use cases
Deploy
License Source Testing Releases


Building blocks for the web
May 30 2014
Ossi Hanhinen, @ohanhi
Polymer is a library for building web apps from components using cutting-edge technologies.
Opinionated, backed by Google.
In Polymer, everything is an element. Building apps is about building custom elements – and reusing existing ones.
Self-contained component ready to use:
Custom elements have their own styles and their own functionalities.
They can be controlled through attributes and events.
Don't worry, you can still style any element on your page.
Polymer has a set of Core elements available, ranging from core-xhr
to core-tooltip
.
The idea is that you can use elements to create new elements, e.g. fetch data with core-ajax
in your x-weather
element.
There are also experimental UI and non-UI elements in the Polymer labs.
bower install --save Polymer/polymer
bower install --save Polymer/core-elements
bower install --save Polymer/polymer
<link rel="import" href="../bower_components/polymer/polymer.html">
<polymer-element name="my-element" noscript>
<template>
Hello from my-element. This is my Shadow DOM.
</template>
</polymer-element>
<!DOCTYPE html>

<link rel="import" href="elements/my-element.html">

<my-element></my-element>

<demo-list
nodes="[ {'title': 'A'}, {'title': 'B'}, {'title': 'C'} ]">
<demo-list/>
Each element has its own Shadow DOM.
Shadow DOM encapsulates components but does not prevent manipulation.
Styles don't pass the Shadow boundary by default, but you can target Shadow DOMs using the ::shadow
pseudo-element or the /deep/
combinator.


Contents
1. Environment setup
To use torch_object_detection
package, you need to install the several dependencies. I
strongly recommend using conda
package with the below command in your terminal:
- Install some presiquite dependencies
1
. Create the environment and install some required packages from torch_environment.yml
file:
$ conda env create --name pytorch_p36 -f torch_environment.yml
2
. Activate the environment:
$ source activate pytorch_p36
Now you are ready to use the torch_object_detection
for Face Detection.
- Install
torch_object_detection
as a Python package
$ pip install dist/torch_object_detection-1.0.1-py3-none-any.whl
For more information about the environment setup, please visit Setting up environment.
2. Getting started: 30 seconds to Face Detection
- Launch Python interactive shell, (or ipython, or Jupyter notebook) and import
torch_object_detection
package:
>> import torch
>> import torch_object_detection
>> import torch_object_detection.models
>> import torch_object_detection.utils
- Create the Face Detection model and load the trained weights
1.
Create the model
We create FaceNet
with 2 classes (background
and face
) with
ResNet101
as the base network:
>> net = torch_object_detection.models.FaceNet(num_classes=2, base=torch_object_detection.models.Base101())
2.
Load the trained weights
>> net.load_state_dict(torch.load('path/to/trained_model.pkl'))
- Load the image and make detections
3.1.
Load image and preprocess the image
>> image = torch_object_detection.utils.load_image('path/to/img', height=320, width=480)
>> tensor = torch_object_detection.utils.preprocess_image(image)
3.2.
Make detections
-
If we use only CPU, please set
device='cpu'
. -
If we use a GPU, please set
device='cuda'
or maybe more specificallydevice='cuda:0'
to indicate which GPU.
>> det_boxes, det_scores, det_labels = torch_object_detection.utils.detect(tensor, net,
device='cpu',
score_thresh=0.3,
nms_thresh=0.3)
3.3.
Draw the detected bounding boxes and scores and show the result
>> torch_object_detection.utils.draw_detections(image, det_boxes, det_scores, det_labels)
4. The complete script for end-to-end
The script can be found at inference.py
file.
# test_inference.py
import torch
from torch_object_detection.utils import BoxCoder, load_image, prepocess_image, draw_detections, detect
from torch_object_detection.models import FaceNet, Base101
DEVICE = 'cuda'
NUM_CLASSES = 2
MODEL_PATH = ''
img_path = ''
# 1. Create and load trained weights
net = FaceNet(num_classes=NUM_CLASSES, base=Base101())
net.load_state_dict(torch.load(MODEL_PATH, map_location='cpu')) # first load to cpu,
# and then move to DEVICE if needed.
net = net.to(DEVICE)
# 2. Load image, convert and normalize it.
image = load_image(img_path=img_path, height=640, width=640)
tensor = prepocess_image(image)
# 3. Create the boxcoder for decoding the outputs
# Feature map sizes at each detection layer
fm_sizes = [[160, 160],
[80, 80],
[40, 40],
[20, 20],
[10, 10],
[5, 5]]
# The referenced size of anchors at each detection layer
anchor_sizes = (16, 32, 64, 128, 256, 512),
# The aspect ratios of the anchors at each detection layer
aspect_ratios = [[1, ], [1, ], [1, ], [1, ], [1, ], [1, ]]
box_coder = BoxCoder(img_size=(HEIGHT, WIDTH),
fm_sizes=fm_sizes,
anchor_sizes=anchor_sizes,
aspect_ratios=aspect_ratios)
# If you don't want to create box_coder manually, just set `box_coder=None`
# 4. Make detection
det_boxes, det_scores, det_labels = detect(tensor, net,
box_coder=None,
device=DEVICE,
score_thresh=0.3,
nms_thresh=0.3)
# 5. Show the detected boxes and confidence scores
draw_detections(image, boxes=det_boxes, scores=det_scores, labels=det_labels)
To run the script:
1.
Activate the environment
>> source activate pytorch_p36
2.
Compile and run it
>> python test_inference.py


| Package | Description |
|---|---|
| org.apache.taverna.baclava | |
| org.apache.taverna.baclava.factory | |
| org.apache.taverna.baclava.iterator |
| Modifier and Type | Method and Description |
|---|---|
DataThing |
DataThing.drillAndSet(DataThing oldDT,
String newData)
Drill into a collection searching for a data-object that has the same
data with oldDT and replace its data with newData.
|
DataThing |
DataThing.extractChild(Object child)
Extract a child object as a DataThing.
|
| Modifier and Type | Method and Description |
|---|---|
Iterator<DataThing> |
DataThing.childIterator()
Iterate over all imediate children.
|
| Modifier and Type | Method and Description |
|---|---|
void |
DataThing.copyMetadataFrom(DataThing source)
Copy the markup from the supplied DataThing object to this one.
|
DataThing |
DataThing.drillAndSet(DataThing oldDT,
String newData)
Drill into a collection searching for a data-object that has the same
data with oldDT and replace its data with newData.
|
void |
DataThing.linkMetadataFrom(DataThing source)
Link the metadata of this object to the specified datathing, similar in
effect to the copy operation above in most cases but doesn't deep copy
the metadata.
|
| Constructor and Description |
|---|
DataThing(DataThing other) |
| Modifier and Type | Method and Description |
|---|---|
static DataThing |
DataThingFactory.bake(byte[] theByteArray)
For byte arrays store the byte array as is
|
static DataThing |
DataThingFactory.bake(byte[][] theByteArrayArray)
For arrays of byte arrays store each byte array in a List
|
static DataThing |
DataThingFactory.bake(Object theObject) |
static DataThing |
DataThingFactory.bake(String theString)
Easy for String objects, everything already recognizes them so no custom
code required.
|
static DataThing |
DataThingFactory.bake(String[] theStringArray)
For String arrays convert the array to a List and store that.
|
static DataThing |
DataThingFactory.bakeForSoaplab(List theList)
Bake a List of Lists into a List of byte[]
|
static DataThing |
DataThingFactory.fetchFromURL(URL url) |
| Modifier and Type | Method and Description |
|---|---|
static Map<String,DataThing> |
DataThingXMLFactory.parseDataDocument(org.jdom.Document dataDocument)
Parse a data document and return a Map of DataThing objects, the keys in
the map being the string key attributes from the data document
|
| Modifier and Type | Method and Description |
|---|---|
static Object |
DataThingXMLFactory.configureDataThing(org.jdom.Element rootElement,
DataThing theDataThing)
Build a DataThing from the supplied Element object, the Element in this
case is the 'myGridDataDocument' element.
|
static org.jdom.Element |
DataThingXMLFactory.getElement(DataThing theDataThing)
Return an XML Jdom Element object for the DataThing supplied as the
argument
|
| Constructor and Description |
|---|
BaclavaIterator(DataThing parent,
Collection c,
List indexList)
Construct an iterator from a list of non data thing objects, a reference
to the parent DataThing which contains them and an explicit index list.
|
Copyright © 2015 The Apache Software Foundation. All rights reserved.


|
| | ObjMeshDtoLoader () |
| | Constructor. More...
|
| |
| override async Task< object > | UrlToObject (string url, string extension, string authorization, string pathIfObjectInBundle="") |
| | IResourcesLoader.UrlToObject More...
|
| |
| virtual void | SetCertificate (UnityWebRequest www, string fileAuthorization) |
| | Set web request Certificate. More...
|
| |
| abstract Task< object > | UrlToObject (string url, string extension, string authorization, string pathIfObjectIsInBundle="") |
| | IResourcesLoader.UrlToObject More...
|
| |
| virtual async Task< object > | ObjectFromCache (object objectLoaded, string pathIfObjectInBundle) |
| | Return the object itself because its not in a bundle. More...
|
| |
| bool | IsSuitableFor (string extension) |
| | State if this loader is suitable for a extension. - Parameters
-
More...
|
| |
| bool | IsToBeIgnored (string extension) |
| | State if an extension should be ignored. - Parameters
-
More...
|
| |
| void | DeleteObject (object objectLoaded, string reason) |
| | Function to delete un object loaded by this loader - Parameters
-
More...
|
| |
| virtual Vector3 | GetRotationOffset () |
| |
| bool | IsSuitableFor (string extension) |
| | State if this loader is suitable for a extension. More...
|
| |
| bool | IsToBeIgnored (string extension) |
| | State if an extension should be ignored. More...
|
| |
| Task< object > | UrlToObject (string url, string extension, string authorization, string pathIfObjectIsInBundle="") |
| | Loading function. More...
|
| |
| Task< object > | ObjectFromCache (object objectLoaded, string pathIfObjectInBundle) |
| | convert functio. Should test if the loaded object is an object or a bundle of objects, then return the object at pathIfObjectInBundle
More...
|
| |
| void | DeleteObject (object objectLoaded, string reason) |
| | Function to delete un object loaded by this loader More...
|
| |


E-mail body template for "Contact Item Owners" link.
The entry supports the variables substitution (see the list below).
Missing variables won't be substituted.
USER_ID - ID of the current user
USER_FULL_NAME - Full name of the current user
ITEM_TYPE_NAME - Type name of the currently item (job, node, build, etc.)
ITEM_DISPLAY_NAME - Display name of the item
ITEM_URL - Absolute URL to the item (if exists)


20. Optional: Full Ethereum Nodes
Optional: Full Ethereum Nodes
One final way to interact with the Ethereum blockchain is to become a local node for yourself.  Ethereum is no different, and in this section we'll show you how download your own Ethereum node.
Objectives
Our goal is to help you do the following things.
- Install and interact with the Geth CLI.
- Install and Interact with the Geth GUI
1. Ethereum Command Line Interface
There are many tools available to help you develop using Ethereum. On extremely important tool is the Ethereum client, which includes a CLI that you can use to interact with the Ethereum blockchain (in this course we will be using the Ethereum CLI called Geth).
In this section, PK goes over how to get started with the CLI on your computer. Later in the program, we'll be using this tool extensively, but first it's important to get it up and running for yourself.
What is Geth?
Geth is a multipurpose command line tool that runs a full Ethereum node implemented in the programming language Go. It has three interfaces - an interactive console, the command line subcommands and options, and a json-rpc server.
Ethereum Command Line Interface CLI
Resources
Geth is such an important tool for developers. For that reason, there are many resources and communities involved with the research, upkeep, and use of this tool. Below we put together a list of resources you can use to stay involved with everything going on in this space. Feel free to explore each of these resources yourself, and if you're ready, jump in and join the community!
[Installation instructions for Mac](https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-
for-Mac)
2. Ethereum Graphical User Interface
As well as a CLI, Ethereum also provides a GUI to help you work with their platform more easily. This provides many of the same features of the CLI in a friendlier environment. In this section, PK shows you how to get started with the Ethereum GUI for yourself.
Ethereum Graphical User Interface GUI
Resources
This section provided you the steps needed to get up and running with the with the Ethereum GUI. Once getting started, you'll want to continue exploring resources available for these tools. When you get some time, continue exploring these resources to learn even more about the tools you'll be working with.
Concept Review
Here we went over how you can get set up with a full Ethereum node on your local computer using geth.
Skill Tracker
Task Description:
Track the objectives you've feel you've gained the skills to complete.
Task Feedback:
Congratulations on gaining new skills!


Digital key
After paying for accommodation and providing identity documents, you can use the application to
get the key to your room. This will provide easier access to the reserved rooms, anywhere at anytime.
It’s keyless, cardless, and completely reshaping the standard for guest service.
• No need to stay in line
• Book a stay anywhere at anytime.


Provide consumption estimates for infrastructure usage by your TJob
Meter name
Usage volume
Unit
ram
mb-hour
cpu_usage
core-hour
net_traffic
kb
Service Name
Meter name
Usage volume
Unit
meter
SUBMIT DATA