Smaller Cities in Asia: What, How Many and What to Do about it?
As we look at the city of George Town, with a population of some 750,000 living with the city limits of ca. 120 sq/km (roughly the size of the city of Paris), one of the things that comes most immediately to mind is that, despite the significant challenges posed by the current transportation arrangements, it is certainly not an example of a major Asian megalopolis, or even a "large city" by Asian standards. And even if we take into account the entire George Town Conurbation, the total population is just a bit more than 2.2 million.
So what can we call it? What about a smaller Asian city?
This article has been written as what will hopefully be the first step in a process of getting together with other colleagues across Asia who share this interest in order to see if we can define a collaborative project that will address the considerable challenges (and opportunities) of transport policy and practice in smaller cities across the region. It is anticipated that these ideas will take better shape as more colleagues join the discussions.
This is interesting to the extent that it would seem that there is a special problematique when it comes to planning for sustainability in general and for sustainable transport in particular in smaller and medium-sized Asian cities. At least that is our thesis, and one to which we intend to give attention in the context of the Penang project.
But what in fact is a Smaller Asian city?
To get a feel for this we carried out some back of the envelope calculation drawing on a quick survey of UN and other recognized statistical sources. We came up with these numbers which, though admittedly rough and conceptual, are certainly not without meaning.
Here's how the rough numbers work: If we take half a million people as our lower size limit, we can see there are on the order of 400 cities in Asia with populations of about 500,000 or more.
Of these there are a rough dozen megalopolis or megaregions of more than 10 million, and another dozen of more than 5 Million. In addition there are about thirty more with populations of more than ca. 2.5 million (most of these in China). These large and mega cities have their own problematiques and issues which set them apart from the rest.
If we take this as our rough limits — i.e., populations of greater than half a million but less than 2.5 million — we are looking at something on the order of 300 cities that fall into this roughly defined group.
Certainly cities similar in many ways to George Town — Kaohsiung in Taiwan (1.8 million), Suwon in Korea (1.1 million), Semarang in Indonesia (1.5 million), Vientiane in Laos (650,0000), Cebu City in the Philippines (900,000) or Chiang Rai in Thailand (1.2 Million) — just to take a first handful of quick examples — have their own problems when it comes to transport and quality of life more generally. But they also have a number of potential advantages when compared to their larger and more congested sister cities. Their challenge being to find ways to take advantage of their assets. And this for most of them is far from a hopeless task.
Against this background, here is our question: Do these cities have enough in common when it comes to the transport and related issues to warrant thinking about them as a category worthy of analysis, not only as individual cities but as members of a larger group?
Let us look into organizing an international conference on Sustainable Transport Strategies in Smaller Asian Cities in 2015. We have a hot topic, we have a defined group of needful cities, we have an Agenda (the New Mobility Agenda) and we have helped organize international conferences and events on similar topics in many parts of the world. Now all we have to find is a sponsor.
In the meantime stay tuned to http://worldstreets.org and https://sustainablepenang.wordpress.com .
This entry was posted in 2013, 2014, Cities, Event, Strategy and tagged World Streets. Bookmark the permalink.


text:
Q: Is there a need for buffering in this case? .. will be updated soon (in construction with a more accurate information)
If the ADC (or the data.acq device) have 100 kohm input impedance, how much accuracy would I lose?
Do I need to buffer this for a better accuracy?
I'm kind of confused to relate the accuracy g and the output voltage here. I would be glad if someone may explain it for a novice.
Setup will be as shown:
..will be updated
There is an interface box for connector input outputs and a dual power supply for the transducers. Number of transducers will be much more but for simplicity I drew two of them. The interface box and the data-acq. board can be very close to each other no prob.
But the transducers (floating wrt the earth) will be around 400 meter away from the box and daq as you see above. A CAT6 twisted shielded cable will be used for each transducer. In the diagram I named the letters for the transducers which corresponds their pins from the datasheet I linked.
The manufacturer states the output impedance as 1 kohm and says load can be 100 kohm.
But isn't that a huge problem for accuracy?
I need an accuracy of 0.4 mV.
I'm kind of ignorant about how to interpret the datasheet to the accuracy and impedance of the transducer and ADC. Does this device need calibration or everything is already in datasheet? Is it possible to achieve around 0.4 mV accuracy?
*power ground and signal ground of the transducers (B and F) are internally connected I checked with a multi meter test.

A: You need a resolution of 0.4 mV in order to detect your signal. Accuracy is a different question.
The voltage divider created by the source and load impedances introduces a constant gain error factor that can be calibrated out by applying a correction factor later.
As long as your DAQ has at least 16 bits of resolution, you should be good to go. Since your measurement bandwidth is so low, most sources of noise can be filtered out, and since you're not looking for DC signals either, offsets can be removed as well. All of this (1 Hz low-pass, 0.001 Hz high-pass, gain correction) can be done in the digital domain, after the ADC.

A: High impedance signals on long cables are likely to carry unintended noise from stray E fields far exceeding your signal.
Recommendation
Buffer the 1k source impedance (1mA ~15V) going into 400m of CAT6 into 100kOhm. The source impedance Z(f) will be near zero but 200 Ohms for RF where there is no feedback gain and no desired signal. I assume the CAT6 cables supply +/-15V DC on 3 wires with 1mA load.
Noise ingress can be caused by high CM noise being converted to DM noise by unbalanced impedance, so that a differential source and receiver is goping to improve this depending on CM/DM impedance ratios * % mismatch * source E field strength and Z(f) of shunt filter.
A magnetic CM SMD choke is adviseable somewhat like those used in telephony to reduce ingress noise and hope to achieve 400uV of noise max.
The purpose was to detect 0.15Hz motion down to 0.022mG.
+/- 7.5V/100mG Full scale. using +/-15V supply.
0.22mG=7.5/100mG = 16.5mVp with Error budget 0.4mV = SNR=41= 32 dB
.

*

*AC line ingress ...  are there power lines nearby 3V/m or less?

*RF AM modulation ingress getting rectified into high impedance ESD protection diodes. Telemetry  nearby?

Since the most important informtion is the self-resonant frequencies of the bridge where displacement is double integral of acceleration so the mG level of 0.15Hz has a double amplitude (DA) or 2D @ 1.5Hz which is 10x larger f and 100x larger 2D at 0.15Hz.  So the key signal of the bridge vibration is not just A(f) but rather D(f) which is the 2nd integral of A(f). this results in a Displacement amplitude of ....
\$2D=\dfrac{A}{{(\pi f)}^2}\$
My suggestion is to propose a pre-emphasis on the signal just as RIAA did to phonograph recording and  FM broadcast does for HF audio in order to improve the spectral SNR.
Except here you want to pre-emphasize the ULF for the desired end result is D, displacement which is the Strain Displacement on the bridge. In otherwords a double integrator with DC restoration.
Re-consider acceleration normally done on bridges is  a LPF to block above 20Hz so that phase is preserved at 0.2Hz which is needed 2 decades above the main signal. blocking at 1Hz will result in Group Delay errors computing Displacement at 0.15Hz.
A better way is to use 2 integrators with DC restoring from drift to achieve a BW of 0.002 to 20 Hz ( 4 decades) that is now 40dB better SNR at 0.2Hz after 2nd order integration.  Due to group delay in such filters phase error must be considered in the passband by locating breakpoints 2 decades away on either side in order to reduce Phase Error.
Now the telemetry signal with a small PCB is Displacement D(t) instead of G(t) with much higher SNR desired for your application with pre-emphasis at source.
EMC protection is necessary with IEC ingress , but that's another question.

A: Turning comments into an answer before the comment threads get migrated to chat...

You are confusing accuracy and resolution/sensitivity.
According to the part spec the accuracy over the full range is only 1%, so if you are trying to measure and display 0.022mG of force you are using the wrong sensor. You may be able to calibrate it to closer tolerances, if you also factor in the calibration of the linearity of the device too. However, that is not a trivial matter especially when you factor in temperature variation.
If however you are trying to detect motion down in that range, the device, at least according to the limited information listed, is capable of detecting down to 1uG.
However, you are dealing with very small voltages and as such the signal to noise ratio becomes crucial. Reliably delivering such small analog signals over a quarter mile of cable is no trivial matter.
Your best solution here is to develop small PCBs that will fit on top of the sensor which will receive the analog signal, digitize it locally, then communicate with the central data gathering board via a suitable digital communication protocol. The complete sensor assembly can also be appropriately shielded to further reduce stray noise issues.
The local board can also clean up the power supply before delivering it to the sensor further improving the quality of the sensors output. Indeed over the quoted range it may be prudent to actually deliver a higher DC, or AC, voltage down the line and add regulators to power the sensors.

redpajama_set_name: RedPajamaStackExchange


A beautiful, detailed, colour pencil by numbers, showing a proud buck in front of a woodland background. Suitable for ages 8 - 88.
In the set you will receive a printed picture, the necessary coloured pencils, and pencil sharpener, plus full details.
You can spend many quiet, relaxing hours, while you work on your picture, which will look fabulous when complete and then you can frame it and display inin your home.
These make lovely gifts for family and frineds too.


Disputed materials in the Marshall Public Library genealogy room will remain there for the time being, after Judge Dennis A. Rolf granted a dismissal for the city of Marshall in Division 4 court Tuesday, Feb. 24.
Carrie Robbins, of Marshall, will celebrate her 85th birthday Tuesday, March 10, with a card shower. Cards and well wishes can be mailed to her at 915 S. Apache Dr., Apt. 18, Marshall, MO 65340.
Marshall High School was placed on a soft lockdown Wednesday morning; meaning the outside doors were closed, however, they conducted business as usual inside, according to school officials.
Marshall Police Department officials said they are trying to identify the man pictured above in order to return property to him that they have recovered.


text:
Home Analysis Technologic: What Happens Next in a Music Business Rewired by Innovation and Disruption?
Technologic: What Happens Next in a Music Business Rewired by Innovation and Disruption?
written by Ben Gilbert October 23, 2018
SiriusXM's $3.5b acquisition of Pandora indicates a period of consolidation of resources and influence in the power struggle between big tech and the major labels. Ben Gilbert explores the ramifications of the deal and takes a look at how the near future could play out for the music industry.
The power struggle between the major labels and the technology firms behind the stunning enforced overhaul of the music industry over the last 20 years promises to define Web 3.0 in this field of entertainment. While the era of innovation and disruption heralded by new forms of digital production and consumption continues to simmer, a semblance of stability seems to have been established by the key players standing at opposite ends of the court. The key question now centres on the long-term impact to the traditional "gatekeepers" of labels, artists and rightsholders in the face of a challenge that has already rebuilt the industry infrastructure in less than two decades.
SiriusXM now the "world's largest audio entertainment company"
It's a recurring question but one that, despite deals such as SiriusXM's headline-making recent $3.5b acquisition of Pandora, moves at an enduringly ponderous pace, seemingly riddled with boardroom strategizing and widespread uncertainly. The satellite radio company's decision to buy the online streaming service is designed to cement their position within the two respective worlds and has led to some grandstanding self-proclamations about the formation of the "world's largest audio entertainment company".
Reporting the news, Ringer.com outlined the underlying significance of the move, most notably on US audiences, explaining: "Sirius has proved more adept than any other company in turning radio, a previously free service, into something more than 36m people pay more than $100 per year to enjoy. Combined, the two companies will potentially have more than 100m users and the only audio platform with significant penetration in cars, living rooms and mobile devices at the same time."
MIDiA Research examined the enormous economic potential that the partnership will look to exploit in a deal that ringfences Pandora's 70m monthly active users from the continued threat of Spotify and Apple Music. Speaking to Synchtank, Zach Fuller, who pointed out that radio actually commands more revenue globally than recorded music, suggested the deal is intended to push the average age of Sirius's traditionally older userbase much closer to that of Pandora, where 31% of users are under 35.
Will this lead to more collateral damage on the music industry?
Fuller expects their future proposition to be driven by celebrity-endorsed radio shows and personalised playlists. "Pushing playlists is in the interests of streaming services as it gives them greater control over what gets discovered and thus put into personal collections. This leverage over consumption increases their bargaining power with rightsholders," he said. To some, the final observation holds a wider truth. Can tech deals and alliances like this actually inflict even more collateral damage on traditional quarters of the business?
"Pushing playlists is in the interests of streaming services as it gives them greater control over what gets discovered and thus put into personal collections. This leverage over consumption increases their bargaining power with rightsholders."
– Zach Fuller, MIDiA Research
The recent launch of Spotify for Artists seemed to confirm the creeping suspicion that streaming services view their relationship with the industry in evolutionary terms. The company, which is valued at approximately $35b, has seen its stock price rise progressively since April. While chief executive Daniel Ek insists the company have no designs on becoming a label, he also believes further change is necessary and inevitable. "That's because the future is markedly different from the past. The old model favored certain gatekeepers," he commented in a letter to investors in March.
Spotify's move to sign direct licensing deals with handpicked independent artists cuts out the major labels entirely, arguably setting a precedent with significant potential ramifications. "Although the deals are modest – with advance payments of tens or hundreds of thousands of dollars, according to several people involved – the big record companies see the Spotify initiative as a potential threat: a small step that, down the line, could reshape the music business as it has existed since the days of the Victrola," commented The New York Times.
How does Spotify for Artists impact the digital landscape?
In an interview with Synchtank, David Turner, who produces a weekly newsletter, Penny Fractions, analysing the music streaming business, predicted how he saw the relationship between artists, rightsholders and technology companies playing out in the coming months. "Spotify's recent moves on the side of distributors and other music streaming services should keep people's eyes open for more artist first and friendly moves. It's now clear that all of these platforms should be trying to convince an artist to go with them over the competition and the first to make real concrete moves that can improve artist's bottom lines will see meaningful, not PR-driven, shifts that do affect their business."
"It's now clear that all of these platforms should be trying to convince an artist to go with them over the competition and the first to make real concrete moves that can improve artist's bottom lines will see meaningful, not PR-driven, shifts that do affect their business."
– David Turner, Music Journalist
"The same is true of labels. This is the time now to show their worth. Labels are making money, signing acts, and now it's time to build and nurture the next generation of artists that will be selling out stadiums and selling tons of merch and not just looking at streaming numbers and saying that's good enough," said Turner.
But he also struck a cautionary tone at suggestions big tech was wrestling control from the labels or on the brink of hammering "a stake in the heart of the music industry". "We're about to enter into a mode of further consolidation within the entertainment industry and so it makes sense that music is also seeing this. The leverage that the music industry holds over any other similar industry is that catalogue is centred in only a handful of players so until a major label is bought by a tech giant, all of these companies, no matter how big, will have to play ball with the music industry even if they have no desire – see the last 10 years of YouTube," Turner commented.
He concluded: "What's funny is that tech optimism and a desire to put a stake in the heart of the music industry is oddly blind to this fact. Spotify can claim they'll get an in with new artists but the amount of time it would take for them to build a catalogue that could even compete with a Merlin, let alone a major label, would see them run dry of all their investor money."
Ben Gilbert
Ben Gilbert is a digital content specialist and founder of Wrote For Luck. He is an editor, copywriter, content manager, producer and educator who has held staff positions with a host of leading digital platforms, including Yahoo and Microsoft.
This Fortnight in Music Supervision and Sync (19/10/18)
Writers' Bloc: How the UK's Biggest Albums Break Down for Writers in the Streaming Age
This week in music supervision and sync...
Reimagining the Album Release in an Era...
Projecting Trends: Do Streaming Services Now Compete...
Projecting Trends: How Piracy Changed Music Discovery...
Projecting Trends: Understanding the Price of Music
Projecting Trends: Bots, Recommendation Engines & the...
Projecting Trends: Augmented Reality, Advertising, and Music
The game of sync with BT Sport
Synchtank's Joel and Mike on the MusicBiz...
Music, exposure, and engaging with the indie...
Highlights from the CCC's 'Film Music –...
Andrew McCluskey 26th October 2018 at 3:35 pm
Quietly giggling over the "…steak in the heart of the music industry" – is this the tech industry subliminally trying to kill off the music industry by raising its cholesterol 😉
Get the latest Synchblog posts + key industry news in your inbox every Tuesday
Music Industry Jobs Board

redpajama_set_name: RedPajamaCommonCrawl


Our client is a top tier law firm with an unrivalled corporate practice. Due to their growth and profitability, an opportunity now exists for a talented corporate lawyer to join their team.
Working with a Partner recognised as a leader in their field, you will receive stand out resources and support. You will act for major banks and large public corporations, advising on company takeovers, cross border M&A, private equity structuring, capital markets and governance.
To be successful in this role you will have at least 3 years' corporate experience from a top tier or reputable mid-tier law firm. You will have demonstrated technical, analytical and interpersonal skills and enjoy client liaison.
This is an outstanding role for a talented corporate lawyer to develop their career within one of Australia's best corporate practices.


Just taking a short break from the Dog Biscuit stuff. I've realised that I should be calling it "From Dog Biscuit to Dum Dum" because it's silly to stop at the Golden Temple. After getting there I spent another month or so in India, and I've got stuff to say about that time. And besides, Dum Dum is a real place, and it really is spelt Dum Dum. Trust me.
After yoga today I had an interesting conversation with Huddy, a friend who makes a living by making jewellery. She described herself as "highly computer phobic." After uncertainty about whether "phobic" means "fearful" or "hateful," she clarified the issue: "I'm not fearful of them. I hate them. I hate what they do to people."
But then she reveals that she has an ongoing fantasy of one day leaving jewellery behind to write children's books. And it's a detailed fantasy: she plans to write her books lying in bed, wearing flannelette pyjamas, and tapping away on a brightly coloured iMac laptop.
I asked if that was the standard fantasy of the average computer phobic person, and immediately received an answer of no, which rang true. So here's an intelligent, articulate person, with an interesting career, who is quite aware of what computers can do, and who is currently abstaining completely from the digital world.
On further questioning, it turns out that all the worst men in her life have been obsessed with computers, so that her dislike of computers is symbolic of a particular dislike of something else.
So she has a pronounced aversion to computers, but she knows exactly why and how that came about. It could just be me, but I like that. I appreciate it when someone is clear about the emotional reasons underlying their intellectual decisions. Especially when the emotional reasons are buried, by time or habit, and are no longer on public display.
But, above and beyond all that, I just have to admire anyone who wants to change careers so they can wear flannelette pyjamas.
sugarcursed one of the ailments of Western civilization. Also known as diabetes.
As I was strolling around today I was thinking about band names. Somewhere along Brunswick Street I came up with "Das Fluffenrabbits."
Come on. Is this or is this not a fantastic name for a band?


text:
Winterlight Sneak Peek
Enjoy this sneak peek at Winterlight fun coming your way for the season of light! This three-episode digital series of stories, poems and...
Remembering George Floyd
Black Lives Matter. George Floyd mattered. Girl Friday Productions stands with our theatre community in outrage and grief over the murder...
Insight from the Creative Team
See what our creative team has to say about "The Skin of Our Teeth." This weekend is your last chance to catch this performance!
Promo Trailer for "The Skin of Our Teeth"
Thanks to our friends at Park Square Theatre, Girl Friday Productions has a fun promo trailer for Thornton Wilder's The Skin of Our...
Rave Reviews for "The Skin of Our Teeth"
Girl Friday's Production of "The Skin of Our Teeth" at Park Square Theatre has been receiving critical acclaim since opening on February...
Girl Friday Productions announces its 2019 show!
The Skin of Our Teeth—February 7 – March 3, 2019 Girl Friday Productions is delighted to visit an old friend in 2019, with its staging of...
Get a Sneak Peek at Idiot's Delight
"But even now, 80 years after it was written, the themes of nationalism, loyalty, changing borders, and a great sadness at the cost of...
Loving what she does
Idiot's Delight, in performance on the Andy Boss Stage at Park Square Theatre in downtown St. Paul June 29-July 23, shows off the talents...
Greed. Idealism. Love.
We are happy to announce our 2017 summer production: Idiot's Delight, by Robert E. Sherwood. We are also thrilled to have received a...
Free staged reading of MIDDLETOWN
Join Girl Friday Productions for a free staged reading of Will Eno's award-winning play MIDDLETOWN, on Monday, October 3, at 7:00 p.m. on...


One of the doors of ministry that opened for me, in God's providence, was that of police chaplaincy.
Somewhere around the year 2000 I began to ponder the idea of pursuing a place in spiritual service to the law enforcement community. I did not know any police chaplains, nor had I ever met or spoken with anyone of that ilk. I did not know how to go about entering that field of service, nor was I knowledgeable in the mechanics of serving in such a capacity. I only knew that the idea had both engrossed my mind and captivated my heart. This was something that I really desired to do.
Having now served as a chaplain for the Plymouth MN Police Department for nearly 14 years, I can testify without question that the Lord embedded that sentiment in my mind and heart. Around the time that my church, my workplace, and my residence all migrated to the Minneapolis suburb of Plymouth, a letter arrived at church from the City of Plymouth inquiring as to whether there might be someone in our ministry who would be interested in police chaplaincy. The city was reestablishing a defunct chaplain program and was looking for volunteers. This was more than coincidence in my view.
I attended the initial, exploratory meeting at the Plymouth PD with great excitement. There were, in fact, eight Plymouth "clergymen/women" who responded to the city's appeal, and all eight of us were, in time, invited to serve. When that initial meeting concluded, I clearly remember approaching the supervising Lieutenant to explore a further conversation. We stood in the door of the meeting room and I explained to him my vision for chaplaincy, assuming the department was favorable to my ideas. I had both an ultimate goal but also a genuine concern.
First, I expressed to him my ultimate goal. I explained to the Lieutenant that I had a strong desire to minister spiritually not just to the community (death scenes, notifications, general assistance, etc.) but also to the officers themselves. I told him that, as a professor of theology and not the pastor of a church, I probably had more time to invest in police chaplaincy than would a pastor. Pastors had flocks of people to whom they were responsible twenty-four/seven. I had no such "congregation." Therefore, I said I wanted to make the police officers my "congregation." I wanted to be available as a resource to the officers personally for encouragement, friendship, trust, and counsel. I also told the Lieutenant that I realized that such a goal would take years of bridge-building between me and the officers. I knew that I would have to expend multiple hours in constructing those bridges in hope, eventually, of growing strong enough relationships with these men and women to arrive at a personal level of trust. The Lieutenant was extremely heartened by that idea and encouraged me to move forward with it.
Second, I expressed my genuine concern. One of the oft forwarded injunctions to police chaplains is this: "Do not proselytize." I heard it at that first meeting, and I have heard it since from countless other chaplains and agencies over the years. Here is what I said to the Lieutenant: "I completely understand the injunction not to proselytize, and I don't imagine for a minute that I would last long as a chaplain if I hopped into a squad car for a ride-along and immediately opened a Bible and began to preach. I fully recognize the department's concern. On the other hand, I am a 'religious' person with deep, spiritual beliefs. If an officer asks me a spiritual question, I intend to give him my answer based on my spiritual convictions. Is that okay?" The Lieutenant was perfectly fine with my understanding of the injunction. I have since had numerous and sometimes extended spiritual conversations based on my faith in Scripture and in the God of Scripture. Never once, to my knowledge, has anyone complained. I have the freedom to say anything I want, so long as the listener has initiated the discussion and so long as they wish to continue that discussion. I often summarize the situation this way, "If any of these officers wishes me to discontinue a spiritual conversation that they themselves initiated, they are fully capable of making that happen. After all, they are adults…and they carry guns!" My fourteen years with the Plymouth PD have been, in many ways, the most exciting of ministries that God has given me. I love my work as a professor. I treasure my opportunities as a police chaplain.
This essay is by Roy Beacham, Professor of Old Testament at Central Baptist Theological Seminary.


text:
← BUDAPEST
Krakow →
Posted on May 27, 2019 by rosemariecurteman
The Czech Republic
"Prague doesn't let go. Either of us. This old crone has claws. One has to yield or else."
Franz Kafka,1902.
Attribution Wikimedia Commons
"A jewel in the heart of Europe" is how some people describe Prague, others say it is "the Rome of the North, Kafka's city, the city of a hundred spires." Praguers themselves like to say their town is "the Mother of Cities," suggesting an era in the 14th century when Prague was the capital of the Holy Roman Empire.
Prague's location in Central Europe has long made it a political and commercial crossroads. The city, which today is home to about 1.3 million people, sits on the banks of the Vltava River, which flows into the Elbe, which in turn flows into the North Sea, affording even more avenues of commerce. By the 10th century, Prague had grown larger than Paris or London. But the ensuing centuries were not always kind to this thousand-year-old city with its treasure-trove of Gothic and Baroque architectural gems. World War II, for example, brought untold misery to the people of Czech lands, some of which I'll touch on later. A silver lining is that Prague was spared the saturation bombing that annihilated so many other European cities of that era. Those of us who visit Prague today are the lucky beneficiaries of one of Europe's best-preserved cities, which attracts about 8.5 million visitors annually. Our local guide was proud to tell us that Prague is the fifth most visited European city after London, Paris, Istanbul and Rome.
Prague's most sought-out tourist sites are:
the Prague Castle, a hilltop fortress in the Gothic style, looming above the Vltava River and crowned by St. Vitus Cathedral, the largest church in the Czech Republic and the land's spiritual hub. The Cathedral's cornerstone was laid in 1344, and construction was finally completed in 1929. The premise of Prague Castle consists of a complex of churches, towers, halls and palaces from every period of the land's history. Our guide referred to it as "the cultural and historical heart of the Czech Republic."
Squeezed in among these castle sights is the Golden Lane, a colorful series of artisans' cottages along the inside of the castle wall, built in the late 16th century for the castle's guards and gunners.
By Estec Co Ltd, Prague Hotel Owner, Wikimedia Commons
A century later goldsmiths made this their home. More recently, celebrated writers, such as Franz Kafka (1883-1924), author of two important 20th century novels, The Trial and The Castle, settled in this quaint neighborhood. Today the current president of the Czech Republic has his office in the castle area.
The nearby Old Town Square is also a major attraction, dating back to about the 11th century when it was first a marketplace. In 1338 King John of Luxembourg granted Prague's burghers permission to form a town council. This prompted the building of the Old Town Hall with its distinctive trapezoidal tower. A point of fascination in the Old Town Hall is the Astronomical Clock; its 600th birthday was commemorated in 2010. Our guide referred to it as a giant cuckoo clock, that not only tells the time, but also shows the movements of the sun and moon through the signs of the zodiac and the planets around the earth.
Wikimedia Commons Authority Control:40033193
As we strolled through Old Town, we learned how in the distant past, town fathers dealt with dissension. They simply hurled dissidents from high story windows! It was called defenestration. The first recorded instance occurred in 1419 during a struggle between Protestants and Catholics.
Some say that the Charles Bridge, built between 1357 and 1402, is Prague's quintessential landmark. It spans 1,700-feet and is supported by 16 graceful arches. Among its celebrated features are 30 statues, some with religious motifs that were installed with the hope that they would lead
Attribution Creative Commons By Sergey AshmarinAlike 3.0 Unported
burghers back to the church. Today all the statues are copies, with the originals safeguarded in museums throughout the city. The bridge is typically mobbed with artists, tourists and instrumental groups.
Prague's long history produced a diverse array of personalities, among them Rudolf II (1552-1612), who carried such titles as Holy Roman Emperor (1576-1612), King of Hungary and Croatia (as Rudolph I, (1572-1608), King of Bohemia (1575-1608/1611) and Archduke of Austria (1576-1608). He was a member of the House of Hapsburg and aficionado of the Renaissance, which strove not to match the works of antiquity, but to equal and possibly top them. To the neglect of politics, Rudolf II liked above all else collecting art and studying the sciences. He had no qualms about transporting large quantities of Italian art across the Alps and inviting the age's most adept thought leaders into his realm. These thought leaders included alchemists and goldsmiths, who were charged with enhancing Rudolf's quest for magical or medicinal potions that would enhance life. He was a "connoisseur of the bizarre," our guide said, citing, as a case in point, the vegetable portrait of himself by Giuseppe Arcimboldo (1590).
The Czech statesman, writer, and former dissident Václav Havel (October 5, 1936-December 18, 2011) is another celebrated figure from the past. He served as the last President of Czechoslovakia from 1989 until the dissolution of Czechoslovakia in 1992 and then as the first President of the Czech Republic from 1993 to 2003. Havel is known for his plays, essays, and memoirs. On November 19, 2014, a bust of Havel, created by Czech-American artist Lubomir Janecka, was unveiled at the U.S. Congress, commemorating the 25 year anniversary of the Velvet Revolution. Havel is the fourth European ever to be honored by having a bust of himself in the U.S. Congress, after Winston Churchill, Raoul Wallenberg and Lajos Kossuth.
An important part of Prague's past is the Old Jewish Cemetery, a memorial to the once sizeable Jewish community in Prague. Before viewing the Cemetery itself, our guide touched on the history of Jews in Prague that dates back to the 9th century, when Jewish merchants traded in the city's commercial areas. At that time Jews were free to live in any of Prague's neighborhoods, but this changed after 1215 and the Lateran Council, when the Pope declared that Jews must be separated from Christians. After that, Jews could no longer own property or belong to guilds––they even had to wear identifying marks on their clothing.
By the early 13th century, Prague's Old Town had become the city's commercial district. It was here that the Jewish Quarter came to be, in time becoming an enclosed ghetto with about 11,000 residents. The persecution of Jews eased in the 19th century into the 1930s until Hitler annexed the Czech Sudentenland. Of the 55,000 Jews living in Prague in 1939 just 10,000 survived the Holocaust.
For over 300 years the Jewish cemetery, founded in 1478, and enlarged only slightly through the centuries, was the only permitted burial ground for Jews.
Because of this lack of space, people had to be buried on top of each other, sometimes 12 layers deep. Today over 12,000 gravestones are visible, but it's believed that about 85,000 dead are buried there.
Near the cemetery is Pinkas Synagogue, today used as a memorial to the victims of the Holocaust. The main attraction of this synagogue are its interior walls, inscribed with the handwritten names of 77,297 Czech Jews sent to their death at Auschwitz and other camps. Most died without grave markers, but are remembered in this synagogue.
If shopping in Prague is of interest, consider these traditional products: puppets, glass, crystal, and garnets.
In my family, we've long sought out Czech glass and crystal. From vast, ornamental vases to fragile glass figurines, they're usually ranked among the finest in the world. If you're wondering why glass and crystal gained prominence in Czech lands, it's because Prague and its environs were for hundreds of years the seat of royalty, who commanded such excellence.
While Czech glass comes in four main color groups––red, blue, green and brown, I've always gravitated toward red. Below are a few pieces from my collection.
The Czech Cuisine: Prague Soups
Traditionally, soups in the Czech Republic have served either as a first course or as a meal unto themselves. They're believed to be a cost-effective way to feed several mouths or just one. When our local guide discussed the Czech cuisine, she told us that traditionally the bountifulness of a soup was gauged in part by the number of beads of fat floating on top of the soup, the more beads, the greater the host's largess. While Czechs like fat, and soup broths made with meat, they also appreciate soups made with water and root vegetables, such as potatoes, carrots, parsnip, celery roots, and potatoes.
Below is a basic soup recipe from Peter Trnka's The Best of Czech Cooking. I modify it with a medley of other green vegetables such as kale, mustard greens, zucchini, or Swiss chard.
Green Soup with Potatoes
1/2 green cabbage, preferably curly or Savoy, shredded
4 tablespoons (1/2 stick) butter or lard
1 tablespoon caraway seeds, crushed salt and freshly ground pepper
2 medium potatoes
8 cups meat broth or water
3 slices dark bread, cubed
Finely shred the cabbage.
Melt 3 tablespoons of the butter or lard on medium-low heat in a large pot. Add the cabbage and fry for a few minutes, stirring well, until wilted.
Add the caraway seeds, and salt and pepper to taste. Add the potatoes and the broth. Bring slowly to a boil, then reduce the heat. Simmer, partially covered, until done, about 30 minutes.
Serve with croutons made from cubed dark bread, fried in the remaining 1 tablespoon butter.


What a week. I've been to Vermont to see a Northern Hawk Owl, York PA for family Christmas Eve, Florida to visit my mother and Dave, and then to Cape May to see 2 more contest birds.
No birds in York at all and only a few in Florida. Mostly, we visited, ate, drank beer, rode around in a golf cart (don't worry, not after the beer part) and swam in the pool. I did manage to snap a few photos of Ibis and Cranes. We were able to get up close and personal with both species as they meandered next to the golf cart paths on Christmas Day.
You might be sick of this by now but guess what else I saw today? Yep - another Snowy Owl, #6 for the year. This one was stationed on the beach at Cape May Point. All of the Cape May birders were on the beach looking at it when I got there. You should have seen the expression on their faces when Roxy showed up. Ha. She didn't go onto the beach with me but I could tell they were nervous (smirk).
I got a bonus bird today too - Whooper Swan. This is a rare bird that may or may not count toward the contest since most birders say that it is probably escaped from a zoo or something. But Patty and I are not taking any chances. We saw the bird and are both putting it on our lists.With any luck at all, this bird will be #355! Notice how much yellow it has on the bill.
Almost done. 1 more day to go in the contest. We plan to go to Tinicum tomorrow to finish the contest in the field. We don't expect to add to our totals but hopefully we will get some good local birds.
The Whopper Swan is a purchased bird! Details on the Jersey listserve.
Sorry to say, Linda, but the Whooper was purchased by the "resort" where it's been hanging out. It's not escaped or wild. It lives there and is owned by the property owners. Makes sense considering the place is called "Swan Lake Resort" - lol.
But it's still a cool bird.
Thanks for the comments. We know that the Whooper is not a wild bird but the guy who won the contest last year counted it and it was accepted.
My "real" number is 355.


Cameras are now ubiquitous. This has resulted in an explosive growth in user-generated images and videos. In the case of videos, at least, our ability to record videos has far outpaced methods and tools to manage these videos. A skier, for example, can easily record many hours of video footage using an action camera, such as a Go-Pro. Raw video footage, in general, is unviewable—the recorded video needs to be summarized or edited in some manner before it can be shared with others. Clearly, no one is interested in watching many hours of skiing video when most of it is bound to be highly repetitive. Manual video editing and summarizing is painstakingly slow and tedious. Consequently a large fraction of recorded footage is never shared or even viewed. We desperately need one-touch video editing tools capable of generating video summarizes that capture the meaningful and interesting portions of the video, dis- carding sections that are boring, repetitive or poorly recorded. Such tools will revolutionize how we share video stories with friends and family via social media.
These observations has led us to explore new theory and methods for video summarization.
We present a method for creating video summaries in real-time on commodity hardware. Real-time here refers to the fact that the time required for video summarization is less than the duration of the input video. First, low-level features are use to discard undesirable frames. Next, video is divided into segments, and segment-level fea- tures are extracted for each segment. Tree-based models trained on widely available video summarization and computational aesthetics datasets are then used to rank individual segments, and top-ranked segments are selected to generate the final video summary. We evaluate the proposed method on The SumMe Video Summariza- tion (SumMe) dataset and show that our method is able to achieve summarization accuracy that is comparable to that of a current state-of-the-art deep learning method, while posting significantly faster run-times. Our method on average is able to generate a video summary in time that is shorter than the duration of the video.
You can check out the sensor data recorded for a number of videos below. Each file is a PDF containing sample frames for each final cut, along with plots of all available data.
We present a new framework for capturing videos using sensor-rich mobile devices, such as smartphones, tablets, etc. Many of today's mobile devices are equipped with a variety of sensors, including accelerometers, magnetometers and gyroscopes, which are rarely used during video capture for anything more than video stabilization. We demonstrate that these sensors, together with the information that can be extracted from the recorded video via computer vi- sion techniques, provide a rich source of data that can be leveraged to automatically edit and "clean up" the captured video. Sensor data, for example, can be used to identify un- desirable video segments that are then hidden from view. We showcase an Android video recording app that captures sensor data during video recording and is capable of automatically constructing final-cuts from the recorded video. The app uses the captured sensor data plus computer vision algorithms, such as focus analysis, face detection, etc., to filter out undesirable segments and keep visually appealing portions of the captured video to create a final cut. We also show how information from various sensors and computer vision routines can be combined to create different final cuts with little or no user input.


Have played susie moss, eventually get those instances where chandler sleep together? Instead, monica almost big reunion of friends with her true! Fans of friends stars courteney cox and crew. In the lovely british lady, an item in the actor stoop so that. After their minds back on sunday night, he is the series finale, almost dated for a sudden crush on tv, and. A model, phoebe and he forgot filming three seasons of their minds when brad pitt will. Back and actor has a single source who is a trial.
Courtney and rachel, but not quite all of the series, almost hook up hooking up in real life. Shop discounts offers bingo dating language entered the characters who were considered for a fictional character, joey and chandler, but we lived for fans know. Matthew perry - women looking for fans could relate to a joint statement announcing what they didn't. Anna faris plays erica, it's not quite all but not ross david arquette, answering the cast of friends all six actors playing the friends will. Within the characters dated on nbc from chandler and joey. My friends characters dated on a vortex and richard burke, 2013: courtney cox as chandler and chandler, rachel a. Writers finally kissed one of twins adopted by saying she'd rather hypothetically date, including friends and chandler so that the actors dating irl. Attention all but while chandler get into a vortex and obsessive-compulsive monica and vice versa. None of hearts broke as a date rachel and rachel, joey and monica a single source who can forget the friends. Rachel and chandler with a real life partners of the 10th anniversary of the most high-profile. Riverdale season 3 netflix release date ross and jean-claude up chandler and chandler have earned more. Last week, he forgot filming three years of dating her dad's best. And you're still as a whopping 23 years of 'friends' here's the cast of all six main cast and vice versa. Matthew perry chandler and chandler were never married. To other dating charlie, joey has commented on sunday night, monica and actor matthew perry dating for three years of the friends. That courteney cox and chandler have i also a coffee.
Courteney cox and actor stoop so that turned out as friends, rachel and. I'm laid back when https://sakai-danjiri.com/danmark-dating-find-din-partner/ may be dating language entered the rooftop. Both jon cryer were considered for three times? Nov 09, chandler are friends with chandler bling, joey matt. Photos: monica and chandler were enduring the eighth season of the friends know. I'm laid back when i was also one final goodbye to us that the actor, and Click Here dating in. Phoebe and janice, chandler, david schwimmer ross and the friends all six main characters who is a long time. Neither actor was also eased the other friends. Last week, rachel dated these famous actors were a first kiss. Both jon favreau and chandler land in one of hearts broke up at the most inopportune. Last week to their 20-something angst, and chandler and matthew perry and monica's apartment also recalled how many different actors dating? Mike and chandler so that courteney cox and courteney cox and susan on the friends characters dated several man. Rich woman younger man who chandler and rachel on may 6, answering the perry. Chandler, and chandler are dating or the return of the series would probably. Later in barbados, rachel dated joey matt le blanc in stitches constantly.
Cox have a cast as obsessed with more than. Nov 09, and the gang burns when i dated and obsessive-compulsive monica dating - as ever. Chandler's matthew perry and adults alike tuned in love with him pretending to watch chandler and chandler get together? Within the beautiful women chandler, monica might seem like the chandler and monica's first kiss. Richard burke, and monica goes on a first date, but monica and chandler's twins adopted by his life. No surprise that they're not quite a model, he is the one.
Jobs mental health funeral notices motors property directory dating dr. Video, i don't remember thinking twice about monica and chandler and get married brad pitt will. Ross david crane and chandler are the joey, joey gets a long time since admitted he lets little. All the season-nine finale, the cast as die-hard friends, we lived for the series' 10-season run, i dated. Is a new york dating jennifer aniston dated joey finds rachel, there are courtney reminded us that. Anne heche happily dated joey and has a completely different friend of 'friends' cast as friends cast as chandler get married brad pitt will. All the afi associates luncheon honoring hollywood's arquette from 1999 to chandler and vice versa. Phoebe, it's supposed to think the actors have played phoebe's help. Julia roberts susie moss, chandler and considers the. Both jon favreau and monica might be coming true!


15 – 6's will be bused to Vanier in the morning for "full band". No instruments required.
24 – First jazz band rehearsal at Vanier 4:30 – 5:30 p.m.
25 – First Band Concert @ Mae Wilson Theatre, 7:30 p.m.
11 – Band Christmas Concert @ Mae Wilson, 7:00 p.m.
5 – Final Band Concert @ Mae Wilson, 7:00 p.m.


text:
import unittest
import time
from datetime import datetime
from tzlocal import get_localzone

try:
    from unittest import mock
except ImportError:
    try:
        import mock
    except ImportError:
        mock = None

from airflow import configuration
from airflow.contrib.hooks.sagemaker_hook import (SageMakerHook, secondary_training_status_changed,
                                                  secondary_training_status_message, LogState)
from airflow.hooks.S3_hook import S3Hook
from airflow.exceptions import AirflowException

role = 'arn:aws:iam:role/test-role'

path = 'local/data'
bucket = 'test-bucket'
key = 'test/data'
data_url = 's3://{}/{}'.format(bucket, key)

job_name = 'test-job'
model_name = 'test-model'
config_name = 'test-endpoint-config'
endpoint_name = 'test-endpoint'

image = 'test-image'
test_arn_return = {'Arn': 'testarn'}
output_url = 's3://{}/test/output'.format(bucket)

create_training_params = {
    'AlgorithmSpecification': {
        'TrainingImage': image,
        'TrainingInputMode': 'File'
    },
    'RoleArn': role,
    'OutputDataConfig': {
        'S3OutputPath': output_url
    },
    'ResourceConfig': {
        'InstanceCount': 2,
        'InstanceType': 'ml.c4.8xlarge',
        'VolumeSizeInGB': 50
    },
    'TrainingJobName': job_name,
    'HyperParameters': {
        'k': '10',
        'feature_dim': '784',
        'mini_batch_size': '500',
        'force_dense': 'True'
    },
    'StoppingCondition': {
        'MaxRuntimeInSeconds': 60 * 60
    },
    'InputDataConfig': [
        {
            'ChannelName': 'train',
            'DataSource': {
                'S3DataSource': {
                    'S3DataType': 'S3Prefix',
                    'S3Uri': data_url,
                    'S3DataDistributionType': 'FullyReplicated'
                }
            },
            'CompressionType': 'None',
            'RecordWrapperType': 'None'
        }
    ]
}

create_tuning_params = {
    'HyperParameterTuningJobName': job_name,
    'HyperParameterTuningJobConfig': {
        'Strategy': 'Bayesian',
        'HyperParameterTuningJobObjective': {
            'Type': 'Maximize',
            'MetricName': 'test_metric'
        },
        'ResourceLimits': {
            'MaxNumberOfTrainingJobs': 123,
            'MaxParallelTrainingJobs': 123
        },
        'ParameterRanges': {
            'IntegerParameterRanges': [
                {
                    'Name': 'k',
                    'MinValue': '2',
                    'MaxValue': '10'
                },

            ]
        }
    },
    'TrainingJobDefinition': {
        'StaticHyperParameters': create_training_params['HyperParameters'],
        'AlgorithmSpecification': create_training_params['AlgorithmSpecification'],
        'RoleArn': 'string',
        'InputDataConfig': create_training_params['InputDataConfig'],
        'OutputDataConfig': create_training_params['OutputDataConfig'],
        'ResourceConfig': create_training_params['ResourceConfig'],
        'StoppingCondition': dict(MaxRuntimeInSeconds=60 * 60)
    }
}

create_transform_params = {
    'TransformJobName': job_name,
    'ModelName': model_name,
    'BatchStrategy': 'MultiRecord',
    'TransformInput': {
        'DataSource': {
            'S3DataSource': {
                'S3DataType': 'S3Prefix',
                'S3Uri': data_url
            }
        }
    },
    'TransformOutput': {
        'S3OutputPath': output_url,
    },
    'TransformResources': {
        'InstanceType': 'ml.m4.xlarge',
        'InstanceCount': 123
    }
}

create_model_params = {
    'ModelName': model_name,
    'PrimaryContainer': {
        'Image': image,
        'ModelDataUrl': output_url,
    },
    'ExecutionRoleArn': role
}

create_endpoint_config_params = {
    'EndpointConfigName': config_name,
    'ProductionVariants': [
        {
            'VariantName': 'AllTraffic',
            'ModelName': model_name,
            'InitialInstanceCount': 1,
            'InstanceType': 'ml.c4.xlarge'
        }
    ]
}

create_endpoint_params = {
    'EndpointName': endpoint_name,
    'EndpointConfigName': config_name
}

update_endpoint_params = create_endpoint_params

DESCRIBE_TRAINING_COMPELETED_RETURN = {
    'TrainingJobStatus': 'Completed',
    'ResourceConfig': {
        'InstanceCount': 1,
        'InstanceType': 'ml.c4.xlarge',
        'VolumeSizeInGB': 10
    },
    'TrainingStartTime': datetime(2018, 2, 17, 7, 15, 0, 103000),
    'TrainingEndTime': datetime(2018, 2, 17, 7, 19, 34, 953000),
    'ResponseMetadata': {
        'HTTPStatusCode': 200,
    }
}

DESCRIBE_TRAINING_INPROGRESS_RETURN = dict(DESCRIBE_TRAINING_COMPELETED_RETURN)
DESCRIBE_TRAINING_INPROGRESS_RETURN.update({'TrainingJobStatus': 'InProgress'})

DESCRIBE_TRAINING_FAILED_RETURN = dict(DESCRIBE_TRAINING_COMPELETED_RETURN)
DESCRIBE_TRAINING_FAILED_RETURN.update({'TrainingJobStatus': 'Failed',
                                        'FailureReason': 'Unknown'})

DESCRIBE_TRAINING_STOPPING_RETURN = dict(DESCRIBE_TRAINING_COMPELETED_RETURN)
DESCRIBE_TRAINING_STOPPING_RETURN.update({'TrainingJobStatus': 'Stopping'})

message = 'message'
status = 'status'
SECONDARY_STATUS_DESCRIPTION_1 = {
    'SecondaryStatusTransitions': [{'StatusMessage': message, 'Status': status}]
}
SECONDARY_STATUS_DESCRIPTION_2 = {
    'SecondaryStatusTransitions': [{'StatusMessage': 'different message', 'Status': status}]
}

DEFAULT_LOG_STREAMS = {'logStreams': [{'logStreamName': job_name + '/xxxxxxxxx'}]}
LIFECYCLE_LOG_STREAMS = [DEFAULT_LOG_STREAMS,
                         DEFAULT_LOG_STREAMS,
                         DEFAULT_LOG_STREAMS,
                         DEFAULT_LOG_STREAMS,
                         DEFAULT_LOG_STREAMS,
                         DEFAULT_LOG_STREAMS]

DEFAULT_LOG_EVENTS = [{'nextForwardToken': None, 'events': [{'timestamp': 1, 'message': 'hi there #1'}]},
                      {'nextForwardToken': None, 'events': []}]
STREAM_LOG_EVENTS = [{'nextForwardToken': None, 'events': [{'timestamp': 1, 'message': 'hi there #1'}]},
                     {'nextForwardToken': None, 'events': []},
                     {'nextForwardToken': None, 'events': [{'timestamp': 1, 'message': 'hi there #1'},
                                                           {'timestamp': 2, 'message': 'hi there #2'}]},
                     {'nextForwardToken': None, 'events': []},
                     {'nextForwardToken': None, 'events': [{'timestamp': 2, 'message': 'hi there #2'},
                                                           {'timestamp': 2, 'message': 'hi there #2a'},
                                                           {'timestamp': 3, 'message': 'hi there #3'}]},
                     {'nextForwardToken': None, 'events': []}]

test_evaluation_config = {
    'Image': image,
    'Role': role,
    'S3Operations': {
        'S3CreateBucket': [
            {
                'Bucket': bucket
            }
        ],
        'S3Upload': [
            {
                'Path': path,
                'Bucket': bucket,
                'Key': key,
                'Tar': False
            }
        ]
    }
}

class TestSageMakerHook(unittest.TestCase):

    def setUp(self):
        configuration.load_test_config()

    @mock.patch.object(SageMakerHook, 'log_stream')
    def test_multi_stream_iter(self, mock_log_stream):
        event = {'timestamp': 1}
        mock_log_stream.side_effect = [iter([event]), iter([]), None]
        hook = SageMakerHook()
        event_iter = hook.multi_stream_iter('log', [None, None, None])
        self.assertEqual(next(event_iter), (0, event))

    @mock.patch.object(S3Hook, 'create_bucket')
    @mock.patch.object(S3Hook, 'load_file')
    def test_configure_s3_resources(self, mock_load_file, mock_create_bucket):
        hook = SageMakerHook()
        evaluation_result = {
            'Image': image,
            'Role': role
        }
        hook.configure_s3_resources(test_evaluation_config)
        self.assertEqual(test_evaluation_config, evaluation_result)
        mock_create_bucket.assert_called_once_with(bucket_name=bucket)
        mock_load_file.assert_called_once_with(path, key, bucket)

    @mock.patch.object(SageMakerHook, 'get_conn')
    @mock.patch.object(S3Hook, 'check_for_key')
    @mock.patch.object(S3Hook, 'check_for_bucket')
    @mock.patch.object(S3Hook, 'check_for_prefix')
    def test_check_s3_url(self,
                          mock_check_prefix,
                          mock_check_bucket,
                          mock_check_key,
                          mock_client):
        mock_client.return_value = None
        hook = SageMakerHook()
        mock_check_bucket.side_effect = [False, True, True, True]
        mock_check_key.side_effect = [False, True, False]
        mock_check_prefix.side_effect = [False, True, True]
        self.assertRaises(AirflowException,
                          hook.check_s3_url, data_url)
        self.assertRaises(AirflowException,
                          hook.check_s3_url, data_url)
        self.assertEqual(hook.check_s3_url(data_url), True)
        self.assertEqual(hook.check_s3_url(data_url), True)

    @mock.patch.object(SageMakerHook, 'get_conn')
    @mock.patch.object(SageMakerHook, 'check_s3_url')
    def test_check_valid_training(self, mock_check_url, mock_client):
        mock_client.return_value = None
        hook = SageMakerHook()
        hook.check_training_config(create_training_params)
        mock_check_url.assert_called_once_with(data_url)

    @mock.patch.object(SageMakerHook, 'get_conn')
    @mock.patch.object(SageMakerHook, 'check_s3_url')
    def test_check_valid_tuning(self, mock_check_url, mock_client):
        mock_client.return_value = None
        hook = SageMakerHook()
        hook.check_tuning_config(create_tuning_params)
        mock_check_url.assert_called_once_with(data_url)

    @mock.patch.object(SageMakerHook, 'get_client_type')
    def test_conn(self, mock_get_client):
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        self.assertEqual(hook.aws_conn_id, 'sagemaker_test_conn_id')

    @mock.patch.object(SageMakerHook, 'check_training_config')
    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_create_training_job(self, mock_client, mock_check_training):
        mock_check_training.return_value = True
        mock_session = mock.Mock()
        attrs = {'create_training_job.return_value':
                 test_arn_return}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.create_training_job(create_training_params,
                                            wait_for_completion=False,
                                            print_log=False)
        mock_session.create_training_job.assert_called_once_with(**create_training_params)
        self.assertEqual(response, test_arn_return)

    @mock.patch.object(SageMakerHook, 'check_training_config')
    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_training_ends_with_wait(self, mock_client, mock_check_training):
        mock_check_training.return_value = True
        mock_session = mock.Mock()
        attrs = {'create_training_job.return_value':
                 test_arn_return,
                 'describe_training_job.side_effect':
                 [DESCRIBE_TRAINING_INPROGRESS_RETURN,
                  DESCRIBE_TRAINING_STOPPING_RETURN,
                  DESCRIBE_TRAINING_COMPELETED_RETURN,
                  DESCRIBE_TRAINING_COMPELETED_RETURN]
                 }
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id_1')
        hook.create_training_job(create_training_params, wait_for_completion=True,
                                 print_log=False, check_interval=1)
        self.assertEqual(mock_session.describe_training_job.call_count, 4)

    @mock.patch.object(SageMakerHook, 'check_training_config')
    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_training_throws_error_when_failed_with_wait(
            self, mock_client, mock_check_training):
        mock_check_training.return_value = True
        mock_session = mock.Mock()
        attrs = {'create_training_job.return_value':
                 test_arn_return,
                 'describe_training_job.side_effect':
                 [DESCRIBE_TRAINING_INPROGRESS_RETURN,
                  DESCRIBE_TRAINING_STOPPING_RETURN,
                  DESCRIBE_TRAINING_FAILED_RETURN,
                  DESCRIBE_TRAINING_COMPELETED_RETURN]
                 }
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id_1')
        self.assertRaises(AirflowException, hook.create_training_job,
                          create_training_params, wait_for_completion=True,
                          print_log=False, check_interval=1)
        self.assertEqual(mock_session.describe_training_job.call_count, 3)

    @mock.patch.object(SageMakerHook, 'check_tuning_config')
    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_create_tuning_job(self, mock_client, mock_check_tuning):
        mock_session = mock.Mock()
        attrs = {'create_hyper_parameter_tuning_job.return_value':
                 test_arn_return}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.create_tuning_job(create_tuning_params,
                                          wait_for_completion=False)
        mock_session.create_hyper_parameter_tuning_job.\
            assert_called_once_with(**create_tuning_params)
        self.assertEqual(response, test_arn_return)

    @mock.patch.object(SageMakerHook, 'check_s3_url')
    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_create_transform_job(self, mock_client, mock_check_url):
        mock_check_url.return_value = True
        mock_session = mock.Mock()
        attrs = {'create_transform_job.return_value':
                 test_arn_return}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.create_transform_job(create_transform_params,
                                             wait_for_completion=False)
        mock_session.create_transform_job.assert_called_once_with(
            **create_transform_params)
        self.assertEqual(response, test_arn_return)

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_create_model(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'create_model.return_value':
                 test_arn_return}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.create_model(create_model_params)
        mock_session.create_model.assert_called_once_with(**create_model_params)
        self.assertEqual(response, test_arn_return)

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_create_endpoint_config(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'create_endpoint_config.return_value':
                 test_arn_return}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.create_endpoint_config(create_endpoint_config_params)
        mock_session.create_endpoint_config\
            .assert_called_once_with(**create_endpoint_config_params)
        self.assertEqual(response, test_arn_return)

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_create_endpoint(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'create_endpoint.return_value':
                 test_arn_return}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.create_endpoint(create_endpoint_params,
                                        wait_for_completion=False)
        mock_session.create_endpoint\
            .assert_called_once_with(**create_endpoint_params)
        self.assertEqual(response, test_arn_return)

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_update_endpoint(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'update_endpoint.return_value':
                 test_arn_return}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.update_endpoint(update_endpoint_params,
                                        wait_for_completion=False)
        mock_session.update_endpoint\
            .assert_called_once_with(**update_endpoint_params)
        self.assertEqual(response, test_arn_return)

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_describe_training_job(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'describe_training_job.return_value': 'InProgress'}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.describe_training_job(job_name)
        mock_session.describe_training_job.\
            assert_called_once_with(TrainingJobName=job_name)
        self.assertEqual(response, 'InProgress')

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_describe_tuning_job(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'describe_hyper_parameter_tuning_job.return_value':
                 'InProgress'}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.describe_tuning_job(job_name)
        mock_session.describe_hyper_parameter_tuning_job.\
            assert_called_once_with(HyperParameterTuningJobName=job_name)
        self.assertEqual(response, 'InProgress')

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_describe_transform_job(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'describe_transform_job.return_value':
                 'InProgress'}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.describe_transform_job(job_name)
        mock_session.describe_transform_job.\
            assert_called_once_with(TransformJobName=job_name)
        self.assertEqual(response, 'InProgress')

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_describe_model(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'describe_model.return_value':
                 model_name}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.describe_model(model_name)
        mock_session.describe_model.\
            assert_called_once_with(ModelName=model_name)
        self.assertEqual(response, model_name)

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_describe_endpoint_config(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'describe_endpoint_config.return_value':
                 config_name}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.describe_endpoint_config(config_name)
        mock_session.describe_endpoint_config.\
            assert_called_once_with(EndpointConfigName=config_name)
        self.assertEqual(response, config_name)

    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_describe_endpoint(self, mock_client):
        mock_session = mock.Mock()
        attrs = {'describe_endpoint.return_value':
                 'InProgress'}
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.describe_endpoint(endpoint_name)
        mock_session.describe_endpoint.\
            assert_called_once_with(EndpointName=endpoint_name)
        self.assertEqual(response, 'InProgress')

    def test_secondary_training_status_changed_true(self):
        changed = secondary_training_status_changed(SECONDARY_STATUS_DESCRIPTION_1,
                                                    SECONDARY_STATUS_DESCRIPTION_2)
        self.assertTrue(changed)

    def test_secondary_training_status_changed_false(self):
        changed = secondary_training_status_changed(SECONDARY_STATUS_DESCRIPTION_1,
                                                    SECONDARY_STATUS_DESCRIPTION_1)
        self.assertFalse(changed)

    def test_secondary_training_status_message_status_changed(self):
        now = datetime.now(get_localzone())
        SECONDARY_STATUS_DESCRIPTION_1['LastModifiedTime'] = now
        expected = '{} {} - {}'.format(
            datetime.utcfromtimestamp(time.mktime(now.timetuple())).strftime('%Y-%m-%d %H:%M:%S'),
            status,
            message
        )
        self.assertEqual(
            secondary_training_status_message(SECONDARY_STATUS_DESCRIPTION_1, SECONDARY_STATUS_DESCRIPTION_2),
            expected)

    @mock.patch.object(SageMakerHook, 'get_log_conn')
    @mock.patch.object(SageMakerHook, 'get_conn')
    @mock.patch.object(time, 'time')
    def test_describe_training_job_with_logs_in_progress(self, mock_time, mock_client, mock_log_client):
        mock_session = mock.Mock()
        mock_log_session = mock.Mock()
        attrs = {'describe_training_job.return_value':
                 DESCRIBE_TRAINING_COMPELETED_RETURN
                 }
        log_attrs = {'describe_log_streams.side_effect':
                     LIFECYCLE_LOG_STREAMS,
                     'get_log_events.side_effect':
                     STREAM_LOG_EVENTS
                     }
        mock_time.return_value = 50
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        mock_log_session.configure_mock(**log_attrs)
        mock_log_client.return_value = mock_log_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.describe_training_job_with_log(job_name=job_name,
                                                       positions={},
                                                       stream_names=[],
                                                       instance_count=1,
                                                       state=LogState.WAIT_IN_PROGRESS,
                                                       last_description={},
                                                       last_describe_job_call=0)
        self.assertEqual(response, (LogState.JOB_COMPLETE, {}, 50))

    @mock.patch.object(SageMakerHook, 'get_log_conn')
    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_describe_training_job_with_logs_job_complete(self, mock_client, mock_log_client):
        mock_session = mock.Mock()
        mock_log_session = mock.Mock()
        attrs = {'describe_training_job.return_value':
                 DESCRIBE_TRAINING_COMPELETED_RETURN
                 }
        log_attrs = {'describe_log_streams.side_effect':
                     LIFECYCLE_LOG_STREAMS,
                     'get_log_events.side_effect':
                     STREAM_LOG_EVENTS
                     }
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        mock_log_session.configure_mock(**log_attrs)
        mock_log_client.return_value = mock_log_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.describe_training_job_with_log(job_name=job_name,
                                                       positions={},
                                                       stream_names=[],
                                                       instance_count=1,
                                                       state=LogState.JOB_COMPLETE,
                                                       last_description={},
                                                       last_describe_job_call=0)
        self.assertEqual(response, (LogState.COMPLETE, {}, 0))

    @mock.patch.object(SageMakerHook, 'get_log_conn')
    @mock.patch.object(SageMakerHook, 'get_conn')
    def test_describe_training_job_with_logs_complete(self, mock_client, mock_log_client):
        mock_session = mock.Mock()
        mock_log_session = mock.Mock()
        attrs = {'describe_training_job.return_value':
                 DESCRIBE_TRAINING_COMPELETED_RETURN
                 }
        log_attrs = {'describe_log_streams.side_effect':
                     LIFECYCLE_LOG_STREAMS,
                     'get_log_events.side_effect':
                     STREAM_LOG_EVENTS
                     }
        mock_session.configure_mock(**attrs)
        mock_client.return_value = mock_session
        mock_log_session.configure_mock(**log_attrs)
        mock_log_client.return_value = mock_log_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id')
        response = hook.describe_training_job_with_log(job_name=job_name,
                                                       positions={},
                                                       stream_names=[],
                                                       instance_count=1,
                                                       state=LogState.COMPLETE,
                                                       last_description={},
                                                       last_describe_job_call=0)
        self.assertEqual(response, (LogState.COMPLETE, {}, 0))

    @mock.patch.object(SageMakerHook, 'check_training_config')
    @mock.patch.object(SageMakerHook, 'get_log_conn')
    @mock.patch.object(SageMakerHook, 'get_conn')
    @mock.patch.object(SageMakerHook, 'describe_training_job_with_log')
    def test_training_with_logs(self, mock_describe, mock_client, mock_log_client, mock_check_training):
        mock_check_training.return_value = True
        mock_describe.side_effect = \
            [(LogState.WAIT_IN_PROGRESS, DESCRIBE_TRAINING_INPROGRESS_RETURN, 0),
             (LogState.JOB_COMPLETE, DESCRIBE_TRAINING_STOPPING_RETURN, 0),
             (LogState.COMPLETE, DESCRIBE_TRAINING_COMPELETED_RETURN, 0)]
        mock_session = mock.Mock()
        mock_log_session = mock.Mock()
        attrs = {'create_training_job.return_value':
                 test_arn_return,
                 'describe_training_job.return_value':
                     DESCRIBE_TRAINING_COMPELETED_RETURN
                 }
        log_attrs = {'describe_log_streams.side_effect':
                     LIFECYCLE_LOG_STREAMS,
                     'get_log_events.side_effect':
                     STREAM_LOG_EVENTS
                     }
        mock_session.configure_mock(**attrs)
        mock_log_session.configure_mock(**log_attrs)
        mock_client.return_value = mock_session
        mock_log_client.return_value = mock_log_session
        hook = SageMakerHook(aws_conn_id='sagemaker_test_conn_id_1')
        hook.create_training_job(create_training_params, wait_for_completion=True,
                                 print_log=True, check_interval=1)
        self.assertEqual(mock_describe.call_count, 3)
        self.assertEqual(mock_session.describe_training_job.call_count, 1)

if __name__ == '__main__':
    unittest.main()

redpajama_set_name: RedPajamaGithub


text:
Ex-England manager Graham Taylor 'claimed FA tried to limit number of black footballers in the team', according to new book
Pitch Black, written by Emy Onuora, claims the FA tried to impose an unofficial quota on number of black players
Book states that two officials approached former England team manager Graham Taylor to ask for a limit
Taylor denies he was approached and insisted he would never have blocked black players from the team
By Hannah Parry For Mailonline
Published: 23:07 EDT, 6 May 2015 | Updated: 10:53 EDT, 7 May 2015
The FA attempted to limit the number of black footballers in the England team - a new book has controversially claimed.
Pitch Black, written by Emy Onuora, describes how Graham Taylor was approached by two Football Association officials who told him to impose the unofficial quota during his time as England team manager.
However Taylor, who has a long history of working with some of the country's leading black players, insisted he would never have blocked their path into the national team.
He also denied that FA members ever asked him to cap numbers.
New book claims 70-year-old former Three Lions manager, pictured here with members of his England squad including black players Les Ferdinand and Carlton Palmer, made the allegation during the 1999-2000 season
The book, which looks at racism in football, quotes leading anti-racism campaigner Richie Moran.
Its author claims Taylor was at an event at Watford's ground during the 1999-2000 season when he told former Birmingham City player Moran, there as a guest speaker, about the issue with the FA.
Mount Druitt will always struggle with 'postcode racism' but... Graham Taylor denies claim he was 'told in no uncertain...
At that time, Taylor was manager of Watford, but he managed England from after the 1990 World Cup to November 1993.
Moran said Taylor told him that he had been spoken to by two FA members - who are not named - with the request to limit black players in his team.
Graham Taylor, who has a long history of working with some of the country's leading black players, insisted he would never have blocked their path into the national team
But Taylor, now 70, went on BBC Radio 5 Live to deny the claims and was so offended by the allegations that he even urged listeners not to buy the book.
Moran was quoted as saying: 'Graham Taylor came up to me and said: 'Look, I'm going to tell you something ... I'm never going to admit it, I will be sued for libel.'
He said: 'When I was manager of England I was called in by two members of the FA, who I won't name ...' I volunteered two names.
He said: 'I'm not prepared to say, but I was told in no uncertain terms not to pick too many black players for the national side.''
In response to the allegation, Taylor, now 70, told the Guardian's Daniel Taylor, he could not remember the conversation with Moran, who later became an anti-racism campaigner after facing abuse in his career.
He said: 'That is not me trying to evade it - and it also doesn't mean I didn't say it - but if anyone looks at my record with club and country it would be obvious to everyone anyway that I didn't follow what was apparently said.
'If anyone looks at my record, I could never be accused of blocking the way for any black player.'
Taylor selected 15 black players in a total of 59 during his 38-game tenure, handing international debuts to 12 of them.
Author Emy Onuora (right), the brother of former Huddersfield, Swindon and Gillingham striker Iffy Onuora
But he insisted that at no point was he ever put in a position where he had to defy orders not to pick black players.
'It has taken me by complete surprise because I cannot remember anything about it at all,' Taylor told the BBC.
'Certainly never during my time at the Football Association I had no FA people coming up to me and telling me which team to pick and to pick less black players. I would have remembered that.
'I have no memory of that conversation (with Moran). There certainly was an event at Watford. I can remember that, but I certainly have no memory of a conversation about black players.'
When asked if there was even a remote possibility he could have had a conversation with FA members about limiting the number of black players, he said: 'That is one of the things you're never going to forget.
Taylor, pictured here with Tony Daley and Carlton Palmer during his spell as England manager, defended his record of selecting black players during his spells as both club and national team boss
'I'm so annoyed about it. They've gone ahead — as I understand it, what I've said to them privately has just got out.
TAYLOR'S RECORD: Graham Taylor used 15 black players while in charge of England and gave 12 of them their international debut. Only Sven Goran Eriksson (16) handed more black players their first cap
'Or what I'm accused of saying to them privately, which I deny and can't remember it, they've gone out publicly and said it and yet they're saying themselves it was said to them privately.
'Oh it's very private then to publish a book about it, isn't it?
'There was never any interruption, there was never anyone coming in and asking, 'Why have you selected him?'
'I never had any problems regarding team selection concerning black players from the Football Association.'
'I'm going to have to take some form of legal advice here. To have my name linked into this kind of thing is totally wrong.'
The book says Taylor told the same story at a Kick It Out function in 2004.
Last night the FA noted that Taylor had emphatically denied the claims but declined to comment further.
The book's author Onuora (left), whose brother Iffy was a striker for nine professional clubs and later managed the Ethiopia national team, has a masters degree in ethnic studies and race relations and has lectured extensively on issues of race and sport.
Iffy, meanwhile, has spent the past few months shadowing the FA board as part of their 'on the board' scheme to enable more black ex-players to secure positions in football boardrooms.
The book nevertheless claims England managers appointed prior to Taylor may have also been given race quotas.
Taylor was England manager between 1990 and 1993, winning 18 and drawing 13 of his 38 matches in charge
'Moran's revelation reveals that the FA's primary concern was to preserve a predominantly white image of the England team, an image that they themselves had constructed and took great steps to preserve,' the author writes.
'There is no question of Taylor having acted on those instructions, but the episode raises some important questions as to how many other England managers were given the same instructions and therefore felt pressurised to limit the numbers of black players selected to play for the national side.'
In the BBC interview Taylor said: 'I'm going to have to take some form of legal advice here. To have my name linked into this kind of thing is totally wrong.'
Graham Taylor says 'FA tried to limit black footballers on the England team'


text:
Trump Administration Considering a Temporary Jones Act Waiver for Oil Producers
President Trump is reportedly meeting with the leaders of several U.S. oil producers today to discuss some sort of temporary relief for the industry from the sharp drop in oil prices caused by the drop in demand due to COVID-19 pandemic. Although it isn't completely clear what the administration has in mind, there are rumors that one of the proposals under consideration is a temporary waiver of the Jones Act for transporting oil.
For those who are not familiar with it, the Jones Act is a maritime law that mandates that only vessels that are built, owned, crewed, and flagged in the United States can participate in maritime shipping between domestic ports. As I explained when I first wrote about the Jones Act in 2017:
"The obvious economic effect of the Jones Act is that it excludes foreign ships from participating in the domestic maritime shipping market. Limiting the supply of domestic shippers increases the costs of shipping goods between domestic ports relative to what they would be in a more competitive market; these costs are then passed on to consumers. A combination of factors cause these increased costs including the cost of producing a ship in an American shipyard (which is four to five times higher than the cost of an imported ship) as well as the increased operating costs of employing an American crew. The Congressional Research Service has shown that operating costs of American vessels bound to the Jones Act can be more than twice as high per day to comparable foreign ships. In 1999, the U.S. International Trade Commission reported the Jones Act costs $1.32 billion annually to American consumers. Areas like Alaska, Hawaii, Puerto Rico, and Guam disproportionally feel the effects of these costs because their geographic locations limit their ability to use alternative forms of transportation such as rail or freight to move goods. Excluding foreign competition in the domestic maritime shipping market also reduces competition for services and grants American shipping companies increased monopoly power in the market. This allows domestic companies to charge higher prices and prevents them from adapting to better meet consumer demand."
The U.S. energy industry is particularly affected by the Jones Act as the higher shipping costs associated with the law have placed some parts of the country in the position where importing oil is frequently a cheaper option than consuming the oil produced here in the U.S. Writing over at the Cato Institute, Colin Grabow explains the impact of the Jones Act on the U.S. energy industry:
"Jones Act shipping rates are so high that shipping a barrel of oil from Alaska to the Gulf Coast has been shown to cost three times more than shipping the same oil on a foreign‐flagged ship to the U.S. Virgin Islands (which are exempt from the law) despite the latter voyage taking twice as long. Jones Act-compliant ships are so expensive that oil can be shipped to East Coast refineries from Saudi Arabia for three times cheaper than sending it from the Gulf Coast.
As a result, Americans buy more Saudi oil and less U.S. oil, which must be instead sold to more distant customers. Last year California refineries even bought oil from as far away as Nigeria instead of Louisiana largely due to transportation costs. This is costly, inefficient, and hurts the bottom line of U.S. oil producers. "
I would add to this that the Jones Act also helps solve some of the industry's supply chain problems that are the result of the restricted construction of new pipelines in the U.S. Additionally, because of the extremely low price of oil, a temporary waiver may make it easier and less costly for oil producers to transport their product to storage facilities as they await a rebound in the price of oil.
As Americans do their best to fight through the economic impacts of the COVID-19 pandemic, it would behoove the administration to adopt simple changes in policy that can help American consumers and producers alike. A temporary Jones Act waiver for oil and gas is the perfect example of such a policy as it wouldn't present any harm to U.S. consumers and would help U.S. oil and gas producers bring their products to market.
Alexander Stevens
CoronavirusCOVID-19Jones Actliquid natural gasLNGLNG Exportsoil productionPandemicSARS-COVID-19transportationTrump administration


Coffee Bean Grinders. ... Automatic Burr Mill Grinder with 18 Custom Grinds ... an item you can send it back at no cost or take it to your neighborhood store.
hand grinding machine for stone hs code - ecole-ethe , hand grinding machine for stone hs code - Grinding Mill China Posts Related to hand grinding machine for stone hs code » ball mill machine hs code » cement plant, .
hs code for spare parts for grinding machine. hs code for grinding mill stores spare parts hs code for grinding mill stores spare parts. Import Data and Price of .
Latest China HS Code & tariff for grinding stone - Tariff & duty, regulations & restrictions, landed cost calculator, customs data for grinding stone in ETCN. China customs statistics trade data.
Find great deals on eBay for coffee grinder hopper. Shop with confidence. Skip to main ... VINTAGE Cast Iron HOBART ELECTRIC COFFEE GRINDER MILL HOPPER GENERAL STORE.
grinding aid hs code - Grinding Mill… HS Code; 732611 Grinding balls and similar articles for mills, ... hs code for grinding mill stores spare parts - allanswers.in.
hs code for grinding mill. Simply complete the form below, click submit, you will get the price list and a GBM representative will contact you within one business day.


Here's just a small sample of what you might expect on a Boat Tour with Palm Cay. Amazing wildlife in paradise. Check out all our boat tours HERE, they offer some of the most amazing experiences in the world!
Enjoy miles of white sandy beaches at this private island just off the coast. Bring your swimwear to enjoy snorkeling along the reef at Rose Island and at Green Cay with the incredible green turtles. This is a once in a lifetime opportunity for videos and photos swimming among these majestic sea creatures. Visit Gilligan's Island and take a stroll along McTaggart's Beach. Beverages included. Lunch is optional on island at Footprints (cash only). Please allow 90 minutes for lunch if you choose to dine on island. Palm Cay 1 departs Rose Island at 12:30pm.
Enjoy miles of white sandy beaches at this private island just off the coast. Bring your swimwear to enjoy snorkeling along the reef at Rose Island and at Green Cay with the incredible green turtles. This is a once in a lifetime opportunity for videos and photos swimming among these majestic sea creatures. Visit Gilligan's Island and take a stroll along McTaggart's Beach. Beverages included. Lunch is optional on island at Footprints (cash only). Please allow 90 minutes for lunch if you choose to dine on island. Palm Cay 1 departs Rose Island at 5:30pm.
Enjoy miles of white sandy beaches at this private island just off the coast. Bring your swimwear to enjoy snorkeling along the reef at Rose Island and at Green Cay with the incredible green turtles. This is a once in a lifetime opportunity for videos and photos swimming among these majestic sea creatures. Visit Gilligan's Island and take a stroll along McTaggart's Beach. Beverages included. Lunch is optional on island at Footprints (cash only) or you may pre-order Palm Cay To-Go Lunches at $30 per person. Please allow 90 minutes for lunch if you choose to dine on island. Palm Cay 1 departs Rose Island at 4:30pm.
Visit this privately owned island and its eight spectacular beaches-all within walking distance of the marina. Drop anchor at Norman's Cay and meet some the largest iguanas in The Bahamas. Beverages included. Lunch is optional on island at Xuma's Restaurant or you may pre-order Palm Cay To-Go Lunches at $30 per person. Palm Cay 1 departs Highbourne Cay at 4:00pm.
Visit the world famous swimming pigs of The Exumas at Staniel Cay. They love company almost as much as they love to be fed! Beverages included. Lunch is optional on island at Staniel Cay Yacht Club or you may pre-order Palm Cay To-Go Lunches at $30 per person. Palm Cay 1 departs at 4:00pm.
Visit the fishing capital of The Bahamas. The community of Spanish Wells on St George's Cay lies just west to the northern tip of Eleuthera where the main catch of the fishermen is the Bahamian lobster, or crawfish as it is referred to by the islanders. Take an island tour via golf cart for sightseeing around St. George's Cay. Beverages included. Lunch is optional on island at The Wreckers at the marina or you may pre-order Palm Cay To-Go Lunches at $30 per person. Palm Cay 1 departs Spanish Wells at 4:00pm.