text:
Problems with UKVI MP page
When accessing the UKVI information page for MPs, you will get an error message about the site certificate. UKVI are aware of it and are working to rectify it.
In the meantime, the website still works and is accessible, please ignore the security certificate message and choose 'proceed' at the bottom of the page to access the site.
Posted on 26th July 2017 8th August 2017
POSTnote: Security of UK Food Supply
The security of UK food supply is a key priority for the Government, particularly in light of the UK's forthcoming withdrawal from the EU. This note outlines current UK trade in food and animal feed, examines the challenges raised to the security of UK food supply by withdrawal from the EU and analyses the policy options available for improving UK food security.
Read the full POSTnote here: http://researchbriefings.parliament.uk/ResearchBriefing/Summary/POST-PN-0556
POSTnote: Environmentally Sustainable Agriculture
Agricultural practices can reduce water quality, degrade soils and cause biodiversity loss. This in turn can disrupt natural processes that support food production. Environmentally sustainable agriculture seeks to reduce environmental damage and restore such processes. This POSTnote summarises associated land management options, agricultural policies and the constraints imposed by a new trading environment.
Players wanted for successful Football Club in South London
Westminster Wanderers are an established and successful Sunday League Football Club playing in and around Wandsworth and Merton. We are looking for new players for the 2017-18 season.
We were born out of the Conservative Central Office side of the 1990s but now have Labour, Liberal and Tory staffers on the side as well as parliamentary researchers, civil servants and PR and PA professionals.
We welcome new players and the growth of the club in a few years is because we are well organised and attract and retain good players.
We play in the Southern Sunday Football League. Our three league teams play to a high standard, train regularly and our home ground is on Tooting Common. We play friendly fixtures and train throughout the year in Battersea Park.
If you are a committed player who wants to be part of a successful club then please contact the Club Chairman Alex Aiken at westminsterwanderers@gmail.com.
The club will be running training sessions during July and August on Tuesday and Thursday nights and plays 8aside on Monday evenings. New players are welcome to come to any of these sessions.
POSTnote: Online Information and Fake News
Internet search engines and social media platforms are an increasingly popular way of accessing news and information. In 2017, the proportion of UK adults consuming news online exceeded those who watched news on TV (74% versus 69%). This note considers how people access news online, how algorithms (sequences of instructions) and social networks influence the content that users see, and options for mitigating any negative impact.
Reproduced from www.parliament.uk
The full list of elected committee chairs for the new Parliament has been announced by the Speaker, the Rt Hon John Bercow. All successful candidates are listed below. This includes 19 departmental select committees and a selection of other committees elected under Standing Order Number 122B. The chair of the Backbench Business Committee is elected separately, under Standing Order 122D.
The successful candidates are:
Business, Energy and Industrial Strategy (Labour) – Rachel Reeves
Communities and Local Government (Labour) – Clive Betts
Defence (Conservative) – Dr Julian Lewis
Education (Conservative) – Robert Halfon
Environment, Food and Rural Affairs (Conservative) – Neil Parish
Foreign Affairs (Conservative) – Tom Tugendhat
Northern Ireland Affairs (Conservative) – Dr Andrew Murrison
Science and Technology (Liberal Democrat) – Norman Lamb
Transport (Labour) – Lilian Greenwood
Treasury (Conservative) – Nicky Morgan
And, elected under Standing Order 122D:
Backbench Business Committee (Opposition party) – Ian Mearns
Committees where no election is necessary (for which a single nomination was received)
Departmental committees:
Culture, Media and Sport (Conservative) – Damian Collins
Exiting the EU (Labour) – Hilary Benn
Health (Conservative) – Dr Sarah Wollaston
Home Affairs (Labour) – Yvette Cooper
International Development (Labour) – Stephen Twigg
International Trade (Scottish National Party) – Angus Brendan MacNeil
Justice (Conservative) – Robert Neill
Scottish Affairs (Scottish National Party) – Pete Wishart
Welsh Affairs (Conservative) – David T C Davies
Women and Equalities (Conservative) – Mrs Maria Miller
Work and Pensions (Labour) – Frank Field
Other specified select committees:
Environmental Audit (Labour) – Mary Creagh
Petitions (Labour) – Helen Jones
Procedure (Conservative) – Mr Charles Walker
Public Accounts (Labour) – Meg Hillier
Public Administration and Constitutional Affairs (Conservative) – Mr Bernard Jenkin
Standards (Labour) – Sir Kevin Barron
The successful candidates will take up their position as Chair of the committee when the remaining members of the committee have been appointed by the House.
Further details for each position of Chair, including nominations and supporting statements, are available on individual committee pages.
Updated guide to the business of the House
The Clerk of the House has published an updated edition of this invaluable booklet that offers a short guide to the business of the House of Commons.
It is available as a PDF and can be downloaded here.
Download the 2017 Guide to House and its Committees
Further details on the Guides page
Posted on 4th July 2017
Do you have a Windows 7 machine?
Unfortunately, Windows 7 machines are still not able to log into the VPN, but you can still log into them as a 'local' machine. The IT folks are still working on getting these machines connected, and hopefully everything will be up and running next week.


text:
January 16, 2012 By ctucker Leave a Comment
"We can thank (Ronald Reagan) for our annual 'Hate Whitey Day.' " — 1990 Ron Paul newsletter on MLK holiday
It's tempting to simply forget Ron Paul's unfortunate history on racial issues, especially since he seems to be trying to forget it himself. He won't be the Republican nominee, and his years in Congress have done little to popularize his out-of-the mainstream views. The nation won't be returning to the gold standard any time soon.
So why bother to re-examine his resistance to a national holiday commemorating Martin Luther King Jr.? Why remind voters that he still opposes the 1964 Civil Rights Act? Why not turn the page on Paul, whose campaign will end soon enough as his prickly brand of libertarianism runs out of buyers?
Here's why: the rise of the Tea Party, with its virulent anti-government rhetoric, has reanimated a libertarian strain in the Republican Party. And Paul's consistent criticism of the so-called War on Drugs — along with his unabashed isolationism — has won the hearts of many independent-minded young voters, who see in him a tireless warrior who won't be cowed by establishment Washington.
I'll admit that I, too, have sometimes enjoyed watching him debating his rivals, especially when he forthrightly pointed out the hypocrisies of Rick Santorum and Newt Gingrich. And I was relieved to hear that his opposition to "big government" extends to such infringements on liberty as the Patriot Act.
But Paul's libertarianism, like Barry Goldwater's, has an ugly underbelly of racial insensitivity, if not outright bigotry. His young supporters need to know that they would live in a very different country — a meaner, less just and more racist country — if Paul had had his way.
The Texas congressman has tried to distance himself from a cache of incendiary for-profit newsletters from the 1980s and '90s that were published in his name, including "Ron Paul's Political Report" and "Ron Paul's Survival Report." When they re-surfaced in December as his campaign was gaining traction, he told CNN, "I didn't write them. I didn't read them at the time and I disavow them."
It's no surprise he'd say that. The newsletters are brimming with racism, anti-Semitism and the nutty paranoia that takes on the aura of Biblical truth among hardcore rightwing extremists and white supremacists. One newsletter from the 1990s, for example, warned of a "coming race war" and a "federal-homosexual cover-up" to play down the impact of AIDS. Others smeared Dr. King, mocked the late Barbara Jordan and praised former Ku Klux Klan leader David Duke.
For the sake of argument, let's accept Paul's claim of ignorance. What does his dereliction of duty say about his fitness for the highest office in the land? The commander-in-chief would be expected to know what's being done in his name.
Moreover, that incredible explanation won't save Paul from his record in Congress. He opposed a national holiday honoring King's life and legacy. More tellingly, he railed against the Civil Rights Act as recently as seven years ago.
On the 40th anniversary of the passage of that historic legislation — which struck down Jim Crow laws that kept black patrons out of restaurants, hotels and amusement parks — Paul was the only member of Congress to refuse to hail its passage. "The forced integration dictated by the Civil Rights Act of 1964 increased racial tensions while diminishing individual liberty…," he claimed.
That extreme brand of libertarianism is consistent in its refusal to allow government to interfere with an individual's decisions. But it offers no remedy for the millions of black Americans who could not take road trips because they couldn't find food or accommodations or even a place to go to the toilet. It shows no concern for the black children who wondered why they couldn't play at big amusement parks. It shows no empathy for the hardworking and patriotic black men and women who were refused service at gas stations — as my father was.
King's leadership of the civil rights movement made America not just a nobler and more just nation but also a stronger and more cohesive one. (Even Paul now calls King "one of my heroes.") It's hard to imagine the country that Paul's views would have willed to his young voters.
Would you want Ron Paul in charge of the FAA?

redpajama_set_name: RedPajamaCommonCrawl


Science is getting bigger. Just about every scientific discipline — astronomy, conservation, drug development, genetics, neuroscience, physics — is organizing massive collaborations of researchers in the name of reaching massive goals. These so-called Big Science efforts have big budgets, big lists of participating institutions, big press coverage, and big pronouncements. Big Science isn't new (the term was around in 1961, if not before), but it does seem to be getting more popular.
Take a project that readers of this blog are probably familiar with: the BRAIN (Brain Research through Advancing Innovative Neurotechnologies) Initiative, which the world first heard about in February when President Obama mentioned it in his State of the Union address. The projected budget of BRAIN is $3 billion over 10 years, which will be divvied out by three federal agencies and several nonprofits. The project made headlines in the New York Times, the Washington Post, and every other major news outlet. Its goal, according to Obama, was to "unlock the mystery of the three pounds of matter that sits between our ears." Could there be a larger project?


text:
It's all that we know, and it's all that we are. Which is why we've made it our business in every sense of the word. We design and manufacture premium cycling apparel. We create and run upscale cycling events. We have a restaurant and hotel that hosts visiting cyclists from all over the world. We manage a spring series of races. We operate and outfit a professional racing team. Cycling is embedded in everything we do, and every day we work even harder to improve the sport, to make it more accessible to others, and to build a stronger community for future cyclists.
Join us in our journey.
Rich and George Hincapie began cycling as young boys, and while George went on to pursue cycling as a career, Rich headed to business school while still competing as an elite-level amateur cyclist. In 2002, Rich founded Hincapie Sportswear, with South Carolina's Assaults on Mt. Mitchell and Marion as his first customer.
Hard work is threaded through the Hincapie DNA. Just like grit. And determination. Which is why Rich wasn't intimidated by the idea of opening a factory in Medellin, Colombia, only a year into running his business. He wasn't nervous because he knew he'd be working with his uncle Jorge, who not only had a background in textile manufacturing, but who also had the same unfailing work ethic that ran through Rich's veins.
George Hincapie
One of the most well-known names in the cycling industry, George Hincapie defined the term domestique, making a name for himself by serving his teammates and putting their needs above his own.
What Makes Us Hincapie
Factory & Technology
Some call it micro-managing; we call it quality control. Every stitch, every pocket, every zipper, every inch of your kit is produced within our own factory, run by George and Rich's uncle and aunt.
Our area experts, our cheerleaders, the real people who wear the apparel: Hincapie Ambassadors share our love for design and our appreciation for quality.
When placing an order with us, our team quickly becomes your team. Meet the people behind the phone calls, the social media posts, and the events.
Want to try on some apparel? Or just want to catch a sneak peek of George when he's not riding? Either way, you're welcome to come visit us. We won't judge if you pull out your phone for a "last minute" selfie.


Went to the kitchen sink this morning, tipped the water out of the washing up bowl and accidentally killed a massive spider that had taken up residence.
Checked again, definitely dead, or at least mostly dead on account of being drowned.
Freaked out some more. Texted husband to tell him I'm not doing any washing up today on account on the massive dead spider of accidentally murdered.
Update Facebook, because that's what you do in a spider related crisis.
Get told by friend that spider should just go down the plug hole if flushed with lots of water.
Don't see how… Spider much to big for plug hole.
Get teased by father in law about turning dead spider into curry.
Spray a load of bleach around the sink. Flush with more hot water.
Gingerly lift up washing up bowl.
It was too big to go down the plug, so where the hell has it gone?
It's obviously crawled out of the sink, horrendously disfigured and disabled now, covered in burns, and calling to it's mates to come back for revenge.
I'm going to be attacked by spiders now.
I'm going to die aren't I.
They're all sat plotting against me.
For the second evening in a row I find myself glued to the television news channels, unable to tear myself aware from the horror unfolding across the UK.
It started out in London, moved to Birmingham, then Bristol and Liverpool and now Nottingham and Manchester.
Riots everywhere. Fires burning, hot and fierce. Alarms blaring out. Homes and Businesses lost.
Already 1 person has lost his life, a 26 year old man, shot during the riots in Croydon. He lost his battle to live this morning. He was 26, a year younger than me. It's heart breaking.
The news seems to be mainly concentrating on Birmingham and Manchester. The riots across London seem to be calming down (knock on wood).
There have been 111 police officers and 5 police dogs injured. Over 500 arrested. Custody suites throughout London are full to the seams, practically bursting. Sky News are reporting that one of the rioters and looters arrested was just 11 years old.
What is the world coming to when the police are arresting 11 year olds for public disorder? Where are their parents?
This is a horrific time for the UK. My heart goes out to those affected and my deepest and sincerest thanks goes out to our emergency services for their continued hard work during this difficult and trying time.
Last night I sat glued to my television, flicking from news channel to news channel, horrified.
I stayed up way later than I should of, watching horror after horror unfold.
I listened and watched the reports as it got closer and closer to my home, not frightened, not yet.
I woke this morning, showered, dressed and grabbed breakfast, glued, yet again, to the news reports. The horror continued into the night.
My city is literally burning to the ground and it's heart breaking. Thousands have lost their homes, businesses, jobs, cars, and lives in a matter of days, adding to what is already a difficult time across the country.
What started off as a peaceful process to complain about the death of Mark Duggan has turned into an absolute slaughter-fest across London. The stories surrounding his death are not crystal clear and the IPCC are investigating, but I suspect it will be a while before we find out the entire story.
His death is being used as an excuse to destroy our city and economy. An excuse for yobs to terrify the Capital City. An excuse to steal what they can't afford. An excuse to create mayhem.
The police are working flat out to bring control to the streets.
The fire service is working flat out to bring fires across the city under control.
The London Ambulance service and hospitals are rushed off their feet, helping those injured, suffering smoke inhalation and most likely panic and anxiety attacks, not to mention regular emergencies.
Looting and Rioting has spread to Birmingham, Bristol, and other cities.
My heart breaks for London and it's people. My heart breaks for those who have lost everything.
Anger wells up inside of me, these people are creating absolute chaos and a part of me wants to grab the nearest shotgun and start taking people out.
I'm wondering when this will end. When will London be controlled again. How much damage has been done and how long it will take for people to recover, for London to recover.
It's a sad week for London. A sad week for the UK.
Watching the news I am saddened by the turmoil in London. I have so many words, and at the same time, no words at all.
The number of people who's livelihoods have been destroyed, property that has been destroyed, homes destroyed, costing millions of pounds.
People are using the shooting of Mark Duggan as an excuse to cause trouble, make crime and steal, and they should be ashamed of themselves.
Tottenham, Peckham, Hackney, Lewisham (less than 2 miles from my parents), Catford, Croydon, all across London there are scenes of burning buildings and cars and riot police. It's moved on to Birmingham and rumoured to be kicking off in Leeds.
The emergency services are stretched far and thin. It's time to call the Armed Forces in.
London is a war zone and it breaks my heart.
Massive massive thanks to ALL of the emergency services for their hard work over the last 3 days.


text:
Pre-Need
Robert Allen Patterson - 93
Robert Allen Patterson, age 93. Longtime Olympia Fields resident, born and raised in Chicago's Morgan Park neighborhood. A noted Creative & Art Director in Chicago's advertising circles, he worked many years at McCann-Erickson, and Marcoa Direct advertising firms. He served on Morgan Park High Schools Alumni Association for many years and was a proud member of Sigma Chi Fraternity when he attended the University of Colorado. He honorably served with the U.S. Army Air Corps during WWII. Husband of 62 years to the late Dolores "Ronnie" nee Rodenkirch. Father of Mark (Cheryl) Patterson MD, Victoria (late Daniel DDS) Dieska, Randall (Donna), Robert (Beth) and Todd (Lisa) Patterson DO. "Grandad"of Christopher DDM, and Charles (Kaycie) Patterson, Cpt. Matthew USMC, Dana and Chad Dieska, Julie (Tim) McDonnell, Jaclyn (Thomas) Walsh MD, Tyler (Kristin), Jacob, Joshua, Brett, and Ryan Patterson. Great "Grandad" of Jack McDonnell. Beloved son of the late Evelyn nee Eskildsen and Dever Patterson. Uncle and dear friend of many. An accomplished artist, he also enjoyed the challenges of golf, the guitar and other string instruments. Resting at Panozzo Bros. Funeral Home, 530 W. 14th St. (US Rt. 30, 3 blks E. of Western Ave.) Chicago Heights on Wednesday Sept. 19th from 3:00 PM to 8:00 PM. Funeral services Thursday morning 11:00 AM. Future inurnment at Holy Sepulchre Cemetery, (708) 481-9230 or panozzobros.com
View Robert Allen Patterson's Guestbook
Ronald G. Schultz, 73
Ilda N Scott-Yaseen, 80
Katherine Odenwald, 83
Lynwood, Illinois
Mary Louise Masco, 91
Loda, IL
Miriam J. DiMascio, 85
Maureen R. Dombro, 77
Matilda "Tillie" Maestro, 83
Providing Distinctive Funeral Service...
Panozzo Bros. Funeral Home
530 W. 14th Street (Rt. 30)
Chicago Heights, Illinois 60411
panozzo@panozzobros.com
© Copyright 2019 Panozzo Bros. Funeral Home.


text:
Prince Harry and Meghan Markle's New Baby's Name
Prince Harry and Meghan Markle's New Baby's Name is a Tribute to Queen Elizabeth and Princess Diana
Lilibet "Lili" Diana Mountbatten-Windsor's name is an homage to both Prince Harry's mother and grandmother.
By Lauren Hubbard Published: Jun 6, 2021
Chris Jackson//Getty Images
Earlier today, Prince Harry and Meghan Markle announced the happy news that their new baby, a daughter, had arrived. According to a release from the Sussexes, the baby was born on Friday morning at Santa Barbara Cottage Hospital in California. Along with the news of the birth, the royal couple also shared the name of their much-anticipated second child, and it turns out to have a very special family connection. The Sussexes have named their first daughter Lilibet "Lili" Diana Mountbatten-Windsor, paying homage to not one, but two of her iconic female relatives.
"Lili is named after her great-grandmother, Her Majesty The Queen, whose family nickname is Lilibet. Her middle name, Diana, was chosen to honor her beloved late grandmother, The Princess of Wales," the couple explained in the birth announcement. They also added, "The Duke and Duchess thank you for your warm wishes and prayers as they enjoy this special time as a family."
While Harry and Meghan chose to take a step back from life as working royals last year, maintaining a connection to Harry's family has clearly remained important to them, especially to Harry's late mother Princess Diana. From the very beginning of their marriage, the Sussexes have paid tribute to Diana, who tragically died in 1997, including homages to her in their wedding, and even in Meghan's engagement ring. On numerous occasions in recent months, the Sussexes have likewise invoked the late Princess of Wales, telling Oprah in their primetime interview earlier this year that they "felt her presence throughout this whole process," and that, "ultimately, all she'd ever want is for us to be happy." Prince Harry later revealed that one of their son Archie's first words was "grandma" in reference to Diana.
Lauren Hubbard
Lauren Hubbard is a freelance writer and Town & Country contributor who covers beauty, shopping, entertainment, travel, home decor, wine, and cocktails.


This organic wholemeal flour is produced by stone milling the whole wheat grain (stoneground) with no bleaching or refinement. It is medium-brown in colour and gives a hearty flavour and robust texture.
Enjoy as an ingredient for all baked goods.


text:
Q: Python 3.5 csv parsing with special characters I have a file that I'd like to parse into a csv.  The file is an export file, and arrives to me in the following format (line by line, each file containing thousands of lines):
03:30:30  08:30:30 [15 August 2015] productid:123456789 manuf:987654321 case:12 pallet:1234 id:12 code:1234  12345  123  12

I'd like to get the data into a csv file as follows:
local time, GMT time, date, product id, manuf id, case, pallet, id, code, company id, location, secondary code
03:30:30, 08:30:30, 15 August 2015, 123456789, 987654321, 12, 1234, 12, 1234, 12345, 123, 12

I've successfully done this, but using the wrong tools I believe.  I've been using lines like below:
import fileinput
for line in fileinput.FileInput("file",inplace=1):
    line = line.replace(":",",")

import fileinput
for line in fileinput.FileInput("file",inplace=1):
    line = line.replace("case"," ")

which gives me something like..
l h, l min, ls, gmt h, gmt m, gmt s, date, product id, manuf id, case, pallet, id, code, company id, location, secondary code
03,30,30,08,30,30,15 August 2015, 123456789, 987654321, 12, 1234, 12, 1234, 12345, 123, 12

The problems are: I have to use successive lines to parse each character and word into csv (descriptor words, colons, brackets, etc..) and it takes a long time over a large data-set.  Also I'm saving it all to a secondary file instead of writing in place.  By replacing the colons with commas, my times get broken down into separate columns.  I've spent a few days playing with different options and arrived at regex, but as a complete newb to python have yet to come up with a solution.  It may be simpler to rebuild the times from comma separated blocks into the correct format, but I'm at a loss. Please assist.  Thanks in advance.
Edit:
I've tried to implement Sparkeandshine as well as Julian's versions of a workable solution.  I came closest to getting Sparkeandshie's version to work, but am only able to iterate one line; the one actually in the solution, not the entire file.  I spent the last 24 trying different iterations of both solutions, to no avail.  Here is where I am:
#!/usr/bin/env python

import csv
import os

inputFileName = 'test.txt'
outputFileName = 'finished.csv'

with open(inputFileName, newline='') as inFile, open(outputFileName,    'w', newline='') as outfile:
    r = csv.reader(inFile)
    w = csv.writer(outfile)

    line = '03:30:30 08:30:30 [15 August 2015] productid:123456789 manuf:987654321 case:12 pallet:1234 id:12 code:1234 12345 123 12'
str_list = line.split()

new_list = [str_list[0],
        str_list[1],
        ' '.join([item.strip('[]') for item in str_list[2:5]]), # '[15', 'August', '2015]'
        str_list[6].split(':')[1],
        str_list[7].split(':')[1],
        str_list[8].split(':')[1],
        str_list[9].split(':')[1],
        str_list[10].split(':')[1],
        str_list[12],
        str_list[13]
        ]

with open(inputFileName, newline='') as inFile, open(outputFileName, 'w', newline='') as outfile:
    r = csv.reader(inFile)
    w = csv.writer(outfile)

    for row in r:
        w.writerow(new_list)

Edit: Sparkandshines below solution works great for set lines, but I have found that some of my data has lines of varying lengths.  For example, sometimes a few lines will be short a few "columns" of data, or the last three columns may repeat twice.  To get around this problem I have been using "try" and "except error, continue" for the possible lengths.  With this method I get duplicate lines in my final file; is there a better way to use Sparkandshine's solution with lines of varying length? ...or is it easier to just find duplicate lines (by checking / comparing two/three columns) and removing them?

A: Process each line using,
line = '03:30:30 08:30:30 [15 August 2015] productid:123456789 manuf:987654321 case:12 pallet:1234 id:12 code:1234 12345 123 12'
str_list = line.split()

new_list = [str_list[0],
            str_list[1],
            ' '.join([item.strip('[]') for item in str_list[2:5]]), # '[15', 'August', '2015]'
            str_list[6].split(':')[1],
            str_list[7].split(':')[1],
            str_list[8].split(':')[1],
            str_list[9].split(':')[1],
            str_list[10].split(':')[1],
            str_list[12],
            str_list[13]
            ]

print(new_list)
# Output
['03:30:30', '08:30:30', '15 August 2015', '987654321', '12', '1234', '12', '1234', '123', '12']

Write to a csv file with,
with open(filename, 'w') as f:
    writer = csv.writer(f)

    # write the file header
    fieldnames = ['local time', 'GMT time', 'date', 'product id', 'manuf id',
            'case', 'pallet', 'id', 'code', 'company id', 'location', 'secondary code']
    writer.writerow(fieldnames)

    # process each line
    for line in lines:
        new_list = do_something()

        writer.writerow(new_list) # write to the file

Or process all lines and save the results to a list of lists, then wirte to a csv file with writerows,
writer.writerows(lists)

The full source code,
#!/usr/bin/env python
import csv

inputFileName = 'test.txt'
outputFileName = 'finished.csv'

with open(outputFileName, 'w') as outfile:
    w = csv.writer(outfile)

    # write the file header
    fieldnames = ['local time', 'GMT time', 'date', 'product id', 'manuf id',
            'case', 'pallet', 'id', 'code', 'company id', 'location', 'secondary code']
    writer.writerow(fieldnames)

    # process each line
    with open(inputFileName, 'r') as inFile:
        for line in inFile:
            str_list = line.rstrip().split()
            new_list = [str_list[0],
                        str_list[1],
                        ' '.join([item.strip('[]') for item in str_list[2:5]]), # '[15', 'August', '2015]'
                        str_list[6].split(':')[1],
                        str_list[7].split(':')[1],
                        str_list[8].split(':')[1],
                        str_list[9].split(':')[1],
                        str_list[10].split(':')[1],
                        str_list[12],
                        str_list[13]]

            w.writerow(new_list) # write to the file

A: If you have a known structure of your input files, you don't need to use regular expressions, as they are slower. For your case, try using something similar to the code below:
import csv
with open('destination.csv', 'w', newline='') as csvfile:
    csv_writer = csv.writer(csvfile, delimiter=',')
    ...  # get your data here, the next code is for one line of data
    values = line.split()
    values[2] = '{} {} {}'.format(values[2][1:], values[3], values[4][:-1])  # Get rid of square brackets
    for idx in range(5, 11):
        values[idx] = values[idx].split(':')[1]  # get the number values
    values.pop(3);  # remove separated month name
    values.pop(3);  # remove separated year

    csv_writer.writerow(values)

You are editing only the data that requires it and then write the whole row to the csv.

redpajama_set_name: RedPajamaStackExchange


This week's video is covering a relatively new feature of the editor: cell mode. Specifically, I am demonstrating the publication of reports from your code. If you ever need to create documents that have many MATLAB figures and code and would like to be able to update those documents easily, then this four minute video is for you.


text:
Home News Shows Shop Patreon Contact
ATLITS 10th Anniversary Tour - Bristol
The Thekla, Bristol
Thu, Feb 16, 2023 7:00 PM
Entry Requirements: 14+ (U16 w/ Adult)
General Admission (e-ticket)
$21.61 + $2.16 s/c
London 17/02/23
By signing up you agree to receive news and offers from Area 11. You can unsubscribe at any time. For more details see the privacy policy.


Edge'. According to Al Mezan's initial investigations, 141 (i.e.
another 6,500 found shelter with families or friends.
civilian objects and military objectives.
law may result in the commission of war crimes.
methods of attack with a view of avoiding and minimizing civilian casualties.
injured from a similar attack.


The 4K/UHD podcast is back again with so much good stuff.
Here are just some of the topics covered in the the October 10th, 2016 edition.
* The anatomy of "How it's REALLY Made" videos are REALLY made. There's so much that goes into these things than you might have ever thought.
* A 4K/UHD review of Westworld on HBO and why you really must check it out… and I swear to god, if this gets taken down for being a review I'll burn every review I've done in the past to the ground, you copyright usury bastards!


From the thousand pictures on the web concerning 3D Orangutan Tattoo, we all picks the top libraries with greatest image resolution just for you, and now this pictures is actually one of graphics libraries in our very best graphics gallery concerning Best tattoo style concepts 3D Orangutan Tattoo for men and women from traditional black and grey style to full color gallery. I hope you might as it.
This specific photograph (Jungle Sleeve Ian Ian Ink Tattoo Wwwianinktattootumblr with regard to 3D Orangutan Tattoo) over is usually branded with:placed by simply tattoos in December, 25 2016. To discover all graphics with Best tattoo style concepts 3D Orangutan Tattoo for men and women from traditional black and grey style to full color gallery graphics gallery please stick to this kind of link.
Jungle Sleeve Ian Ian Ink Tattoo Wwwianinktattootumblr With Regard To 3D Orangutan Tattoo Uploaded by on Thursday, December 15th, 2016 in category Animal Tattoos.
See also 1000 Images About Tattoos On Pinterest African Tattoo Amazing Inside Best Tattoo Style Concepts 3D Orangutan Tattoo For Men And Women From Traditional Black And Grey Style To Full Color Gallery from Animal Tattoos Topic.
Here we have another image 45 Awesome Animal Tattoos Ideas Wild Animal Tattoo Designs Throughout Best Tattoo Style Concepts 3D Orangutan Tattoo For Men And Women From Traditional Black And Grey Style To Full Color Gallery featured under Jungle Sleeve Ian Ian Ink Tattoo Wwwianinktattootumblr With Regard To 3D Orangutan Tattoo. We hope you enjoyed it and if you want to download the pictures in high quality, simply right click the image and choose "Save As". Thanks for reading Jungle Sleeve Ian Ian Ink Tattoo Wwwianinktattootumblr With Regard To 3D Orangutan Tattoo.


Jerusalem-born Levy created a lot of interest when she appeared at the 2007 Taranaki Womad for her swooning style of Ladino music which comes out of the Spanish/Jewish tradition. What she also brings is a contemporary Middle Eastern feel by the introduction of oud alongside her hypnotic singing style, flamenco influences and western instrumentation.
This new album is a leap ahead from her previous outing La Juderia and the various styles sound more integrated and the Ladino style draws from Turkish influences. Remarkable music.


Looking at replacing your car? Thinking about giving leasing a go? Obviously we're going to say it's a good idea, but we're here to prove it, with five reasons why leasing could be the best way of getting you behind the wheel of your next car.
iPad Minis have arrived in the ContractHireAndLeasing.com office!


Well, I'll put the disclaimer out right now - this is not an advertisement, nor a paid sponsorship. It's just me sharing my thoughts about a company whose products not only surprised me, but also impressed me.
Let me start out by saying not all concealers are created equal. There are so many types and I've tried many. Although there are several that I do like, Glossier's Stretch Concealer is my favorite so far. I use my ring finger to apply it under my eyes using a patting motion. It requires minimal product to provide full coverage for the dark circles.
Why do we wear blush? Well for starters, it brightens your face. I am guilty of never wearing blush until I tried Glossier's Cloud Paint. It's a noticeable difference once you've applied it. Cloud Paint is so easy to use - just squeeze a small amount on your finger, then pat right below your cheekbones up towards your temple and hairline. I love that it's so easy to apply and takes just minutes.
I never understood what highlighter was used for until I was introduced to Glossier's Haloscope. It's actually a dual stick that provides this "dewy" glow while highlighting your features creating an elongated look. I pass one swipe on both cheekbones towards my temple and blend it in with my fingers overlapping a little with the cloud paint. So easy.
This product was by far my most surprising one yet. Glossier's Solution literally transforms your skin. Their description says about 4 four weeks, I noticed a difference in 4 days. There are many high dollar procedures where your skin's top surface is scraped off with days, sometimes weeks of recovery time, but the Solution gently removes dead skin cells revealing healthier skin that's hiding beneath.
For me, I was really surprised when after just washing my face with cleanser the cotton pad was covered. At first I wondered if my skin did not get clean enough with the cleanser, tried again with another cleanser still getting the same result. Repeating the Solution made me realize it was actually the dead skin cells being removed.
Within days, I noticed the pores on my nose had decreased in size, and my skin seemed smoother allowing my moisturizer and makeup to go on smoother with a more natural look.
If you have followed my posts, you know I have gone most of my life without wearing sunscreen. I know that's horrible for my skin - I just never liked the heavy, greasy feeling of wearing it not to mention the ghost like film on my skin making me look like I haven't seen daylight in decades.
Fun (or not so fun) Fact: It take 30 (that's right 30) years for sun damage to appear on your skin. So the damage you did on your skin when you were 16, will show up in your mid forties. I don't know about you, but that scares me.
Well, Glossier who has built their products around female feedback, created an Invisible Shield daily sunscreen that even yours truly uses. It is a "clear watergel" formula that virtually absorbs into your skin immediately without any white residue or greasiness. Its SPF 35 helps reduce sun damage which in-turn reduces the risk of cancer and also "works to neutralize harmful free radicals, and keeps pollutant junk" out of your skin.
This is the first time I have ever consistently worn sunscreen on my skin - that says a lot from this anti-sunscreen girl.
Glossier has other products which I like; however, these five in particular are my favorites.
Let me know which product of theirs is your favorite or if you have a different way of applying yours.


Introducing Neal's Yard Remedies, the Ethical Organic Skin Care.
Why 'Ethical'? Read on to find out!
Founded in the UK in 1981, it has established quite a reputation overseas but is still relatively quite new here. The company is against synthetic chemicals, genetically modified ingredients and animal testing. It advocates safe cosmetics, usage of recyclable and biodegradable materials as well as organic farming.
The products DO NOT contain parabens, synthetic fragrances, GMO ingredients, silicones, phthalates, nano, mineral oils, EDTA, propylene glycol, carbomer, DEA, acrylates and BHT.
What's up with all the blue bottles?
They're made from Scottish sand, Yorkshire limestone and soda ash from Cheshire and are 100% recyclable. NYR has a CarbonNeutral status too which means they offset their carbon emissions.
Enough with the intro, let's move on to the products! Each range is targeted for different skin types so you get what's best for YOUR skin. There are also body products and hair care, all with different scents x_X They use essential oils instead of parfum to give users a natural aromatherapy experience. You can view the award winning products HERE.
Especially like these Bee Lovely products because they smell just like honey!
Baby safe products available too!
Hand pampering session! Kelly taught me that I should exfoliate more on my elbows as the skin is rougher there.
The Seaweed Salt Scrub is a must try.
Was also treated to a mini facial session using 8 NYR products. If you're interested in the product but not sure if it'll suit you, you can drop by the outlet any time and try it on before purchasing.
The difference is not major in photos but the brightening effect was quite evident IRL, especially after the facial polish and mask. Skin appears to be smoother, more even toned, brighter and glowing.
Went there totally bare faced, even without lip balm so urghhh.. chapped lips! Applied this Shea Nut & Rosehip Organic Lip Formula (lip balm) and Rejuvenating Frankincense Eye & Lip Serum. My lips were immediately soothed and not so dry.
Huge 1 litre bottle! Bigger bottles are always more environmentally friendly and better especially for products that we use so often.
P.S. There's also a giveaway going on at their FB page!
i love their products too!!


text:
Q: ios/xcode/core-data: Syntax for simple NSFetch request from entity I am trying to fetch an attribute from an entity in core data using the following.  There are no errors but I am getting null as a result, at least from the log results.  Can anyone tell me what I am doing wrong?  Thank you.
- (id) getItems{
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Items"];
    fetchRequest.resultType = NSDictionaryResultType;

    NSError *error      = nil;
    NSArray *results    = [self.managedObjectContext executeFetchRequest:fetchRequest
                                                                   error:&error];
    NSLog(@"beforevalueforkey%@",results);
    NSMutableArray * items = [[results valueForKey:@"item"] mutableCopy];
    return items;
}
- (void)viewDidLoad {
    [super viewDidLoad];
NSArray *items= [self getItems];
    NSLog(@"Here is content of array:%@",items);
}

It prints out Here is content of array (null)


Most of us think it would be great to never work again, but for retired seniors boredom can set in quickly. Keep your senior loved one healthy and active by encouraging participation in the local 65+ community. Scottsdale is full of activities and services for seniors looking to get out and about and fill their days with fun. Scottsdale Home Care Assistance put together this brief list of the best activities and services available to local seniors.
– Bridge. If your senior loved one is a bridge player, both the Granite Reef and Via Linda Senior Centers have multiple, ABL sanctioned games ongoing throughout the week in addition to social bridge games. Fees apply for sanctioned bridge games.
– Billiards and Table Tennis. Both of the local Scottsdale senior centers have billiards rooms offering tournament quality equipment and tables. Drop-in billiards is free and open to the public. Table tennis times are schedule, but free and available to all levels of play.
– Senior Softball. Batter up! Senior softball is in full swing. Batting practice and games are held on Tuesday and Friday mornings at various fields throughout Scottsdale. Drop-in senior softball is free, and play is subject to field availability.
Both Scottsdale Senior Centers offer a wide variety art classes and workshops. Free art education programs are also offered through Scottsdale Public Art, Phoenix Art Museum, and Scottsdale Museum of Contemporary Art. Seniors are also encouraged to attend social art events like art fairs and gallery shows.
Both senior centers provide walk-in weekly blood pressure screenings, and The Granite Reef Senior Center has partnered with Concerned Citizens for Community Health to provide canes, walkers, wheel chairs, and other various medical equipment for a small monthly rental fee. Seniors can also participate in the MATTER of BALANCE program designed to increase fitness and strength, improve balance, and decrease fear factors.
Having a senior loved one who enjoys keeping a full calendar can be tough on your personal to-do list. Find hourly or 24 hour live-in care in Scottsdale for your senior loved one and make sure he or she is as active and social as they want to be. To learn about services available in your area, call Scottsdale Home Care Assistance at (480) 448-6215 to speak with a Care Manager. Our caregivers are put through an extensive background check, are bonded and insured for your safety, and receive ongoing training on the best care practices.


Delray Beach is a city that is located right along Florida's Coast. The population is over 60 000 residents which is a significant growth from the earlier years when the area was inhabited by Native Americans. Settlement in the area begun around 1884 when African Americans when they bought an area of land. By 1894, the African American population grew so much so that they were able to establish a school in the area. The area has grown since these earlier times and has turned into a budding modern day city that is full of luxury homes and adored by local resident and tourists who visit annually to bask in the warm sunshine.
The land boom in the 1920s saw a renewed growth and interest in the area and more development begun. Find properties that come with views of golf courses or with sweeping views of the Atlantic oceans in Delray Beach. The luxury homes in Delray Beach incorporate Mediterranean designs with fantastic resort styled designs that you will love. Take in the beauty of the Palm trees that lines the area and enjoying living or vacationing in an area that has remained lush even amidst all the modern day developments.
Contact us at BHHS Florida Realty to get more details on the process of buying real estate in Delray Beach. We will be able to provide important insights about the real estate market so that you are able to make the best decision when you are ready to make your purchase. Let us help you to make the best investment of your life.


To my guardian Angel Penni.
How the oils, sprays and oils have changed myself, my kids and my life.
17 January 2013 I used the: Red oil of transformation and Angel of Illumination spray.
I have had growths in my abdomen that have had cancer cells.
My attitude and myself emotionally was in a very bad way, the pain l had every day.
In a matter of 2 weeks the pain was easier and my attitude towards my health was improving.
In the relationship, we tolerated each other a lot better.
My children have not being in a good space. My youngest son who is 6 years old started grade 1- it was a huge change for him as he was going to a new school and his older brother was going to high school. He was so bad that he would run after the car and would scream for me, the teachers would hold him till I could leave the school. It was the hardest time for him and the fear that he had was so bad he would not want to go to bed.
On the 27 February l was given the gift of the following products: Green oil of Transformation, a yellow oil, archangel Raphael Oil, the Angelic wings of Love spray and the Blue oil of Transformation.
I started using the archangel Raphael to help with the healing and abundance issues. l have been very low with my life and financial burden has being so bad, the strain on my partner and myself has not been great as we cannot even talk to each other. l wanted a new life.
The pink spray l used every day morning and night, the green l used on my heart, the yellow on my tummy, things between my partner and I changed and we actually talk, amongst other things.
My youngest son started using the yellow for his fear and in 3 days he stopped running after me, a week later he allowed me to leave him and walk away, 2 weeks later he allows me to leave him without a teacher being there. What is really interesting is that he started rubbing the Archangel Raphael oil on his right wrist, and 3 days later l fell and broke my right hand very badly.
I still have to look for my Archangel oil all the time, he still keeps it with him and some nights it is under his pillow.
The blue has helped me with the pain and Archangel Raphael has answered all that l wanted.
For the greatest news, l have been asking for my life to improve financially as well as a better life for my kids.
My partner has been offered a job in Zambia with a huge salary, plus they will pay my salary for me stay home, pay for a house, electricity, and private schooling for my kids and l get to choose what l want to do.
My thoughts have gone to how much fun l will have and how l have to start doing the colour treatments , so Penni know that you will be by us soon, to do lots of courses and l will be re-doing mine so l can do treatments that side.
The oils have changed my life, my kids and partner 360 degrees in less than 2 months.
The biggest surprise is the fact that my partner and l are not married, and with all these changes we may have to get married, which is a huge thing for him and me.
I just want to say thank you from the bottom of my heart.
Thank you to the angels for the support and their help, even with the huge surprises, and most of all thank you to you Penni for the amazing oils, sprays and archangels, thank you, thank you, thank you.


Are your windows broken? Are you looking for cheap double glazed windows in West Midlands to replace your old windows that are no longer working for you? Our warehouse hosts a collection of cheap double glazing windows in West Midlands that come with the quality trademark of Double Glazing West Midlands.
We have trusted partners who make durable window parts. In addition to being strong and reliable, our window parts are affordable.
Because we use quality material there are savings not only on energy but also on your hard-earned money. Additionally being a one-stop shop for quality window designs and materials, we are: A cheap double glazing solution that provides extra attention to your requirements. This gives us the motivation to work within your budget and according to the schedule you have.
Great value quality service Swift response time to your requestWe have spent decades in the business developing our craft and providing homes with functional windows, which is why we are able to make our prices highly competitive.
We have spent decades in the business developing our craft and providing homes with functional windows, which is why we are able to make our prices highly competitive. Double Glazing West Midlands's high quality and inexpensive window parts have greatly improved the lives of people in West Midlands. Scaling has also made our prices more competitive and we've achieved this through effective use of technology.
You save money on durable quality window parts as well as cost effective prices when you contract us to supply and service broken or install new windows for you. We focus on upgrading the quality and tailoring our services to meet the needs of individuals so that we can produce pocket-friendly solutions for specific customers.
Not only are Double Glazing West Midlands's window fixtures appropriate for a variety of windows, they are also affordable. Be it Box and Bay windows, vertical sliding casement windows or Sash windows, there is always something available.
Having technologically relevant tools at our disposal, we are able to take care of the customer with ease. You're eligible to full insurance package cover for all projects in the event of unexpected encounter during work in progress.
Our technical experts use precision equipment to trim and shape window parts to make them conform and fit existing measurements.
At Double Glazing West Midlands we don't think cost should be an issue when choosing the best quality and we always make good on our promises, because we believe that having affordable window hardware without sacrificing value is the way forward. In ancient times, pre-air-conditioning, awning windows worked well inside homes and added a beautiful look to the house.
We safeguard client's investment during work in progress on property. We give priority to our clients at Double Glazing West Midlands and maintain excellent relationships for future projects.
If you want windows that are durable then you are better off with us.
We can even offer affordable awning double glazing, which can be difficult to find. Call us today for a free quote on 0800 246 5793.
For more details on the cheap double glazing window in West Midlands contact us on 0800 246 5793 at Double Glazing West Midlands. This company has established its credibility as a leading supplier of double glazed windows and parts over the decades.
We have established a credible reputation within this area which we are proud to talk about. If you would like to get in touch and speak with one of our team for a free estimate, call 0800 246 5793 today.
Double Glazing West Midlands fitted beautiful double glazed windows and doors throughout my West Midlands home. Thankyou Double Glazing West Midlands for your professionalism.
Double Glazing West Midlands are a wonderful West Midlands based double glazing company that replaced my old windows. Thumbs up to Double Glazing West Midlands.
Contact Double Glazing West Midlands Today for uPVC Windows in West Midlands.


text:
var inherit = require('./inherit');
var object = require('./object');
var util = require('./util');
var mat3 = require('gl-mat3');
var vec3 = require('gl-vec3');
var mat4 = require('gl-mat4');
var vec4 = require('gl-vec4');

/**
 * This class defines the raw interface for a camera.  At a low level, the
 * camera provides a methods for converting between a map's coordinate system
 * to display pixel coordinates.
 *
 * For the moment, all camera transforms are assumed to be expressible as
 * 4x4 matrices.  More general cameras may follow that break this assumption.
 *
 * The interface for the camera is relatively stable for "map-like" views,
 * e.g. when the camera is pointing in the direction [0, 0, -1], and placed
 * above the z=0 plane.  More general view changes and events have not yet
 * been defined.
 *
 * The camera emits the following events when the view changes:
 *
 *   * {@link geo.event.camera.pan} when the camera is translated in the
 *       x/y plane
 *   * {@link geo.event.camera.zoom} when the camera is changed in a way
 *       that modifies the current zoom level
 *   * {@link geo.event.camera.view} when the visible bounds change for
 *       any reason
 *   * {@link geo.event.camera.projection} when the projection type changes
 *   * {@link geo.event.camera.viewport} when the viewport changes
 *
 * By convention, protected methods do not update the internal matrix state,
 * public methods do.  There are a few primary methods that are intended to
 * be used by external classes to mutate the internal state:
 *
 *   * bounds: Set the visible bounds (for initialization and zooming)
 *   * pan: Translate the camera in x/y by an offset (for panning)
 *   * viewFromCenterSizeRotation: set the camera view based on a center
 *        point, boundary size, and rotation angle.
 *
 * @class
 * @alias geo.camera
 * @extends geo.object
 * @param {object?} spec Options argument
 * @param {string} spec.projection One of the supported
 *    {@link geo.camera.projection}.
 * @param {object} spec.viewport The initial camera viewport
 * @param {object} spec.viewport.width
 * @param {object} spec.viewport.height
 * @returns {geo.camera}
 */
var camera = function (spec) {
  if (!(this instanceof camera)) {
    return new camera(spec);
  }

  var geo_event = require('./event');

  spec = spec || {};
  object.call(this, spec);

  /**
   * The view matrix
   * @protected
   */
  this._view = util.mat4AsArray();

  /**
   * The projection matrix
   * @protected
   */
  this._proj = util.mat4AsArray();

  /**
   * The projection type (one of `this.constructor.projection`)
   * @protected
   */
  this._projection = null;

  /**
   * The transform matrix (view * proj)
   * @protected
   */
  this._transform = util.mat4AsArray();

  /**
   * The inverse transform matrix (view * proj)^-1
   * @protected
   */
  this._inverse = util.mat4AsArray();

  /**
   * Cached bounds object recomputed on demand.
   * @protected
   */
  this._bounds = null;

  /**
   * Cached "display" matrix recomputed on demand.
   * @see {@link geo.camera.display}
   * @protected
   */
  this._display = null;

  /**
   * Cached "world" matrix recomputed on demand.
   * @see {@link geo.camera.world}
   * @protected
   */
  this._world = null;

  /**
   * The viewport parameters size and offset.
   * @property {number} height Viewport height in pixels
   * @property {number} width Viewport width in pixels
   * @protected
   */
  this._viewport = {width: 1, height: 1};

  /**
   * Set up the projection matrix for the current projection type.
   * @protected
   */
  this._createProj = function () {
    var func = this._projection === 'perspective' ? mat4.frustum : mat4.ortho,
        clipbounds = this._clipbounds[this._projection];
    func(this._proj, clipbounds.left, clipbounds.right, clipbounds.bottom,
         clipbounds.top, clipbounds.near, clipbounds.far);
  };

  /**
   * Update the internal state of the camera on change to camera
   * parameters.
   * @protected
   * @fires geo.event.camera.view
   */
  this._update = function () {
    this._bounds = null;
    this._display = null;
    this._world = null;
    this._transform = mat4.multiply(util.mat4AsArray(), this._proj, this._view);
    mat4.invert(this._inverse, this._transform);
    this.geoTrigger(geo_event.camera.view, {
      camera: this
    });
  };

  /**
   * Getter/setter for the view matrix.
   * @note copies the matrix value on set.
   * @property {mat4} view The view matrix.
   * @name geo.camera#view
   */
  Object.defineProperty(this, 'view', {
    get: function () {
      return this._view;
    },
    set: function (view) {
      mat4.copy(this._view, view);
      this._update();
    },
    configurable: true
  });

  /**
   * Getter/setter for the view bounds.
   *
   * @property {object} bounds The view bounds.
   * @property {number} bounds.left
   * @property {number} bounds.top
   * @property {number} bounds.right
   * @property {number} bounds.bottom
   * @name geo.camera#bounds
   */
  Object.defineProperty(this, 'bounds', {
    get: function () {
      if (this._bounds === null) {
        this._bounds = this._getBounds();
      }
      return this._bounds;
    },
    set: function (bounds) {
      this._setBounds(bounds);
      this._update();
    }
  });

  /**
   * Getter/setter for the render clipbounds.  Opposite bounds must have
   * different values.  There are independent clipbounds for each projection
   * (parallel and perspective); switching the projection will switch to the
   * clipbounds.  Individual values of the clipbounds can be set either via a
   * command like `camera.clipbounds = {near: 3, far: 1}` or
   * `camera.clipbounds.near = 3`.  In the second example, no check is made to
   * ensure a non-zero volume clipbounds.
   *
   * @property {object} clipbounds The clipbounds for the current projection.
   * @name geo.camera#clipbounds
   */
  Object.defineProperty(this, 'clipbounds', {
    get: function () {
      return this._clipbounds[this._projection];
    },
    set: function (bounds) {
      var clipbounds = this._clipbounds[this._projection];
      bounds = {
        left: bounds.left === undefined ? clipbounds.left : bounds.left,
        right: bounds.right === undefined ? clipbounds.right : bounds.right,
        top: bounds.top === undefined ? clipbounds.top : bounds.top,
        bottom: bounds.bottom === undefined ? clipbounds.bottom : bounds.bottom,
        near: bounds.near === undefined ? clipbounds.near : bounds.near,
        far: bounds.far === undefined ? clipbounds.far : bounds.far
      };
      if (bounds.left === bounds.right) {
        throw new Error('Left and right values must be different');
      }
      if (bounds.top === bounds.bottom) {
        throw new Error('Top and bottom values must be different');
      }
      if (bounds.near === bounds.far) {
        throw new Error('Near and far values must be different');
      }
      this._clipbounds[this._projection] = bounds;
      this._createProj();
      this._update();
    }
  });

  /**
   * Getter for the "display" matrix.  This matrix converts from world
   * coordinates into display coordinates.  Read only.
   *
   * @property {mat4} display The display matrix.
   * @name geo.camera#display
   */
  Object.defineProperty(this, 'display', {
    get: function () {
      if (this._display === null) {
        var b = this._clipbounds[this._projection];
        var mat = util.mat4AsArray();
        mat4.translate(mat, mat, [
          this.viewport.width / 2,
          this.viewport.height / 2,
          0]);
        mat4.scale(mat, mat, [
          this.viewport.width / (b.right - b.left),
          this.viewport.height / (b.bottom - b.top),
          1]);
        mat4.translate(mat, mat, [
          -(b.left + b.right) / 2,
          -(b.top + b.bottom) / 2,
          0]);
        mat4.multiply(mat, mat, this._transform);
        this._display = mat;
      }
      return this._display;
    }
  });

  /**
   * Getter for the "world" matrix.  This matrix converts from display
   * coordinates into world coordinates.  This is the inverse of the "display"
   * matrix.  Read only.
   *
   * @property {mat4} world The world matrix.
   * @name geo.camera#world
   */
  Object.defineProperty(this, 'world', {
    get: function () {
      if (this._world === null) {
        this._world = mat4.invert(
          util.mat4AsArray(),
          this.display
        );
      }
      return this._world;
    }
  });

  /**
   * Getter/setter for the projection type.
   *
   * @property {string} projection The projection type.  One of `parallel` or
   *    `perspective`.
   * @name geo.camera#projection
   * @fires geo.event.camera.projection
   */
  Object.defineProperty(this, 'projection', {
    get: function () {
      return this._projection;
    },
    set: function (type) {
      if (!this.constructor.projection[type]) {
        throw new Error('Unsupported projection type: ' + type);
      }
      if (type !== this._projection) {
        this._projection = type;
        this._createProj();
        this._update();
        this.geoTrigger(geo_event.camera.projection, {
          camera: this,
          projection: type
        });
      }
    }
  });

  /**
   * Getter for the projection matrix.  Read only.
   *
   * @property {mat4} projectionMatrix The projection matrix.
   * @name geo.camera#projectionMatrix
   */
  Object.defineProperty(this, 'projectionMatrix', {
    get: function () {
      return this._proj;
    }
  });

  /**
   * Getter for the transform matrix.  This is the projection multiplied by the
   * view matrix.  Read only.
   *
   * @property {mat4} transform The transform matrix.
   * @name geo.camera#transform
   */
  Object.defineProperty(this, 'transform', {
    get: function () {
      return this._transform;
    }
  });

  /**
   * Getter for the inverse transform matrix.  Read only.
   *
   * @property {mat4} inverse The inverse transform matrix.
   * @name geo.camera#inverse
   */
  Object.defineProperty(this, 'inverse', {
    get: function () {
      return this._inverse;
    }
  });

  /**
   * Getter/setter for the viewport.
   *
   * The viewport consists of a width and height in pixels, plus a left and
   * top offset in pixels.  The offsets are only used to determine if pixel
   * alignment is possible.
   *
   * @property {object} viewport The viewport in pixels.
   * @property {number} viewport.width
   * @property {number} viewport.height
   * @property {number} viewport.top
   * @property {number} viewport.left
   * @name geo.camera#viewport
   * @fires geo.event.camera.viewport
   */
  Object.defineProperty(this, 'viewport', {
    get: function () {
      return {
        width: this._viewport.width,
        height: this._viewport.height,
        left: this._viewport.left,
        top: this._viewport.top
      };
    },
    set: function (viewport) {
      if (!(viewport.width > 0 &&
            viewport.height > 0)) {
        throw new Error('Invalid viewport dimensions');
      }
      if (viewport.width === this._viewport.width &&
          viewport.height === this._viewport.height) {
        return;
      }

      // apply scaling to the view matrix to account for the new aspect ratio
      // without changing the apparent zoom level
      if (this._viewport.width && this._viewport.height) {
        this._scale([
          this._viewport.width / viewport.width,
          this._viewport.height / viewport.height,
          1
        ]);

        // translate by half the difference to keep the center the same
        this._translate([
          (viewport.width - this._viewport.width) / 2,
          (viewport.height - this._viewport.height) / 2,
          0
        ]);
      }

      this._viewport = {
        width: viewport.width,
        height: viewport.height,
        left: viewport.left,
        top: viewport.top
      };
      this._update();
      this.geoTrigger(geo_event.camera.viewport, {
        camera: this,
        viewport: this.viewport
      });
    }
  });

  /**
   * Reset the view matrix to its initial (identity) state.
   * @protected
   * @returns {this} Chainable.
   */
  this._resetView = function () {
    mat4.identity(this._view);
    return this;
  };

  /**
   * Uses `mat4.translate` to translate the camera by the given vector amount.
   * @protected
   * @param {vec3|Array} offset The camera translation vector.
   * @returns {this} Chainable.
   */
  this._translate = function (offset) {
    mat4.translate(this._view, this._view, offset);
    return this;
  };

  /**
   * Uses `mat4.scale` to scale the camera by the given vector amount.
   * @protected
   * @param {vec3|Array} scale The scaling vector.
   * @returns {this} Chainable.
   */
  this._scale = function (scale) {
    mat4.scale(this._view, this._view, scale);
    return this;
  };

  /**
   * Project a vec4 from world space into clipped space [-1, 1] in place.
   * @protected
   * @param {vec4} point The point in world coordinates (mutated).
   * @returns {vec4} The point in clip space coordinates.
   */
  this._worldToClip4 = function (point) {
    return vec4.transformMat4(point, point, this._transform);
  };

  /**
   * Project a vec4 from clipped space into world space in place.
   * @protected
   * @param {vec4} point The point in clipped coordinates (mutated).
   * @returns {vec4} The point in world space coordinates.
   */
  this._clipToWorld4 = function (point) {
    return vec4.transformMat4(point, point, this._inverse);
  };

  /**
   * Apply the camera's projection transform to the given point.
   * @param {vec4} pt a point in clipped coordinates.
   * @returns {vec4} the point in normalized coordinates.
   */
  this.applyProjection = function (pt) {
    var w;
    if (this._projection === 'perspective') {
      w = 1 / (pt[3] || 1);
      pt[0] = w * pt[0];
      pt[1] = w * pt[1];
      pt[2] = w * pt[2];
      pt[3] = w;
    } else {
      pt[3] = 1;
    }
    return pt;
  };

  /**
   * Unapply the camera's projection transform from the given point.
   * @param {vec4} pt a point in normalized coordinates.
   * @returns {vec4} the point in clipped coordinates.
   */
  this.unapplyProjection = function (pt) {
    var w;
    if (this._projection === 'perspective') {
      w = pt[3] || 1;
      pt[0] = w * pt[0];
      pt[1] = w * pt[1];
      pt[2] = w * pt[2];
      pt[3] = w;
    } else {
      pt[3] = 1;
    }
    return pt;
  };

  /**
   * Project a vector from world space into viewport (display) space.  The
   * resulting vector always has the last component (`w`) equal to 1.
   *
   * @param {vec3|vec4} point The point in world coordinates.
   * @returns {vec4} The point in display coordinates.
   */
  this.worldToDisplay4 = function (point) {
    point = [point[0], point[1], point[2] || 0, point[3] || 1];
    point = vec4.transformMat4(point, point, this.display);
    if (point[3] && point[3] !== 1) {
      point = [point[0] / point[3], point[1] / point[3], point[2] / point[3], 1];
    }
    return point;
  };

  /**
   * Project a vector from viewport (display) space into world space.  The
   * resulting vector always has the last component (`w`) equal to 1.
   *
   * @param {vec3|vec4} point The point in display coordinates.
   * @returns {vec4} The point in world space coordinates.
   */
  this.displayToWorld4 = function (point) {
    point = [point[0], point[1], point[2] || 0, point[3] || 1];
    point = vec4.transformMat4(point, point, this.world);
    if (point[3] && point[3] !== 1) {
      point = [point[0] / point[3], point[1] / point[3], point[2] / point[3], 1];
    }
    return point;
  };

  /**
   * Project a 2D point object from world space into viewport space.  `z` is
   * set to `-this.clipbounds.near` to scale with the clip space.
   *
   * @param {object} point The point in world coordinates.
   * @param {number} point.x
   * @param {number} point.y
   * @returns {object} The point in display coordinates.
   */
  this.worldToDisplay = function (point) {
    var b = this._clipbounds[this._projection];
    point = this.worldToDisplay4([point.x, point.y, -b.near]);
    return {x: point[0], y: point[1]};
  };

  /**
   * Project a 2D point object from viewport space into world space.  `z` is
   * set to -1 to scale with the clip space.
   *
   * @param {object} point The point in display coordinates.
   * @param {number} point.x
   * @param {number} point.y
   * @returns {object} The point in world coordinates.
   */
  this.displayToWorld = function (point) {
    point = this.displayToWorld4([point.x, point.y, -1]);
    return {x: point[0], y: point[1]};
  };

  /**
   * Calculate the current bounds in world coordinates from the
   * current view matrix.  This computes a matrix vector multiplication
   * so the result is cached for public facing methods.
   *
   * @protected
   * @returns {object} bounds object.
   */
  this._getBounds = function () {
    var ul, ur, ll, lr, bds = {};

    // get corners
    ul = this.displayToWorld({x: 0, y: 0});
    ur = this.displayToWorld({x: this._viewport.width, y: 0});
    ll = this.displayToWorld({x: 0, y: this._viewport.height});
    lr = this.displayToWorld({x: this._viewport.width, y: this._viewport.height});

    bds.left = Math.min(ul.x, ur.x, ll.x, lr.x);
    bds.bottom = Math.min(ul.y, ur.y, ll.y, lr.y);
    bds.right = Math.max(ul.x, ur.x, ll.x, lr.x);
    bds.top = Math.max(ul.y, ur.y, ll.y, lr.y);

    return bds;
  };

  /**
   * Sets the view matrix so that the given world bounds
   * are in view.  To account for the viewport aspect ratio,
   * the resulting bounds may be larger in width or height than
   * the requested bound, but should be centered in the frame.
   *
   * @protected
   * @param {object} bounds
   * @param {number} bounds.left
   * @param {number} bounds.right
   * @param {number} bounds.bottom
   * @param {number} bounds.top
   * @param {number?} bounds.near Currently ignored.
   * @param {number?} bounds.far Currently ignored.
   * @returns {this} Chainable.
   */
  this._setBounds = function (bounds) {
    var size = {
      width: bounds.right - bounds.left,
      height: bounds.top - bounds.bottom
    };
    var center = {
      x: (bounds.left + bounds.right) / 2,
      y: (bounds.bottom + bounds.top) / 2
    };

    this._viewFromCenterSizeRotation(center, size, 0);
    return this;
  };

  /**
   * Sets the view matrix so that the given world center is centered, at
   * least a certain width and height are visible, and a rotation is applied.
   * The resulting bounds may be larger in width or height than the values if
   * the viewport is a different aspect ratio.
   *
   * @protected
   * @param {object} center Center of the view in gcs coordinates.
   * @param {number} center.x
   * @param {number} center.y
   * @param {object} size Minimum size of the view in gcs units.
   * @param {number} size.width
   * @param {number} size.height
   * @param {number} rotation in clockwise radians.  Optional.
   * @returns {this} Chainable.
   */
  this._viewFromCenterSizeRotation = function (center, size, rotation) {
    var translate = util.vec3AsArray(),
        scale = util.vec3AsArray(),
        c_ar, v_ar, w, h;

    // reset view to the identity
    this._resetView();

    w = Math.abs(size.width);
    h = Math.abs(size.height);
    c_ar = w / h;
    v_ar = this._viewport.width / this._viewport.height;

    if (c_ar >= v_ar) {
      // grow camera bounds vertically
      h = w / v_ar;
      scale[0] = 2 / w;
      scale[1] = 2 / h;
    } else {
      // grow bounds horizontally
      w = h * v_ar;
      scale[0] = 2 / w;
      scale[1] = 2 / h;
    }

    scale[2] = 1;
    this._scale(scale);

    if (rotation) {
      this._rotate(rotation);
    }

    // translate to the new center.
    translate[0] = -center.x;
    translate[1] = -center.y;
    translate[2] = 0;

    this._translate(translate);

    return this;
  };

  /**
   * Sets the view matrix so that the given world center is centered, at
   * least a certain width and height are visible, and a rotation is applied.
   * The resulting bounds may be larger in width or height than the values if
   * the viewport is a different aspect ratio.
   *
   * @param {object} center Center of the view in gcs coordinates.
   * @param {number} center.x
   * @param {number} center.y
   * @param {object} size Minimum size of the view in gcs units.
   * @param {number} size.width
   * @param {number} size.height
   * @param {number} rotation in clockwise radians.  Optional.
   * @returns {this} Chainable.
   */
  this.viewFromCenterSizeRotation = function (center, size, rotation) {
    this._viewFromCenterSizeRotation(center, size, rotation);
    this._update();
    return this;
  };

  /**
   * Pans the view matrix by the given amount.
   *
   * @param {object} offset The delta in world space coordinates.
   * @param {number} offset.x
   * @param {number} offset.y
   * @param {number} [offset.z=0]
   * @returns {this} Chainable.
   */
  this.pan = function (offset) {
    if (!offset.x && !offset.y && !offset.z) {
      return;
    }
    this._translate([
      offset.x,
      offset.y,
      offset.z || 0
    ]);
    this._update();
    return this;
  };

  /**
   * Zooms the view matrix by the given amount.
   *
   * @param {number} zoom The zoom scale to apply
   * @returns {this} Chainable.
   */
  this.zoom = function (zoom) {
    if (zoom === 1) {
      return;
    }
    mat4.scale(this._view, this._view, [
      zoom,
      zoom,
      zoom
    ]);
    this._update();
    return this;
  };

  /**
   * Rotate the view matrix by the given amount.
   *
   * @param {number} rotation Counter-clockwise rotation angle in radians.
   * @param {object} center Center of rotation in world space coordinates.
   * @param {vec3} [axis=[0, 0, -1]] axis of rotation.
   * @returns {this} Chainable.
   */
  this._rotate = function (rotation, center, axis) {
    if (!rotation) {
      return;
    }
    axis = axis || [0, 0, -1];
    if (!center) {
      center = [0, 0, 0];
    } else if (center.x !== undefined) {
      center = [center.x || 0, center.y || 0, center.z || 0];
    }
    var invcenter = [-center[0], -center[1], -center[2]];
    mat4.translate(this._view, this._view, center);
    mat4.rotate(this._view, this._view, rotation, axis);
    mat4.translate(this._view, this._view, invcenter);
    return this;
  };

  /**
   * Returns a CSS transform that converts (by default) from world coordinates
   * into display coordinates.  This allows users of this module to position
   * elements using world coordinates directly inside DOM elements.  This
   * expects that the transform-origin is 0 0.
   *
   * @param {string} [transform='display'] The transform to return.  One of
   *   `display` or `world`.
   * @returns {string} The css transform string.
   */
  this.css = function (transform) {
    var m;
    switch ((transform || '').toLowerCase()) {
      case 'display':
      case '':
        m = this.display;
        break;
      case 'world':
        m = this.world;
        break;
      default:
        throw new Error('Unknown transform ' + transform);
    }
    return camera.css(m);
  };

  /**
   * Represent a glmatrix as a pretty-printed string.
   * @param {mat4} mat A 4 x 4 matrix.
   * @param {number} [prec] The number of decimal places.
   * @returns {string}
   */
  this.ppMatrix = function (mat, prec) {
    var t = mat;
    prec = prec || 2;
    function f(i) {
      var d = t[i], s = d.toExponential(prec);
      if (d >= 0) {
        s = ' ' + s;
      }
      return s;
    }
    return [
      [f(0), f(4), f(8), f(12)].join(' '),
      [f(1), f(5), f(9), f(13)].join(' '),
      [f(2), f(6), f(10), f(14)].join(' '),
      [f(3), f(7), f(11), f(15)].join(' ')
    ].join('\n');
  };

  /**
   * Pretty print the transform matrix.
   * @returns {string} A string representation of the matrix.
   */
  this.toString = function () {
    return this.ppMatrix(this._transform);
  };

  /**
   * Return a debugging string of the current camera state.
   * @returns {string} A string with the camera state.
   */
  this.debug = function () {
    return [
      'bounds',
      JSON.stringify(this.bounds),
      'view:',
      this.ppMatrix(this._view),
      'projection:',
      this.ppMatrix(this._proj),
      'transform:',
      this.ppMatrix(this._transform)
    ].join('\n');
  };

  /**
   * Represent the value of the camera as its transform matrix.
   * @returns {mat4} The transform matrix.
   */
  this.valueOf = function () {
    return this._transform;
  };

  this._clipbounds = this.constructor.clipbounds;
  // initialize the view matrix
  this._resetView();

  // set up the projection matrix
  this.projection = spec.projection || 'parallel';

  // initialize the viewport
  if (spec.viewport) {
    this.viewport = spec.viewport;
  }

  // trigger an initial update to set up the camera state
  this._update();

  return this;
};

/**
 * Supported projection types.
 * @enum {boolean}
 */
camera.projection = {
  perspective: true,
  parallel: true
};

/**
 * Default camera clipping bounds.  Some features and renderers may rely on the
 * far clip value being more positive than the near clip value.
 * @enum {number}
 */
camera.clipbounds = {
  perspective: {
    left: -1,
    right: 1,
    top: 1,
    bottom: -1,
    far: 2000,
    near: 0.01
  },
  parallel: {
    left: -1,
    right: 1,
    top: 1,
    bottom: -1,
    far: -1,
    near: 1
  }
};

/**
 * Output a mat4 as a css transform.  This expects that the transform-origin is
 * 0 0.
 *
 * @variation 2
 * @param {mat4} t A matrix transform.
 * @returns {string} A css transform string.
 */
camera.css = function (t) {
  return 'matrix3d(' +
      t.map(function (val) {
        /* Format each value with a certain precision, but don't use scientific
         * notation or keep needless trailing zeroes. */
        val = (+val).toPrecision(15);
        if (val.indexOf('e') >= 0) {
          val = (+val).toString();
        } else if (val.indexOf('.') >= 0) {
          val = val.replace(/(\.|)0+$/, '');
        }
        return val;
      }).join(',') +
    ')';
};

// expose the vector and matrix functions for convenience
camera.vec3 = vec3;
camera.mat3 = mat3;
camera.vec4 = vec4;
camera.mat4 = mat4;

inherit(camera, object);
module.exports = camera;

redpajama_set_name: RedPajamaGithub


text:
Blu-ray Review: Let It Ride (1989)
On April 5th, Paramount released a new Blu-ray edition of the surprisingly entertaining 1989 comedy Let It Ride, a film that has flown somewhat under the radar but deserves to be viewed with a fresh pair of eyes.
Richard Dreyfuss stars as Jay Trotter, a cab driver and recovering gambling addict who vows to his wife Pam (Teri Garr) that he will stop blowing money at the race track. But he's pulled back in when his cabbie buddy Looney (David Johansen), who has a penchant for secretly recording his passengers, overhears two guys talking about a horse who is a sure thing.
Trotter takes advantage of the insider knowledge to place a bet on the horse. The bet pays off, but in true addict fashion, he is unable to stop and decides to keep reinvesting his winnings. The film mainly unfolds over one day at the race track, as Trotter goes on a compulsive streak of making increasingly high risk bets that could either change his life or sink him even deeper into the hole, with a growing list of spectators watching him and getting roped in.
The feature directorial debut of Joe Pytka, who more famously went on to direct the original Space Jam, Let It Ride was largely dismissed by critics upon it's initial release in the summer of 1989. But time has actually been quite kind to it, and I would go so far as to say that this is a very underrated comedy from its era. For starters, the screenplay by Nancy Dowd (credited under the pseudonym "Earnest Morton") is witty and fast-paced, with the opening marital argument that devolves into a fiery debate about fortune cookies serving as just one example of the film's sparkling exchanges.
There is a cynicism running through Let It Ride that makes it work as a farce, but it's also a strangely endearing film about an ordinary guy who keeps falling upwards. It's a comedy that finds a sweet spot between being a bit crude but also weirdly wholesome, building to a genuinely rousing finale. Dreyfuss carries the whole thing with a very good comic performance as a man possessed by the extinction bursts of winning, growing increasingly manic as the film goes on. A young Jennifer Tilly also eats up the screen in a memorable supporting role.
The film is topped off by a solid Giorgio Moroder score, and the memorable use of "Fugue for Tinhorns" from Guys and Dolls as a cheery theme song. I had admittedly never seen Let It Ride before this release, but I'm glad Paramount has given Pytka's film its due on Blu-ray, even if this is a decidedly bare bones edition.
Bonus Features (Blu-ray):
This Blu-ray includes a single archival featurette. The film also received a special edition Blu-ray release last year from Australian distributor Via Vision, which included an exclusive interview with Pytka and deleted scenes, but those extras are unfortunately not ported over here. There is no digital copy included in the package.
• Behind-the-Scenes Featurette (3 minutes, 48 seconds)
Let It Ride is a Paramount Home Entertainment release. It's 90 minutes and rated G.
Street Date: April 5th, 2022
← Disney+ Review: Polar Bear
Blu-ray Review: Soapdish (1991) →


text:
1.833.308.7348 | Contact Us
1.833.308.7348 | Newsletter Signup | info@DistrictREIT.ca
Assumption Plaza
McClary Apartments
South Bruce Industrial Collection
Riddell Gardens
Westbridge Collection
Wharncliffe Medical Plaza
Wish at Windsong
Wonderland Path
District REIT Acquires Wish at Windsong
BURLINGTON, APRIL 14, 2022 – District Property Trust (District REIT™ ) announces the acquisition of the residential property known as "Wish at Windsong," located at 170 and 180 Northumberland Street in Ayr, Ontario.
Acquisition Update
District REIT acquired Wish at Windsong from Ayr Meadows Development Inc. on April 14, 2022, marking the REIT's first acquisition in Ayr and increasing the total residential units in its portfolio by 38.5%. The REIT paid $24.3 million CAD to purchase the property. This acquisition represents a 25% increase in the REIT's total assets and a 34% increase in its investment property value. The property is a high performing multi-residential asset.
Wish at Windsong consists of two apartment buildings, with 31, one-bedroom and two-bedroom apartments in each building. The buildings are in a prime location in Ayr, minutes away from Foodland, LCBO and the 401 Highway, and only a 30-minute drive from Kitchener. In addition, the apartments feature fine finishes including in-suite laundry and modern kitchens.
"The REIT has been doing extremely well and we have multiple acquisitions on the horizon," said Carmen Campagnaro, co-founder and trustee of District Property Trust. "Being in the industry for so many years and people knowing about us gives us a leading edge in the market and we are able to acquire properties that aren't on the market. So the next few acquisitions in the pipeline are all third-party acquisitions and they are really exciting opportunities."
About District Property Trust
District Property Trust, also known as District REIT™, is a private Real Estate Investment Trust that owns and operates a portfolio of diversified income-producing real estate and real estate mortgage investments. As unit holders, investors can benefit from the capital appreciation of District REIT's assets through on-going management and value creation strategies.
This press release contains forward-looking information that reflect the current expectations of management of District REIT about REIT's objectives, future results, performance, prospects, and opportunities. Forward-looking information is based on a number of assumptions and is subject to a number of risks and uncertainties, many of which are beyond the Trust's control, which could cause actual results to differ materially from those that are disclosed in or implied by such forward-looking information. These risks and uncertainties include, but are not limited to, general and local economic and business conditions; employment levels; mortgage and interest rates and regulations; the uncertainties around the timing and number of future financings; uncertainties surrounding the COVID-19 pandemic; geopolitical events, leasing risks, and interest and currency rate fluctuations. All forward-looking information in this press release speaks as of the date of this press release. The Trust does not undertake to update this press release with any information whether because of new information, future events or otherwise except as required by law.
Watch Now: Investing in Real Estate Investment Trust's
Renovation Updates at McClary Apartments
Book a discovery call to learn more!
By submitting this form you consent to receiving communications from District Property Trust and/or Valour Capital and understand that you may unsubscribe at any time.
Invest In Real Estate Together
1.833.308.REIT (7348)
PART OF A COLLABORATIVE GROUP OF REAL ESTATE COMPANIES
ONEENTERPRISE.CA
©2022 All Rights Reserved. DISTRICT™ Property Trust


Leaves Melbourne : 48 Hours.
Nokero (short for No Kerosene) was formed to develop safe, affordable and environmentally-friendly technology that eliminates the need for harmful and polluting fuels used around the world. Easy-to-hang Nokero bulbs cleverly charge by day and bring hours of light each night. They're bright enough to replace most traditional electric lights. They are water resistant, and replaceable batteries will last for approximately 1.5 years, depending on use.


text:
Q: How to import react framework into vscode source code project to create UI component? When i customize vscode source code, i found it hard to add a page.
I know there are many ways to do so, such as Part/Widget/Browserwindow, but only if i new a Browserwindow can i explicitly load html and js files like in chrome browser and it's friendly.
If i use a Part or a Widget, i need to use native js api to do dom manipulation, and it's so inefficient,
~~so i want to know how did vscode team decide to use no ui framework during the development? Is there some trade-off?~~
i tried to import react and react-dom directly in my own contrib file  /vs/workbench/contrib/dialog/browser/dialog.ts, and then get successful compilation and the react component shows up, but i don't know how to add babel with the compilation procedure, so i use react without jsx.
so i want to know how to import react framework into vscode source code project to create ui component? Is there some practices?


text:
Q: Is there any reason why /proc/*/cmdline is world-readable? Maybe I haven't had enough coffee yet today, but I can't remember or think of any reason why /proc/PID/cmdline should be world-readable - after all, /proc/PID/environ isn't.
Making it readable only by the user (and maybe the group.  and root, of course) would prevent casual exposure of passwords entered as command-line arguments.
Sure, it would affect other users running ps and htop and the like - but that's a good thing, right? That would be the point of not making it world-readable.

A: I suspect the main, and perhaps only, reason is historical — /proc/.../cmdline was initially world-readable, so it remains that way for backwards compatibility. cmdline was added in 0.98.6, released on December 2, 1992, with mode 444; the changelog says
     - /proc filesystem extensions.  Based on ideas (and some code) by
       Darren Senn, but mostly written by yours truly.  More about that
       later.

I don't know when "later" was; as far as I can tell, Darren Senn's ideas are lost in the mists of time.
environ is an interesting counter-example to the backwards compatibility argument: it started out word-readable, but was made readable only by its owner in 1.1.85. I haven't found the changelog for that so I don't know what the reasoning was.
The overall accessibility and visibility of /proc/${pid} (including /proc/${pid}/cmdline) can be controlled using proc's hidepid mount option, which was added in version 3.3 of the kernel. The gid mount option can be used to give full access to a specific group, e.g. so that monitoring processes can still see everything without running as root.

A: The command line of the processes has always been considered public information in Unix and was always available via the ps(1) command. The environment of a process, on the contrary, was never such public information.
In the original Unix implementation, ps was a setuid executable which was opening /dev/mem and extracting all the information directly from the live memory of the kernel, in the manner of a debugger. Linux supported a plan9-alike /proc filesystem since early on, and ps was implemented as a simple non-setuid program which was just opening and reading files like /proc/<pid>/stat and /proc/<pid>/cmdline. Since those were meant both as the regular kernel/user interface for obtaining that info, and as a shell-friendly alternative to parsing the output of ps (yuck), they could not be and it made no sense to be more restrictive than ps.

Sure, it would affect other users running ps and htop and the like - but that's a good thing, right? That would be the point of not making it world-readable.

No it's not a good thing. Besides breaking the standard (see the link above) that will make the system un-debuggable without root privileges, and the security advantages of that would be at best illusory. (Notice that at the time where Unix was invented, security through obscurity and free speech restrictions weren't yet as fashionable as they are today.)
You don't have to imagine what such a Linux system would look like -- there's already Android which a non-rooted system is a nasty black box (locked down in all possible ways, not just with hidepid) for its actual user(s), yet in no way more robust against external attackers and data collectors than a typical Debian or Slackware desktop or server.


text:
La prise de Bagdad a eu lieu le  lors de la guerre opposant Shah Abbas Ier au sultan Mourad IV.

Notes et références

Bagdad
Histoire de Bagdad
Monde arabo-musulman

redpajama_set_name: RedPajamaWikipedia


text:
Mass. legal group says labs need more oversight
Previous misconduct jeopardized thousands of drug convictions
The state could face another drug lab crisis if it doesn't put significant reforms in place, including the creation of an independent audit process, the Boston Bar Association said in a report released Monday.The BBA, a membership organization of about 10,000 attorneys, said more oversight is needed to make sure the state doesn't have a repeat of the crisis caused by former state chemist Annie Dookhan, whose misconduct at a state drug lab has jeopardized thousands of drug convictions.Dookhan was convicted of faking test results and tampering with samples at a state Department of Public Health drug lab where police sent substances to test in criminal cases.A bar association task force began studying the lab crisis in the fall of 2012 after state police closed the lab when they discovered the extent of Dookhan's misconduct. At least 1,100 criminal cases have been dismissed or not prosecuted because of tainted evidence or other fallout from the lab's shutdown.In its report, the BBA says prosecutors, defense lawyers and judges have made "extraordinary" efforts in the aftermath of the Dookhan case, but says more needs to be done."Despite laudable improvements in lab oversight that have taken place in the wake of the lab crisis, the task force believes that the risk of another such crisis in forensic services in Massachusetts is unacceptably high," the report says.State police have consolidated the functions of the closed DPH lab as well as a lab in Amherst under its supervision, making the labs subject to some audits and eventually an accreditation process.The task force said that despite these safeguards, it would be a mistake to assume that those changes are enough to prevent misconduct similar to Dookhan's. It recommends that the state create an independent auditing process to review the performance of its forensic services staff and to conduct investigations of any identified issues.The BBA said the audits should be conducted separately from agencies responsible for investigating and prosecuting criminal cases such as the state police, district attorney's offices, Attorney General's Office and the Executive Office of Public Safety."As laudable as many of the steps taken to improve forensic services over the past several years have been, they have not fully addressed the larger issues we have identified," said Michael Ricciuti, a former federal prosecutor and criminal defense attorney who chaired the task force."We think it gives an extra level of assurance when you have an outside auditor doing routine audits and responding to whistleblower complaints, that the issues are being handled by an outside third party that is not involved in the criminal prosecution apparatus."Gov. Deval Patrick's office and state police did not immediately respond to requests seeking comment on the BBA's recommendations.
The state could face another drug lab crisis if it doesn't put significant reforms in place, including the creation of an independent audit process, the Boston Bar Association said in a report released Monday.
The BBA, a membership organization of about 10,000 attorneys, said more oversight is needed to make sure the state doesn't have a repeat of the crisis caused by former state chemist Annie Dookhan, whose misconduct at a state drug lab has jeopardized thousands of drug convictions.
Dookhan was convicted of faking test results and tampering with samples at a state Department of Public Health drug lab where police sent substances to test in criminal cases.
A bar association task force began studying the lab crisis in the fall of 2012 after state police closed the lab when they discovered the extent of Dookhan's misconduct. At least 1,100 criminal cases have been dismissed or not prosecuted because of tainted evidence or other fallout from the lab's shutdown.
In its report, the BBA says prosecutors, defense lawyers and judges have made "extraordinary" efforts in the aftermath of the Dookhan case, but says more needs to be done.
"Despite laudable improvements in lab oversight that have taken place in the wake of the lab crisis, the task force believes that the risk of another such crisis in forensic services in Massachusetts is unacceptably high," the report says.
State police have consolidated the functions of the closed DPH lab as well as a lab in Amherst under its supervision, making the labs subject to some audits and eventually an accreditation process.
The task force said that despite these safeguards, it would be a mistake to assume that those changes are enough to prevent misconduct similar to Dookhan's. It recommends that the state create an independent auditing process to review the performance of its forensic services staff and to conduct investigations of any identified issues.
The BBA said the audits should be conducted separately from agencies responsible for investigating and prosecuting criminal cases such as the state police, district attorney's offices, Attorney General's Office and the Executive Office of Public Safety.
"As laudable as many of the steps taken to improve forensic services over the past several years have been, they have not fully addressed the larger issues we have identified," said Michael Ricciuti, a former federal prosecutor and criminal defense attorney who chaired the task force.
"We think it gives an extra level of assurance when you have an outside auditor doing routine audits and responding to whistleblower complaints, that the issues are being handled by an outside third party that is not involved in the criminal prosecution apparatus."
Gov. Deval Patrick's office and state police did not immediately respond to requests seeking comment on the BBA's recommendations.


text:
Q: MFC: How to custom draw a dynamically created CListCtrl I need to customize the head/row height of a CListCtrl. After some googling, I know that I need to subclass CListCtrl, so I wrote my own list class, with the outline as follows:
class CListCtrlCl : public CListCtrl
{
    DECLARE_DYNAMIC(CListCtrlCl)

public:

...
BEGIN_MESSAGE_MAP(CListCtrlCl, CListCtrl)
    ON_WM_MEASUREITEM()
    ON_WM_MEASUREITEM_REFLECT()
END_MESSAGE_MAP()
void CListCtrlCl::PreSubclassWindow()
{
    ModifyStyle(0,LVS_OWNERDRAWFIXED);
    CListCtrl::PreSubclassWindow();
    CHeaderCtrl *pHeader = GetHeaderCtrl();
    m_Header.SubclassWindow(pHeader->GetSafeHwnd());
}
void CListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
    if (m_nRowHeight>0)
    {
        lpMeasureItemStruct->itemHeight = 100;
    }
}

The problem is that this method worked if I drag a CListCtrl control in dialog template, but if I create this listctrl dynamically, like:
BOOL CListCtrlTestDlg::OnInitDialog()
{
CRect rect(7,7,300,300);
this->m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|LVS_REPORT|LVS_ALIGNLEFT|WS_BORDER | WS_TABSTOP, rect, this,IDC_LIST1 + 1);
SetWindowLong(m_ListCtrl.m_hWnd ,GWL_EXSTYLE,WS_EX_CLIENTEDGE);
m_ListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES);
::SendMessage(m_ListCtrl.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);

...
Then the customization code just doesn't take effect. Whatever I did, the result listctrl is the standard one without any customization. But I need to create this listctrl dynamically, so could anyone tell me what I need to do to make dynamically created clistctrl customizable?
Thanks.

A: You've left off the necessary style for custom drawing when you create the control.  Add LVS_OWNERDRAWFIXED.  That should fix your problem.

A: The reason is that, PreSubclassWindow is only called when you subclass a control. When you createthe control you have also control over the style.
Simply overwrite the virtual Create function and just add the style like you are doing it in the PreSubclassWindow function. Than call the base class. You can also overwrite PreCreateWindow.
But much simpler than using the ownerdraw feature is cusum draw.