text:
Learning Ecosystem
Learning Content
Technology Due Diligence
Learning Content Optimization
Building the "Alexa, write my quiz" Skill Part 2: Review & Application of Machine Learning Technologies for Glossary Text Extraction
Mary Gwozdz,
Machine learning allows us to consume large quantities of data in order to bring new life to expansive corpuses in a variety of industries, such as education. The sheer quantity of digitizable educational materials, including textbooks, lecture notes, class notes, and academic publications is astounding, not to mention all of the hobbyists and creators who have started making educational content specifically for the Internet via blog posts, videos, and games. With the growing plethora of information available at the fingertips of artificial intelligence (AI), it feels like it is only a matter of time before AI can generate highly coherent materials to present to a learner on a topic, providing invaluable assistance to teachers.
As a stepping stone to the future I described, I have embarked on a journey to see if I can use machine learning to extract term-definition pairs from pdf glossary files to algorithmically create vocabulary quizzes without human intervention. This journey was inspired by the work I wrote about in my previous article, where I created an Alexa skill that generated vocabulary quizzes from pdf files by writing code that used Apache PDFBox to extract the term/definition pairs. While that worked well, it would require numerous tweaks to be usable with a large variety of text layouts. I believed that switching to using machine learning (as shown in Figure 1) would help solve this problem, enabling me to be able to generate quizzes from a larger set of documents without having to continuously write updates to the code. If quiz data could be quickly organized from pdf files, then the potential amount of quiz materials that Alexa has available to use would also greatly increase.
Figure 1: The flow of my Alexa skill consists of the user informing Alexa of the exam source, Canvas file name, subject, quiz name, and number of questions. The alexa-stream-handler then triggers the write-quiz-lambda to pull any relevant pdf documents from Canvas, convert them into csv files of quiz questions, then send those back to the user. Previously, this conversion was completed with customized Java using Apache PDFBox, but I am going to change out that component for a machine learning algorithm.
More specifically, I wanted to construct a pathway for sending pdf glossary files (such as the Openstax Biology textbook glossary shown in Figure 2) through a machine learning algorithm to convert them into sets of term/definition pairs.
Figure 2: A sample of the pdf glossary used from an OpenStax Biology textbook.
Ideally, I hoped to find an algorithm that had already been trained to discern name-value pairs so that it could easily be dropped into the spot of the black box in Figure 1 without too much extra work. However, in the absence of finding such an algorithm, I hoped to at least be able to send the pdf file into a machine learning algorithm (MLA) that had already been trained to output the text inside that file and then develop my own algorithm to distinguish term/definition pairs from any additional information that the existing MLA could provide about the text. The tools I considered to help accomplish this were Amazon Textract and Tesseract as MLAs that have already been trained to output the text in pdf files along with additional information, as well as Amazon SageMaker A2I Human Workflow and Amazon Comprehend to help me develop an algorithm to distinguish term/definition pairs from the MLA output.
Textract
Amazon's Textract is machine learning software that extracts text from image and pdf files. In addition, when you send a document to the Textract client for analysis, it returns a set of json blocks containing positional information about the text as shown in Figure 3a. Each json block has parameters for BlockType, Confidence, Geometry, Id, Text, and, if present, Relationships, which are explained in Table 1. With a bit of additional coding, the coordinates listed in the Polygon section of the output can be used to draw literal boxes representing each BoundingBox as shown in Figure 3b.
Figure 3a: An example of a LINE json block returned from Textract
Figure 3b: A visualization of the geometric data provided from Amazon Textract. The corners of each of these boxes correspond to a set of coordinates listed in the Polygon section of the json output from Textract. This image also shows the LINE blocks being outlined in black while the WORD blocks are outlined with green at the beginning of a word and red at the end of a word.
Json Parameter
BlockType
Possible values include LINE, WORD, and PAGE
Indicates probability that the text was correctly discerned
Contains a BoundingBox and a Polygon. The BoundingBox contains the Height, Left, Top, and Width of the block of text detected, and the Polygon contains coordinates for the corners of a polygon that contains the block of text detected.
Contains the unique identifier for this block
Contains the text that Textract detected in this block
Lists the Ids of all of the WORD blocks within a LINE block or of all the LINE blocks within a page.
Table 1: Descriptions of Textract json output parameters
Amazon SageMaker A2I Human Workflow
Amazon Textract is also trained to read key-value pairs from form data, meaning that if it is provided with a set of questions or prompts from a form, it can collect the answers to those questions.
To train the Textract machine learning algorithm to understand your form, you can provide it with a set of keys and test data and then utilize Amazon's SageMaker A2I Human Workflow to check and correct its work. The Human Workflow is a process that a team of people called a Human Review Workforce goes through to select whether or not Textract correctly detected the value for each key, and if not, what the value should have been. The Human Review Workforce can be a team of your own people, or Amazon can provide you with a team of people known as an Amazon Mechanical Turk Team.
Figure 4 shows an example of the workflow for checking Textract key-value pairs. The column on the right lists out the keys from the key-value pairs where the Workforce team member can specify the correct value in the blank space underneath it. In the example in Figure 4, Textract was not able to fill in the blank spaces with the correct values. I suspect that this is primarily because Textract does not automatically divide text into columns before making interpretations and secondarily because the name-value pair recognition is designed for the context of forms and not glossaries.
Figure 4: Example of Sagemaker A2I Workflow for checking key-value pairs identified by Textract. It is notable that Textract was not able to locate the values for any of the given keys in this example.
Amazon Comprehend
Amazon Comprehend is a service that can ingest text and output an indication of what words in the text correspond to certain entities, key phrases, or parts of speech. It also outputs the detected language and positive, negative, or neutral sentiment of the text. Amazon Comprehend's built-in entities can recognize branded commercial items, dates, events, locations, organizations, people, quantities, and titles. However, Amazon Comprehend also has a feature for custom entity recognition, where you can train it to recognize additional entity types.
Custom entity recognition can take place in two different ways. One way, known as the Annotation method, is to submit csv files that indicate a given text file, the new entity type, the line number where the entity is located in the given file, and the start and stop character indexes of where the entity is located in the given file as shown in Figure 5.
Figure 5: Example of an annotations csv file for training Amazon Comprehend to recognize the custom entity type TERM.
These csv files then go through Amazon Comprehend's machine learning training process to create a model that can read the provided text files and predict the location of the new entity type and then test this model for the accuracy of its predictions.
The second way to train Amazon Comprehend for custom entity recognition is the Entity List method. The Entity List method consists of submitting csv files containing a list of known values and their corresponding entity type to Amazon Comprehend's machine learning training process. Interestingly, Amazon Comprehend has already been trained with a large set of additional medical entities, so that it can now provide Amazon Comprehend Medical, which recognizes most of the entities that are found in medical charts or records. This ability for Amazon Comprehend to work with a high level of accuracy for recognizing medical entities in context shows great promise for this technology to be applied to additional fields.
Tesseract is Google's optical character recognition (OCR) service, putting it in direct competition with Amazon Textract as it also takes in images as input and can output the text it reads from the image. Tesseract provides the PyTessBaseAPI, which can be utilized to detect the text and extract individual words, along with their confidences and font attributes such as an indication of whether the text is bold, italicized, underlined, and the font size. Figure 6 below shows the python code for printing out the information that Tesseract provides on individual words.
from tesserocr import PyTessBaseAPI
images = ['openstaxbiology-ch1-1.png']
with PyTessBaseAPI() as api:
for img in images:
api.SetImageFile(img)
# print(api.GetUTF8Text())
# print(api.AllWordConfidences())
api.Recognize()
ri=api.GetIterator()
level=tesserocr.RIL.WORD
counter = 0
for e in tesserocr.iterate_level(ri, level):
counter = counter + 1
word = e.GetUTF8Text(level)
if counter < 25:
print(word)
print(e.WordFontAttributes())
print()
Figure 6: Example of retrieving information about detected words with Tesseract.
In conclusion, the things I learned about these four technologies are summarized in Table 2 below.
Amazon Textract
Identifies individual words and their location on the page
Will train Textract to find name-value-pairs when the list of names are given
A machine learning algorithm that was trained to read prose or form data. It recognizes a limited set of entities but can be trained with Custom Entity Recognition which takes in a .txt file and requires a large csv of known data.
Google's OCR engine, which was the only OCR that included a library for reviewing font attributes, if they are available.
Table 2: Summary of research done on machine learning tools.
With knowledge of these four technologies, I started to construct a pathway for transforming my pdf glossary files into sets of term/definition pairs using machine learning. Upon converting the pdf file to an png image and sending it through Textract, I noticed that while it correctly translated the image into the text that was on the page, this text was not in the right order. Textract had not realized that this document consisted of two columns, so it ran the lines of text together across the page. Curious as to why this was and how to mitigate the issue, I adapted this method for getting Textract to read a newspaper to produce the result shown in Figure 7. This method consisted of selecting a target line, then looping through all of the remaining lines to find the ones that are in the same column as the target line. After making some adaptations to their approach, I had three metrics that needed to be met in order for a given line in the loop to be selected as belonging to the column of the target line. These metrics are as follows, with similarity being determined by taking the difference between the two values and comparing them to a hard coded tolerance:
If the given line had a similar x-coordinate for the left-most side of the target line
If the given line's height was similar to the height of the target line
If the distance between the bottom y value of the given line and that of the line above it was below a hard coded tolerance
Figure 7: A visualization of dividing Textract results appropriately into columns.
At this point, I could accurately identify the separate columns or regions of the text to put in the correct order. Next, I needed to determine how to retrieve the term/definition pairs. As described above, the Textract key-value-pair recognition in combination with the SageMaker A2I Human Workflow did not work for retrieving term/definition pairs. As a human reading this document, the most obvious indicator of these pairs to me is the bold text for each term. Hoping to be able to use Tesseract's ability to retrieve font attributes to identify the words with bold text, I sent my glossary through the code shown in Figure 6. Unfortunately, it returned None for the WordFontAttributes for each word in the file, and this appears to possibly be due to a bug in Tesseract dating back to 2017.
Next, I attempted to train Amazon Comprehend to recognize the terms in my ordered Textract output utilizing the annotation method as shown in Figure 5. In order to create those annotation files, I wrote an algorithm that used Textract's geometrical data to calculate the amount of space between each of the words. As shown in Figure 3b, the amount of space between each term and its corresponding definition is considerably greater than the amount of space between the remainder of the words in the document. Therefore, any words that had a quantity of space between themselves and the following word that was larger than a certain tolerance were deemed to be terms. Once the terms were identified, I just needed to count the number of characters in each term and identify the line number it resided on so that I could create the annotation file. After I created several annotation files corresponding to various glossaries from OpenStax textbooks, I sent the data through Amazon Comprehend. The results indicated that Amazon Comprehend could recognize the TERM entity type with a precision of 88%, a recall of 94%, and an F1 score of 91%.
At this point, I noticed three issues with my approach:
I was only extracting this data one page at a time, so if there was ever a definition that went onto the next page, that information would get lost in translation.
I only had annotations for recognizing the TERM entity type, so I wasn't training it to be able to recognize definitions. However, I hoped that if it could recognize the terms well, then it would be simple to write an algorithm to just gather up the text between terms as the definitions.
The F1 score, which is the harmonic mean of the precision and recall, was 91%. It seemed like this wouldn't be good enough, since it meant that Amazon Comprehend would be making an incorrect prediction as to what the terms were about one out of every ten times.
Consequently, I began to attempt to mitigate the first problem by reading the glossary pages for each chapter together at once. To do this, I added code to remove the headers and footers from the pages and connected their ordered text together into one output text file that the annotation file would reference. Once I had recreated the annotations files after addressing the nuances that arose from this change of strategy, I sent my data back through Amazon Comprehend. Unfortunately, I found that the results had gotten much worse with a precision of 35%, a recall of 63%, and an F1 score of 45%.
At this point, I began to rethink my approach altogether. I wondered why I was trying to get Amazon Comprehend to identify the terms in the file when my code to create the annotations files to train Amazon Comprehend already identified the terms in the first place. It occurred to me that instead of using Amazon Comprehend, I could just improve my data science approach to identifying the terms based off of the geometric data from the Textract output and likely get better results faster.
Therefore, I tried to step back and take a holistic view of how I was calculating the order of the text, the removal of extraneous text, and the location of the terms themselves. I continued using the first metric from the newspaper column detection method of determining whether or not the left coordinate of each line of text was close enough in value to the left coordinate of each line in its column. I also kept the third metric of determining if the bottom y values of each line were sufficiently distanced from each other to indicate that one line belonged precisely below another. However, I switched from using the second metric of trying to eliminate titles from the text based off of each line's height to trying to eliminate them based off of each line's area per character. Because line height was calculated from the top coordinate of the highest letter to the bottom coordinate of the lowest letter in each line, certain lines that had letters like "b" and "g" would get flagged for being titles and lines that only had very short heighted letters such as "wax" would get flagged for being headers or footers. To prevent this, I calculated the area of each line and then divided it by the number of characters in the line to get a better valuation of the font size of the line.
Next, I did further research to improve my statistical approach to defining some of the threshold values for these metrics. Initially, following the approach of the newspaper column detection method, I simply hardcoded my tolerance values and adjusted them as needed. However, across three different textbooks with certain pages just having certain nuances that made them different, like having a word that was printed further off to the side than expected, I needed to set my tolerance values based off of the extent to which each case deviated from what was expected.
In addition to my initial hard coded tolerance values, I also tried out the outlier formula and the z score method. The outlier formula and the z score method worked best for my needs, so I used them accordingly. The outlier formula defines upper tolerance as the third quartile plus 1.5 multiplied by the interquartile range between the first and third quartiles as shown in Figure 8a. In the z score method, I defined z as the number of standard deviations away from the mean I wanted the cutoff to be, then the tolerance equalled the mean plus the standard deviation multiplied by z, as shown in Figure 8b. My results from these experiments are illustrated in Table 3, with the best statistical approach being to use the outlier formula for calculating the vertical distance tolerance and the z score formula for calculating the area per character tolerance.
IQR = Q3 - Q1
tolerance = Q3 + 1.5(IQR)
Figure 8a: The outlier formula for upper tolerance.
tolerance = μ + zσ
Figure 8b: The z score formula for tolerance.
Statistical Approach
Average Number of Incorrect Term/Definition Pairs Per Chapter
Overall Percentage of Correct Term / Definition Pairs
Vertical Distance Tolerance
Area Per Character Tolerance
Biology Textbook
Anatomy & Physiology Textbook
Psychology Textbook
Hard coding
Outlier formula
Z score formula
Table 3: This table shows the average number of incorrect term/definition pairs for five OpenStax textbook end of chapter glossaries that I tested across each of three different textbooks. The average number of term/definition pairs for the Biology, Anatomy & Physiology, and Psychology textbooks are 53, 83, and 63 respectively. From these calculations, I concluded that using the outlier formula to calculate vertical distance tolerance while using the z score formula to calculate the area per character tolerance resulted in the highest accuracy of 99.83%.
With all of the adjustments in place, I switched from creating annotations files out of my identified terms to creating term definition pairs. Across each of the three OpenStax textbooks that I pulled five glossaries from, I could now identify term/definition pairs with 99.83% accuracy, which I felt was sufficient for updating my Alexa skill. Now it should be able to use a much larger set of glossary files to create vocabulary quizzes than it was able to with the version that used Apache PDFBox.
Machine learning has a massive potential to change the world, and the education industry has such an abundance of data that its combined potential is even greater. While I ultimately only used Amazon Textract for the needs of my experiment, each of the machine learning technologies that I discussed also has a phenomenal potential to impact the world and education specifically. For example, the Textract key-value-pair detection with the SageMaker A2I Human Workflow could potentially make a great homework grader. Amazon Comprehend could be trained to read textbooks themselves or administrative forms. With further time and research, I suspect machine learning could still be used to extract term/definition pairs from glossaries as well. In the meantime, my data science approach to the problem is working great.
Useful Reading:
Building the "Alexa, write my quiz" Skill Part 1
Content and Assessment
Applications, Integration, and Data
Mary Gwozdz
Mary Gwozdz is a Software Engineer at Unicon, joining first as an intern in 2016 before becoming a full-time developer in 2018.
While at Unicon, Ms. Gwozdz has contributed numerous updates to the California Community Colleges (CCC) Application websites in efforts to modernize and improve its content and efficiency. She created Vagrant scripts to replace the environment setup process, decreasing the setup time from 1 month to 1 day. She also used Groovy and AWS to reconcile and improve the movement of encrypted data between its AWS architecture and other applications. Additionally, she wrote multiple Spring Boot REST web services for handling application data and deployed them as Docker containers to Rancher with Jenkins.
Before joining Unicon, Ms. Gwozdz did biomedical engineering research at the University of Texas. Her research resulted in two publications, one for her work in detecting genetic anomalies on a molecular level, and one for her development of a machine learning algorithm for detecting swallows in dysphagia patients.
Ms. Gwozdz graduated magna cum laude from the University of Texas at Austin with a BS in biomedical engineering with a technical emphasis in software engineering.
1760 E. Pecos Road
info@unicon.net
For over 25 years we've been helping our clients apply the right teams, strategies, and tech to keep them aligned with the evolving world of online learning.
Careers (link is external)


Exciting shots of Hamlet fight rehearsals.
An ongoing selection of pictures from our Hamlet rehearsals.
More on sticks and how we use them in rehearsal warm-ups, with some practical tips and variations.
The first of two articles on how we warm up for rehearsals with sticks and the benefits it brings for the cast and the production.
Boxing Club Rules: an idiosycratic take on The Canterbury Tales?


7.1 As outlined in Chapter 3, the Parliamentary Budget Office's (PBO) submission provided a detailed state-by-state breakdown of the difference in Commonwealth hospital funding between the government's policy announced in the 2014‑15 Budget and the former government's hospital funding arrangements under the National Health Reform Agreement 2011. The government's 2014‑15 Budget marked a fundamental policy shift away from the previous government's activity based funding model, which established a national efficient price for hospital services. Instead, it reverts to the former block funding model based on CPI and population growth.
7.2 The PBO's figures show that Western Australia (WA) will lose $6.5 billion in hospital funding over a decade due to the government's abandonment of the carefully negotiated national health agreement. The annual funding differences are set out in Appendix 4.
7.3 The WA Health Minister, Dr Kim Hames, was critical of the 2014-15 Budget decision to cut hospital funding, telling a Western Australian budget estimates hearing that the decision was 'unfair'.
If you look at the totality of the federal budget, which includes a slightly better position on GST for Western Australia and some funding in particular areas, the net impact on the West Australian bottom line is positive and not negative.
7.5 The Premier was absent from a meeting of other state leaders held to discuss the hospital funding cuts, shortly after the 2014-15 Budget was handed down.
7.6 Recently, the AMA criticised the WA hospital system in its Public Hospital Report Card 2016, which showed that there had been no improvement on key performance targets, such as waiting times, over the last year. The AMA also found that Western Australian hospitals had failed to improve on elective surgery waiting times.
7.7 The AMA WA President, Dr Michael Gannon, has stated that the Commonwealth Government cuts to hospital funding were a large part of the problem. He called on the Western Australian Government to lobby for adequate Commonwealth funding.
7.8 The Western Australian Government has, however, categorised the problem as one of inefficiencies within the state health system. In January 2016, the Western Australian Government announced that over 1100 full time equivalent hospital jobs would be cut from the Western Australian hospital system. The AMA WA disputes this figure, arguing that as many as 3000 hospital staff could lose their jobs or have their hours reduced as a result of the state government's cuts.
The implication of that is inevitably that the states will have to carry a greater burden. We are already talking about 28 per cent, or thereabouts, of state budgets [allocated to health] and in the unique system that we have in Australia inevitably if one player reduces their contribution, then the burden is going to fall on others and it will fall on the states because the states are the ones who have to face the day-to-day pressures from population, from media and so on. I speak as a former Director-General of Health in this state and I am aware of the day-to-day pressures that we have. The pressures are on the states to address those, much less on people in faraway Canberra.
It is crucial. From just sitting on the sidelines and listening to the DMOs [District Medical Officers], I know that, even though their workload has increased at regional hospitals, certainly numbers of doctors and DMOs in the hospitals have not. In fact, they are trying to centralise again. Things tend to go to Broome and that tends to leave the rest of the Kimberley. But, even then, Broome services have been reduced as well and Broome is very busy. So you have longer waiting times and people are not seen acutely when they should be seen, so they are much sicker when they are seen, and then you end up having to fly them out. It is just a revolving door. The stress on services like the RFDS [Royal Flying Doctors Service], in terms of getting people out, just increases.
Ms Josephine (Josie) Farrer, Member for Kimberley, Western Australian Legislative Assembly gave a Welcome to Country before the committee's public hearing in Halls Creek, Western Australia, on 28 April 2015.
7.11 It is clear that the Coalition Government's hospital funding cuts have placed the Western Australian Government in a desperate situation. From the evidence the committee heard, the Western Australian hospital system can ill afford to lose trained staff. The committee is concerned that the savage job cuts in the Western Australian hospital system will lead to a reduced quality of care.
7.12 The committee believes that the Western Australian Government is not well placed to sustain the funding needed for adequate hospital services by itself. By 2024‑25, the Commonwealth's planned funding reductions will have grown in total to $6.5 billion for Western Australia.
7.13 Long-term funding certainty allows for better planning for infrastructure, managing staffing, waiting times and lists, and delivers increased efficiencies overall. When hospitals are forced to operate on year-to-year budgets, there is no capacity for planning ahead and making efficient investment in staff and services.
7.14 The committee believes that without long-term funding, state and territory public hospitals will not be able to achieve efficiencies and adequately serve their citizens. The committee calls on the Federal Government to create a long-term, sustainable funding model for hospitals which allows for appropriate contributions from governments, both state and federal.


Parents or guardians may control the playing of content and the use of features on your system.
First, you must set a password called a passcode. You must enter the passcode when you adjust the parental control settings or whenever you change them.
When you are prompted to enter the passcode, enter the four-digit number and select [OK].
If you forget your passcode, you must restore your system. Handle your passcode with care. Do not forget it and do not let third parties obtain it.
Parents or guardians can limit the starting of applications or the playing of content, such as video content, with parental control restrictions.
In addition to [Off], eleven levels can be set. The restriction will be tighter when you set the lower numbers.  is the default setting.
Whether or not an application can be started or content can be played is determined by the combination of the level set on your system and the level set on the application or the content to be played.
Touch and hold on the home screen.
The home screen will enter the edit mode.
Select the application icon, and then select [Information].
In the (Videos) application, select (Information) for the content on the list that you want to verify. On content with parental control restrictions, the restriction level appears in the [Parental Controls] field.
For example, to restrict playback of content that has a parental control level ("A" in the chart below) of "5", adjust the parental control level on your system ("D" in the chart below) to .
Higher numbers are more restrictive.
Indicates that the playback of content is restricted.
Indicates that the playback of content is allowed.
Lower numbers are more restrictive.
In order to change the settings to a more restrictive level, you must close all the applications in use.
This option allows parents or guardians to set whether the (Browser) application can be started.
In order to change the settings, you must close all the applications in use.
Parents or guardians can set whether or not to allow use of location data.
Enter the current passcode, and then enter the new passcode. For verification, you must enter the new passcode twice.
This guide is for use with system software version 2.60 or later.
© 2013 Sony Computer Entertainment Inc. All Rights Reserved.


text:
Amazon Web Services Expands Partner Program
Amazon Web Services (AWS), an Amazon company, has introduced new programs, solution competencies, and partner benefits for its AWS Partner Network (APN) program.
The AWS Partner Network (APN) program, which provides technical, business and marketing support for the AWS partner ecosystem, has grown to more than 8,000 technology and consulting partners worldwide, says the Seattle giant.
The number of products available in the AWS Marketplace has increased 71 percent, and hours of usage of AWS Marketplace products has increased by more than 700 percent, according to Amazon.
Worldwide shipments of tablets and chromebooks declined sharply in 2022
Worldwide tablet shipments posted flat growth of 0.3% year over year in the fourth quarter of 2022 (4Q22), according to IDC.
Red Hat Enterprise Linux comes to Oracle Cloud Infrastructure
Red Hat and Oracle have inked a multi-stage alliance.
Jumbo, Hanshow ink partnership to digitize 700 stores
Jumbo, the second largest supermarket chain in the Netherlands, has announced an exclusive partnership with global retail solutions provider Hanshow.
Amazon launches virtual health clinic
Amazon has launched a message-based virtual care service that...
Cognizant awarded five-year IT operations and maintenance contract by VodafoneZiggo
As managed services partner of VodafoneZiggo, Cognizant will consolidate and support the company's operations of IT and virtualized mobile network infrastructure.

redpajama_set_name: RedPajamaCommonCrawl


text:
Latin Grammy Awards (hiszp. Premios Grammy Latinos) – nagrody muzyczne przyznawane w kategorii muzyki latynoamerykańskiej.

Ceremonia odbywa się corocznie od 2000 roku w Stanach Zjednoczonych. Podobnie jak Nagroda Grammy, Latin Grammy przyznawana jest w drodze głosowania, w uznaniu artystycznych i technicznych osiągnięć.

Miejsca gali wręczenia nagród
 2000: Staples Center, Los Angeles, Kalifornia
 2001: Conga Room, Los Angeles, Kalifornia (początkowo ceremonia miała się odbyć w południe 11 września w Shrine Auditorium, jednakże, z powodu zamachu na World Trade Center, zwycięzcy zostali ogłoszeni na konferencji prasowej w Conga Room w październiku tego samego roku)
 2002: Kodak Theatre, Los Angeles, Kalifornia
 2003: American Airlines Arena, Miami, Floryda
 2004, 2005: Shrine Auditorium, Los Angeles, Kalifornia
 2006: Madison Square Garden, Nowy Jork, Nowy Jork
 2007: Mandalay Bay Events Center, Las Vegas, Nevada
 2008:
 Toyota Center, Houston, Teksas
 Auditório Ibirapuera, São Paulo, Brazylia
 2009, 2010, 2011, 2012, 2013: Mandalay Bay Events Center, Las Vegas, Nevada
 2014, 2015: MGM Grand Garden Arena, Paradise, Las Vegas, Nevada
 2016: T-Mobile Arena, Paradise, Las Vegas, Nevada
 2017, 2018, 2019: MGM Grand Garden Arena, Paradise, Las Vegas, Nevada

Linki zewnętrzne
 The Latin Recording Academy
 Grammy Latin Awards

Nagrody Grammy
Muzyka latynoamerykańska

redpajama_set_name: RedPajamaWikipedia


text:
wendy edwards
Kickstarting a Local Radio Show
Wendy Edwards is no stranger to radio, with a long career in broadcasting alongside others, co-hosting, co-producing, and performing as on-air talent. Wendy's going solo, with a radio show that she's dreamed of hosting for many years. Wendy is the host of Conversations with Wendy, an emotionally intelligent, engaging entertainer and connector of people, Wendy brings to the air a talk show that encourages people to live their best lives. The weekly, hour-long show features real people sharing their stories of overcoming adversity, celebrating unique cultures, living well in our community, and applauding individuality. With your support, Conversations with Wendy will continue helping people be heard, making community connections, and highlighting the stories that matter.
Find out more about Wendy's Kickstarter to keep the show on the air, and please make a donation today!
The Wendy Edwards Show Podcast and my Promise to Sing
This week I was a guest of the Wendy Edwards show, part of the Charlottesville Podcasting Network. I spoke with Wendy about branding, social media and marketing for small businesses.
Give it a listen!
Also, Wendy managed to get me to confess to a 1976 performance of a Shirley Temple song (listen to the podcast to find out what song!) — and I've foolishly promised to repeat that song in an encore performance on YouTube if my business' Facebook Page reaches 500 fans by March 31, 2011.
How about it? Will you make me sing?


text:
Q: "error": "select * from `alliance` where `alliance_description` = {} - SQLITE_ERROR: no such table: alliance The problem =>  "error": "select * from alliance where alliance_description = {} - SQLITE_ERROR: no such table: alliance"

$ npm run start:dev

> rest-api@1.0.0 start:dev D:\OSSE\back-end
> nodemon src/server.js

[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node src/server.js`
migrations [ 2, [] ]
Listening on Port 5000!
sqlite does not support inserting default values. Set the `useNullAsDefault` flag to hide this warning. (see docs

http://knexjs.org/#Builder-insert).
GET /alliance 500 149.999 ms - 110
sqlite does not support inserting default values. Set the useNullAsDefault flag to hide this warning. (see docs
http://knexjs.org/#Builder-insert).
GET /alliance 500 6.629 ms - 110
GET /favicon.ico 404 0.703 ms - 40

Knex.js Config

const path = require('path')

require('dotenv').config()

const {
  DATABASE_URL = 'postgresql://postgres@localhost/postgres',
} = process.env

module.exports = {
  development: {
    client: 'postgresql',
    connection: DATABASE_URL,
    pool: { min: 0, max: 100 },
    migrations: {
      directory: path.join(__dirname, 'src', 'db', 'migrations'),
    },
    seeds: {
      directory: path.join(__dirname, 'src', 'db', 'seeds'),
    },
    useNullAsDefault: true,
  },

  production: {
    client: 'postgresql',
    connection: DATABASE_URL,
    pool: { min: 0, max: 100 },
    migrations: {
      directory: path.join(__dirname, 'src', 'db', 'migrations'),
    },
    seeds: {
      directory: path.join(__dirname, 'src', 'db', 'seeds'),
    },
    useNullAsDefault: true,
  },

  test: {
    client: 'sqlite3',
    connection: {
      filename: ':memory:',
    },
    migrations: {
      directory: path.join(__dirname, 'src', 'db', 'migrations'),
    },
    seeds: {
      directory: path.join(__dirname, 'src', 'db', 'seeds'),
    },
    useNullAsDefault: true,
  },
}

Knex Connection

const env = process.env.NODE_ENV || 'development'
const config = require('../../knexfile')[env]
const knex = require('knex')(config)

module.exports = knex

Alliance.controller

const service = require('./alliance.service')
const wrapper = require('../errors/asyncErrorBoundary')

const list = async (req, res, next) => {
  const { alliance_description } = req.query
  const data = await service.list(req.query)
  if (alliance_description) {
    const data = await service.list(alliance_description)
    res.json({
      data: alliance_description,
    })
    return
  }
  return res.json({ data })
}

function allianceExists(req, res, next) {
  const allianceId = req.params.alliance_id
  const foundAlliance = alliance.find(
    (alliances) => alliances.id === alliance_id
  )
  if (foundAlliance) {
    res.locals.dish = foundAlliance
    return next()
  }
  next({
    status: 404,
    message: `Alliance ID ${allianceId} Doesn't Exist`,
  })
}

function checkAllianceId(req, res, next) {
  const allianceId = req.params.alliance_id
  const id = req.body.data.id
  if (allianceId !== id && id !== undefined && (id !== '') & (id !== null)) {
    return next({
      status: 400,
      message: `Alliance ID does not match route id. Alliance: ${id}, Route: ${allianceId}`,
    })
  }
  return next()
}

const update = async (req, res, next) => {
  const { alliance_id } = req.params
  const data = await service.update(alliance_id, req.body.data)
  res.status(200).json({
    data: data[0],
  })
}

const create = async (req, res, next) => {
  const newAlliance = res.locals.validAlliance
  const newRes = await service.create(newAlliance)
  res.status(201).json({ data: newRes[0] })
}

const show = async (req, res, next) => {
  const data = await service.show()
  return res.json({ data })
}

const read = async (req, res, next) => {
  const alliances = res.locals.alliance
  res.status(200).json({ data: alliance[0] })
}

const isValid = (req, res, next) => {
  if (!req.body.data)
    return next({ status: 400, message: 'No alliance selected' })
  const { alliance_name, alliance_description } = req.body.data
  const requiredFields = ['alliance_name', 'alliance_description']
  for (const field of requiredFields) {
    if (!req.body.data[field]) {
      return next({ status: 400, message: `Invalid input for ${field}` })
    }
  }
  res.locals.validAlliance = req.body.data
  next()
}

const destroy = async (req, res) => {
  const { alliance_id } = rq.params
  const des = await service.destroy(alliance_id)
  res.status(200)
}

module.exports = {
  list: [wrapper(list)],
  show: [wrapper(show)],
  read: [wrapper(checkAllianceId), wrapper(allianceExists), wrapper(read)],
  create: [wrapper(isValid), wrapper(create)],
  update: [wrapper(isValid), wrapper(allianceExists), wrapper(update)],
  destroy: [wrapper(destroy)],
}

Alliance.Router

const router = require('express').Router()
const controller = require('./alliance.controller')
const methodNotAllowed = require('../errors/methodNotAllowed')

router.route('/').get(controller.list).all(methodNotAllowed)

router
  .route('/:allianceId')
  .get(controller.list)
  .post(controller.create)
  .put(controller.update)
  .all(methodNotAllowed)

router
  .route('/:allianceId/:userId')
  .get(controller.list)
  .put(controller.update)
  .delete(controller.destroy)
  .all(methodNotAllowed)

module.exports = router

Alliance.service

const { default: knex } = require('knex')

const listAlliancesById = (knex, allianceId) =>
  knex('alliances as a').where({ 'a.alliance_id': allianceId })

const list = (alliance_description) => {
  return knex('alliance')
    .select('*')
    .from('alliance')
    .where({ alliance_description: alliance_description })
  // .orderBy('alliance_id')
}

const show = () => {
  return knex('alliance').select('*')
}

const read = (alliance_id) => {
  return knex('alliance').select('*').where({ alliance_id: alliance_id })
}

const create = (alliance) => {
  return knex('alliance').insert(alliance, '*')
}
const update = (alliance_id, updatedAlliance) => {
  return knex('alliance')
    .where({ alliance_id: alliance_id })
    .update(updatedAlliance)
    .returning('*')
}

const destroy = (alliance) => {
  return knex('alliance').delete(alliance).returning('*')
}

module.exports = {
  list,
  show,
  read,
  create,
  listAlliancesById,
  update,
  destroy,
}

Database query

I hope someone can help me figure out this issue.

A: you are getting error from sqlite dbms:

SQLITE_ERROR: no such table: alliance"

definitely your app is connected to sqlite and not postgresql server and it can't find that table in there.
so look into your config/connection strings to find out where your knex app is reading the database connection from

A: I solved it:
const { default: knex } = require('knex')
const knex = require(../db/connection) // <==== ANSWER

// was missing out of the .service file

redpajama_set_name: RedPajamaStackExchange


text:
Aminé: Tiny Desk Concert
By Rodney Carmichael
Considering all the unique monikers MCs have concocted throughout the history of rap, Aminé — Adam Daniel's middle name by birth — isn't all that strange. But that hasn't kept him from becoming the hip-hop artist with the hardest-to-pronounce name of the moment. He's been called everything from anime (as in Japanese animation) to amino (as in the acid). But after watching the Portland native perform three songs from his Good For You debut album, with a four-piece band and background singer crammed behind Bob Boilen's Tiny Desk, Aminé (pronounced ah-MEE-nay) should be hard to forget.
His debut single "Caroline" is definitely recognizable after peaking at No. 11 on Billboard's Hot 100 last year. Aminé followed it up one year later with an LP that expanded on his colorful pop chops with R&B-styled grooves and a mannish flow that's given his hometown more mainstream hip-hop cred than it's enjoyed since Fred Armisen fumbled through the history of rap on an old episode of Portlandia.
Despite openly criticizing Donald Trump during an appearance on The Tonight Show Starring Jimmy Fallon, the closest that Aminé — a son of Ethiopian immigrants — came to making a political statement here was a funny aside about the imposing gate in front of the White House. Instead, he made his music the focus, while taking occasional sips from a big red cup of tea.
As for the bananas that have become Aminé's well-known trademark, several NPR interns gifted him with a bunch right after his set. And with so many fans in the audience, he didn't even have a reason to pause and pronounce his name until it was time to say goodbye.
"Spice Girl/Caroline"
"Wedding Crashers"
Aminé (vocals); Fahrelle Devine (vocals); Madison Stewart (electronics); Pasqué (guitar); Davon Jamison (keyboards); Cory Limuaco (drums)
Producers: Bob Boilen, Morgan Noelle Smith; Creative Director: Bob Boilen; Audio Engineer: Josh Rogosin; Videographers: Morgan Noelle Smith, Bronson Arcuri, CJ Riculan, Alyse Young; Production Assistant: Salvatore Maicki; Photo: Jennifer Kerrigan/NPR
For more Tiny Desk concerts, subscribe to our podcast.
Rodney Carmichael
Rodney Carmichael is NPR Music's hip-hop staff writer. An Atlanta-bred cultural critic, he helped document the city's rise as rap's reigning capital for a decade while serving on staff as music editor, culture writer and senior writer for the defunct alt-weekly Creative Loafing.


text:
Bayangan
Bayangan (Fikri Fadzil) first emerged in the Malaysian music scene in 2016, gaining critical acclaim for his debut single, "Kuala Lumpur", receiving exemplary reviews from prominent Malaysian publications.
Bayangan then spent the next couple of years writing, producing, and recording his debut album, "Bersendirian berhad". Released in April 2018, the arrival of his debut showcases Bayangan's sparse yet intense brand of folk music. The instrumentation on each track are minimal, creating dreamy soundscapes to compliment his soothing vocal delivery, reverberating throughout the entire record.
Fikri Fadzil – Vocal & guitar
All online music services: https://lnk.to/byngn
"Bersendirian berhad" was well received and was named 'Best Malaysian album of the year' in 2018 by Malaysian publications such as The Daily Seni, The Level, and international music publication Bee Hype. The release of his debut 9-track album also saw Bayangan embark on a solo tour across Malaysia, Singapore, and Indonesia.
Facebook: www.facebook.com/bayanganmusic
Instagram: www.instagram.com/_bayangan
Twitter: www.twitter.com/bayangan2u
Email: inibayangan@gmail.com, cc – fikri@brightlights.my
Tel: (+60) 12-314-6505


The Tanners share a common love of agriculture and history. Buddy, as he is commonly known, currently serves as a cotton producer delegate to the National Cotton Council, and has served as a ginner and warehouse delegate. He is also a Trustee for the Mid-South Cotton Foundation in Memphis. Buddy has been in the farming and ginning business since the 1960's and in 1992 was selected by the National Ginners Association as the most outstanding ginner in the United States.
Lynette has served as president of the Louisiana Attractions Association and on the board of directors for Louisiana Travel Promotion Association.Lynette was born in Central Illinois to a farming family but moved to Louisiana at age eight. She grew up a cotton planter's daughter, as her family acquired several area plantations. After gaining degrees in Business and English, together they built Tanner & Company Ginning Corporation. Their desire to preserve history motivated them to save from destruction the antebellum buildings and gin on Frogmore. The research, historical perspectives, authenticity and personal commitment from the Tanners make this an educational experience unlike any other.


text:
Q: Import error in Python while importing some constants #constants.py

TAU = 5.55555

ref_X =  95.047
ref_Y = 100.000
ref_Z = 108.883

def main():
    DTEP = {}
    DTEP['1'] = 1.22222

Now if I Import TAU like this :
from constants import TAU

There is no error but if I import DTEP by same method it shows this error:
ImportError: cannot import name DTEP

Now why this error? Either it should be able to import all the constants or none. Why this partiality with DTEP?
Adding the full code (The name is DTEP1 here, I know):
TAU = 5.55555

import shelve

ref_X =  95.047
ref_Y = 100.000
ref_Z = 108.883
DTEP1 = {}

def main():
    d = shelve.open("tables/DTEP_132758.txt")
    for k in xrange(0,132758):
        DTEP1[str(k)] = rgb_to_cielab(d[str(k)][0], d[str(k)][1], d[str(k)][2])
    print DTEP1['1223']

def rgb_to_xyz(R, G, B):
    '''
    Convert from RGB to XYZ.
    '''
    var_R = ( R / 255.)
    var_G = ( G / 255.)
    var_B = ( B / 255.)

    if var_R > 0.04045:
        var_R = ( ( var_R + 0.055 ) / 1.055 ) ** 2.4
    else:
        var_R /= 12.92

    if var_G > 0.04045:
        var_G = ( ( var_G + 0.055 ) / 1.055 ) ** 2.4
    else:
        var_G /= 12.92
    if var_B > 0.04045:
        var_B = ( ( var_B + 0.055 ) / 1.055 ) ** 2.4
    else:
        var_B /= 12.92

    var_R *= 100
    var_G *= 100
    var_B *= 100

    #Observer. = 2 deg, Illuminant = D65
    X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
    Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
    Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505

    return X,Y,Z

#-------------------------------------------------#
def xyz_to_cielab(X, Y, Z):
    '''
    Convert from XYZ to CIE-L*a*b*
    '''
    var_X = X / ref_X
    var_Y = Y / ref_Y
    var_Z = Z / ref_Z

    if var_X > 0.008856:
        var_X **= ( 1./3. )
    else:
        var_X = ( 7.787 * var_X ) + ( 16. / 116. )
    if var_Y > 0.008856:
        var_Y **= ( 1./3. )
    else:
        var_Y = ( 7.787 * var_Y ) + ( 16. / 116. )
    if var_Z > 0.008856:
        var_Z **= ( 1./3. )
    else:
        var_Z = ( 7.787 * var_Z ) + ( 16. / 116. )

    CIE_L = ( 116 * var_Y ) - 16.
    CIE_a = 500. * ( var_X - var_Y )
    CIE_b = 200. * ( var_Y - var_Z )

    return CIE_L, CIE_a, CIE_b

#-------------------------------------------------#
def rgb_to_cielab(R, G, B):
    '''
    Convert from RGB to CIE-L*a*b*.
    '''
    X,Y,Z = rgb_to_xyz(R,G,B)
    return xyz_to_cielab(X,Y,Z)

if __name__ == "__main__":
    main()

A: DTEP is in the scope of the main function. Only variables defined at the module level (like TAU and ref_X) can be imported.
In this case, the problem could be solved simply by moving the original definition of DTEP (but not necessarily the lines that populate it) out of the main function:
DTEP = {}

def main():
    DTEP['1'] = 1.22222

main()

Alternatively, you could use the global keyword in the main function (though note that that works only if you call main() from the module level at some point):
def main():
    global DTEP
    DTEP = {}
    DTEP['1'] = 1.22222

main()

Perhaps the best solution is just to have everything at the same level, getting rid of the main function:
TAU = 5.55555

ref_X =  95.047
ref_Y = 100.000
ref_Z = 108.883

DTEP = {}
DTEP['1'] = 1.22222


VirtueMart PDF Catalog Creator (Store Manager Addon) is a tool for simple and quick product catalog creation, which allows you to add product to your catalog, retrieve products information from VirtueMart create your own template or modify existing one.
And more features are coming soon!
Generate multiple PDF catalogs with unlimited number of products with related information. Customize listings' appearance and items added according to your needs and taste.
Get complete control over the appearance of your printed listings. Create your own templates and change the size, colour and background or image of individual fields.
You can create catalog yourself - no special technical skills are required. Everyone from novices to professionals can use it.
Creating the worksheet you can select the language and currency from the drop-down (if you have them at your store).
Re-arrange the order in which products are displayed simply by dragging-and dropping.
Why you may need VirtueMart PDF Catalog?
You may need to make niche / client / event / seasonal catalogs, brochures and flyers and offer them to your customers on special occasions.
PDF Catalog Creator is Store Manager addon, that means, that it is a part of Store Manager (it is already built-in the software) and should be registered with a separate license key. So in order to use the addon you have to install and register Store Manager and set up all required settings first.
In order to make the process of catalog creation easier you may use Catalog Creator Wizard, which will guide you step by step through the catalog configuration.


In 1992 Richard Ford edited and introduced the first Granta Book of the American Short Story. It became the definitive anthology of American short fiction written in the last half of the twentieth century.
In the fifteen years since, Ford has been reading new stories and re-reading old ones. The result is this completely new collection of stories that he regretted overlooking the first time round as well as many by a new generation of writers, among them Sherman Alexie, Juno Diaz, Deborah Eisenberg, Nell Freudenberger, Matthew Klam, Jhumpa Lahiri and ZZ Packer.
"A lively collection full of its editor's good taste... 44 vibrant, shocking, fresh and classic stories...thrilling."


text:
Indian Subcontinent Sri Lanka Yala, Wilpattu & Gal Oya National Parks
Chena Huts
See our selecton of sample itineraries which feature Chena Huts
Location: Yala, Wilpattu & Gal Oya National Parks
What 3 words: calmly.decency.flocked
Sri Lanka's most famous reserve, Yala National Park, is separated from the sea by a thin strip of jungle that has for centuries been home to small holdings in clearings known as 'chena'.
The farmers' modest huts here may have been the inspiration for Chena Huts accommodation (from the ever expanding and ever excellent Uga Escapes group) with their thatched roofs, but the comparison ends there. The 14 spacious guest cabins feature air conditioning, living areas, bedrooms with en suite bathrooms (complete with freestanding baths) and shaded terraces with in-built plunge pools.
The on-site Basses Restaurant takes inspiration from the lodge's coastal setting with a nautical theme and fine choice of Sri Lankan and international dishes, including superbly fresh seafood. Next door to Brasses there is also a welcoming bar serving a wide range of cocktails and other alcoholic drinks. For a change of scene, guests can choose to eat lunch or dinner in the jungle or on the nearby beach, with the ocean illuminated by the light of a bonfire.
In season the beach also hosts sea-turtles who return to lay eggs by moonlight, and by day elephants sometimes emerge from the jungle to cool off in the surf. Also nearby is a briny lake where ibis, storks and flamingos congregate. This all before you even think about exploring Yala National Park proper, home to some 44 mammal species and the world's highest population density of leopards. Continuing on the wildlife trip but offshore this time, blue and humpback whales gather off the Little and Great Basses reefs and we can arrange whale watching boat trips. Other worthwhile expeditions - if you can drag yourself away from the pool and beach - are to one or more of the many Hindu and Buddhist pilgrimage sites and temples in the vicinity.
With world class wildlife and cultural curiosities on the doorstep, there's plenty to entertain anyone staying at Chena Huts, but the temptations of the beach or just relaxing at the lodge are strong…
Rosie, Original Traveller
Itineraries that feature Chena Huts
Best for: Couples, Families and Solo Travellers
An Active Adventure in Sri Lanka
This 15-day trip in Sri Lanka is designed for those who can't bear to sit still. Instead, trek, swim, cycle, sail, stroll and pick your way around...
Luxury Sri Lanka Honeymoon
With its beautiful landscapes and delicious cuisine, Sri Lanka is the perfect location for a magical honeymoon. To get the most from your visit,...
Summer Love in Sri Lanka
Spot leopards on safari, pick tea leaves in the hill country and enjoy a few days of quality time on palm fringed beaches. Including stays in...
Other Places to Stay in Yala, Wilpattu & Gal Oya National Parks
Indian Subcontinent > Sri Lanka > Yala, Wilpattu & Gal Oya National Parks
Noel Rodrigo's Leopard Safaris Wilpattu Camp
The lakeside location of the Leopard Safaris camp, just a stones throw from Wilpattu National Park, was chosen with isolation in mind, so that...
Noel Rodrigo's Leopard Safaris Yala Camp
Leopard Safaris camp sits is blissful isolation in the buffer zone at Yala (read: as close as you can get), bordering the elephant fence. The...
Leopard Trails Wilpattu
The younger sister camp to Leopard Trails Yala, Leopard Trails Wilpattu was established in order to take advantage of the wonderful wildlife...
Leopard Trails Yala
Yala National Park consists of scrub jungle, lakes, and riverine habitats, and it has gained international notoriety as one of the best places...
Gal Oya Lodge
Yala and Wilpattu are the big hitters in Sri Lanka's National Park scene, meaning that the vast Gal Oya National Park in the heart of the island...
Wild Coast Tented Lodge
Wild Coast Tented Lodge is an all new canvas lodge situated on a deserted beach at the edge of Yala National Park.
Miranda and Rosie are our 'Chena Huts' experts and as seasoned travellers they have the inside track on the most memorable adventures.


When they arrived, attendees enjoyed coffee and breakfast as they settled in for opening remarks. PatientPing's Head of Operations, Neal Vachhani, and Director of Operations, Vanessa Kuhn, took the stage to kick off the morning. They emphasized the importance of bringing Texas' community of providers together to improve care, lower costs, and break down the barriers to effective care coordination today.
PatientPing's Head of Product, Dave Rodger, took the stage next to provide attendees with a product update. Dave talked about the "four pillars" of our product vision, and reviewed some recent advancements in our platform. Then, he gave attendees a sneak peek into our product roadmap.
After a short break, attendees took their seats for our Care Coordination Panel, monitored by PatientPing's Clinical Lead, Dr. Namita Seth Mohta, and led by three of our Texas community members: Janice Finder, Director of Population Health at Houston Methodist Coordinated Care, Ron McGaughy, VP of Network Development at HMG Healthcare and Janice Riggins, SVP, Home Health Clinical Services at Encompass Health.
For the next hour, panelists and members of the audience discussed how their organizations achieved success in these areas, as well as roadblocks they faced. Due to attendees and panelists representing organizations across the entire continuum, the rich conversation allowed all to gain a unique perspective on each topic, facilitating even further the communication and collaboration among various providers.
These conversations continued on through lunch, where attendees were encouraged to sit with others not part of their organization. By doing so, they were able to take advantage of the unique opportunity to collaborate, network, and engage with different provider types from all over the state.
To close out the day, attendees went on to join one of our two breakout sessions; a User Discovery Session and a Strategy Breakout Session. Those attending the User Discovery Session, led by our Product Designer, Christina Raymond, talked about how their organizations were using using PatientPing, which features were utilized most frequently, along with what would be helpful from PatientPing in the future to further improve their care coordination efforts. Down the hall in the Strategy Breakout Session, providers discussed changes in the healthcare landscape and key areas of focus for 2019. We could have spent the whole day talking, and will have to pick up the conversation at the next event!
Thank you to our Texas community for coming out and making the day such a success. Stay tuned for details on our next summit!


text:
Vince Dwyer was an Australian professional rugby league footballer who played in the 1920s and 1930s.  Dwyer played for Western Suburbs, Canterbury-Bankstown and Newtown.  Dwyer was a foundation player for Canterbury-Bankstown.

Playing career
Dwyer made his first grade debut for Western Suburbs in Round 16 1929 against Glebe at Wentworth Park.  In 1930, Dwyer signed for Newtown and played in 5 games for the club scoring 3 tries.  After 4 years out of first grade, Dwyer signed with newly admitted side Canterbury-Bankstown.

Dwyer played for the club in their first ever game against North Sydney at North Sydney Oval which finished in a 20-5 loss.

Canterbury-Bankstown finished the 1935 season in second last position narrowly avoiding the wooden spoon which was handed to University but Dwyer did finish as the club's top try scorer with 4 tries.

References

Newtown Jets players
Canterbury-Bankstown Bulldogs players
Western Suburbs Magpies players
Rugby league players from Sydney
Rugby league wingers
Rugby league centres
Year of birth missing
Place of birth missing
Year of death missing
Place of death missing


CVS always try to keep up with the Latest Vending Machines on the market, we offer many other services from refurbishment to upgardes.
So if you are thinking about getting one of our latest vending machines today then please get in touch.
Here at City Vending Services, our machines are carefully chosen by our team of Vending Machine experts. To ensure that you receive the perfect solution for your space.
From delicious hot drinks from quality suppliers such as PG Tips and Douwe Egberts to Snack & Cold Drinks Vending Machines.
We can help you, your staff and customers in your showroom, boardroom or office. Along with providing the Vending Machine.
We take care of keeping you fully stocked and have one off services when they are needed.
We also take in vending machines for refurbishment if you are in need of an upgrade.
Our state of the arts Latest Vending Machines offers you guaranteed vending solution every time, along with cashless payments and touchscreen technologies.
Not sure which of our hot or cold machines is the best fit for your business?
Why not give one of our friendly vending specialists a call today on 01827 63000, or fill in the contact form on the right and we will give you a callback.


text:
Time Gentlemen, Please! (video game)
Time Gentlemen, Please!
Zombie Cow Studios
Designer(s)
Dan Marshall, Ben Ward
Ben There, Dan That!
Adventure Game Studio
Point-and-click adventure
Time Gentlemen, Please! is a point-and-click adventure game developed by Zombie Cow Studios. It is the sequel to the freeware game Ben There, Dan That! and was commercially released on June 22, 2009. As with the first game, Time Gentlemen, Please! was created using the Adventure Game Studio engine.
The game features a darkly humorous, at points surrealistic setting. Of note is the consistent referencing of other classic adventure games: posters from Sam & Max and Full Throttle were seen in the first episode, the characters often quote dialog from e.g. Monkey Island or Day of the Tentacle, Ben refers to Dan as "the Glottis to my Manny!", and the first episode features a zombie child called Gilbert. The game also satirizes the "adventure game logic" (i.e. carrying around a variety of useless items in hopes of combining them to be useful), with Ben and Dan often breaking the fourth wall and directly referring to not needing certain items in their inventory.
In-game screenshot
The events of Time Gentlemen, Please! continue from Ben There, Dan That!; in the first game, while attempting to rig a makeshift television antenna made out of a coathanger to watch a Magnum, P.I. marathon, Ben and Dan find themselves transported aboard an alien spacecraft. Eventually, they discover the spacecraft was simply a mockup built in a warehouse, designed to keep them busy. The plan was crafted by the future selves of Ben and Dan, who had traveled back in time to install their earlier selves as leaders of a mind-washed world.
Time Gentlemen, Please! continues from this point; Ben and Dan accidentally convince the world to simply watch the Magnum, P.I. marathon, eventually killing off the entire world population. Realizing this was a mistake, they decide they must go back in time and prevent the creation of the coathanger such that their future selves would have never been able to teleport them to the fake alien craft. After discovering the time device their future selves used, they spend two weeks (relative to themselves) travelling through time to attempt to correct their error, but instead find themselves having made things worse, as in 1945, Adolf Hitler has come to rule the world with his army of anthropomorphic dinosaurs due to the power of the Golden Coathanger. Hitler captures the two and takes the time device away, using it to further assure his power but further damaging the time stream. Ben and Dan work through the time paradoxes in order to defeat Hitler and recover the time device. Realizing now that preventing the creation of the coathanger is disastrous, the two go back in time and stop their earlier selves before the coathanger is invented. However, this creates yet another paradox and causes the universe to disappear. God appears to the two, noting how they have mucked about too much in the timelines and that he will have to reset the universe for them. The two find themselves back at their flat and their world returned to normal.
This section needs expansion. You can help by adding to it. (December 2009)
The game was designed by Dan Marshall and Ben Ward.[1]
Aggregate scores
GameRankings 84.44% [2]
Metacritic 84%[3]
Adventure Gamers [4]
Eurogamer 9/10[5]
GamesRadar+ 9/10[6]
GamesTM 70%[3]
PC Format 87%[3]
PC Gamer (UK) 87%[3][7]
PC Zone 90%[3][7]
Total PC Gaming 80%[3]
Critics mostly praised the game for its humour and writing, while its scatalogical humour and swearing were "not for everybody".[8][9][10] IGN named the game one of the "best of 2009 so far" in August 2009.[11] PC Zone magazine in the UK said: "It's one of the most outrageous games I've ever played and for that alone I love it." IT Reviews gave it a Recommended award, and commented that "the puzzles are pitched so adeptly that they're almost always satisfying to solve with nary a hint of frustration. This fact, plus all the laughs, the slabs of layered-on sarcasm and the wonderfully off-the-wall plot, makes Time Gentlemen Please a joy to meander through."[12] Total PC Gaming magazine simply stated: "Let us remind you of the price of this gem: 2.99. Buy it, you tight wad."
^ Phill Cameron (2009-10-12). "Interview: The Adventure Game Resurrectionists Of Zombie Cow". Gamasutra. Retrieved 2009-10-16.
^ "Time Gentlemen, Please!". GameRankings. Retrieved 2010-03-02.
^ a b c d e f "Time Gentlemen, Please! Review". Metacritic. Retrieved 2009-10-16.
^ Luke Jensen (2009-08-19). "Review: Time Gentlemen, Please!". Adventure Gamers. Retrieved 2009-10-16.
^ Dan Griliopoulos (2009-07-01). "Time Gentlemen, Please! Review". Eurogamer. Retrieved 2009-10-16.
^ John Walker (2009-07-22). "Time Gentlemen, Please!". GamesRadar. Retrieved 2009-10-16.
^ a b "Time Gentlemen, Please! and Ben There, Dan That! Double Pack". Valve. Retrieved 2009-10-16.
^ Justin McElroy (2009-07-16). "Time Gentlemen, Please!". Joystiq. Retrieved 2009-10-16.
^ Daemon Hatfield (2009-07-02). "Indie Pick of the Week: Time Gentlemen, Please!". IGN. Retrieved 2009-10-16.
^ Matt Wales (2009-09-01). "More Dan and Ben from Zombie Cow". IGN. Retrieved 2009-10-16.
^ IGN UK Staff (2009-08-13). "Best of 2009: So Far". IGN. p. 3. Retrieved 2009-10-16.
^ "IT Reviews". Archived from the original on 2010-02-13.
Game entry on the Steam download platform
Game entry on the Adventure Game Studio database
Size Five Games
Gibbage
Behold the Kickmen
Retrieved from "https://en.wikipedia.org/w/index.php?title=Time_Gentlemen,_Please!_(video_game)&oldid=929124219"
2009 video games
Adventure Game Studio games
Indie video games
Point-and-click adventure games
Science fiction video games
Video games about time travel
Video game sequels
Video games developed in the United Kingdom
Windows-only games
Articles using Infobox video game using locally defined parameters
Articles using Wikidata infoboxes with locally defined images
Articles to be expanded from December 2009
Articles using small message boxes
Articles using Video game reviews template in single platform mode


text:
Q: Solution to Error: ORDER BY items must appear in the select list if SELECT DISTINCT is specified Reason for Error:
I am creating a method on a TimeCard entity. The TimeCard entites relates to an Employee entity. The method sorts TimeCards by employee name.
Obvious Solution
Copy the stored procedure from the [project_name]_procedures.sql file and add the sorted columns to the select statement. Then create a raw method using the stored procedure.
Question:
Is there a better solution. I don't like the obvious solution because it will break if I add additional properties to the TimeCard entity.

A: The SQL generated by CFE is not valid as explain in this post: How SQL DISTINCT and ORDER BY are Related. I think there are 2 workarounds:

*

*Remove the DISTINCT from the stored procedure if it is not needed:
<cf:method name="LoadForActiveEmployeesSortedByEmployee" distinct="false" ... />

*Use a raw method with the valid SQL query:
<cf:method body="LOAD() raw" rawBody="SELECT DISTINCT $TimeCard{Columns}$, EmployeeName FROM $TimeCard$ JOIN ... WHERE ... ORDER BY ...">

A: I came up with an exceptable solution which I am sharing. If there is a better solution please let me know.
Why this error occurs:
When using CFQL and adding a WHERE clause that uses properties from a related entity the generated stored procedure adds DISTINCT to the SELECT statement. This will generate an error if you also add a sort order based on a property of the related entity.
Step 1
Create the Method using CFQL without a sort order

Step 2
On the BOM Producer, set the NameSpaceImports proterty to System.Linq

Step 3
Create a Snipped Method that uses LINQ to sort by the related entities property

Caveat
When calling the method the return type is List not TimeCardCollection

Below is the full xml definition. To reproduce the original error, set enabled to true for the method LoadForActiveEmployeesSortedByEmployee

<cf:project defaultNamespace="DemoSortByRelatedEntity" xmlns:cf="http://www.softfluent.com/codefluent/2005/1" xmlns:cfx="http://www.softfluent.com/codefluent/modeler/2008/1" xmlns:cfps="http://www.softfluent.com/codefluent/producers.sqlserver/2005/1" xmlns:cfom="http://www.softfluent.com/codefluent/producers.model/2005/1" xmlns:cfasp="http://www.softfluent.com/codefluent/producers.aspnet/2011/1" defaultTargetFramework="4.0" defaultConnectionString="Database=DemoSortByRelatedEntity;Integrated Security=true" createDefaultMethodForms="true" createDefaultApplication="false" createDefaultHints="false">
  <cf:import path="Default.Surface.cfp" />
  <cf:producer name="SQL Server Producer" typeName="CodeFluent.Producers.SqlServer.SqlServerProducer, CodeFluent.Producers.SqlServer">
    <cf:configuration connectionString="Database=DemoSortByRelatedEntity;Integrated Security=true;Server=.\SQLExpress" produceViews="true" targetVersion="Sql2014" targetDirectory="..\DemoSortByRelatedEntity.Persistence" cfx:targetProjectLayout="UpdateItems, DontRemove" cfx:targetProject="..\DemoSortByRelatedEntity.Persistence\DemoSortByRelatedEntity.Persistence.dbproj" />
  </cf:producer>
  <cf:producer name="BOM Producer" typeName="CodeFluent.Producers.CodeDom.CodeDomProducer, CodeFluent.Producers.CodeDom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1bb6d7cccf1045ec">
    <cf:configuration compileWithVisualStudio="true" targetDirectory="..\DemoSortByRelatedEntity" cfx:targetProject="..\DemoSortByRelatedEntity\DemoSortByRelatedEntity.csproj" namespaceImports="System.Linq" cfx:targetProjectLayout="Update" />
  </cf:producer>
  <cf:producer name="ASP.NET WebForms Producer" typeName="CodeFluent.Producers.UI.AspNetProducer, CodeFluent.Producers.UI">
    <cf:configuration categoryPath="UI\AspNetWebForms" targetDirectory="..\DemoSortByRelatedEntity.Web" cfx:targetProject="..\DemoSortByRelatedEntity.Web\DemoSortByRelatedEntity.Web.csproj" />
  </cf:producer>
  <cf:entity name="TimeCard" namespace="DemoSortByRelatedEntity">
    <cf:property name="Id" key="true" />
    <cf:property name="InTime" typeName="datetime" />
    <cf:property name="OutTime" typeName="datetime" />
    <cf:property name="Employee" typeName="{0}.Employee" />
    <cf:method name="LoadForActiveEmployeesSortedByEmployee" body="LOAD() WHERE Employee.IsActive = TRUE ORDER BY Employee.Name" enabled="false" />
    <cf:method name="LoadForActiveEmployees" body="LOAD() WHERE Employee.IsActive = TRUE" />
    <cf:instance>
      <cf:instanceValue name="Id">58138358-1578-4f3a-9273-4fea17aa7dd5</cf:instanceValue>
      <cf:instanceValue name="InTime">1/1/2019 12:00:00 AM</cf:instanceValue>
      <cf:instanceValue name="OutTime">2/2/2019 12:00:00 AM</cf:instanceValue>
      <cf:instanceValue name="Employee">a57ba60a-5e6a-4df0-88b9-283d60517b66</cf:instanceValue>
    </cf:instance>
    <cf:instance>
      <cf:instanceValue name="Id">487a8bcf-89a1-49d6-b970-ae8d32c0f7f2</cf:instanceValue>
      <cf:instanceValue name="InTime">2/3/2019 12:00:00 AM</cf:instanceValue>
      <cf:instanceValue name="OutTime">2/4/2019 12:00:00 AM</cf:instanceValue>
      <cf:instanceValue name="Employee">4762eeea-dcc7-4d7e-8b07-1f78b73657ed</cf:instanceValue>
    </cf:instance>
    <cf:instance>
      <cf:instanceValue name="Id">5f039986-e423-460f-aa7e-9b28e2a507b3</cf:instanceValue>
      <cf:instanceValue name="InTime">2/5/2019 12:00:00 AM</cf:instanceValue>
      <cf:instanceValue name="OutTime">2/6/2019 12:00:00 AM</cf:instanceValue>
      <cf:instanceValue name="Employee">c7ae6667-55d4-4ba2-8576-4c0c950b7231</cf:instanceValue>
    </cf:instance>
    <cf:setSnippet name="LoadForActiveEmployeesSortedByEmployeeFix1" language="CSharp"><![CDATA[
    public static System.Collections.Generic.List<TimeCard> LoadForActiveEmployeesSortedByEmployeeFix1()
        {
            return LoadForActiveEmployees().OrderBy(x => x.Employee.Name).ToList();
        }
]]></cf:setSnippet>
  </cf:entity>
  <cf:entity name="Employee" namespace="DemoSortByRelatedEntity">
    <cf:property name="Id" key="true" />
    <cf:property name="Name" entityDisplay="true" />
    <cf:property name="IsActive" typeName="bool" />
    <cf:instance>
      <cf:instanceValue name="Id">a57ba60a-5e6a-4df0-88b9-283d60517b66</cf:instanceValue>
      <cf:instanceValue name="IsActive">True</cf:instanceValue>
      <cf:instanceValue name="Name">Jon</cf:instanceValue>
    </cf:instance>
    <cf:instance>
      <cf:instanceValue name="Id">4762eeea-dcc7-4d7e-8b07-1f78b73657ed</cf:instanceValue>
      <cf:instanceValue name="Name">Mike</cf:instanceValue>
    </cf:instance>
    <cf:instance>
      <cf:instanceValue name="Id">c7ae6667-55d4-4ba2-8576-4c0c950b7231</cf:instanceValue>
      <cf:instanceValue name="IsActive">True</cf:instanceValue>
      <cf:instanceValue name="Name">Lisa</cf:instanceValue>
    </cf:instance>
  </cf:entity>
</cf:project>


text:
Q: How to represent the current UK time? I'm facing an issue while converting dates between my server and client where both is running in Germany. The Regional settings on the client machines could be set to both UK or Germany.I recieve a date from the server which is CET format, and I need to represent this time on UI as UK time. For example a time recieved from server like say, 01/07/2010 01:00:00 should be represented on the UI as 01/07/2010 00:00:00. I have written a converter for this purpose, however while running it 'am getting a time difference of 2 hours.Below is the code, please can you help?
public class LocalToGmtConverter : IDateConverter
{
    private readonly TimeZoneInfo timeZoneInfo;

    public LocalToGmtConverter()
        : this(TimeZoneInfo.Local)
    {

    }
    public LocalToGmtConverter(TimeZoneInfo timeZoneInfo)
    {
        this.timeZoneInfo = timeZoneInfo;
    }

    public DateTime Convert(DateTime localDate)
    {
        var utcKind = DateTime.SpecifyKind(localDate, DateTimeKind.Utc);
        return utcKind;
    }

    public DateTime ConvertBack(object fromServer)
    {
        DateTime serverDate = (DateTime)fromServer;

        var utcOffset = timeZoneInfo.GetUtcOffset(serverDate);

        var uiTime = serverDate- utcOffset;

        return uiTime;

    }
}

A: This is what I do:
    var BritishZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");

    DateTime dt = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Unspecified);

    DateTime DateTimeInBritishLocal = TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.Utc, BritishZone);

I needed to add the SpecifyKind part or the ConvertTime throws an exception

A: I think you're converting to UTC (instead of UK) time. Since there is still summer time in Central Europe (event if the temperatures say otherwise), the difference is +2 hours until October, 31st.
If you know that you're converting from Germany to UK (i.e. CEST to BST in summer and CET to GMT in winter), why you don't just subtract 1 hour?
If you want the time zone information for UK, you can construct it using
var britishZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");

Then you could convert the date using
var newDate = TimeZoneInfo.ConvertTime(serverDate, TimeZoneInfo.Local, britishZone);

A: Use TimeZoneInfo.ConvertTime to convert original input timezone (CET) to target timezone (UK).
public static DateTime ConvertTime(
    DateTime dateTime,
    TimeZoneInfo sourceTimeZone,
    TimeZoneInfo destinationTimeZone
)

Full guidance on MSDN here:

Converting Times Between Time Zones

Modified code sample from MSDN:
DateTime ceTime = new DateTime(2007, 02, 01, 08, 00, 00);
try
{
   TimeZoneInfo ceZone = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard        Time");
   TimeZoneInfo gmtZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
   Console.WriteLine("{0} {1} is {2} GMT time.",
           ceTime,
           ceZone.IsDaylightSavingTime(ceTime) ? ceZone.DaylightName : ceZone.StandardName,
           TimeZoneInfo.ConvertTime(ceTime, ceZone, gmtZone));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the required timezones.");
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the required timezones has been corrupted.");
}

A: The better approach to deal with local times is store them in unified representation such as UTC.
So you can convert all input times to UTC (via .ToUniversalTime()), and store (or transmit) its value. When you need to show it just convert back by using .ToLocalTime().
So you avoid rquirements to know which time zone was original value and can easily show stored value in different timezones.
Also you can avoid incoming troubles where you have to write specific logic for processing time in next timezone trying to figure out how to convert them amongs all available.

A: I realize the question is for C#, but if all you want to do is a single conversion you can do this from the PowerShell command line:
$d = [DateTime]::Parse("04/02/2014 17:00:00")
$gmt = [TimeZoneInfo]::FindSystemTimeZoneById("GMT Standard Time");
[TimeZoneInfo]::ConvertTime($d, $gmt, [TimeZoneInfo]::Local)

This script would convert 17:00 UK time into your local time zone.
For me, that would be CST. It's interesting to note that if I had set the date to 03/27/2014, the result would be different because the UK daylight saving time kicks in on different dates that the US.


It's funny how interconnected the habits of my life are.
Case in point: my laptop. It died, rather unceremoniously, just before Thanksgiving. My computer fix-it guy said the motherboard was fried.
Being a mother, in the middle of the holiday season, I could sympathize.
When Mr. Fix-It told me how much it would be to repair the thing, my sympathy turned to simmering anger. The laptop, just barely two years old, would cost me over $350 to fix. About half the cost of a moderately awesome, brand-new computer!
No thanks, I said. I'll just get a new one.
I took the useless box home, though, in case I change my mind. That has not happened. I'm mad at technology.
The interesting part of this experience has been how the death of my laptop has created an ennui of sorts. I find that I am (almost) completely disinterested in writing without that laptop. And since I usually write about quilts, I also find that I am (almost) completely disinterested in quilting. And since I've not been writing or quilting, I've been (almost) completely bored in my spare time.
What was it about that laptop? Did it have some magical hold on me that I didn't understand? How on earth has the lack of it zapped me of quilting energy? Have I broken some strange web of invisible thread that links my writing habits to my quilting hobby?
The death of the laptop has just magnified the January-ness.
The holidays are over. I'm tired of shopping, wrapping, cooking, parties, visits. The weather is yucky. The mornings and afternoons are dark. I have that feeling you get when you are in between projects. One is over, and the next has yet to begin.
I am tempted to force myself to start something new. Or to finish something old. But, you know what?
Oh my goodness! As I'm reading your post and chuckling (fried mother board – HAHA – but not really funny), I am shaking my head along with you. And my laptop isn't fried and still works well. I have had no interest in sewing this month at all, especially this week. I forced myself to cut SIX 2.5″ x 10.5″ strips Wednesday evening. I took me an hour to do so because I cut one strip 3″ and then had to trim all the rectangles. They are cut but I didn't sew them on the blocks – they are safely sitting next to the sewing machine should I find inspiration. I did not know there was a January slowdown or January-ness. I am so glad you pointed that out today. It's not JUST ME. I have been in the ennui as well – not reading, not really doing anything productive at all.
Oh my goodness, that is definitely some fabric cutting ennui at work, my friend! I'm glad you made it through. Now get yourself some chocolate and a nap – you can't possibly be thinking of sewing that stuff. 🙂 LOL Spring is coming – just hang in there and know that I am with you in spirit!
I'm so glad you liked it! I can't say I put much work into it, sadly…but you read the post so I'm sure you get it. LOL Sigh. I ordered a new laptop (actually, a new-old one; refurbished) but it hasn't come yet because….all the snow has delayed it's delivery. 🙂 If it ain't divine intervention, calling me to nap and read books, I don't know what it is!


It doesn't matter whether you are in the same room or in different countries – TheTakes is here to help you discuss your project together. Monitor each other's edits in real time. Change and supplement any system module. You can always be positive that your data is up-to-date.


How do I use my Avanti Travel Insurance discount code?
Browse the Avanti Travel Insurance on site and click it to find the code or deals.
When you've chosen the perfect code or deal, just to see the code and then go to Avanti Travel Insurance.
Choose the items that you need from Avanti Travel Insurance, view your shopping cart and check that your order qualifies for the discount available.
Type or copy your Avanti Travel Insurance discount code into the 'Add a promo code' box.
What should i do, if the Avanti Travel Insurance codes are not working ?
If it doesn't work, you can check whether the discount code has already expired at Avanti Travel Insurance, but still is on our websites, we'll check the code. If it doesn't work, we'll remove the codes immediately. Also you can see the coupon description again, some voucher codes can work only when you spend a certain amount.
If i use one vouchers & discount code at the same products of Avanti Travel Insurance,is this available?
Unfortunately, you maybe only can use one voucher for the same products at Avanti Travel Insurance on most occasions. You can check the terms & conditions to confirm.
Online shopping becomes more and more popular. It brings great conveniences to our purchase at home. Avanti Travel Insurance is one of the best online merchants in UK. How to find the best-value Avanti Travel Insurance products? If you want to buy products at Avanti Travel Insurance with low prices, Vouchersguru will give you a favor.
Vouchersguru is one of the most welcomed online store specialized in offering exclusive discounts, voucher code and deals. With the latest Avanti Travel Insurance voucher code from Vouchersguru, you can enjoy great discount and instant savings. The discounts and voucher codes are 100% valid with daily check promised by Vouchersguru. Shop and save now with the latest discount code and promo code for Avanti Travel Insurance from Vouchersguru and get the exclusive Avanti Travel Insuranceoffers.
Want to purchase various kinds of Avanti Travel Insurance products at the most affordable prices? We 'll provide the Latest valid Avanti Travel Insurance discounts & vouchers for your huge money savings at Avanti Travel Insurance.
We'll help you Save more money by using Avanti Travel Insurance promo code & deals. Daily update & check for Avanti Travel Insurance discount code & voucher code are guaranteed by us. You can enjoy immediate savings for the products you need with 100% valid Avanti Travel Insurance promo code.


text:
Q: How to compare two Series of Datetime by ignoring the datetime format I want to compare two Series containing datetimes. One Series has ISO datetime format
[left]:  [2010-01-01T00:00:00.000Z]

The other one is not
[right]: [2010-01-01 00:00:00]

I am using the pandas assert pd.testing.assert_series_equal(left, right)
Are there any easy ways to do it without explicitly converting them to the same format?

A: The format on your left series includes a timezone, but the right series does not. You could transform both series from a string to a datetime format using pandas.to_datetime:
left = pd.Series(["2010-01-01T00:00:00.000Z"])
right = pd.Series(["2010-01-01 00:00:00"])

left = pd.to_datetime(left, utc=True)
right = pd.to_datetime(right, utc=True)

The utc=True part is important. From the docs:

If True, the function always returns a timezone-aware UTC-localized Timestamp, Series or DatetimeIndex. To do this, timezone-naive inputs are localized as UTC, while timezone-aware inputs are converted to UTC.

Now, assuming that your series have the same index, you could directly compare them this way:
(left == right).all()  # `.all()` verifies if a series only contains True values


CLW Transmission Type: Manual Displacement: 9 Fuel: Diesel Maximum Horsepower: 300-400hp Engine: 266HP/290HP/336HP/371HP Mixer Body Volume: Famous HOWO 6X4 Chassis which made by SINOTRUK 2. We have modern management system, the delivery time are on time.
Tunnel construction high precision concrete pump for sale Zhengzhou Sincola Machinery Co.,Ltd. Dry Mix Gunite Shotcrete swimming pools can be used thanks Meanwhile, with the famous brand of main pump and hydraulic valve, the safety and reliability of the concrete pump are guaranteed.
Compost Mixer, Wholesale Various High Quality Compost Mixer Products from Global Compost Mixer Suppliers and Compost Mixer Factory,Importer,Exporter at Alibaba.com. About 78% of these are mixing equipment, 6% are compost making machines, and 1% are concrete mixers.
KEYWORDS ON PAGE (quanzhou "qunfeng 10000m alibaba automatic become benchmark block blockmaking brick cement china chinese concrete created design electric Pre-sales Service_Qunfeng Concrete block machine,brick making machine,electric sweeper,block making mahchinery, Fujian famous brand p.
However, experts have warned that since the brands have been built up in a too simple way, they would not survive for a long time.The owners of the Vietnamese about The FUSO brand introduces new concrete mixer truck which is world-famous for producing and exporting seafood products.
The modern portable concrete mixer trailer carries a drum just like a standard ready-mix truck. But unlike the old "U-cart" tub Find Stone mixer parts for Concrete Volumetric Mixers for Sale – Concrete Equipment for Sale in every major brand at all price levels.
certification and displacement from certified chinese 2015 china famous topmac brand one bag diesel concrete concrete mixer parts for sale, concrete mixer.
js500 concrete mixer famous brand concrete mixer machine js500 factory. chinese famous brand a hzs35 fixed. one bag cement concrete mixer.


text:
SmartData Collective > Big Data > Data Mining > Calculate the Value of Your Facebook Page
Calculate the Value of Your Facebook Page
Posted by PamDyer May 19, 2010
More Than Just a Title: How to Identify a Data Scientist
Marketers are clamoring for data to determine the ROI of their social-media efforts, and a new free tool called the Social Page Evaluator, from social media management company Vitrue, is here to help. It's designed to assist marketers as they try to get a better grasp of the value of a brand's Facebook Page.
A Facebook Page is commonly referred to as "fan page", and its purpose is to provide a platform for brands to connect and communicate with their audience. Pages come in many varieties: they can represent actual brands, organizations, non-profits, and other entities — including people, blogs, etc. When you engage and opt-in on a brand's Facebook Page, you "like" (formerly "Become a Fan") them.
The Social Page Evaluator is easy to use. Enter the URL of any Facebook Page and it will examine its fan count, post frequency, and various fan interactions with the Page and calculate a valuation. The formula used by the application is related to the formula that Vitrue recently released to estimate the relative value of Facebook Fans to large brands. The tool is adjustable and interactive — for example, the base rate of Earned Media Value (or CPM) is $5, but this can be …
The Social Page Evaluator is easy to use. Enter the URL of any Facebook Page and it will examine its fan count, post frequency, and various fan interactions with the Page and calculate a valuation. The formula used by the application is related to the formula that Vitrue recently released to estimate the relative value of Facebook Fans to large brands. The tool is adjustable and interactive — for example, the base rate of Earned Media Value (or CPM) is $5, but this can be adjusted higher or lower. There is also a "Fan-tasize" section that enables you to tweak other features like number of posts per day, engagement level, and fan count to see how these impact the valuation.
The interface allows you to compare a Facebook Page with up to three other brands and to view a Page's value history. In addition to the valuation data, there is also a list of best practices for getting the most out of your Facebook Page that offers a breakdown of contributing factors to your Page's current value and suggestions about how to improve engagement.
This tool isn't completely scientific, but it's one way way to gauge value of a Page to advertisers and to see the factors that impact a Facebook Page valuation. It's also a good catalyst for thinking about the potential advertising power of a Page.
PamDyer May 19, 2010
Deciphering The Seldom Discussed Differences Between Data Mining and Data Science
Essential Proxy Selection Tips For Web Data Mining
How A Data Mining Approach For Search Engine Optimization Works
Hadoop Data Mining Tools Can Enhance The Value Of Digital Assets


PTC is pleased to announce that Jess Amy Shead joins us as our Community Engaged Producing Intern from October 2018 – July 2019. Expanding her experiences in access and inclusion work at the Vancouver Fringe, Jess Amy will help PTC to formalize and publicize the inclusion protocols we have developed since our ACK Lab project with JD Derbyshire. While developing her producing skills with our WrightSpace and Unscripted programs, Jess Amy will study ASL, and attend the Awakening Deaf Theatre Conference in Montreal and the SOUNDOFF Festival in Edmonton. These experiences will enrich both her creative and producing practices. She will also receive support in developing the project Otosan with Shizuka Kai and Randi Edmundson. We are grateful to the BC Arts Council for making this internship possible through the Early Career Development grant.
JESS AMY SHEAD immigrated to Canada from South Africa when she was two years old. She now lives on the unceded, traditional territory of the Musqueam, Squamish and Tsleil-Waututh nations. She is an actor, creator, producer, and arts administrator, with a focus on site-specific micro-performance, puppetry, theatre for young audiences, physical theatre, and collaborative creation. She has created her own work, most recently The Somewhere Cedar, which was co-presented at the rEvolver Festival by Upintheair Theatre and The Only Animal. She has worked as an actor at The Globe Theatre, Pacific Theatre, Chemainus Theatre, The Belfry Theatre, and Theatre SKAM, among others. She just completed her fifth year as Artist Services Coordinator at the Vancouver Fringe Festival, and was the Artist Services Coordinator for Full Circle First Nations Performance's Talking Stick Festival for one year. She is a graduate of The Canadian College of Performing Arts, and completed the Pacific Theatre Acting Apprenticeship in 2016. She is the co-recipient of two Jessie Richardson Theatre Awards, and a Vancouver Fringe Artistic Risk Award.


text:
Q: Selecting from a tuples of list I have a list of tuples of pairs of names, every pair has a value, in this format:
1.[('Carlo', 'Helen', 9), ('Carlo', 'Mary', 4), ('Jan', 'Rolly', 1), ('Renzi', 'Rolly', 3)]
2.[('Sofy', 'Reem', 9), ('Sofy', 'David', 5),('Sofy', 'keem', 3) ('Roly', 'Tony', 4), ('Gianni', 'Tony', 2)]
3.[('Sofy', 'Reem', 9), ('Sofy', 'David', 5),('Sofy', 'keem', 3),('Roly', 'Reem', 5), ('Roly', 'David', 2),('Roly', 'keem', 3)]

And what I want is: for every line in the list if two or more pairs of names share one name (the first or the second name) I have to choose the pair with high value. So for the example above the output will be
  1-('Carlo', 'Helen', 9)
    ('Renzi', 'Rolly', 3)
  2-('Sofy', 'Reem', 9)
    ('Roly', 'Tony', 4)

Can someone help?

A: I have not looked at ways to improve this yet, but you can do a two pass over your list. On the outer loop each item is chosen as the candidate for selection. On the inner loop, each iteam which matches in name or surname and replaces the candidate for selection if and only if its score is higher than the current candidate. At the end of the inner loop you insert your candidate to the selection list if its not already inserted.
def get_top_scorers(dataset):
    if dataset and all(isinstance(d, list) for d in dataset):
        return [get_top_scorers(d) for d in dataset]
    selected_list = []
    for candidate in dataset:
        chosen = candidate
        for next_candidate in dataset:
            if next_candidate == chosen:
                continue
            next_name, next_surname, next_score = next_candidate

            shares_name_with_selected = any(
                next_name == s[0] or next_surname == s[1]
                for s in selected_list
            )
            if shares_name_with_selected:
                continue

            name, surname, score = chosen
            if (name == next_name or surname == next_surname) and score < next_score:
                chosen = next_candidate

        shares_name_with_selected = any(
            chosen[0] == s[0] or chosen[1] == s[1]
            for s in selected_list
        )
        if chosen not in selected_list and not shares_name_with_selected:
            selected_list.append(chosen)
    return selected_list

A: You need two functions. One is iterative grouping and the other one for finding the highest value:
def find_highest_pair(tuple):
    highest_value = 0
    result = []
    for pair in tuple:
        if pair[2] > highest_value:
            highest_value = pair[2]
            result = pair
    return result

def grouping(tuple,n):
    stack = []
    result = []
    backup = []
    if tuple:
        check_pair = tuple.pop(0)
        backup = tuple
        if tuple:
            if check_pair[n] == tuple[0][n]:
                stack.append(tuple[0])
                tuple.pop(0)
        if not stack and len(tuple) > 0:
            return grouping(backup,n)
    stack.append(check_pair)
    result = find_highest_pair(stack)
    return result

tuple1 = [('Carlo', 'Helen', 9), ('Carlo', 'Mary', 4), ('Jan', 'Rolly', 1), ('Renzi', 'Rolly', 3)]
tuple2 = [('Sofy', 'Reem', 9), ('Sofy', 'David', 5), ('Sofy', 'keem', 3), ('Roly', 'Tony', 4), ('Gianni', 'Tony', 2)]

print "1:"
print grouping(tuple1,0)
print grouping(tuple1,1)
print "2:"
print grouping(tuple2,0)
print grouping(tuple2,1)

A: This works:
def fix_list(list_name):
    delete_list = []
    for i in range(len(list_name)):
        for j in range(len(list_name[i])):
            for k in range(1,len(list_name)):
                if i == k:
                    pass
                else:
                    if list_name[i][j] == list_name[k][j]:
                        if list_name[i][2] >= list_name[k][2]:
                            delete_list.append(list_name[k])
    list_name = [item for item in list_name if item not in delete_list]
    print list_name

    #Use return instead of print if you want to assign the new list to something

fix_list(list1)
fix_list(list2)

A:  # this contains both lists
lt = [('Carlo', 'Helen', 9), ('Carlo', 'Mary', 4), ('Jan', 'Rolly', 1), ('Renzi', 'Rolly', 3),
                      ('Sofy', 'Reem', 9), ('Sofy', 'David', 5),('Sofy', 'keem', 3), ('Roly', 'Tony', 4), ('Gianni', 'Tony', 2)]

           def max_value_tuples(tuple_list):
            # find max value tuples in the list of tuple
            import itertools as it
            import operator as op
            groups = []

            # group by first element
            for k, g in it.groupby(tuple_list, key=op.itemgetter(0)):
                groups.append(list(g))
            # group by second element
            for k, g in it.groupby(tuple_list, key=op.itemgetter(1)):
                groups.append(list(g))

            final = []
            # leave out idividiual tuples
            for el in groups:
                if len(el) > 1:
                    final.append(el)

            result = []
            # sort and print with highest scrores
            for el in final:
                el = sorted(el, key=op.itemgetter(2))
                result.append(el[-1])

            return result

        print(max_value_tuples(lt))

        [('Carlo', 'Helen', 9), ('Sofy', 'Reem', 9), ('Renzi', 'Rolly', 3), ('Roly', 'Tony', 4)]

    with this and your astfile, you could do:

    all_lists = []
    for x in astfile:
        x_list = max_value_tuples(x)
        all_lists.append(x_list)