Last updated 31 January, 19
PLEASE READ THESE TERMS AND CONDITIONS CAREFULLY
These Terms and Conditions constitute a legally binding agreement made between you, whether personally or on behalf of an entity (“you”) and Damiebi Moore Dagogo Hart (“we,” “us” or “our”), concerning your access to and use of the Color Match mobile app as well as any other media form, media channel, website or mobile application related, linked, or otherwise connected thereto (collectively, the “Site”). You agree that by accessing the Site, you have read, understood, and agree to be bound by all of these Terms and Conditions Use.
Supplemental terms and conditions or documents that may be posted on the Site from time to time are hereby expressly incorporated herein by reference. We reserve the right, in our sole discretion, to make changes or modifications to these Terms and Conditions at any time and for any reason. We will alert you about any changes by updating the “Last updated” date of these Terms and Conditions and you waive any right to receive specific notice of each such change. It is your responsibility to periodically review these Terms and Conditions to stay informed of updates. You will be subject to, and will be deemed to have been made aware of and to have accepted, the changes in any revised Terms and Conditions by your continued use of the Site after the date such revised Terms are posted.
The information provided on the Site is not intended for distribution to or use by any person or entity in any jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to access the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, if and to the extent local laws are applicable.
All users who are minors in the jurisdiction in which they reside (generally under the age of 18) must have the permission of, and be directly supervised by, their parent or guardian to use the Site. If you are a minor, you must have your parent or guardian read and agree to these Terms of Use prior to you using the Site.
Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the “Content”) and the trademarks, service marks, and logos contained therein (the “Marks”) are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition laws of the United States, foreign jurisdictions, and international conventions. The Content and the Marks are provided on the Site “AS IS” for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission.
Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, Content and the Marks.
By using the Site, you represent and warrant that: (1) you have the legal capacity and you agree to comply with these Terms of Use; (2) not a minor in the jurisdiction in which you reside, or if a minor, you have received parental permission to use the Site; (3) you will not access the Site through automated or non-human means, whether through a bot, script or otherwise; (4) you will not use the Site for any illegal or unauthorized purpose; and (5) your use of the Site will not violate any applicable law or regulation.
You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us.
As a user of the Site, you agree not to:
USER GENERATED CONTRIBUTIONS
The Site may invite you to chat, contribute to, or participate in blogs, message boards, online forums, and other functionality, and may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated as non-confidential and non-proprietary. When you create or make available any Contributions, you thereby represent and warrant that:
Any use of the Site in violation of the foregoing violates these Terms of Use and may result in, among other things, termination or suspension of your rights to use the Site.
By posting your Contributions to any part of the Site, you automatically grant, and you represent and warrant that you have the right to grant, to us an unrestricted, unlimited, irrevocable, perpetual, non-exclusive, transferable, royalty-free, fully-paid, worldwide right, and license to host, use, copy, reproduce, disclose, sell, resell, publish, broadcast, retitle, archive, store, cache, publicly perform, publicly display, reformat, translate, transmit, excerpt (in whole or in part), and distribute such Contributions (including, without limitation, your image and voice) for any purpose, commercial, advertising, or otherwise, and to prepare derivative works of, or incorporate into other works, such Contributions, and grant and authorize sublicenses of the foregoing. The use and distribution may occur in any media formats and through any media channels.
This license will apply to any form, media, or technology now known or hereafter developed, and includes our use of your name, company name, and franchise name, as applicable, and any of the trademarks, service marks, trade names, logos, and personal and commercial images you provide.
We do not assert any ownership over your Contributions. You retain full ownership of all of your Contributions and any intellectual property rights or other proprietary rights associated with your Contributions. We are not liable for any statements or representations in your Contributions provided by you in any area on the Site. You are solely responsible for your Contributions to the Site and you expressly agree to exonerate us from any and all responsibility and to refrain from any legal action against us regarding your Contributions.
We have the right, in our sole and absolute discretion, (1) to edit, redact, or otherwise change any Contributions; (2) to re-categorize any Contributions to place them in more appropriate locations on the Site; and (3) to pre-screen or delete any Contributions at any time and for any reason, without notice. We have no obligation to monitor your Contributions.
We may provide you areas on the Site to leave reviews or ratings. When posting a review, you must comply with the following criteria: (1) you should have firsthand experience with the person/entity being reviewed; (2) your reviews should not contain offensive profanity, or abusive, racist, offensive, or hate language; (3) your reviews should not contain discriminatory references based on religion, race, gender, national origin, age, marital status, sexual orientation, or disability; (4) your reviews should not contain references to illegal activity; (5) you should not be affiliated with competitors if posting negative reviews; (6) you should not make any conclusions as to the legality of conduct; (7) you may not post any false or misleading statements; and (8) you may not organize a campaign encouraging others to post reviews, whether positive or negative.
We may accept, reject, or remove reviews in our sole discretion. We have absolutely no obligation to screen reviews or to delete reviews, even if anyone considers reviews objectionable or inaccurate. Reviews are not endorsed by us, and do not necessarily represent our opinions or the views of any of our affiliates or partners. We do not assume liability for any review or for any claims, liabilities, or losses resulting from any review. By posting a review, you hereby grant to us a perpetual, non-exclusive, worldwide, royalty-free, fully-paid, assignable, and sublicensable right and license to reproduce, modify, translate, transmit by any means, display, perform, and/or distribute all content relating to reviews.
If you access the Site via a mobile application, then we grant you a revocable, non-exclusive, non-transferable, limited right to install and use the mobile application on wireless electronic devices owned or controlled by you, and to access and use the mobile application on such devices strictly in accordance with the terms and conditions of this mobile application license contained in these Terms of Use. You shall not: (1) decompile, reverse engineer, disassemble, attempt to derive the source code of, or decrypt the application; (2) make any modification, adaptation, improvement, enhancement, translation, or derivative work from the application; (3) violate any applicable laws, rules, or regulations in connection with your access or use of the application; (4) remove, alter, or obscure any proprietary notice (including any notice of copyright or trademark) posted by us or the licensors of the application; (5) use the application for any revenue generating endeavor, commercial enterprise, or other purpose for which it is not designed or intended; (6) make the application available over a network or other environment permitting access or use by multiple devices or users at the same time; (7) use the application for creating a product, service, or software that is, directly or indirectly, competitive with or in any way a substitute for the application; (8) use the application to send automated queries to any website or to send any unsolicited commercial e-mail; or (9) use any proprietary information or any of our interfaces or our other intellectual property in the design, development, manufacture, licensing, or distribution of any applications, accessories, or devices for use with the application.
The following terms apply when you use a mobile application obtained from either the Apple Store or Google Play (each an “App Distributor”) to access the Site: (1) the license granted to you for our mobile application is limited to a non-transferable license to use the application on a device that utilizes the Apple iOS or Android operating systems, as applicable, and in accordance with the usage rules set forth in the applicable App Distributor’s terms of service; (2) we are responsible for providing any maintenance and support services with respect to the mobile application as specified in the terms and conditions of this mobile application license contained in these Terms of Use or as otherwise required under applicable law, and you acknowledge that each App Distributor has no obligation whatsoever to furnish any maintenance and support services with respect to the mobile application; (3) in the event of any failure of the mobile application to conform to any applicable warranty, you may notify the applicable App Distributor, and the App Distributor, in accordance with its terms and policies, may refund the purchase price, if any, paid for the mobile application, and to the maximum extent permitted by applicable law, the App Distributor will have no other warranty obligation whatsoever with respect to the mobile application; (4) you represent and warrant that (i) you are not located in a country that is subject to a U.S. government embargo, or that has been designated by the U.S. government as a “terrorist supporting” country and (ii) you are not listed on any U.S. government list of prohibited or restricted parties; (5) you must comply with applicable third-party terms of agreement when using the mobile application, e.g., if you have a VoIP application, then you must not be in violation of their wireless data service agreement when using the mobile application; and (6) you acknowledge and agree that the App Distributors are third-party beneficiaries of the terms and conditions in this mobile application license contained in these Terms of Use, and that each App Distributor will have the right (and will be deemed to have accepted the right) to enforce the terms and conditions in this mobile application license contained in these Terms of Use against you as a third-party beneficiary thereof.
You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Site ("Submissions") provided by you to us are non-confidential and shall become our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to you. You hereby waive all moral rights to any such Submissions, and you hereby warrant that any such Submissions are original with you or that you have the right to submit such Submissions. You agree there shall be no recourse against us for any alleged or actual infringement or misappropriation of any proprietary right in your Submissions.
The Site may contain (or you may be sent via the Site) links to other websites ("Third-Party Websites") as well as articles, photographs, text, graphics, pictures, designs, music, sound, video, information, applications, software, and other content or items belonging to or originating from third parties ("Third-Party Content"). Such Third-Party Websites and Third-Party Content are not investigated, monitored, or checked for accuracy, appropriateness, or completeness by us, and we are not responsible for any Third-Party Websites accessed through the Site or any Third-Party Content posted on, available through, or installed from the Site, including the content, accuracy, offensiveness, opinions, reliability, privacy practices, or other policies of or contained in the Third-Party Websites or the Third-Party Content. Inclusion of, linking to, or permitting the use or installation of any Third-Party Websites or any Third-Party Content does not imply approval or endorsement thereof by us. If you decide to leave the Site and access the Third-Party Websites or to use or install any Third-Party Content, you do so at your own risk, and you should be aware these Terms of Use no longer govern. You should review the applicable terms and policies, including privacy and data gathering practices, of any website to which you navigate from the Site or relating to any applications you use or install from the Site. Any purchases you make through Third-Party Websites will be through other websites and from other companies, and we take no responsibility whatsoever in relation to such purchases which are exclusively between you and the applicable third party. You agree and acknowledge that we do not endorse the products or services offered on Third-Party Websites and you shall hold us harmless from any harm caused by your purchase of such products or services. Additionally, you shall hold us harmless from any losses sustained by you or harm caused to you relating to or resulting in any way from any Third-Party Content or any contact with Third-Party Websites.
We allow advertisers to display their advertisements and other information in certain areas of the Site, such as sidebar advertisements or banner advertisements. If you are an advertiser, you shall take full responsibility for any advertisements you place on the Site and any services provided on the Site or products sold through those advertisements. Further, as an advertiser, you warrant and represent that you possess all rights and authority to place advertisements on the Site, including, but not limited to, intellectual property rights, publicity rights, and contractual rights. We simply provide the space to place such advertisements, and we have no other relationship with advertisers.
We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site.
We care about data privacy and security. Please review our Privacy Policy https://mooredh.github.io/color-match-privacy-policy. By using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use. Please be advised the Site is hosted in the United States. If you access the Site from the European Union, Asia, or any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws in the United States, then through your continued use of the Site or Services, you are transferring your data to the United States, and you expressly consent to have your data transferred to and processed in the United States.
We respect the intellectual property rights of others. If you believe that any material available on or through the Site infringes upon any copyright you own or control, please immediately notify our Designated Copyright Agent using the contact information provided below (a “Notification”). A copy of your Notification will be sent to the person who posted or stored the material addressed in the Notification. Please be advised that pursuant to federal law you may be held liable for damages if you make material misrepresentations in a Notification. Thus, if you are not sure that material located on or linked to by the Site infringes your copyright, you should consider first contacting an attorney.
All Notifications should meet the requirements of DMCA 17 U.S.C. § 512(c)(3) and include the following information: (1) A physical or electronic signature of a person authorized to act on behalf of the owner of an exclusive right that is allegedly infringed; (2) identification of the copyrighted work claimed to have been infringed, or, if multiple copyrighted works on the Site are covered by the Notification, a representative list of such works on the Site; (3) identification of the material that is claimed to be infringing or to be the subject of infringing activity and that is to be removed or access to which is to be disabled, and information reasonably sufficient to permit us to locate the material; (4) information reasonably sufficient to permit us to contact the complaining party, such as an address, telephone number, and, if available, an email address at which the complaining party may be contacted; (5) a statement that the complaining party has a good faith belief that use of the material in the manner complained of is not authorized by the copyright owner, its agent, or the law; and (6) a statement that the information in the notification is accurate, and under penalty of perjury, that the complaining party is authorized to act on behalf of the owner of an exclusive right that is allegedly infringed upon.
If you believe your own copyrighted material has been removed from the Site as a result of a mistake or misidentification, you may submit a written counter notification to us using the contact information provided below (a “Counter Notification”). To be an effective Counter Notification under the DMCA, your Counter Notification must include substantially the following: (1) identification of the material that has been removed or disabled and the location at which the material appeared before it was removed or disabled; (2) a statement that you consent to the jurisdiction of the Federal District Court in which your address is located, or if your address is outside the United States, for any judicial district in which we are located; (3) a statement that you will accept service of process from the party that filed the Notification or the party's agent; (4) your name, address, and telephone number; (5) a statement under penalty of perjury that you have a good faith belief that the material in question was removed or disabled as a result of a mistake or misidentification of the material to be removed or disabled; and (6) your physical or electronic signature.
If you send us a valid, written Counter Notification meeting the requirements described above, we will restore your removed or disabled material, unless we first receive notice from the party filing the Notification informing us that such party has filed a court action to restrain you from engaging in infringing activity related to the material in question. Please note that if you materially misrepresent that the disabled or removed content was removed by mistake or misidentification, you may be liable for damages, including costs and attorney's fees. Filing a false Counter Notification constitutes perjury.
Designated Copyright Agent
Dagogo Hart Damiebi Moore
Attn: Copyright Agent
6, Ore Close, Off Ogunlana Drive
Surulere, Lagos
101283
<EMAIL_ADDRESS>These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR DELETE ANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.
If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress.
We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Site without notice at any time. We will not be liable to you or any third party for any modification, price change, suspension, or discontinuance of the Site.
We cannot guarantee the Site will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site at any time or for any reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site during any downtime or discontinuance of the Site. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or to supply any corrections, updates, or releases in connection therewith.
These Terms of Use and your use of the Site are governed by and construed in accordance with the laws of the State of Lagos applicable to agreements made and to be entirely performed within the State/Commonwealth of Lagos, without regard to its conflict of law principles.
To expedite resolution and control the cost of any dispute, controversy, or claim related to these Terms of Use (each a "Dispute" and collectively, the “Disputes”) brought by either you or us (individually, a “Party” and collectively, the “Parties”), the Parties agree to first attempt to negotiate any Dispute (except those Disputes expressly provided below) informally for at least 30 days before initiating arbitration. Such informal negotiations commence upon written notice from one Party to the other Party.
If the Parties are unable to resolve a Dispute through informal negotiations, the Dispute (except those Disputes expressly excluded below) will be finally and exclusively resolved by binding arbitration.  The arbitration shall be commenced and conducted under the Commercial Arbitration Rules of the American Arbitration Association ("AAA") and, where appropriate, the AAA’s Supplementary Procedures for Consumer Related Disputes ("AAA Consumer Rules"), both of which are available at the AAA website www.adr.org. Your arbitration fees and your share of arbitrator compensation shall be governed by the AAA Consumer Rules and, where appropriate, limited by the AAA Consumer Rules. The arbitration may be conducted in person, through the submission of documents, by phone, or online. The arbitrator will make a decision in writing, but need not provide a statement of reasons unless requested by either Party. The arbitrator must follow applicable law, and any award may be challenged if the arbitrator fails to do so. Except where otherwise required by the applicable AAA rules or applicable law, the arbitration will take place in Lagos, Nigeria. Except as otherwise provided herein, the Parties may litigate in court to compel arbitration, stay proceedings pending arbitration, or to confirm, modify, vacate, or enter judgment on the award entered by the arbitrator.
If for any reason, a Dispute proceeds in court rather than arbitration, the Dispute shall be commenced or prosecuted in the state and federal courts located in Lagos, Nigeria, and the Parties hereby consent to, and waive all defenses of lack of personal jurisdiction, and forum non conveniens with respect to venue and jurisdiction in such state and federal courts.Application of the United Nations Convention on Contracts for the International Sale of Goods and the the Uniform Computer Information Transaction Act (UCITA) are excluded from these Terms of Use.
In no event shall any Dispute brought by either Party related in any way to the Site be commenced more than 2 years after the cause of action arose. If this provision is found to be illegal or unenforceable, then neither Party will elect to arbitrate any Dispute falling within that portion of this provision found to be illegal or unenforceable and such Dispute shall be decided by a court of competent jurisdiction within the courts listed for jurisdiction above, and the Parties agree to submit to the personal jurisdiction of that court.
The Parties agree that any arbitration shall be limited to the Dispute between the Parties individually. To the full extent permitted by law, (a) no arbitration shall be joined with any other proceeding; (b) there is no right or authority for any Dispute to be arbitrated on a class-action basis or to utilize class action procedures; and (c) there is no right or authority for any Dispute to be brought in a purported representative capacity on behalf of the general public or any other persons.
The Parties agree that the following Disputes are not subject to the above provisions concerning informal negotiations and binding arbitration: (a) any Disputes seeking to enforce or protect, or concerning the validity of, any of the intellectual property rights of a Party; (b) any Dispute related to, or arising from, allegations of theft, piracy, invasion of privacy, or unauthorized use; and (c) any claim for injunctive relief. If this provision is found to be illegal or unenforceable, then neither Party will elect to arbitrate any Dispute falling within that portion of this provision found to be illegal or unenforceable and such Dispute shall be decided by a court of competent jurisdiction within the courts listed for jurisdiction above, and the Parties agree to submit to the personal jurisdiction of that court.
There may be information on the Site that contains typographical errors, inaccuracies, or omissions that may relate to the Site, including descriptions, pricing, availability, and various other information. We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice.
THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS.    WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES.

You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys’ fees and expenses, made by any third party due to or arising out of: (1) your Contributions; (2) use of the Site; (3) breach of these Terms of Use; (4) any breach of your representations and warranties set forth in these Terms of Use; (5) your violation of the rights of a third party, including but not limited to intellectual property rights; or (6) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it.
We will maintain certain data that you transmit to the Site for the purpose of managing the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data.
Visiting the Site, sending us emails, and completing online forms constitute electronic communications. You consent to receive electronic communications, and you agree that all agreements, notices, disclosures, and other communications we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communication be in writing. YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE. You hereby waive any rights or requirements under any statutes, regulations, rules, ordinances, or other laws in any jurisdiction which require an original signature or delivery or retention of non-electronic records, or to payments or the granting of credits by any means other than electronic means.
If any complaint with us is not satisfactorily resolved, you can contact the Complaint Assistance Unit of the Division of Consumer Services of the California Department of Consumer Affairs in writing at 1625 North Market Blvd., Suite N 112, Sacramento, California 95834 or by telephone at<PHONE_NUMBER> or<PHONE_NUMBER>.
These Terms of Use and any policies or operating rules posted by us on the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use.
In order to resolve a complaint regarding the Site or to receive further information regarding use of the Site, please contact us at:
Dagogo Hart Damiebi Moore
6, Ore Close Off Ogunlana Drive
Surulere, Lagos
Nigeria
101283
+234<PHONE_NUMBER>
mooredh99@gmail.com


{% extends "conduct/base.html" %} {% block title %}Django Code of Conduct - Reporting Guide{% endblock %} {% block og_title %}Django Code of Conduct - Reporting Guide{% endblock %} {% block og_description %}A guide to reporting issues in the community{% endblock %} {% block content %}
If you believe someone is violating the code of conduct we ask that you report it to the Django Software Foundation by emailing<EMAIL_ADDRESS>All reports will be kept confidential. In some cases we may determine that a public statement will need to be made. If that's the case, the identities of all victims and reporters will remain confidential unless those individuals instruct us otherwise.
If you believe anyone is in physical danger, please notify appropriate law enforcement first. If you are unsure what law enforcement agency is appropriate, please include this in your report and we will attempt to notify them.
If you are unsure whether the incident is a violation, or whether the space where it happened is covered by this Code of Conduct, we encourage you to still report it. We would much rather have a few extra reports where we decide to take no action, rather than miss a report of an actual violation. We do not look negatively on you if we find the incident is not a violation. And knowing about incidents that are not violations, or happen outside our spaces, can also help us to improve the Code of Conduct or the processes surrounding it.
In your report please include:
You will receive an email from the DSF Code of Conduct Working Group acknowledging receipt immediately. We promise to acknowledge receipt within 24 hours (and will aim for much quicker than that).
The working group will immediately meet to review the incident and determine:
If this is determined to be an ongoing incident or a threat to physical safety, the working groups' immediate priority will be to protect everyone involved. This means we may delay an "official" response until we believe that the situation has ended and that everyone is physically safe.
Once the working group has a complete account of the events they will make a decision as to how to response. Responses may include:
We'll respond within one week to the person who filed the report with either a resolution or an explanation of why the situation is not yet resolved.
Once we've determined our final action, we'll contact the original reporter to let them know what action (if any) we'll be taking. We'll take into account feedback from the reporter on the appropriateness of our response, but we don't guarantee we'll act on it.
Finally, the Working Group will make a report on the situation to the DSF board. The board may choose to a public report of the incident.
If your report concerns a current member of the Code of Conduct committee, you may not feel comfortable sending your report to the committee, as all members will see the report.
In that case, you can make a report directly to any or all of the current (vice/co) chairs of the Code of Conduct committee. Their e-mail addresses are listed on the Code of Conduct Committee page. The chairs will follow the usual enforcement process with the other members, but will exclude the member(s) that the report concerns from any discussion or decision making.
If your report concerns all current (vice/co) chairs of the committee, please send your report directly to the DSF board at<EMAIL_ADDRESS>instead.
Any of the parties directly involved or affected can request reconsideration of the committee’s decision. To make such a request, contact the DSF Board at<EMAIL_ADDRESS>with your request and motivation and the DSF board will review the case.
{% endblock %}


public class Model
extends java.lang.Object
| Modifier and Type | Field and Description |
|---|---|
static double |
alphaM
Sensitivity parameter of probability of detecting the medical with respect to the number of medical conditions (see eq:probabilityCorrectDiagnosis)
|
static repast.simphony.context.Context<java.lang.Object> |
context
Context of the simulation
|
static int |
counterIllness
Counter variable for unique illness IDs
|
static int |
counterInsurance
Counter variable for unique insurance IDs
|
static java.util.HashMap<java.lang.Integer,java.lang.Double[]> |
expHCE
Matrix with the expected health care expenditures imported from an external file:
Key: Age in years as integer Value: Double[] with expected health care expenditures [women,men] |
static java.util.HashMap<Illness,java.lang.Integer> |
incidence
Map with existing Illnesses in model and their respective incidence rate values (reset every 1 period)
|
static java.util.ArrayList<Illness> |
listIllnesses
List of all existing Illnesses in model
|
static int |
memory
Memory for expected cost calculations (weeks)
|
static java.util.HashMap<Illness,java.lang.Integer> |
prevalence
Map with existing Illnesses in model and their respective prevalence rate values reset every 52 periods)
|
static double[] |
wtpParams
alpha, beta and gamma from willingness-to-pay equation
|
| Constructor and Description |
|---|
Model() |
| Modifier and Type | Method and Description |
|---|---|
static void |
addValueToLog(java.lang.Integer[] keyArr,
java.lang.Double newVal,
java.util.HashMap<java.lang.Integer[],java.lang.Double> log)
This is a generic method in Model Class that can be called from any other class to add a a value to a log database
|
static double |
getAvgExpenPop(int gender,
int age) |
static double |
getP95ExpenPop(int gender,
int age) |
double |
getStatistic(int statistic,
int gender,
int age)
Auxiliar method: returns the value of required statistic
|
static double |
getVarianceExpenPop(int gender,
int age) |
void |
stepResetModel()
This method prints the current tick in the model and resets (to 0) the incidence rates for the current tick and everz 52 ticks the prevalence tick
|
void |
updateGlobalLogExpenditures() |
public static int counterInsurance
public static int counterIllness
public static repast.simphony.context.Context<java.lang.Object> context
public static java.util.ArrayList<Illness> listIllnesses
public static java.util.HashMap<java.lang.Integer,java.lang.Double[]> expHCE
public static java.util.HashMap<Illness,java.lang.Integer> incidence
public static java.util.HashMap<Illness,java.lang.Integer> prevalence
public static double[] wtpParams
public static double alphaM
public static int memory
public void stepResetModel()
public void updateGlobalLogExpenditures()
public static void addValueToLog(java.lang.Integer[] keyArr, java.lang.Double newVal, java.util.HashMap<java.lang.Integer[],java.lang.Double> log)
keyArr
- array of integers with the index values for the value that is to be addednewVal
- (double) value to be added to the loglog
- Log database where the value is to be addedpublic static double getAvgExpenPop(int gender, int age)
gender
- Gender (integer)age
- (weeks)public static double getVarianceExpenPop(int gender, int age)
gender
- (integer)age
- (weeks)public static double getP95ExpenPop(int gender, int age)
gender
- (int)age
- (weeks)public double getStatistic(int statistic, int gender, int age)
statistic:
- 1 for mean, 2 for sd, 3 for 95 percentilegender:
- 1 female, 0 maleage:
- integer


RUSHMORE A film review by Matt Williams
RATING: * * * out of * * * *
No, this is not a film about the famous South Dakota presidential monument. Rather, Rushmore is a unique comedy about two somewhat obnoxious, but endearing, characters and their quest for happiness.
Max Fischer (Jason Schwartzman) is one of the most outgoing students at Rushmore Academy. He is involved in every club and group that the school offers, and has single-handedly established many more. However, despite his astounding extra-curricular efforts, academically he is also one of the worst students in Rushmore's history.
Max's latest project involves a new first grade teacher at Rushmore Academy, Miss Cross (Olivia Williams). Max is instantly smitten with her and, ignoring the age difference, sets out to woo her with all his resources.
To help out, Max enlists the aid of both his young protégé (Mason Gamble) and a kindred spirit, the tycoon Herman Blume (Bill Murray). Herman, despite having amassed a great fortune, is surrounded by unhappiness.  Max's unbridled enthusiasm and determination makes Herman feel alive again. And the presence of Miss Cross stirs up other, long-dormant, emotions within him...emotions which may run contrary to Max's plans.
It is rare for a film to create a character as unique and unexpected as Max Fischer. A lesser movie would have simply pegged Max as a misunderstood genius or a goofball loser. However, screenwriters Wes Anderson and Owen Wilson never let us forget Max's central incompetence, yet all the while endowing him with a degree of chutzpah rarely glimpsed before.
Jason Schwartzman is a welcome new face, and tackles the role of Max Fischer with gusto. He's able to go toe to toe with any of the more established actors in the film, and always comes away the winner.
In a more familiar role, Bill Murray is right at home as the unusual millionaire. He never devolves into all-out wackiness, but rather delivers a much more focused performance than he has in years.
As the woman who comes between these two, Olivia Williams has a much more passive role. She simply doesn't have much to do, other than be the object of desire. However, it is a role which she plays well, limited as it is.
With its unique characters and unusual plot, Rushmore is a truly distinctive comedy. It never becomes the sort of film that will have you convulsing with laughter, but it certainly will keep you smiling the whole way through.
Copyright 1999 Matt Williams
- Matt Williams<EMAIL_ADDRESS>Reviewer for Cinematter: http://www.cinematter.com Home of nearly 700 reviews, and information on over 750 upcoming releases
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


MOST READ BLOGS
Face Care Tips: 10 Dos and Don'ts for Naturally Beautiful Skin
The flawless, blemish and acne-free skin that you've always desired is no more a dream, but reality.
Here are brilliant face care tips to get that glow you've always wanted. Browse through our good looks secrets, tackle your skincare issues and follow our tricks regularly to get beautiful skin naturally. Excited, happy or stressed, it's your face that gives you away. So we've rounded up expert tips on daily skin care, keeping blemishes at bay and enhancing your natural good looks. Whether you have time for intensive skin care or not, pamper yourself by acing the basics.
Why God, why? Is flawless skin just too much to ask for? A late night leads to dark circles
in the morning. Got an upcoming party?  Yes yes, we are well aware of the basic CTM technique Cleanser-Toner-Moisturizer. We try every new face wash, sunscreen, anti-ageing cream that hits the market.  And we are ever so willing to try anything under the sun to get beautiful skin. But it is not an overnight miracle.
Lucky for you, we make face-care easy.
10 Dos and Don'ts for Beautiful Skin
1. The Golden Rule
Do: Make sure you always (and we mean always) remove your makeup before hitting the sheets. The skin needs to breathe overnight. And makeup prevents that, as leaving it on overnight clogs the pores which may cause blemishes and/or blackheads. Don't possess a makeup remover? Just put some olive oil on a cotton pad and gently massage the oil onto your face to get rid of the makeup and dirt.
Don't: Forget that exfoliation is indispensable. At least once or twice a week, exfoliate your skin to remove the layers of dead skin, sure to leave you with a more healthy glow and brighter skin. You can also apply a paste of walnut in powder form with yogurt to exfoliate your skin, as the antioxidants present in walnuts help remove dirt and promote radiant skin.
2. Sun and Skin
Do: Apply sunscreen with SPF of at least 15 that blocks both UVA and UVB rays. Since a lifetime of sun exposure can cause wrinkles, age spots and other skin problems, you have to protect your skin from the sun. Make sure the label reads noncomedogenic or nonacnegenic so that the product does not tend to block pores.
Don't: Skip the sunscreen, whether it's cloudy or cold outside (no excuses). If you're heading to a beach or around reflective surfaces like snow or ice, lather your skin up with some more sunscreen with SPF of at least 30.
3. You are What You Eat
Do: Keep a note of what you put on your plate. Eat fresh fruits, greens, sufficient protein and vitamins. A diet rich in vitamin C and low in fats and sugar promotes radiant skin. Consider a low-sugar diet, which can keep insulin levels down, allowing cells to maintain a healthy balance.
(Food that's Good for Your Skin)
"Don't: Eat spicy and fermented foods, salt, citrus fruits, fried food. Instead favour blander foods such as rice, oatmeal and applesauce, advises American author and Ayurvedic physician, Vasant Lad, in The Complete Book of Ayurvedic Home Remedies.
4. Sweat It Out!
Do: Exercise regularly. Running, jogging and yoga will give your body the necessary blood circulation, and also accelerate the cleansing process of your entire body. You will notice a glow on your face after working out. Racing against time? Just take a brisk walk around the block.
Don't: Skip skincare before and after a workout. Apply a toner to help minimize oil production before heading out. Exfoliate after, and then apply shea butter or olive oil to moisturize the skin.
5. Prettiness Sleep
Do: Try to sleep at least 8 hours every night.  So don't risk it. You can also apply honey on your face twice or thrice a week to naturally soothe and heal your skin.
Don't: Forget to wash and moisturize your face before going to bed, recommends Dr. Rahul Nagar, Dermatologist, Max Hospitals. For dry skin, use milder cleansers that are free from alcohol. Apply lots of moisturizer, and avoid hot water as it dries out the skin excessively.
6. H2O to The Rescue
Do: Hydrate yourself. Drink lots of water daily, at least 8 glasses if not more. Also, eats fruits and vegetables that have a high water content such as watermelon, cucumber, orange, strawberry, grapefruit and cantaloupe. Ayurvedic physician, Vasant Lad recommends to drink water from a blue coloured bottle, since it has a cooling effect.
Don't: Ignore rose water. It helps prevent and reduce eye puffiness in the morning, maintains pH balance and naturally hydrates your skin if you spritz it on during the day.
7.  Face packs that contain multani mitti (fuller's earth) work really well too. After cleansing, pat dry and apply a lotion which contains benzoyl peroxide, suggests Dr. Zaheer Ahmed, Dermatologist, Max Hospitals. Benzoyl peroxide appears to be effective due to its antibacterial actions.
Don't: Pop pimples because it can lead to more swelling, redness, and even scarring. Feel a pimple is on its way? Just clean the area with rose water, and place a chilled green tea bag for 10 minutes. Also, if you wear glasses or sunglasses, make sure you clean them frequently to keep oil from clogging the pores around your eyes and nose.
8. Go Back to Your Roots
Do: Use Ayurvedic scrubs to nourish the skin, and help it breathe better.  Yes, the secrets of good looks lies in ancient Ayurveda.
Don't: Neglect the basics. Make Sudarshan Kriya your good looks mantra. Yes, it's that easy. Just breathing right could rid you of spots and pimples. Nidhi Gureja, Art of Living, says Sudarshan Kriya
is a breathing technique which incorporates specific natural rhythms of the breath that harmonize the body, mind and emotions. This helps releasing accumulated stresses, and each individual's experience is different.
9. Spa Day Everyday?
Do: Have a regular skin care regimen. For dry skin, use a fresh cherry mask. Apply the pulp of fresh cherries on your face before going to bed. Leave for 15 minutes and wash with lukewarm water, adds American author Vasant Lad.
Don't: Forget to pamper yourself. A gentle facial massage with oils could work wonders. Depending on your skin type, choose oils from mustard, coconut, almond or Kumkadi as they are excellent nourishing agents which help to get glowing skin. Better still switch on some soothing instrumental music. After 20 minutes, what do you have? Beautiful skin and a relaxed you.
10. Healthy Habits
Do: Take out time for yourself, and try to avoid stress as much as possible. Have you ever noticed that when you are stressed, you tend to break out more? This is because stress causes your body to produce cortisol and other hormones, making the skin more oily. Practice stress management techniques like breathing exercises, yoga and meditation. The more you meditate, the more you radiate.
For just 5 minutes a day, perform a few facial exercises. You can jut out your lower lip in such a way that wrinkles are created on the chin, then lower your chin to your chest. Another exercise that works wonders is to look up towards the ceiling and pout. It stretches out the muscles making the skin more firm. 18 till I die, why not?
Youre dressed to perfection, yet you need something to complete the look. Your smile! While we spend so much time and energy on honing our bodies and looks, we forget to express our inner joy and happiness. Keeping a smile on your face will help maintain the tone of your facial muscles and skin. People may say you look 10 years younger than you are!, adds the Ayurvedic physician, Vasant Lad.
Credits to: food.ndtv


Functions are prewritten code that can be used to avoid rewriting the same code over and over.
Allow you to write code once, and use it many times.
Use the same code with different arguments to produce different results.
A JavaScript function is defined with the function keyword, followed by a name, followed by parentheses(). The code to be executed, by the function, is placed inside curly brackets: {}
Start off a paragraph, put demo as the id.
Start off with a function
Add a name
Add parentheses() with some variable names
Write the code you want to execute inside {curly brackets}
Then you need to "call" the function
Number:


In the previous two posts in this series we introduced the Food Cart Problem. We want a plan for stocking our Food Cart which will maximizes our revenue. In the first post we discussed the foods that we can stock and the restrictions we are operating under. We introduced a simple heuristic for stocking the food cart and created a simulation in order to validate what our expected revenue is.
In the second post we formulated a Mathematical Planning model to create a plan to maximize our expected revenue. We validated that the plan found with Mathematical Planning is superior to the simple heuristic in the first post through simulations and statistical tests.
In this final post of the series, we will create a simple Machine Learning model to make predictions of expected demand using the weather conditions as predictors. We will combine the tools of Mathematical Planning and Machine Learning to create an even more profitable algorithm for stocking the food cart.
Note: To see all the code for this post, go here
Generating Test Data
Since this problem is a hypothetical, we need to generate data to train a Machine Learning model on. The demand for food will be modeled using a Poisson Distribution but the mean of the demand, the $\lambda$, depend on the weather. We are going to generate data that follows a simple model.
$$ \begin{align} \text{Demand Mean} = \ &\text{Baseline Demand} \ + \\ &\text{Temperature Coefficient} \times \text{temperature} \ + \\ &\text{Condition Offset} \end{align} $$
Each food will have a baseline amount of demand, Baseline Demand. The demand for the food will go up or down depending on the temperature. The weather condition (Sunny, Cloudy, Rainy) will also bump the demand up or down in a stepwise manner. We will generate several months’ worth of weather conditions and then use them to generate our historical demand data.
We want to make our code clear and maintainable so we create a domain model. Let’s create types to describe a day, temperature, conditions, and weather.
type Day = Day of int
type Temperature = Temperature of float
type Condition =
| Sunny
| Cloudy
| Rainy
type Weather = {
Condition : Condition
Temperature : Temperature
}
Now we can create the type which holds the parameters for our demand model.
type DemandModelParameters = {
BaselineDemand : float
TemperatureCoefficient : float
ConditionOffsets : Map<Condition, float>
}
Our model will take the Weather
as an input and simulate a random Demand
based on the statistical model we just proposed. Let’s create a type which describes this simulation result.
[<Measure>] type serving
type Demand = Demand of float<serving>
type DemandSimulationResult = {
Day : Day
Weather : Weather
Demand : Demand
}
Now we can write a function which takes the DemandModelParameters
, Weather
and gives us a random Demand
that follows our model. In statistics this is often called “sampling from the distribution” so we will call our function sample
.
module Demand =
let sample (rng: Random) (parameters: DemandModelParameters) (weather: Weather) =
let (Temperature temperature) = weather.Temperature
let lambda = parameters.BaselineDemand +
temperature * parameters.TemperatureCoefficient +
parameters.ConditionOffsets.[weather.Condition]
let result = Poisson.Sample (rng, lambda)
Demand (float result * 1.0<serving>)
The Poisson.Sample
function returns an int
which isn’t what we will want for training our Machine Learning model, so we go ahead and turn it into a float
and attach Units of Measure. Units of Measure are incredibly valuable in tracking what numbers mean but they can add a little bit of boilerplate in some cases. I find it worth the clarity they bring.
We want to add a couple more functions for generating random Temperature
, Condition
and Weather
.
module Condition =
let private conditions =
[
0, Sunny
1, Cloudy
2, Rainy
] |> Map
let sample (rng: Random) =
conditions.[rng.Next(0, 2)]
module Temperature =
let sample (rng: Random) (Temperature minTemperature) (Temperature maxTemperature) =
rng.NextDouble() * (maxTemperature - minTemperature) + minTemperature
|> Math.Round
|> Temperature
module Weather =
let sample (rng: Random) (minTemperature: Temperature) (maxTemperature: Temperature) : Weather =
let condition = Condition.sample rng
let temperature = Temperature.sample rng minTemperature maxTemperature
{
Condition = condition
Temperature = temperature
}
Well, this is great. We now have a way of generating data for which we can train a ML model on. Let’s do this for Burgers.
// Parameters for generating samples data
let burgerParameters = {
BaselineDemand = 337.5
TemperatureCoefficient = 3.5
ConditionOffsets = Map [ Sunny, -30.0; Cloudy, 0.0; Rainy, 30.0 ]
}
let rng = System.Random(123)
// Number of days for which to generate data
let numberOfDays = 100
let minTemp = Temperature 40.0
let maxTemp = Temperature 110.0
let pastDays =
[1..numberOfDays]
|> List.map Day
let pastWeather =
pastDays
|> List.map (fun day -> {| Day = day; Weather = Simulation.Weather.sample rng minTemp maxTemp |})
let burgerDemand =
pastWeather
|> List.map (fun d -> {| d with Demand = Simulation.Demand.sample rng burgerParameters d.Weather |})
|> List.map (fun d -> DemandSimulationResult.create d.Day d.Weather d.Demand )
We have now simulated 100 days’ worth of Burger demand based on the weather for that day. We now want to use this data to train a Machine Learning model so that we can make predictions of Demand going forward and better optimize our inventory at the beginning of the day.
Training a Machine Learning Model
We will use ML.NET to create a simple ML Model to predict demand. The ML.NET API can use many different data sources as inputs. For our case, we will save our historical weather and demand data to a local .csv
file. I am not giong to show the boilerplate for saving the data but you can find it in the full code example.
The ML.NET API has you define types for your training data that it uses for parsing the input. In our case we will have delimited records in a .csv
file.
[<CLIMutable>]
type DemandData = {
[<LoadColumn(1)>]
Temperature : single
[<LoadColumn(2)>]
Condition : string
[<LoadColumn(3); ColumnName("Label")>]
Demand : single
}
The [<LoadColumn(n)>]
attribute tells ML.NET which column in the source data corresponds to that field. Our saved data looks like this:
| Day | Temperature | Condition | Demand |
|---|---|---|---|
| 1 | 104 | Cloudy | 706 |
| 2 | 97 | Cloudy | 645 |
| 3 | 43 | Cloudy | 492 |
| 4 | 50 | Sunny | 457 |
We don’t need the data in the Day
column so we are ignoring it. The [<ColumnName("Label")>]
is what tells ML.NET the field that I am trying to predict. It will use the other fields as inputs to try to predict Demand
. We want to create a function which takes an input file, trains a model, and then saves the model locally. ML.NET allows you to save trained models as .zip
files. This makes it easy to load a pre-existing model to use in your code.
We will be working with several different types of files and I find it useful to create some simple types to represent that.
type DataFile = DataFile of string
type ModelFile = ModelFile of string
type OutputDirectory = OutputDirectory of string
A DataFile
is a filepath to the .csv
which holds our data. A ModelFile
is the .zip
which holds the persisted form of our ML model for predicting demand. The OutputDirectory
is just a directory where we want to put data and models.
We can now put together a simple train
function which will take our input data, train an ML model, and then save it for us to use later. We will also report the metrics from the training.
open Microsoft.ML
open Microsoft.ML.Data
open Types
let private reportMetrics (metrics: RegressionMetrics) =
// show the metrics
printfn "Model metrics:"
printfn " RMSE:%f" metrics.RootMeanSquaredError
printfn " MSE: %f" metrics.MeanSquaredError
printfn " MAE: %f" metrics.MeanAbsoluteError
let train (OutputDirectory outputDir) (modelName: string) (inputFile) =
let context = MLContext()
let dataView = context.Data.LoadFromTextFile<DemandData> (inputFile, hasHeader = true, separatorChar = ',')
let partitions = context.Data.TrainTestSplit(dataView, testFraction = 0.2)
let pipeline =
EstimatorChain()
.Append(context.Transforms.Categorical.OneHotEncoding("Condition"))
.Append(context.Transforms.NormalizeMeanVariance("Temperature"))
.Append(context.Transforms.Concatenate("Features", "Condition", "Temperature"))
.Append(context.Regression.Trainers.Sdca())
let model = partitions.TrainSet |> pipeline.Fit
let metrics = partitions.TestSet |> model.Transform |> context.Regression.Evaluate
reportMetrics metrics |> ignore
System.IO.Directory.CreateDirectory outputDir |> ignore
let outputFile = $"{outputDir}/%O{modelName}.zip"
context.Model.Save (model, dataView.Schema, outputFile)
ModelFile outputFile
The part where we define the shape of our model is in the definition of pipeline
.
let pipeline =
EstimatorChain()
.Append(context.Transforms.Categorical.OneHotEncoding("Condition"))
.Append(context.Transforms.NormalizeMeanVariance("Temperature"))
.Append(context.Transforms.Concatenate("Features", "Condition", "Temperature"))
.Append(context.Regression.Trainers.Sdca())
We know that the Condition
data is categorical so we need to encode it in a way that the training code understands. One-hot Encoding represents categories as a set of Boolean values. It’s a similar concept to binary encoding of numbers but they are not the same, so don’t mix them up!
We then take the step to normalize the mean and variance of the Temperature
data. ML training really likes to have the data lie between -1.0 and 1.0. This protects against features appearing more important than they are. Our temperature values are between 40.0 and 110.0 which could cause a problem for the training code.
We now combine our One-hot encoded Condition
column with the normalized Temperature
data using Transforms.Concatenate
.
.Append(context.Transforms.Concatenate("Features", "Condition", "Temperature"))
What this does is create a new column of data called “Features”. ML.NET wants there to be a “Features” column for it to use as the input to the training algorithm. “Features” is the default name for the input data of a training model. It can be configured but I am going with the default.
The final part of the definition for our pipeline
is the type of model we want it to fit. In our case we are performing regression since we are trying to predict continuous data, Demand
in this case. ML.NET has a large number of possible algorithms. In our case we are using the Stochastic Dual Coordinate Ascent (SDCA) method to fit a linear model.
.Append(context.Regression.Trainers.Sdca())
We now train the model using the training data set and evaluate the metrics with the test data.
let model = partitions.TrainSet |> pipeline.Fit
let metrics = partitions.TestSet |> model.Transform |> context.Regression.Evaluate
reportMetrics metrics |> ignore
If we run our Burger data through we will see the following metrics reported
let burgerDemandModelFile =
Training.train outputDirectory "BurgerDemandModel" burgerDemandDataFile
> Model metrics:
RMSE:19.713698
MSE: 388.629880
MAE: 13.099727
MAE
stands for Mean Absolute Error. It is the average of how far our prediction is off from the correct value. MSE
stands for Mean Squared Error and is the average of the square of the error. RMSE
is the Root Mean Square Error which is the square root of MSE
. Which one of these is the most important? It depends. When I’m working with someone, I want to understand the implications of a bad prediction. That would guide which metrics I tune for.
There are many great resources out there on Machine Learning, so I will not go in depth here. For now, let’s say that our model looks good enough and see how it performs when we combine it with our Mathematical Planning model.
MP + ML = $$$
To evaluate how our new predictor performs, we will combine it with our Mathematical Planning model. Let’s simulate 30 days into the future and compare the three approaches: Simple Heuristic, Mathematical Planning, Mathematical Planning + Machine Learning.
We generate 30 days into the future. For each day we sample from the possible weather conditions. We then take the Weather
for each day and generate a sample of the demand for each food from our underlying statistical model. We store the result in a Map<Food, Demand>
to simplify some of our later code.
To make our code cleaner we are going to add a new function to our Simulation
module for the demand for all the foods in each day.
module DayDemand =
let sample (rng: Random) (parameters: Map<Food, DemandModelParameters>) (weather: Weather) =
parameters
|> Map.map (fun food demandParameters -> Demand.sample rng demandParameters weather)
It’s a small thing, but I have rarely regretted making my code clean and simple. Now we will generate 30 days’ worth of weather data.
let numberFutureDays = 30
// Let's create some future data that we will evaluate our different techniques against
let futureDays =
[1..numberFutureDays]
|> List.map (fun d -> {| Day = Day d; Weather = Simulation.Weather.sample rng minTemp maxTemp |})
With 30 days’ worth of future weather data, we will now generate theoretical demand on those days. We are “cheating” in that we have control of the generation of demand data. In real world scenarios there are some additional complexities that need to be dealt with. My desire is to show the concepts. Future posts can deal with the idiosyncrasies. We now generate the demand that would be observed on those days.
// Let's create some future data that we will evaluate our different techniques against
let futureDays =
futureWeather
|> List.map (fun d -> {| d with FoodDemand = Simulation.DayDemand.sample rng foodParameters d.Weather |})
We now have a list of days where we have the weather on that day and the demand. We can now calculate what our revenue would have been using the simple heuristic from the first blog post. We create a function which takes the planned inventory and the demand on a day to calculate the revenue.
module RevenueModel =
open Types
let evaluate (revenuePerServing: Map<Food, RevenuePerServing>) (inventoryPlan: Map<Food, Inventory>) (demand: Map<Food, Demand>) =
inventoryPlan
|> Map.toSeq
|> Seq.sumBy (fun (food, inventory) -> revenuePerServing.[food] * (Sales.calculate inventory demand.[food]))
The RevenueModel.evaluate
function calculates what the revenue would have been on a day given the inventory plan that was used and the demand that was realized. We now use our simple heuristic plan for each of the future 30 days to see what our total revenue would have been.
let simpleHueristicPlan =
Map [
Burger, Inventory 0.0<serving>
Pizza, Inventory 900.0<serving>
Taco, Inventory 466.0<serving>
]
let simpleHeuristicRevenue =
futureDays
|> List.sumBy (fun d -> RevenueModel.evaluate revenuePerServing simpleHueristicPlan d.FoodDemand)
simpleHeuristicRevenue
comes to $62,247.20. This will be our baseline. We now use the inventory plan we found using Mathematical Planning and find the revenue we would achieve.
let optimizedPlan =
Map [
Burger, Inventory 572.0<serving>
Pizza, Inventory 355.0<serving>
Taco, Inventory 669.0<serving>
]
let optimizedPlanRevenue =
futureDays
|> List.sumBy (fun d -> RevenueModel.evaluate revenuePerServing optimizedPlan d.FoodDemand)
optimizedPlanRevenue
comes to $65,462.50, a 2.58% improvement. That will add up to significant additional revenue as the business scales. We now want to bring Mathematical Planning and Machine Learning together. We will use our Machine Learning models to predict the expected demand given the weather as input. The result of the prediction will be used as the input to the Mathematical Planning model which will suggest the ideal amount of inventory to carry.
I am going to gloss over some details that I will address in a future post at this point. I defined two new interfaces which cleaned up the code, IDemandPredictor
and IInventoryOptimizer
. They are simple interfaces I used to wrap the ML.NET model and the inventory optimization model. The full example code shows everything but for the sake of keeping this blog post a reasonable length, I left out these nuances.
In this code burgerPredictor
, pizzaPredictor
and tacoPredictor
are instances of IDemandPredictor
which wrap the ML.NET models we trained earlier. planOptimizer
is an IInventoryOptimizer
that wraps our Mathematical Planning model.
let predictorPlusOptimizerRevenue =
futureDays
|> List.map (fun d -> {| d with DemandRates = Map [ Burger, burgerPredictor.predict d.Weather
Pizza, pizzaPredictor.predict d.Weather
Taco, tacoPredictor.predict d.Weather
] |})
|> List.map (fun d -> {| d with Plan = planOptimizer.plan d.DemandRates |})
|> List.sumBy (fun d -> RevenueModel.evaluate revenuePerServing d.Plan d.FoodDemand)
predictorPlusOptimizerRevenue
comes to $67,214.30, a 7.98% improvement from our baseline. Here are the results side by side:
| Metric | Simple Heuristic | MP | MP + ML |
|---|---|---|---|
| Revenue | $62,247.20 | $65,462.50 | $67,214.30 |
| % Improvement | - | 2.58% | 7.98% |
Next Steps
I hope this illustrates a simple use case for combining the power of Mathematical Planning and Machine Learning. The techniques are highly complementary and lead to highly effective solutions which are far better than either technique in isolation. We can improve this solution in many ways. We spent no time on tuning the Machine Learning model. It would be nice to have real world data for this problem. The challenges is that the real world data sets I have access to are proprietary which is why I generated my own.
In future posts I hope to explore how to tune Machine Learning models to protect against specific failure modes by tuning for different metrics. We are also assuming that we restock the food cart every morning. We likely need to make inventory decisions several days ahead of time which introduces some interesting optimization challenges we will explore in the future.
Let me know if there are any problems you would like me to explore!
Please send me an email at<EMAIL_ADDRESS>if you have any questions and subscribe so you can stay on top new posts and products I am offering.


Please scroll down to see more about us.
We build responsive site so that anybody in any devices can use it.
On time Fast delivery
We build Ready to use site so it makes easy.


All planets and their moons, all dwarfs planets and the main asteroids.
Dimensions, mass, flattening, gravity, inclination and temperature.
Semimajor axis, perihelion, aphelion, eccentricity, orbital period and orbital speed.
Discovery circumstances, discoverer(s), year discovered and provisional designation.
For every body, all its satellites and the ability to navigate between satellites and the star.
Known count of each object type : planets, moons, asteroids, comets.
Added of 15 Jupiter's moons.
Added of 62 Saturne's moons.
Added bodyType.
Values massValue, massExponent, volValue, volExponent are permitted in Filters.
isplanet can be used with true or false value.
Added Mean temperature and orbital characteristics Mean anomaly, Longitude of ascending node and Argument of perihelion.
New endpoint /knowcount
Return the known count of each object type.
Added axial tilt for each planet.
Fix mean radius of the Sun.
Semimajor axis, perihelion and aphelion are now bigint.
Adding 20 Saturn's satellites.
Added temporary designations and English names for all bodies where those informations was missing.
brutData and datas are replaced by rowData and data.
Adding data : volume, density, gravity, escape speed, radius, dimension, perihelion, aphelion and rotation & revolution speed.
Adding mass with two values : mass and the exp 10nkg.
Creation of this website to describe the API. With release notes, API documentation, return data description and Swagger interface.
Adding asteroids and TNO. English names are authorized as keys with a 301 redirection to the French name.
First version of API online with planets and moons. The swagger documentation is online too.
No API with all Solar System data seems to exist. It's time to create one, isn't it?
An URL returns all bodies in the database with all data:
https://api.le-systeme-solaire.net/rest/bodies/
An URL returns all data of one body:
https://api.le-systeme-solaire.net/rest/bodies/{id}
An URL returns all known count for each object type :
https://api.le-systeme-solaire.net/rest/knowncount/
An URL returns known count for the object type :
https://api.le-systeme-solaire.net/rest/knowncount/{id}
| # | Parameter | Action |
|---|---|---|
| 1 | data | The data you want to retrieve (comma separated). Example: data=id,semimajorAxis,isPlanet |
| 2 | exclude | One or more data you want to exclude (comma separated). Example: exclude=id,isPlanet |
| 3 | order | The sort order data you want to use and the sort direction (comma separated). Example: order=semimajorAxis,asc NB : Only one data is authorized. |
| 4 | page | Page number (number>=1) and page size (size>=1 with 20 as default) (comma separated). Example: page=1,10 NB: You cannot use "page" without "order"! |
| 5 | rowData | Transform the objects in records. Example: rowData=true NB: This can also be done client-side in JavaScript! NB: The default value is false. |
| 6 | filter[] | Filters to be applied. Each filter consists of a data, an operator and a value (comma separated). Example: filter[]=id,eq,mars Accepted operators are:
NB: if any filter is invalid, all filters will be ignored. |
| 7 | satisfy | Should all filters match (default). Example: satisfy=any NB: the only authorized value is any |
| # | Name | Type | Content |
|---|---|---|---|
| 1 | id | string | Id of body in the API. |
| 2 | name | string | Body name (in french). |
| 3 | englishName | string | English name. |
| 4 | isPlanet | boolean | Is it a planet? |
| 5 | moons [{moon, rel}, ...] |
array [{string, string}, ...] |
Table with all moons. moon: Moon name, rel: moon API url. |
| 6 | semimajorAxis | integer | Semimajor Axis of the body in kilometres. |
| 7 | perihelion | integer | Perihelion in kilometres. |
| 8 | aphelion | integer | Aphelion in kilometres. |
| 9 | eccentricity | decimal | Orbital eccentricity. |
| 10 | inclination | decimal | Orbital inclination in degrees. |
| 11 | mass {massValue, massExponent} |
object {number, integer} |
Boby mass in 10n kg. massValue: body mass, massExponent: exponent 10. |
| 12 | vol {volValue, volExponent} |
object {number, integer} |
Body volume in 10n km3. volValue: body volume, volExponent: exponant 10. |
| 13 | density | decimal | Body density in g.cm3. |
| 14 | gravity | decimal | Surface gravity in m.s-2. |
| 15 | escape | decimal | Escape speed in m.s-1. |
| 16 | meanRadius | integer | Mean radius in kilometres. |
| 17 | equaRadius | integer | Equatorial radius in kilometres. |
| 18 | polarRadius | integer | Polar radius in kilometres. |
| 19 | escape | flattening | Flattening. |
| 20 | dimension | string | Body dimension on the 3 axes X, Y et Z for non-spherical bodies. |
| 21 | sideralOrbit | decimal | Sideral orbital time for body around another one (the Sun or a planet) in earth day. |
| 22 | sideralRotation | decimal | Sideral rotation, necessary time to turn around itself, in hour. |
| 23 | aroundPlanet {planet, rel} |
object {string, string} |
For a moon, the planet around which it is orbiting. planet: Planet name, rel: planet API url. |
| 24 | discoveredBy | string | Discovery name. |
| 25 | discoveryDate | string | Discovery date. |
| 26 | alternativeName | string | Temporary name. |
| 27 | axialTilt | decimal | Axial tilt. |
| 28 | avgTemp | integer | Mean temperature in K. |
| 29 | mainAnomaly | decimal | Mean anomaly in degree. |
| 30 | argPeriapsis | decimal | Argument of perihelion in degree. |
| 31 | longAscNode | decimal | Longitude of ascending node in degree. |
| 32 | bodyType | string | The body type : Star, Planet, Dwarf Planet, Asteroid, Comet or Moon. |
| # | Parameter | Action |
|---|---|---|
| 1 | rowData | Transform the objects in records. Example: rowData=true NB: This can also be done client-side in JavaScript! NB: The default value is false. |
| # | Name | Type | Content |
|---|---|---|---|
| 1 | id | string | Object type. |
| 2 | knowncount | integer | Known count. |
| 3 | updateDate | string | Update date of the Known count. |


Executive Council
Camions of Care at UAB is a registered student organization established in the spring of 2016.
We are led by an Executive Council of undergraduate students, who are elected each year.
As the VP of Communications, Aileen is passionate about spreading our message through various mediums, especially through digital media and graphic design.
She is a senior majoring in Philosophy along with minors in Spanish and Public Health. Aileen is also an intern for UAB Digital Media. In the future, she hopes to brighten smiles in the community as a dentist. You can find Aileen hiking Birmingham trails and perusing antique stores in search of creative inspiration.
Michelle is a senior double majoring in Neuroscience and Philosophy, along with a minor in Public Health.
As President and Founder of Camions of Care at UAB, Michelle is a strong believer in serving the underserved and advocating for greater awareness regarding women’s health. In the future, she aspires to go to medical school and study to become a practicing physician. Michelle is usually found in the local bookstore reading dystopian novels or writing poetry.
Clara is currently a junior Molecular Biology and Philosophy double major at the University of Alabama at Birmingham. As the VP of Operations, she keeps record of all organization business and maintains internal communications. In her free time, Clara enjoys swimming with the UAB Swim Club and volunteering at the Mitchell’s Place in Birmingham supporting individuals with Autism Spectrum Disorders. In the future, she would like to study medicine and become a physician.
Kristin is currently a junior majoring in Biology and Music with a minor in Chemistry. As the VP of Finance, she wants to ensure that all fundraising goes towards making the greatest impact in the community. In the future, she hopes to take her management skills with her when she opens her own pediatric practice. Most days you can find her singing to herself while walking between the music building and her research lab.
Sandhya is a junior majoring in Public Health with a concentration in Global Health. She has always been a service oriented individual and with the position of co-VP of Distribution, she hopes to directly contribute to the enhancement of the Birmingham community by helping provide women with essential feminine hygiene products. Sandhya hopes to one day work with animals and wildlife conservation.
Alisa is currently a senior majoring in Healthcare Management. As co-VP of Distribution, she has the opportunity to reach out into the community to allow us to give back to women in need. Alisa helps coordinate care package drop offs with local shelters. She hopes to one day go to law school and study Health or Family Law. You can find her exploring Birmingham, especially for local coffee shops or restaurants.
Natalie is currently a sophomore majoring in Psychology. As Health Education Chair, she hopes to reach out to girls in the Birmingham community to help them better understand puberty, women's health, and health safety. Her passion for health education started in high school and continues in her college years. You can find Natalie either jogging or enjoying Birmingham's fine restaurants.


Touch this screen to begin. Then use these buttons to control the view from the Mars Rover.
help
arrow_back_ios
arrow_forward_ios
arrow_back_ios
arrow_back_ios
+
-
Next image
Previous image


Filter by Type
None
{{ type | titlecase }}
Filter by Abilities
{{currentAbilities ? currentAbilities[0]: ''}}
1" class="additional-selection">
(+{{currentAbilities.length - 1}} {{currentAbilities?.length === 2 ? 'other' : 'others'}})
{{ ability | titlecase }}


PRIVACY POLICY
GENERAL INFORMATION ON DATA PROCESSING ACTIVITIES Relating to THE OPERATIONS OF JUNCTION OY
Junction Oy (“the Company”, “we”) organizes hackathon events and competitions as well as technology conferences, speaker events and other possible meetups (“Event”) and provides the hackjunction.com, hackjunction.org, hackjunction.net, hackjunction.fi, junction.fi websites (“Websites”) relating to such Events. For these purposes the Company may collect and process personal data of the users of the Websites and the participants, applicants and other visitors of the Events.
The purpose of this Privacy Policy is to clarify and inform the applicants, participants, and other visitors of the Events and the users of the Websites (all the individuals mentioned above referred to as “Users”) on how their personal data is processed and stored.
In this Privacy Policy, the Websites and the services offered on the Websites are collectively referred to as the “Services".
This Privacy Policy may be updated if required in order to reflect the changes in data processing practices or otherwise. The current version can be found on the Websites.
Please note that this Privacy Policy only covers data processing carried out by Junction Oy as data controller. Our third-party licensees organizing Junction or JUNCTIONx events are typically the controller of the participant data collected in relation to such events.
1. CONTROLLER’s Contact details
Name: Junction Oy
Business ID: 2823785-1
Correspondence address: PL1188, 00101 Helsinki, Finland
E-mail<EMAIL_ADDRESS>Contact person:
Name: Iiro Nurmi
Telephone: +358 45 6717792,
E-mail<EMAIL_ADDRESS>2. PERSONAL DATA PROCESSED AND SOURCES OF DATA
User data and analytics data
We collect two types of information from the Users: User Data and Analytics Data. Although we do not normally use Analytics Data to identify individuals, sometimes individuals can be recognized from it, either alone or when combined or linked with User Data. In such situations, Analytics Data can also be considered to be personal data under applicable laws and we will treat the combined data as personal data.
The Company may collect and process the following User Data received from the Users via registration/application forms completed on the Websites or by email, User Data received from the Users on the phone or in person at the Events and User Data generated by us:
- First name
- Last name
- Phone number
- Date of birth
- Postal address
- Pictures
- Roles and responsibilities in the company the User represents
- Information regarding skills, education and professional backround
- CV’s and other certificates
- Customer feedback received via email or in person
- Information relating to approvals and rejections of the User’s Event applications
- Data transfer consents and prohibitions
- Marketing opt-ins and opt-outs
- Any other information provided by the User on the Website or at the Events, such as information relating to allergies and special diets .
In addition to the above mentioned, we obtain User Data from registers maintained by the authorities and customer default registers as well as other reliable private and public registers.
Analytics Data we gather in connection with the use of our Website includes for example the following data: (i) your IP address; (ii) device and device identification number; (iii) operating system; (iv) time of visit; (v) browser type and version; (vi) language setting.
Cookies
We use various technologies to collect and store Analytics Data and other information when the Users visit the Websites, including cookies and web beacons.
Cookies are small text files sent and saved on your device that allows us to identify visitors of the Websites and facilitate the use of the Services and to create aggregate information of our visitors. This helps us to improve the Services and better serve our Users. The cookies will not harm your device or files. We use cookies to tailor the Services and the information we provide in accordance with the individual interests of our Users.
The Users may choose to set their web browser to refuse cookies, or to alert when cookies are being sent. For example, the following links provide information on how to adjust the cookie settings on some popular browsers:
Please note that some parts of the Services may not function properly if use of cookies is refused.
A web beacon is a technology that allows identifying readers of websites and emails e.g. for identifying whether an email has been read.
Web analytics services
The Websites use Google Analytics and other web analytics services to compile Analytics Data and reports on visitor usage and to help us improve the Services. For an overview of Google Analytics, please visit Google Analytics. It is possible to opt-out of Google Analytics with the following browser add-on tool: Google Analytics opt-out add-on.
3. PURPOSES AND LEGITIMATE GROUNDS FOR PROCESSING OF PERSONAL DATA
Purposes
There are several purposes for the processing of personal data by the Company:
To provide and develop the Services and to organize and develop the Events
We process personal data in the first place to be able to offer the Services to the Users, to organize the Events as well as for User verification. We process personal data for the evaluation and selection of potential applicants and team members for the Events.
We also process the personal data provided by the Users in order to develop the quality of our Services and Events, for instance by analyzing the employment histories of the Users and the programs the Users have applied to.
For customer communication and marketing
We process personal data for the purpose of maintaining our customer relationships with the Users, for instance by contacting the Users regarding the Services and Events. We also process personal data of the Users in order to inform the Users of changes relating to the Services and the Events. We use personal data for marketing and advertising the services and products provided by us, e.g. to customize the User’s experience by providing the User with targeted offers and advertising information based on the information gathered from the User during his/her previous visits to the Services and to the Events.
If the User contacts us to give feedback with respect to our Services or Events, we will use the provided information for answering questions and solving possible issues.
For the recruitment and headhunting purposes
We process User Data for the purpose of providing such data to our Recruitment Partners (as defined below) for recruitment and headhunting purposes.
Legitimate grounds for processing
We process personal data to perform our contractual obligations towards the Users with respect to the Users registered on our Websites and Users having applied or registered as participants or attendees in the Events. Furthermore, we process personal data based on our legitimate interest. Our legitimate interest is based on running, maintaining and developing our business, improving the customer or visitor experience of the Users as well as on performing direct marketing. When choosing to use your data on the basis of our legitimate interests, we weigh our own interests against your right to privacy and e.g. provide you with easy to use opt-out from our marketing communications and use pseudonymized or non-personally identifiable data when possible.
In some parts of the Services, the Users may be requested to grant their consent for the processing of personal data. In this event, Users may withdraw their consent at any time.
4. TRANSFERS TO COUNTRIES OUTSIDE EUROPEAN ECONOMIC AREA
The Company stores the Users’ personal data primarily within the European Economic Area. However we have service providers in several geographical locations. As such, we, and our service providers may transfer personal data to, or access it in, jurisdictions outside the European Economic Area or the User’s domicile.
We will take steps to ensure that the Users’ personal data receives an adequate level of protection in the jurisdictions in which it is processed. We provide adequate protection for the transfers of personal data to countries outside of the European Economic Area through a series of agreements with our service providersbased on the Standard Contractual Clauses or through other appropriate safeguards, such as the Privacy Shield Framework.
More information regarding the transfers of personal data may be obtained by contacting us on address mentioned in this Privacy Policy.
5. RECIPIENTS
We only share personal data within the Junction organisation if and as far as reasonably necessary to perform and develop our Services and the arrangements relating to the organization of the Events. We do not share personal data with third parties outside of Junction organization unless one of the following circumstances applies:
For legal reasons
We may share personal data with third parties outside Junction organization if we have a good-faith belief that access to and use of the personal data is reasonably necessary to: (i) meet any applicable law, regulation, and/or court order; (ii) detect, prevent, or otherwise address fraud, security or technical issues; and/or (iii) protect the interests, properties or safety of the Company, the Users or the public in accordance with the law. When possible, we will inform the Users about such transfer and processing.
To authorized service providers
We may share personal data to authorized service providers who perform services for us (including data storage, sales, marketing and customer support services). Our agreements with our service providers include commitments that the service providers agree to limit their use of personal data and to comply with privacy and security standards at least as stringent as the terms of this Privacy Policy.
With explicit consent
We may share personal data with third parties outside the Junction organization for other reasons than the ones mentioned before, when we have the User’s explicit consent to do so. For instance, in connection with the application process to the Event on the Website, the User may grant us his/her consent to share some User Data with the following third party service providers: aTalent Recruiting Oy (“Recruitment Partners”) for recruitment purposes.
The User has the right to withdraw the above mentioned consents at all times. Note, however, that the withdrawal of consent relating to the transfers of User Data to Recruitment Partners relates solely to the future transfers of the User Data from us to such Recruitment Partners and not to the transfers having taken place prior to the withdrawal or the processing activities of the Recruitment Partners. The Recruitment Partners are solely responsible for their processing of User Data and the User shall contact the Recruitment Partners independetly should he/she have questions relating to their processing activities or should he/she want to prohibit them from further processing the User Data.
6. STORAGE PERIOD
Junction does not store your personal data longer than is legally permitted and necessary for the purposes of providing the Services and Events or the relevant parts thereof. The storage period depends on the nature of the information and on the purposes of processing. The maximum period may therefore vary per use.
We will store the User Data collected in connection with the registration or application process for as long as the User in question is a registered user of our Services, subscriber of our newsletters or an applicant or participant of our Event.
We will delete or anonymise all the User Data within a reasonable time and at the latest after 5 years after the end of the latest Event you have participated in, save for when we are required by law, claims handling or accounting standards to store some of such information in the form of personal data.
Please note that if you are a registered User of our Services, we will store your User Data relating to your application for as long as you have a user account on the Website. A registered User may, at any time, delete his/her user account. Thereafter, we will delete or anonymise all your User Data within a reasonable time, save for when we are required by law, claims handling or accounting standards to continue storing some of such information in the form of personal data.
We will store Analytics Data of registered users of our Services for the duration of the registration period and thereafter for a reasonable time, but no longer than 24 months for the purposes specified in this Privacy Policy.
We will store Analytics Data of unregistered users of our Services for a reasonable time, but not longer than 24 months for the purposes specified in this Privacy Policy.
7. USERS’ RIGHTS
Right to access
The Users have the right to access the personal data relating to them and processed by the Company. This means that the Users may contact us, and we will inform what personal data we have collected and processed regarding the said User and communicate the purposes such data are used for.
Right to withdraw consent
In case the processing is based on a consent granted by the User, the User may withdraw the consent at any time. The withdrawal of consent does not affect the lawfulness of processing based on consent before its withdrawal.
Right to rectify
The Users have the right to have incorrect, imprecise, incomplete, outdated, or unnecessary personal data we have stored about the User corrected or completed. By contacting us on the addresses indicated above, the User may update e.g. his/her contact details or other personal data.
Right to deletion
The Users may also ask us to delete the Users’ personal data from our systems. We will comply with such request unless we have a legitimate ground not to delete the data. Such legitimate ground may be based on e.g. applicable legislation.
Right to object
You may have the right to object to certain use of your personal data if such data are processed for other purposes than necessary for the performance of the Services or organization of the Events or for compliance with a legal obligation. If you object to the further processing of your personal data, this may lead to fewer possibilities to use the Services or to participate in the Events.
Right to restriction of processing
You may request us to restrict processing of personal data for example when your data erasure, rectification or objection requests are pending and/or when we do not have legitimate grounds to process your data. This may however lead to fewer possibilities to use the Services or to participate in the Events.
Right to data portability
The Users have the right to receive their personal data from us in a structured and commonly used format and to independently transmit those data to a third party.
How to use the rights
The above mentioned rights may be used by sending a letter or an e-mail to us on the addresses set out above. We may request the provision of additional information necessary to confirm the identity of the User. We may reject requests that are unreasonably repetitive, excessive or manifestly unfounded.
8. DIRECT MARKETING
The User has the right to prohibit us from using the User’s personal data for direct marketing purposes, market research and profiling made for direct marketing purposes by contacting us on the addresses indicated above or by using the unsubscribe possibility offered in connection with any direct marketing messages.
9. LODGING A COMPLAINT
The User can lodge a complaint with the local supervisory authority for data protection, in case the User considers the Company’s processing of personal data to be inconsistent with the applicable data protection laws. In Finland, the local supervisory authority is the Data Protection Ombudsman (www.tietosuoja.fi).
10. INFORMATION SECURITY
We use administrative, organizational, technical, and physical safeguards to protect the personal data we collect and process. Measures include for example, where appropriate, encryption, pseudonymization, firewalls, secure facilities and access right systems. Our security controls are designed to maintain an appropriate level of data confidentiality, integrity, availability, resilience and ability to restore the data. We regularly test the Websites, systems, and other assets for security vulnerabilities.
Should despite of the security measures, a security breach occur that is likely to have negative effects to the privacy of the Users, we will inform the relevant Users and other affected parties, as well as relevant authorities when required by applicable data protection laws, about the breach as soon as possible.


Game Editor
Add Game...
Edit Game...
Add Game
×
Visitor
Home
Date
Game Log
Insert Play Above
Visitor
Home
Game Final
Scoreboard (SVG)
Pitches
Team:
Inning:
Batter:
Pitch:
Outcome:
Type:
Velocity:
Location:
Save Pitch
Play:
Save Play
Substitution:
Team:
Save Substitution
Visitors
Home


This application was written by Samuel Goldmann on behalf of the wonderful people at eDocument Solutions.
The source code is available on my Github account.
This application's backend was implemented with ASP.NET Web API 2 and uses the ASP.NET Entity Framework for its object-relational mapping.
Backend development time was approximately 10 hours, which included:
The application's frontend was built using AngularJS and Bootstrap. Additionally, AngularJS UI - Bootstrap components were used to provide a simple pagination widget over the shape history.
Frontend development time took approximately 8 hours, which included: