text:
Home News and Insights E. Warren Kuhn joins the Law Offices of F. Bryan Brice, Jr.
E. Warren Kuhn joins the Law Offices of F. Bryan Brice, Jr.
The Law Offices of F. Bryan Brice, Jr., a client-centered, full-service law firm focusing primarily on environmental law and land use issues, announces the addition of Warren Kuhn to our firm as an associate attorney. Ms. Kuhn will advise businesses on compliance with State environmental regulations, handle environmental litigation, including defending State and Federal enforcement actions, and assist in toxic tort litigation. She will also provide representation in personal injury litigation and other matters.
"The addition of Warren to our legal team is an asset to our firm in providing the professional legal services our clients expect," said firm owner Bryan Brice. "Warren's energy, commitment to our clients, and enthusiasm for environmental law will contribute to new opportunities for our clients and growth for our firm."
A 2011 graduate of Campbell Law School, Ms. Kuhn was the recipient of the Valera Justice and Stacy Buckner Hall Scholarship. While at Campbell, she completed the Trial Advocacy Program and served as the Secretary/Treasurer and then the President of the Campbell Law School Environmental Law Association. While a student, Ms. Kuhn completed externships with the North Carolina Department of Justice's Environmental Division, where she participated in the State's response to the Gulf Oil Spill Disaster, and with the Southern Environmental Law Center in Chapel Hill, conducting a national survey of laws regulating hydraulic fracturing. She also interned with the Law Offices of F. Bryan Brice, Jr. Ms. Kuhn received her undergraduate degree from the University of North Carolina at Chapel Hill in 2005.
About the Law Offices of F. Bryan Brice, Jr.
The Law Offices of F. Bryan Brice, Jr., is a client-centered, full-service law firm, focusing primarily on environmental law and land use issues, with extensive experience in condemnation, personal injury, criminal, and traffic law. We are principally a litigation firm, fighting for our clients both in and out of court. Our clients are mainly individuals or families, businesses, and municipalities. Our firm is committed to providing effective, affordable legal services with an emphasis on client interaction and involvement.
" Our builder didn't deny us justice because we had you. We appreciate your taking on our plight. May there be many other clients who get to believe in justice at your legal hands! "


text:
Blaming the Crunch
Layoffs and closures have little to do with the recession.
Article by	Rob Fahey, Contributing Editor
Published as part of our sister-site GamesIndustry.biz' widely-read weekly newsletter, the GamesIndustry.biz Editorial is a weekly dissection of one of the issues weighing on the minds of the people at the top of the games business. It appears on Eurogamer after it goes out to GI.biz newsletter subscribers.
Predicting the short-term future of the games industry is a messy business, but there's one prediction for 2009 which requires no crystal ball and in which I have absolute confidence. It is this - that by the end of this year, you're going to be absolutely sick of hearing the words "credit crunch" and "recession" drop out of the mouths of videogame executives to explain studio closures and job cuts.
In fact, you'd be entirely justified in feeling a bit sick of hearing those terms already. They tend not to be phrased quite so blatantly (at least, not yet), but "difficult times", "tough macroeconomic conditions", "tightened consumer spending"... All of these, and a dozen other increasingly eyebrow-raising permutations, have been rolled out in the past few months by games companies or those commenting upon them.
Hang on, though - isn't this the games industry, the wonderful recession-proof industry whose hide should be unmarked by the slings and arrows of economic misfortune? Has that concept gone out the window so quickly, with our newfound state of recession only months old?
The simple answer is no, it hasn't. In fact, just about every metric going suggests that videogames continue to be in absolutely rude health in spite of the tough conditions in the wider economy. In the UK, for instance, high street retailer GAME bucked a downward trend in Christmas spending, while the US market overall grew to $21 billion last year, up 23 per cent from the economically sunny months of 2007.
There is, quite simply, not a shred of credible evidence so far which suggests that the conventional wisdom of the market - that videogames won't be significantly hit by recession because they're viewed as an economical form of "stay at home" entertainment - is showing any cracks.
With an enormous audience of market newcomers for whom gaming is arguably not yet established as a key form of entertainment, Nintendo's Wii is the canary in the coalmine - the first whiff of economical toxicity will hit the Wii market before it goes anywhere near the more established "hardcore" end of the games sector. The Wii, however, is still singing its heart out. If this recession is going to stunt Nintendo's growth spurt (and that does remain a distinct possibility), it certainly hasn't done so yet.
In other words, on an industry-wide level, things are pretty good. Very good, in fact. So why are we seeing job cuts, and why is each fresh announcement of a studio closure or workforce cutback either accompanied by, or greeted with, dark rumblings about the state of the economy?
There are two reasons for this - one legitimate, one rather less so. The legitimate reason is that while the games business isn't seeing a contraction in its sales in line with the contraction in overall consumer spending, it is certainly affected by the other major aspect of the recession - the "credit crunch" itself, which has led to many banks slashing the credit available to businesses.
A lot of modern businesses rely heavily on credit agreements with their banks to finance their day to day operations, allowing them to continue meeting regular obligations in markets where income fluctuates wildly from month to month. Indeed, a large number of businesses are so reliant on credit that, like many unwary consumers, they end up financing everything they do - including payroll and property rental - from credit, with their income being diverted into repayments.
It's not a terribly secure arrangement, but when banks were handing out huge credit deals to practically everyone who walked in off the street, it was secure enough to persist with. Today, with those lines of credit much harder to find, businesses which haven't had liquid assets in years are finding themselves in serious difficulties. It's hard to say if any of the games industry closures and layoffs we've seen in the past six months are a result of this situation, but it's a problem that can afflict companies in any industry, and is a legitimate reason for blaming the "credit crunch" for shutting a firm's doors.
Rob Fahey
Rob Fahey is a former editor of GamesIndustry.biz who spent several years living in Japan and probably still has a mint condition Dreamcast Samba de Amigo set.
Digital FoundryDays Gone: how 60fps transforms the game on PlayStation 5
Back compat plus.

redpajama_set_name: RedPajamaCommonCrawl


text:
Cheryll Barron Blogging and bloggers, Leveson hearings, Leveson Inquiry, Re-arranging publishing for the 5th EstateBloggers exposing media lies, E. M. Forster, Future of journalism, INFORRM, Leveson hearings
Forget #Leveson. Journalism's future is about being held to account by us, not judges or statutes
Pop Art tribute by the surrealist Giorgio De Chirico from another another angle (see last week's post)
Photograph by MIL22
Lord Justice Leveson believes — or must now pretend that he does, for political reasons we explained in a recent post:
[B]loggers and tweeters … have no real reputation for accuracy or reliability but are, in many ways, no more than electronic versions of pub gossip […O]n the other hand, the established media and established journalists … have a powerful reputation for accuracy …
— lecture at Melbourne University, 12 December 2012
… and …
The internet … does not trade in gossip. It simply publishes it online, […I]t does so without, as yet, any general standards of behaviour, such as those to which the media is held.
— speech at the University of Technology in Sydney, 7 December 2012
The truth is that without thoughtful, diligent bloggers — and other agents of free speech — this trenchant perception from nine decades ago would still apply with full force:
[J]ournalism is supposed to tell us what is happening. It actually serves up a mixture of true facts, false facts, and comment … 'The high mission of the Press.' Poor Press! As if it were in a position to have a mission! It is we who have a mission to it.To cure a man through the newspapers or through propaganda of any sort is impossible: you merely alter the symptoms of his disease. We shall be purged only by purging our minds of confusion. The papers trick us not so much by their lies as by their exploitation of our weakness.
— E. M. Forster, 1925
Here is the concluding sentence of an exposé of serious misreporting by the press of an important government reaction to Lord Justice Leveson's report — a warning by the Information Commissioner, Christopher Graham, about just one of the judge's recommendations, in a favourable overall assessment of them:
Unfortunately, the press has once again, sacrificed balanced and accurate reporting of facts in order to promote its own political agenda.
Of course that would hardly surprise Forster, a subtle and deep social observer (whose perspicacity we have alluded to before, in the very different context of the British Raj in India). The blog post from which we clipped that grim conclusion is reproduced below with the kind permission of Hugh Tomlinson at the International Forum for Responsible Media (INFORRM) — which, as far as we can tell, is run not by members of the media but lawyers with a social conscience. Its subject is the distorted newspaper reports of the Information Commissioner's reservation about Lord Justice Leveson's suggestion on 'subject access' — that the subjects of news stories be permitted to examine the information about them in the files of journalists (with the 1998 Data Protection Act as his context). This is an eminently reasonable objection: opening journalists' records to their subjects would make it it impossible to protect vital confidential sources. … But that is no excuse for the comprehensive misrepresentation by the press of what the Commissioner said about the Leveson report — as the INFORRM post explains in the fine and somewhat technical details it must, to justify its condemnation beyond any possible defence.
Independent voices like INFORRM's are exactly what Forster wanted — members of the public, us, purging press lies from society's store of critical information, without fear or favour, and treating upmarket broadsheets like The Guardian no differently from downmarket tabloids like the Daily Mail, when they are guilty of the same offences against the truth.
News: Leveson Recommendations – the Information Commissioner responds and the Press misreports
The Information Commissioner has published his response to the Leveson Report. His response was overwhelming positive, agreeing with the large majority of recommendations including, in particular, the recommendations about tougher sentencing for data protection offences. This would not, however, have been clear to readers of the British press. Newspaper reports of the response concentrated on one sentence of the 20 page document dealing with one part of one recommendation.
The Recommendation in question was number 49 – concerning the removal of the right of subject access from the "journalistic exemption" in section 32 of the Data Protection Act 1998 (a recommendation qualified by reference to the need to ensure the protection of journalist's sources was not affected). The Information Commissioner commented (on page 11 of the Response) that
"The area of subject access is particularly problematic in that there are legitimate concerns about the 'chilling effect' Lord Justice Leveson's proposal might have on investigative journalism. This area will need very careful consideration. This again is a matter of balance of interests and is ultimately a matter for Parliament".
This comment was transformed into the "Daily Mail" headline, "How investigative journalism 'could be harmed by Leveson', says Information Commissioner". The words "could be harmed" do not, in fact appear in the Information Commissioner's response. The opening paragraph of the "Daily Mail" story is wholly misleading
"Key proposals in the Leveson Report could harm investigative journalism, the Information Commissioner warned yesterday".
The Commissioner gave no such warning and did not cast doubt on "key proposals" – but rather, raised a question about one small part of one proposal. The "Daily Telegraph" had the headline "Leveson could have "chilling effect" on journalism, Information Commissioner warns". No such warning was given.
The Guardian did not do much better with the headline "Leveson data protection plans 'could have chilling effect on journalism'. Again, the words "could have a chilling effect" do not appear in the response. The "Guardian" also, wrongly, states that the Commissioner said he would "actively oppose" changes to the role of the ICO in relation to the press. What was, in fact, said was that the ICO was "not actively seeking" a wider role.
None of the newspapers mentioned the fact that the Information Commissioner had welcomed the overwhelming majority of the recommendations – and in particular, the one relating to section 55 (which, as Julian Petley's recent series of posts have shown, the press has been campaigning against for many years, see Part 1, Part 2, Part 3 and Part 4).
The Daily Mail and Guardian stories have been tweeted on several occasions and the disinformation is spreading. In order to assist our readers who do not have time to read the full response we will endeavour to provide a more balanced and accurate account.
The relevant recommendations fall into three areas: ones directed to the Ministry of Justice concerning the press and data protection, ones made to the Information Commissioner directly and ones with data protection implications generally.
First, there are those directed to the Ministry of Justice (Recommendations 48 to 57). These concern various amendments to Data Protection legislation in relating to the press. As a general point, the Commissioner says that
"Taken as a whole package, Lord Justice Leveson's recommendations on reforming the DPA would, if implemented, move the ICO closer to becoming a mainstream statutory regulator of the press. The significance of the proposed changes should not be underestimated. It is clearly for the Government and Parliament to consider what role the ICO should ultimately play in regulating the press".
The Commissioner makes it clear that the ICO is not actively seeking such a role but that, ultimately, this is involves "public policy decisions" for the Government and Parliament to make (p.9).
In relation to the specific recommendations under this head
Recommendation 48 – amendment of the exemption in section 32: The Commissioner says that this has merits but the key is creating the right balance which is a matter for Parliament.
Recommendation 49 – narrowing of the scope of the section 32 exemption: The Commissioner says this requires careful consideration and, as already mentioned, that there are "legitimate concerns" about the chilling effect of the proposal in relation to "subject access". It is noteworthy that he does not add any example or analysis or express a view as to whether these concerns can properly be met in amended legislation.
Recommendation 50 – right to compensation to cover pure distress – The Commissioner strongly supports this recommendation.
Recommendation 51 – repeal of certain procedural provisions in the DPA – The Commissioner supports this recommendation
Recommendation 52 – provision relating to "balance" of freedom of expression and data protection regime. The Commissioner sees no difficulty with this but questions whether it is necessary.
Recommendation 53 – provision to have regard to a recognised system of regulation. The Commissioner, again, sees no difficulty with this but suggests that it reflects existing policy and practice.
Recommendation 54- bringing into force amendments to section 55 of DPA (custodial sentences and enhanced public interest defences). The Commissioner hopes that "there will be no further delay in implementing this recommendation"
Recommendation 55 – extension of ICO prosecuting powers -The Commissioner agrees that there is some benefit in an express power to prosecute for related offences although believes that its powers should not be extended to cover all crimes in which personal data is processed unlawfully.
Recommendation 56 – a new duty to consult with CPS – The Commissioner has no difficulty with this recommendation but wonders whether it is necessary to introduce a formal duty.
Recommendation 57 – reconstitution of ICO as an Information Commission – The Commissioner agrees that the opportunity should be taken to consider this option but mentions a number of alternative models.
The Leveson Report makes then makes nine recommendations "to the Information Commissioner" (Recommendations 58 to 66). These recommendations are all substantially accepted.
Finally, there are three recommendations that impact on the work of the ICO (Recommendations 67, 69 and 70). The Commissioner "welcomes" or "agrees with" all these recommendations.
In short, the balance sheet is that of the 22 recommendations relevant to the ICO, 17 are agreed with, welcomed or strongly supported. In relation to the others, the Commissioner believes that some require further consideration or should be accepted in part and that some (those relating to the journalistic exemption) require careful consideration by Parliament. None of the recommendations are said to be "harmful".
So, a more accurate headline would have been "Information Commissioner welcomes Leveson Data Protection Recommendations". There could be no proper complaint if newspapers had reported the Information Commissioner's response and then added their own comments. Unfortunately, the press has once again, sacrificed balanced and accurate reporting of facts in order to promote its own political agenda.
← Book publishing's future: a distinguished Spanglish record of a catastrophe foretold
Which is worse: fantasy presented as fact by a high-ranking veteran journalist — or by film-makers not in the documentary business? →


Here's a well-defined Bruneau Jasper oval. Picture looking down into a brown & tan lava lamp... Now THERE'S a picture!
39mm x 20.5mm x 6.5mm. Weight: 41.75 carats.
Do you like Bruneau Jasper Cabochons? Click here to see all of the Bruneau Jasper Cabochons on the site!
You are visitor number 37 to this page this year.


To date, there have been few theoretical inquiries into the relationship between the technological innovation and basic objectives of consumer protection laws. This book addresses this need by considering the impact of technological innovation on the foundations of consumer advocacy, contracting behaviour, control over intellectual capital and information privacy. The collection presents a unique and timely perspective on these issues. The authors, internationally renowned experts, from diverse areas such as consumer issues in technology markets, contract, and intellectual property provide a fresh perspective on these topics. Contributions provide novel approaches to the question of what consumer protection might consist of in the context of technological innovation. The book will be a valuable resource to academics and researchers in law and public policy and is easily accessible to graduate and undergraduate students working in these areas.
Glynn S. Lunney Jr, Distinguishing Dastar: Consumer Protection, Moral Rights and Section 43(a), 121 (2006).


text:
Q: Showing 0 to 0 of 0 entries (filtered from NaN total entries) In jQuery Datatable Hi all I am new to jQuery Datatable. I am working on server-side for datatable.
Most of things I have figured out but I am stuck on pagination part, currently I am getting filtered from NaN total entries in table although I have data and I tried processing it correctly.
Issue - I need to convert the backend response as per the datatable. For that purpose I am using dataSrc property of datatable.
I need to send custom payload to backend for that I am using data property provided by datatable.
But Pagination is not working for me.
Backend Response -
{
    content:[{},{},{}], //data
    number:0,
    numberOfElements:10,
    pageable:{
        offset:0,
        pageNumber: 0,
        pageSize: 10,
        paged: true
    },
    sort:{
        empty: false,
        sorted: true,
        unsorted: false
    },
    size:10, //number of rows I want to load at once
    totalElements20, //total number of available record
    totalPages:2 //number of pages 20/10 = 2 so total pages is 2 for total records 20
}

I am getting a response something like this from the backend.
My code -
$scope.onPageload=()=>{
            var settings={
                "url":"ApiToLoadData?pageNumber=1&size=5&field=firstName",
                "method":"GET",
                "headers": {
                    "Authorization": "Bearer Token"
                },
            }
            $.ajax(settings).done(function(data){
                $('#dataTable').DataTable().destroy();
                $scope.tableData=data;
                $('#dataTable').ready(function () {
                    $('#datatable').DataTable( {
                        columns: [
                            { "data": "firstName" },
                            { "data": "lastName" },
                            { "data": "email" }
                        ],
                        "processing": true,
                        "serverSide": true,
                        "ajax":{
                            "url": "ApiToLoadData",
                            "dataType": 'json',
                            "type": "GET",
                            "beforeSend": function(xhr){
                                xhr.setRequestHeader("Authorization",
                                    "Bearer Token");
                            },
                            "data": function ( d ) {
                                if(d.start > 1){
                                    d.pageNumber = d.start/10;
                                }else{
                                    d.pageNumber = d.start;
                                }
                                d.size = d.length; //sending length of the table
                                d.field = ""; //field is the column name which need to be sorted
                                if(d.order[0].column == 0){  //written logic to send hardcode name to backend based on column number
                                    d.field = "firstName";
                                }else if(d.order[0].column == 1){
                                    d.field = "lastName";
                                }else if(d.order[0].column == 2){
                                    d.field = "email";
                                }
                                console.log("final Payload to make reques",d);
                            },
                            "dataSrc": function ( json ) {
                                var newData = Object.assign({}, json);
                                delete newData.totalElements;
                                newData.recordsTotal = 100; // tried with hardcoded value
                                newData.recordsFiltered = 100; // tried with hardcoded value
                                newData.data=json.content;
                                delete newData.deletingAllUnnecessaryObjects;
                                newData.draw = json.number;

                                // return newData.data;        // if I return newData.data then data is showing on table. but still pagination is working but number of records and buttons are not correct

                                var finalDataArrayObj={};
                                finalDataArrayObj.data = json.content;
                                finalDataArrayObj.recordsTotal = 100;
                                finalDataArrayObj.recordsFiltered = 100;
                                finalDataArrayObj.draw = json.number;

                                return finalDataArrayObj; // if I pass a new object then data is not showing on table. pagination not working
                            }
                        }
                    });
                })
                $scope.$apply();
            }).fail(function(err){
                console.log(err);
            });
        }
    });

from the docs of jQuery datatable I have found that we should have this type of response -
"draw": 1,
"recordsTotal": 57,
"recordsFiltered": 57,
"data": [{}]

I am returning
finalDataArrayObj that is having same json data as given in the example still my pagination is not working.
I am sure I am doing something wrong in returning the response from dataSrc.
How can I resolve this issue?
Below I am attaching the ScreenShot of issue -

redpajama_set_name: RedPajamaStackExchange


Batch Mewing Lawyers advises on joint venture agreements for major projects.
Batch Mewing Lawyers can be engaged by a party to the joint venture or by jointly by the joint venture parties.
Batch Mewing Lawyers has assisted parties to work through complex procurement structures to ensure the suite of construction contracts for project delivery is practical and commercial for the parties involved.


text:
What would you do if...
I like to think of Turlock as a caring community.
There are dozens of service clubs, places of worship and volunteers who give of their time and money all year long to make our town a little bit nicer place to live.
But I'm sure that the majority of people living in Richmond, Calif. also thought they lived in a caring community — until last Saturday that is.
The Contra Costa Times reported that up to 20 people may have stood around and watched as a 15-year-old girl was gang raped outside of a school dance on Oct. 24.
"As many as seven people assaulted her as she lay on a bench, while others jeered, beat her, robbed her and took photos with their cell phones," reported the Times.
This story is appalling in many ways. Being the victim of rape is horrible enough, but to have a group of people see an atrocity happening and not do a thing to help is just plain evil.
As I was pondering the depths of depravity of these so-called human beings, it made me stop and think about doing the right thing in general. If I was passing by Richmond High School that night, would I have stopped and tried to intervene in the violence unfolding? I would like to think yes. What if the perpetrators threatened me with a knife? With a gun? Would I risk my life to help a stranger? I still would like to say yes, but it makes me hesitate in my answer.
What would you do if... is a popular game to play. I have often tormented my husband on long car rides with questions such as, "What would you do if I was in an accident and lost the use of my legs?" or "What would you do if my mother got sick and wanted to move in with us?"
This hypothetical situation game is a way to evaluate our loved ones' and our own responses to tragedy. But when tragedy actually strikes, will we do what we said we would?
"What would you do if terrorists attacked the plane you were on?" was a common 'what if' question, until Sept. 11, 2001 turned 'what if' into history.
The passengers of United Flight 93 on that September morning probably thought the chances of them being caught in the middle of a terrorist plot to hurt the United States was just as improbable as being abducted by aliens — until it became reality.
Those brave men and women didn't just talk about doing the right thing, they actually did it. When you think about the actions of the United Flight 93 passengers, it is nothing short of amazing. According to reports, the passengers decided that the only way to prevent the plane they were on from being used as a terrorist weapon was to rush the hijackers.
I'm pretty sure most of the passengers knew that their chosen course of action was likely to lead to their deaths. But they decided that their own mortality was not as important as doing the right thing.
This kind of courage and sacrifice is a rare thing. But if everyone acted with just one tenth of the inner strength that the United Flight 93 passengers had then there would be less suffering in the world, or at least ended one Richmond girl's personal horror a lot sooner.


text:
The Death Rattle of the Hungarian Left
/ Videos Worldview
Imagine there's no leftists. It's easy if you try. No protests in the streets, and in front of us, only cute white girls. That world exists, and it's called Hungary, where the left is tiny, impotent and despised. After ruling socialist Prime Minister Ferenc Gyurcsány admitted to lying to the public to get reelected in 2006 and also complained about Hungary being too conservative for his liking, the left was bounced out of power in 2010 in a landslide.
Incumbent PM Viktor Orbán of the right-wing Fidesz party set about remaking Hungary along traditionalist lines, promulgating a new constitution that defined marriage as between a man and a woman and kneecapped cultural Marxists in other ways. When Muslim rapefugees began streaming into Europe two years ago, Hungary said "HELL NO" to the European Union and built a border wall to keep them out. 98 percent of Hungarians voted to keep the EU from bringing migrants into their country last October, and when the referendum failed due to turnout being slightly too low (leftists boycotted the vote), Orbán announced plans to scrap the turnout requirement entirely.
For their efforts to keep Hungary Hungarian, Orbán and Fidesz were rewarded with a second landslide victory in 2014. Even after the left-wing parties formed a coalition, they could only win 38 seats out of a 199-seat legislature. MSZP, the largest leftist party, is now roughly the same size as Jobbik, an overtly nationalist party that thinks Orbán hasn't gone far enough. Now Fidesz is going a step further by kicking George Soros-funded NGOs out of the country, depriving leftist parties of their biggest source of support.
It's beautiful, isn't it? In America, a mudsharking homosexual of partial Jewish ancestry can't hold a speech without antifas starting riots and calling him a Nazi, all while the police sit and watch. In Hungary, antifas don't dare appear in public lest they get bathed in wood shampoo. After realizing that Orbán wouldn't bend to their temper tantrums, the Hungarian left just gave up, and the few remaining stragglers are forced to engage in ever more desperate stunts to stay relevant.
I saw this last week when I attended the "Füttykoncert," an anti-Vladimir Putin protest organized by leftist opposition party Együtt in Budapest. Putin made a state visit to Hungary last Thursday as part of a deal he's making with Orbán to help construct a nuclear power plant, and the leftists decided to register their disapproval by… blowing whistles at his motorcade. I'm not making this up. What, did they think blowing raspberries at him was too juvenile?
I attended the protest with Hungarian nationalist YouTuber Melissa Mészáros, who also translated for me. The leftists had already gotten off to a bad start before the Füttykoncert started, after police quashed their plans to hold their protest at Kossuth Lajos tér (Kossuth Lajos Square), just outside the Országház (Hungarian Parliament), where Putin and Orbán were meeting. They were forced to relocate to a desolate street corner along Bajcsy-Zsilinszky út, barely within eyeshot of the route Putin's motorcade would take.
The protest itself had pathetically low turnout: barely 300 people, not counting the cops. In an embarrassing twist for Együtt, which fashions itself a liberal, democratic party (Együtt is Hungarian for "together," recalling the campaign slogan of a certain failed American presidential candidate), the crowd disproportionately consisted of elderly communists with a bone to pick against capitalism. The remainder of the crowd consisted of a handful of pot-addled hippies, foreign journalists, and what Melissa described as "creepy-looking rat people" looking to start arguments and fights. Every so often, the protesters would start whistling in a migraine-inducing symphony; indeed, Együtt was handing out free whistles at the entrance.
The protesters were wielding EU and anarchist flags as well as signs comparing Putin to Hitler, decrying Orbán's cooperation with him and alluding to the 1989 revolution against communist rule in Hungary (an irony considering all the literal communists in attendance). Bizarrely, there was also a large contingent of Ukrainians there, wielding Ukrainian flags and drawing far-fetched parallels between Russia's annexation of Crimea and Nazi Germany's expansionism in the 1930's. A babushka with osteoporosis handed me a poorly-photocopied English-language flyer decrying Russia's recent military incursion into Ukraine. Soros must have cut his Hungarian rabble-rousing budget.
The actual speeches didn't begin until 6:15 pm, 15 minutes late; I guess tardiness is a universal feature of leftism. Együtt chairman Viktor Szigetvári took the stage at the beginning, and you can watch his speech below:
Szigetvári peppered his speech with little English phrases here and there (such as "Orbán is Putin's puppet"), even though he was ostensibly speaking to a Hungarian crowd. He was clearly hoping the globalist media would take notice of his dumb little protest and egg on a Ukrainian-style coup. Given what he did next, a coup is the only way he'll ever become prime minister.
About midway through Szigetvári's speech, he got word that Putin's motorcade was passing by. He suddenly yelled out, "Let's send Putin a message!" The crowd began whistling at full volume, loud enough to make me momentarily nauseous, and Szigetvári and several of his comrades gave Putin the finger as he sailed by.
Think about that for a second. Szigetvári and Együtt are ostensibly serious people who want to defeat Fidesz and win control of the Hungarian government. And their response to a foreign leader they don't like is to flip him the bird? How childish can you get? And they're wondering why Együtt is polling at one percent.
The rest of the protest was similarly retarded. After Szigetvári was finished, Zsuzsanna Szelényi took the stage. Melissa described her as a "Hungarian liberal Sarah Palin," a apt description, right down to her bizarre Midwestern-inflected accent. Szelényi began her speech by making a dumb joke about how it felt like she was in Moscow (the temperature was unusually cold that day by Budapest standards) and spent the rest of her time whining about how Putin was a dictator and Hungary's future lay with the European Union. She also complained about Orbán's plan to kick George Soros' NGOs out of the country, because then she might have to get a real job.
Afterwards, Együtt co-chair Péter Juhász gave a speech about how Hungary needs to accept refugees (hahahahahahaha):
(Remember to subscribe to my YouTube channel for more updates.)
Interestingly, there was no talk about helping the Gypsies, Hungary's own hometown racial minority, known for stealing bicycles and swiping sugar packets from McDonald's. As Melissa explained to me later, even Hungarian leftists hate Gypsies and want nothing to do with them. Unlike in the West, where leftists use minorities as a club to beat white people with, there will never be a "Gypsy Lives Matter" movement.
After Juhász was done speaking, the protest suddenly dispersed. Seriously. That was it. The Füttykoncert was scheduled to end at 8pm, but everyone left less than a half-hour after it began, wandering off to discuss what they were having for dinner. Apparently, taking down the evil fascists Putin and Orbán is less important than watching TV.
The experience was illuminating and pathetic all at once. Keep in mind that Orbán and Fidesz have been in power for less than seven years. In that amount of time, they've so gelded and crushed the left that they've been reduced to doing performance art pieces on dirty street corners in the vain hope that someone, somewhere will notice them. If Fidesz loses power, it'll be to Jobbik, a party that is even more right-wing. With Congress, the Supreme Court and the majority of state governments under Republican control, President Trump has the power to do in America what Orbán did in Hungary.
So the next time you watch antifas throwing Molotov cocktails and setting off fireworks to keep a man who shoved a buttplug up his ass on live television from speaking at a university, think of Hungary. The left can be defeated, reduced to sideshow acts, because Viktor Orbán has already done it in his country.
P.S. Independent reporting costs money. If you enjoy my work and want to see more of it, click here to donate. I greatly appreciate any and all support you can provide.
Read Next: Leftists Protest Chicago Public Schools Budget Cuts in Rogers Park
I Have Been Permanently Banned from Facebook
The Tea Party and the Rise of American Gerontocracy
Ann Sterzinger, Why Don't You Get a Job?
Previous Post Official Statement on the Daily Beast's Fake News Story Accusing Me of Attacking the Quebec City Mosque Next Post I Need Your Help to Fight the Daily Beast's Libel, Cover the Romanian Protests and Dutch Election, and More


text:
Інґмара Балоде (;  1981) — латиська поетеса й перекладач поезії, співредактор літературно-філософського порталу ¼ Satori та однойменного видавництва.

Вчилася в Коледжі прикладного мистецтва (на скульптора), закінчила відділення польської культури Латвійській академії культури.

Перекладає головно польську поезію XX—XXI ст. та сучасну американську поезію (зокрема таких авторів як Дорота Масловська, Е. Е. Каммінґс, Адам Заґаєвський, Джеймс Скайлер та ін.). Поза тим перекладає також поезію з чеської, словацької та російської.

Нагороди
 2007 — «Найкращий дебют року» (приз Союзу письменників Латвії за книгу віршів «Льодяники, якими можна порізати язик» (Ledenes, ar kurām var sagriezt mēli)

Посилання
 Сайт порталу ¼ Satori
 Деякі вірші у перекладі Юрія Садловського (с. 19)

Джерела
 «Альманах Четвертого міжнародного літературного фестивалю»

Латвійські поетеси
Латвійські перекладачі

redpajama_set_name: RedPajamaWikipedia


text:
Home » Cricket Home » News » Virat Kohli's Fate as ODI Skipper Will be Decided in Coming Days as Selectors Meet to Pick SA Tour Squad
Virat Kohli's Fate as ODI Skipper Will be Decided in Coming Days as Selectors Meet to Pick SA Tour Squad
Virat Kohli was rested for the T20Is and the first Test against New Zealand at home. (AP)
The BCCI top brass have said that India's tour of South Africa remains on schedule, though they're keeping a close watch on the situation.
Last Updated:December 01, 2021, 21:47 IST
Virat Kohli's future as India ODI captain will be decided this week when the national selection committee, led by Chetan Sharma, selects the squad for the upcoming tour of South Africa.
The BCCI top brass have said that India's tour of South Africa remains on schedule, though they're keeping a close watch on the situation surrounding the emergence of the new COVID-19 variant in that country.
While 2022 will primarily be dominated by T20Is due to another global event in Australia, there are only nine ODIs as of now in the next seven months with six (three each in South Africa and England) abroad and three in India.
Since there will be one bio-bubble, a jumbo squad is again expected to be selected across formats. The squad strength could be anything between 20 to 23, taking all formats into account.
'Lack of Vision in Grooming a Captain for Future': Dilip Vengsarkar Blames Selectors For Not Identifying Right Man to Replace Virat Kohli
IND vs SA, ICC Under-19 World Cup 2022: Skipper Yash Dhull's 82 Helps India Post 232 After Poor Start in Rain-hit Match
There are currently two schools of thought in the BCCI. One that believes that Kohli could be allowed to continue as there are only a few ODIs left. The other thought process is about not having two white ball skippers and giving Rohit enough time to prepare a potent team that could be serious title contenders for 2023 ODI World Cup scheduled to be held in India.
It is understood that there are strong arguments for both theories but the final call on Kohli's fate as ODI skipper will be taken by president Sourav Ganguly and secretary Jay Shah.
Kohli's inability to win any major multi-team event holds against him keeping the captaincy but his overall record has been more than decent in this format.
"The Indian squad will be announced in the next few days time. We will have everything ready from our end and then wait for the government's nod. If the government tell us to abort the trip, then we would, but we need to keep the squad selected and ready," a senior BCCI official told PTI on Wednesday.
During this week, there is BCCI's AGM on Saturday in Kolkata, where Chetan and company's renewal of tenure as per norms is a part of the agenda.
Length of the series
It has been learnt that as of now BCCI and Cricket South Africa are committed to playing a full series unless there is any specific advice from the Indian government against touring the Rainbow Nation.
However, there are some talk in the periphery about the three- Test series being curtailed by a match.
"We will know in a few days' time if the series would become a two-Test affair rather than three but there has been some back and forth discussions," a local commentator said on air on YouTube while calling the India 'A' vs South Africa 'A' second 'Test' in Bloemfontein.
Indian cricket team
first published:December 01, 2021, 21:39 IST


This is more than a course on how to give a Thai Massage.
This is a course about how to connect, how to adjust and how to give the best experience for another, as well as yourself.
Thai Yoga is a practice where two people move as one. It is the ultimate expression of Yoga, and a vehicle to making you the best therapist you can be.
Discover how to create confidence between two people.
Provide the best stretch and compression (the original Sports Massage) experience your partners will ever have.
Thai Yoga Massage training builds your confidence in stretching, pressing and communicating about the greatest physical experience you can offer. You will learn how to give a 60 or 90 minute Thai Yoga Massage that will have people raving about your skills. Now you can offer private Yoga experiences that will improve any lifestyle. What makes Thai Yoga Massage Training different than any other training is:- You learn how to move efficiently so that you benefit from giving Thai Yoga Massage.- You learn how to communicate the benefits of Thai Yoga Massage, and how to apply it to daily life.- You increase your confidence in stretching and manipulating joint range of motion.- This Thai Yoga Massage Training teaches you what you learn from the traditional sequence about the human body. With over 15 years of study and teaching Thai Yoga Massage, Gabe, founder of Gabe Yoga Academy, provides you with up close view on how to provide the most sought after experience in yoga and massage today.Applying a unique approach of step-by-step guidance, you learn EXACTLY where to press, stretch and how to apply proper body mechanics that will improve your health and physical comfort.


On November 8 and November 15, respectively, the city council will hold hearings for our acting deputy mayor for education (DME) Paul Kihn as well as a plan to put an expanded Banneker high school at the site of the closed Shaw middle school. Sign up is here, and more information is here and here, respectively.
Thank goodness for those hearings–because for a moment it looked like we didn't have public schools.
On the same day in October that I got a mass email from acting DME Paul Kihn exhorting me, as a member of the public, to give input on what I would like in a DCPS chancellor, I also got a mass email from a private education advocacy group, PAVE, extolling the virtues of a new high school partnership between DCPS and Bard College, for a high school yet to be created, located in a yet-to-be-determined place somewhere in wards 7 or 8.
This simply incredible (non)public engagement came just days after I spent several hours at the last public feedback session on the master facilities plan (MFP), run by the DME's office, where nothing was mentioned about the new Bard high school–nor about the newly announced plan for demolishing the closed Shaw middle school to build a brand new, enlarged campus for Banneker high school.
None of the communities involved had any knowledge or input, either.
In August, for instance, education advocates in Ward 7 asked the mayor to meet with them on the new Bard high school, to discuss its effect on existing DCPS high schools in the area, which are underenrolled.
This past weekend, after years advocating for re-opening DCPS's closed Shaw middle school, Shaw community members met in protest of a decision that pitted their need for a neighborhood middle school of right against the deep need for a renovation for Banneker.
So what do Bard, Banneker, and Shaw have to do with acting DME Paul Kihn?
–As deputy superintendent in Philadelphia, Kihn presided over school budget cuts and their aftermath–including the death of a child at a school that lacked a school nurse; attempts to change teacher compensation; and staff upheaval at the central office.
–At the same time, Kihn presided over school closures whose costs appear to have been underestimated, while new schools were created and two elementaries reconstituted without evidence that reconstitution would be effective.
–Kihn is a proponent of the portfolio model of schools, by which public schools with low test scores are either closed or converted to charters. (During Kihn's tenure, a Philadelphia school official called the portfolio model "dumping the losers.") DC's charter board has embraced this practice, overseeing dozens of closures in a decade. Both school closures as well as conversions could be enabled by DC's ESSA plan, which calls for another operator to take over any school with low test scores for 3 or more years running (see p. 35-6 here).
–Kihn helped lead public meetings concerning test-heavy school report cards that closely resemble the report cards slated to take effect for DC's schools in December. As in DC, parents expressed concern that schools would be effectively penalized for having poor resources and poor students.
–Kihn also participated in secret meetings about a universal lottery for Philadelphia schools (including, amazingly, private schools) that would be operated by a private company.
–Kihn helped create a "mystery shopping" program, in which officials posed as parents, to ensure charters were not denying admission to students. It closely resembles what charter board executive director Scott Pearson instituted in DC in 2012–either a charming coincidence or yet another tie between Kihn and Pearson, whose wives work together. More specifically, Kihn's wife works for Pearson's wife at the JPMorgan Chase Institute, which was founded by Pearson's wife and does economic analyses for, among other clients, JPMorgan Chase, which has invested hundreds of millions of dollars in charter schools. And both wives and Kihn worked at McKinsey, a consulting firm that, among other things, works with school districts on "improvements" in which private actors get public education dollars (oh, I mean make "investments").
In all of these, Kihn's work appears to embrace the major tenets of education reform: that all publicly funded schools are interchangeable; that rights are subordinate to choice; that test scores tell all; and that public schools are not civic institutions, but products, like toilet paper or cars or pens.
In the resulting churn of new schools and closures (or what might be termed product movement), there is no real accounting of costs, whether in dollars or neighborhoods or humanity–perhaps because those bearing both risk and cost are not the same people making the decisions (or profiting from them).
Possibly worse, the public is always late to its own party in this scheme: kept away from actual decision making, left without knowledge of what is really going on, the public is reduced to one of two roles: vacuous cheerleader or pedantic impediment.
Just days before the actual, living, breathing people in that picture above met to decry being left out of plans for something public in their community, funded with their money, the DC charter board met secretly to talk about charter reviews and renewals.
With the MFP soon to come out, it is not a far leap to connect the recent announcements about Bard, Banneker, and Shaw with the recent action of the charter board in helping to shape the educational landscape for years to come.
Now, we even have someone nominated as the new DME–with oversight of both DCPS and the MFP–to tie up the whole package of excluding the public from its own schools.
But that is part of the modus operandi of people like Bowser who seems to think that "governing" DCPS, to use the language in the Public Education Reform Amendment Act of 2007 further defined as "authority over" means unilateral, authoritarian control to do as she pleases as though she PRIVATELY OWNS DCPS and it is no longer a public service or asset–sneak up on people and hit them over the head before they know what has happened, then claim the decision can't be undone because money no one in the public knew was being spent was spent and no modifications, revisions or ideas for improvement can be made either. People who operate that way want us be believe it is a done deal and we are powerless to do anything about it. But they have been wrong about messing with Shaw middle school twice already and they will be wrong this time too.
The kind of power over the public that Bowser wants to wield, just like the kind of power over the public the current president is trying to wield, can only go so far before it backfires because it is not the way of this nation and people are not going to live with it.


In Transformers Reloaded+ Cat Love +1 HR of Cat & Keet, a funny and hilarious #cartoons compilation for kids, watch out for the Cat & Keet as they go for a wrestling , induldge in a romance, face a ghost attack and many more! Tune into this Live 1 hour cartoon compilation more non-stop fun and laughter!
This entry was posted in android market and tagged channel, friends, height, https, subscribe. Bookmark the permalink.


"This program is a thoughtful and innovative approach to mental and physical wellness. Too many mental health physicians and treatment clinics overlook the importance of exercise (purposeful body movement) in a client's recovery plan. Jeff's emphasis on empowerment, well-being and mindfulness is refreshing. His personal energy and enthusiasm are infectious!"
"Technique is critical to Jeff's program and before long I saw tangible results and was amazed. I have never been in better shape in my life. Our 6am workouts are something I really look forward to, mostly because I trust Jeff's professional knowledge, his genuine concern for my well-being and his constant encouragement to continue my fitness commitment and progress."
"I have found my first positive experience with exercise. Jeff has the ability to nurture, encourage and tap into one's psyche, as nobody else."
"Jeff's moving account of his own battles, the emphasis on the mind/body connection, and his caring and compassionate approach to fitness, all combine to make personal fitness program phenomenal. As a mental health care professional, this will help those dealing with mild depression and other more serious psychological ailments immensely. This innovative approach to exercise is conducive to maintaining a lifelong commitment to wellness. Patients will have a new respect for their potential and help them achieve the balance of believing enough in their ability and sense of what is healthy for their body so that will want to exercise consistently."
"This has been the only exercise regime that has succeeded for me. Consistent exercise has had positive effects with both my body and my mood. It has improved my self-esteem and depression. The exercises are gentle enough to avoid injury yet vigorous enough to make a profound difference. Other exercise programs have pushed too hard which made me feel like a weak failure. This program makes me feel like a success every day. Thanks Jeff. I feel great!"
"I now have a different take on exercise. Historically, my motto has been "no pain, no gain" which got me no place fast. I know now the connection between mind and body is the only way to live in serenity."
"Jeff's program has renewed confidence within me. His inspiring story helped give me hope when I was very low and filled with depression. In time, I began to feel my sad spirits lift. With Jeff's personal training program, I was able to find an outlet for my poor emotional states. My energy picked up, my self-image improved, and my overall quality of life was enhanced. I recommend his this to all my friends. Thank you."
"I was never a fan of exercise. It seemed like a time-consuming chore that only added stress to my life-another commitment I had to deal with. After working with Jeff, I now view exercise as a stress management tool. I can almost hear Jeff telling me to release the tension with every exhale. Now, I make time for exercise every other day and feel like I can handle anything that comes my way."
"I have never liked exercise, especially weight training. Jeff has taught me to feel the various muscles that were doing the exercises and I began to enjoy using my body. I could feel my muscles expand and contract, and as a result, my body became a vehicle for pleasure and not just shame."
"We wish we had known about this approach twenty years ago. Now that we exercise, the positive effect on our mood seems so obvious. Thanks for cluing us in, Jeff. We feel great!"


text:
Robert Stojanov
Jean Monnet Fellow at the RSCAS ph. +39 055 4685 537
Publications in Cadmus
Short bio – Robert Stojanov
Robert Stojanov is Jean Monnet Fellow at the Migration Policy
Centre (MPC) and at the Robert Schuman Centre for Advanced Studies (RSCAS). He
is environmental and population geographer focusing on drivers of migration in
general; environmental factors of population dynamics; social and economic
impacts of climate change and adaptation strategies; migration, remittances and
development; and effectiveness of development interventions such as development
aid. Robert received his PhD in Environmental Geography at the University of
Ostrava, and two master's degrees in History, Geography, Social Studies at the
University of Education in Hradec Králové, and Environmental Studies at the
Faculty of Social Sciences at Masaryk University in Brno. He was awarded a
Certificate for Climate Change & Its Impact at Brown University and
received awards for Excellence for Highly Commended Paper of 2015 and 2016
by Emerald Group Publishing.
Before joining the MPC, he served as Head of the Adaptation Strategies
Research Unit of the Center for Global Change Research at the Czech Academy of
Sciences, and as a assistant professor at Charles University, Mendel University
and Palacký University. He has experience from many field surveys dealing with
links between environment, population and development. Robert is (was) member
of Management Committee at several COST Actions, such as IS1101 'Climate Change
and Migration: Knowledge, Law and Policy, and Theory'; CA16111 International
Ethnic and Immigrant Minorities' Survey Data Network; CA16114 REthinking
Sustainability TOwards a Regenerative Economy; CA15217 Ocean Governance for
Sustainability – challenges, options and the role of science; and CA16233
Drylands Facing Change: Interdisciplinary Research on
Climate Change, Food Insecurity, Political Instability which are supported within Horizon 2020
programme. Robert is also member of the Editorial Board of the Migration and
Development journal.
Robert published the results of his research activities in several
respected journals such as The Geographical Journal, Asia Pacific Viewpoint,
Georgetown Journal of International Affairs, Communist and Post-Communist
Studies, Mitigation and Adaptation Strategies for Global Change, International
Journal of Climate Change Strategies and Management, Disaster Prevention and
Management, International Journal of Global Warming, Environmental Hazards,
Journal of Flood Risk Management, etc.
In the last few years, he has been attending lectures at a number of
foreign universities and institutions, such as Brown University, University
College London, the World Bank in Washington, D.C., University of Adger,
University of Durham, KU Leuven, etc. The results of his work can be found at http://www.stojanov.org
Research topics: Drivers of Migration, Environmental Migration,
Climate Change impacts and Adaptation, Remittances, Development Aid
Geographic areas: South Asia, Middle East, sub-Saharan Africa,
small islands, Central and East Europe


Brand Names Often Included: Guess, Anne Klein, Nine West, Coach, Michael Kors, Vera Bradley, Kate Spade, Ralph Lauren, Fossil, Dooney & Bourke, Rampage & more as well as Nationally known Private Label brands.
Types of Items Often Included: Shoulder Bags, Evening Bags, Cross Body Bags, Reversible, Satchels, Totes, Purses, Bucket Bags, & More.
Price: Price varies by lot, contact us for individual lot pricing.
Customer Returns: These are customer returns hand bags, purses etc. Some items may be scratched, or have blemishes etc. Some items will still have retail tags. However all items included are customer returns.


Gallery of Cheap 6 Seater Dining Tables And Chairs (View 24 of 25 Photos)Beautiful 6 Seater Dining Table Sets Made In Solid Wood Throughout Widely Used Cheap 6 Seater Dining Tables And Chairs | Find the Best Interior Design Ideas to Match Your Style.
It is always really useful to buy cheap 6 seater dining tables and chairs after taking a good consideration at the item on the market, check out their purchase price, investigate then purchase the most excellent products at the most beneficial value. It could allow you to in ordering the perfect dining room for every house to freshen up, also redecorate it with the most suitable items and accessories to make it something to be enjoyed for some time.
Then what appears to be more, it is possible to see better deals on dining room each time you look around or especially as soon as you look to decide to buy cheap 6 seater dining tables and chairs. Before buying any kind of furniture yourself, make sure to make the right steps to ensure that you are absolutely searching for the things that you must get after that, make sure you are bringing your focus from the internet for your thing you buy, where you are likely to be absolute to have the possibility to get the perfect value reasonable.
It is necessary for your living area to be provided with the suitable cheap 6 seater dining tables and chairs combined with perfectly setting up to allow highest coziness to everyone. A perfect mixtures and also arrangement of the dining room are going to enhances the room decoration of a room thereby making it a rise in look good also comfy, showing this fresh life to your place. Right before you attempt to getting a product also in fact, before you also agree to looking around for a prospective purchase there are many benefits you should try to make sure you do first.
The best method to find the best dining room is actually by planning a proper size of that room in your home and the existed decoration decorations. Purchasing the right cheap 6 seater dining tables and chairs will give you a well layout, outstanding and more interesting place. Explore on the internet to make ideas for the right dining room. Then, take a look at the location you have available, as well as your family members requires and you are ready to create a room that are available to love for years to come.
Following information will be helpful everyone to go with cheap 6 seater dining tables and chairs as a result, by recognizing you will find different pieces influence a room. The great news is usually possible make your house stunning with decor that fits the right design and style, there are actually a wide range of ways to get passionate relating having a house gorgeous, no matter what your style and personal taste. Therefore, our opinions is to take a moment making plans for an affordable choice and figure out what we have a preference for and providing the house something that is superb to you.
There are actually a wide range of important things to examine in choosing any cheap 6 seater dining tables and chairs. Make the most out of your dining room through using several furnishings advice, the ideal start line should be to know very well what you intend on using the dining room for. Using what we want to do on the dining room could motivate the products you happen to make.
Whether or not you are remodelling your living area or maybe arranging the first place, establishing the right cheap 6 seater dining tables and chairs is an essential factor. Learn from all these guides to provide the impression you seek it does not matter the space you have to work with. The best solution to establish preparing dining room is simply to decide a center of attention for the room, at that time make plans for the other parts of the pieces suit all-around the dining room.
Making a choice on the right dining room needs to have several conditions to care about regardless of its right size or even theme. To keep away from delivering the room unclearly, take a look at a few recommendations that shared by the professionals for deciding on the right cheap 6 seater dining tables and chairs. It is always perfect when you establish creative appeal. Color scheme and individuality help to make any existing space feel as though it can be really all yours. Combine your main taste using the persistent colors to make it come across visually more appealing. The appropriate appearance, structure also quality makes wonderful the visual appeal of your home.


text:
Comcast Corp
U.S. Rank
Industry: Media
Green Score: 0.00%
Energy Productivity Score: 0.00%
Carbon Productivity Score: 0.00%
Water Productivity Score: 23.60%
Waste Productivity Score: 0.00%
Comcast Corporation (formerly registered as Comcast Holdings)[note 1] is an American global telecommunications conglomerate that is the largest broadcasting and cable television company in the world by revenue. It is the second-largest pay-TV company after AT&T, largest cable TV company and largest home Internet service provider in the United States, and the nation's third-largest home telephone service provider. Comcast services U.S. residential and commercial customers in 40 states and in the District of Columbia. The company's headquarters are located in Philadelphia, Pennsylvania. As the owner of the international media company NBCUniversal since 2011, Comcast is a producer of feature films and television programs intended for theatrical exhibition and over-the-air and cable television broadcast. Source: Wikipedia
Newsweek Green Score
1 L'Oreal SA 89.90% France Consumer Staples
2 Centrica PLC 88.70% United Kingdom Utilities
3 Enbridge Inc 86.00% Canada Energy
U.S. Top 10
Investing in innovation—and allowing employees to work from home—can reduce a company's footprint.
Jessica Firger
The beloved toy company has found innovative ways to make its iconic brands more eco-friendly.
This company helps corporations meet their bottom line while still helping to sustain the environment's resources.
Why Cisco, the worldwide leader in IT and networking, made it to the top spot in this year's Green Ranking?
Cisco topped the Green Ranking 2017 among the U.S. 500.
Learn more about the top company in each country of the G8 in the Green Ranking Global List
Among highly industrialized economies, the top green company is based in Europe.
Loreal is the best performing company on the Green Ranking Global-500 and there are a lot of reasons for its success.
With a 100% water productivity score Loreal jumped 27 spots this year to the top of the Green Rankin
July 19 Issue
The Best of E3 2019: Our Picks For The Most Exciting (and Most Promising)
Permanent Record: A Billion Year Archive Stored in the Solar System
Apollo Astronauts Reflect on JFK's Challenge and the Future of Space Travel


This Military Service Page was created/owned by MAJ John Moore (SaberAlpha 10) to remember Veara, John Vincent, 1SG.
It appears John had only 12 days left in country before rotating back to the states when he was killed.
Although I did not personally know John Veara I served in the same unit two month after he was KIA. He is truly missed by all that knew and loved him and especially the men of Alpha Troop 3rd Armored Reconnaissance Squadron 4th United States Calvary. He is one of our heroes.
NEW BEDFORD - During December, the 471st flag to fly atop Old Glory Tower in the North End honors the memory of Vietnam War hero, U.S. Army First Sgt. John Vincent Veara, who was killed in action Aug. 19, 1968 at age 37 of small arms fire. He served his country for 16 years.
Veara, a native of Long Island, was stationed with Co. D. , 2nd Battalion, 3rd training Brigade at Ft. Bliss, TX before his assignment to A Troop, 3rd Squadron, 4th Cavalry, 25th Infantry Division. Veara met his wife, Maja, in Germany while serving abroad and they were married in Germany on a Christmas Eve.
Pamela LaBonte, Veara's sister, said "he had been wounded twice before, but he volunteered to stay in because he felt somebody had to be there. He wrote saying to wish him luck because he only had 40 days left there. Then he was going to Germany for two years and then ... retiring."
Veara's death left his widow, Maja, with three children ages 15, 7 and a newborn to raise. She and the kids settled in Acushnet.
Veara received numerous posthumous awards including the Bronze Star, Silver Star and Purple Heart.
"First Sgt. Veara distinguished himself by heroic actions on 19 Aug. 1968, while serving as 1st Sgt. with A Troop, 3rd Squadron, 4th Cavalry, in the Republic of Vietnam," according to Col. Neil Chapin in a ceremony presenting Veara's wife with his decorations.
"While on a combat operation, A Troop came under an intense enemy attack. During the ensuing battle," he said. Sgt. Veara's track was hit by an RPG round. Immediately, Sgt. Veara began to direct his crew in laying down heavy fire towards enemy positions. Upon seeing that a track commander was wounded, Sgt. Veara, with complete disregard for his own safety, exposed himself to a heavy volume of enemy fire as he administered first aid and evacuated the man. He then continued to direct his men until he was mortally wounded. His valorous actions contributed immeasurably to the success of the mission and the defeat of the enemy force."
Veara received the following medals, many of which were awarded for gallantry in action the day he died: two Silver Stars, 3 Bronze Stars, three Purple Hearts, Gallantry Cross with palm, Military Merit Medal, Good Conduct Medal, National Defense Medal, Vietnam Campaign Medal, Vietnam Service Medal from the Vietnamese Government, Vietnam Service Badge, National Service Medal, Expert Cannoneer Badge, Sharpshooter Badge (Rifle), and Marksman Badge (Pistol).
Veara's name is inscribed on the Vietnam Memorial Wall in Washington on panel 47W, line 005. Many of his uniforms and medals are currently displayed at the Fort Taber Military Museum.
Roy Veara, John's middle son, is an Army veteran like his dad. He said in a Standard-Times story that "it still hurts every time I hear taps. It's still tough to hold back tears." Roy was only seven years old when his father died in 1968.
Veara's widow Maja (Gress), became an active member of the "Gold Star Wives of America" as well as the VFW. They had three sons: Gerold Veara of New Mexico, Roy Veara of New Bedford and John Veara, formerly of Acushnet.
Veara also had three siblings; a sister, Pamela LaBonte of North Dartmouth, two brothers, Richard Veara of New York and the late Robert Veara. He is also survived by two grandchildren: Amanda Veara of New Bedford and Shaun Veara of Fairhaven, as well as his sister-in-law, Liselotte Casey of Acushnet.


text:
HouseOfNames > Napleton
Napleton History, Family Crest & Coats of Arms
The ancient history of the Napleton name begins with the ancient Anglo-Saxon tribes of Britain. The name is derived from when the family resided near an orchard or a homestead where apples were grown. The Old English word for orchard is æppeltun, which is a compound word formed from æppel, which means apple, and tun, which means enclosure. The surname may also be derived from residency near the various settlements called Appleton in Cheshire, Kent, and Yorkshire, among other places.
Early Origins of the Napleton family
The surname Napleton was first found in Lancashire at Widness with Appleton, a township, in the parish and union of Prescot, hundred of West Derby. The estate of Widness with Appleton was once held by the family but was lost under tragic circumstances. "Appleton gave name to an ancient family, the last of whom left two children under the guardianship of one Hawarden, who was reported to have murdered them. The estate afterwards belonged to the Gellibrands, who succeeded the Hawardens." [1]CITATION[CLOSE]
Lewis, Samuel, A Topographical Dictionary of England. Institute of Historical Research, 1848, Print.
Some of the first records of the name include John de Appelton who represented York in the parliament in the reign of Edward II and William Appleton who was sheriff of that city in the reign of James II. [2]CITATION[CLOSE]
Guppy, Henry Brougham, Homes of Family Names in Great Britain. 1890. Print.
The Hundredorum Rolls of 1273 include: Thomas de Appelton in Oxfordshire; and Wydo de Appelton in Yorkshire. The Yorkshire Poll Tax Rolls of 1379 list Willelmus de Appilton. [3]CITATION[CLOSE]
Bardsley, C.W, A Dictionary of English and Welsh Surnames: With Special American Instances. Wiltshire: Heraldry Today, 1901. Print. (ISBN 0-900455-44-6)
Further north in Scotland, one of the first records there was Robert de Aplinden or Aplintoune in Annandale who forfeited his lands in the reign of Robert Bruce. Later Robert de Aplinton or Appylton had a charter of land in the burgh of Invemys from Robert II in 1378. [4]CITATION[CLOSE]
Early History of the Napleton family
This web page shows only a small excerpt of our Napleton research.
Another 80 words (6 lines of text) covering the years 1650, 1654 and 1650 are included under the topic Early Napleton History in all our PDF Extended History products and printed products wherever possible.
Napleton Spelling Variations
Until quite recently, the English language has lacked a definite system of spelling rules. Consequently, Anglo-Saxon surnames are characterized by a multitude of spelling variations. Changes in Anglo-Saxon names were influenced by the evolution of the English language, as it incorporated elements of French, Latin, and other languages. Although Medieval scribes and church officials recorded names as they sounded, so it is common to find one person referred to by several different spellings of his surname, even the most literate people varied the spelling of their own names. Variations of the name Napleton include Appleton, Apelton, Apleton, Appletown, Apylton and others.
Early Notables of the Napleton family (pre 1700)
Distinguished members of the family include Henry Appleton ( fl. 1650-1654), English captain in the navy and commodore. He was a townsman and presumably a native of Hull; but his name does not appear in any list of naval officers during the civil...
Another 42 words (3 lines of text) are included under the topic Early Napleton Notables in all our PDF Extended History products and printed products wherever possible.
Migration of the Napleton family to the New World and Oceana
Searching for a better life, many English families migrated to British colonies. Unfortunately, the majority of them traveled under extremely harsh conditions: overcrowding on the ships caused the majority of the immigrants to arrive diseased, famished, and destitute from the long journey across the ocean. For those families that arrived safely, modest prosperity was attainable, and many went on to make invaluable contributions to the development of the cultures of the new colonies. Research into the origins of individual families in North America revealed records of the immigration of a number of people bearing the name Napleton or a variant listed above:
Napleton Settlers in United States in the 17th Century
Jacob Napleton, who arrived in Virginia in 1649 [5]CITATION[CLOSE]
Thomas Napleton, who landed in Barbados in 1717 [5]CITATION[CLOSE]
Napleton Family Crest Products
Napleton Armorial History With Coat of Arms
Napleton Coat of Arms & Surname History Package
Napleton Family Crest Image (jpg) Heritage Series
Napleton Coat of Arms/Family Crest Key-chain
Napleton Coat of Arms/Family Crest Coffee Mug
Napleton Armorial History with Frame
Napleton Framed Surname History and Coat of Arms
Hundredorum Rolls
Poll Tax
Fl.
^ Lewis, Samuel, A Topographical Dictionary of England. Institute of Historical Research, 1848, Print.
^ Guppy, Henry Brougham, Homes of Family Names in Great Britain. 1890. Print.
^ Bardsley, C.W, A Dictionary of English and Welsh Surnames: With Special American Instances. Wiltshire: Heraldry Today, 1901. Print. (ISBN 0-900455-44-6)


text:
CTObjectRef CTStringFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTJSONOptions options, CTErrorRef * error);
CTObjectRef CTObjectFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTJSONOptions options, CTErrorRef * error);
void CTJSONSerialiseRecursive(CTAllocatorRef alloc, CTStringRef JSON, void * obj, CTOBJECT_TYPE type, CTJSONOptions options);
void CTJSONSerialiseAndSendOverNetworkRecursive(CTAllocatorRef alloc, CTStringRef JSON, void * obj, CTOBJECT_TYPE type, CTJSONOptions options, int fd);
CTObjectRef CTJSONParse2(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTJSONOptions options, CTErrorRef * error);
CTObjectRef CTDictionaryFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTJSONOptions options, CTErrorRef * error);
CTObjectRef CTLiteralFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTErrorRef * error);
CTObjectRef CTNumberFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTErrorRef * error);
CTObjectRef CTArrayFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTJSONOptions options, CTErrorRef * error);

CTObjectRef CTJSONParse(CTAllocatorRef restrict alloc, const char * restrict JSON, CTJSONOptions options, CTErrorRef * error)
{
	uint64_t start = 0;
	CTAllocatorRef lalloc = CTAllocatorCreate();
	CTStringRef JSONString = CTStringCreate(lalloc, JSON);
	CTObjectRef retVal = CTJSONParse2(alloc, JSONString, &start, options, error);
	CTAllocatorRelease(lalloc);
	return retVal;
}

CTObjectRef CTJSONParse2(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTJSONOptions options, CTErrorRef * error)
{
	CTObjectRef retVal = CTObjectCreate(alloc, NULL, CTOBJECT_NOT_AN_OBJECT);
	if (CTStringLength(JSON))
	{
		for (;*start < CTStringLength(JSON); (*start)++)
		{
			if (isgraph(CTStringUTF8String(JSON)[*start]))
			{
				switch (CTStringUTF8String(JSON)[*start])
				{
					case '{':
						return CTDictionaryFromJSON(alloc, JSON, start, options, error);
					case '[':
						return CTArrayFromJSON(alloc, JSON, start, options, error);
					case '"':
					case '\'':
						return CTStringFromJSON(alloc, JSON, start, options, error);
					case '-':
					case '0':
					case '1':
					case '2':
					case '3':
					case '4':
					case '5':
					case '6':
					case '7':
					case '8':
					case '9':
						return CTNumberFromJSON(alloc, JSON, start, error);
					case 'n':
					case 't':
					case 'f':
						return CTLiteralFromJSON(alloc, JSON, start, error);
				}
			}
		}
	}
	else
	{
		const char * err = "Empty JSON string";
		if (error)
		{
			*error = CTErrorCreate(alloc, err, CTJSON_PARSE_ERROR);
		}
	}
	return retVal;
}

CTObjectRef CTDictionaryFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTJSONOptions options, CTErrorRef * error)
{
	CTDictionaryRef dictionary = CTDictionaryCreate(alloc);
	CTObjectRef key = NULL;
	CTObjectRef value = NULL;
	const char * err = "Formatting error in dictionary";
	++(*start);
	const char * JSONC = CTStringUTF8String(JSON);

	if (*start < CTStringLength(JSON))
	{
		do
		{
			if (JSONC[*start] != '}')
			{
				if (isgraph(JSONC[*start]))
				{
					switch (JSONC[*start])
					{
						case '"':
						case '\'':
							key = CTJSONParse2(alloc, JSON, start, options, error);
							break;
						case ':':
							++(*start);
							value = CTJSONParse2(alloc, JSON, start, options, error);
							break;
						case ',':
							break;
						default:
							if (error)
							{
								*error = CTErrorCreate(alloc, err, CTJSON_PARSE_ERROR);
							}
							return CTObjectCreate(alloc, dictionary, CTOBJECT_TYPE_DICTIONARY);
					}
					if (CTObjectNonNilAndType(key, CTOBJECT_TYPE_STRING) && value)
					{
						CTDictionaryAddEntry(dictionary, CTStringUTF8String(CTObjectValue(key)), value);
						CTObjectRelease(key);
						key = value = NULL;
					}
				}
			}
		} while (*start < CTStringLength(JSON) && JSONC[(*start)++] != '}');
	}

	if ((key || value) && !(key && value))
	{
		if (error)
		{
			*error = CTErrorCreate(alloc, err, CTJSON_PARSE_ERROR);
		}
	}
	return CTObjectCreate(alloc, dictionary, CTOBJECT_TYPE_DICTIONARY);
}

CTObjectRef CTArrayFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTJSONOptions options, CTErrorRef * error)
{
    CTArrayRef array = CTArrayCreate(alloc);
	++(*start);
	const char * JSONC = CTStringUTF8String(JSON);
    while (*start < CTStringLength(JSON))
	{
		switch (JSONC[*start])
        {
			case ',':
            case ']':
				break;
			default:
				CTArrayAddEntry2(array, CTJSONParse2(alloc, JSON, start, options, error));
				break;
		}
		if (JSONC[(*start)++] == ']') break;
	}
	return CTObjectCreate(alloc, array, CTOBJECT_TYPE_ARRAY);
}

CTObjectRef CTStringFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTJSONOptions options, CTErrorRef * error)
{
    CTStringRef string = CTStringCreate(alloc, "");
	const char * JSONC = CTStringUTF8String(JSON);
	char character[3];
	uint64_t string_start_for_errors = *start;
	for (++(*start); *start < CTStringLength(JSON) && JSONC[*start] != (options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"'); ++(*start))
	{
		character[2] = 0;
		switch (JSONC[*start])
		{
			case '\\':
				if (*start + 1 < CTStringLength(JSON))
				{
					++(*start);
					switch (JSONC[*start])
					{
						case '/':
						case '\\':
						case '"':
							CTStringAppendCharacter(string, JSONC[*start]);
							break;
						case 'b':
							CTStringAppendCharacter(string, '\b');
							break;
						case 'f':
							CTStringAppendCharacter(string, '\f');
							break;
						case 'n':
							CTStringAppendCharacter(string, '\n');
							break;
						case 'r':
							CTStringAppendCharacter(string, '\r');
							break;
						case 't':
							CTStringAppendCharacter(string, '\t');
							break;
						case 'u':
							if (*start + 4 < CTStringLength(JSON))
							{
								const char * unicode = &JSONC[*start + 1];
								char just_hex[5];
								strncpy(just_hex, unicode, 4);
								uint32_t unicode_as_uint = (uint32_t)strtoul(just_hex, NULL, 0x10);
								uint8_t count = 0;
								if (unicode_as_uint < 0x80)
								{
									count = 1;
								}
								else if (unicode_as_uint < 0x800)
								{
									count = 2;
								}
								else if (unicode_as_uint < 0x10000)
								{
									count = 3;
								}

								if (count != 0)
								{
									char result[4] = {0};
									for (uint8_t i = count - 1; i > 0; --i)
									{
										result[i] = (char) 0x80 | (unicode_as_uint & 0x3F);
										unicode_as_uint >>= 6;
									}

									for (uint8_t i = 0; i < count; ++i)
									{
										unicode_as_uint |= 1 << (7 - i);
									}

									result[0] = unicode_as_uint;
									CTStringAppendCharacters(string, result, count);
								}
								*start += 4;
							}
							break;

						default:
							if (error)
							{
								char err[0x100];
								memset(err, 0, 0x100);
								sprintf(err, "Invalid escaped character at index %llu", string_start_for_errors);
								*error = CTErrorCreate(alloc, err, CTJSON_PARSE_ERROR);
							}
							break;
					}
				}
				break;
			default:
				CTStringAppendCharacter(string, JSONC[*start]);
				break;
		}
	}

	if (JSONC[*start] != (options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"'))
	{
		char err[0x100];
		memset(err, 0, 0x100);
		sprintf(err, "Non-terminated string in JSON at index %llu", string_start_for_errors);
		if (error)
		{
			*error = CTErrorCreate(alloc, err, CTJSON_PARSE_ERROR);
		}
		++(*start);
	}
	return CTObjectWithString(alloc, string);
}

CTObjectRef CTNumberFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTErrorRef * error)
{
	assert(alloc);
	CTObjectRef retVal = NULL;
	const char * err = NULL;
	CTAllocatorRef allocl = CTAllocatorCreate();
	CTStringRef numberString = CTStringCreate(allocl, "");
	CTStringRef exponentString = CTStringCreate(allocl, "");
	char * pEnd = NULL;

	const char * JSONC = CTStringUTF8String(JSON);

	if (*start < CTStringLength(JSON))
	{
		if (JSONC[*start] == '-' || JSONC[*start] == '+')
		{
			CTStringAppendCharacter(numberString, JSONC[(*start)++]);
		}
	}

	while (*start < CTStringLength(JSON) && (isdigit(JSONC[*start]) || JSONC[*start] == '.'))
	{
		if (JSONC[*start] == '.' && CTStringContainsString(numberString, "."))
		{
			err = "A number was found that contained more than one decimal point";
			if (error)
			{
				*error = CTErrorCreate(alloc, err, CTJSON_PARSE_ERROR);
			}
			while (*start < CTStringLength(JSON) && JSONC[*start] != ',' && JSONC[*start] != ']' && JSONC[*start] != '}') ++(*start);
		}
		CTStringAppendCharacter(numberString, JSONC[(*start)++]);
		if (CTStringLength(numberString) > 1 && CTStringUTF8String(numberString)[0] == '0' && !CTStringContainsString(numberString, "."))
		{
			err = "A number was found that started with zero";
			if (error)
			{
				*error = CTErrorCreate(alloc, err, CTJSON_PARSE_ERROR);
			}
			while (*start < CTStringLength(JSON) && JSONC[*start] != ',' && JSONC[*start] != ']' && JSONC[*start] != '}') ++(*start);
		}
	}

	if (*start < CTStringLength(JSON) && tolower(JSONC[*start]) == 'e')
	{
		++(*start);
		if (*start < CTStringLength(JSON) && JSONC[*start] == '-')
		{
			CTStringAppendCharacter(exponentString, JSONC[(*start)++]);
		}
		else if (*start < CTStringLength(JSON) && JSONC[*start] == '+')
		{
			++(*start);
		}

		while (*start < CTStringLength(JSON) && isdigit(JSONC[*start]))
		{
			CTStringAppendCharacter(exponentString, JSONC[(*start)++]);
		}

		if (*start < CTStringLength(JSON) && JSONC[*start] == '.')
		{
			err = "E notation cannot be a floating point number";
			if (error)
			{
				*error = CTErrorCreate(alloc, err, CTJSON_PARSE_ERROR);
			}
			while (*start < CTStringLength(JSON) && JSONC[*start] != ',' && JSONC[*start] != ']' && JSONC[*start] != '}') ++(*start);
		}
	}

	long exponent = strtol(CTStringUTF8String(exponentString), &pEnd, 0);
	if (CTStringContainsString(numberString, "."))
	{
		double Double = strtod(CTStringUTF8String(numberString), &pEnd);
		if (pEnd && pEnd != JSONC)
		{
			if (CTStringLength(exponentString))
			{
				if (exponent <= 15)
				{
					retVal = CTObjectWithNumber(alloc, CTNumberCreateWithDouble(alloc, Double * pow(10, exponent)));
				}
				else
				{
					retVal = CTObjectWithLargeNumber(alloc, CTLargeNumberCreate(alloc, CTNumberCreateWithDouble(alloc, Double), CTNumberCreateWithLong(alloc, exponent)));
				}
			}
			else
			{
				retVal = CTObjectWithNumber(alloc, CTNumberCreateWithDouble(alloc, Double));
			}
		}
	}
	else
	{
		int64_t Long = strtoll(CTStringUTF8String(numberString), &pEnd, 0);
		if (CTStringLength(exponentString))
		{
			if (exponent <= 15)
			{
				retVal = CTObjectWithNumber(alloc, CTNumberCreateWithDouble(alloc, Long * pow(10, exponent)));
			}
			else
			{
				retVal = CTObjectWithLargeNumber(alloc, CTLargeNumberCreate(alloc, CTNumberCreateWithLong(alloc, Long), CTNumberCreateWithLong(alloc, exponent)));
			}
		}
		else
		{
			retVal = CTObjectWithNumber(alloc, CTNumberCreateWithLong(alloc, Long));
		}
	}
	CTAllocatorRelease(allocl);
	return retVal;
}

CTObjectRef CTLiteralFromJSON(CTAllocatorRef alloc, const CTString * restrict JSON, uint64_t * start, CTErrorRef * error)
{
	const char * err = "A JSON literal that was not true, false or null was found";
	uint8_t size = 4;

	const char * JSONC = CTStringUTF8String(JSON);
	switch (JSONC[*start])
	{
		case 't':
			if (CTStringLength(JSON) - *start >= size && !strncmp(JSONC + *start, "true", size))
			{
				*start += size;
				return CTObjectCreate(alloc, CTNumberCreateWithUnsignedInt(alloc, 1), CTOBJECT_TYPE_NUMBER);
			}
		case 'f':
			size = 5;
			if (CTStringLength(JSON) - *start >= size && !strncmp(JSONC + *start, "false", size))
			{
				*start += size;
				return CTObjectCreate(alloc, CTNumberCreateWithUnsignedInt(alloc, 0), CTOBJECT_TYPE_NUMBER);
			}
		case 'n':
			if (CTStringLength(JSON) - *start >= size && !strncmp(JSONC + *start, "null", 4))
			{
				*start += size;
				return CTObjectCreate(alloc, CTNullCreate(), CTOBJECT_TYPE_NULL);
			}
		default:
			if (error)
			{
				*error = CTErrorCreate(alloc, err, CTJSON_PARSE_ERROR);
			}
			break;
	}
	return CTObjectCreate(alloc, NULL, CTOBJECT_NOT_AN_OBJECT);
}

CTStringRef CTJSONSerialise(CTAllocatorRef alloc, const CTObject * restrict JSON, CTJSONOptions options)
{
    CTStringRef retVal = CTStringCreate(alloc, "");
    CTJSONSerialiseRecursive(alloc, retVal, CTObjectValue(JSON), CTObjectType(JSON), options);
    return retVal;
}

CTStringRef CTJSONSerialiseAndSendOverNetwork(CTAllocatorRef alloc, const CTObject * restrict JSON, CTJSONOptions options, int fd)
{
	CTStringRef retVal = CTStringCreate(alloc, "");
	CTJSONSerialiseAndSendOverNetworkRecursive(alloc, retVal, CTObjectValue(JSON), CTObjectType(JSON), options, fd);
	return retVal;
}

void CTJSONSerialiseRecursive(CTAllocatorRef alloc, CTStringRef JSON, void * obj, CTOBJECT_TYPE type, CTJSONOptions options)
{
    uint64_t count = 0;

    if (type == CTOBJECT_TYPE_DICTIONARY)
    {
        count = CTDictionaryCount(obj);
        CTStringAppendCharacter(JSON, '{');
    }
    else if (type == CTOBJECT_TYPE_ARRAY)
    {
        count = CTArrayCount(obj);
        CTStringAppendCharacter(JSON, '[');
    }

	switch (type)
	{
		case CTOBJECT_TYPE_STRING:
		{
			CTAllocatorRef local_alloc = CTAllocatorCreate();
			CTStringAppendCharacter(JSON, options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"');
			CTStringAppendCharacters(JSON, CTStringUTF8String(CTStringReplaceCharacterWithCharacters(local_alloc, obj, ^const char *(const char character) {
				if (options & CTJSONOptionsSingleQuoteStrings)
				{
					return character == '\'' ? "\\'" : NULL;
				}
				return character == '"' ? "\\\"" : NULL;
			})), CTSTRING_NO_LIMIT);
			CTStringAppendCharacter(JSON, options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"');
			CTAllocatorRelease(local_alloc);
			break;
		}
		case CTOBJECT_TYPE_NUMBER:
		{
			double intpart;
			if (CTNumberType(obj) == CTNUMBER_TYPE_DOUBLE && modf(CTNumberDoubleValue(obj), &intpart))
			{
				char str[(unsigned)ceil(log10(CTNumberDoubleValue(obj)) + 0x10)];
				sprintf(str, "%Lf", CTNumberDoubleValue(obj));
				CTStringAppendCharacters(JSON, str, CTSTRING_NO_LIMIT);
			}
			else
			{
				char str[(unsigned)ceil(log10(CTNumberLongValue(obj)) + 1)];
				sprintf(str, "%lli", CTNumberLongValue(obj));
				CTStringAppendCharacters(JSON, str, CTSTRING_NO_LIMIT);
			}

			break;
		}
		case CTOBJECT_TYPE_NULL:
			CTStringAppendCharacters(JSON, CTNullValue(obj), CTSTRING_NO_LIMIT);
			break;
		case CTOBJECT_TYPE_LARGE_NUMBER:
		{
			char str[(unsigned)(ceil(log10(CTNumberDoubleValue(CTLargeNumberBase(obj)))) + 7 + ceil(log10(CTNumberLongValue(CTLargeNumberBase(obj)) + 1))) + 1];
			if (CTNumberType(CTLargeNumberBase(obj)) == CTNUMBER_TYPE_DOUBLE)
			{
				sprintf(str, "%Lfe%lli", CTNumberDoubleValue(CTLargeNumberBase(obj)), CTNumberLongValue(CTLargeNumberExponent(obj)));
			}
			else
			{
				sprintf(str, "%llie%lli", CTNumberLongValue(CTLargeNumberBase(obj)), CTNumberLongValue(CTLargeNumberExponent(obj)));
			}
			CTStringAppendCharacters(JSON, str, CTSTRING_NO_LIMIT);
			break;
		}

		default:
		{
			void * ptr = NULL;
			CTOBJECT_TYPE valueType = 0;
			for (uint64_t i = 0; i < count; ++i)
			{
				switch (type)
				{
					case CTOBJECT_TYPE_DICTIONARY:
						ptr = CTObjectValue(CTDictionaryEntryValue(CTDictionaryEntryAtIndex(obj, i)));
						valueType = CTObjectType(CTDictionaryEntryValue(CTDictionaryEntryAtIndex(obj, i)));
						CTStringAppendCharacter(JSON, options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"');
						CTStringAppendCharacters(JSON, CTStringUTF8String(CTDictionaryEntryKey(CTDictionaryEntryAtIndex(obj, i))), CTSTRING_NO_LIMIT);
						CTStringAppendCharacter(JSON, options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"');
						CTStringAppendCharacter(JSON, ':');
						break;
					case CTOBJECT_TYPE_ARRAY:
						ptr = CTObjectValue(CTArrayObjectAtIndex(obj, i));
						valueType = CTObjectType(CTArrayObjectAtIndex(obj, i));
						break;
					default:
						break;
				}

				CTJSONSerialiseRecursive(alloc, JSON, ptr, valueType, options);

				if (i < (count - 1))
				{
					CTStringAppendCharacter(JSON, ',');
				}
			}

			if (type == CTOBJECT_TYPE_DICTIONARY)
			{
				CTStringAppendCharacter(JSON, '}');
			}
			else if (type == CTOBJECT_TYPE_ARRAY)
			{
				CTStringAppendCharacter(JSON, ']');
			}
			break;
		}
	}
}

void CTJSONSerialiseAndSendOverNetworkRecursive(CTAllocatorRef alloc, CTStringRef JSON, void * obj, CTOBJECT_TYPE type, CTJSONOptions options, int fd)
{
	uint64_t count = 0;

	if (type == CTOBJECT_TYPE_DICTIONARY)
	{
		count = CTDictionaryCount(obj);
		CTStringAppendCharacter(JSON, '{');
	}
	else if (type == CTOBJECT_TYPE_ARRAY)
	{
		count = CTArrayCount(obj);
		CTStringAppendCharacter(JSON, '[');
	}

	switch (type)
	{
		case CTOBJECT_TYPE_STRING:
		{
			CTAllocatorRef local_alloc = CTAllocatorCreate();
			CTStringAppendCharacter(JSON, options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"');
			CTStringAppendCharacters(JSON, CTStringUTF8String(CTStringReplaceCharacterWithCharacters(local_alloc, obj, ^const char *(const char character) {
				if (options & CTJSONOptionsSingleQuoteStrings)
				{
					return character == '\'' ? "\\'" : NULL;
				}
				return character == '"' ? "\\\"" : NULL;
			})), CTSTRING_NO_LIMIT);
			CTStringAppendCharacter(JSON, options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"');
			CTAllocatorRelease(local_alloc);
			break;
		}
		case CTOBJECT_TYPE_NUMBER:
		{
			double intpart;
			if (CTNumberType(obj) == CTNUMBER_TYPE_DOUBLE && modf(CTNumberDoubleValue(obj), &intpart))
			{
				char str[(unsigned)ceil(log10(CTNumberDoubleValue(obj)) + 0x10)];
				sprintf(str, "%Lf", CTNumberDoubleValue(obj));
				CTStringAppendCharacters(JSON, str, CTSTRING_NO_LIMIT);
			}
			else
			{
				char str[(unsigned)ceil(log10(CTNumberLongValue(obj)) + 1)];
				sprintf(str, "%lli", CTNumberLongValue(obj));
				CTStringAppendCharacters(JSON, str, CTSTRING_NO_LIMIT);
			}
			break;
		}
		case CTOBJECT_TYPE_NULL:
			CTStringAppendCharacters(JSON, CTNullValue(obj), CTSTRING_NO_LIMIT);
			break;
		case CTOBJECT_TYPE_LARGE_NUMBER:
		{
			char str[(unsigned)(ceil(log10(CTNumberDoubleValue(CTLargeNumberBase(obj)))) + 7 + ceil(log10(CTNumberLongValue(CTLargeNumberBase(obj)) + 1))) + 1];
			if (CTNumberType(CTLargeNumberBase(obj)) == CTNUMBER_TYPE_DOUBLE)
			{
				sprintf(str, "%Lfe%lli", CTNumberDoubleValue(CTLargeNumberBase(obj)), CTNumberLongValue(CTLargeNumberExponent(obj)));
			}
			else
			{
				sprintf(str, "%llie%lli", CTNumberLongValue(CTLargeNumberBase(obj)), CTNumberLongValue(CTLargeNumberExponent(obj)));
			}
			CTStringAppendCharacters(JSON, str, CTSTRING_NO_LIMIT);
			break;
		}
		default:
		{
			void * ptr = NULL;
			CTOBJECT_TYPE valueType = 0;
			for (uint64_t i = 0; i < count; ++i)
			{
				switch (type)
				{
					case CTOBJECT_TYPE_DICTIONARY:
						ptr = CTObjectValue(CTDictionaryEntryValue(CTDictionaryEntryAtIndex(obj, i)));
						valueType = CTObjectType(CTDictionaryEntryValue(CTDictionaryEntryAtIndex(obj, i)));
						CTStringAppendCharacter(JSON, options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"');
						CTStringAppendCharacters(JSON, CTStringUTF8String(CTDictionaryEntryKey(CTDictionaryEntryAtIndex(obj, i))), CTSTRING_NO_LIMIT);
						CTStringAppendCharacter(JSON, options & CTJSONOptionsSingleQuoteStrings ? '\'' : '"');
						CTStringAppendCharacter(JSON, ':');
						break;
					case CTOBJECT_TYPE_ARRAY:
						ptr = CTObjectValue(CTArrayObjectAtIndex(obj, i));
						valueType = CTObjectType(CTArrayObjectAtIndex(obj, i));
						break;
					default:
						break;
				}

				if (CTStringLength(JSON) >= 1500) // Ethernet MTU size.
				{
					if (fd >= 0 && write(fd, CTStringUTF8String(JSON), CTStringLength(JSON)) == CTStringLength(JSON))
					{
						DebugLogWithoutPretty("%s", CTStringUTF8String(JSON));
						CTStringSet(JSON, ""); // Clear JSON buffer which has been successfully sent.
					}
					else
					{
						fd = -1; // Don't send further in case of error. Just serialise.
					}
				}

				CTJSONSerialiseAndSendOverNetworkRecursive(alloc, JSON, ptr, valueType, options, fd);

				if (i < (count - 1))
				{
					CTStringAppendCharacter(JSON, ',');
				}
			}

			if (type == CTOBJECT_TYPE_DICTIONARY)
			{
				CTStringAppendCharacter(JSON, '}');
			}
			else if (type == CTOBJECT_TYPE_ARRAY)
			{
				CTStringAppendCharacter(JSON, ']');
			}
			break;
		}
	}
}
size_t fileSize(const char * restrict file)
{
	long fsize = 0;
	if (access(file, F_OK | R_OK) != -1)
	{
		FILE * f = fopen(file, "r");
		if (f)
		{
			fseek(f, 0, SEEK_END);
			fsize = ftell(f);
			fclose(f);
		}
	}
	return fsize;
}

size_t readFile(const char * restrict file, char * buffer, size_t buflen)
{
	size_t bytesRead = 0;
	if (access(file, F_OK | R_OK) != -1)
	{
		FILE * f = fopen(file, "r");
		if (f)
		{
			bytesRead = fread(buffer, 1, buflen, f);
			fclose(f);
		}
	}
	return bytesRead;
}

CTObject * loadJSONWithAllocatorFromPath(CTAllocator * alloc, const char * restrict path)
{
	CTObject * ret_val = NULL;
	size_t file_size = fileSize(path);
	if (file_size > 0)
	{
		char buffer[file_size + 1];
		if (readFile(path, buffer, file_size) > 0)
		{
			CTError * error = NULL;
			CTObject * JSON_object = CTJSONParse(alloc, buffer, 0, &error);
			if (!error)
			{
				ret_val = JSON_object;
			}
		}
	}
	return ret_val;
}

void saveJSONToPath(const CTString * restrict content, const char * restrict path)
{
	FILE * f = fopen(path, "w");
	if (f)
	{
		fputs(CTStringUTF8String(content), f);
		fclose(f);
	}
}

void saveCTObjectAsJSONToPath(const CTObject * restrict content, const char * restrict path)
{
	CTAllocator * alloc = CTAllocatorCreate();
	CTString * JSON = CTJSONSerialise(alloc, content, 0);
	saveJSONToPath(JSON, path);
	CTAllocatorRelease(alloc);
}

redpajama_set_name: RedPajamaGithub