THE ASSIGNMENT 1997 A film review by Timothy Voon Copyright 1998 Timothy Voon 1 :-( for the assassin
Director: Christian Duguay Writer: Dan Gordon, Sabi H. Shabtai Cast: Aidan Quinn, Ben Kingsley, Donald Sutherland, Claudia Terri, Lilliana Duguay
Ever noticed how some Hollywood ideas are always released in pairs i.e. last years DANTE'S PEAK and VOLCANO, this years upcoming ARMEGADDON and DEEP IMPACT. So it is with THE ASSIGNEMENT and THE JACKAL. Both stories are about the same man, but each takes a very different approach.
Needless to say, I detested the one starring Bruce Willis and Richard Gere, for more reasons than can possibly fill this review. As for THE ASSIGNMENT starring Aidan Quinn, Ben Kingsley and Donald Sutherland – well it's marginally better. The subtle difference is that one actually bored me to tears and the other was much better than I had expected. Much of the thrill of this movie, comes from the fact that the villain and hero are played by the same actor (Quinn). In general, I don't fancy the idea off look-a-likes confusing the elements of plot, but the final twist towards the end is reliant on this fact alone.
So who is this man they call ‘The Jackal' anyway? From daily news we know he was a ruthless assassin, now serving time in a French prison. This movie postulates how the most illusive terrorist of the twentieth century came to be captured.
An American naval captain, Annabel Ramirez (Quinn), carries an uncanny resemblance to this criminal. He is convinced by the CIA (Sutherland) and the Israelis (Kingsley) to embark on a most convoluted plot to bring down ‘The Jackal'. This involves a series of gruelling training exercises and sexual reprogramming to recreate the personality of the man he is hunting. It gets to a stage where the pleasant Ramirez begins detesting himself for becoming the Jackal.
Overall, well acted by the cast and far more intelligent than the other movie which carries the same name. Timothy Voon e-mail<EMAIL_ADDRESS>Movie Archives http://us.imdb.com/M/reviews_by?Tim+Voon Hugues Bouclier's Movies in Melbourne http://www.labyrinth.net.au/~bouclier/week/movies.html
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


系统生物学研究推荐阅读文章 Supporting tagline
研究趋势 (Trends in Systematic Biology)
Lubischew, A.A. 1969. Philosophical Aspects of Taxonomy. Ann. Rev. Entomol. 14:19-38.
Lauder, G.V. 1990. Functional Morphology and Systematics: Studying Functional Patterns in an Historical Context. Annual Review of Ecology and Systematics. 21:317-340.
Disney, H. 1998. Rescue plan needed for taxonomy. Nature. 394:120.
Page, R.D.M., Charleston, M.A. 1998. Trees within trees: phylogeny and historical associations. Trends in Ecology and Evolution. 13(9):356-359.
Wiens, J. J. 1999. Polymorphism in systematics and comparative biology. Annual Review of Ecology and Systematics. 30:327–362.
Gee, H. 2000. Online naming of species opens digital age for taxonomy. Nature. 408(6810):278.
VanDyk, J.K. 2000. Impact of the Internet on Extension Entomology. Ann. Rev. Entomol. 45:795–802.
Zenger, J.T., Walker, T.J. 2000. Impact of the Internet on entomology teaching and research. Annu Rev Entomol. 45:747-767.
Krell, F.T. 2000. Impact factors aren't relevant to taxonomy. Nature. 405(6786):507-508.
Garfield, E. 2001. Taxonomy is small, but it has its citation classics. Nature. 413(6852):107.
Kurt, J., Steve, C. 2001. Taxonomy and the blues. Nature. 409:664-665.
Alroy, J. 2002. How many named species are valid?. National Academy of Sciences of the United States of America. 99(6):3706-3711
Bisby, F.A., Shimura, J., Ruggiero, M., Edwards, J., Haeuser, C. 2002. Taxonomy, at the click of a mouse. Nature. 418:367
Bonnet, X., Shine, R., Lourdais, O. 2002. Taxonomic chauvinism. Trends in Ecology and Evolution. 17(1):1-3.
Bryant, H.N., Cantino, P.D. 2002. A review of criticisms of phylogenetic nomenclature: is taxonomic freedom the fundamental issue?. Biol Rev Camb Philos Soc. 77(1):39-55.
Buckley, T.R. 2002. A statistical future for morphological phylogenetics?. Trends in Ecology and Evolution. 17(4):161.
Gewin, V. 2002. All living things, online. Nature. 418(6896):362-363.
Godfray, H.C. 2002. Challenges for taxonomy. Nature. 417:17-19.
Krell, F.T. 2002. Why impact factors don't work for taxonomy. Nature. 415:957.
Mayr, E., Bock, W. J. 2002. Classifications and other ordering systems. Journal of Zoological Systematics & Evolutionary Research. 40(4):169-194.
Noor, M.A.F. 2002. Is the biological species concept showing its age?. Trends in Ecology and Evolution. 17(4):153-154.
Krell, F.T. 2002. Why impact factors don't work for taxonomy. Nature. 415:957.
Grant, T., Faivovich, J., Pol, D. 2003. The perils of 'point-and-click' systematics. Cladistics. 19(3):276-285.
Kocher, T.D. 2003. Fractious phylogenies. Nature. 423:489-491.
Lipscomb, D., Platnick, N., Wheeler, Q. 2003. The intellectual content of taxonomy: a comment on DNA taxonomy. Trends in Ecology and Evolution. 18(2):65-66.
Lydon, S.J., Wood, M. M., Huxley, R., Sutton, D. 2003. Data patterns in multiple botanical descriptions: implications for automatic processing of legacy data. Systematics and Biodiversity. 1(2):151-157.
Minelli, A. 2003. The status of taxonomic literature. Trends in Ecology and Evolution. 18(2):75-76.
Ronquist, F., Gardenfors, U. 2003. Taxonomy and biodiversity inventories. Trends in Ecology and Evolution. 18(6):269-270.
Stoeckle, M. 2003. Taxonomy, DNA, and the Bar Code of Life. BioScience. 53(9): 796-797.
Vane-Wright, R. I. 2003. Indifferent Philosophy versus Almighty Authority: on consistency, consensus and unitary taxonomy. Systematics and Biodiversity. 1(1): 3-11.
Basset, Y., Novotny, V., Miller, S.E., Weiblen, G.D., Missa, O., Stewart, A.J.A. 2004. Conservation and biological monitoring of tropical forests: the role of parataxonomists. Journal of Applied Ecology. 41(1):163-174.
Braby, M., Douglas, F. 2004. The taxonomy, ecology and conservation status of the Golden-rayed Blue: a threatened butterfly endemic to western Victoria, Australia. Biological Journal of the Linnean Society. 81:275-299.
Taylor, A. 2004. Taxonomy in support of biodiversity conservation - negotiating the acronym jungle. Systematics and Biodiversity. 2(2):111–112.
Polaszek, A. 2005. A universal register for animal names. Nature. 437(7058):477.
Borrell, B. 2007. Linnaeus at 300: The big name hunters. Nature. 446:253-255.
Friis, E.M., Crane, P. 2007. New home for tiny aquatics. Nature. 446(7133):269-270.
Godfray, H.C.J. 2007. Linnaeus at 300: Linnaeus in the information age. Nature. 446:259-260.
Knapp, S., Polaszek, A., Watson, M. 2007. Spreading the word. Nature. 446:261-262.
Mallet, J. 2007. Hybrid speciation. Nature. 446(7133):279-283.
Marris, E. 2007. Linnaeus at 300: the species and the specious. Nature. 446(7133):250-253.
Saarela, J.M., Rai, H.S., Doyle, J.A., Endress, P.K., Mathews, S., Marchant, A.D., Briggs, B.G, Graham, S.W. 2007. Hydatellaceae identified as a new branch near the base of the angiosperm phylogenetic tree. Nature. 446(7133):312-315.
Whitfield, J. 2007. Linnaeus at 300: We are family. Nature. 446:247-249.
Unknown. 2007. The legacy of Linnaeus: Taxonomy in an age of transformation. Nature. 446:231-232.
生命条形码 (Barcode of Life)
Tautz, D., Arctander, P., Minelli, A., Thomas, R.H., Vogler, A.P. 2002. DNA points the way ahead in taxonomy. Nature. 418(6897):479.
Andersen, N.M. 2003. Shortcuts in systematics? A commentary on DNA-based taxonomy. Trends in Ecology and Evolution. 18(3):63-65.
Dunn, C.P. 2003. Keeping taxonomy based in morphology. Trends in Ecology and Evolution. 18:270-271
Hebert, P.D., Ratnasingham S, deWaard Jr. 2003. Barcoding animal life: cytochrome c oxidase subunit 1 divergences among closely related species. Proc. R. Soc. Lond. B Biol. Sci. 270: 96–99.
Proudlove, G., Wood, P.J. 2003. The blind leading the blind: cryptic subterranean species and DNA taxonomy. Trends in Ecology and Evolution. 18(6):272-273.
Seberg, O., Humphries, C.J., Knapp, S., Stevenson, D.W., Petersen, G., Scharff, N., Mallet, J., Willmott, K. 2003. Taxonomy: renaissance or Tower of Babel?. Trends in Ecology and Evolution. 18(2):57-59.
Tautz, D., Arctander, P., Minelli, A., Thomas, R.H., Vogler, A.P. 2003. A plea for DNA taxonomy. Trends in Ecology and Evolution. 18(5): 70-74.
Blaxter, M.L. 2004. The promise of a DNA taxonomy. Philos Trans R Soc Lond B Biol Sci. 359(1444):669-679.
Bock, W. J. 2004. Species: the concept, category and taxon. Journal of Zoological Systematics and. Evolutionary Research 42: 178-190.
Hebert, P.D., Penton, E.H., Burns, J.M., Janzen, D.H., Hallwachs, W. 2004. Ten species in one: DNA barcoding reveals cryptic species in the neotropical skipper butterfly Astraptes fulgerator. Proc Natl Acad Sci U.S.A. 101(41):14812-14817.
Hebert, P.D.N., Stoeckle, M.Y., Zemlak, T.S., Francis, C.M. 2004. A Test Case for DNA Barcodes to Identify Species. PLoS Biol. 2(10): 1505.
Hebert, P.D.N., Stoeckle, M.Y., Zemlak, T.S., Francis, C.M. 2004. Identification of Birds through DNA Barcodes. PLoS Biol. 2(10):e312(1657-1663).
Jenner, R.A. 2004. Accepting Partnership by Submission? Morphological Phylogenetics in a Molecular Millennium. Systematic Biology. 53(10): 333-342.
Lee, M.S.Y. 2004. The molecularisation of taxonomy. Invertebrate Systematics. 18(1):1-6.
Moritz, C., Cicero, C. 2004. DNA barcoding: promise and pitfalls. PLoS Biol. 2(10):e354(1529-1531).
Scoble, M.J. 2004. Unitary or unified taxonomy?. Philos Trans R Soc Lond B Biol Sci. 359(1444):699-710.
Wheeler, Q.D. 2004. Taxonomic triage and the poverty of phylogeny. Philos Trans R Soc Lond B Biol Sci. 359(1444
blog comments powered by Disqus


@() @main("UGA Bus Transit") {
The Transit System at UGA are well designed. The detailed analysis highlights our strengths and exposes our weaknesses so that we can improve upon them in time. JoNiVaRaP


Today was the last day of my internship at Fandor and each of us summer interns gave a presentation of what we learned and did over the Summer. We each got cute little gift bags and our own Fandor hats (woo tech swag!)
I learned a lot over the course of this internship. I became much more familiar with SQL queries, I learned how to use Elasticsearch, I participated in daily stand-up meetings and learned what it is like to work with a product manager and iteratively improve what I'm working on. I learned that sometimes the best thing to do is to go get a coffee when you're stuck and need to think. Having never built a recommender before, I learned much more about recommenders than I imagined. I'm excited to take what I've learned here and apply it to other projects at other places.
So long Fandor, and thanks for all the movies! (Oh yeah, I watched a TON of really weird films this summer too).


TikTok slammed for removing same-sex couple's pictures from India and Pakistan
by News DeskAn Instagram photoshoot of a Hindu-Muslim same-sex couple, hailing from India and Pakistan, had gone viral on social media and users are going gaga over the pictures.
The pictures showed Anjali Chakra from India and Sundas Malik from Pakistan laughing and kissing under a rain-splattered umbrella in traditional outfits.
The same-sex couple then shared a video of the two dancing on video-sharing app TikTok.
Now the couple is creating headlines as TikTok has pulled down the video as per its community guidelines.
As per a report, the video-sharing site restricts posts by users it identifies as disabled, fat or LGBTQ+.
Chakra posted the same video on micro-blogging site Twitter on December 2 after learning that TikTok had pulled her video down.
She retweeted the video and wrote, “TikTok deleted this for ‘violating community guidelines’ so the rumours about homophobia are true.”
“@tiktok_us you wanna explain why this got taken down,” she added.
In the video, the couple can be seen dancing, first wearing casual outfits and then sporting traditional clothes.
The shared post triggered an outpouring of support for the couple on social media. Many users supported the couple and asked them to keep posting.
Aryaa Bhattacharya, Twitter user said,”I read the tiktok community guidlines and in no way the video violates it!! It is just so disappointing!!”
While Asha, another user said that,”I actually feel sick to my stomach… They’re fine with promoting violent relationships but not loving ones?! I just don’t understand…”


You used {{profile.num_words}} words total.
{{profile.description}}
On the right you can see where you stand compared to others.
As you can see, most people don't write very much, and we are only collecting essays that are at least 150 words long. That's why the line doesn't start at zero.
You can see more general trends in the Stats section.
Below you will find estimated predictions, estimated confidence probabilities of those predictions, and some of the words or word combinations that you used that made us think that you belong to that group. The bigger and the "redder" the word is, the more it was responsible for putting you in that category.
A couple of things to remember: all of the words in the word cloud picture are fairly important (even the small ones) and the words sizes correspond to ordinal, not quantitative measurements of actual word weights. So, for example, the biggest "red" word may be a lot or only a little more important than second largest/biggest red word, however the ranks of the "importance weights" are preserved.
On the right in each section are the graphs with highest weighted words/word combinations that qualify someone as belonging to each group. The bigger the bar, the more important it is. The weights can only be compared to other weights on the same chart. These are not specific to you.
tl;dr: Click on the buttons to see the words. Words that pop up are specific to you. Words in the bar charts are not specific to you.
You are probably {{profile.predictions.age}}. Unfortunately, no words or probabilities for you here. We tend to get the ages fairly close most of the time though. But you probably want to see a pretty graph anyway. This one shows our success rate at predicting people's ages so far. Zero on the X axis corresponds to guessing the age exactly right. It keeps improving, so check back soon.
You are probably a {{profile.predictions.gender}} and we are {{profile.probabilities.gender}}% sure.
Now in this section most words that guys say seem predictably macho. Except for "going gay". That's gotta work.
What makes a girl a girl? Baking, heels, chapstick, boobs and a bubbly personality.
You are probably {{profile.predictions.religion}} and we are {{profile.probabilities.religion}}% sure.
 And people who say "lol" are three times less likely to be an atheist?
Well, now you do.
You are probably {{profile.predictions.bodytype}} and we are {{profile.probabilities.bodytype}}% sure.
Watching Glee officially makes you fat.
You are probably a {{profile.predictions.smoking}} and we are {{profile.probabilities.smoking}}% sure.
"Chocolate" and "With Friends"? What?
You are probably {{profile.predictions.ethnicities}} and we are {{profile.probabilities.ethnicities}}% sure.


Ratargul Holiday Home
This Holiday Home is within 2km of Ratargul Swamp Forrest, Sylhet Bangladesh.
This is a very secure Holiday home.Ratargul Holiday Home offers you a life closer to nature and serenity.
If you choose to take a break from the urban life, if you wish to the cherish the quietude beside
lakes, gaze at the stars, and relish the moonlit nights, this holiday home may just be the perfect
destination. You might also enjoy the enthralling sites those are evident at the Ratargul Swamp
Forest and Meghalaya hills of India, all of which can be observed from the rooftop of this villa.
A crescent lake surrounding the spot avails you with angling facilities. Barbecue parties are
arranged on the 2nd floor, at a 1200 SQ ft balcony, where you can be accompanied by 30-40 people.
If you're a devotee of music, acoustic performances can be arranged by local singers, if informed
a week prior to your arrival. It is to be kept in mind that, if your trip is to shop and watch the
sun set behind the urban skyline, Ratargul Holiday Home is not an appropriate choice. Tranquility
and composure manifest themselves at this exclusive Holiday Home.
Lemon Garden Resort
Lemon Garden Resort is situated at 4 kilometer away from Sreemangal town.The area is named as Lawachara.
One gets panoramic views of mountains,Lemon Garden,hills and forests stretching hilly area with the amazing
view green forests, blue skies and cloud-adorned mountains all come together.
Shuktara Nature Retreat
Resorts in Sylhet are renowned for their eco friendly environment, location, and their luxurious settings.
During your stay in any of these resorts, you can enjoy in-house luxurious and relaxing services as well as
various types of outdoor activities such as tracking through tea gardens and forests, river cruise, biking and many other things.


Fully restores party HP and MP. Only usable from the menu.
Requirements - Bright Shard x2, Blaze Shard x2
Fully restores a character's HP and MP. Can be equipped.
Requirements - Blaze Shard x2, Frost Shard x2, Thunder Shard x4, Mythril Shard x4
Raises max HP and Defense (HP +3, Def +1). Can be equipped.
Requirements - Power Shard x2, Frost Shard x1
Slightly raises Strength (Str +2). Can be equipped.
Requirements - Spirit Shard x2, Power Shard x2
Raises max AP and Defense (AP +3, Def +1). Can be equipped.
Requirements - Spirit Shard x2, Power Shard x2
Reduces dark damage by 20% and raises Defense (Def +3). Can be equipped.
Requirements -
Restores 30 HP of each party member. Can be equipped.
Requirements - Blaze Gem x1, Frost Gem x1, Thunder Gem x1, Mythril Shard x2
Raises max AP by 1 (AP +1). Only usable from the menu.
Requirements - Spirit Shard x3, Spirit Gem x2, Mythril x3
Raises max HP and Defense (HP +6, Def +2). Can be equipped.
Requirements - Spirit Shard x3, Power Shard x3, Bright Gem x3
Slightly raises max MP (MP +1). Can be equipped.
Requirements - Blaze Shard x3, Frost Shard x3, Thunder Shard x3, Mythril x2
Raises Strength and Defense (Str +3, Def +1). Can be equipped.
Requirements - Power Shard x3, Power Gem x1, Lucid Gem x1
Significantly raises max AP and Defense (AP +4, Def +2). Can be equipped.
Requirements - Lucid Shard x3, Lucid Gem x2, Spirit Gem x2
Restores 3 MP to each party member. Can be equipped.
Requirements - Blaze Gem x3, Frost Gem x3, Thunder Gem x3, Bright Shard x5, Bright Crystal x1
Raises Defense by 1 (Def +1). Only usable from the menu.
Requirements - Lucid Shard x5, Lucid Gem x3, Lucid Crystal x1
Significantly raises max HP and Defense (HP +9, Def +3). Can be equipped.
Requirements - Power Shard x5, Power Gem x3, Bright Crystal x1
Slightly raises max MP and Defense (MP +1, Def +1). Can be equipped.
Requirements - Blaze Gem x2, Frost Gem x2, Thunder Gem x2, Mythril x3
Raises max HP and Defense, and reduces dark damage by 20% (HP +3, Def +4). Can be equipped.
Requirements - Spirit Shard x3, Power Shard x3, Power Crystal x1
Reduces fire, ice, and lightning damage by 20% and significantly raises Defense (Def +3). Can be equipped.
Requirements - Blaze Shard x3, Frost Shard x3, Thunder Shard x3, Orichalcum x1, Shiny Crystal x1
Fully restores party's HP and MP. Can be equipped.
Requirements - Bright Shard x5, Bright Gem x3, Bright Crystal x1, Shiny Crystal x1, Gale x2
Raises Strength by 1 (Str +1). Only usable from the menu.
Requirements - Power Shard x5, Power Gem x3, Power Crystal x1, Mystery Goo x1, Orichalcum x2
Significantly raises Strength and Defense (Str +4, Def +2). Can be equipped.
Requirements - Spirit Shard x5, Spirit Gem x3, Lucid Crystal x1
Raises max MP and Defense (MP +2, Def +2). Can be equipped.
Requirements - Shiny Crystal x2, Mystery Goo x1, Orichalcum x3, Gale x1
Raises HP, MP, AP, Strength, and Defense (HP +6, MP +1, AP +3, Str +2, Def +2). Also enhances magic and summon power. Can be equipped.
Requirements - Lucid Crystal x3, Power Crystal x3, Shiny Crystal x3, Bright Crystal x3
Reduces all elemental damage by 20% (Def +3). Can be equipped.
Requirements - Blaze Gem x5, Frost Gem x5, Thunder Gem x5, Bright Gem x5, Gale x3
The ultimate keyblade. Raises max MP by 2, and possesses maximum power and attributes (MP +2).
Requirements - Lucid Gem x5, Power Gem x5, Thunder Gem x5, Mystery Goo x3, Gale x3


Tweeria is unavailable now. We're working to fix it. Please read latest news about maintenances here -> @tweeria


Lesson 3
- Maine isn’t going to walk to you.
Presented:
August 13, 2016 at Drupal Camp Asheville
October 22, 2016 at Drupal Camp Atlanta
November 5, 2016 at Drupal Camp Chattanooga
hikewithgravity.com
@hikewithgravity


VLNA(1) VLNA(1) NAME vlna - adds tilde after each non-syllabic preposition USAGE vlna [options] [filenames] PREFACE There exists a special Czech and Slovak typographical rule: you cannot leave the non-syllabic preposition on the end of one line and continue writting text on next line. For example, you cannot write down the text "v lese" (in a forest) like "v<new-line>lese". The program vlna adds the asciitilde between such preposition and the next word and removes the space(s) in this place. It means, the program converts "v lese" to "v~lese". You can use this program as a preporcessor before TeXing. Moreower, you can set another sequence to store instead asciitilte (see the -x option). DESCRIPTION The program vlna processes one or more files, searches the non-syllabic prepositions followed by space(s) in these files and converts this/these space(s) to asciitilde for each such occurrence. In the processed file, the activity of the program can be blocked by %~- sequence and the activity can be restored again by the %~+ sequence. These sequences can include spaces, it means that % ~- is a correct sequence too. The rule to recognize a preposition follows: The arbitrary number of opening parentheses can be written before the preposition and before these (optional) parentheses must be the space, tabelator or new-line. The preposition itself is one-letter word, the letters have to be from this set: {KkSsVvZzOoUuAI}. See the -v option if you want to change this set of letters. From version 1.2, the TeX sequence can be written before preposition and before the brace. Example: "<new-line>([V lese" is converted to "<new-line>([V~lese". Another example: "\uv{V lese}" is converted to "\uv{V~lese}". One or more blank-spaces have to be included after preposition before next word. The blank-space means space or tabelator. One <new-line> can be here too. All these characters are removed and replaced by asciitilde (or by another string, see -x option). If <new-line> is deleted, another <new-line> is created before preposition (and before optional parentheses) in order to the number of lines is kept unchanged. Example: "... V<new-line><tabelator>lese" is converted to "...<new-line>V~lese". The program checks the consintence of TeX's math environments (if -m option isn't used). For example the "$...$$...$" sequence (it means the display mode switch inside the text-math mode) generates a warning. Empty line inside display mode generates a warning too and the program processes next text like in normal (non-math) mode. The existence of the "$" inside display mode are accepted because the constructions like $$..\hbox{..$..$}..$$ are allowed and common. The consistence of verbatim mode is checked on the end of the file. If the file ends but the verbatim mode does not end the warning is printed. This behavior can be switched off by -n or -w options. The program suppresses the tilde changing after letters like prepositions but they are not prepositions because the \TeX or \LaTeX sequence precedes. Example: "vlastnosti \TeX u jsou" is not converted to "vlastnosti \TeX u~jsou", because this text is printed (after TeX processing) like "vlastnosti TeXu jsou". The letter "u" is a suffix here, no preposition. OPTIONS The options are optional and can be written in arbitrarty order separated by space. -f Filter. The [filenames] are treated as follows: vlna -f filename1 filename2 Input is filename1, output is filename2. vlna -f filename1 Input is filename1, output is stdout. vlna -f Input is stdin, output is stdout. vlna filename1 [filename2 [filename3 ...]] If the -f option is omitted then each file is processed independently and it is re-written. -s The silent mode. No messages, warnings, statistics are printed. Only errors which terminates the program untimely are printed. If this parameter is omitted then banner, warnings and statistics are printed to stderr. -r Do not create the backups. The option -r is irrelevant if the -f option is used. If the -f and -r options aren't used then each re- written file is stored with its original contents to a backup file (the name of backup file is the same as filename, only the tilde is used instead of the last character). -v characters The set of characters treated as non-syllabic prepositions is declared by this option. Default: -v KkSsVvZzOoUuAI. The space between -v and characters is required. -x code The code is a string written in hexadecimal notation (even hexa digits is required). This string will be saved after prepositions instead asciitilde which is default. The example: -x C2A0 two bytes are stored after each non-syllabic preposition, first byte has C2 code and second byte has A0 code. This example means that NO-BREAK SPACE in UTF8 encoding will be used after prepositions. Another example: -x 00A0 the NO-BREAK SPACE in UTF16 encoding. Another example: -x 48454C4C4F the string HELLO will be used. The space between -x and code is required. -m The math-modes ($...$ and $$...$$) are ignored. It means that non-syllabic prepositions is searched in math-mode too. Default (without -m option): no changes in math modes are done because (for example) "v" is variable in math-mode, no preposition. -n The verbatim mode (\verb<char>...<char>, \begtt...\endtt) is ignored, it means the program can do a changes in verbatim environment. Default (without -n option): no changes in verbatim mode are done. -l The LaTeX mode. The following environments are treated as display mode: \begin{display}...\end{display} and \begin{equation}...\end{equation} and the following environment is treated as verbatim mode: \begin{verbatim}...\end{verbatim}. -w The web mode (Knuth's web, no www:-). The following sequences are treated as verbatim: @<, @d...@*, @space or @>|. It means program code is unchanged in *.w or *.web files, only web-comments are processed. EXAMPLES vlna -m -n -s -r file The program has a behavior similar to the old vlnka program. vlna *.tex All files with .tex suffix in current directory will be processed (and possibly changed). (The "*" is UNIX-shell feautre). vlna -f file > /dev/null Only the consistence checking of math and verbatim modes is processed. No changes are done. AUTHORS Petr Olsak<EMAIL_ADDRESS>Man page (Czech original) and Makefile is created by Rulolf Cejka March 30 2009 VLNA(1)


WHO AM I
I started in Alarm Installation 12 years ago as an entry level technician. During my career there, I learned and adapted to many new smart home technologies. After my time there I pursues an interest in sales with Pure Energy, doing solar sales. I learned how to prospect for new customers, fill the sales funnel and close deals. After that I joined Austin Coding Academy in 2020 to pursue my goal of becoming a full stack web developer.
View My WorkA brief summary of experience, i.e "I've been in this class for x amount of time, I've made various projects, etc." Lorem ipsum, dolor sit amet consectetur adipisicing elit. Quibusdam obcaecati at, velit rem commodi magnam consequatur vel. Cupiditate nam suscipit maiores, aut culpa, voluptas eaque aliquam natus, autem placeat corporis.
Download Resume .PDFFront End Developer trained in CSS and HTML5.
Received training to use the proper tags and design to increase SEO, which improves discoverability on search engines like Google.
Previous experience installing and managing alarm installation teams, as well as working with Smart Home Devices.
Hands-on training with both JavaScript and Bootstrap programming.


Illustrate form input validation with in-line messages
Customer Information
Name
Please enter your name as 'Last name, First name, Middle initial'.
Phone number
Please enter your telephone number matching pattern '123-456-7890'


FINANZ’20
by JHM Finanzmesse| 21 - 22 jan 2020 | Zurich |
The fair slogan of FINANZ’20 in Zurich is «Traditional values in a digital world».
On 21 and 22 January 2020, Switzerland’s largest financial fair will be held at StageOne in Zurich Oerlikon. The fair slogan of FINANZ’20 is «Traditional values in a digital world» and the event will be aimed solely at professional investors, such as independent asset managers, private bankers, family offices, pension funds, etc.
A large programme will accompany the financial fair. The topics range from «Modern monetary theory» to «Sustainable investments». As usual, experts from the worlds of business, finance, academia and politics will be present. For example, the influential professor and leading representative of MMT theory, Prof. Stephanie Kelton, and Prof. Tobias Straumann will discuss whether the old economic mantras have become obsolete.
FAIR address
StageOne Event & Convention Hall
Elias-Canetti-Strasse 146
8050 Zurich Oerlikon


Here's a group project, which I continuously deployed and added a password reset feature to: Wishlister
My other projects are more esoteric, or reimplementing things for my own learning, like a binary search tree or a doubly linked list. Here's some travel pictures to fill the space!
I enjoyed this quote from the template
The dreams of yesterday are the hopes of today and the reality of tomorrow. Science has not yet mastered prophecy. We predict too much for the next year and yet far too little for the next ten.
Credit to Space Ipsum
Thanks for viewing!!
Photographs by me.


{% load static %}
Lorem ipsum, dolor sit amet consectetur adipisicing elit.
Sunsets don't get much better than this one over @GrandTetonNPS. #nature #sunset pic.twitter.com/YuKy2rcjyU — US Department of the Interior (@Interior) May 5, 2014
Sunsets don't get much better than this one over @GrandTetonNPS. #nature #sunset pic.twitter.com/YuKy2rcjyU


Most of the time ActiveRecord Callbacks are pretty straight forward. But sometimes in larger projects or when using certain gems you can end up with more callbacks happening than you realize. If you're curious about just what is happening when on your model there's no straight forward way that I'm aware of to find out. However, it's actually not too difficult to do yourself.
If you look at the methods available on an ActiveRecord model you'll find several related to callbacks. Here's what we find when inspecting a model that has a Paperclip attachment (you'll see why in a minute).
~/my_project% rails c Loading development environment (Rails 4.2.0) 2.2.1 :001 > MyModel.methods.select { |method| method.to_s.include?('callback') } => [:_validate_callbacks, :_save_callbacks, :_destroy_callbacks, :_commit_callbacks, :_post_process_callbacks, :_post_process_callbacks?, :_post_process_callbacks=, :_file_post_process_callbacks, :_file_post_process_callbacks?, :_file_post_process_callbacks=, :_validate_callbacks?, :_validate_callbacks=, :_validation_callbacks, :_validation_callbacks?, :_validation_callbacks=, :_initialize_callbacks, :_initialize_callbacks?, :_initialize_callbacks=, :_find_callbacks, :_find_callbacks?, :_find_callbacks=, :_touch_callbacks, :_touch_callbacks?, :_touch_callbacks=, :_save_callbacks?, :_save_callbacks=, :_create_callbacks, :_create_callbacks?, :_create_callbacks=, :_update_callbacks, :_update_callbacks?, :_update_callbacks=, :_destroy_callbacks?, :_destroy_callbacks=, :_commit_callbacks?, :_commit_callbacks=, :_rollback_callbacks, :_rollback_callbacks?, :_rollback_callbacks=, :raise_in_transactional_callbacks, :raise_in_transactional_callbacks=, :define_paperclip_callbacks, :normalize_callback_params, :__update_callbacks, :set_callback, :skip_callback, :reset_callbacks, :define_callbacks, :get_callbacks, :set_callbacks, :define_model_callbacks]
That's a pretty lengthy list, and just by glancing at it we can see several methods like _initialize_callbacks=
and skip_callback
that aren't likely to be relevant to the problem at hand. The protected method get_callbacks
looks promising, but if you look at the source:
def get_callbacks(name) send "_#{name}_callbacks" end
it quickly becomes obvious that it wasn't meant to be used to get a comprehensive list of all the callbacks on a model. Instead it just gives us the callbacks related to one particular event. That's great, but what about when we don't know all of the events? I deliberately chose a model with a Paperclip attachment because Paperclip provides some of its own callback events. They could easily be missed if we assumed only the standard ActiveRecord callbacks were available. Without knowing otherwise before hand that's a fair, but potentially incorrect, assumption.
From get_callbacks
we can see that the methods it calls all take the form of "_#{name}_callbacks" where name
is the name of the event. Well, a few methods in our list from before seem to match that pattern, so with a little help from a regular expression we can get just those:
2.2.1 :002 > MyModel.methods.select { |method| method.to_s =~ /^_{1}[^_].+_callbacks$/ } => [:_validate_callbacks, :_save_callbacks, :_destroy_callbacks, :_commit_callbacks, :_post_process_callbacks, :_file_post_process_callbacks, :_validation_callbacks, :_initialize_callbacks, :_find_callbacks, :_touch_callbacks, :_create_callbacks, :_update_callbacks, :_rollback_callbacks]
This is great, but still not quite what we want. Each of these methods returns an array-like CallbackChain object containing a set of Callback objects:
2.2.1 :003 > MyModel._save_callbacks => #<ActiveSupport::Callbacks::CallbackChain:0x007fbf7567e918 @callbacks=nil, @chain= [#<ActiveSupport::Callbacks::Callback:0x007fbf7362c098 @chain_config= {:scope=>[:kind, :name], :terminator=> #<Proc:0x007fbf73237cf8@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/activemodel-4.2.0/lib/active_model/callbacks.rb:106 (lambda)>, :skip_after_callbacks_if_terminated=>true}, @filter= #<Proc:0x007fbf7362c390@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/has_attached_file.rb:91>, @if= [#<ActiveSupport::Callbacks::Conditionals::Value:0x007fbf7362c340 @block= #<Proc:0x007fbf7362c2f0@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/activemodel-4.2.0/lib/active_model/callbacks.rb:141>>], @key=70230125666760, @kind=:after, @name=:save, @unless=[]>, #<ActiveSupport::Callbacks::Callback:0x007fbf75684ae8 @chain_config= {:scope=>[:kind, :name], :terminator=> #<Proc:0x007fbf73237cf8@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/activemodel-4.2.0/lib/active_model/callbacks.rb:106 (lambda)>, :skip_after_callbacks_if_terminated=>true}, @filter=:autosave_associated_records_for_document, @if=[], @key=:autosave_associated_records_for_document, @kind=:before, @name=:save, @unless=[]>, #<ActiveSupport::Callbacks::Callback:0x007fbf7567ea80 @chain_config= {:scope=>[:kind, :name], :terminator=> #<Proc:0x007fbf73237cf8@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/activemodel-4.2.0/lib/active_model/callbacks.rb:106 (lambda)>, :skip_after_callbacks_if_terminated=>true}, @filter=:autosave_associated_records_for_uploader, @if=[], @key=:autosave_associated_records_for_uploader, @kind=:before, @name=:save, @unless=[]>], @config= {:scope=>[:kind, :name], :terminator=> #<Proc:0x007fbf73237cf8@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/activemodel-4.2.0/lib/active_model/callbacks.rb:106 (lambda)>, :skip_after_callbacks_if_terminated=>true}, @mutex=#<Mutex:0x007fbf7567e8c8>, @name=:save>
Each of these has an interesting method named raw_filter
which returns either a method name Symbol or a Proc object. Let's see what we get when we inspect that for each of our model's save callbacks:
2.2.1 :004 > MyModel._save_callbacks.map { |callback| callback.raw_filter } => [#<Proc:0x007fbf7362c390@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/has_attached_file.rb:91>, :autosave_associated_records_for_document, :autosave_associated_records_for_uploader]
We get an array with a Proc and a couple of Symbols which starts to give us a much better sense of what will happen when we save a model. There's one more important detail though that we've overlooked, each Callback object has a kind
property that will tell us whether the callback gets called before, after, or around the event. Let's group our callbacks by kind
:
2.2.1 :005 > MyModel._save_callbacks.group_by(&:kind).each { |_, callbacks| callbacks.map! { |callback| callback.raw_filter } } => {:after=> [#<Proc:0x007fbf7362c390@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/has_attached_file.rb:91>], :before=> [:autosave_associated_records_for_document, :autosave_associated_records_for_uploader]} => {:after=>[#<Proc:0x007fbf7362c390@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/has_attached_file.rb:91>], :before=>[:autosave_associated_records_for_document, :autosave_associated_records_for_uploader]}
Awesome! Finally something that will start to give us real insight into what happens when. But we can still do better, what about all the callbacks? If we combine the regular expression filter of the class methods from before with the above we get a complete picture for the whole model:
2.2.1 :006 > MyModel.methods.select { |method| method.to_s =~ /^_{1}[^_].+_callbacks$/ }.each_with_object({}) { |method, memo| memo[method] = MyModel.send(method).group_by(&:kind).each { |_, callbacks| callbacks.map! { |callback| callback.raw_filter } } } => {:_validate_callbacks=> {:before=> [#<ActiveModel::BlockValidator:0x007fbf7362d3f8 @attributes=[:file], @block= #<Proc:0x007fbf7362d510@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/has_attached_file.rb:27>, @options={}>, #<Paperclip::Validators::MediaTypeSpoofDetectionValidator:0x007fbf73624320 @attributes=[:file], @options= {:if=> #<Proc:0x007fbf736245f0@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/has_attached_file.rb:85 (lambda)>}>, #<ActiveRecord::Validations::PresenceValidator:0x007fbf7567e440 @attributes=[:document], @options={}>, #<ActiveRecord::Validations::PresenceValidator:0x007fbf7567dc20 @attributes=[:uploader], @options={}>, #<ActiveRecord::Validations::UniquenessValidator:0x007fbf7567d400 @attributes=[:file_fingerprint], @klass= MyModel(id: integer, file_file_name: string, file_content_type: string, file_file_size: integer, file_updated_at: datetime, file_fingerprint: string, created_at: datetime, updated_at: datetime), @options= {:case_sensitive=>true, :if=> #<Proc:0x007fbf7567d5b8@/Users/sean_eshbaugh/sites/clickherelabs/hub/app/models/attachment.rb:22 (lambda)>}>, #<Paperclip::Validators::AttachmentPresenceValidator:0x007fbf7567c4b0 @attributes=[:file], @options={}>, #<Paperclip::Validators::AttachmentSizeValidator:0x007fbf756774d8 @attributes=[:file], @options={:less_than=>1073741824}>, #<Paperclip::Validators::AttachmentFileTypeIgnoranceValidator:0x007fbf75676510 @attributes=[:file], @options={}>]}, :_save_callbacks=> {:after=> [#<Proc:0x007fbf7362c390@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/has_attached_file.rb:91>], :before=> [:autosave_associated_records_for_document, :autosave_associated_records_for_uploader]}, :_destroy_callbacks=> {:before=> [#<Proc:0x007fbf73627f48@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/has_attached_file.rb:92>]}, :_commit_callbacks=> {:after=> [#<Proc:0x007fbf736279f8@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/has_attached_file.rb:93>]}, :_post_process_callbacks=>{}, :_file_post_process_callbacks=> {:before=> [#<Proc:0x007fbf75687888@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/validators.rb:67>, #<Proc:0x007fbf75677b18@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/validators.rb:67>, #<Proc:0x007fbf75676bf0@/Users/sean_eshbaugh/.rvm/gems/ruby-2.2.1@my_project/gems/paperclip-4.2.1/lib/paperclip/validators.rb:67>]}, :_validation_callbacks=>{}, :_initialize_callbacks=>{}, :_find_callbacks=>{}, :_touch_callbacks=>{}, :_create_callbacks=>{}, :_update_callbacks=>{}, :_rollback_callbacks=>{}}
And for the sake of reusability we can easily wrap this up in a module (pardon the terrible name):
module ShowCallbacks def show_callbacks _callback_methods = methods.select do |method| method.to_s =~ /^_{1}[^_].+_callbacks$/ end _callback_methods.each_with_object({}) do |method, memo| memo[method] = send(method).group_by(&:kind).each do |_, callbacks| callbacks.map! do |callback| callback.raw_filter end end end end end class MyModel extend ShowCallbacks ... end


A graphical representation that resembles a bound notebook that contains pages separated into sections by tabbed divider-pages. It contains a mechanism that you can use to turn the pages. For example, you can select a tab to turn the page to the section identified by the tab label.


This structure contains the media access functions to be used by the MSC class driver. More...
#include <usbdmsc.h>
Data Fields | |
| void *(* | Open )(uint32_t ulDrive) |
| void(* | Close )(void *pvDrive) |
| uint32_t(* | BlockRead )(void *pvDrive, uint8_t *pucData, uint32_t ulSector, uint32_t ulNumBlocks) |
| uint32_t(* | BlockWrite )(void *pvDrive, uint8_t *pucData, uint32_t ulSector, uint32_t ulNumBlocks) |
| uint32_t(* | NumBlocks )(void *pvDrive) |
This structure contains the media access functions to be used by the MSC class driver.
| uint32_t(* tMSCDMedia::BlockRead) (void *pvDrive, uint8_t *pucData, uint32_t ulSector, uint32_t ulNumBlocks) |
This function will read a block from a device opened by the USBDMSCStorageOpen() call.
| pvDrive | is the pointer that was returned from a call to USBDMSCStorageOpen(). |
| pucData | is the buffer that data will be written into. |
| ulSector | is the block address to read. |
| ulNumBlocks | is the number of blocks to read. |
This function is use to read blocks from a physical device and return them in the /e pucData buffer. The data area pointed to by /e pucData should be at least /e ulNumBlocks * Block Size bytes to prevent overwriting data.
| Returns | the number of bytes that were read from the device. |
| uint32_t(* tMSCDMedia::BlockWrite) (void *pvDrive, uint8_t *pucData, uint32_t ulSector, uint32_t ulNumBlocks) |
This function will write a block to a device opened by the USBDMSCStorageOpen() call.
| pvDrive | is the pointer that was returned from a call to USBDMSCStorageOpen(). |
| pucData | is the buffer that data will be used for writing. |
| ulNumBlocks | is the number of blocks to write. |
This function is use to write blocks to a physical device from the buffer pointed to by the /e pucData buffer. If the number of blocks is greater than one then the block address will increment and write to the next block until /e ulNumBlocks * Block Size bytes have been written.
| Returns | the number of bytes that were written to the device. |
| void(* tMSCDMedia::Close) (void *pvDrive) |
This function close the drive number in use by the mass storage class device.
| pvDrive | is the pointer that was returned from a call to USBDMSCStorageOpen(). |
This function is used to close the physical drive number associated with the parameter /e pvDrive. This function will return 0 if the drive was closed successfully and any other value will indicate a failure.
| Returns | 0 if the drive was successfully closed or non-zero for a failure. |
| uint32_t(* tMSCDMedia::NumBlocks) (void *pvDrive) |
This function will return the number of blocks present on a device.
| pvDrive | is the pointer that was returned from a call to USBDMSCStorageOpen(). |
This function is used to return the total number of blocks on a physical device based on the /e pvDrive parameter.
/retval Returns the number of blocks that are present in a device.
| void*(* tMSCDMedia::Open) (uint32_t ulDrive) |
This function is used to initialize and open the physical drive number associated with the parameter ulDrive. The function will return zero if the drive could not be opened for some reason. In the case of removable device like an SD card this function should return zero if the SD card is not present. The function returns a pointer to data that should be passed to other APIs or it will return 0 if no drive was found.


GenBinomApps: Clopper-Pearson Confidence Interval and Generalized Binomial
Distribution
Density, distribution function, quantile function and random generation for the Generalized Binomial Distribution. Functions to compute the Clopper-Pearson Confidence Interval and the required sample size. Enhanced model for burn-in studies, where failures are tackled by countermeasures.
| Version: |
1.0-2 |
| Depends: |
stats |
| Published: |
2014-06-30 |
| Author: |
Horst Lewitschnig, David Lenzi |
| Maintainer: |
Horst Lewitschnig <Horst.Lewitschnig at infineon.com> |
| License: |
GPL-3 |
| NeedsCompilation: |
no |
| In views: |
Distributions |
| CRAN checks: |
GenBinomApps results |
Downloads:
Reverse dependencies:
Linking:
Please use the canonical form
https://CRAN.R-project.org/package=GenBinomApps
to link to this page.


An implemention of Git in JavaScript. See the main Gitlet website for more information.
Over the last six years, I've become better at using Git for version control. But my conceptions of the index, the working copy, the object graph and remotes have just grown fuzzier.
Sometimes, I can only understand something by implementing it. So, I wrote Gitlet, my own version of Git. I pored over tutorials. I read articles about internals. I tried to understand how API commands work by reading the docs, then gave up and ran hundreds of experiments on repositories and rummaged throught the .git directory to figure out the results.
I discovered that, if approached from the inside out, Git is easy to understand. It is the product of simple ideas that, when combined, produce something very deep and beautiful.
If you would like to understand what happens when you run the basic Git commands, you can read Git in six hundred words.
Afterwards, read the heavily annotated Gitlet source. 1000 lines of code sounds intimidating. But it's OK. The annotations explain both Git and the code in great detail. The code mirrors the terminology of the Git command line interface, so it should be approachable. And the implementation of the main Git commands is just 350 lines.
I wrote an article, Introducing Gitlet, about the process of writing the code.


Under The Bridge
Please Join Us!
The Under the Bridge program co-sponsored by a local group of volunteers and several other organizations is an excellent example of what can be done by a few volunteers with a little money and a little bit of effort.
Please Join Us!
The Under the Bridge program co-sponsored by a local group of volunteers and several other organizations is an excellent example of what can be done by a few volunteers with a little money and a little bit of effort.


Classify On the Fly: publicly available traffic flow information from data.gov.au for the City of Perth.
Equal Interval
Quantile
Standard Deviation
Arithmetic Progression
Geometric Progression
Class Jenks


Home
Homework for WDV101
Homework for WDV221
Homework for WDV131
Homework for WDV341
Homework Links WDV101
Unit 1
Wind Turbine Web Project
Student Resources Project
Pathname Website
Unit 2
Koala Site
Cocoa Site
Summit Farms Site
Unit 3
Image Gallery
Rose Gallery
Bootstrap Site: Mermaids
Other
Contact Me
Finals
Pets To Go
WAVES Surfing School


I | |
| index_option [Mongo] |
option for index.
|
T | |
| t [MongoReply] |
type of reply sent from MongoDB
|
| t [MongoOperation] |
type of operations allowed in MongoDB
|
| t [MongoHeader] |
type of header
|
| t [MongoAdmin] |
the type for MongoAdmin
|
| t [Mongo] |
the type for Mongo
|


This article describes several ways to check the character encoding information sent in the HTTP header of a web document.
It is important to clearly indicate the character encoding (charset) of a document served on the Web. Otherwise, a receiver may not correctly interpret the document. A Web browser, for example, may show random characters instead of readable text. One way of indicating the character encoding of a Web document is to put this information into the charset
parameter of the Content-Type
header.
In particular, it is important to note that the encoding declared in the HTTP header overrides all in-document encoding declarations in HTML and CSS files.
The Internationalization Checker tool, developed by the W3C, checks web pages for various internationalisation issues. It also has an information section that summarises key internationalization-related information about a page, such as character encoding and language declarations, etc. That section tells you whether an encoding declaration is used in the HTTP header, and if so, what is the encoding.
The i18n checker tool is particularly useful, since it also shows you other encoding declarations used in the document, and raises a flag if there are differences.
There are several services that show you all the HTTP headers and the (HTML) source of the document returned from the server after you enter the address of the document you are interested in:
Note: W3C has no relationship to any of these services.
In the HTTP headers, look for the Content-Type
header, and in particular for the charset
parameter, e.g.
Content-Type: text/html; charset=utf-8
Note: The charset
parameter may not be present. This is okay if your document itself indicates its character
encoding.
To check the markup, the Markup Validation Service has to make sure it correctly decodes the document it checks. It will show an error message if it cannot find information about the encoding, or if it finds conflicting information, or if it cannot decode the document according to the information it found.
To know the encoding that the validator found, you can use the extended interface.
In this interface, you can also select the show source option, and then visually check that the source is
correctly interpreted. This is useful to check that you actually use the right encoding. It is not always possible to mechanically check
whether for example, a document claiming to be iso-8859-1
is actually encoded using iso-8859-2
or some other encoding.
telnet
or another command-line toolThis requires a bit more expertise, but may be easier to automate. Another command line tool may be wget
(with a -S
or -s
option).
Some servers transcode the Web documents they serve to different character encodings for different clients. This happens for example with some servers in Russia. This requires special care, because your browser, running e.g. on a Mac or on a Windows system, may indicate using a different character encoding than the encoding given to you by a Web-based service or the W3C Markup Validation Service (which are mostly based on UNIX systems).
Authoring HTML & CSS
Setting up a server


Simple call
A simple application for secure p2p based meetings
demoSimple call
A simple application for secure p2p based meetings
demo
Waiting for call...
Incoming video call request! Allow video and audio permission to accept call.
Either user was not online...
Call unsuccessfull! Please create a new session key and call againConnecting...
Call connected succesfully! Click on "Start Video Chatting" button below to start video
Either network issue or other user refreshed or left the page
Call terminated! Please create a new session key or contact host
Loading...
Loading...


Improve your team's productivity by optimizing your schedules, events, and meetings with ApiCal.
Start Bootstrap has everything you need to get your new website up and running in no time! All of the templates and themes on Start Bootstrap are open source, free to download, and easy to use. No strings attached!
Get Started!Easy to create events with automated team invitations.
Manage your personal or team schedule with our easy to use interactable calendar.
Automatically generate available time windows for team events.
You have to make your websites with bees these days!
This pizza made possible by COP 4331C Group 16!


Projects data (Models)¶
Schema overview¶
[Explain schema]
Model details¶
-
class
viewer.models.
User
(*args, **kwargs)¶ Users within the Django authentication system are represented by this model.
Username and password are required. Other fields are optional.
-
class
viewer.models.
SessionProject
(*args, **kwargs)¶ Django model for holding information about a fragalysis user project - a set of sessions saved by a user
- Parameters
title (CharField) – The title of the project
init_date (DateTimeField) – The date the project was initiated (autofield)
description (Charfield) – A short user-defined description for the project
target (ForeignKey) – Foreign Key link to the relevent project target
author (ForeignKey) – A link to the user that created the project
tags (TextField) – A comma separated list of user-defined tags - for searching and tagging projects
-
class
viewer.models.
Snapshot
(*args, **kwargs)¶ Django model for storing information describing a static snapshot of a fragalysis page - multiple snapshots make up a project
- Parameters
id (Autofield) – Auto-created id for the session, used in url accession
type (CharField) –
- Describes the session type:
SNAPSHOT_TYPE = ( (INIT, “INIT”), # Initial snapshot generated by system (AUTO, ‘AUTO’), # Automatic generated by system (MANUAL, ‘MANUAL’) # Manual generated by user action
)
title (Charfield) – The title of the snapshot
author (ForeignKey) – Foreign key link to the user that created the snapshot
description (Charfield) – Short user-provided description for the snapshot
created (DateTimeField) – Auto-created timestamp for when the snapshot was created
data (TextField) – Field to hold the json data that is passed from the front-end describing what to load into the react components to reproduce the session state
session_project (ForeignKey) – If the snapshot is part of a project, a foreign key link to the relevant project (optional)
parent (ForeignKey(self)) – Foreign key link to another Snapshot instance describing the current Snapshot parent (optional)


{% capture location %}{{ page.url | remove_first:'/' | split:'/' | first | split:'.' | first }}{% endcapture %} Toggle navigation YML Home About Events News Contact Contact Us Other Groups Contact This site relies on JavaScript to function. Your experience is likely to be poor without it. Please consider turning it on, or upgrading to a more modern browser.


What is code coverage?
“In computer science, code coverage is a measure used to describe the degree to which the source code of a program is tested by a particular test suite.” — Wikipedia
Code coverage describes the degree to which your automated tests actually test your source code.
Code coverage: in practice
Run my code and measure which parts were utilized.
From the perspective of a code coverage tool, code coverage means: run my code and record which parts of the code were used.
Popular Coverage Metrics
Statement coverage or line coverage
Function coverage
Branch coverage
We're going to talk about 3 types of code coverage metrics.
Statement coverage tells you which code statements were executed.
Line coverage tells you which lines of code were reached.
Function coverage tells you which functions were called.
Branch coverage tells you which code branches were entered.
Statement coverage
function doSomething() {
return;
console.log('hello world');
}
doSomething();
Can anyone tell me which lines of code were executed in this example?
Statement coverage
Statements covered: 75% ( 3 / 4 )
1 of 4 statements unexecuted
Function coverage
function pass() {}
console.log('hello world');
Any guesses as to what the function coverage looks like for this example?
Function coverage
Functions covered: 0% ( 0 / 1 )
We have 1 function and it was never executed.
Note that our statement coverage was perfect. Every statement was executed.
Branch coverage
if (true || false) {
console.log('hello world!');
}
Any guesses about the branch coverage here?
Follow up: any idea how many missing branches we have?
Branch coverage
Branches covered: 50% ( 2 / 4 )
We have 4 branches and 2 of them were never executed.
Which 2 branches were missed?
Answer:
- the highlighted "false" means the OR branch of our "if" statement was never executed
- that little "E" means the "else" branch of our "if" statement was never executed
Branch coverage
Branches covered: 50% ( 2 / 4 )
The missing "else" branch coverage is more obvious if we add an "else" statement.
Demo Time!
Time for a live demo!
Just kidding. I'm just going to show off an example.
QUnit is a JavaScript test framework.
What is it good for?
100% coverage is not an indicator of good tests
< 100% coverage tells us we missed something
Code coverage is a metric. Metrics are useless unless we understand their purpose.
In the game of code coverage, 100% is the magic number. If our tests execute every edge of our code, they will have 100% coverage.
However, 100% code coverage does not mean our tests are comprehensive or well-written. Code coverage says nothing about our test assertions and it does not measure the interdependence of code branches.
You can have 100% code coverage with broken code.
JS Code Coverage Tools
There are three popular JS code coverage tools.
Istanbul is the big name in this space right now. QUnit uses Istanbul.
Istanbul needs to modify your code before running it so you'll need Node.js installed to run your tests.
Blanket.js can be run through Node or included directly in your web browser.
JSCover requires Java and I have never used it.
Gamifying Coverage
Continuous Integration: did my tests break?
Coverage reporting: did my code coverage decrease?
Just as continuous integration services notify you when you break your tests, code coverage reporting services notify you when your code coverage decreases.
Code coverage reporting services integrate into your continuous integration testing services (if you're already writing automated tests and using CI).
Code Coverage Reporting
Coveralls : popular and widely used
Codecov : supports branch coverage and partial line coverage
Coveralls is the current big fish in this space. As far as I know, they were the first SaaS code coverage product. Codecov is the new kid on the block.
Unlike Coveralls, Codecov supports both branch coverage and statement coverage. I found Codecov last year while looking for a solution to Coveralls' lacking support for branch coverage.
Both are free for open source projects. For private repositories, Coveralls is $5 per repo and Codecov is $10 per repo.
The wonderful folks at Codecov have provided me with a coupon code which gives you one month of free access for all your private repositories.
The coupon code is the same my Twitter handle (which is my name), You'll see my handle again at the end of this talk.


{% extends 'Blog/article_list.html' %} {% load corkran_tags %} {% block title %}{{ author }}'s Articles{% endblock %} {% block description %}{{ author }} has written {{ article_count }} {{ 'article'|pluralise:article_count }}, as of yet.{% endblock %} {% block search-dialogue %} articles by {{ author }}{% endblock %} {% block header_card %}


--- layout: default title: Sugar Framework permalink: / ---
Watch our video walkthrough
tl;dr
# Create your new project
mix new your_project
cd your_project
# Add '{:sugar, "~> 0.4.9"}'
# to your deps
vi mix.exs
# Get dependencies and compile them
mix do deps.get, deps.compile
# Add your Sugar files
mix sugar.init
# Start your server
iex -S mix
iex(1)> YourProject.Router.run
For an in-depth look at working with Sugar, head over to our Getting Started section, where we walk through the process of creating an application with Sugar from the start.
OUR STORY
Why build this when Dynamo, Weber, and Phoenix exist with growing communities? While both projects are great in their own right, Sugar aims to be another contender, sparking more development on all three projects (and/or others that may follow) and giving developers another option when deciding what framework fits their needs best. Sugar may even strive to shake things up just as ChicagoBoss has done.
Fork us
Tweet us
Email us


class: center, middle, inverse, title-slide # Lectures 25–26 ## Structural Models of Utility Maximization ### Tyler Ransom ### ECON 5253, University of Oklahoma --- # Today's plan 1. Describe static discrete choice models 2. How do they fit in with other data science models we've talked about in this class? 3. Derive logit/probit probabilities from intermediate microeconomic theory 4. Go through examples of how to estimate 5. How discrete choice models relate to sample selection bias Note: These slides are based on the introductory lecture of a PhD course taught at Duke University by Peter Arcidiacono, and are used with permission. That course is based on Kenneth Train's book *Discrete Choice Methods with Simulation*, which is freely available [here](https://eml.berkeley.edu/books/train1201.pdf) (PDF) --- # What are discrete choice models? - Discrete choice models are one of the workhorses of structural economics - Deeply tied to economic theory: - utility maximization - revealed preference - Used to model "utility" (broadly defined), for example: - consumer product purchase decisions - firm market entry decisions - investment decisions --- # Why use discrete choice models? - Provides link between human optimization behavior and economic theory - Parameters of these models map directly to economic theory - Parameter values can quantify a particular policy - Can be used to form counterfactual predictions (e.g. by adjusting certain parameter values) - Allows a research to quantify "tastes" --- # Why **not** use discrete choice models? - They're not the best predictive models - Trade-off between out-of-sample prediction and counterfactual prediction - You don't want to form counterfactual predictions, you just want to be able to predict handwritten digits - You aren't interested in economic theory - The math really scares you - You don't like making assumptions - e.g. that decision-makers are rational --- # Example of a discrete choice model - Cities in the Bay Area are interested in how the introduction of rideshare services will impact ridership on Bay Area Rapid Transit (BART) - Questions that cities need to know the answers to: - Is rideshare a substitute for public transit or a complement? - How inelastic is demand for BART? Should fares be `\(\uparrow\)` or `\(\downarrow\)`? - Should BART services be scaled up to compete with rideshares? - Will the influx of rideshare vehicles increase traffic congestion / pollution? - Each of these questions requires making a counterfactual prediction - In particular, need a way to make such a prediction clearly and confidently --- # Properties of discrete choice models 1. Agents choose from among a .hi[finite] set of alternatives (called the *choice set*) 2. Alternatives in choice set are .hi[mutually exclusive] 3. Choice set is .hi[exhaustive] --- # Example illustrating these properties - In San Francisco, people can commute to work by the following (and *only* the following) methods: - Drive a personal vehicle (incl. motorcycle) - Carpool in a personal vehicle - Use taxi/rideshare service (incl. Uber, Lyft, UberPool, LyftLine, etc.) - BART (bus, train, or both) - Bicycle - Walk --- # Mathematically representing utility Let `\(d_i\)` indicate the choice individual (or decision-maker) `\(i\)` makes where `\(d_i\in\{1,\cdots, J\}\)` Individuals choose `\(d\)` to maximize their utility, `\(U\)` `\(U\)` generally is written as: `\begin{align*} U_{ij}&=u_{ij}+\varepsilon_{ij} \end{align*}` where: 1. `\(u_{ij}\)` relates observed factors to the utility individual `\(i\)` receives from choosing option `\(j\)` 2. `\(\varepsilon_{ij}\)` are unobserved to the researcher but observed to the individual 3. `\(d_{ij}=1\)` if `\(u_{ij}+\varepsilon_{ij}>u_{ij'}+\varepsilon_{ij'}\)` for all `\(j'\neq j\)` --- # Breakdown of the assumptions - Examples of what's in `\(\varepsilon\)` - Person's mental state when making the decision - Choices of friends or relatives (maybe, depends on the data) - `\(\vdots\)` - Anything else about the person that is not in our data - Reasonable to assume additive separability? - This is a big assumption: that there are no interactive effects between unobservable and observable factors - This results in linear separation regions and may be too restrictive - For now, go with it, and remember that there are no free lunches --- # Probabilistic choice With the `\(\varepsilon\)`'s unobserved, we must consider choices as probabilistic instead of certain The Probability that `\(i\)` chooses alternative `\(j\)` is: `\begin{align*} P_{ij}&=\Pr(u_{ij}+\varepsilon_{ij}>u_{ij'}+\varepsilon_{ij'} \,\,\forall\,\, j'\neq j)\\ &=\Pr(\varepsilon_{ij'}-\varepsilon_{ij}<u_{ij}-u_{ij'} \,\,\forall\,\, j'\neq j)\\ &=\int_{\varepsilon}I(\varepsilon_{ij'}-\varepsilon_{ij}<u_{ij}-u_{ij'} \,\,\forall\,\, j'\neq j)f(\varepsilon)d\varepsilon \end{align*}` --- # Transformations of utility Note that, regardless of what distributional assumptions are made on the `\(\varepsilon\)`'s, the probability of choosing a particular option does not change when we: 1. Add a constant to the utility of all options (utility is relative to one of the options, only differences in utility matter) 2. Multiply by a positive number (need to scale something, generally the variance of the `\(\varepsilon\)`'s) This is just like in consumer choice theory: utility is ordinal, and so is invariant to the above two transformations --- # Variables Suppose we have: `\begin{align*} u_{i1}&=\alpha Male_i+\beta_1 X_i + \gamma Z_1\\ u_{i2}&=\alpha Male_i+\beta_2 X_i+\gamma Z_2 \end{align*}` Since only differences in utility matter: `\begin{align*} u_{i1}-u_{i2}&=(\beta_1-\beta_2)X_i+\gamma (Z_1-Z_2) \end{align*}` - Thus, we cannot tell whether men are happier than women, but can tell whether men have a preference for a particular option over another - We can only obtain .hi[differenced] coefficient estimates on `\(X\)`'s, and can obtain an estimate of a coefficient that is constant across choices only if the variable it is multiplying varies by choice --- # Number of error terms Similar to socio-demographic characteristics, there are restrictions on the number of error terms Recall that he probability `\(i\)` will choose `\(j\)` is given by: `\begin{align*} P_{ij}&=\Pr(u_{ij}+\varepsilon_{ij}>u_{ij'}+\varepsilon_{ij'} \,\,\forall\,\, j'\neq j)\\ &=\Pr(\varepsilon_{ij'}-\varepsilon_{ij}<u_{ij}-u_{ij'} \,\,\forall\,\, j'\neq j)\\ &=\int_{\varepsilon}I(\varepsilon_{ij'}-\varepsilon_{ij}<u_{ij}-u_{ij'} \,\,\forall\,\, j'\neq j)f(\varepsilon)d\varepsilon \end{align*}` where the integral is `\(J\)`-dimensional --- # Number of error terms (cont'd) But we can rewrite the last line as `\(J-1\)` dimensional integral over the differenced `\(\varepsilon\)`'s: `\begin{align*} P_{ij}&=\int_{\tilde{\varepsilon}}I(\tilde{\varepsilon}_{ij'}<\tilde{u}_{ij'} \,\,\forall\,\, j'\neq j)g(\tilde{\varepsilon})d\tilde{\varepsilon} \end{align*}` Note that this means one dimension of `\(f(\varepsilon)\)` is not identified and must therefore be normalized --- # Derivation of Logit Probability Consider the case when the choice set is `\(\{1,2\}\)`. The Type 1 extreme value cdf for `\(\varepsilon_2\)` is: `\begin{align*} F(\varepsilon_2)=e^{-e^{(-\varepsilon_2)}} \end{align*}` To get the probability of choosing `\(1\)`, substitute in for `\(\varepsilon_2\)` with `\(\varepsilon_1+u_1-u_2\)`: `\begin{align*} Pr(d_1=1|\varepsilon_1)=e^{-e^{-(\varepsilon_1+u_1-u_2)}} \end{align*}` But `\(\varepsilon_1\)` is unobserved so we need to integrate it out (see Appendix to these slides if you want the math steps) --- # Derivation of Logit Probability In the end, we can show that, for any model where there are two choice alternatives and `\(\varepsilon\)` is drawn from the Type 1 extreme value distribution, `\begin{align*} P_{i1}=\frac{\exp(u_{i1}-u_{i2})}{1+\exp(u_{i1}-u_{i2})},P_{i2}=\frac{1}{1+\exp(u_{i1}-u_{i2})} \end{align*}` Suppose we have a data set with `\(N\)` observations. The log likelihood function we maximize is then: `\begin{align*} \ell(\beta,\gamma)=\sum_{i=1}^N(d_{i1}=1)(u_{i1}-u_{i2})-\ln\left(1+\exp(u_{i1}-u_{i2})\right) \end{align*}` --- # Derivation of Probit Probability In the probit model, we assume that `\(\varepsilon\)` is Normally distributed. So for a binary choice we have: `\begin{align*} P_{i1}=\Phi\left(u_{i1}-u_{i2}\right),P_{i2}=1-\Phi\left(u_{i1}-u_{i2}\right) \end{align*}` where `\(\Phi\left(\cdot\right)\)` is the standard normal cdf The log likelihood function we maximize is then: `\begin{align*} \ell(\beta,\gamma)=\sum_{i=1}^N(d_{i1}=1)\ln\left(\Phi\left(u_{i1}-u_{i2}\right)\right)+(d_{i2}=1)\ln\left(1-\Phi\left(u_{i1}-u_{i2}\right)\right) \end{align*}` --- # Pros & Cons of Logit & Probit Logit model: - Has a much simpler objective function - Is by far most popular - ... but has more restrictive assumptions about how people substitute choices - (this is known as the Independence of Irrelevant Alternatives or IIA assumption) Probit model: - Much more difficult to estimate - ... but can accommodate more realistic choice patterns --- # Estimation in `R` The R function `glm` is the easiest way to estimate a binomial logit or probit model: ```r library(tidyverse) library(magrittr) library(mlogit) data(Heating) # load data on residential heating choice in CA levels(Heating$depvar) <- c("gas","gas","elec","elec","elec") estim <- glm(depvar ~ income+agehed+rooms+region, family=binomial(link='logit'),data=Heating) estim %>% summary %>% print ``` --- # Interpreting the coefficients Estimated coefficients using the code in the previous slide: ```r Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -0.599142 0.252032 -2.377 0.0174 * income 0.015579 0.027905 0.558 0.5766 agehed -0.006535 0.003342 -1.955 0.0505 . rooms 0.024291 0.026916 0.902 0.3668 regionscostl -0.053096 0.126665 -0.419 0.6751 regionmountn 0.041827 0.169787 0.246 0.8054 regionncostl -0.219136 0.137692 -1.591 0.1115 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ``` --- # Interpreting the coefficients - Positive coefficients `\(\Rightarrow\)` household more likely to choose the non-baseline alternative (in this case: electric) - Whatever the first `level` of the factor dependent variable is will be the "baseline" alternative - Negative coefficients imply the reverse - Coefficients .hi[not] linked to changes in probability of choosing the alternative (since probability is a nonlinear function of `\(X\)`) --- # Forming predictions To get predicted probabilities for each observation in the data: ```r Heating %<>% mutate(predLogit = predict(estim, newdata = Heating, type = "response")) Heating %>% `$`(predLogit) %>% summary %>% print ``` --- # Estimating a probit model For the probit model, we repeat the same code, except change the "link" function from "logit" to "probit" ```r estim2 <- glm(depvar ~ income+agehed+rooms+region, family=binomial(link='probit'),data=Heating)) estim2 %>% summary %>% print Heating %<>% mutate(predProbit = predict(estim2, newdata = Heating, type = "response")) Heating %>% `$`(predProbit) %>% summary %>% print ``` --- # A simple counterfactual simulation - We talked a lot about doing counterfactual comparisons, but how do we *actually* do it? - Let's show how to do this on a previous example. Suppose that we introduce a policy that makes richer people more likely to use electric heating. - Mathematically, what does this look like? - It would correspond to an increase in the parameter in front of *income* in our regression --- # A simple counterfactual simulation - Suppose the coefficient increased by a factor of 4. What is the new share of gas vs. electricity usage? ```r estim$coefficients["income"] <- 4*estim$coefficients["income"] Heating %<>% mutate(predLogitCfl = predict(estim, newdata = Heating, type = "response")) Heating %>% `$`(predLogitCfl) %>% summary %>% print ``` This policy would increase electric usage by 7 percentage points (from 22\% to 29\%) --- # Discrete choice models and sample selection bias - Discrete choice models are common tools used to evaluate sample selection bias - Why? Because variables that are MNAR can be thought of as following a utility-maximizing process - Examples: - Suppose you want to know what the returns to schooling are, but you only observe wages for those who currently hold jobs - As a result, your estimate of the returns to schooling might be invalidated by the non-randomness of the sample of people who are currently working - How to get around this? Use a discrete choice model (This was the problem we ran into in PS7, if you recall) --- # Heckman selection correction The Heckman selection model specifies two equations: `\begin{align*} u_{i}&= \beta x_{i} + \nu_{i} \\ y_{i} &= \gamma z_{i} + \varepsilon_{i} \end{align*}` - The first equation is a utility maximization problem, determining if the person is in the labor force. Can think of `\(\nu_{i}\)` as "desire to work" - `\(x_{i}\)` may include: number of children in the household - The second equation is the log wage equation, where `\(y_i\)` is only observed for people who are in the labor force - To solve the model, one needs to use the so-called "Heckit" model, which involves adding a correction term in the wage equation which accounts for the fact that workers are not randomly selected --- # Estimating Heckman selection in `R` `R` has a package called `sampleSelection` which incorporates the Heckman selection model .footnote[ [1] This code taken from Garrett Glasgow's [website]( {http://www.polsci.ucsb.edu/faculty/glasgow/ps207/ps207_class6.r) ] ```r library(modelsummary) library(sampleSelection) data('Mroz87') Mroz87$kids <- (Mroz87$kids5 + Mroz87$kids618) > 0 # Comparison of linear regression and selection model outcome1 <- lm(wage ~ exper, data = Mroz87) summary(outcome1) selection1 <- selection(selection = lfp ~ age + I(age^2) + faminc + kids + educ, outcome = wage ~ exper, data = Mroz87, method = '2step') summary(selection1) ``` --- # Estimation output Output from a regression of wage on experience: ```r Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 0.991989 0.065674 15.105 < 2e-16 *** exper 0.015201 0.004287 3.546 0.000434 *** --- ``` Output from the Heckman selection model: (edited for length) .scroll-box-8[ ```r Probit selection equation: Estimate Std. Error t value Pr(>|t|) (Intercept) -4.157e+00 1.402e+00 -2.965 0.003126 ** kidsTRUE -4.490e-01 1.309e-01 -3.430 0.000638 *** Outcome equation: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.775794 0.181695 9.773 < 2e-16 *** exper 0.016899 0.004478 3.774 0.000174 *** Multiple R-Squared:0.1257, Adjusted R-Squared:0.1216 Error terms: Estimate Std. Error t value Pr(>|t|) invMillsRatio -1.2270 0.2504 -4.901 1.17e-06 *** sigma 1.1480 NA NA NA rho -1.0688 NA NA NA ``` ] --- # Reading the output - Because there are two equations, there are now more parameters - Using just the regression on workers led us to believe the returns to experience were `\(\approx 1.5%\)` - Taking into account the selectivity of labor force participants leads us to conclude the returns to experience are slightly higher, `\(\approx 1.7%\)` - Viability of the model depends on the assumption that's made: in this case, that having children only affects labor supply preferences and doesn't affect wages - Wage discrimination against mothers in the labor market would invalidate this - Back to the idea that to get causal inference we have to impose more assumptions --- # The optimal stopping problem - Much of life is concerned with knowing when to stop: - How many people to date before making/accepting a marriage proposal - How much to study for upcoming exams - How long to "hodl" an asset - All of the above cases involve forming expectations about: 1. The long-run value of making a particular choice 2. ... relative to the long-run value of alternatives - Expectations about the future imply that we need to think "dynamically" (i.e. think over the longterm) - Today we'll go through the math on how to do this --- # Relation to reinforcement learning - Reinforcement learning is based on the optimal stopping problem - At each state `\(X\)` (e.g. game board configuration), observe reward `\(y\)` (e.g. win probability) - In each period (i.e. gameplay turn), choose the decision that maximizes the (present value) expected reward - With structural models, "reward" is utility --- # Dynamic discrete choice models With .hi[dynamic] models, need a way to quantify present value of utility Individual `\(i\)`'s .hi[flow utility] for option `\(j\)` at time `\(t\)` is: `\begin{align*} U_{ijt}&=u_{ijt}+\varepsilon_{ijt}\\ &=X_{it}\alpha_j+\varepsilon_{ijt} \end{align*}` --- # Dynamic discrete choice models Individual chooses `\(d_{it}\)` to maximize .hi[expected lifetime utility] `\begin{align*} \max_{d_{it}} V &= \mathbb{E}\left\{\sum_{\tau=t}^T\sum_j\beta^{\tau-t}(d_{it}=j)U_{ijt}\right\} \end{align*}` where - `\(V\)` is the .hi[value function] - `\(\beta\in\left(0,1\right)\)` is the .hi[discount factor] - `\(T\)` is the .hi[time horizon] --- # Expectations - Expectations taken over future states `\(X\)` .hi[and] errors `\(\varepsilon\)` - `\(\varepsilon\)`'s are iid over time - Future states are not affected by `\(\varepsilon\)`'s except through current and past choices: `\begin{align*} \mathbb{E}\left(X_{t+1}|d_t,...,d_1,\varepsilon_t,...,\varepsilon_{1}\right)&=\mathbb{E}\left(X_{t+1}|d_t,...,d_1\right) \end{align*}` --- # Human behavior vs. reinforcement learning - In reinforcement learning, we don't have `\(\varepsilon\)`, unless we allow for "curiosity" - Transitions in `\(X\)` much more dominant factor (e.g. if I move here, opponent will move there, ...) - Real-life example of uncertainty in `\(\varepsilon\)`'s: - "My significant other might take a job in another city next year, so if I want to move with him/her, I may not want to take this job offer today. - Real-life example of uncertainty in `\(X\)`'s: - "I might get laid off next year, which will influence my ability to pay off my car loan, so I might want not want to buy this Mercedes today, since my (expected) permanent income might be lower than my current income." --- # Dynamic programming & the Bellman equation - The value function `\(V\)` is the optimization problem - It's helpful to write the value function as a recursive expression, where we separate out today's decision from all future decisions (this is called the *Bellman equation*, or the *dynamic programming problem*) - The payoff from choosing `\(j\)` today is the *flow utility* `\(= u_{ijt}\)` above - The payoff from choosing alternative `\(j\)` in the future is the expected future utility conditional on choosing `\(j\)` today How do we solve the Bellman equation? - Requires solving backwards, just like in a dynamic game (cf. subgame perfect Nash equilibrium) --- # Two Period Example Consider the utility of choice `\(j\)` in the last period: `\begin{align*} U_{ijT}&=u_{ijT}+\varepsilon_{ijT}\\ &=X_{iT}\alpha_j+\varepsilon_{ijT} \end{align*}` Define the .hi[conditional valuation function] for choice `\(j\)` as the flow utility of `\(j\)` minus the associated `\(\varepsilon\)` plus the expected value of future utility conditional on `\(j\)`: `\begin{align*} v_{ijT-1}&=u_{ijT-1}+\beta \mathbb{E}\max_{k\in J}\left\{u_{ikT}+\varepsilon_{ikT}|d_{iT-1}=j\right\} \end{align*}` where `\(\beta\)` is the discount factor Suppose `\(X_{iT}\)` was deterministic given `\(X_{iT-1}\)` and `\(d_{T-1}\)` and the `\(\varepsilon\)`'s are Type 1 extreme value. What would the `\(\mathbb{E}\max\)` expression be? `\(\left[\ln\sum_{k}\exp\left(u_{ikT}\right)\right]\)` --- # Two Period Example (cont'd) For `\(J=2\)` the log likelihood would then look like: `\begin{align*} L(\alpha)=\sum_{i=1}^N\sum_{t=1}^T(d_{i1t}=1)(v_{i1t}-v_{i2t})-\ln\left(1+\exp(v_{i1t}-v_{i2t})\right) \end{align*}` where `\begin{align*} v_{ijt}=u_{ijt}+\beta \mathbb{E}\max_{k\in J}\left\{v_{ikt+1}+\varepsilon_{ikt+1}|d_{it}=j\right\} \end{align*}` and where `\begin{align*} u_{ijt}=X_{it}\alpha_{j} \end{align*}` Note: if `\(T=2\)` then `\(v_{ikt+1} = u_{ikT}\)` --- # Estimating a dynamic discrete choice model in `R` - Because we have to loop backwards through time, we can't simply use `lm()` - Requires us to write a custom likelihood function - This is because the flow utility parameters ($\alpha_j$) appear in the flow utility function in .hi[each] period - Side note: We don't typically estimate the discount factor ($\beta$) but instead assume a fixed value (most common: 0.90 or 0.95) - To do this, write down an objective function (i.e. log likelihood function) and use `nloptr` to estimate the `\(\alpha\)`'s --- # Counterfactuals - Once you have the `\(\alpha\)`'s you can do counterfactual simulations - These simulations are likely to be more realistic because the model has incorporated forward-looking behavior --- # Objective function and estimation .scroll-box-18[ ```r objfun <- function(alpha,Choice,age) { J <- 2 a <- alpha[3]*(1-diag(J)) u1 <- matrix(0, N, T) u2 <- matrix(0, N, T) for (t in 1:T) { u1[ ,t] <- 0*age[ ,t] u2[ ,t] <- alpha[1] + alpha[2]*age[ ,t] } Like <- 0 for (t in T:1) { for (j in 1:J) { # Generate FV dem <- exp(u1[ ,t] + a[1,j]+fv[ ,1,t+1])+ exp(u2[ ,t] + a[2,j]+fv[ ,2,t+1]) fv[ ,j,t] <- beta*(log(dem)-digamma(1)) p1 <- exp(u1[ ,t] + a[1,j] + fv[ ,1,t+1])/dem p2 <- exp(u2[ ,t] + a[2,j] + fv[ ,2,t+1])/dem Like <- Like - (LY[ ,t]==j)*((Choice[ ,t]==1)*log(p1)+(Choice[ ,2]==2)*log(p2)) } } return ( sum(Like) ) } ## initial values theta0 <- runif(3) #start at uniform random numbers equal to number of coefficients ## Algorithm parameters options <- list("algorithm"="NLOPT_LN_NELDERMEAD","xtol_rel"=1.0e-6,"maxeval"=1e4) ## Optimize! result <- nloptr( x0=theta0,eval_f=objfun,opts=options,Choice=Choice,age=age) print(result) ``` ] --- # Derivation of Logit Probability `\begin{align*} Pr(d_1=1)&=\int_{-\infty}^{\infty}\left(e^{-e^{-(\varepsilon_1+u_1-u_2)}}\right)f(\varepsilon_1)d\varepsilon_1\\ &=\int_{-\infty}^{\infty}\left(e^{-e^{-(\varepsilon_1+u_1-u_2)}}\right)e^{-\varepsilon_1}e^{-e^{-\varepsilon_1}}d\varepsilon_1\\ &=\int_{-\infty}^{\infty}\exp\left(-e^{-\varepsilon_1}-e^{-(\varepsilon_1+u_1-u_2)}\right)e^{-\varepsilon_1}d\varepsilon_1\\ &=\int_{-\infty}^{\infty}\exp\left(-e^{-\varepsilon_1}\left[1+e^{u_2-u_1}\right]\right)e^{-\varepsilon_1}d\varepsilon_1 \end{align*}` --- # Derivation of Logit Probability Now need to do the substitution rule where `\(t=\exp(-\varepsilon_1)\)` and `\(dt=-\exp(-\varepsilon_1)d\varepsilon_1\)` Note that we need to do the same transformation of the bounds as we do to `\(\varepsilon_1\)` to get `\(t\)`. Namely, `\(\exp(-\infty)=0\)` and `\(\exp(\infty)=\infty\)` --- # Derivation of Logit Probability Substituting in then yields: `\begin{align*} Pr(d_1=1)&=\int_{\infty}^0\exp\left(-t\left[1+e^{(u_2-u_1)}\right]\right)(-dt)\\ &=\int_0^{\infty}\exp\left(-t\left[1+e^{(u_2-u_1)}\right]\right)dt\\ &=\begin{array}{c|}\frac{\exp\left(-t\left[1+e^{(u_2-u_1)}\right]\right)}{-\left[1+e^{(u_2-u_1)}\right]}\end{array}^{\infty}_{0}\\ &=0-\frac{1}{-\left[1+e^{(u_2-u_1)}\right]}=\frac{\exp(u_1)}{\exp(u_1)+\exp(u_2)} \end{align*}`


Local Installation
本地安装
The Local installation type is recommended if you plan to install the OSSEC HIDS on only one system, such as a personal laptop, workstation, or single server.
如果你计划将OSSEC HIDS 安装到单个系统中、例如个人电脑、工作站、或者单个服务器中，那么这种方式是推荐的安装方式
However, if you are administering a network where you have more than one system to secure and monitor, you should consider using the Agent/Server Installation types.
但是，如果你需要管理的网络中有多余1个的系统需要监控保证其安全。那么我们还是推荐你选择客户端/服务器这种安装方式
A Local installation is easier to manage and can be customized for the system on which it is installed.
本地安装这种方式便于管理与(被安装的)系统定制
This installation also combines all the functionality of the OSSEC HIDS software, including agent and server functionality, on one system (Figure 1.9).

本地化安装的唯一不好的地方就是当你安装后你又想把你的警告信息发送到OSSEC服务器上的时候会遇到一些麻烦
To do so, you will have to uninstall the Local installation and run an Agent installation.
如果你必须要这么做的化，那么你必须把本地化安装卸载了之后然后在重新已客户端的方式安装才行


Role: Graphic Designer | Researcher | Interviewer
Team Size: 4 Date: 2016/9-2016/12
Category: Experience DesignContextual Inquiry Consulting
With a collection of over 20,000 artworks including pieces from Picasso and Monet,the University of Michigan Museum of Art (UMMA) is one of the leading university art museums in US. Their mission is "to transform individual and civic life by promoting the discovery, contemplation, and enjoyment of the art of our world”
However, with the lack of formal visitor service staff, they felt that current onsite experience isn’t leaving impressions that matches the Museum’s mission and goal.
UMMA wants our team to identify their current problem in retaining visitors and find ways to improve their onsite experience to increase visitor return.
To better navigate the problem space we used the following tools to understand the complex problem at UMMA and ideate for solutions
We took turn interviewing the employee at their work place to gain insights of their job and how it might influence the museum as a whole. Most interviews were conducted at their work space so that we can derive interview question onsite.
We use affinity wall to make sense of all the data we gathered through interview. Small intepretation sessions were hold within an 24 hours after the interview. After all interviews were done we also build a synthesized affinity wall to put identify problems expressed by multiple interviewees
We spent time sitting at the museum lobby to observe visitor behavior and take notes on their actions. I also invited friends who have never visited the museum to explore the museum and followed them to take notes of how they navigate
Each team member chose an area related to our client’s problem and did background research and literature review on it. Mine focused on psychographic of museum visitors, visitor expectations, and case study on good practices.
Through affinity wall, we found out that many interviewees expressed frustration about the museum's current map and signage system.
"The map is crap"
"One of the most common question at the store is where is the restroom"
"We are trying to change the signage system, they are inconsistent throughout the museum"
Which leads us to host observation session by inviting friends that never visited the museum to navigate it. During the session, I noticed that my friends and other visitors all had problems getting to the 2nd floor of the building and finding artworks that attracted them to visit the museum.
"Where can I find the Monet painting you mentioned?"
After analyzing the data from interviews and observation session, we found out that these are the reasons why UMMA is hard to navigate for first time visitors.
During interviews with employees, we noticed that one major concern for UMMA is that lots of students don't even know its existence. Visitors also lack general information about the museum, such as what artwork it has, what events there are, or even the gallery hours.
The most prominent problem is that UMMA over relied on website for orienting their visitor and neglected on-site materials, even though lots of visitor don't even go to their website before visiting. For example, UMMA offers free tours on Sunday, however, the only way to know it onsite is a sign placed at the information desk only on Sunday.
Meanwhile, the website is also not executed in a visitor friendly way.
Most department lack effective way to collect visitor feedback.
Curators are unsure of the implementation in technology for UMMA.


The fields present are:
Name is the name by which the ACL can be identified. When creating a Proxy Restriction this is the name used to define what is being restricted.
Type is the type of information that the ACL is to be matched against.
Matching.. is the address, port, URL, user, etc. that the ACL will be matching to.
Proxy restrictions: Proxy restrictions are rules that either allow or deny a given request based on whether its ACL matches the specifics of the reuqest. There are three fields in this box.
Action is either allow or deny.
ACLs are the ACLs that will be matched against to decide whether the request is allowed or denied. If prepended by an exclamation point the ACL will be negated, in other words everything except members of that ACL will be allowed or denied.
Move allows the order of restrictions in the list. The order in which they appear is important, because Squid only reads the list until it has found the first match.
ICP restrictions: This box is for restricting ICP requests. ICP requests are requests from other neighbor caches. This section work the same as Proxy restrictions.


|
Bomberman
1.0
Re-make of Bomberman game
|
The class to hold current game state. More...
#include <Game.hpp>
Public Member Functions | |
| Game () | |
| ~Game () | |
| void | start () |
| Starts the game loop. More... | |
| void | pause () |
| Pauses the game and opens main menu. More... | |
| void | saveCurrentState (std::string fileName="ConfigureFile") |
| Serializing current game state as means of saving game progress. More... | |
| void | loadStateFromFile (std::string fileName="ConfigureFile") |
| Deserializing current game state from file. More... | |
| void | applyWindowChange () |
| Propagate window resolution change for whom this is useful. More... | |
| void | stageFinished () |
| Called on player's winning the stage. Makes a transition to next level. More... | |
| void | onHeroDied () |
| Called on player's death. Plays death animation and cleans-up the level. More... | |
| void | gameOver () |
| Called on player's losing all his lives. You start from scratch. More... | |
| void | requestExit () |
| Called when someone wants to exit the game or when something went wrong. More... | |
| void | doAction (Action) |
| Called from input manager when something important happens. More... | |
| void | explosion (glm::ivec2 position, uint32_t span) |
| Utility function for triggering explosion from bombs. More... | |
| Game (Game const &)=delete | |
| Game & | operator= (Game const &)=delete |
| void | addEnemiesOnMap () |
| Called at map creation. Populates map with enemies. More... | |
| std::vector< glm::mat4 > | getWallTransforms () |
| Transforms of all walls. Useful for rendering. More... | |
| std::vector< glm::mat4 > | getBrickTransforms () |
| Transforms of all bricks(destructible walls). Useful for rendering. More... | |
| std::vector< glm::mat4 > | getBombTransforms () |
| Transforms of all bombs. Useful for rendering. More... | |
| glm::mat4 | getPowerupTransform () |
| Transform of powerup on map. Useful for rendering. More... | |
| glm::mat4 | getExitTransform () |
| Transform of exit on map. Useful for rendering. More... | |
| std::vector< MovingEntity * > & | getEnemies () |
| All of the enemies. More... | |
| Hero & | getHero () |
| Hero reference. More... | |
| Hero::PowerupType | powerupTypeOnMap () |
| Type of powerup on current map. More... | |
| bool | isExitActive () |
| Tells whether Hero can proceed to next stage. More... | |
| void | extractInfo () |
| Called after map is desirialized. Extracts info from the map. More... | |
| void | plantBomb (glm::vec2 position, int strength) |
| Creates a new bomb and places it on map. More... | |
| void | tickAI (float deltaTime) |
| Updates all AI Controllers. More... | |
Static Public Member Functions | |
| static Game * | get () |
| Gives the instance of Game. More... | |
| static float | getCurrentTime () |
| Returns current time in seconds. More... | |
| static CollisionInfo & | getCollisionInfo () |
| Returns reference to collision info for current map. More... | |
Static Public Attributes | |
| static bool | mReloadStage = true |
| Utility variable. More... | |
| static float | mStageTimer = 200 |
| Utility variable. More... | |
| static float | mStageStartedTimer = 0 |
| Utility variable. More... | |
| static bool | mIsRunning = true |
| Is the game running? More... | |
| static float | mDeltaTime |
| How much time passed during last frame. More... | |
Friends | |
| class | Renderer |
The class to hold current game state.
It holds info about enemies, hero, map, time, collision.
| Game::Game | ( | ) |
| Game::~Game | ( | ) |
|
delete |
| void Game::addEnemiesOnMap | ( | ) |
Called at map creation. Populates map with enemies.
| void Game::applyWindowChange | ( | ) |
Propagate window resolution change for whom this is useful.
| void Game::doAction | ( | Action | a | ) |
Called from input manager when something important happens.
| void Game::explosion | ( | glm::ivec2 | position, |
| uint32_t | span | ||
| ) |
Utility function for triggering explosion from bombs.
Handles all the edge-cases (bombs triggering other bombs, walls, bricks).
| [in] | position | Center of the explosion. |
| [in] | span | How much ground does this explosion covers. |
| void Game::extractInfo | ( | ) |
Called after map is desirialized. Extracts info from the map.
Reading the position of exit and powerup on current map.
| void Game::gameOver | ( | ) |
Called on player's losing all his lives. You start from scratch.
|
static |
| std::vector< glm::mat4 > Game::getBombTransforms | ( | ) |
Transforms of all bombs. Useful for rendering.
| std::vector< glm::mat4 > Game::getBrickTransforms | ( | ) |
Transforms of all bricks(destructible walls). Useful for rendering.
|
static |
Returns reference to collision info for current map.
|
static |
Returns current time in seconds.
| std::vector< MovingEntity * > & Game::getEnemies | ( | ) |
All of the enemies.
| glm::mat4 Game::getExitTransform | ( | ) |
Transform of exit on map. Useful for rendering.
| glm::mat4 Game::getPowerupTransform | ( | ) |
Transform of powerup on map. Useful for rendering.
| std::vector< glm::mat4 > Game::getWallTransforms | ( | ) |
Transforms of all walls. Useful for rendering.
| bool Game::isExitActive | ( | ) |
Tells whether Hero can proceed to next stage.
Under the hood counts enemies.
| void Game::loadStateFromFile | ( | std::string | fileName = "ConfigureFile" | ) |
Deserializing current game state from file.
| void Game::onHeroDied | ( | ) |
Called on player's death. Plays death animation and cleans-up the level.
| void Game::pause | ( | ) |
Pauses the game and opens main menu.
| void Game::plantBomb | ( | glm::vec2 | position, |
| int | strength | ||
| ) |
Creates a new bomb and places it on map.
| [in] | position | Position of new bomb. |
| [in] | strength | Span of the explosion of new bomb. |
| Hero::PowerupType Game::powerupTypeOnMap | ( | ) |
Type of powerup on current map.
| void Game::requestExit | ( | ) |
Called when someone wants to exit the game or when something went wrong.
| void Game::saveCurrentState | ( | std::string | fileName = "ConfigureFile" | ) |
Serializing current game state as means of saving game progress.
| void Game::stageFinished | ( | ) |
Called on player's winning the stage. Makes a transition to next level.
| void Game::start | ( | ) |
Starts the game loop.
This is where the game happends. This function returns only when the game is exiting.
| void Game::tickAI | ( | float | deltaTime | ) |
Updates all AI Controllers.
| [in] | deltaTime | How much time passed during last frame |
|
friend |
|
static |
How much time passed during last frame.
|
static |
Is the game running?
|
static |
Utility variable.
|
static |
Utility variable.
|
static |
Utility variable.


Coronavirus (COVID-19) cases in Germany, Saxony and Leipzig.
Data provided by RKI (Robert Koch Institute), using the data for corona.rki.de,
same as
https://experience.arcgis.com/experience/478220a4c454480e823b17327b2bf1d4.
The data can be queryed by
ArcGIS REST Services Directory.