Imagine how great it will be to virtually see which sunglass is a perfect fit to your face even without going to the shop or mark color and position of the couch to be placed in which direction by simply scanning a catalogue? That is not all; you can even try your favorite lipstick color without applying it physically. For a marketer, the fall in love factor is you can present the entire theme of your marketing vid when users scan the logo. Yes all this is possible by Augmented Reality (AR) which gained its momentum after the Pokémon Go hit the market. Augmented Reality has already started taking over marketing initiatives vehemently in the last couple of years, as AR is capable of enhancing customer experiences, thereby playing a pivotal role in buying decisions.
Marketing using AR/VR has become so exciting and out of the box in such a way that Marriot hotels used VR with a tagline "Get Teleported" wherein Marriot users can get teleported to other Marriot hotels in different locations wearing VR Glass. In the case of AR, you need not wear even the glass for such extravagant views at all!!
With the arrival of AR, digital marketing has evolved into a complete new domain where each and every penny spent on ad is accounted for. Previously we used to have the system of checking with the client on number of calls received or e mail received after publishing the Ad. In fact, the prime reason for implementing the coupon code etc. was to verify the reach of ads especially of Paper ads. Internet and Mobile Association of India and IMRB International have published a report titled "Digital Advertising in India" in which Digital marketing spending is projected to reach INR 7,044 Crore showing a CAGR of 35%.
Major spending on Advertising continues to be through TV which accounts for INR 27,074 Crores and after which comes Print Media that accounts for INR 17,674 Crores. Print media is where the focus will be for AR apart from Cinema which has a moderate but a compelling figure of INR510 Crores.
Now, let us see how AR can increase ROI and result in better accountability on money spent for Adverts.
Say, you are planning to give a front page box ad of 5sq.cm in Mumbai the cost will be INR38,950 and you can assume how much it will cost when going for a Full page (1700 sq.cm) or a Half Page (800 sq.cm) ad which is beyond an ordinary business entity's reach.
This is where AR can be THE game changer. What is required is one simple marker (Image/Logo) of 1Sq.Cm which can have the luxury of being in the Inner Page (Base) or in Back Page and when the marker is augmented with the company's brand/promotion or product video. The advantage is ad which would have cost INR 38,950 would cost just INR 5,960 at the maximum!!
The only cost involved apart from the above will be the minuscule cost per scan of the marker.
When a normal paper ad or a poster ad is released, it could be possible to assume the reach based on the paper's circulation in the area which as everyone knows is a ball park figure. If you are a smart marketer, may even add a coupon code to figure out how many people responded to the ad. But, as we all know, many people may have difficulty in recollecting or adding coupon code to the purchases. Collaborating paper ads against the amount spent may not be possible in the above case.
Let us replicate the same scenario using AR. When someone scans the marker in the advert in either newspaper or a poster using the AR app, in built Analytics capability is immediately activated and the marketer gets an in-depth analysis of the user like demography, time etc., which can act as an eye opener with regard to identifying whether the Advert has reached the target client base or which demography embraced the advert more closely etc., All this is possible at NO EXTRA COST at all. This analytics capability will help advertisers in changing the strategy or focus point at any given time. But in a normal Paper or Poster Advert, no strategy can be initiated for future ad campaigns since there is no back up data available to chalk out any plans.
There are some more exciting possibilities in using AR for marketing which we will be only happy to share with you.


Janet Cowell said regardless where she travels in North Carolina, she�s frequently asked about the state�s finances.
Still, having said as much, Cowell barely paused before pointing out there�s much to like about the state�s economy and said there�s reason to believe brighter economic times aren�t far away. The state�s bond rating, Cowell noted, remains AAA � one of only nine states in the nation that can say as much.
The state�s economy is diversified, Cowell continued � not overly dependent on a single employer. The unemployment rate remains above the national average, but there have been signs of life in that department.
�And we�re very conservative with our debt,� Cowell said, pointing to the fact that North Carolina�s debt amounts to 4 percent of its revenue � a figure many states would love to have.
Cowell visited Alamance County on Wednesday to read to children at the Graham branch of the Alamance County Public Library as part of her �Financial Literacy Tour.� Her storytime centered on �Patches the Pig� � the story offering Cowell the opportunity to introduce to children the reasons for the importance of saving money and financial fitness.
Following her library visit, Cowell and two of her aides traveled to the Times-News for a brief one-on-one with editors.
�We�re going to have continued budgetary constraints,� Cowell warned at one point.
Cowell, a Democrat, is a two-term treasurer � having been re-elected last November. Prior to that, she served in the state legislature and before that was a member of the Raleigh City Council.
Cowell said the most important issue being weighed as Gov. Pat McCrory prepares his budget for the coming fiscal year revolves around the $2.7 billion State Health Plan.
�It was really good for all the little ones,� Massey said.
She said Cowell used an overhead projector to display pages from �Patches the Pig.� At the end of her story reading, Cowell encouraged the children to deposit play money in a piggy bank.
�They were very attentive,� Massey said.
She said local political leaders didn�t attempt to do any political wrangling with Cowell during her brief stop.


If you'd like to know what a Stationary Waves beginner's running workout plan looks like, saunter on over to the always-fabulous iluvtoeat.blogspot.com for a look at Week 1 of a tailor-made 5K training plan.
Interested in having your own workout plan designed especially for you? Contact me to begin the process.


J. Lamar Ferren has written an insightful article on how Olive Garden Restaurant can enhance your local Real Estate Business! The article is located here: Five Ways Olive Garden Can Enhance Your Real Estate Business.
In Olive Garden: When you first enter the Olive Garden, you are typically greeted by the host who calls on someone to seat you. Usually the person who seats you will say "Right This Way" as they lead off into the restaurant with you following behind them. I'll be honest, I'm not a big fan of going into restaurants where I have to seat myself. It's not that I can't do it, it's just that when the restaurant is crowded, it is usually tough to find a seat; especially if you have multiple guests. The person who seats you knows exactly where to go and can get you there quickly; it's just easier if you follow them.
In Your Business: When a client sees your sign, your Craigslist ad, your flyer, etc., in order for them to click through to your site or pick up the phone and call you, they have to be given a "Call To Action". Peter Kolat, a fellow BP blog contributor, actually goes into this concept a little more in depth. However, the main thing is to tell your clients exactly what you want them to do. For example, you could say, "Visit My Website Today" or "Pick up the phone and call me at 555-555-5555 right now." Tell them exactly what you want them to do and if they're interested, they will follow through. Don't just assume that everyone who sees your advertisement, will know what to do next. You must guide them through the experience!
In Olive Garden: After you are seated, you are then greeted by your server, who eventually takes your order. You get the opportunity to read through the menu and choose exactly what you want. If you need more information about a certain dish or drink, your server will be available to answer any questions you may have. Once they've completed your order, they take it to the kitchen, where the meal is prepared. After the meal has been prepared, your server carries it out to you, and as you look at your entree, hopefully you notice that you have been given exactly what you wanted.


Hello. I'm sure this must be possible but I've no idea where to start. How do I make an object more or less visible in relation to the camera's distance from it?
Or to put it simply I want it to appear to gradually dissolve into nothing as the viewer gets further away. Thanks.
Transparency based on gradient that is scaled to the distance from your camera?
Or, you could get clever and use a background-color fog, and set the rest of your objects to ignore the fog. That way, when your object fades away, you won't see internal bits of it, which can be ugly.


text:
Home Zionism & Palestine Zionism
American Football and JEW Wars, What a Combo!
Published: 29 August 2014 | Written by Greg Bacon | Print	| Email
Does the JEW use the hyped adrenalin of the American football season to start their wars fought by the GOYIM for the glory of Eretz Israel?
A cursory sampling of that idea seems to confirm that as fact.
Let's look at some recent examples, using the start of the college football season as late August and the NFL, early September. But even by early August, the papers and TV networks are filling up with tales of gridiron glory, to satiate the American male's lust for watching muscled-up, sweaty men grab and grope each other while the males fans are sitting in their appropriately named 'Lazy-Boy' recliners, with a can of Bud Lite in one hand and the other holding the TV remote, their minds primed for football heroics and ready to cheer on anything, as long as you wrap it in patriotism and wave the flag, like they do at the beginning of football games and at half-time.
The Vietnam War:
Although initially President Kennedy was in favor of continuing the war mongering in Vietnam, he soon became disenchanted with the JEW bankers latest scheme to use American kids and weapons to make fantastic fortunes out of the blood and misery of others.
That all changed when JFK was murdered, in a scheme masterminded by Israel with assistance from JEW sayanim and American traitors, a lethal combination we will see again.
To gin up the war fever, newly installed President Johnson used the Gulf of Tonkin False Flag in early August 1964 to kick the JEW banker war against Vietnam into high gear.
Congress fell for the trap and issued a virtual Carte blanche to LBJ, by issuing the Gulf of Tonkin resolution:
"The outcome of these two incidents was the passage by Congress of the Gulf of Tonkin Resolution, which granted President Lyndon B. Johnson the authority to assist any Southeast Asian country whose government was considered to be jeopardized by "communist aggression." The resolution served as Johnson's legal justification for deploying US conventional forces and the commencement of open warfare against North Vietnam.
By "communist aggression," a rather vague and nebulous declaration of war against a nation that was NO threat to the USA, but which the JEW bankers needed destroyed to fill their accounts with filthy lucre.
A devious trick we will see again in 37 years.
The First Gulf War
Some call it "Operation Desert Storm," I call it 'Operation Desert Slaughter, Part I' as the JEW has a particular fondness for butchering Muslims.
The JEW MSM put forth a number of lies about Iraq and Saddam Hussein, just like they are now against Russia and Putin, to get Americans foaming at the mouth for another JEW war, but that's another story.
Some of the lies were that Saddam had amassed a huge invasion force of tanks and troops on the borderand was threatening to invade not only Kuwait, but the Sodomites of Saudi Arabia.
They also lied about Saddam having nukes, a lie that we will see again in 2001.
The JEW MSM pulled off a beauty when it staged the Hill & Knowlton public relations campaign involving a story bound to make Americans recoil with horror; Iraqi soldiers grabbing babies from incubators and tossing them on the floor of a Kuwait hospital, a bald-face lie, but a lie that worked as then President George Bush the First started amassing the Gentile Army's in August 1990 and deployed their might in January 1991. Bush started this JEW war at the beginning of the 1990 football season and had their 'Super Bowl' of Baghdad fireworks at the end of the football season.
Left out of the war hype was the fact that Kuwait, at the urging of American war mongers, serving at the behest of the JEW bankers, had gotten Kuwait to slant drill into Iraqi oil fields and steal their oil, which set off the confrontation, but hells bells, who's got time for truth when there's money to be made!
What red-blooded American male, pus gut bulging from beer and potato chips, could not get all teary-eyed when viewing this fraudulent testimony by Nayiraha al-Sabah, who was a member of the Saudi royal family and hadn't been in Kuwait.
This first war against Iraq, a nation that was NO threat to the USA, but which the JEW bankers wanted to fill their bank accounts with blood-soaked dollar bills and as a bonus, kill huge numbers of Muslims, got it's start at the beginning of the American football season, and of course, no JEW lie would be complete without painting Saddam as the latest incarnation of Hitler and calling Iraqi's Nazis.
During this war against the Arab Gentiles, the JEW was able to use one of its favorite implements of destruction, the armored bulldozer, burying alive hundreds and hundreds, if not thousands, of Iraqi soldiers who had agreed to the cease-fire, but that's not enough for the JEW, they had to be taught a lesson!
The JEW, never satisfied with merely bombing GOY nations, likes to jack up the destruction, like they have done AGAIN to Gaza.
The crafty JEW was getting matters in alignment in Iraq, setting the stage for the 9/11 Inside Job, masterminded by Israel, helped by American traitors in the CIA, FBI, NSA, the White House and Pentagon.
And now, the granddaddy of them all, the September 9, 2001 attacks against the USA, again,masterminded by Israel, with help from traitorous American lackeys and JEW sayanim in the White House, and helpers at the CIA, FBI, NSA and the Pentagon.
Started at the beginning of the pro and college football season, culminating in the 2002 Super Bowl, the orgiastic finale that was won by the New England Patriots--nice touch there--thanks to a very questionable referee call against the Raiders called the "Tuck Rule" which had been put in place in 1999, just in time for the 2002 AFC Divisional Playoff game, basically giving the Patriots another chance to win, which they did, going to and winning the February 2002 Super Bowl.
The Tuck Rule, having served a need, was later abolished.
Never letting a tragedy go by without grabbing some benefit, the JEW craftily knew how to get theAmerican blood boiling after their back-stabbing of the USA on 9/11:
Initially, the original logo for Super Bowl XXXVI had a style that reflected the host city, and was distributed on some memorabilia items during 2001. However, after the 9/11 attacks, a new logo reflecting American pride was designed. It featured the shape of the 48 contiguous states and the American flag colors of red, white, and blue.
Janet Jackson was originally scheduled to perform during the Halftime Show, but allowed U2 to perform to tribute the events of September 11.
Before the game, an ensemble of singers featured Barry Manilow, Yolanda Adams, James Ingram, Wynonna and Patti LaBelle performing Manilow's song "Let Freedom Ring."
Singers Mary J. Blige and Marc Anthony, along with the Boston Pops Orchestra, performed "America the Beautiful". Paul McCartney then sang his post-9/11 song "Freedom". Afterwards, singer Mariah Carey, accompanied by the Boston Pops Orchestra, performed the national anthem.
Wow, who could say "Not in my name" to another JEW war after all that flag-waving? Certainly not American football fans!
And at the half-time show, the JEW really went to work on the American psyche
The halftime show featured a three-song set from Irish rock band U2, who had just completed their successful Elevation Tour. After a rendition of "Beautiful Day", the band played "MLK" and "Where the Streets Have No Name" as the names of the victims from the September 11 attacks were projected onto a sheet behind the stage. While singing "Where the Streets Have No Name", the group's lead singer Bono replaced the lyrics "take shelter from the poison rain" with "dance in the Louisiana rain", and "high on a desert plain" with "where there's no sorrow or pain". At the conclusion of the song, Bono opened his jacket to reveal an American flag printed into the lining. U2's halftime show captivated the audience as a poignant tribute to the those who had been lost in the attacks.
So off to another JEW war we went, first to Afghanistan, which was only a feint, the real prize was Iraq and knocking off the JEW enemy, Saddam Hussein.
Even the JEW admits that the war against Iraq was designed by the JEW for the protection and gratification of Israel:
The war in Iraq was conceived by 25 neoconservative intellectuals, most of them Jewish, who are pushing President Bush to change the course of history. Two of them, journalists William Kristol and Charles Krauthammer, say it's possible.
This is a war of an elite. [Tom] Friedman laughs: I could give you the names of 25 people (all of whom are at this moment within a five-block radius of this office) who, if you had exiled them to a desert island a year and a half ago, the Iraq war would not have happened.
Yes, getting the GOYIM to fight and die for JEW wars is always good for a laugh.
So, have I proven that American football and JEW wars go together? It probably wouldn't hold up in a court of law, but there does seem to be a correlation between the mindless, aggressive, violent, testosterone-driven macho posturing of American football and the mindless, aggressive, violent, testosterone-driven JEW wars, fought by the GOYIM for the edification of the JEW and to fill those 'Too Big to Fail' Wall Street bank accounts.
The JEW is now trying to start a war between Russia and the USA, using their JEW kleptocrats that are in charge of the Ukraine. They tried to pin the blame for the downing of Malaysian Air Flight 17 on Russia, but that got exposed as a False Flag.
They have also tried numerous attacks against Russia, launched from the Ukraine and those have failed to bait Putin into invading the Ukraine. So will the JEW reach into its bag of tricks and set off another 9/11 type False Flag, to be blamed on Russia or Ukraine separatists or even Palestinians to get their war against Mother Russia up and running?
It's football season again, prime time for the JEW to pull off some evil to get another 'War for Wall Street and Israel' started.
DON'T FALL FOR THE JEW TRICKS.
http://careandwashingofthebrain.blogspot.com/2014/08/american-football-and-jew-wars-what.html
James Petras Versus Norman Finkelstein Debate
Sephardim
Donald Trump invites Benjamin Netanyahu to US after Israeli PM congratulates 'true friend of Israel'
الهيمنة الصهيونية USA Enslaved.Zionist Domination
Leaked secret cable confirms Israeli-Saudi coordination to provoke war in Mid-East
The Oded Yinon Plan!
Debate - Islam Hating "Christian" Zionists
Quotes from Judaism
James Petras - The Power of Israel in the US
Does Talmud Teach Bestiality, Pedophilia, Incest?
The Devil On Earth (George Soros)
ISRAEL CONSIDERS NORTH KOREA AN ENEMY STATE
Behind The "Crisis:" Jewish Lobby Vs. North Korea
What do famous people think about Zionist Jews
Meet America's Top 20 "Zionaires": Billionaires Who Support Israel
Gaza: Not an Occupation but an Annexation!
KN-OW Purpose of the Israeli Attacks on Gaza - Sheikh Imran Hosein
The Alliance Between Israel And Saudi Arabia
Why US and Israel wants to ban this video!
Shimon Peres Was A War Criminal Whose Victims The West Ignored
CHRISTIAN ZIONISM: The Source of the Problem in the Middle East
Dispatches - Inside Britain's Israel Lobby
Argentina: A Case Study of Israel's Zionist-Wall Street Destabilization Campaign
The British Mercenaries of World Zionism
Nasrallah - Zionists Wish to Destroy Iraq due to Ancient Prophecy!
What Trump Means for Israel
Can Anything Be Judeo-Christian?
Destruction of Libya and Beyond!
Mr.Obama 'what is barbaric?'
Hypocrisy Surrounding the Formation of a Palestinian State!
Zionist Power: Swindlers and Impunity, Traitors and Pardons
Zionist Strauss-Kahn Evades Justice Again
Hassidic Rabbi: War of Gog and Magog Already Began in Syria
Debate: Judaism Versus Zionism
Beware Israeli Ramadan Dates!!!
The Zionist War on Freedom of Speech
Responding with the Quran to Muslim Zionists By Sheikh Imran Hosein
[SHOCKING] Confessions of NWO Jewish Zionists
US 'hypocrisy revealed by secretly helping Israel develop nukes'
Zionist War Crimes (Genocide In Palestine)
The Most Famous American Journalist Exposes the Zionist Conspiracy
Israel's Secret Weapon
Peace, Propaganda and the Promised Land: Media & the Israel-Palestine Conflict
'US lawmakers forced to support Israel' - Cynthia McKinney on PressTV
Gilad Atzmon versus Rabbi Michael Lerner
How The Zionists Invented Modern Terrorism
Starbucks Enormous Support For Israel!
Israel: The Promised Land for Organized Crime
The Chosen Criminal Elite
Do Zionists Control Wall Street? The Shocking Facts!
Rabbi Lerner: Hamas is a friend of Netanyahu
Is There A Zionist Jewish Bias In The Media?
The Roots of Christian Zionism: How Scofield Sowed Seeds of Apostasy
Obama Grovels While Netanyahu Demands More!
Israel's atrocities in Gaza prompt unprecedented political fallout
Unlikely Alliance Between Israel and Egypt Against Gaza!
Debunking the Claim that Palestinians Use Civilians as "Human Shields"!
The Philosophy of Zionism and Israel
Book of Revelations, Ch.13
Why Modi's India aligns more closely with Israel than with Palestinians!
Israel uses Palestinians as human shields but US lawmakers condemn Hamas
A Zionist Egypt has emerged under Al-Sisi!
The Tribal Nexus: Zionists And "Anti-Zionists" Unite To Ensure The Survival Of "Israel"
How Obama is a Direct Accomplice to Israeli War Crimes
US Stands Alone in Vote Against UN Inquiry Into Gaza Assault
Jonathon Pollard Should Be Hung, Not Freed
Netanyahu's UN speech: Sounds like a sociopath?
The Ten Mythologies of Israel
Who Owns General Petraeus?
Israel: Petraeus was unfaithful to us
The Accusation Of "Anti-Semitism" II: Linguistic Iconoclasm, "Chosen-ness" And The Affirmation of Zionist Arrogance
The Accusation Of "Anti-Semitism" I: Zionism, "Jewish Israelis" And Revisionism
A Straight Look at the Jewish Lobby
Barack Obama: "America's First Jewish President"
Trouble in Palestine Solidarity
Jewish Al-Sisi Runs Egypt; Now an Israeli-Occupied Territory
Netanyahu Addresses Adoring Congress!
'Bibi' Votes Republican
Sheikh Imran Hosein - The Zionist Attack On Syria
Obama Romney Sandy And The Zionists - Sheikh Imran Hosein
Cause of the Conflict- Part II, The Middle East
The Cause of the Conflict Part 1: Fixing Blame
A letter to white racists
US Aid to Israel
Former Congressman James Traficant Tells The Truth!
Lights, Camera, Distraction!
Psychopaths United For Israel
JFK Versus World Zionism
The Hidden History of Zionism
Israel's Netanyahu hails Jonathan as Nigeria block Palestinian UN resolution
Chief Israeli rabbi: It's okay to kill innocent civilians and destroy Gaza
Israel seeking to upgrade its nuclear weapons capabilities
They Dare Not Speak Its Name ... ROTHSCHILD ZIONISM
A Christian and a Muslim Address Qur'an Burning
Why Hate Gilad Atzmon?
Obama at the General Assembly: Sacrificing Palestine for Zionist Campaign Funds
Appeal for Bethlehem
The Origin of the Palestine-Israel Conflict
Details of Zionist Massacre at Deir Yassin
Is A Jewish Life Worth More Than A Non-Jewish Life?
Understanding What's Happening in Gaza
The Zionist Plot Against Sudan, Algeria and Mali
European Media Provokes Muslims ¶To Inflame Zionist "Clash Of Civilizations"

redpajama_set_name: RedPajamaCommonCrawl


text:
Submitted by Krishna Persaud on Thu, 12/31/2020 - 13:31
Our community lost one of its early members recently.
One of the most widely cited papers among the ISOCS community is a paper by Persaud and Dodd published in Nature in 1982 that influenced many in the development of electronic nose technology [1].
George Dodd was interested in perfumes as a teenager and went on to study Chemistry at Trinity College, Dublin with research projects on molecules found in essential oils. He then began research on small molecules binding to proteins at the University of Oxford and gained a D.Phil (Ph.D) under the supervision of Sir George Radda, publishing a seminal paper in 1969 determining the rate of allosteric transition in the regulatory enzyme glutamate dehydrogenase by a method new in the 1960s, the fluorescence of an environmentally sensitive extrinsic probe.
After working at Unilever in the Molecular Biophysics Research Group for three years, he joined the University of Warwick, UK, in 1971, founding the Warwick Olfactory Research Group, pioneering research on the molecular mechanisms involved in smell, olfactory physiology, the psychology of smell as well as artificial noses. I joined his group in 1976, was enthused with his love of the world of smell and inspired by him, worked on what would be the initial concepts of an artificial nose – now known as electronic noses. A keen master perfumer as well as an entrepreneur, he enjoyed working to create unique fragrances, opening a perfume studio "Craft Perfumes" in Stratford-upon-Avon in 1978. He collaborated with Steve Van Toller – a psychologist and former president of European Chemoreception Organisation (ECRO) who was also at Warwick, publishing a book The Psychology and Biology of Perfumery (eds) Steve Van Toller & George H Dodd; Chapman and Hall; 1988.
He left the University of Warwick in 1994, expanded into the realms of personal perfumes and was a founding director of a smell biotechnology company – Kiotech int plc. He moved to the highlands of Scotland opening "The Perfume Studio", and often complained that his studio was used a bombing target by the RAF. Whilst there, he also created personal perfumes for a range of pop stars and royalty. He was not even phased when asked to replicate the smell of African elephant droppings. He continued to work with the smell research group at the University of Warwick including Julian Gardner and James Covington.
He sold his business and spent much of the money buying the only red Jaguar XFR in the country with cream leather seats. He always loved fast cars and use to say that "once you have had a car with more than 500bhp you can't go back!" He was one of the founding Directors of Scent & Aroma Technology Systems Limited (Aroma Academy (www.aroma-academy.co.uk) and Perfume Academy (www.perfume-academy.com)). A keen educator and was the driving force behind World Smell day, He also gave many talks including at the London Science Museum on smell. As part of his commercial work, he was often asked by industry to create smell training kits, developing several aroma training kits, including a Wine Aroma Kit, Whisky Aroma Kit, Gin Aroma Kit, Bourbon Aroma Kit and a Rum Aroma Kit. Members of our community who attended the ECRO Congress 2011 in Manchester, UK will have been entertained by the Whisky tasting workshop that he gave us.
Full of a gazillion eccentric ideas, he was always fascinating to listen to - inspiring many others to enter into the world of smell. We have lost a dear colleague.
Krishna Persaud
[1] Persaud, K.; Dodd, G. Analysis of Discrimination Mechanisms in the Mammalian Olfactory System Using a Model Nose. Nature, 1982, 299 (5881), 352–355. https://doi.org/10.1088/1751-8113/44/8/085201.


Iresioni Guesthouse is a warm and friendly guest house, ideal for escape and relaxation in Arachova of Parnassos. The hospitable atmosphere and the high standard services guarantee an unforgettable stay in our guest house.
Combining nature and civilisation, this guest house is characterised by its authentic and luxurious architecture and decoration.


text:
Repella Fella
PAQ
Development update
It's been a while! Nine months, to be exact. A hell of a lot has happened in that time.
Since December 2021, 8 months were spent developing the game from scratch. Twelve to sixteen hour days, seven days a week. Repella Fella is now functionally complete. All that's left is bug fixing, polishing and enabling some features here and there. There's no reason it shouldn't make the Q4 2022 deadline.
In June, Repella Fella took part in Steam Next Fest with a demo available to everyone. It showcases a mission featuring Matilda, one of three playable characters. She's tasked with eliminating a target whose location needs to be revealed. The mission ends with one of three violent outcomes (four… technically). You can watch Graeme from 2LeftThumbs (Repella Fella's publisher) play the game below:
The demo is a bit old at this point and various new features have been added since. They include save game functionality, a hint system, mouse movement controls, easy mode, gamepad support, tutorial videos, video handling improvements, UI scaling and performance enhancements. I've also had the opportunity to test the game on a Steam Deck and it runs beautifully.
In August I was invited to PAX Australia, held in Melbourne in October of this year (7th – 9th). Repella Fella will be apart of the Australian Indie Showcase. At least one demo level will be playable on PC, and a looping video of a complete playthrough will be shown alongside it throughout each day. Feel free to come by and say hello.
Repella Fella will be shown at PAX 2022, Australia
Progress on my side has slowed a little as I recently started a new and amazing full time job. Thankfully my programmer friend Stan has joined the team to tackle code related tasks throughout the working week. Stan's a very talented programmer and I'm immensely thankful for his contributions.
As you may have also noticed, the artwork for the game has had a rework. The old imagery was something I'd whipped up in less than a day for the Kickstarter campaign. It looked generic, boring and too serious. In my opinion, it didn't really match the game's tone.
One of the printed materials for PAX
The new artwork (green and gold themed!) does a much better job of that.
© 2023 Misadventurous. All rights reserved.


text:
JOINT STATEMENT: Canadian Groups Call for a National Inquiry on Missing and Murdered Aboriginal Womenpost
Lawyers' Rights Watch Canada, the Native Women's Association of Canada, BC CEDAW Group, Feminist Alliance for International Action, and International Women's Rights Project call on the federal government to immediately adopt and implement TRC recommendation to conduct public inquiry into missing and murdered Aboriginal women and girls.
Notice of Meeting: FAFIA's Annual General Meeting!post
Your organization/agency's attendance at the Annual General Meeting (AGM) on June 15 at 3:00pm EDT is requested. The meeting will take place via teleconference. Please RSVP as soon as possible. Please let us know by June 1st if you would like to nominate someone (or yourself) to FAFIA's Steering Committee. Thank you for confirming your […]
Petition to Support Muslim Women's Rightspost
FEMINIST LEADERS CONDEMN THE ATTACKS ON THE RIGHTS OF MUSLIM WOMEN
Initiated by FAFIA – the Canadian Feminist Alliance for International Action
We, the undersigned representatives of feminist organizations and individual feminists, wish to express our support for Zunera Ishaq and Rania El-Alloul and condemn the attacks on their human rights as guaranteed under Canadian and international law.
CEDAW Committee Report Releasedpost
Canada has committed a "grave violation" of the rights of Aboriginal women by failing to promptly and thoroughly investigate the high levels of violence they suffer, including disappearances and murders.
IACHR Report Releasedpost
The Inter-American Commission on Human Rights issued a report on January 12, 2015 on its investigation into the murders and disappearances of Indigenous women and girls in British Columbia. The IACHR finds Canada is obligated under international human rights law to prevent the violence by taking measures to deal with poverty, access to housing and employment, and disproportionate criminalization.
New Report on Canada's Compliance with Beijing Platformpost
A new report from a network of over 30 NGOs, Trade Unions and Experts, Progress on Women's Rights: Missing in Action, prepared for Canada's 20-year review of the Beijing Declaration and Platform for Action, clearly shows that progress has stalled in critical areas, including violence against women and girls, the economy, and women's leadership and decision making.
Notice of Special General Meetingpost
FAFIA-AFAI will hold a SPECIAL GENERAL MEETING on Friday, Oct. 3, 2014 from 1-2:00 pm EDT
Sharon McIvor Talks Equality for Aboriginal Womenpost
In "Constitute!", Sharon McIvor talks about the challenges experienced by Aboriginal women in Canada in trying to achieve
equality.
MEDIA ADVISORY: Parliamentary Special Committee on Violence Against Indigenouspost
The Canadian Feminist Alliance for International Action (FAFIA) is dismayed by the failure of the Parliamentary Special Committee on Violence Against Indigenous Women to recommend a national inquiry into the situation of missing and murdered Aboriginal women and girls in Canada.
Anti-poverty and human rights groups shoulder-to-shoulder with "Idle No More"post
Aboriginal peoples disproportionately experience poverty, inadequate housing and homelessness, hunger and ill health.
Click here to view the op ed, written by Leilani Farha, Laurel Rothman, Rita Morbia, Shelagh Day and John Fraser.


text:
export class Fraction extends Number {
    numerator: number;
    denominator: number;
}

export interface IImageExtended extends HTMLImageElement {
    exifdata: any;
    iptcdata: any;
}

// Console debug wrapper that makes code looks a little bit cleaner
export class Debug {
    public static log(...args: any[]) {
        if (Exif.debug) {
            console.log(args);
        }
    }
}

export class Exif {

    public static debug: boolean = false;

    public static IptcFieldMap: any = {
        0x78: "caption",
        0x6E: "credit",
        0x19: "keywords",
        0x37: "dateCreated",
        0x50: "byline",
        0x55: "bylineTitle",
        0x7A: "captionWriter",
        0x69: "headline",
        0x74: "copyright",
        0x0F: "category"
    };

    public static Tags: any = {

        // version tags
        0x9000: "ExifVersion",             // EXIF version
        0xA000: "FlashpixVersion",         // Flashpix format version

        // colorspace tags
        0xA001: "ColorSpace",              // Color space information tag

        // image configuration
        0xA002: "PixelXDimension",         // Valid width of meaningful image
        0xA003: "PixelYDimension",         // Valid height of meaningful image
        0x9101: "ComponentsConfiguration", // Information about channels
        0x9102: "CompressedBitsPerPixel",  // Compressed bits per pixel

        // user information
        0x927C: "MakerNote",               // Any desired information written by the manufacturer
        0x9286: "UserComment",             // Comments by user

        // related file
        0xA004: "RelatedSoundFile",        // Name of related sound file

        // date and time
        0x9003: "DateTimeOriginal",        // Date and time when the original image was generated
        0x9004: "DateTimeDigitized",       // Date and time when the image was stored digitally
        0x9290: "SubsecTime",              // Fractions of seconds for DateTime
        0x9291: "SubsecTimeOriginal",      // Fractions of seconds for DateTimeOriginal
        0x9292: "SubsecTimeDigitized",     // Fractions of seconds for DateTimeDigitized

        // picture-taking conditions
        0x829A: "ExposureTime",            // Exposure time (in seconds)
        0x829D: "FNumber",                 // F number
        0x8822: "ExposureProgram",         // Exposure program
        0x8824: "SpectralSensitivity",     // Spectral sensitivity
        0x8827: "ISOSpeedRatings",         // ISO speed rating
        0x8828: "OECF",                    // Optoelectric conversion factor
        0x9201: "ShutterSpeedValue",       // Shutter speed
        0x9202: "ApertureValue",           // Lens aperture
        0x9203: "BrightnessValue",         // Value of brightness
        0x9204: "ExposureBias",            // Exposure bias
        0x9205: "MaxApertureValue",        // Smallest F number of lens
        0x9206: "SubjectDistance",         // Distance to subject in meters
        0x9207: "MeteringMode",            // Metering mode
        0x9208: "LightSource",             // Kind of light source
        0x9209: "Flash",                   // Flash status
        0x9214: "SubjectArea",             // Location and area of main subject
        0x920A: "FocalLength",             // Focal length of the lens in mm
        0xA20B: "FlashEnergy",             // Strobe energy in BCPS
        0xA20C: "SpatialFrequencyResponse",    //
        0xA20E: "FocalPlaneXResolution",   // Number of pixels in width direction per FocalPlaneResolutionUnit
        0xA20F: "FocalPlaneYResolution",   // Number of pixels in height direction per FocalPlaneResolutionUnit
        0xA210: "FocalPlaneResolutionUnit",    // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution
        0xA214: "SubjectLocation",         // Location of subject in image
        0xA215: "ExposureIndex",           // Exposure index selected on camera
        0xA217: "SensingMethod",           // Image sensor type
        0xA300: "FileSource",              // Image source (3 == DSC)
        0xA301: "SceneType",               // Scene type (1 == directly photographed)
        0xA302: "CFAPattern",              // Color filter array geometric pattern
        0xA401: "CustomRendered",          // Special processing
        0xA402: "ExposureMode",            // Exposure mode
        0xA403: "WhiteBalance",            // 1 = auto white balance, 2 = manual
        0xA404: "DigitalZoomRation",       // Digital zoom ratio
        0xA405: "FocalLengthIn35mmFilm",   // Equivalent foacl length assuming 35mm film camera (in mm)
        0xA406: "SceneCaptureType",        // Type of scene
        0xA407: "GainControl",             // Degree of overall image gain adjustment
        0xA408: "Contrast",                // Direction of contrast processing applied by camera
        0xA409: "Saturation",              // Direction of saturation processing applied by camera
        0xA40A: "Sharpness",               // Direction of sharpness processing applied by camera
        0xA40B: "DeviceSettingDescription",    //
        0xA40C: "SubjectDistanceRange",    // Distance to subject

        // other tags
        0xA005: "InteroperabilityIFDPointer", 0xA420: "ImageUniqueID"  // Identifier assigned uniquely to each image
    };

    public static TiffTags: any = {
        0x0100: "ImageWidth",
        0x0101: "ImageHeight",
        0x8769: "ExifIFDPointer",
        0x8825: "GPSInfoIFDPointer",
        0xA005: "InteroperabilityIFDPointer",
        0x0102: "BitsPerSample",
        0x0103: "Compression",
        0x0106: "PhotometricInterpretation",
        0x0112: "Orientation",
        0x0115: "SamplesPerPixel",
        0x011C: "PlanarConfiguration",
        0x0212: "YCbCrSubSampling",
        0x0213: "YCbCrPositioning",
        0x011A: "XResolution",
        0x011B: "YResolution",
        0x0128: "ResolutionUnit",
        0x0111: "StripOffsets",
        0x0116: "RowsPerStrip",
        0x0117: "StripByteCounts",
        0x0201: "JPEGInterchangeFormat",
        0x0202: "JPEGInterchangeFormatLength",
        0x012D: "TransferFunction",
        0x013E: "WhitePoint",
        0x013F: "PrimaryChromaticities",
        0x0211: "YCbCrCoefficients",
        0x0214: "ReferenceBlackWhite",
        0x0132: "DateTime",
        0x010E: "ImageDescription",
        0x010F: "Make",
        0x0110: "Model",
        0x0131: "Software",
        0x013B: "Artist",
        0x8298: "Copyright"
    };

    public static GPSTags: any = {
        0x0000: "GPSVersionID",
        0x0001: "GPSLatitudeRef",
        0x0002: "GPSLatitude",
        0x0003: "GPSLongitudeRef",
        0x0004: "GPSLongitude",
        0x0005: "GPSAltitudeRef",
        0x0006: "GPSAltitude",
        0x0007: "GPSTimeStamp",
        0x0008: "GPSSatellites",
        0x0009: "GPSStatus",
        0x000A: "GPSMeasureMode",
        0x000B: "GPSDOP",
        0x000C: "GPSSpeedRef",
        0x000D: "GPSSpeed",
        0x000E: "GPSTrackRef",
        0x000F: "GPSTrack",
        0x0010: "GPSImgDirectionRef",
        0x0011: "GPSImgDirection",
        0x0012: "GPSMapDatum",
        0x0013: "GPSDestLatitudeRef",
        0x0014: "GPSDestLatitude",
        0x0015: "GPSDestLongitudeRef",
        0x0016: "GPSDestLongitude",
        0x0017: "GPSDestBearingRef",
        0x0018: "GPSDestBearing",
        0x0019: "GPSDestDistanceRef",
        0x001A: "GPSDestDistance",
        0x001B: "GPSProcessingMethod",
        0x001C: "GPSAreaInformation",
        0x001D: "GPSDateStamp",
        0x001E: "GPSDifferential"
    };

    public static StringValues: any = {
        ExposureProgram: {
            0: "Not defined",
            1: "Manual",
            2: "Normal program",
            3: "Aperture priority",
            4: "Shutter priority",
            5: "Creative program",
            6: "Action program",
            7: "Portrait mode",
            8: "Landscape mode"
        }, MeteringMode: {
            0: "Unknown",
            1: "Average",
            2: "CenterWeightedAverage",
            3: "Spot",
            4: "MultiSpot",
            5: "Pattern",
            6: "Partial",
            255: "Other"
        }, LightSource: {
            0: "Unknown",
            1: "Daylight",
            2: "Fluorescent",
            3: "Tungsten (incandescent light)",
            4: "Flash",
            9: "Fine weather",
            10: "Cloudy weather",
            11: "Shade",
            12: "Daylight fluorescent (D 5700 - 7100K)",
            13: "Day white fluorescent (N 4600 - 5400K)",
            14: "Cool white fluorescent (W 3900 - 4500K)",
            15: "White fluorescent (WW 3200 - 3700K)",
            17: "Standard light A",
            18: "Standard light B",
            19: "Standard light C",
            20: "D55",
            21: "D65",
            22: "D75",
            23: "D50",
            24: "ISO studio tungsten",
            255: "Other"
        }, Flash: {
            0x0000: "Flash did not fire",
            0x0001: "Flash fired",
            0x0005: "Strobe return light not detected",
            0x0007: "Strobe return light detected",
            0x0009: "Flash fired, compulsory flash mode",
            0x000D: "Flash fired, compulsory flash mode, return light not detected",
            0x000F: "Flash fired, compulsory flash mode, return light detected",
            0x0010: "Flash did not fire, compulsory flash mode",
            0x0018: "Flash did not fire, auto mode",
            0x0019: "Flash fired, auto mode",
            0x001D: "Flash fired, auto mode, return light not detected",
            0x001F: "Flash fired, auto mode, return light detected",
            0x0020: "No flash function",
            0x0041: "Flash fired, red-eye reduction mode",
            0x0045: "Flash fired, red-eye reduction mode, return light not detected",
            0x0047: "Flash fired, red-eye reduction mode, return light detected",
            0x0049: "Flash fired, compulsory flash mode, red-eye reduction mode",
            0x004D: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",
            0x004F: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",
            0x0059: "Flash fired, auto mode, red-eye reduction mode",
            0x005D: "Flash fired, auto mode, return light not detected, red-eye reduction mode",
            0x005F: "Flash fired, auto mode, return light detected, red-eye reduction mode"
        }, SensingMethod: {
            1: "Not defined",
            2: "One-chip color area sensor",
            3: "Two-chip color area sensor",
            4: "Three-chip color area sensor",
            5: "Color sequential area sensor",
            7: "Trilinear sensor",
            8: "Color sequential linear sensor"
        }, SceneCaptureType: {
            0: "Standard", 1: "Landscape", 2: "Portrait", 3: "Night scene"
        }, SceneType: {
            1: "Directly photographed"
        }, CustomRendered: {
            0: "Normal process", 1: "Custom process"
        }, WhiteBalance: {
            0: "Auto white balance", 1: "Manual white balance"
        }, GainControl: {
            0: "None", 1: "Low gain up", 2: "High gain up", 3: "Low gain down", 4: "High gain down"
        }, Contrast: {
            0: "Normal", 1: "Soft", 2: "Hard"
        }, Saturation: {
            0: "Normal", 1: "Low saturation", 2: "High saturation"
        }, Sharpness: {
            0: "Normal", 1: "Soft", 2: "Hard"
        }, SubjectDistanceRange: {
            0: "Unknown", 1: "Macro", 2: "Close view", 3: "Distant view"
        }, FileSource: {
            3: "DSC"
        },

        Components: {
            0: "", 1: "Y", 2: "Cb", 3: "Cr", 4: "R", 5: "G", 6: "B"
        }
    };

    public static addEvent(element: EventTarget | any, event: string, handler: EventListener) {
        if (element.addEventListener) {
            element.addEventListener(event, handler, false);
        } else {
            // Hello, IE!
            if (element.attachEvent) {
                element.attachEvent("on" + event, handler);
            }
        }
    }

    public static imageHasData(img: IImageExtended) {
        return !!(img.exifdata);
    }

    public static base64ToArrayBuffer(base64: string, contentType?: string): ArrayBuffer {
        // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg'
        contentType = contentType || base64.match(/^data:([^;]+);base64,/mi)[1] || "";
        base64 = base64.replace(/^data:([^;]+);base64,/gmi, "");
        let binary: string = atob(base64);
        let len: number = binary.length;
        let buffer: ArrayBuffer = new ArrayBuffer(len);
        let view: Uint8Array = new Uint8Array(buffer);
        for (let i = 0; i < len; i++) {
            view[i] = binary.charCodeAt(i);
        }
        return buffer;
    }

    public static objectURLToBlob(url: string, callback: Function) {
        let http: XMLHttpRequest = new XMLHttpRequest();
        http.open("GET", url, true);
        http.responseType = "blob";
        http.onload = function () {
            if (http.status === 200 || http.status === 0) {
                callback(http.response);
            }
        };
        http.send();
    }

    public static getImageData(img: IImageExtended | Blob | File, callback: Function) {
        function handleBinaryFile(binFile: ArrayBuffer) {
            let data = Exif.findEXIFinJPEG(binFile);
            let iptcdata = Exif.findIPTCinJPEG(binFile);
            (img as IImageExtended).exifdata = data || {};
            (img as IImageExtended).iptcdata = iptcdata || {};
            if (callback) {
                callback.call(img);
            }
        }

        if ("src" in img && (img as IImageExtended).src) {
            if (/^data:/i.test((img as IImageExtended).src)) { // Data URI
                let arrayBuffer = Exif.base64ToArrayBuffer((img as IImageExtended).src);
                handleBinaryFile(arrayBuffer);
            } else {
                if (/^blob:/i.test((img as IImageExtended).src)) { // Object URL
                    let fileReader = new FileReader();
                    fileReader.onload = (e: any) => {
                        handleBinaryFile(e.target.result);
                    };
                    Exif.objectURLToBlob((img as IImageExtended).src, (blob: Blob) => {
                        fileReader.readAsArrayBuffer(blob);
                    });
                } else {
                    let http = new XMLHttpRequest();
                    http.onload = function () {
                        if (http.status === 200 || http.status === 0) {
                            handleBinaryFile(http.response);
                        } else {
                            throw "Could not load image";
                        }
                        http = null;
                    };
                    http.open("GET", (img as IImageExtended).src, true);
                    http.responseType = "arraybuffer";
                    http.send(null);
                }
            }
        } else {
            if (FileReader && (img instanceof Blob || img instanceof File)) {
                let fileReader = new FileReader();
                fileReader.onload = function (e: any) {
                    Debug.log("Got file of length " + e.target.result.byteLength);
                    handleBinaryFile(e.target.result);
                };

                fileReader.readAsArrayBuffer(img);
            }
        }
    }

    public static findEXIFinJPEG(file: ArrayBuffer) {
        let dataView = new DataView(file);

        Debug.log("Got file of length " + file.byteLength);
        if ((dataView.getUint8(0) !== 0xFF) || (dataView.getUint8(1) !== 0xD8)) {
            Debug.log("Not a valid JPEG");
            return false; // not a valid jpeg
        }

        let offset = 2;
        let length: number = file.byteLength;
        let marker: number;

        while (offset < length) {
            if (dataView.getUint8(offset) !== 0xFF) {
                Debug.log("Not a valid marker at offset " + offset + ", found: " + dataView.getUint8(offset));
                return false; // not a valid marker, something is wrong
            }

            marker = dataView.getUint8(offset + 1);
            Debug.log(marker);

            // we could implement handling for other markers here,
            // but we're only looking for 0xFFE1 for EXIF data
            if (marker === 225) {
                Debug.log("Found 0xFFE1 marker");
                return Exif.readEXIFData(dataView, offset + 4); // , dataView.getUint16(offset + 2) - 2);
                // offset += 2 + file.getShortAt(offset+2, true);

            } else {
                offset += 2 + dataView.getUint16(offset + 2);
            }
        }
    }

    public static findIPTCinJPEG(file: ArrayBuffer) {
        let dataView = new DataView(file);

        Debug.log("Got file of length " + file.byteLength);
        if ((dataView.getUint8(0) !== 0xFF) || (dataView.getUint8(1) !== 0xD8)) {
            Debug.log("Not a valid JPEG");
            return false; // not a valid jpeg
        }

        let offset = 2;
        let length = file.byteLength;

        let isFieldSegmentStart = function (_dataView: DataView, _offset: number) {
            return (
                _dataView.getUint8(_offset) === 0x38 && _dataView.getUint8(_offset + 1) === 0x42 && _dataView.getUint8(
                    _offset + 2) === 0x49 && _dataView.getUint8(_offset + 3) === 0x4D && _dataView.getUint8(
                    _offset + 4) === 0x04 && _dataView.getUint8(_offset + 5) === 0x04
            );
        };

        while (offset < length) {

            if (isFieldSegmentStart(dataView, offset)) {

                // Get the length of the name header (which is padded to an even number of bytes)
                let nameHeaderLength = dataView.getUint8(offset + 7);
                if (nameHeaderLength % 2 !== 0) {
                    nameHeaderLength += 1;
                }
                // Check for pre photoshop 6 format
                if (nameHeaderLength === 0) {
                    // Always 4
                    nameHeaderLength = 4;
                }

                let startOffset = offset + 8 + nameHeaderLength;
                let sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength);

                return Exif.readIPTCData(file, startOffset, sectionLength);
            }

            // Not the marker, continue searching
            offset++;

        }

    }

    public static readIPTCData(file: ArrayBuffer, startOffset: number, sectionLength: number) {
        let dataView = new DataView(file);
        let data: any = {};
        let fieldValue: any, fieldName: string, dataSize: number, segmentType: any, segmentSize: number;
        let segmentStartPos = startOffset;
        while (segmentStartPos < startOffset + sectionLength) {
            if (dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos + 1) === 0x02) {
                segmentType = dataView.getUint8(segmentStartPos + 2);
                if (segmentType in Exif.IptcFieldMap) {
                    dataSize = dataView.getInt16(segmentStartPos + 3);
                    segmentSize = dataSize + 5;
                    fieldName = Exif.IptcFieldMap[segmentType];
                    fieldValue = Exif.getStringFromDB(dataView, segmentStartPos + 5, dataSize);
                    // Check if we already stored a value with this name
                    if (data.hasOwnProperty(fieldName)) {
                        // Value already stored with this name, create multivalue field
                        if (data[fieldName] instanceof Array) {
                            data[fieldName].push(fieldValue);
                        } else {
                            data[fieldName] = [data[fieldName], fieldValue];
                        }
                    } else {
                        data[fieldName] = fieldValue;
                    }
                }
            }
            segmentStartPos++;
        }
        return data;
    }

    public static readTags(file: DataView, tiffStart: number, dirStart: number, strings: string[],
                           bigEnd: boolean): Object {
        let entries: number = file.getUint16(dirStart, !bigEnd);
        let tags: any = {};
        let entryOffset: number;
        let tag: string;

        for (let i = 0; i < entries; i++) {
            entryOffset = dirStart + i * 12 + 2;
            tag = strings[file.getUint16(entryOffset, !bigEnd)];
            if (!tag) {
                Debug.log("Unknown tag: " + file.getUint16(entryOffset, !bigEnd));
            }
            tags[tag] = Exif.readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);
        }
        return tags;
    }

    public static readTagValue(file: any, entryOffset: number, tiffStart: number, dirStart: number,
                               bigEnd: boolean): any {
        let type: number = file.getUint16(entryOffset + 2, !bigEnd);
        let numValues = file.getUint32(entryOffset + 4, !bigEnd);
        let valueOffset = file.getUint32(entryOffset + 8, !bigEnd) + tiffStart;
        let offset: number;
        let vals: any[], val: any, n: number;
        let numerator: any;
        let denominator: any;

        switch (type) {
            case 1: // byte, 8-bit unsigned int
            case 7: // undefined, 8-bit byte, value depending on field
                if (numValues === 1) {
                    return file.getUint8(entryOffset + 8, !bigEnd);
                } else {
                    offset = numValues > 4 ? valueOffset : (entryOffset + 8);
                    vals = [];
                    for (n = 0; n < numValues; n++) {
                        vals[n] = file.getUint8(offset + n);
                    }
                    return vals;
                }

            case 2: // ascii, 8-bit byte
                offset = numValues > 4 ? valueOffset : (entryOffset + 8);
                return Exif.getStringFromDB(file, offset, numValues - 1);

            case 3: // short, 16 bit int
                if (numValues === 1) {
                    return file.getUint16(entryOffset + 8, !bigEnd);
                } else {
                    offset = numValues > 2 ? valueOffset : (entryOffset + 8);
                    vals = [];
                    for (n = 0; n < numValues; n++) {
                        vals[n] = file.getUint16(offset + 2 * n, !bigEnd);
                    }
                    return vals;
                }

            case 4: // long, 32 bit int
                if (numValues === 1) {
                    return file.getUint32(entryOffset + 8, !bigEnd);
                } else {
                    vals = [];
                    for (n = 0; n < numValues; n++) {
                        vals[n] = file.getUint32(valueOffset + 4 * n, !bigEnd);
                    }
                    return vals;
                }

            case 5:    // rational = two long values, first is numerator, second is denominator
                if (numValues === 1) {
                    numerator = file.getUint32(valueOffset, !bigEnd);
                    denominator = file.getUint32(valueOffset + 4, !bigEnd);
                    val = new Fraction(numerator / denominator);
                    val.numerator = numerator;
                    val.denominator = denominator;
                    return val;
                } else {
                    vals = [];
                    for (n = 0; n < numValues; n++) {
                        numerator = file.getUint32(valueOffset + 8 * n, !bigEnd);
                        denominator = file.getUint32(valueOffset + 4 + 8 * n, !bigEnd);
                        vals[n] = new Fraction(numerator / denominator);
                        vals[n].numerator = numerator;
                        vals[n].denominator = denominator;
                    }
                    return vals;
                }

            case 9: // slong, 32 bit signed int
                if (numValues === 1) {
                    return file.getInt32(entryOffset + 8, !bigEnd);
                } else {
                    vals = [];
                    for (n = 0; n < numValues; n++) {
                        vals[n] = file.getInt32(valueOffset + 4 * n, !bigEnd);
                    }
                    return vals;
                }

            case 10: // signed rational, two slongs, first is numerator, second is denominator
                if (numValues === 1) {
                    return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset + 4, !bigEnd);
                } else {
                    vals = [];
                    for (n = 0; n < numValues; n++) {
                        vals[n] = file.getInt32(valueOffset + 8 * n, !bigEnd) / file.getInt32(valueOffset + 4 + 8 * n,
                                !bigEnd);
                    }
                    return vals;
                }
            default:
                break;
        }
    }

    public static getStringFromDB(buffer: DataView, start: number, length: number): string {
        let outstr = "";
        for (let n = start; n < start + length; n++) {
            outstr += String.fromCharCode(buffer.getUint8(n));
        }
        return outstr;
    }

    public static readEXIFData(file: DataView, start: number): any {
        if (Exif.getStringFromDB(file, start, 4) !== "Exif") {
            Debug.log("Not valid EXIF data! " + Exif.getStringFromDB(file, start, 4));

            return false;
        }

        let bigEnd: boolean, tags: any, tag: string, exifData: any, gpsData: any, tiffOffset: number = start + 6;

        // test for TIFF validity and endianness
        if (file.getUint16(tiffOffset) === 0x4949) {
            bigEnd = false;
        } else {
            if (file.getUint16(tiffOffset) === 0x4D4D) {
                bigEnd = true;
            } else {
                Debug.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)");
                return false;
            }
        }

        if (file.getUint16(tiffOffset + 2, !bigEnd) !== 0x002A) {
            Debug.log("Not valid TIFF data! (no 0x002A)");
            return false;
        }

        let firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd);

        if (firstIFDOffset < 0x00000008) {
            Debug.log("Not valid TIFF data! (First offset less than 8)", file.getUint32(tiffOffset + 4, !bigEnd));
            return false;
        }

        tags = Exif.readTags(file, tiffOffset, tiffOffset + firstIFDOffset, Exif.TiffTags, bigEnd);

        if (tags.ExifIFDPointer) {
            exifData = Exif.readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, Exif.Tags, bigEnd);
            for (tag in exifData) {
                if ({}.hasOwnProperty.call(exifData, tag)) {
                    switch (tag) {
                        case "LightSource" :
                        case "Flash" :
                        case "MeteringMode" :
                        case "ExposureProgram" :
                        case "SensingMethod" :
                        case "SceneCaptureType" :
                        case "SceneType" :
                        case "CustomRendered" :
                        case "WhiteBalance" :
                        case "GainControl" :
                        case "Contrast" :
                        case "Saturation" :
                        case "Sharpness" :
                        case "SubjectDistanceRange" :
                        case "FileSource" :
                            exifData[tag] = Exif.StringValues[tag][exifData[tag]];
                            break;
                        case "ExifVersion" :
                        case "FlashpixVersion" :
                            exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2],
                                exifData[tag][3]);
                            break;
                        case "ComponentsConfiguration" :
                            let compopents = "Components";
                            exifData[tag] = Exif.StringValues[compopents][exifData[tag][0]] + Exif.StringValues[compopents][exifData[tag][1]] + Exif.StringValues[compopents][exifData[tag][2]] + Exif.StringValues[compopents][exifData[tag][3]];
                            break;
                        default:
                            break;
                    }
                    tags[tag] = exifData[tag];
                }
            }
        }

        if (tags.GPSInfoIFDPointer) {
            gpsData = Exif.readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, Exif.GPSTags, bigEnd);
            for (tag in gpsData) {
                if ({}.hasOwnProperty.call(gpsData, tag)) {
                    switch (tag) {
                        case "GPSVersionID" :
                            gpsData[tag] = gpsData[tag][0] + "." + gpsData[tag][1] + "." + gpsData[tag][2] + "." + gpsData[tag][3];
                            break;
                        default:
                            break;
                    }
                    tags[tag] = gpsData[tag];
                }
            }
        }

        return tags;
    }

    public static getData(img: IImageExtended | HTMLImageElement, callback: Function) {

        if ((img instanceof Image || img instanceof HTMLImageElement) && !img.complete) {
            return false;
        }

        if (!Exif.imageHasData((img as IImageExtended))) {
            Exif.getImageData((img as IImageExtended), callback);
        } else {
            if (callback) {
                callback.call(img);
            }
        }
        return true;
    }

    public static getTag(img: any, tag: string) {
        if (!Exif.imageHasData(img)) {
            return;
        }
        return img.exifdata[tag];
    };

    public static getAllTags(img: any) {
        if (!Exif.imageHasData(img)) {
            return {};
        }
        let a: string, data: any = img.exifdata, tags: any = {};
        for (a in data) {
            if (data.hasOwnProperty(a)) {
                tags[a] = data[a];
            }
        }
        return tags;
    };

    public static pretty(img: IImageExtended) {
        if (!Exif.imageHasData(img)) {
            return "";
        }
        let a: any, data: any = img.exifdata, strPretty = "";
        for (a in data) {
            if (data.hasOwnProperty(a)) {
                if (typeof data[a] === "object") {
                    if (data[a] instanceof Number) {
                        strPretty += `${a} : ${data[a]} [${data[a].numerator}/${data[a].denominator}]\r\n`;
                    } else {
                        strPretty += `${a} : [${data[a].length} values]\r\n`;
                    }
                } else {
                    strPretty += `${a} : ${data[a]}\r\n`;
                }
            }
        }
        return strPretty;
    }

    public static readFromBinaryFile(file: ArrayBuffer) {
        return Exif.findEXIFinJPEG(file);
    }
}

redpajama_set_name: RedPajamaGithub


text:
package be.degreyt.mmdoc.byndr.services;

import be.degreyt.mmdoc.datamodel.*;

import java.util.function.Predicate;

public interface FilterProvider {

    Predicate<CardOwnership> hasType(CardType... cardTypes);

    Predicate<CardOwnership> isFromExpansion(Expansion... cardTypes);

    Predicate<CardOwnership> isFromFaction(Faction... factions);

    Predicate<CardOwnership> hasMagicSchool(MagicSchool... magicSchools);

    Predicate<CardOwnership> hasRarity(Rarity... rarities);

    Predicate<CardOwnership> and(Predicate<CardOwnership> first, Predicate<CardOwnership> second);

    Predicate<CardOwnership> or(Predicate<CardOwnership> first, Predicate<CardOwnership> second);

    Predicate<CardOwnership> xor(Predicate<CardOwnership> first, Predicate<CardOwnership> second);

    Predicate<CardOwnership> nameMatches(String text);

    Predicate<CardOwnership> hasExpansion(Expansion expansion);

    Predicate<CardOwnership> hasFaction(Faction faction);
}


text:
McCain Calls Out $13 Billion Wasted On Ships That Don't Work
(U.S. Navy photo/Released)
Thomas Phippen Reporter
Arizona Sen. John McCain goes after wasteful and ridiculous spending within the Department of Defense, particularly a troubled ship program, in his latest report on government waste.
The report decries money spent on frivolous programs, funds abused through fraud, and the viability whole programs, like the 26 littoral combat ships (LCS) that cost taxpayers $12 billion, yet have "demonstrated next-to-no combat capability."
The report "exposes just a few examples of the wasteful spending at the Pentagon that is so detrimental to our national defense," McCain said of his "America's Most Wasted" report released Monday, the sequel to former Sen. Tom Coburn's annual "Wastebook."
As "an unfortunate and classic example of acquisition gone awry," McCain says the Navy must reconcile "their aspirations for the LCS with the program's troubled reality" in order to curb ballooning defense costs.
Each LCS costs around $478 million initially. But as repairs cost increase, the total amount for the 26 ships already delivered to the fleet amounts to $12.4 billion. Should the Navy continue to purchase the LCS to bring the total number to 40, the cost will be closer $29 billion for ships that have failed to live up to capabilities promised, and continually breakdown. (RELATED: The Navy's $29 Billion Ships Broke Down A LOT This Year)
When Congress returns in 2017, lawmakers will have to decide whether it's best to try to fix the LCS program and continue buying ships, or look for better ways build the Navy. The U.S. needs to buy more than 70 new ships in order to reach President-elect Donald Trump's goal of a 350-ship Navy fleet.
The LCS "continues to experience new problems, but it is not a new program," McCain said. Whether the Navy continues with the program or not, "the nation still needs a capable small surface combatant that addresses the LCS's critical shortfalls," McCain said in the report.
With more than $19 trillion in federal debt, "It has never been more important to eliminate unnecessary defense spending and mismanagement so that we can reinvest savings into improving the training and equipment our warfighters need," McCain said.
Follow Thomas Phippen on Twitter
Send tips to thomas@dailycallernewsfoundation.org.
Tags : john mccain
Thomas Phippen


text:
Q: Web page cannot display some images My host uses Apache with .htaccess.
The web page is PHP-based.
The PHP files load just fine. The images are an issue.
A few are OK but most are not. They are all in a folder /jpg off the root.
Some are png others jpg.
All the images are like this:

If I replace topimage.jpg with say image20.jpg, even though image20.jpg is in the  jpg folder, it does not display.
I thought, maybe this is due somehow to caching? (not sure why). I try with Chrome, Firefox and Opera.
My computer runs Windows 10.
On Android it is even worse. Only one image appears.
An almost identical web page is available from another URL and the images there (the same ones) display just fine.
The properties of the folders in .htaccess seem OK.
Where would I look next?
I replaced a one of the png image files with a similarly named jpg. So \jpg\image2.png is now \jpg\image2.jpg. Here's the img html:

And image2.jpg is in the /jpg folder off the root.
If I edit (on Apache) the php file and change image2 to image1, image1 appears. Back to image2.jpg and again the placeholder.
I'm not sure what to do next.

redpajama_set_name: RedPajamaStackExchange


In partnership with the Department for Education, Get Set launched Get Set to Plan Your Legacy. Use the handbook to help you to explore the Get Set resources and more. This resource is part of the Volunteering and Enterprise campaign.
The Plan Your legacy project began when schools in England were invited to apply for grants of up to £5000 to help them deliver activities that maximised the legacy of the London 2012 Games and ensured that the inspiration and magic of London 2012 continued to motivate young people.
104 schools successfully received the funding and became part of a small national group of teachers passionate about the legacy of the London 2012 Games and the difference that teaching and learning through the Olympic and Paralympic Values makes. They participated in a national induction session, designed to improve the quality of the programme, catalyse existing legacy plans and enable teachers to work more effectively in partnership with other schools.
The Plan Your Legacy handbook has since been updated to support teachers in continuing to use Get Set to help motivate and engage students as part of the continuing legacy of London 2012. It contains a wide variety of activities, and guidance on how to use other Get Set resources to help get students active and teach them about the Olympic and Paralympic Values.


We love children and desire for them to participate fully in the life of the church, as age allows, enjoying all the privileges and benefits of being part of God's family. Nurturing the faith of children is a large part of our calling as a church. One way we do this is by teaching them about God's character and love and sharing with them the gospel of salvation through Christ. We seek to teach in age-appropriate ways that will engage their hearts and minds. We also endeavor to model for them what it means to follow Christ through worship, prayer, discipleship, and mission. We want to instill in our children a hopeful sense of God's redeeming work in His people and throughout the whole world, while cultivating a desire to join him in that work of renewal.
Redeemer Kids Nursery (0-3 years): We offer childcare for children up to age 4 for the entirety of the service. In the nursery the kids will play, hear a Bible story, sing and have a snack (Rice Chex and water). You are welcome to pick your child up before Communion or after the service ends.
Redeemer Kids Worship (3-5 years): Children ages 3 to Kindergarten may come during the middle of the service for a time of teaching, singing and play. Part of our intention for this time is to help prepare them to join their parents for the entire worship service. You may pick up your child after the sermon so that they can rejoin you for blessing and Communion.
Check-in: Redeemer Kids is located across the hall from the worship space. You may check your child in beginning 15 minutes before the start of worship. At check-in you will receive a security sticker for your child. This sticker is a safety measure ensuring only parents or an authorized person can retrieve your child. We will also ask for your cell phone number at check-in so we can contact you if a need arises. If your child is inconsolable for more than 5-10 minutes, we will send you a text message during worship.
Safety: We are committed to providing a loving, fun, and safe environment where children can learn about and experience the love of God each week. Each of our volunteers is a member or regular attender of our church and must undergo a routine background check. All volunteers have been screened and have completed training that includes sexual abuse prevention. It is our policy for a volunteer to never be alone with a child.


This report is about domain ymp.tm.pl. Report was generated 2014-03-23.
Unfortunately we can't tell you anything about domain ymp.tm.pl.
Domain ymp.tm.pl maybe isn't registered.
Probably domain ymp.tm.pl isn't correct domain name or this domain is wrong configured by the owner.


text:
My Home: Maayan
A Home for Machomies
Humans of Machon Maayan
Shana Alef
Shana Bet
Tiyul and Seminar Reflections
Livin' in the Holy Land
My First Shiva Call
Hannah Kaplun, Ridgewood, New Jersey
Today, I paid my first shiva call for someone I'd never met before: a seemingly strange thing, until you think about our common factor. We have the most important thing in common, the one thing that bands together millions of people, and has for thousands of years: we are both members of Am Yisrael.
Last Thursday, December 13th, Yovel Mor Yosef was shot and killed by a Palestinian terrorist outside of the Givat Assaf settlement outpost. This was after he volunteered to stay on base for Shabbat in order to allow his fellow soldiers a break. By staying, he risked and lost his life to save his friends.
Today, Tuesday December 18th, I was given the opportunity to pay a shiva call to Yovel's family, who live in Ashkelon. At first, I was nervous about going. As I said before, I've never paid a shiva call. Not only that, but I don't speaka word of Hebrew. I then realized that none of that matters. The fact that I was coming was the important part. The fact that I was showing up to support the family of a fallen soldier was the most important part.
When a member of the Jewish community dies, everyone is affected. Yovel was not just a random soldier killed in combat, but he was a fellow Jew, a brother.
A single life taken hurts the the moral of not only the army or the country, but all of Klal Yisroel. An Israeli soldier fights in order to protect the eternal homeland of the Jews, and the loss of just one impacts millions.
At first, we took turns going into the shiva house, but then we went outside to a tent area for overflow visitors. Yovel's aunt came outside to tell us stories about him. Repeatedly, she talked about how humble Yovel was and how much he loved his sisters. When he read the Torah once, he would memorize it simply by reading it. This is such an amazing skill, yet he asked people not to talk about it, because he did not want to brag. Two of his sisters have cerebral palsy and spend most of the their days in the house. Whenever he came home from the army, he would take them out for a ride in the car. He was so proud of them, and he always took his unit to meet them. Not only that, but he had a permanent smile on his face, lighting up every room he that walked into.
On my way out, I passed Yovel's parents. They were sitting on the couch, not crying, but clearly in pain—pain that I have never seen before: the pain that one can only feel after burying a child. I went up to them and was shocked to see a tear in the neck of their shirts. Now, I know a mourning custom is to rip your shirt, but to actually see it made it so much more real. It is the physical manifestation of their pain. I handed them a card that I had made with the Israeli flag and "Am Yisrael Chai" on the front. The inside thanked Yovel's parents for everything their son did in order to protect the Jewish people. His father's face lit up and he thanked me for coming. He wished me good health and gave me a bracha that I should stay in Israel. Wow.
This man buried his son five days ago, but had the strength to say something so meaningful and beautiful to a stranger that he had never met before and never will again.
Going to a shiva house is not just honoring the family, but it's also making the life of the person who died real and personal to you. There were so many wonderful characteristics about Yovel that we can all try to emulate in our lives. Choose one that you connect with and honor his legacy by trying to emulate that in your own life. In that way, the nation of Israel truly lives.
Am Yisrael Chai.
As seen on The Times of Israel
https://blogs.timesofisrael.com/my-first-shiva-call/
Livin' in the Holy Land
Know an Aleph Teach an Aleph: Hannah Kaplun
Humans of Machon Maayan: Brielle Kaplan


So the day of the pageant rolls around and Nuthead and I need to prepare as we have done nothing until this point. The format of the pageant is in four parts: swim suit, knowledge quiz about the sorority, formal dress, and talent portion. Nuthead had a cow outfit for some reason and there was always a beer bong around the house. Milk would be purchased right before the event. His swimsuit was something rediculous like board shorts, a wife beater, and an inflateable ducky around his waist. His formal dress was some killer 70's/80's looking suit. My swimsuit was my roomate Geoff's speedos which had a waist of size 24 while I am easily a 32 with huge legs due to me playing soccer 7 hours a day with a stunning tan right above the knees. My formal atire was purchased at the salvation army that day and ended up being pretty slick considering it was thrown together last minute. We went to Grants for Guns to purchase a taser. They were happy to give us one since we claimed it was a gift for Nuthead's sister. We got two 9-volt batteries and we were ready.
Right before we goto the auditorium we decide to try the taser real quick to make sure it wouldn't kill me or something on stage. We put the batteries in, turned it on and this thing was mean! We barely touched eachother with it and didn't want to feel how it would be if you jammed it into your side. The sound is the worst part about it as it sounds like somebody is slapping a lardy thigh with a ruler 5 times a second with fury.
We show up backstage and find our lovely "coaches" from the sorority. They tell us the answers we need to know for the knowledge quiz and then give us a bag of goodies. The best goodie in the bag by far was the gatorade bottle with the label removed and replaced with a homemade label with pleasing pictures and encouraging words and the contents of the bottle were replaced with pure Captain Morgans spiced rum. Nuthead and I decide that since the pageant was soon we should drink all of the rum so that it would take effect by the time we got to the more difficult talent portion of the contest. A great idea of course.
The social science lecture hall was absolutely packed with people overflowing out the back and people sitting on the floor. Thankfully we had a large contingent of Phi Psi's claiming a good chunk of the seats in the middle left. I come to find out later that the arts department was having a very rare kegger party and our very non-artistic friends had found their way there and practiced the art of drinking so they were floating on the same level as Nuthead and I were after our special gatorade. I gotta say I was feeling a little nervous at this point. The pageant starts and its all bells and whistles and lights and flash. The guys are announced and they walk out on the stage in their swimwear and take a little turn on the catwalk. Everyone else other than Nuthead and I had boardshorts on from what I can remember and with heavy concentrations of muscles on the upper body. My legs looked ludicrously large with this tiny speedo (the first time I had worn one) and who knows how the package looked but I felt that I got a good reaction from the crowd.
We are then told to sit down, without changing cloths I might add, and prepare for the knowledge portion of the pageant. The questions were things like "When was our sorority founded?" and "Who was the chapter advisor?" Nuthead and I were drunk at this point. We didn't do well but the scoring was obviously not important as they were just arbitrarily claiming how much each question was worth.
We then all go back stage to change into our formal attire. Nut much to say for this round other than we both looked good and we both were more drunk than we were during the quiz round.
Now for the talent portion. I think there was some buzz in the crowd as word had trickled out as to what was going to happen even though we were trying to keep it somewhat of a secret. Nuthead goes first. He walks out in a cow outfit, udders and all, with a beer bong in his hand. He then pours a half gallon of milk into the beer bong and then proceeds to drink it to completion. Amazing! Takes a bow and walks off the stage. The crowd loved it and applauded him as he gracefully found the nearest trash can and then yakked it all out, backstage. The other guys were doing things like playing the guitar, or building them letters, or singing, you know… real talents. Then my turn comes. I come on the stage in my formal 70's gear lip syncing to "When I think about you I touch myself" and the plan was to do this for only 30 seconds or so. Of course Nuthead let me sweat and this lasted for a minute or more as I performed some weak dance moves. Finally I waved him out he comes in his cow outfit and tasers me in the side until I fall on the ground writhing in pain. The crowd is gasping and laughing and applauding I think. Then in an effort to not lose the crowd, Nuthead comes over and stuns me again with a prolonged 3 second stun with me twitching on the ground the whole time. Then follows up with one final blast just to make sure I am done which I relay to him through some contorted facial expression that I was definately done. The crowd now is not really sure what to say or do as they seemed to feel my pain and were not sure if I was alright. I got up, bowed and stumbled off stage. Good thing I was drunk.
In the end we did not win. It was all rigged and the guy who was not that exciting who built letters for the girls won. It was not important to us. However, our section of the crowd was getting a little rowdy and the outcome was the final straw. Kamran gets his hands on the taser and starts stunning anyone he can reach in his area of the crowd, strangers or not. Bodies are hurdling the chairs two at a time and girls are screaming. Kamran finally gets the taser wrestled away but only after getting a few of our friends for good measure, especially Phil. This cleared the whole auditorium and needless to say the sorority was not pleased with our actions. I think they banned us from any more events like this or at least they didn't tell us about them.
I had some hardy scars on my side for about 6 months after that night but it was well worth it and a very good memory from university. I would take a tasering any day over mase which will need to be discussed in another blog.
If anyone has any pictures or movies from this event PLEASE get in touch with me. Mine were lost in the great picture deletion of junior year.


text:
Q: Name this concept: Comparing equal sized vectors vs. comparing features If you obtain a vector by taking $n$ discrete samples over some underlying function, then it's easy to compare that vector with another of the same size.  With a bunch of $n$-dimensional vectors, you can do interesting analysis like PCA.  However, if all your vectors have different dimensionality, such as a bunch of images taken of (potentially) the same object at different resolutions, the problem is trickier.  In computer vision, they often use a feature transform (such as SIFT) that will provide a comparison metric for the two vectors.
Is there a name for the problem of finding a transformation of a subspace from one vector that is closely aligned with a different transformation of a different subspace from another vector?  E.g., matching a single word between two speakers when the word is embedded within a sentence; or finding an image of a car at different resolutions embedded in two different images.