An app to help keep track of drinks and raise awareness for alcohol overconsumption.
Andy Shen & Chris Cheung
Background
This winter break, I wanted to work on a personal project in a domain that I didn't have previous experience in ― mobile development. After thinking about an app idea that would be useful to teenagers and young adults, my friend Chris and I decided to create an android app that allows users to keep track of their blood alcohol content (BAC) when they consume alcoholic beverages: DrinkTracker.
Purpose
DrinkTracker's main purpose is to let users, particularly younger adults who don't know their alcohol limits, visualize their current state with each drink they consume. After a user inputs his or her name, weight and gener, he or she can add to their list of drinks everytime an alcoholic beverage is consumed and the BAC level is displayed on the home screen.
Tech Stack
We wrote the majority of the logic for the app using Java, along with a SQLite database for the backend to store the alcohol information. For the front-end and UI, we used XML in Android Studio.
Key Design Decision
One of the biggest decisions we had to make was whether we wanted to write a webscraper to scrape for alcohol information on request when a user adds a drink. This would allow us to retrieve information on any drink in the market, but would require extra processing during runtime. An alternative would be to scrape the web beforehand and dump the data in a database as a one time operation. While the runtime would be faster, this would limit us if there were an alcohol that wasn't available in the database. We decided to implement the latter, scraping the information from http://getdrunknotfat.com/ once and storing the alcohol name and percentage alcohol by volume as a key-value pair so that runtime access would be constant.
Features in the Future
Text entry design for smartwatches.
Andy Shen & Diana Li & Renhao Hu
Background
As the shift to mobile and wearable technologies begins to surface, there is an increasing amount of importance in having a good design for user input. While phone screens may provide enough space for users to type into a keyboard, smartwatches don't have enough space to support a traditional keyboard for users to tap on. We explored this issue by developing an app for touchscreen smartphones to simulate a smartwatch and creating different designs for user input.
This project was an assignment for Designing Human-Centered Software, a HCI course at Carnegie Mellon University that teaches fundamental concepts in designing, prototyping, and evaluating user interfaces.
Requirements
Trial Information
Each trial consisted of two randomly generated sentences pulled from a corpus that we would have to type (similar to typeracer). When we finished typing the first sentence, we hit the next button and enter the second sentence. After we submitted the second sentence, out speed (words per minute) would be outputted with additional penalties for words that were misspelled. The wpm with penalty was what we used to benchmark the speed of each of our prototypes.
Tech Stack
The app was created using Processing, an open source graphical library and IDE built for visual design. It uses the Java language with various simplifications. The apps were then run on android phones.
Starting Point
We were initially given scaffold code that contained a design with the current letter on the top half of the screen and a red button to move backwards a letter and a green button to move forwards a letter. To submit the letter, the user clicks on the current letter.
Some of the biggest observations we made with this design were the simplicity and the number of clicks required to submit a letter. While this design was extremely simple and intuitive, it takes around 13 clicks in order to find each letter in the worst case. Since wpm is correlated with number of clicks, we wanted to create a design that would maintain the simplicity but reduce the number of clicks required to get to each letter.
After testing the scaffold code, we found that we could achieve roughly 2.4 wpm with that design.
Brainstorming
To start off, we began by brainstorming a couple of possible designs we wanted to explore. Some features that we thought we could potentially have in our design included autocompletion suggestions, handwriting recognition, and autocorrecting misspelled words to improve our wpm and decrease our error penalty.
Design 1
Our first idea was to have the keys lined up on the border of the smartwatch and the user would select a letter by sliding their finger towards the edge of the watch at that letter. The delete key would be located at the bottom left of the screen and the space key would be at the bottom right. The user confirms the input by tapping on the middle of the screen. This experimental design was inspired by the fact that we wanted to utilize the entirety of the space that we had available to work with.
Design 2
Our second idea was to have the keys lined up on the left and right edges of the watch. The first 13 letters of the alphabet and the delete key would be on the left side while the last 13 letters and the space key would be on the right. The user would select a letter by sliding their finger towards up and down the side of the watch. The middle of the screen would then contain suggestions for words that the user may be typing. We came up with this concept when we thought about the switches on analog watches and wanted to see if we could incorporate them into our design.
Design 3
Our third idea was closer to a traditional qwerty layout. The keyboard layout is the same as a regular keyboard except the p is moved to the third row because of spacing issues. We then separated the keys into groups of three. When a user taps into one of the three grids, swiping in the direction of the letter will result in that letter being output. For example, if a user taps in the middle grid and swipes up, a t will output. We also moved the space and delete keys to the top of the screen. While this design doesn't bring any drastic changes to the table, we wanted to see how effective a more traditional keyboard layout would do on a smartwatch interface.
Prototyping Process
Once we had our design ideas, we created prototypes and performed user testing on each iteration. In total, we created 5 prototypes. We ended up not implementing the first design because the screen wasn't big enough to fit the number of letters that we drew out in our design. The different prototypes can be seen here:
Testing Results
Takeaways
Researching Rapport-Building AI Personal Assistants
Background
This year, I had the opportunity to join the Articulab, a research group at Carnegie Mellon University that focuses on studying how people communicate with technology. Within the Articulab, I worked as a research intern on the InMind project, researching how we can use the concept of episodic memory to build rapport between humans and AI personal assistants.
Contributions
During my time at the Articulab, I worked on two main tasks. In my first semester, I wrote a literature review on existing works for conversational agents with long term memory. I then designed an episodic memory architecture for conversational agents to store memory episodes using the information I learned from the literature. My second semester was focused on the implementation of an episodic memory component for a personal assistant. For confidentiality reasons, I can't go into detail about specifics of the design or implementation of the component.
Takeaways
This was my first time doing research and I think it was a wonderful experience. I didn't have much experience with topics related to Human-Computer Interaction before joining the Articulab so I wasn't sure what to expect. After doing research, I've become more interested in learning about how humans interact with technology and seeing how technology can further enhance how people live in society.
A spinoff of the retro arcade game Space Invaders
Background
This project was my term project for Fundamentals of Programming, an introductory computer science course at Carnegie Mellon University that teaches fundamental of programming with emphasis on producing clear code using top-down design, informal analysis, and effective testing and debussing.
Tech Stack
I created the game in Python, along with Pygame, a cross-platform set of Python modules that contains computer graphics and sound libraries for Python.
Game Rules
The main objective of the game is to progress through the first four levels by defeating enemies and then beating the boss on the fifth level. The player defeats enemies by shooting bullets at the enemies. If the player gets hit by an enemy or by an enemy bullet, the player loses a life. The game ends once the player has 0 lives left or the player defeats the boss.
Game Features
There are four different types of basic enemies that show up as the player progresses through the game. Each of them have different movement patterns and abilities depending on what type of enemy it is.
Once the player reaches level five, the final boss appears. Depending on the amount of health the boss currently has, it will be in a different mode. The different modes include:
Throughout the duration of the game, powerups may randomly fall from the screen. The two different categories of powers are weapon upgrades and health packs. Weapon upgrades can allow the player to fire multiple bullets or switch weapons to a laser that ignores bullet collision with enemy bullets. Health packs restore one health to the player.
Potential Add-on Features for the Future
Takeaways


We provide routine assessments for compliance of procedures, curriculum, general happiness and the well being of each child.
Our program has a wide variety of experiences to help children learn about themselves and their world around them.
Our curriculum values the need to engage the student in sustained meaningful encounters.
Some of our preschoolers are reading on a kindergarten level.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s.


Deep Learning learns the solutions to problems in a way human brain learns hence could solve any problems
FACEBOOK AI LAB
Facebook launched its Moments product, which uses Facebook’s image recognition abilities to scan your photos for your friends and then lets people create private photo albums with a particular group, such as the people in the photo. The idea is to make it easier to share photos from a big event among attendees without the cumbersome process of emailing snapshots to everyone or the awkward end-of-event huddle while six people take the exact same group shot. It’s not a cure for cancer, but behind the scenes of this new feature is an impressive technology that Facebook has been working on for years.
A key element of the Moments feature is the ability for Facebook’s algorithms to recognize people’s faces across different photos, so that Moments knows who was at the event..
GOOGLE BRAIN, DEEPMIND, DNNRESEARCH
Inceptionism: Going Deeper into Neural Networks
Artificial Neural Networks have spurred remarkable recent progress in image classification and speech recognition. But even though these are very useful tools based on well-known mathematical methods, we actually understand surprisingly little of why certain models work and others don’t. So let’s take a look at some simple techniques for peeking inside these networks.
We train an artificial neural network by showing it millions of training examples and gradually adjusting the network parameters until it gives the classifications we want. The network typically consists of 10-30 stacked layers of artificial neurons. Each image is fed into the input layer, which then talks to the next layer, until eventually the “output” layer is reached. The network’s “answer” comes from this final output layer.
One of the challenges of neural networks is understanding what exactly goes on at each layer. We know that after training, each layer progressively extracts higher and higher-level features of the image, until the final layer essentially makes a decision on what the image shows. For example, the first layer maybe looks for edges or corners. Intermediate layers interpret the basic features to look for overall shapes or components, like a door or a leaf. The final few layers assemble those into complete interpretations—these neurons activate in response to very complex things such as entire buildings or trees.
One way to visualize what goes on is to turn the network upside down and ask it to enhance an input image in such a way as to elicit a particular interpretation. Say you want to know what sort of image would result in “Banana.” Start with an image full of random noise, then gradually tweak the image towards what the neural net considers a banana By itself, that doesn’t work very well, but it does if we impose a prior constraint that the image should have similar statistics to natural images, such as neighboring pixels needing to be correlated.
IBM WATSON RESEARCH
IBM acquires AlchemyAPI to bring deep learning to Watson
AlchemyAPI’s capabilities in the world of natural language processing include entity extraction, sentiment analysis, and language extraction. When it comes to computer vision, it can tag images and detect faces. The startup charges based on how many transactions are conducted through its application programming interface (API).
MICROSOFT RESEARCH
Project Adam, an initiative by Microsoft researchers and engineers, aims to demonstrate that large-scale, commodity distributed systems can train huge deep neural networks effectively. For proof, the researchers created the world’s best photograph classifier, using 14 million images from ImageNet, an image database divided into 22,000 categories.
Included in the vast array of categories are some that pertain to dogs. Project Adam knows dogs. It can identify dogs in images. It can identify kinds of dogs. It can even identify particular breeds, such as whether a corgi is a Pembroke or a Cardigan.
Now, if this all sounds vaguely familiar, that’s because it is—vaguely. A couple of years ago, The New York Times wrote a story about Google using a network of 16,000 computers to teach itself to identify images of cats. That is a difficult task for computers, and it was an impressive achievement.
Project Adam is 50 times faster—and more than twice as accurate, as outlined in a paper currently under academic review. In addition, it is efficient, using 30 times fewer machines, and scalable, areas in which the Google effort fell short.
YAHOO RESEARCH
Yahoo Acquires Startup LookFlow To Work On Flickr And ‘Deep Learning'
LookFlow, a startup that describes itself as “an entirely new way to explore images you love,” just announced that it has been acquired by Yahoo and will be joining the Flickr team.
The company writes on its homepage, “Fret not, LookFlow fans. Keep an eye out for our product in future versions of Flickr — with many more wonderful photos and all that Flickr awesomeness!” It also says it will be helping Yahoo to form a new “deep learning group.”
When I emailed Yahoo for confirmation, a company spokesperson told me, “We have acquired LookFlow, an enhanced image recognition company,” and they pointed me to the aforementioned LookFlow homepage..
BAIDU RESEARCH
Baidu built a supercomputer for deep learning
Chinese search engine company Baidu says it has built the world’s most-accurate computer vision system, dubbed Deep Image, which runs on a supercomputer optimized for deep learning algorithms. Baidu claims a 5.98 percent error rate on the ImageNet object classification benchmark; a team from Google won the 2014 ImageNet competition with a 6.66 percent error rate.
In experiments, humans achieved an estimated error rate of 5.1 percent on the ImageNet dataset.
The star of Deep Image is almost certainly the supercomputer, called Minwa, which Baidu built to house the system. Deep learning researchers have long (well, for the past few years) used GPUs in order to handle the computational intensity of training their models. In fact, the Deep Image research paper cites a study showing that 12 GPUs in a 3-machine cluster can rival the performance of the performance of the 1,000-node CPU cluster behind the famous Google Brain project, on which Baidu Chief Scientist Andrew Ng worked.
TWITTER RESEARCH
Twitter Acquires Artificial Intelligence Startup Whetlab In Machine Learning Push
While acquisitions like this one bring in talent and underlying technology, Twitter should make sure to use its time and energy to focus on improving its user experience and retention,” Jan Rezab, CEO of social media analytics firm Socialbakers, said. “Twitter would do well to create experiences for things like sports, TV, real-time events and to connect these experiences through its central Twitter app.”


Strange Organizations
Below you will find a list of unusual organization found listed
in the Internet.
Where the
organization has a slogan, this is also listed.
The compilers would appreciate any additions.
ARTS
Fat Ballerina League -- "Tutus are Just Too Too"
Foundation for the Study of Kung-Fu Movies -- "Philosophy
for Kicks"
The International Detachment of Smiling Flemenco
Dancers
COMPUTERS
Internet Clarity Foundation --"Yes, there CAN be too much
of a good thing"
The Fraternity for the Preservation of GeekSpeak -- Cyberstuds
Against the
World"
The Conference of Random Database Compliers -- "A Revolting
Development"
CONSERVATIONISTS
National Assn. of Conservationist Parking Lot Owners -- "We
Fight Weeds
with Asphalt"
Society for Packaging of the Great Outdoors --"Pack &
Ship Fresh Air"
FEMALE
The Silent Women of America -- "Mum's the word" (the
smallest membership of any
group on this list)
Women Misogynists of the World --"Why Can't We be All Like
Men?"
The Association to Encourage Women Sperm Donors -- "Banish
Male Elitism"
The Sisterhood of Virgin Hookers --"Just say `I have a
headache!'"
FOOD
The It's Hard to Believe that Anybody Could "Believe it's
Not Butter" Caucus
Save the Salt Miners Campaign to Encourage the Use of More Salt
in Diets --
"Why not ENJOY your food before it's too
late?"
GENERAL
The Memorial Society for the Terminally Tall --"Yes! It's
Nice Up Here!"
National Association of Hermit Barbershop Quartets --"Each
Sings A-part"
The Society to Encourage Non-Elvis Look-alikes -- "There's
no shame in
being unique"
The Band of KFK One-Assassin Believers -- "It was OJ's
practice run!"
HOBBIES
Canine Cat Fanciers -- "A Little Pussy Can't Be All
Bad!"
Toilet Paper Collectors of America (Double-Ply Chapter) --
"In the flush of
history!!"
MILITARY
The Association of Women Military Adulterists -- "Make war,
not love"
The Platoon of Gay Drill Instructors -- "Love those
push-ups"
OCCUPATIONS/CAREERS
Battalion of Disgruntled Postal Employees (A Division of the
NRA) --
"Niether rain nor snow will keep us from our
appointed target"
Cryptographers of the World -- "XVZ1 MBRG 5K9H BJVB
unite!"
The Little Band of Polite Taxi Drivers -- We want to be
fare!"
Retired Disney Animators, Cel 302 (Not Associated with the
Disney World
Take-Over Society) -- "Paint and Acetate: the
Doors to the Real World"
The Johns-Manville Home for Retired Arsonists -- "There's
still a warm spot
in our hearts"
Doctors Against the World -- "If you like it, it will kill
you!"
The Lawyer's Guild for the Simplification of the Law -- You
don't need us"
The Brotherhood of Mute Barbers -- "When we work, you can
hear a hair drop."
Polite Bureaucrats Guild -- "To grovel is novel."
PHILOSOPHICAL
Philosophers Against Reason & Logic -- "What is What --
and Why?"
Why Are We Here Society -- "Because We're Not
There!"
The Chaldean Society for the Worship of Now -- "Reverence
for a time that
can never be."
The Guild of Ungrateful Failures -- "We take pride in the
fact that there
are none lower than us!"
PSYCHOLOGICAL
Paranoiacs United -- "Together for Protection"
Agoraphobic Mall Walkers -- "Tomorrow, the
World!"
The Society for a Fair Census -- "Register Multiple
Personalities"
POLITICAL
Conservative Charities for the Poor -- "Wealth's Debt to
the Poor"
Liberals Against Welfare -- "Starve Them in the
Courts"
Politicians for Truth and Clarity -- "Trust Me"
The Alumni of the Electoral College -- "No fund-raising for
us"
The Washington Chapter of Truthful Politicians (this is the next
smallest group)
RELIGIOUS
Ancient Order of Holy Atheists -- "It's All his
Fault"
Satinists for Cleaner Streets -- "We're Evil, Not
Dirty!"
Coven of Gay Druids -- "Think Pink, Not Blue
Woad!"
Palestinians for a Safer Israel -- "Blow Up Balloons Not
People"
SEXUAL ORIENTATION
The Gay Lesbian Coalition -- "We may be straight, but We
are PC."
Beer & Broads Chapter of the Hair Dressers of America --
"Burp!"

SCIENCE
The Flat Earth Society -- "Build Ocean Walls and Save
Sailor's Lives"
Cloning for Dollars -- "Twice the Fun for Half the
Price"
---------------------------------------------------------------------
Your additions and/or corrections are very welcome!
Lee Daniel Quinn
Email at: words@iop.com


Software Developer and Manager offering twenty years of varied technical experience. Mastery of all major software product development aspects: requirements gathering, specification writing, technical leadership of both in house and remote teams, front and backend development, server operations, and Quality Assurance. Passionate open source contributor. Carbon based lifeform. Startup Junkie.
Javascript, HTML, CSS, SVG, node.js, xstate, constraint solvers, Amazon Web Services (AWS), Snabbdom, OpenGL/WebGL/three.js, deno, Apache, git, Electron, express.js, Babel/Rollup/Grunt/Gulp, Backbone, heroku, Linux, Memcache, MongoDB, MySQL, Nginx, PHP, Redis, RethinkDB, Unity, web3/solidity (Ethereum), ADA WCAG 2.1
At Sellpoints and Syndigo, I'm responsible for doing all of the frontend development of their enhanced content product, which runs as a third party library on almost every customer facing retail website in the world.
I transitioned the entire codebase from es5 to es6 using babel, removed jquery, re-wrote the image and video asset handling pipeline on S3 to improve bandwidth consumption, and enabled a module/nomodule approach to serve es6 to supported browsers. I adopted responsive images, and replaced useragent sniffing with feature detection. I re-wrote many of the experiences to meet ADA wcag 2.1 requirements. I led a large effort to replace font icons with svg everywhere. I also replaced the product's proprietary string concatenation based build system with rollup and adopted es modules. I enabled the usage of advanced javascript features such as async/await, and made it work even in older environments such as ie10 and up.
I also helped the company transition from Sellpoints to Syndigo which involved architecting how to merge several redundant software systems into a unified product.
Beyond specific libraries and frameworks, I've introduced several paradigms that have improved the way software is built. Using linear constraint solving I was able to build some complicated user interfaces that had previously been very difficult to maintain. I also formalized the concept of state machines in several modules, making some of the more complex code sections more robust and maintainable. I've also expanded the product's documentation, adopting a stack overflow style Q-and-A style system in markdown.
I've also handled light management duties concerning a junior developer and several contractors.
Sellpoints was acquired by Syndigo in 2019.
Shipped several web based applications, including a conversational AI agent, and a decentralized geographic land token registry powered by Ethereum. Prototyped an application based on Web Service Workers.
I designed and built the entire software stack that got the company accepted into the Y Combinator program. The backend is built on AWS services (EC2, ELB, Route53, Cloudfront CDN, S3, etc.) and a number of other software packages including Redis, and RethinkDB. Designed and built several iterations of the front end using plain vanilla javascript and no frameworks to produce very minimal, performant web pages. I built and open-sourced several modules on github. I also successfully handled certification of Mosaic products in the Amazon Echo and Nest app stores.
I was responsible for maintaining a web application used by merchant partners. I used javascript, Backbone, Marionette, and heroku while maintaining the existing application. I refactored the code to use a subset of angularjs, which reduced complexity and improved modularity. I also established automated unit tests where there were none before.
I worked with several companies as an independent contractor, doing work within the full software development lifecycle. Collaborated with management to design user experience, write specs, choose technology, write code, and provision the production hosting environment. Built a variety of web applications. Travelled extensively throughout India, Thailand, and Cambodia while working remotely.
Managed 10 developers in the core technology team, which was responsible for all of the search platforms, browser plugins, e-commerce platforms, and reporting platforms that powered the various business lines. As the software architect, I was responsible for designing the components and structure of these products, their interoperability, and the technical strategy for the engineering team in general. As a developer I worked on the company’s toolbar and reporting platforms, working with PHP, Memcache, MySQL, several NoSQL data stores, and Amazon’s Elastic MapReduce service.
Participated in the development of Nokia’s online store. Worked on the API team , which provides an HTTP interface between the backend services and the Nokia series 40/60 devices. The OVI store initiative was eventually scaled back and canceled, but the prototype we developed used PHP5, and Memcache for it’s caching layer. Responsibilities included requirement gathering, developer documentation, unit testing, and implementation. Used a mix of agile, waterfall, and iterative process.
Responsible for the data acquisition platform written in win32 and C# running on an iPAQ PDA. Wrote a web based management system in PHP, MySQL, HTML, CSS, and Javascript. The management tool handles many operational aspects: hiring drivers, payroll, and driver statistics analysis. Also developed a simple GIS application to monitor driver tracks, coverage, and cost. Managed an offshore team of three developers that assisted with development.
Performed exploratory testing, threat modeling, test plan development, test execution, results analysis, and reporting for Microsoft, Compuware, Credit Suisse, and RSA. My other duties included security product research, and the production of e-Learning materials coursework. I took initiative within the internal operations group to transition the company’s knowledge-base into a wiki. I helped maintain the company’s source control system (Subversion) and an internal application server (LAMP stack.)
I was responsible for developing Voice XML applications for various clients. I assisted as a technical writer in documenting the flagship product “Plum Voice Platform”. I helped deploy and maintain a content management system and user forum to establish formal customer support. I occasionally acted as sales engineer. I shared responsibilities of the systems operations department including server monitoring, disaster recovery, internal toolset, development, and software repository maintenance.
I’ve been working on shipping a game based on an idea I’ve had for a long time. The product is based on web technology: Javascript, WebGL, and Electron as the app container. This is an extremely large project, and I work on it in a hobby capacity as time permits.
I created a website that allows people with mutual crushes to locate each other in a non-confrontational way. There were over fifty thousand signups which we achieved without spending any money on marketing, due to the low operating costs associated with viral growth. The application re-uses the framework that I created for Himatomo, one of my previous endeavors. I was responsible for all aspects of the software development.
I created a framework and mobile website specifically for Japanese cell phones using PHP, MySQL, and HTML. The site contained several advanced features including a mobile blog, a college-oriented social network inspired by FaceBook, and a location-based friend locator service. Designed clear and black box tests using PHPUnit and JUnit. I helped the business team by guiding the requirements gathering process, and the subsequent documentation. I designed the operational infrastructure to host the service in production and staging environments. Lead the internationalization team to ensure the platform reliably handled English (iso 8859-1) and Japanese (euc-jp, sjis), as well as drop-in support for additional locales.
Pursued a B.S in Computer Science program.


WSSV virus shrimp spot syndrome protein white viral gene genes DNA wsv proteins infection Penaeus (WSSV) Thus, Wang envelope host However, reported structural Virol. analysis expression Dis. cell infected showed Arthropoda cells studies immune monodon viruses ORF genome identified Aquat. IMI) Decapoda E(PO, Organ. expressed transcription antiviral early major C.F. detected sequence involved replication activity different shrimp, Fish Identification Virology WSSV-infected Zhang baculovirus organisms response wsv, {border-style encodes late located Chen Huang J.M. White binding kinase novel px;} #ffffff;} Aquaculture G.H. H.C. Immunol. Kou Yang cellular encoded isolates promoter putative recombinant Furthermore, VP, crayfish domain functional sequences suggesting virus, Penaeid RNA cultured encoding function important mortalities observed C.H. Chang WSSV, compared containing large nucleocapsid Hulten Res. Vlak WSV amino capable considered control dsRNA indicating japonicus mechanism motif significantly species suggest survival use E(IMI) J.H. M.C.W. TATA Virus caused experimentally infection, number polymerase structure transcriptional used vaccines vannamei virion D.V. Experimental VP/Structure WSSV. characterization common contain contains high highly infection. molecular mortality potential proposed protection revealed role signal size suggested using A.S. C.L. Finally, Gen. Leu Lightner Lin Liu Sahul-Hameed Shellfish apoptosis conserved evidence experimental hemocytes higher injected interaction known presence previously results start translation transmission Besides, Biotechnol. N/E acid attachment complete disease downstream freshwater immunity isolate marine motifs p.i., range resistance significant similar specific temperature wild Characterization E(PO) Mar. Recently, Ser/Thr Table Transcription WSSV-Th accepted addition, elements entry gene, genomic homology information injection lack low mechanisms named nuclear p.i. prawn predicted px; regions stages strategies thymidylate tissue transcripts vp, wsv) {font-family (WSBV) Arch. China Chou Gene Hew Indian Peng STAT Y.S. ability adaptive associated black box catalytic cells, complex consensus demonstrated directly factors font-size form functions genes. however, increase initiation innate knowledge mass new particles possible protein, proteins, recent reductase region related remains site sites subsequently synthesis tiger transcribed translational van variations water (WSSV), Asian Bonami Ch. Comp. Detection Dev. J.R. Karunasagar Kwang ORF, Rab Recent Taiwan Unidentified Van WSV, adhesion bind cells. challenged characteristics contribute defense double; effective exposure extracts factor family feature fully genome, homologous hosts hybridization identification including induce insect mRNA motif, non-specific nuclease polyadenylation reached relative remain required responses shown subunits suggests surface typical ubiquitin vaccinated vector work (RR) ... Analysis Balasubramanian CHX H.Y. Interestingly, Litopenaeus Marks MjFAK Mol. Murugan N/E(PO) Pathol. R.M. S.E. Sarathi Transcriptional Tsai W.J. Witteveldt Xie aa) acids agent apoptotic available basic border-color border-width challenge changes characteristic contrast, crabs critical crustaceans cycle date date, days days, development direct diseases domains encode end enzymes exhibit fact, help include infections infectious ingestion interact interacts invertebrate juveniles largest latency length levels likely lower mainly membrane near nucleus obtained occur occurrence oral plant plays primary process protective proteins. rates replicate replication. reports respectively. ribonucleotide scientific silencing small solid; sp. system, temporal thymidine time tk-tmk treated trials up-regulated upstream widely {font-style {font-weight (%) ATG Biochem. C.J. C.M. Cherax Despite H.F. IMI, IN) J.L. Jiravanichpaisal Low N/E(PO, NLS ORF. PCR Protein R.W. RGD RT-PCR Redman Reference Ribonucleotide Similarly, Song Söderhäl Söderhäll T.W. Thailand Tzeng Viral WSSV-Cn WSSV-Th, WSSV-Th--II WSSV-Tw World Zhu activity. apoptosis, approximately assembly based bold chain characterized clusters coding codon, complexity composed courier; crab cumulative dUTPase diets disease. distributed dnapol does double-stranded effect effects em; emerged enhance envelope, enzyme extracellular extract fact factors, far fed finger fitness fold fragment fusion genes, genetic geographic glycosylation helix hematopoietic hemocyanin hypodermal identify immediate-early imply includes indicates induces infect inhibiting interactions interesting invertebrates isolated isolates, latency-related leniusculus ligase mammalian mediated morphology natural necessary necrosis nucleus. order organisms, organs pathogens play polycistronic present present, prevent probably product production profile promoters protect pt;} purified rVP rapidly recognized regulatory relatively repeat reported. require response. result rod-shaped second separated sequence, shrimp. situ spread stage strongly studied study, subunit synthase systemic target task transcript tropism type types understanding unique vaccine variable virulence virus: viruses, vitro way, wide


5// A) You may edit imconfig.h (and not overwrite it when updating imgui, or maintain a patch/branch with your modifications to imconfig.h)
6// B) or add configuration directives in your own file and compile with #define IMGUI_USER_CONFIG "myfilename.h"
7// Note that options such as IMGUI_API, IM_VEC2_CLASS_EXTRA or ImDrawIdx needs to be defined consistently everywhere you include imgui.h, not only for the imgui*.cpp compilation units.
12//---- Define assertion handler. Defaults to calling assert().
13//#define IM_ASSERT(_EXPR) MyAssert(_EXPR)
14
15//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows.
16//#define IMGUI_API __declspec( dllexport )
17//#define IMGUI_API __declspec( dllimport )
18
19//---- Don't define obsolete functions names. Consider enabling from time to time or when updating to reduce likelihood of using already obsolete function/names
20//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
21
22//---- Don't implement default handlers for Windows (so as not to link with certain functions)
23//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // Don't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc.
24//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS // Don't use and link with ImmGetContext/ImmSetCompositionWindow.
25
26//---- Don't implement demo windows functionality (ShowDemoWindow()/ShowStyleEditor()/ShowUserGuide() methods will be empty)
27//---- It is very strongly recommended to NOT disable the demo windows. Please read the comment at the top of imgui_demo.cpp.
28//#define IMGUI_DISABLE_DEMO_WINDOWS
29
30//---- Don't implement ImFormatString(), ImFormatStringV() so you can reimplement them yourself.
31//#define IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS
32
33//---- Include imgui_user.h at the end of imgui.h as a convenience
34//#define IMGUI_INCLUDE_IMGUI_USER_H
35
36//---- Pack colors to BGRA8 instead of RGBA8 (if you needed to convert from one to another anyway)
37//#define IMGUI_USE_BGRA_PACKED_COLOR
38
39//---- Implement STB libraries in a namespace to avoid linkage conflicts (defaults to global namespace)
40//#define IMGUI_STB_NAMESPACE ImGuiStb
41
42//---- Define constructor and implicit cast operators to convert back<>forth from your math types and ImVec2/ImVec4.
43// This will be inlined as part of ImVec2 and ImVec4 class declarations.
44/*
45#define IM_VEC2_CLASS_EXTRA \
46 ImVec2(const MyVec2& f) { x = f.x; y = f.y; } \


|
Introduction |
This document is a proposal of evolution of the current
Apache JServ Protocol version 1.3, also known as ajp13.
I'll not cover here the full protocol but only the add-on from ajp13.
This nth pass include comments from the tomcat-dev list and
misses discovered during developpment.
|
Missing features in AJP13 |
ajp13 is a good protocol to link a servlet engine like tomcat to a web server like Apache:
-
use persistants connections to avoid reconnect time at each request
-
encode many http commands to reduce stream size
-
send to servlet engine many info from web server (like SSL certs)
-
security between web server and servlet engine.
Anybody can connect to an ajp13 port (no login mecanism used)
You could connect, for example with telnet, and keep the remote thread
up by not sending any data (no timeout in connection)
-
context information passed from servlet engine to web server.
Part of the configuration of JK, the web server connector, is to
indicate to the web server which URI to handle.
The mod_jk JkMount directive, told to web server which URI must be
forwarded to servlet engine.
A servlet engine allready knows which URI it handle and TC 3.3 is
allready capable to generate a config file for JK from the list
of available contexts.
-
state update of contexts from servlet engine to web server.
Big site with farm of Tomcat, like ISP and virtuals hosters,
may need to stop a context for admin purposes. In that case the front
web server must know that the context is currently down, to eventually
relay the request to another Tomcat
-
verify state of connection before sending request.
Actually JK send the request to the servlet engine and next wait
for the answer. But one of the beauty of the socket API, is you that
you could write() to a closed connection without any error reporting,
but a read() to a closed connection return you the error code.
|
Proposed add-ons to AJP13 |
Let's descrive here the features and add-on that could be added to AJP13.
Since this document is a proposal, a reasonable level of chaos must be expected at first.
Be sure that discussion on tomcat list will help clarify points, add
features but the current list seems to be a 'minimun vital'
-
Advanced login features at connect time
-
Basic authorisation system, where a shared secret key is
present in web server and servlet engine.
-
Basic protocol negociation, just to be sure that if functionnalities are added
to AJP13 in the future, current implementations will still works.
-
Clean handling of 'Unknown packets'
-
Extended env vars passed from web-server to servlet engine.
-
Add extra SSL informations needed by Servlet 2.3 API (like SSL_KEY_SIZE)
|
Advanced login |
-
WEB-SERVER send LOGIN INIT CMD + NEGOCIATION DATA + WEB SERVER INFO
-
TOMCAT respond with LOGIN SEED CMD + RANDOM DATA
-
WEB-SERVER calculted the MD5 of RANDOM DATA+SECRET DATA
-
WEB-SERVER send LOGIN COMP CMD + MD5 (SECRET DATA + RANDOM DATA)
-
TOMCAT respond with LOGIN STATUS CMD + NEGOCIED DATA + SERVLET ENGINE INFO
To prevent DOS attack, the servlet engine will wait
the LOGIN CMD only 15/30 seconds and reports the
timeout exception for admins investigation.
The login command will contains basic protocol
negociation information like compressing ability,
crypto, context info (at start up), context update at
run-time (up/down), level of SSL env vars, AJP protocol
level supported (level1/level2/level3...)
The Web server info will contain web server info and
connector name (ie Apache 1.3.26 + mod_ssl 2.8.8 + mod_jk 1.2.1 + mod_perl 1.25).
The servlet engine will mask the negociation mask with it's own
mask (what it can do) and return it when loggin is accepted.
This will help having a basic AJP13 implementation (level 1)
on a web-server working with a more advanced protocol handler on
the servlet engine side or vice-versa.
AJP13 was designed to be small and fast and so many
SSL informations present in the web-server are not
forwarded to the servlet engine.
We add here four negociations flags to provide more
informations on client SSL data (certs), server SSL datas,
crypto used, and misc datas (timeout...).
|
Messages Stream |
+----------------+------------------+-----------------+
| LOGIN INIT CMD | NEGOCIATION DATA | WEB SERVER INFO |
+----------------+------------------+-----------------+
+----------------+----------------+
| LOGIN SEED CMD | MD5 of entropy |
+----------------+----------------+
+----------------+----------------------------+
| LOGIN COMP CMD | MD5 of RANDOM + SECRET KEY |
+----------------+----------------------------+
+-----------+---------------+---------------------+
| LOGOK CMD | NEGOCIED DATA | SERVLET ENGINE INFO |
+-----------+---------------+---------------------+
+------------+--------------+
| LOGNOK CMD | FAILURE CODE |
+------------+--------------+
-
LOGIN INIT CMD, LOGIN SEED CMD, LOGIN COMP CMD, LOGOK CMD, LOGNOK CMD are 1 byte long.
-
MD5, MD5 of RANDOM + SECRET KEY are 32 chars long.
-
NEGOCIATION DATA, NEGOCIED DATA, FAILURE CODE are 32 bits long.
-
WEB SERVER INFO, SERVLET ENGINE INFO are CString.
The secret key will be set by a new propertie in
workers.properties : secretkey
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.secretkey=myverysecretkey
|
Shutdown feature |
AJP13 miss a functionnality of AJP12, which is shutdown command.
A logout will tell servlet engine to shutdown itself.
+--------------+----------------------------+
| SHUTDOWN CMD | MD5 of RANDOM + SECRET KEY |
+--------------+----------------------------+
+------------+
| SHUTOK CMD |
+------------+
+-------------+--------------+
| SHUTNOK CMD | FAILURE CODE |
+-------------+--------------+
-
SHUTDOWN CMD, SHUTOK CMD, SHUTNOK CMD are 1 byte long.
-
MD5 of RANDOM + SECRET KEY are 32 chars long.
-
FAILURE CODE is 32 bits long.
|
Extended Env Vars feature |
NOTA:
While working on AJP13 in JK, I really discovered "JkEnvVar".
The following "Extended Env Vars feature" description may not
be implemented in extended AJP13 since allready available in original
implementation.
DESC:
Many users will want to see some of their web-server env vars
passed to their servlet engine.
To reduce the network traffic, the web-servlet will send a
table to describing the external vars in a shorter fashion.
We'll use there a functionnality allready present in AJP13,
attributes list :
In the AJP13, we've got :
AJP13_FORWARD_REQUEST :=
prefix_code 2
method (byte)
protocol (string)
req_uri (string)
remote_addr (string)
remote_host (string)
server_name (string)
server_port (integer)
is_ssl (boolean)
num_headers (integer)
request_headers *(req_header_name req_header_value)
?context (byte string)
?servlet_path (byte string)
?remote_user (byte string)
?auth_type (byte string)
?query_string (byte string)
?jvm_route (byte string)
?ssl_cert (byte string)
?ssl_cipher (byte string)
?ssl_session (byte string)
?attributes *(attribute_name attribute_value)
request_terminator (byte)
Using short 'web server attribute name' will reduce the
network traffic.
+-------------------+---------------------------+-------------------------------+----+
| EXTENDED VARS CMD | WEB SERVER ATTRIBUTE NAME | SERVLET ENGINE ATTRIBUTE NAME | ES |
+-------------------+---------------------------+-------------------------------+----+
ie :
JkExtVars S1 SSL_CLIENT_V_START javax.servlet.request.ssl_start_cert_date
JkExtVars S2 SSL_CLIENT_V_END javax.servlet.request.ssl_end_cert_date
JkExtVars S3 SSL_SESSION_ID javax.servlet.request.ssl_session_id
+-------------------+----+-------------------------------------------+
| EXTENDED VARS CMD | S1 | javax.servlet.request.ssl_start_cert_date |
+-------------------+----+-------------------------------------------+
+----+-----------------------------------------+
| S2 | javax.servlet.request.ssl_end_cert_date |
+----+-----------------------------------------+
+----+-----------------------------------------+
| S3 | javax.servlet.request.ssl_end_cert_date |
+----+-----------------------------------------+
During transmission in extended AJP13 we'll see attributes name
containing S1, S2, S3 and attributes values of
2001/01/03, 2002/01/03, 0123AFE56.
This example showed the use of extended SSL vars but
any 'personnal' web-server vars like custom authentification
vars could be reused in the servlet engine.
The cost will be only some more bytes in the AJP traffic.
-
EXTENDED VARS CMD is 1 byte long.
-
WEB SERVER ATTRIBUTE NAME, SERVLET ENGINE ATTRIBUTE NAME are CString.
-
ES is an empty CString.
|
Context informations forwarding for Servlet engine to Web Server |
Just after the LOGON PHASE, the web server will ask for the list of contexts
and URLs/URIs handled by the servlet engine.
It will ease installation in many sites, reduce questions about configuration
on tomcat-user list, and be ready for servlet API 2.3.
This mode will be activated by a new directive JkAutoMount
ie: JkAutoMount examples myworker1 /examples/
If we want to get ALL the contexts handled by the servlet engine, willcard
could be used :
ie: JkAutoMount * myworker1 *
A servlet engine could have many contexts, /examples, /admin, /test.
We may want to use only some contexts for a given worker. It was
done previously, in apache HTTP server for example, by setting by
hand the JkMount accordingly in each [virtual] area of Apache.
If you web-server support virtual hosting, we'll forward also that
information to servlet engine which will only return contexts for
that virtual host.
In that case the servlet engine will only return the URL/URI matching
these particular virtual server (defined in server.xml).
This feature will help ISP and big sites which mutualize large farm
of Tomcat in load-balancing configuration.
+-----------------+-------------------+----------+----------+----+
| CONTEXT QRY CMD | VIRTUAL HOST NAME | CONTEXTA | CONTEXTB | ES |
+-----------------+-------------------+----------+----------+----+
+------------------+-------------------+----------+-------------------+----------+---------------+----+
| CONTEXT INFO CMD | VIRTUAL HOST NAME | CONTEXTA | URL1 URL2 URL3 ES | CONTEXTB | URL1 URL2 ... | ES |
+------------------+-------------------+----------+-------------------+----------+---------------+----+
We'll discover via context-query, the list of URL/MIMES handled by the remove servlet engine
for a list of contextes.
In wildcard mode, CONTEXTA will contains just '*'.
-
CONTEXT QRY CMD and CONTEXT INFO CMD are 1 byte long.
-
VIRTUAL HOST NAME is a CString, ie an array of chars terminated by a null byte (/0).
-
An empty string is just a null byte (/0).
-
ES is an empty CString. Indicate end of URI/URLs or end of CONTEXTs.
NB:
When VirtualMode is not to be used, the VIRTUAL HOST NAME is '*'.
In that case the servlet engine will send all contexts handled.
|
Context informations updates from Servlet engine to Web Server |
Context update are messages caming from the servlet engine each time a context
is desactivated/reactivated. The update will be in use when the directive JkUpdateMount.
This directive will set the AJP13_CONTEXT_UPDATE_NEG flag.
ie: JkUpdateMount myworker1
+--------------------+-------------------+----------+--------+----------+--------+----+
| CONTEXT UPDATE CMD | VIRTUAL HOST NAME | CONTEXTA | STATUS | CONTEXTB | STATUS | ES |
+--------------------+-------------------+----------+--------+----------+--------+----+
-
CONTEXT UPDATE CMD, STATUS are 1 byte long.
-
VIRTUAL HOST NAME, CONTEXTS are CString.
-
ES is an empty CString. Indicate end of CONTEXTs.
NB:
When VirtualMode is not in use, the VIRTUAL HOST NAME is '*'.
STATUS is one byte indicating if context is UP/DOWN/INVALID
|
Context status query to Servlet engine |
This query will be used by the web-server to determine if a given
contexts are UP, DOWN or INVALID (and should be removed).
+-------------------+--------------------+----------+----------+----+
| CONTEXT STATE CMD | VIRTUAL HOST NAME | CONTEXTA | CONTEXTB | ES |
+-------------------+--------------------+----------+----------+----+
+-------------------------+-------------------+----------+--------+----------+--------+----+
| CONTEXT STATE REPLY CMD | VIRTUAL HOST NAME | CONTEXTA | STATUS | CONTEXTB | STATUS | ES |
+-------------------------+-------------------+----------+-------------------+--------+----+
-
CONTEXT STATE CMD, CONTEXT STATE REPLY CMD, STATUS are 1 byte long.
-
VIRTUAL HOST NAME, CONTEXTs are CString
-
ES is an empty CString
NB:
When VirtualMode is not in use, the VIRTUAL HOST NAME is an empty string.
|
Handling of unknown packets |
Sometimes even with a well negocied protocol, we may be in a situation
where one end (web server or servlet engine), will receive a message it
couldn't understand. In that case the receiver will send an
'UNKNOW PACKET CMD' with attached the unhandled message.
+--------------------+------------------------+-------------------+
| UNKNOWN PACKET CMD | UNHANDLED MESSAGE SIZE | UNHANDLED MESSAGE |
+--------------------+------------------------+-------------------+
Depending on the message, the sender will report an error and if
possible will try to forward the message to another endpoint.
-
UNKNOWN PACKET CMD is 1 byte long.
-
UNHANDLED MESSAGE SIZE is 16bits long.
-
UNHANDLED MESSAGE is an array of byte (length is contained in UNHANDLED MESSAGE SIZE)
NB:
added UNHANDLED MESSAGE SIZE (development)
|
Verification of connection before sending request |
NOTA: This fonctionality may never be used, since it may slow up the normal process
since requiring on the web-server side an extra IO (read) before forwarding
the request.....
One of the beauty of socket APIs, is that you could write on a half closed socket.
When servlet engine close the socket, the web server will discover it only at the
next read() to the socket.
Basically, in the AJP13 protocol, the web server send the HTTP HEADER and HTTP BODY
(POST by chunk of 8K) to the servlet engine and then try to receive the reply.
If the connection was broken the web server will learn it only at receive time.
We could use a buffering scheme but what happen when you use the servlet engine
for upload operations with more than 8ko of datas ?
The hack in the AJP13 protocol is to add some bytes to read after the end of the
service :
EXAMPLE OF DISCUSSION BETWEEN WEB SERVER AND SERVLET ENGINE
AJP HTTP-HEADER (+ HTTP-POST) (WEB->SERVLET)
AJP HTTP-REPLY (SERVLET->WEB)
AJP END OF DISCUSSION (SERVLET->WEB)
---> AJP STATUS (SERVLET->WEB AJP13)
The AJP STATUS will not be read by the servlet engine at the end of
the request/response #N but at the begining of the next session.
More at that time the web server could also use OS dependants functions
(or better APR functions) to determine if there is also more data
to read. And that datas could be CONTEXT Updates.
This will avoid the web server sending a request to a
desactivated context. In that case, if the load-balancing is used,
it will search for another servlet engine to handle the request.
And that feature will help ISP and big sites with farm of tomcat,
to updates their servlet engine without any service interruption.
+------------+-------------+
| STATUS CMD | STATUS DATA |
+------------+-------------+
-
STATUS CMD and STATUS DATA are one byte long.
|
Conclusion |
The goal of the extended AJP13 protocol is to overcome some of the original AJP13 limitation.
An easier configuration, a better support for large site and farm of Tomcat,
a simple authentification system and provision for protocol updates.
Using the stable ajp13 implementation in JK (native) and in servlet
engine (java), it's a reasonable evolution of the well known ajp13.
|
Commands and IDs in extended AJP13 Index |
Index of Commands and ID to be added in AJP13 Protocol
|
Commands IDs |
| Command Name |
Command Number |
| AJP13_LOGINIT_CMD |
0x10 |
| AJP13_LOGSEED_CMD |
0x11 |
| AJP13_LOGCOMP_CMD |
0x12 |
| AJP13_LOGOK_CMD |
0x13 |
| AJP13_LOGNOK_CMD |
0x14 |
| AJP13_CONTEXT_QRY_CMD |
0x15 |
| AJP13_CONTEXT_INFO_CMD |
0x16 |
| AJP13_CONTEXT_UPDATE_CMD |
0x17 |
| AJP13_STATUS_CMD |
0x18 |
| AJP13_SHUTDOWN_CMD |
0x19 |
| AJP13_SHUTOK_CMD |
0x1A |
| AJP13_SHUTNOK_CMD |
0x1B |
| AJP13_CONTEXT_STATE_CMD |
0x1C |
| AJP13_CONTEXT_STATE_REP_CMD |
0x1D |
| AJP13_UNKNOW_PACKET_CMD |
0x1E |
|
Negociations Flags |
| Command Name |
Number |
Description |
| AJP13_CONTEXT_INFO_NEG |
0x80000000 |
web-server want context info after login |
| AJP13_CONTEXT_UPDATE_NEG |
0x40000000 |
web-server want context updates |
| AJP13_GZIP_STREAM_NEG |
0x20000000 |
web-server want compressed stream |
| AJP13_DES56_STREAM_NEG |
0x10000000 |
web-server want crypted DES56 stream with secret key |
| AJP13_SSL_VSERVER_NEG |
0x08000000 |
Extended info on server SSL vars |
| AJP13_SSL_VCLIENT_NEG |
0x04000000 |
Extended info on client SSL vars |
| AJP13_SSL_VCRYPTO_NEG |
0x02000000 |
Extended info on crypto SSL vars |
| AJP13_SSL_VMISC_NEG |
0x01000000 |
Extended info on misc SSL vars |
| Negociation ID |
Number |
Description |
| AJP13_PROTO_SUPPORT_AJPXX_NEG |
0x00FF0000 |
mask of protocol supported |
| AJP13_PROTO_SUPPORT_AJP13L1_NEG |
0x00010000 |
communication could use AJP13 Level 1 |
| AJP13_PROTO_SUPPORT_AJP13L2_NEG |
0x00020000 |
communication could use AJP13 Level 2 |
| AJP13_PROTO_SUPPORT_AJP13L3_NEG |
0x00040000 |
communication could use AJP13 Level 3 |
All others flags must be set to 0 since they are reserved for future use.
|
Failure IDs |
| Failure Id |
Number |
| AJP13_BAD_KEY_ERR |
0xFFFFFFFF |
| AJP13_ENGINE_DOWN_ERR |
0xFFFFFFFE |
| AJP13_RETRY_LATER_ERR |
0xFFFFFFFD |
| AJP13_SHUT_AUTHOR_FAILED_ERR |
0xFFFFFFFC |
|
Status |
| Failure Id |
Number |
| AJP13_CONTEXT_DOWN |
0x01 |
| AJP13_CONTEXT_UP |
0x02 |
| AJP13_CONTEXT_OK |
0x03 |
|


--- layout: default title: Membership appstatus: closed applyfounderurl: //forms.startupshell.org/apply/founders applyfellowurl: //forms.startupshell.org/apply/fellows applyurl: //forms.startupshell.org/apply nextbatch: Spring 2021 monthopen: January pagedocs: true --- {% if page.pagedocs == "true" %} {% else %} {% endif %}
Membership is semesterly. {% if page.appstatus == "open" %}Applications are now open.{% else %}Applications for the {{ page.nextbatch }} batch open in {{ page.monthopen }}. {% endif %}
*Currently, only enrolled undergraduate or graduate students at the University of Maryland are eligible for membership.
Apply with your venture to the Startup Shell Founders membership track. Join a fast-paced startup community of other founders with unique ventures. Get industry and alumni mentors, access to a collection of resources to grow your venture, and participate in an assortment of community events.
{% if page.appstatus == "open" %} {% else %} {% endif %}Apply as an individual with any skillset to the Startup Shell Fellows membership track. Join our community of entrepreneurs and innovators, build your portfolio and strengthen your skills by working with Startup Shell portfolio companies. Also, get access to Shell's resources and mentors.
{% if page.appstatus == "open" %} {% else %} {% endif %}


Please click or use the back-button of your browser to return!
1. Content
The author reserves the right not to be responsible for the topicality, correctness, completeness or quality of the information provided. Liability claims regarding damage caused by the use of any information provided, including any kind of information which is incomplete or incorrect,will therefore be rejected.
All offers are not-binding and without obligation. Parts of the pages or the complete publication including all offers and information might be extended, changed or partly or completely deleted by the author without separate announcement.
2. Referrals and links
The author is not responsible for any contents linked or referred to from his pages - unless he has full knowledge of illegal contents and would be able to prevent the visitors of his site from viewing those pages. If any damage occurs by the use of information presented there, only the author of the respective pages might be liable, not the one who has linked to these pages. Furthermore the author is not liable for any postings or messages published by users of discussion boards, guestbooks or mailinglists provided on his page.
3. Copyright
The author intended not to use any copyrighted material for the publication or, if not possible, to indicate the copyright of the respective object.
The copyright for any material created by the author is reserved. Any duplication or use of objects such as images, diagrams, sounds or texts in other electronic or printed publications is not permitted without the author's agreement.
4. Privacy policy
If the opportunity for the input of personal or business data (email addresses, name, addresses) is given, the input of these data takes place voluntarily. The use and payment of all offered services are permitted - if and so far technically possible and reasonable - without specification of any personal data or under specification of anonymized data or an alias. The use of published postal addresses, telephone or fax numbers and email addresses for marketing purposes is prohibited, offenders sending unwanted spam messages will be punished.
5. Legal validity of this disclaimer
This disclaimer is to be regarded as part of the internet publication which you were referred from. If sections or individual terms of this statement are not legal or correct, the content or validity of the other parts remain uninfluenced by this fact.
Please click or use the back-button of your browser to return!


My site is devoted to sharing ideas, tools and resources.
You don't have to be perfect - You just have to get it going!
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.
My site is devoted to sharing ideas, tools and resources.
You don't have to be perfect - You just have to get it going!


Search for pilot after reports of plane crash off North Wales coast
HM Coastguard is co-ordinating a search in the Puffin Island area near Anglesey after the light aircraft disappeared from radar on Monday afternoon.
The search for a missing pilot will continue on Tuesday after reports an aircraft crashed off the North Wales coast.
Police have confirmed the small plane had just one person on board when it disappeared from radar in the area of Puffin Island near Anglesey at around 12.47pm on Monday.
The plane set off from Caernarfon Airport some 25 minutes earlier to fly to the Great Orme in Llandudno and was on its way back when it lost contact.
According to data from flightradar24.com, a Cessna light aircraft making the same route at the time given by police and the Coastguard descended near the uninhabited Puffin Island before it disappeared.
The search was suspended around 10pm on Monday. The Maritime and Coastguard Agency added: “The search will continue in the morning, we have no further information at this time.”
On Monday evening, North Wales Police said they were involved in the Coastguard-led operation, while officers were supporting the unnamed missing pilot’s family.
Chief Inspector Essi Ahari said: “North Wales Police are supporting HM Coastguard in a search for a light aircraft that was flying from Caernarfon Airport to the Great Orme in Llandudno and back this afternoon.
“The aircraft had one pilot on board and no other passengers, and family liaison officers are supporting the missing pilot’s family.”
The force said in an earlier statement it had received a phone call at 12.59pm reporting a “possible crash” involving a light aircraft.
A spokesman for HM Coastguard said it was co-ordinating a search and rescue in the Puffin Island area of North Wales following a report at 12.47pm on Monday that an aircraft had disappeared from radar contact.
The search and rescue helicopter from Caernarfon had been sent as well as Coastguard rescue teams from Penmon and Bangor and a senior Coastguard operations officer, he said.
The RNLI lifeboats from Beaumaris, Moelfre and Llandudno and North Wales Police were also sent.
The Air Accidents Investigation Branch said in a statement: “The AAIB has sent a team to investigate an accident involving a light aircraft that occurred near Beaumaris, Gwynedd, Wales.”


Finland into first major finals as Sweden seal Euro 2020 place
Paris - Finland qualified for the first major tournament in their history on Friday with a 3-0 win over Liechtenstein while Sweden sealed their place at the Euro 2020 finals following a victory in Romania.
Norwich City forward Teemu Pukki scored twice in Helsinki and Jasse Tuominen also netted to bring the home crowd pouring onto the pitch at the final whistle as Finland wrapped up second place behind Group J winners Italy.
Roberto Mancini's Italy registered a record 10th straight win as they eased past Bosnia and Herzegovina 3-0 in Zenica.
Francesco Acerbi, Lorenzo Insigne and Andrea Belotti scored for Italy, who have bounced back impressively after failing to qualify for last year's World Cup year for the first time since 1958.
"Mancini has done a great job, he has given us clear ideas in a short period of time. We are proud of the record of ten consecutive wins but our objectives and our dreams are honestly others," said Belotti.
Bosnia are guaranteed a place in the play-offs after finishing top of their UEFA Nations League group last year.
Sweden qualified for a sixth straight European Championships after a 2-0 success in Bucharest that eliminated Romania from contention.
Marcus Berg and Robin Quaison scored first-half goals for Sweden who secured second place behind Group F winners Spain, leaving Romania hoping for a play-off berth.
Berg headed in an inviting cross from Emil Forsberg as Sweden surged ahead on 18 minutes and then turned provider as he cushioned the ball off for Quaison to double the lead.
Seven different players were on target for already-qualified Spain in a 7-0 thrashing of lowly Malta in Cadiz.
Alvaro Morata opened the scoring on 23 minutes before former Arsenal midfielder Santi Cazorla bagged his first international goal in four years.
Pau Torres, substitutes Pablo Sarabia and Dani Olmo, Gerard Moreno and Jesus Navas completed the rout as Spain made sure of top spot.
Spanish fans honoured Sergio Ramos with a huge mosaic of the defender who last month broke the record previously held by Iker Casillas for most national team appearances.
"I'm very happy. What better way for me to toast this tribute than with a victory of such authority and playing such good football?" said Ramos, who earned his 169th cap Friday.
"The joy is two-fold on both a personal and group level."
Alexander Sorloth struck twice for Norway in a 4-0 win over the Faroe Islands. Tore Reginiussen and Iver Fossum got the other goals in Oslo for the hosts who will head into the playoffs.
Denmark require a draw from their final game against the Republic of Ireland after a 6-0 demolition of Gibraltar.
Christian Eriksen and Robert Skov both hit a brace in Copenhagen with Martin Braithwaite and Christian Gytkjaer also on the scoresheet.
Switzerland occupy second place in Group D behind Denmark after a nervy 1-0 win over Georgia courtesy of late header from debutant Cedric Itten.
"I'm still in a bit of shock," said Itten. "To score on my debut here in St Gallen is a dream come true. It's still going to take a while to sink in."
Collated Euro 2020 qualifying results from Groups D, F and J on Friday:
Group D
At Copenhagen
Denmark 6 (Skov 12, 64, Gytkjaer 47, Braithwaite 51, Eriksen 85, 90+4) Gibraltar 0
At St Gallen, Switzerland
Switzerland 1 (Itten 77) Georgia 0
Group F
At Oslo
Norway 4 (Reginiussen 4, Fossum 8, Sorloth 62, 65) Faroe Islands 0
At Bucharest
Romania 0 Sweden 2 (Berg 18, Quaison 34)
At Cadiz, Spain
Spain 7 (Morata 23, Cazorla 41, Pau Torres 62, Sarabia 63, Olmo 69, Gerard Moreno 71, Navas 85) Malta 0
Group J
At Yerevan
Armenia 0 Greece 1 (Limnios 35)
At Helsinki
Finland 3 (Tuominen 21, Pukki 64-pen, 75) Liechtenstein 0
At Zenica, Bosnia and Herzegovina
Bosnia and Herzegovina 0 Italy 3 (Acerbi 21, Insigne 37, Belotti 52)
Playing on Saturday (21:45 SA time unless stated):
Group C
At Moenchengladbach, Germany
Germany v Belarus
At Belfast
Northern Ireland v Netherlands
Group E
At Baku
Azerbaijan v Wales (19:00)
At Rijeka, Croatia
Croatia v Slovakia
Group G
At Vienna
Austria v North Macedonia
At Jerusalem
Israel v Poland
At Ljubljana
Slovenia v Latvia (19:00)
Group I
At Nicosia
Cyprus v Scotland (16:00)
At Saint Petersburg, Russia
Russia v Belgium (19:00)
At Serravalle, San Marino
San Marino v Kazakhstan (19:00)
Played on Thursday:
Group A
At Plzen, Czech Republic
Czech Republic 2 (Krai 71, Celustka 79) Kosovo 1 (Nuhiu 50)
At London
England 7 (Oxlade-Chamberlain 11, Kane 19, 24, 37, Rashford 30, Sofranac 66-og, Abraham 84) Montenegro 0
Group B
At Faro, Portugal
Portugal 6 (Ronaldo 7-pen, 22, 65, Pizzi 52, Paciencia 56, Bernardo Silva 63) Lithuania 0
At Belgrade
Serbia 3 (Mitrovic 11, 43, Radonjic 70) Luxembourg 2 (Rodrigues 54, Turpel 75)
Group H
At Elbasan, Albania
Albania 2 (Balaj 6, Manaj 55) Andorra 2 (Martinez 18, 48)
At Paris
France 2 (Varane 35, Giroud 79-pen) Moldova 1 (Rata 9)
At Istanbul, Turkey
Turkey 0 Iceland 0


{{presentation.introduction}}
{{presentation.surname}}
{{presentation.name}}
{{presentation.address}}
{{presentation.phoneNumber}}
{{presentation.email}}
{{presentation.visaInformations}}


Prefect Kasman:
You must take the letter I gave you to the Chief of the Vuku! On the road north from this village you will find the army post of Turek Orcs.
You must never forget that you are the representative of the greatest Flame Lord, Kakai! Always behave with the pride and dignity that your master commands!


Pan Am flight 103 exploded over Lockerbie, Scotland, in December 1988, killing all 259 people on board and 11 on the ground. There were 189 Americans on the plane. Now, the only man ever convicted in the attack is a free man. Abdelbeset Ali Mohmed al Megrahi was freed from a prison in Scotland today and allowed to return to Libya because he has terminal prostate cancer, officials say.Lockerbie bomber freed


{% seo %}
Toggle navigation
Ghana Statistical
Service
Home
About
Geoweb Service
Information
Mail Us
Welcome to our home page
Ghana Statistical Service
Read More


But the LORD hearkened unto me at that time also.


Lapack documentation
Purpose
=======
DLANGE returns the value of the one norm, or the Frobenius norm, or
the infinity norm, or the element of largest absolute value of a
real matrix A.
Description
===========
DLANGE returns the value
DLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm'
(
( norm1(A), NORM = '1', 'O' or 'o'
(
( normI(A), NORM = 'I' or 'i'
(
( normF(A), NORM = 'F', 'f', 'E' or 'e'
where norm1 denotes the one norm of a matrix (maximum column sum),
normI denotes the infinity norm of a matrix (maximum row sum) and
normF denotes the Frobenius norm of a matrix (square root of sum of
squares). Note that max(abs(A(i,j))) is not a consistent matrix norm.
Arguments
=========
NORM (input) CHARACTER*1
Specifies the value to be returned in DLANGE as described
above.
M (input) INTEGER
The number of rows of the matrix A. M >= 0. When M = 0,
DLANGE is set to zero.
N (input) INTEGER
The number of columns of the matrix A. N >= 0. When N = 0,
DLANGE is set to zero.
A (input) DOUBLE PRECISION array, dimension (LDA,N)
The m by n matrix A.
LDA (input) INTEGER
The leading dimension of the array A. LDA >= max(M,1).
WORK (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)),
where LWORK >= M when NORM = 'I'; otherwise, WORK is not
referenced.
function dlange
extends Modelica.Icons.Function;
input Real A[:, :] "Real matrix A";
input String norm = "1" "specifies the norm, i.e., 1, I, F, M";
output Real anorm "norm of A";
end dlange;
Generated at 2019-01-25T16:44:03Z by OpenModelica 1.14.0~dev-130-gefa44fb


Actions, resources, and condition keys for Amazon GameLift
Amazon GameLift (service prefix:
gamelift
) provides the following service-specific resources, actions, and condition context keys for use in IAM permission policies.
References:
-
Learn how to configure this service .
-
View a list of the API operations available for this service .
-
Learn how to secure this service and its resources by using IAM permission policies.
Topics
Actions defined by Amazon GameLift
You can specify the following actions in the
Action
element of an IAM policy statement. Use policies to grant permissions to perform an operation in AWS. When you use an action in a policy, you usually allow or deny access to the API operation or CLI command with the same name. However, in some cases, a single action controls access to more than one operation. Alternatively, some operations require several different actions.
The
Resource types
column of the Actions table indicates whether each action supports resource-level permissions. If there is no value for this column, you must specify all resources ("*") to which the policy applies in the
Resource
element of your policy statement. If the column includes a resource type, then you can specify an ARN of that type in a statement with that action. If the action has one or more required resources, the caller must have permission to use the action with those resources. Required resources are indicated in the table with an asterisk (*). If you limit resource access with the
Resource
element in an IAM policy, you must include an ARN or pattern for each required resource type. Some actions support multiple resource types. If the resource type is optional (not indicated as required), then you can choose to use one of the optional resource types.
The
Condition keys
column of the Actions table includes keys that you can specify in a policy statement's
Condition
element. For more information on the condition keys that are associated with resources for the service, see the
Condition keys
column of the Resource types table.
For details about the columns in the following table, see Actions table .
| Actions | Description | Access level | Resource types (*required) | Condition keys | Dependent actions |
|---|---|---|---|---|---|
| AcceptMatch | Grants permission to register player acceptance or rejection of a proposed FlexMatch match | Write | |||
| ClaimGameServer | Grants permission to locate and reserve a game server to host a new game session | Write | |||
| CreateAlias | Grants permission to define a new alias for a fleet | Write | |||
| CreateBuild | Grants permission to create a new game build using files stored in an Amazon S3 bucket | Write | |||
| CreateFleet | Grants permission to create a new fleet of computing resources to run your game servers | Write | |||
| CreateFleetLocations | Grants permission to specify additional locations for a fleet | Write | |||
| CreateGameServerGroup | Grants permission to create a new game server group, set up a corresponding Auto Scaling group, and launche instances to host game servers | Write | |||
| CreateGameSession | Grants permission to start a new game session on a specified fleet | Write | |||
| CreateGameSessionQueue | Grants permission to set up a new queue for processing game session placement requests | Write | |||
| CreateLocation | Grants permission to define a new location for a fleet | Write | |||
| CreateMatchmakingConfiguration | Grants permission to create a new FlexMatch matchmaker | Write | |||
| CreateMatchmakingRuleSet | Grants permission to create a new matchmaking rule set for FlexMatch | Write | |||
| CreatePlayerSession | Grants permission to reserve an available game session slot for a player | Write | |||
| CreatePlayerSessions | Grants permission to reserve available game session slots for multiple players | Write | |||
| CreateScript | Grants permission to create a new Realtime Servers script | Write | |||
| CreateVpcPeeringAuthorization | Grants permission to allow GameLift to create or delete a peering connection between a GameLift fleet VPC and a VPC on another AWS account | Write | |||
| CreateVpcPeeringConnection | Grants permission to establish a peering connection between your GameLift fleet VPC and a VPC on another account | Write | |||
| DeleteAlias | Grants permission to delete an alias | Write | |||
| DeleteBuild | Grants permission to delete a game build | Write | |||
| DeleteFleet | Grants permission to delete an empty fleet | Write | |||
| DeleteFleetLocations | Grants permission to delete locations for a fleet | Write | |||
| DeleteGameServerGroup | Grants permission to permanently delete a game server group and terminate FleetIQ activity for the corresponding Auto Scaling group | Write | |||
| DeleteGameSessionQueue | Grants permission to delete an existing game session queue | Write | |||
| DeleteLocation | Grants permission to delete a location | Write | |||
| DeleteMatchmakingConfiguration | Grants permission to delete an existing FlexMatch matchmaker | Write | |||
| DeleteMatchmakingRuleSet | Grants permission to delete an existing FlexMatch matchmaking rule set | Write | |||
| DeleteScalingPolicy | Grants permission to delete a set of auto-scaling rules | Write | |||
| DeleteScript | Grants permission to delete a Realtime Servers script | Write | |||
| DeleteVpcPeeringAuthorization | Grants permission to cancel a VPC peering authorization | Write | |||
| DeleteVpcPeeringConnection | Grants permission to remove a peering connection between VPCs | Write | |||
| DeregisterCompute | Grants permission to deregister a compute against a fleet | Write | |||
| DeregisterGameServer | Grants permission to remove a game server from a game server group | Write | |||
| DescribeAlias | Grants permission to retrieve properties for an alias | Read | |||
| DescribeBuild | Grants permission to retrieve properties for a game build | Read | |||
| DescribeCompute | Grants permission to retrieve general properties of the compute such as ARN, fleet details, SDK endpoints, and location | Read | |||
| DescribeEC2InstanceLimits | Grants permission to retrieve the maximum allowed and current usage for EC2 instance types | Read | |||
| DescribeFleetAttributes | Grants permission to retrieve general properties, including status, for fleets | Read | |||
| DescribeFleetCapacity | Grants permission to retrieve the current capacity setting for fleets | Read | |||
| DescribeFleetEvents | Grants permission to retrieve entries from a fleet's event log | Read | |||
| DescribeFleetLocationAttributes | Grants permission to retrieve general properties, including statuses, for a fleet's locations | Read | |||
| DescribeFleetLocationCapacity | Grants permission to retrieve the current capacity setting for a fleet's location | Read | |||
| DescribeFleetLocationUtilization | Grants permission to retrieve utilization statistics for fleet's location | Read | |||
| DescribeFleetPortSettings | Grants permission to retrieve the inbound connection permissions for a fleet | Read | |||
| DescribeFleetUtilization | Grants permission to retrieve utilization statistics for fleets | Read | |||
| DescribeGameServer | Grants permission to retrieve properties for a game server | Read | |||
| DescribeGameServerGroup | Grants permission to retrieve properties for a game server group | Read | |||
| DescribeGameServerInstances | Grants permission to retrieve the status of EC2 instances in a game server group | Read | |||
| DescribeGameSessionDetails | Grants permission to retrieve properties for game sessions in a fleet, including the protection policy | Read | |||
| DescribeGameSessionPlacement | Grants permission to retrieve details of a game session placement request | Read | |||
| DescribeGameSessionQueues | Grants permission to retrieve properties for game session queues | Read | |||
| DescribeGameSessions | Grants permission to retrieve properties for game sessions in a fleet | Read | |||
| DescribeInstances | Grants permission to retrieve information about instances in a fleet | Read | |||
| DescribeMatchmaking | Grants permission to retrieve details of matchmaking tickets | Read | |||
| DescribeMatchmakingConfigurations | Grants permission to retrieve properties for FlexMatch matchmakers | Read | |||
| DescribeMatchmakingRuleSets | Grants permission to retrieve properties for FlexMatch matchmaking rule sets | Read | |||
| DescribePlayerSessions | Grants permission to retrieve properties for player sessions in a game session | Read | |||
| DescribeRuntimeConfiguration | Grants permission to retrieve the current runtime configuration for a fleet | Read | |||
| DescribeScalingPolicies | Grants permission to retrieve all scaling policies that are applied to a fleet | Read | |||
| DescribeScript | Grants permission to retrieve properties for a Realtime Servers script | Read | |||
| DescribeVpcPeeringAuthorizations | Grants permission to retrieve valid VPC peering authorizations | Read | |||
| DescribeVpcPeeringConnections | Grants permission to retrieve details on active or pending VPC peering connections | Read | |||
| GetComputeAccess | Grants permission to retrieve access credentials of the compute | Read | |||
| GetComputeAuthToken | Grants permission to retrieve an authorization token for a compute and fleet to use in game server processes | Read | |||
| GetGameSessionLogUrl | Grants permission to retrieve the location of stored logs for a game session | Read | |||
| GetInstanceAccess | Grants permission to request remote access to a specified fleet instance | Read | |||
| ListAliases | Grants permission to retrieve all aliases that are defined in the current Region | List | |||
| ListBuilds | Grants permission to retrieve all game build in the current Region | List | |||
| ListCompute | Grants permission to retrieve all compute resources in the current Region | List | |||
| ListFleets | Grants permission to retrieve a list of fleet IDs for all fleets in the current Region | List | |||
| ListGameServerGroups | Grants permission to retrieve all game server groups that are defined in the current Region | List | |||
| ListGameServers | Grants permission to retrieve all game servers that are currently running in a game server group | List | |||
| ListLocations | Grants permission to retrieve all locations in this account | List | |||
| ListScripts | Grants permission to retrieve properties for all Realtime Servers scripts in the current region | List | |||
| ListTagsForResource | Grants permission to retrieve tags for GameLift resources | Read | |||
| PutScalingPolicy | Grants permission to create or update a fleet auto-scaling policy | Write | |||
| RegisterCompute | Grants permission to register a compute against a fleet | Write | |||
| RegisterGameServer | Grants permission to notify GameLift FleetIQ when a new game server is ready to host gameplay | Write | |||
| RequestUploadCredentials | Grants permission to retrieve fresh upload credentials to use when uploading a new game build | Read | |||
| ResolveAlias | Grants permission to retrieve the fleet ID associated with an alias | Read | |||
| ResumeGameServerGroup | Grants permission to reinstate suspended FleetIQ activity for a game server group | Write | |||
| SearchGameSessions | Grants permission to retrieve game sessions that match a set of search criteria | Read | |||
| StartFleetActions | Grants permission to resume auto-scaling activity on a fleet after it was suspended with StopFleetActions() | Write | |||
| StartGameSessionPlacement | Grants permission to send a game session placement request to a game session queue | Write | |||
| StartMatchBackfill | Grants permission to request FlexMatch matchmaking to fill available player slots in an existing game session | Write | |||
| StartMatchmaking | Grants permission to request FlexMatch matchmaking for one or a group of players and initiate game session placement | Write | |||
| StopFleetActions | Grants permission to suspend auto-scaling activity on a fleet | Write | |||
| StopGameSessionPlacement | Grants permission to cancel a game session placement request that is in progress | Write | |||
| StopMatchmaking | Grants permission to cancel a matchmaking or match backfill request that is in progress | Write | |||
| SuspendGameServerGroup | Grants permission to temporarily stop FleetIQ activity for a game server group | Write | |||
| TagResource | Grants permission to tag GameLift resources | Tagging | |||
| UntagResource | Grants permission to untag GameLift resources | Tagging | |||
| UpdateAlias | Grants permission to update the properties of an existing alias | Write | |||
| UpdateBuild | Grants permission to update an existing build's metadata | Write | |||
| UpdateFleetAttributes | Grants permission to update the general properties of an existing fleet | Write | |||
| UpdateFleetCapacity | Grants permission to adjust a fleet's capacity settings | Write | |||
| UpdateFleetPortSettings | Grants permission to adjust a fleet's port settings | Write | |||
| UpdateGameServer | Grants permission to change game server properties, health status, or utilization status | Write | |||
| UpdateGameServerGroup | Grants permission to update properties for game server group, including allowed instance types | Write | |||
| UpdateGameSession | Grants permission to update the properties of an existing game session | Write | |||
| UpdateGameSessionQueue | Grants permission to update properties of an existing game session queue | Write | |||
| UpdateMatchmakingConfiguration | Grants permission to update properties of an existing FlexMatch matchmaking configuration | Write | |||
| UpdateRuntimeConfiguration | Grants permission to update how server processes are configured on instances in an existing fleet | Write | |||
| UpdateScript | Grants permission to update the metadata and content of an existing Realtime Servers script | Write | |||
| ValidateMatchmakingRuleSet | Grants permission to validate the syntax of a FlexMatch matchmaking rule set | Read |
Resource types defined by Amazon GameLift
The following resource types are defined by this service and can be used in the
Resource
element of IAM permission policy statements. Each action in the
Actions table
identifies the resource types that can be specified with that action. A resource type can also define which condition keys you can include in a policy. These keys are displayed in the last column of the Resource types table. For details about the columns in the following table, see
Resource types table
.
| Resource types | ARN | Condition keys |
|---|---|---|
| alias |
arn:$
{
Partition}:gamelift:$
{
Region}::alias/$
{
AliasId}
|
|
| build |
arn:$
{
Partition}:gamelift:$
{
Region}:$
{
Account}:build/$
{
BuildId}
|
|
| fleet |
arn:$
{
Partition}:gamelift:$
{
Region}:$
{
Account}:fleet/$
{
FleetId}
|
|
| gameServerGroup |
arn:$
{
Partition}:gamelift:$
{
Region}:$
{
Account}:gameservergroup/$
{
GameServerGroupName}
|
|
| gameSessionQueue |
arn:$
{
Partition}:gamelift:$
{
Region}:$
{
Account}:gamesessionqueue/$
{
GameSessionQueueName}
|
|
| location |
arn:$
{
Partition}:gamelift:$
{
Region}:$
{
Account}:location/$
{
LocationId}
|
|
| matchmakingConfiguration |
arn:$
{
Partition}:gamelift:$
{
Region}:$
{
Account}:matchmakingconfiguration/$
{
MatchmakingConfigurationName}
|
|
| matchmakingRuleSet |
arn:$
{
Partition}:gamelift:$
{
Region}:$
{
Account}:matchmakingruleset/$
{
MatchmakingRuleSetName}
|
|
| script |
arn:$
{
Partition}:gamelift:$
{
Region}:$
{
Account}:script/$
{
ScriptId}
|
Condition keys for Amazon GameLift
Amazon GameLift defines the following condition keys that can be used in the
Condition
element of an IAM policy. You can use these keys to further refine the conditions under which the policy statement applies. For details about the columns in the following table, see
Condition keys table
.
To view the global condition keys that are available to all services, see Available global condition keys .
| Condition keys | Description | Type |
|---|---|---|
| aws:RequestTag/${TagKey} | Filters access by the tags that are passed in the request | String |
| aws:ResourceTag/${TagKey} | Filters access by the tags associated with the resource | String |
| aws:TagKeys | Filters access by the tag keys that are passed in the request | ArrayOfString |


📲 How to Install
Using CocoaPods
Edit your Podfile
and specify the dependency:
pod 'MLCardForm'
🌟 Features
- [x] Easy to integrate
- [x] PCI compliance (We do not save anything)
🐒 How to use
1 - Import into project
import MLCardForm
2 - Create an instance of MLCardFormBuilder with your PublicKey
or PrivateKey
and your `siteId
let builder = MLCardFormBuilder(publicKey: yourPublicKey, siteId: yourSiteId, lifeCycleDelegate: self)
3 - Implement MLCardFormLifeCycleDelegate
to get notified about MLCardForm events.
extension YourViewController: MLCardFormLifeCycleDelegate {
func didAddCard(cardID: String) {
// The card has been added. You can pop the `MLCardFormViewController` here.
}
func didFailAddCard() {
// There was an error adding the card.
}
}
4 - Use the builder as parameter to get an instance of MLCardFormViewController.
let cardFormVC = MLCardForm(builder: builder).setupController()
5 - Push the instance of MLCardFormViewController to your stack.
navigationController?.pushViewController(cardFormVC, animated: true)
💡 Advanced features
📈 Tracking
We provide MLCardFormTrackerDelegate
protocol to notify each tracking event. You can subscribe to this protocol using MLCardFormBuilder
@objc public protocol MLCardFormTrackerDelegate: NSObjectProtocol {
func trackScreen(screenName: String, extraParams: [String: Any]?)
func trackEvent(screenName: String?, action: String, result: String?, extraParams: [String: Any]?)
}
😉 Next steps
- [ ] Bitrise integration
- [ ] UI XCtest
- [ ] SwiftLint
🔮 Project Example
This project include an example project using MLCardForm
.
Enter to path: card-form-ios/Example
and run pod install command. After that, you can open Example_CardForm.xcworkspace
📋 Supported OS & SDK Versions
- iOS 10.0+
- Swift 5
- xCode 10+
- @Objc full compatibility
❤ Feedback
This is an open source project, so feel free to contribute. How? -> Fork this project and propose your own fixes, suggestions and open a pull request with the changes.
👨🏻💻 Authors
- Esteban Boffa
- Eric Ertl
- Juan Sanzone
👮🏻 License
Copyright 2019 Mercadolibre Developers
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.