text:
Non Conformists
The Brighton trio talk about how they got together, what they do and don't conform to, what they think about the elements of hiphop, material they're currently working on and juggling sounds.
Heres a few words with Brighton trio – the Non-Conformists. I've always found Brighton a refreshing place to visit and have put it down to the sea air – I'd also say that hiphop also needs regular refreshment and feel that these kind of artists do bring that to the table – a fresh sound and good attitude…
To start, introduce yourself/yourselves and the members of the crew you represent…
Kode: Okay, I go by the name of Kode, producer and emcee. Also here is Richie Cunningham, deejay and producer. Unfortunately Real-D, the 3rd member of the crew, who is an emcee, couldn't be here. Collectively we're known as Nonconformists…
Ok no worries man… lets get it rolling…if they designed a pack of hiphop Top Trump cards and included your crew— what would be your main skills?
Richie: Porn-collecting, charity shop digging -for records, not women's clothes or anything!, getting busy on the ones and twos.
Kode: Being self-critical, adding too much to a track, occasional jiggyness.
How did do you meet?
Kode: Dan aka Real-D had a lonely hearts moment and placed an ad in Hip Hop Connection magazine's Contacts page — "MC looking for a DJ" or words to that effect. Rich and I were both equally as lonely and replied! None of us knew each other before then. Haha, I'm looking out for partners that way myself! How did the name Nonconformists come about?
Kode: It wasn't our first name (which was too rubbish to admit to!). Basically we sat around writing shortlists of names and talking about them, and Dan and I both wrote down Nonconformists. We liked the sound of it, so it stuck.
Richie: But now everyone thinks we're part of Def Jux or something, or on some left-field shit — which we're not. It's only a name.
Kode: Yeah, we never meant it to define what we do, but unfortunately as soon as anyone hears the name they get it into their heads that we're gonna be some bizarre, off-the-wall type crew or something. Which we're not — it's just a name!
What don't you conform to?
Kode: Having a name that is some kind of mission statement for the crew! What do you conform to?
Richie: Fat beats and dope rhymes.
Kode: A love of hip hop, and being part of it.
Do you think the concept of the five elements to hiphop is a played out idea? Do you think conforming to them makes hiphop too formulaic and limited in its creativity OR are they the uniting factors for our music and subculture?
Richie: I don't think it limits its creativity at all — it's just part of hip hop. It's like saying "do you think heavy metal is limited to distorted guitars". It's what makes hip hop, rather than what's part of it.
Kode: You can't say they're played out because they ARE a part of hip hop, no question. But I don't think it limits it — it's not like anyone making hip hop music HAS to include all those elements. There's plenty of creativity if you look at hip hop music as a whole.
You've just released the "Hold the Sanity" EP, tell us a bit about that…
Kode: It's long overdue!
Richie: After 6 or 7 years of making music together we thought we'd better put a release out…
Kode: It's got 3 tracks on it – "Hold The Sanity", "Noncons" and "You Know What They Say". "Noncons" is actually fairly old, but we included it because it gets a good response when we do it live. It's basically just 3 tracks that we wanted to put out there.
Richie: Although they're all Kode's beats, which I'm a bit pissed off about! It's available from your local online record store, and various record shops too. And our website (www.nonconformists.co.uk) if you're stuck.
Are you signed to a record label or distribution company? Who handles the business side of things?
Kode: No, we're not signed.
Richie: We try to split the work between us.
Kode: It's actually quite hard, 'cos there always seems to be business stuff that needs doing. It can get in the way of actually making the tunes sometimes.
Ok so do you get much interest from abroad or is your audience primarily UK based?
Kode: We haven't really pushed our stuff overseas, although that's definitely something we should do. It's one of the problems of doing everything yourself — there's always more you can do.
Richie: We get a good few hits from foreign types on the website though.
And where did you record your EP? Was it in your own studio or elsewhere?
Richie: In Kode's abode! The premier hip hop studio in Brighton …
Do you have any advice for up'n'coming artists perhaps looking to release a record?
Kode: I don't think we're in much of a position to offer advice as we're learning as we go anyway. But make sure you're confident that you're ready to commit something to a release, and make sure you know what you're gonna do with the product when they're delivered and sitting in your bedroom.
Haha… that's what people need… practical down-to-earth type advice! So moving on, the Non-Conformist sound in general, how would you sum that up?
Richie: Hip hop! I dunno, you tell us!
Kode: It's really hard to answer that… we just make what we make. We don't set out to have any specific type of sound, we just know what we like and try to make stuff that we're feeling. Hopefully other people will feel it too, and hopefully it stands out in some way against what everyone else is doing.
What's the hiphop scene like in Brighton ? Is it self-sufficient or largely dependent on nearby London?
Kode: I don't think we're dependent on London at all. There's a lot of people doing stuff down here who are completely self-contained, and no-one's really trying to follow in London 's footsteps.
Richie: It's completely self sufficient, a brilliant scene. There's more variety than the London scene as far as I can tell.
How do the surroundings of a small city on the south coast of England influence your music? Is it all hiphop parties on the beach with loads of fine women?!!
Richie: Yep, every night!
Kode: Mmmm, fine women… Well I wish it was like that but the reality is slightly less exciting – well, for us anyway.
Richie: I think it's more of a laid-back scene than, say, London .
Kode: Definitely. Brighton 's a laid-back, accepting kind of place, and that definitely comes through in the music. There's very little aggy-type hip hop being made down here, which is obviously a reflection of the environment when compared to somewhere like London . What has Fatboy Slim done for the Brighton music scene in general? I always remember that massive free gig he held on the beach… never went but it looked dope…
Richie: It was wack. The city was invaded by even more Londoners than usual!
Kode: You couldn't move at that party, the whole seafront was rammed. Not my type of music at all, in fact I sat way behind the main stage with some mates so we could just chill out a bit.
Richie: I wanted to go to the pub 'cos I knew it would be empty, but no-one else did.
Kode: Seriously though, it's hard to identify any specific benefit that the Brighton scene has gotten from Fatboy Slim. Brighton 's always had a pretty good music scene in general. Although it's been good that a label like Skint could get so big off the back of him, and there were some really good club nights that went around that whole kind of scene — but I think the best days of that are long gone.
Did you ever go to the Essential Festivals in Brighton ? I went to the 1999 one and remember Dead Prez and DITC playing there… they seemed to go down well with the crowds… did those events do anything for the scene in that area?
Richie: I don't know if it's done anything for the scene, but there were definitely some good acts there. There was one with Jeru and the Jungle Brothers, and Rahzel and James Brown, which was good.
Kode: They were good festivals, definitely. It's a shame they're not on any more. At the time Brighton had more regular hip hop club nights than it's got now, so in that sense the hip hop presence at the festivals may have helped maintain that.
Do you think the summer festivals cater for enough hiphop tastes or have they become too rock and dance orientated?
Kode: I've only ever been to one, and that was Reading for one day. I did see the Beastie Boys there though!
Richie: The last festival I went to was Donington, which WAS rock orientated!
Kode: From what I can tell they never have a really consistent hip hop arena — it's always split up and spread around between loads of other acts. Which can actually be a good thing as it opens you up to other types of music, but isn't good for the hip hop purists.
Richie: Didn't Glastonbury have a hip hop tent one year, even just for one day, with Ozomatli playing?
In terms of your production, I found it very distinct and tried to place it or describe it but couldn't, how would you describe it?
Kode: Probably as very distinct and hard to place! Sorry, I'm not trying to be smart, but I always find it really difficult when people ask "What type of stuff do you make then?‿. There's no formula or objective for a particular type of sound, it's just stuff that we like. Although I suppose we have got an underlying thought of not just doing the same old shit that everyone else is doing.
What music forms or artists influence your production?
Richie: I don't know. A lot of stuff I guess… more sample-based producers like Tribe and Madlib have influenced me in the way that they'll take samples from anywhere.
Kode: Anything and everything is an influence. I've been listening to hip hop since Pac Jam came out so there's a massive amount of influence there, but I also like loads of other music too. People like Gary Numan for that electronic stuff, and loads of old funk like The Meters and pre-disco Kool & The Gang. Hip hop wise Ultramagnetics were a massive influence, but more recently I love stuff by Kutmasta Kurt, Visionaries, and I'm also feeling quite a lot of more mainstream production like Neptunes.
Are there any particular producers you admire?
Kode: Historically, Ced Gee from Ultra, the Bomb Squad, Mantronix. And now, Key Kool from Visionaries/Writers Block, Kutmasta Kurt… there's probably loads.
Richie: All the classic ones like Dre, Premier, Pete Rock…
And what about emcees, who would you like to work with?
Richie: A few local MCs maybe; Buzz from Digitek, HP from Lost Souls, Brainiac.
Kode: I dunno… because we're a crew I haven't really got anyone in mind like I might have if I was a freelance producer. I suppose I could say people like Planet Asia, Grand Agent, Wordsworth. But if I'm going for people like that, there'd be hundreds!
In terms of your own emceeing, what's the main reason you started to write and spit lyrics? Is it about story telling, social and political commentary or perhaps just getting the crowd hyped?
Kode: I started just through a love of the music, after listening to the early Electro LPs and watching the Beat Street movie. At that point it was about all sorts of things — we had a track called " UK 's Fresh" about being from the UK , we had braggadocio tracks, just whatever we felt like writing. Now we're split between getting the crowd hyped and more introspective tracks. We haven't done a whole lot of social or political commentary or storytelling, but we're starting to incorporate those things.
In tracks like "You know what they say" you do talk about political issues, how far do you think music and politics mixes?
Kode: I think it can mix in a very powerful way, but I'd say there's very few artists who can do it. Personally I don't think I have the kind of background where I could be a strong political commentator — I just haven't grown up in that sort of environment. But you know when it's working — you can listen to Public Enemy's "It Takes A Nation Of Millions" now and it still sounds as powerful as it did 15 years ago.
In that track, you talk about gun crime and apportioning of blame onto hiphop music and culture by the government – who is primarily responsible for this association between hiphop and violence? Misinformed politicians or elements of the industry who cynically glamorise violence for profit?
Richie: You can't really blame the record companies for putting that kind of thing out. Listening to a violent record doesn't make you a violent person, just the same as watching a violent film doesn't. It's a ludicrous idea trying to link the two.
Kode: I think it's both. The authorities pick up on the violent content of hip hop and see a convenient place to pin the blame, so in that respect hip hop could help itself by removing that violent content. But the authorities always pick on the easy target, which hip hop is — there's plenty of violence in other genres like rock, and in films and TV, but because it's so clear-cut in hip hop it's the easiest thing to blame. I know I got into hiphop through 2pac and Biggie and I can admit that at 16 years of age these rappers did seem quite exciting and appealing, they were almost like action heroes to me— my parents were always cool with it but can you see why some parents might be disturbed by their kids idolizing people like Fifty Cents?
Richie: Yeah, but it's been the same throughout the years. With every form of music — from jazz to Elvis to the Rolling Stones to punk — kids want to listen to stuff that pisses their parents off.
Kode: Young people always want to rebel, so they're always gonna go for idols like Fiddy. And of course the parents don't approve — he basically represents the image of a gangster and a pimp, which most parents aren't going to want their kids to aspire to. But isn't that what heroes are — people that are beyond the lifestyle you live yourself?
Moving on, what's next for the Non Conformists, are you planning a tour or another release — maybe an album?
Kode: There'll be another 12" in the next few months, and various gigs around the country. After that, maybe another 12", maybe an LP — although I think the LP might come sometime next year, after a couple more 12"s.
And finally, any shout outs or final words of wisdom?
Richie: Shout out to all the Brighton heads, I guess, if we must! I'm not gonna list them 'cos there's too many, – they know who they are, and they'll be pissed off if I miss them out!
Kode: I dunno if it is wisdom, but the beauty of hip hop is that it can be anything you want it to be — it's always been built on pushing the boundaries and doing your own thing, so don't be limited by stereotypes or what is considered to be conventional.
Richie: Thanks chaps for the interview.
Related Links: www.nonconformists.co.uk
Posted by Matt in Interviews.
"Life's a bitch and then you die, that's why I resign, lose the tie to find blue sky".
Aspects, 'Off The Lip'.


The MA in Music (Popular Music Research) engages with scholarly debates and public controversies around popular music, while examining and developing both traditional and innovative ways of researching popular music.
The MA in Music (Contemporary Music Studies) examines aspects of methodology, repertoire studies and cultural theory within a wide-ranging programme of investigation into the role of contemporary music in the society for which it is created.
The MA in Music offers advanced training in either musicology or composition. The modular structure allows students to pursue a broad generalist programme or to specialise in a particular area of their choice.
The MA Music Industry Entrepreneurship combines traditional business practice with specialised tools, techniques, approaches and case studies unique to the music and entertainment industries.
Develop your creative abilities in composition and sound through practical and theoretical work. Explore theory and practice in the field of popular music production, focusing on historical contexts and the development of advanced technical skills.
This programme builds on one of the department's newest areas for research and teaching. Uniquely, it focuses on popular music in global, diasporic, transnational, and linguistically diverse forms, reflecting emerging trends in popular music scholarship.


Infinity Cube.4 colors.size:Approx 4*4*4cm.We will according to the order quantity,choose the DHL/FEDEX/UPS/TNT/EMS free shipping for you.
Please tell us which color you need by the message.
If not,we will send the mixed colors for you.thanks!!!


text:
Olympic Equestrian Test Event Succeeds in Finding Issues to Fix
8 years ago admin Comments Off on Olympic Equestrian Test Event Succeeds in Finding Issues to Fix
Australia's Clayton Fredericks riding in Wednesday's stadium jumping as the final stage of the Olympic equestrian test event with the Royal Observatory in the background. © 2011 Ken Braddick/dressage-news.com
By KENNETH J. BRADDICK
LONDON, July 6–The Olympic equestrian test event succeeded in showing off a unique platform competition arena, an entertaining sport with a skyscraper skyline of a world capital as a backdrop and fulfilled what it was designed to do–find issues that need to be fixed in time for the Games next summer.
The single biggest issue that emerged Wednesday, the last day of the test event, was with the surface footing that eventers found to be great but dressage and jumping riders were critical and the organizers pledged to fix what they admitted was the "single most important issue."
The CIC2* Green Park Eventing Invitational brought 40 horse and rider combinations from 21 countries for three days of eventing dressage, cross country and jumping on a unique platform arena held up by 2,100 pylons with a spectacular view from the spectator stands of the London skyline in one direction and the historic Royal Observatory in another direction.
The platform for the main arena will be expanded to 100 meters by 80 meters (yards) for the Olympics that begin next July 27 from the 85 by 75 meter size used for this test event. Spectator seating will also be increased to 20,000 from the 2,000-seat stand used at the test event.
Some of the 2,100 supports for the Olympic equestrian competition arena.
The platform is made of plywood on a steel and aluminum frame. It took about three weeks to install.
The unique structure was required to meet a ban on any alterations to the park that is a World Heritage Site and there was no digging for the equestrian facilities, including the tent stabling that was praised for spaciousness and light.
For the Olympics, the platform will be ready at least six weeks before the start of the Games and the surface footing will have plenty of time to settle, which most riders and experts said should fix the issues raised by dressage and jumper riders that it was too loose and broke up after four or five dressage rides or during sharp turns in jumping.
"We were discussing the footing out there which is a bit tacky and heavy and holding to jump off," said Laura Kraut of Wellington, Florida who jumped her Olympic team gold medal mount Cedric to two clear rounds in a test Wednesday.
"But, hey, it's not the final surface, is it? If all goes well it should be fine next year."
British dressage star, Laura Bechtolsheimer, offered an opinion that was shared by most riders of all three Olympic disciplines–dressage, eventing and jumping.
"It's such a fantastic opportunity for our sports to be at the heart of the Games," she said. "As a competitor it means I'll have a true Olympic experience and stay with athletes from around the world and many other sports. And it's also great for us to reach a new audience and increase interest. I'm keeping my fingers crossed for a smooth build-up with Alf (Mistral Hojris)–we (Britain) have our strongest team ever and it's our best chance of standing on that podium."
Irish jumper rider David O'Brien said after his test ride, "Surreal. It's a fantastic setting and totally unique. It's also very picturesque with all the London buildings in the background."
Tim Hadaway, Equestrian Competition Manager, said that as soon as the issue of the footing was raised by dressage riders, discussions began with specialists, international and local officials as well as the supplier of the footing on steps to improve it. The supplier provides footing for Britain's Horse of the Year show and many other top competitions, he said, and wanted to do whatever was required to insure the best footing for 2012.
Thousands of school children, local residents–some of whom have been opposed the use of the popular royal park that traces its history back 600 years as an Olympic venue–and people involved in horse sports were invited to the test event. Many of them had never seen a horse before and the enthusiasm of the kids was appreciated by the riders.
For the record, the event was won by Great Britain's Piggy French on DHI Topper W, with Germany's Michael Jung on River of Joy second, Briton Pippa Funnell on Billy Shannon third and Australia's Clayton Fredericks on Bendigo fourth.
The 2012 Olympics equestrian stadium during dressage phase of the test event with the London skyline backdrop. © 2011 Ken Braddick/dressage-news.com
Danielle Heijkoop & Kingsley Siro Take Dortmund CDI4* Freestyle for 1st Senior Kür Win
DORTMUND, Germany, Mar. 9, 2014--The Netherlands' 26-year-old Danielle Heijkoop rode Kingsley Siro to victory in the Meggle Champions Finale CDI4* Grand Prix Freestyle on Sunday for the first kür... Read More

redpajama_set_name: RedPajamaCommonCrawl


While the ZHP was in the shop having its snows shod, its spit and shine and a few other details, the local dealer gave me a brand new X1, put into service only a few days ago.
It was the four cylinder model with 17's, but something called "the ultimate package", which is essentially every option on top of an already well-optioned car - that added about 10k worth of gizmology and luxo features. Including a white, metallic paint finish that was quite nice.
Not bad at all, in fact, I really liked it. It's small and nimble, the doors are light and small, the seats were comfy (part of the 10k package), it had plenty of room and it handled and drove really nicely - I was surprised at how quickly I could take some of my usual corners with very little body roll.
The driving position was just right; perhaps because Im so used to sitting down so low in the ZHP, it's always a novelty to me when I get in these taller vehicles, but it feels nice in traffic, and visibility is good.
The engine's a bit gruff - but it's responsive, and the 8 speed auto is quite good - none of those problems of yore with weird shift points etc. No exhaust note to speak of, but in a vehicle of this type, who cares.
If I were in the market now, I'd definitely consider this car, perhaps it's old age setting in, but it's nice to flip open a (smaller, lighter) door - with "comfort access" (no key), touch the nav screen, flip on the heated seats and steering wheel, and just cruise effortlessly, and still have some handling prowess - more than enough for suburban driving, anyway - plus all that room and utility.
42 grand is a lot of money ... and it looks a bit ungainly on 17's, but it rides really well (I don't think 18's would be a good choice) - I can see why the small ute market is so popular now, the X1, Audi's Q3, the VW Tiquan and now Mercedes has an entry ... they're good vehicles for today's mid market, and appealing.
the X1 is built upon the e90 platform (or F30?), so it should literally drive like a 3 series wagon (taller though).
obviously that may change in the future and it might go FWD, but for now, it's a 'real' BMW chassis.
i'm less fond of the haldex based cute-utes because they obviously drive like Civics on steroids, but i agree with you, the X1 drives decently.
Current X1 is essentially a slightly taller E91. The next X1 goes in the new FWD platform. The spy pics actually don't look bad and I'm imagining we'll only see it here in AWD version.
pretty hard to spend 41K on a Tiguan.
Even nicely loaded R line models barely make it to 40K.
I hadn't seen one of these until the other day. How did they manage to make an E90 look so tragic?
Seriously. The x1 makes the x3 look like a stunner - and that's not easy to do.


text:
Q: In Python, how can I make it so the first 2 elements of a list are added together, then the first 4, then the first 6, and so on? I am making a game where two players take turns adding a number 1 to 10 to the running total. The player who adds to get 100 wins. I stored the inputs of the players in a list, and at the end of the game, I want to display the total after every turn. The list is in the format:
allTurns = [player1move1, player2move1, player1move2, player2move2, ...]

How can I add only the first 2 elements and display them, then add only the first 4 elements and display them, and then the first 6, and so on?

A: for i in range(0, len(list)):
    if i % 2 == 0:
        print(sum(list[:i+1]))

Or
sums = []
for i in range(0, len(list)):
    if i % 2 == 0:
        sums.append(sums[-1] + list[i-1] + list[i])

A: Try this:
allTurns = [1,2,3,6,12,23]
out = []

for n in range(len(allTurns)):
    if n % 2 is 1:
        out.append(allTurns[n] + allTurns[n-1])

if len(allTurns) % 2 is 1:
    out.append(allTurns[-1])

print(out)

I've coded it so that it could work for any situation, and not just yours.

A: Try this:
allTurns = [1,2,3,6,12,23,4]
out = []

for n in allTurns:
    if allTurns.index(n) % 2 is 0:
        i = 0
        for a in range(allTurns.index(n)+2):
            try:
                i=i+allTurns[a]
            except IndexError:
                pass
        out.append(i)

print(out)

This is probably as simple as it can get.

redpajama_set_name: RedPajamaStackExchange


text:
Javeta Distolacakerremansi is een keversoort uit de familie bladkevers (Chrysomelidae). De wetenschappelijke naam van de soort werd in 1899 gepubliceerd door Raffaello Gestro.

Distolacakerremansi

redpajama_set_name: RedPajamaWikipedia


A bit late on the uptake, I have decided to create a blog to document my final year in Part II Architecture. I will use this space to post my work and influences throughout the remainder of the course. Hopefully it will serve as a place of contemplation and development. First though...to upload some backdated process work.


text:
Tag: mecha
Prison Battleship 2
In the solar system, there is a cold war going between Neo Terrors (Group of the Earth) and New Soral (Group of space colonies). There is a neutral third party known for its strong military power: Cordelia is a fortified city which is constructed on a secondary planet of the Uranus. There, renowned general Alicia Viewstream and the imperial heir…
Corona Blossom Vol.3
In the midst of a furious battle, the launch countdown begins. Time is running out for Keiji and his friends. Will the quest to help R-ne return home be successful? Find out in the thrilling and heartwarming conclusion to the Corona Blossom trilogy!
Breaking news! Space pirate-turned-maid Lily and her cohort Yunie have a nefarious plan to kidnap R-ne and sell her as raw materials! Can Keiji and our other heroes save the day, or is R-ne destined to be melted into scrap? And is there an even greater threat looming in the background?
Meet Keiji Osaki: a young man who hates dealing with machines, despite being very skilled at working with them. That's just the kind of guy he is. After failing his college entrance exams, he begins helping out at his grandfather's workshop, which specializes in repairing VORKS, heavy-duty industrial robots. For a while, he enjoyed a quiet life in the countryside,…
Sunrider: Liberation Day
Following the devastating war between the democratic Solar Alliance and the tyrannical New Empire, the galaxy was split into two zones separated by the Neutral Rim, a buffer between the two states. Weakened by war, the New Empire collapsed from within in the Compact Revolution. A figure known only as VENICZAR ARCADIUS led the people against their Imperial oppressors. Following…
Muv-Luv Alternative Chronicles Vol.2
The second entry in the Chronicles sidestories series. Includes a continuation of the "The Day After" scenario featured in Chronicles 01, "Muv-Luv Alternative Chronicles:Aspiration" (a story set in The Euro Front), a special episode of Radio Total Eclipse, and other bonus material.
New chronicles of Muv-Luv universe featuring director cut verisons of previously released Chicken Divers and Rain Dancers, along with a brand new Muv-Luv Unlimited The Day After, which details what happened following the end of Muv-Luv Unlimited.
Anaheim Girl's Love Story
This story takes place in a company, called 'Anaheim Electronics'.It is a love story about the people of OL.The heroine without any experience in love,'Saotome Rinne'.This is her first time experiencing love. That is, "girl's love".
Shinseiki Evangelion Koutetsu no Girlfriend
A shy female character, Mana Kirishima, starts at Shinji Ikari's school and immediately admits to finding him cute. Gradually, a relationship unfolds and they end up going on a date. It turns out, however, that she is one of three test pilots for the TRIDENT units, a new competitor to the Evangelions, similar to Jet Alone; thus the name Girlfriend…
Viper-M1
Sogna combined the best of both worlds in VIPER-M1: a modern, Windows-based interface and a set of three smaller games, reminiscent of the earlier V series titles. Super-heroine story My Mothers features cover girl Mika in her attempt to rescue a prospective boyfriend. Coming of age tale Green Boy follows Natane and her two older sisters as they welcome a…
My Married Cousin's Need for Seed
The protagonist is the son of a wealthy and influential family, and he's always had a thing for his older cousin Nodoka. Just seeing her getting lovey with her new...
God's One Day World
This is the world created by God. All lives enjoy the peace under the aegis of God. Here, God's Order is in everywhere. You have to Obey the rules, or...
Train of Afterlife
You are riding on a train without a name, memory, or your own body. Along with you are five other passengers who will share their thoughts and various tales of...
A summer promise to forever
Jiajun Lin, a high school student and the hero of this story. He came to a village named Tangxia because of the request from his father, who was the principal...
The Way We All Go
It's been two years since Atcchan, our protagonist, left his hometown; a small, sleepy village with a tiny population. Now he is finally able to return – but only for...
Sweetest Monster
"I love you for who you are. I've loved you from the moment I met you." Robin Hawkins is down on his luck. His relationship with his wife, Sally, is...


Living in a big city like London has its great advantages: you can build your dream career, go out to the best night clubs and restaurants in the World, visit a never-ending list of exhibitions and museums, get the best education and lots more. Here we are, living the dream, right? But, on the other hand, living in London could be very harmful to your skin due to pollution.
So what do we do now? Do we just stay in a hermit in our houses, hoping that nothing will seep into our rooms? That's unrealistic, and we all know it. Instead, one effective solution to this grave issue is to start using an anti-polution skincare that helps to protect your skin.
Today I share By Terry Detoxilyn Anti-Pollution Skincare review. I have tested this skincare range for the last 2 months and, finally, ready to share my thoughts.
SHOP BY TERRY DETOXILYN ANTI-POLLUTION SKINCARE.
Balance and revitalise the skin with the By Terry Detoxilyn City Essence, a skincare product that can be applied twice daily by patting into the face and neck. I feel that it helps to reduce the signs of fatigue and leaves my complexion looking fresh and renewed. Moreover, rich in over-active detoxifying, moisturising and energising ingredients, this refreshing aqua primer protects the skin from the stresses of urban life.
With concentrated acanthus extract, it works to neutralise the polluting particles that can leave skin looking dull and gives skin the boost it needs. At the heart of By Terry Detoxilyn City Essence is Alpine Rose Native Cells, which have antioxidant, anti-radical and oxygenating properties to help protect the skin from pollution and other environmental stressors. Deep cleansing and moisturising ingredients help the skin to not only appear but also feel brighter, purified and revitalised.
A true multi-defence shield, this fine, silky and anti-pollution serum brightens, soothes and evens out the skin, relieving it from the daily environmental stresses of urban life. Day after day, the skin is protected and appears visibly repaired. Using a serum not only provides skin with a concentration of deeply penetrating ingredients but also greatly boosts the overall performance of your moisturiser.
By Terry Detoxilyn City Serum can be incorporated as part of a daily beauty regime. This anti-pollution serum helps to brighten and soothe skin from the environmental stresses of urban living.
The serum is enriched with acerola extract and heptapeptide, which help to boost the skin's natural defences and protect the skin from free radicals. This luxurious serum features deeply penetrating ingredients that can also help improve the performance of products applied after it. Also, with a fine, silky texture, the By Terry Detoxilyn City Serum can be applied onto the face and neck. The heart of the formula features Alpine Rose Native Cells, which contain antioxidant, anti-radical and oxygenating properties to help reduce the impact of pollution on the skin, making it feel brighter and healthier.
Apply in the morning and evening, to the entire face and neck. Press serum into the skin using your palm to release active ingredients.
READ RELATED: SHISEIDO WASO SKINCARE REVIEW.
By Terry Detoxilyn City Cream can be applied during both the morning and evening. Skin will appear rehydrated and revitalised, and the overall complexion will appear more radiant.
By Terry Detoxilyn City Cream comprises Alpine Rose Native Cells as the main ingredients. Blended with an essential mineral complex, these ingredients feature antiradical, antioxidant and oxygenating properties that help to preserve the skin's fundamental mechanisms. This light but luxurious cream also includes acerola extracts and probiotics to help boost the natural defences of the skin, allowing the detoxification process to be activated. Use daily to make the skin feel smoothed and moisturised.
Hydrates and brightens while shielding skin against environmental stressors.
Refresh the skin with a weekly treat when applying the By Terry Detoxilyn City Mask. An anti-pollution skincare product, this revitalising mask can be used two or three times per week. Like fresh countryside air on the skin, this mask helps to combat the stresses of urban life, leaving skin feeling and looking fresher and brighter.
Upon contact with the skin, the effervescing micro-bubbles in this innovative formula transform into a creamy, airy foam. And this is so much fun to use! The mask works to tighten pores, giving the skin a smoother appearance.
By Terry Detoxilyn City Mask is packed with ingredients to help nourish and protect the skin. At the heart of this formula are the Alpine Rose Native Cells, which contain antioxidant, anti-radical and oxygenating properties that work to preserve the skin's fundamental mechanisms while leaving it balanced and purified.
Overall, I really enjoyed using By Terry Detoxilyn Anti-Pollution skincare range. Not only it helped to protect my skin from a polluted environment, but also it's just a pleasure to use the products thanks to a wonderful rose scent and nice luxurious packaging.
READ NEXT: HYALURONIC ACID BENEFITS FOR SKIN & DR BARBARA STURM HA AMPOULES REVIEW.


text:
Business + Money
Architecture + Design
Books + Writing
Film Ahead
What We're Having
Mark your calendar
Local Performances
The areas, neighborhoods and squares of Cambridge
The bridges of Cambridge
City's $115.8 million sets record for free cash, trumping last year's record
by Marc Levy | Sep 25, 2012 | News | 1 comment
Home | News
By Marc Levy
City Manager Robert W. Healy has reported that the city has a record high amount in its free cash fund for the second year in a row. (Photo: Rachel Offerdahl)
Cambridge has set another record for free cash.
The city has $115.8 million — that's $115,826,900, to be precise — in its free cash fund, also known as the unreserved fund balance account, according to a communication sent to the City Council by City Manager Robert W. Healy too late to be an official part of the Monday council meeting.
That's an increase of $13.6 million from the year before, Healy said (or $13,587,839, to be precise).
This beats the record high announced by Healy a year ago at this time, when $100.2 million was the "highest free cash balance in the history of the city" and represented a $12.9 million increase over the previous year.
The current free cash amount is also a surprising bump from the city's 2012-13 budget book, which projected there would be only $90.9 million in the fund for each of fiscal years 2012 and 2013.
And it comes after $11.9 million was transferred in April for the legal costs of civil rights lawsuits against the city, City Auditor James Monagle said Tuesday. That suggests the city not only recouped an $11.9 million loss from free cash that brought it roughly to that projected $90.9 million, but added enough revenue — with city property owners seeing only a 1.75 percent increase in their tax levy and no increase in water and sewer rates — to jump somewhere in the area of $25 million to the current level.
According to state Department of Revenue records, only Boston's free cash was higher in fiscal year 2012, with its 625,087 residents enjoying free cash of $142.8 million, but Cambridge's recorded $102.2 million was head, shoulders and torso above the third-highest community, Lynn, and its $16.8 million. For fiscal year 2013, only 42 communities have reported out of the previous year's 346, but Cambridge's projected income again soared over the highest on the spreadsheet: Arlington, at $7.8 million.
How did Cambridge do it? Monagle said he was preparing an analysis that would be ready in about a week but could not talk about it until then. A message was left Tuesday with Healy and his staff seeking information.
Free cash is money left over from the previous fiscal year that is "available for appropriation," according to the city budget book submitted by Healy. But the city follows a philosophy that appropriating the money means having less money, to the extent that councillors voted 7-2 in March to give away 40 percent of a rooftop garden in Kendall Square in exchange for $2.3 million in design and improvements to two ground-level city parks. That's 1.9 percent of the city's free cash, or less than 9 percent of what the city managed to raise in a year to achieve the current record amount of free cash.
Now councillors are looking for an annual $400,000 to keep an Upward Bound program running since the surprise loss of a federal grant. The program, which works with the Massachusetts Institute of Technology and Wellesley College to help high school kids achieve educational goals, cannot apply for the grant again for another five years, according to testimony at Monday's council meeting, and councillors have spoken for two meetings straight about their interest in finding money to keep the program intact.
Healy has long been recognized for his skill in guiding Cambridge's finances and earning the city top ranking from credit rating agencies. He retires next year.
Cambridge City Council, Kendall Square, city manager, finance
HeatherHoffman on Tuesday, September 25, 2012 at 5:48 pm
Now that we know what Councillor van Beuzekom wanted to ask the manager about last night, I would love to know why two of her colleagues voted to prevent that.
A better Cambridge Day
Please consider making a financial contribution to maintain, expand and improve Cambridge Day.
© 2023, ↑ Cambridge Day
Log in - Posts - Add New


Ever wish you could do a handstand? A muscle up? A pull up?
EDX members get access to workshops to help them advance their skills. This Saturday's Gymnastics skills workshop filled up fast! We're expecting to see lots of smiles and progress.
Keep pushing forward. Keep learning new things. That's what life is all about.
Just be the person who cares more. Be the person who tries harder, loves stronger, gives more of a crap than all the other half-Alive people around them. Be the person who answers their messages, shows up to their commitment and doesn't leave others hanging or guessing at their eternally vague intentions. Be the person you wish you were dating. If you're sick of the game then quit playing it. If you're tired of the bs then cut it.
Listen. Those girls...they are so sneaky. But, I did love this workout because I was able to pace myself. I am queen of pacing and rhythm.
Dripping with sweat and smile on my face, the twenty minute time cap found me at 13 rounds + 10 reps.
Training in this heat, next level intense.
Training in this heat with no air con, next level crazy intense.
Welcome to boxing in the Philippines.
Only way to beat the heat while training is to stay hydrated and pray you don't die.
🚗Доставка по Москве курьером с возможностью примерки и оплаты при получении, компания СДЭК, 350 р.
🚗Доставка после 100% оплаты по Москве в пределах МКАД курьером, компания СДЭК,300 р.
🚗 Доставка до пункта выдачи СДЭК ( https://www.cdek.ru/contacts.html) в Москве с возможностью примерки и оплаты при получении, 125 руб.
🌍 По РФ отправляем почтой, СДЭК после 100% оплаты.
💴 Скидка 3% при оплате онлайн.
Safe to say my daughter is summer ready!
Its the habits we build everyday that give us the results we want.
World... you've been put on notice!
Take what's yours Brady, Feed That Ego!
Getting back to rock climb ready! I probably should have worked on my #grip while injured half the winter but eating tacos sounded like more fun! .
This group crushed some gymnastics today!
L sits are a great strength move that works a ton of muscles.
Please don't punch anyone, come to CrossFit!
Open gym: Handstand walks and pistols. .
If you want it, go get it 🤸🏽♂ .


Is justice supposed to be blind or not?
How sad is it that a United States Congressmen has to bring up a bill that would force our government to treat all of us equal?
Florida Republican Congressmen Matt Gaetz has introduced a bill titled the "Justice For All Act" which would require equal punishment for those who have lied or lie to Congress, no matter who they are.
Those people would include former National Intelligence Director James Clapper, former FBI Director James Comey, former CIA Director John Brennan, former Attorney General Eric Holder, former IRS manager Lois Lerner and of course former Secretary of State Hillary Clinton. It has been proven that these people have lied under oath, or to have knowingly provided false information to Congress and faced no punishment.
If you are going to charge one person for lying to Congress or providing false information to Congress you must charge all people for the same crimes. What type of kangaroo court and investigation is the DOJ and Special Prosecutor Mueller running?
How do these establishment people expect us to have any faith in our government and their agencies if they do not apply the law fairly?


text:
Ms. Sahiba Gafarova
Welcoming message of the Chairperson of the Non-Aligned Movement Parliamentary Network
Dear colleagues, partners, and visitors!
It is my great pleasure to greet each of you.
I would like to announce that this newly launched website is a valuable database containing extensive information on the activities of the Non-Aligned Movement Parliamentary Network. The website will present comprehensive information on the history of the establishment of the parliamentary dimension of the world's second largest organization after the UN, in particular, its founding meeting and the first conference held in Baku, its role in international cooperation through parliamentary diplomacy, the topics on our agenda, our priorities and many other issues.
Ms. Sahiba Gafarova, Chairperson of the Non-Aligned Movement Parliamentary Network, held meetings with the heads of several parliaments and the AIPA Secretary General in Cambodia
On November 22, Ms. Sahiba Gafarova, Speaker of the Milli Majlis of the Republic of Azerbaijan and Chairperson of the Non-Aligned Movement Parliamentary Network, held meetings with the heads of parliaments of several countries, as well as the Secretary General of the ASEAN Inter-Parliamentary Assembly (AIPA), as part of her visit to the Kingdom of Cambodia.
Ms. Sahiba Gafarova, Chairperson of the Non-Aligned Movement Parliamentary Network delivered a speech at the first plenary session of the 43rd General Assembly of the ASEAN Inter-Parliamentary Assembly
Ms. Sahiba Gafarova, Speaker of the Parliament of the Republic of Azerbaijan and Chairperson of the Non-Aligned Movement Parliamentary Network, delivered a speech at the first plenary session of the 43rd General Assembly of the ASEAN Inter-Parliamentary Assembly within the framework of her official visit to the Kingdom of Cambodia.
Ms. Sahiba Gafarova, Chairperson of the Non-Aligned Movement Parliamentary Network met with Mr. Vuong Dinh Hue, President of the National Assembly of the Socialist Republic of Vietnam
On November 21, Ms. Sahiba Gafarova, Speaker of the Milli Majlis of the Republic of Azerbaijan and Chairperson of the Non-Aligned Movement Parliamentary Network met with Mr. Vuong Dinh Hue, President of the National Assembly of the Socialist Republic of Vietnam, within the framework of her official visit to the Kingdom of Cambodia.
Baku Conference of the Non-Aligned Movement Parliamentary Network
June 30 - July 1, 2022- Baku, Azerbaijan
On June 30 – July 1, 2022, the Republic of Azerbaijan hosted the Baku Conference of the Non-Aligned Movement Parliamentary Network (NAM PN) dedicated to the theme of "Boosting the role of national parliaments in promoting global peace and sustainable development".
The Baku Conference was attended by parliamentarians from more than 40 NAM Member States, including Speakers and Deputy Speakers of their respective national parliaments, as well as 8 interparliamentary organizations.
Inaugural Meeting of the Non-Aligned Movement Parliamentary Network
November 28, 2021- Madrid, Spain
On the initiative of H.E. Mr. Ilham Aliyev, President of the Republic of Azerbaijan and incumbent Chair of the Non-Aligned Movement, on the sidelines of the 143rd Assembly of the Inter-Parliamentary Union (IPU), the Non-Aligned Movement Parliamentary Network (NAM PN) was established during its Inaugural Meeting on November 28, 2021, in Madrid, Spain. The official meeting was followed by a Gala Dinner dedicated to the Inauguration of the NAM PN hosted by the Azerbaijani delegation.


text:
Category Archives: take aways
The Corner Grill Cafe – Belmore, NSW
By Michael Wayne on January 31, 2018 | 6 Comments
It looks like any other drab line of shops on a dreary corner in Dullsville.
So what's the reason for our focus on this windswept Belmore street corner on such an unseasonably brisk evening?
I thought you'd never ask.
The Corner Grill Cafe has failed. The grill is dormant, the shakes are neither shaken nor stirred, and the chips remain a mere gleam in a spud's eye. Don't believe the signs; they're open zero days, and there's no home to deliver.
This location has long served up junk food to the masses – just look at the ghost sign on the building's south:
And in that earlier time, the corner shop backed onto some kind of mechanic. It's now an IT consultant, but the evidence is there:
Despite that, it's nothing special. Just another small business caught in the thresher of the conglomerates that absorb everything we rely on. The blood has dried, and the scene of the crime is now available on a twelve month lease.
What caught my eye, however, was this.
This is what elevates the Corner Grill Cafe – and indeed, the whole block of shops – to being worthy of a handful of words on the internet. Someone cared.
Whoever it was that founded the Corner Grill, that did their research, signed the lease, had the signs made, ordered the milkshake powder and on whose orders thousands of coffee beans were ground to death, that person believed in their idea, as wholly unoriginal as it was, and they gave a gift to an audience they thought they knew.
They believed that this corner of Belmore needed the Corner Grill Cafe, and only in the way they could provide it. They believed that it would fly, that the air would benefit from the smell of juicy, flame-grilled burgers instead of cigarette smoke and desperate living.
They believed that the arcade games that used to make the adjacent corner shop (and countless others like it) sing still had a place, however abstract, on Yangoora Street. They believed that the community had a place for their dream, and they commissioned this artwork to prove it.
That they were wrong doesn't matter. They left their mark, and these days, that's enough.
Posted in: closed, corner shops, for lease, milk bars, take aways | Tagged: Belmore, cafe, Corner Grill Cafe, corner shop, For Lease, grill, history, milk bar, mural, NSW, Street Fighter, take away
Burger joint/Under construction – Lilyfield, NSW
By Michael Wayne on October 28, 2015 | 1 Comment
Image courtesy Andrea Cook
How common a sight is this? Even if we're not living in the golden age of the take-away shop (and we really aren't), you still can't seem to swing a dead focaccia in Sydney's suburbs without hitting one of these, or an ex-one of these.
For those readers too young (pfft, yeah right) to remember, let me take you back for a moment. In my day, you could go to these places called milk bars or take-aways, which were usually plastered in Coca-Cola advertising. Not Pepsi…never Pepsi.
They'd make hot food and keep it in these giant contraptions called bain maries, which made it impossible to tell how long it'd been there. Crucially, they were also trojan horses into the then-fledgeling world of ethnic food: Australians not open minded enough to actually go to a Greek restaurant might still have a souvlaki at their local take-away. Ingenious, really.
This particular take-away seems to have spent most of its early years as a residential property before taking the plunge into the deep-fry. The kind of fatty junk sold here probably filled the stomachs of the blue-collar workers who once populated the area, or the staff and patients of Callan Park Mental Hospital which is just across the road, but as times and tastes changed it was out with the milkshakes and schnitzels (mmm, together at last), and in with the coffee and rolls.
But let's go back even earlier, shall we, to a time before deep fried food clogged Australia's arteries…
Dubbo Liberal and Macquarie Advocate, 11 February 1939
You'd better believe Mrs. Cutting wasn't serving up dim sims and Chiko rolls to her 50 guests. I wonder if Dubbo's local papers still herald the homecoming of any travelling Dubbogan (Dubsider? Dubbocastrian?)
The celebrations didn't last long, because by 1943 the Cuttings had cut loose, and the jocks were in.
Frater Family Tree
As you can see, Mr. John Smith (dynamic name, no wonder he became Jock) lived right here in the mid-1940s while working as a labourer. SEE? I WASN'T MAKING ALL THAT UP ABOUT IT BEING BLUE COLLAR!
SMH 13 July 1949
Ahem. But once Jock's labours were over, business became a little…mixed. A dynasty that would last over six decades began here for a measly 1500 pounds. I wonder if the take-away was making 140 pounds a week?
Google Street View, July 2014
As recently as last year, the newly minted Rozelle Coffee Lounge was still feeding the locals, but in a much harsher, more competitive environment. Go to Rozelle today and there are gourmet cafes on every corner, so the more meat-and-potatoes establishments face an uphill battle, and that's probably why the Coffee Lounge isn't around today.
As the suburb has become gentrified and all the blue collars have turned to ironic skivvies, there's no longer any call for a place like this. The Coffee Lounge knew it, as it's currently under construction, presumably transforming into something more suitable to today's clientele.
I don't know about you, but I'll always find those Coca-Cola takeaways suitable. There's something really…comforting about them. If you drive into a country town and things are looking unfamiliar and unsettling in a Deliverance kind of way, a place like this is all you need to soften the sound of the banjos.
Posted in: closed, corner shops, milk bars, mixed business, take aways | Tagged: Balmain, blue collar, burgers, callan park, Coca-Cola, deep fried, foccacia, food, former, history, jock geiss smith, john smith, kathleen robinson, lilyfield, milkshakes, mrs cutting, NSW, old, Rozelle, rozelle coffee lounge, Sydney, take away


Every once in a while, I come across a book, comic, show, or movie that I just can't properly explain. The series premiere of Happy! on Syfy was one of those things. The first issue of The Boys by Garth Ennis and Darick Robertson was another… I see a trend there. Recently I got to listen to the audible.com version of A Murder of Manatees, the second book in the Tom Stranger, Interdimensional Insurance Agent series by Larry Correia — and this definitely falls into that category.
The book is read by Adam Baldwin (Firefly), as was the first in the series, and he is mentioned in the series as well… so is the author. It's just one of those kinds of stories. The idea is that Tom Stranger works for the Stranger & Stranger Insurance agencies that protects people, groups, planets, and maniacal despots against things like being sucked into a black hole, alien invasion, or a variety of other disasters.
The book starts with Tom, Jimmy the Intern, Correia, and Wendell the Manatee addressing negative reviews of the first book and how they may have offended dolphins with some insensitive word choices. While leaving the press conference, Wendell, the accountant for a maniacal despot and world destroyer, is abducted. And since Stranger & Stranger has a policy on Wendell, it becomes Tom's job to find him.
The book is funny, irreverent science fiction that would be at home in an issue of Heavy Metal. I spent half the time in disbelief of what was just said and the other half anxiously waiting to see what would happen next. Baldwin does an excellent job with the narration, playing the deadpan Tom and the dim-witted Jimmy with perfect comedic timing. The book is a fun, quick listen, clocking in at just over two hours. Making it perfect for sitting in rush hour traffic.
You can find the book on Audible starting today.


text:
About Walk Free
Walk Free is an international human rights group focussed on the eradication of modern slavery, in all its forms, in our lifetime.
We independently and unashamedly agitate for change and pioneer research that reinforces the need for change in the world.
What is modern slavery?
Modern slavery is an umbrella term, which encompasses several types of exploitation, including forced labour, human trafficking and forced marriage.
Where it exists
Strengthening Systems
Eradicating modern slavery requires strong governments, a committed international community, and measures to hold these systems to account.
Global Slavery Index
Global Estimates of Modern Slavery
Making modern slavery socially unacceptable
Modern slavery will never be eradicated unless we tackle the social norms and discrimination that drive these forms of exploitation.
Global Freedom Network
The Freedom Fund
Eradicating slavery from all supply chains
Our interconnected world has increased the risk of exploitation throughout global supply chains – we must hold tackle these hidden forms of exploitation to eradicate modern slavery.
Bali Process Government and Business Forum
Business & Investor Toolkit
Strengthening supply chain transparency
Opinion09 Oct 2020
For every 130 girls or women on the planet, one is a modern slave
"What we see, we understand. What we see more, we understand more." This quote, from renowned Vietnam War photojournalist Phillip Jones Griffiths, sums up what has driven my work for the past 10 years.
For most Australians, modern slavery is a foreign concept. Many would assume they've never seen it – and if they have, they haven't recognised it. But slavery is all around us, in the clothes we wear, the toys we buy our children, the food we eat, it has even been discovered in some of our protected institutions.
I first encountered the crime of modern slavery at a young age and couldn't look away. This discovery set me on the path to establish Walk Free in 2011 – an international human rights organisation focused on ending modern slavery in our lifetime.
Over the years, we have built an expert team working across five continents, to produce the world's leading dataset measuring the prevalence of modern slavery. We provide guidance to business, government and religious leaders around the world, and advocate for international legislation to eradicate supply-chain risk and harmful practices such as forced and child marriage. We work closely with survivors and organisations on the frontline.
Four years ago I was in Lebanon's Bekaa Valley, assessing the increased vulnerability that refugee communities face to modern slavery and exploitation, in the context of distressed migration. I interviewed Syrian refugees about their experience of fleeing their homes, crossing the border in a war zone and adjusting to their new life in a refugee camp.
What I was expecting to document were stories of extreme hardship, of great loss and uncertainty and displacement. What I did not expect was the further injustices they were facing, purely because of their gender. Agree to your daughter marrying a stranger or have her navigate the risk of rape every day? One predator, or multiple? This was the impossible decision facing a mother in the camp who explained she did not want to force her daughter to marry, but in this setting, it was the best worst option.
In these camps there is no physical safety: no doors, no locks. Every day is a constant risk assessment between survival and sexual violence.
I know that travelling to witness the stories of mothers and daughters across the world is a privilege. By sharing their experiences, we seek to change the odds that are so heavily stacked against women and girls.
This week, alongside the United Nations' Every Woman Every Child and 40 international human rights groups and survivor organisations, Walk Free is launching our latest report, Stacked Odds, the most comprehensive evaluation of the female experience of modern slavery and exploitation to date. It reveals almost 29 million women and girls are victims of modern slavery.
The report reveals one in every 130 women and girls around the world is living in modern slavery. It demonstrates that gender is stacking the odds before girls are born. Girls and women are at higher risk of slavery and exploitation at every stage of their lives.
As horrifying as the statistics are, each of them represents an individual's story – a girl who has been robbed of her most basic human right. This Sunday – International Day Of the Girl – is a good time to confront that thought.
There can be no gender equality while millions of women and girls are systemically held back. There are more women and girls living in slavery today than there are people in Australia. And, although shocking, these numbers are conservative. They can't yet take into account the ramifications of COVID-19, which we know is driving even greater risk of forced marriage and modern slavery for women and girls around the world.
Exploitation at this scale is facilitated through global supply chains: the clothes we wear and products we buy and use every day. It is not the consumers' fault vulnerable people are being exploited, but it is our responsibility to show businesses we care about this. We must demand transparency and accountability. We vote for the kind of world we want to live in with the way we spend our money.
We can no longer say we can't see or understand this problem. Businesses, government and consumers must all acknowledge this ongoing human rights crisis and take action to unstack the odds for women and girls.
This article was published by The Sydney Morning Herald on 9th October 2020.
Media ReleaseCommonwealth countries must act urgently to meet modern slavery targets
NewsWalk Free launches toolkit to help business and investors combat modern slavery
NewsModern Slavery Act enforced by new WA government procurement debarment powers
NewsThe great setback
Media ReleaseGlobal campaign turns spotlight on women and girls in modern slavery
Media ReleaseFormer Australian Senator Lisa Singh joins fight to eradicate modern slavery
info@walkfree.org
PO Box 3155, Broadway
Nedlands, WA 6009
© 2021 Minderoo Foundation Pty Ltd. All rights reserved.


text:
Yvonne Flynn Coaching
Transforming Conversations
Coaching for the Workplace
Walk & Talk Coaching
Coaching for Carers
Browsing CategoryOn My Bookshelf
in	On My Bookshelf	on	 July 28, 2021	 July 28, 2021
tuesdays with Morrie by Mitch Albom
Share Facebook Twitter Pinterest Email 0
tuesdays with Morrie an old man, a young man, and life's greatest lesson Some books don't take very long to read but they make a lasting impact on the…
in	On My Bookshelf	on	 April 12, 2021	 April 12, 2021
The Artist's Way by Julia Cameron
We are all creative beings. However, we don't all believe we are creative. In my case, any belief in my artistic or creative ability was shattered in school when…
Man's Search for Meaning by Viktor E Frankl
What could be more important than our search for meaning? At some point in our life, we all ask the question "What is the meaning of life"? Or maybe…
in	On My Bookshelf	on	 March 9, 2021	 March 10, 2021
The Boy, the Mole, the Fox and the Horse by Charlie Mackesy
If I was asked to recommend just one book as a gift, I would pick this book every time! It is the most beautifully simple and yet incredibly powerful book…
Privacy Policy Terms of Service Pricing Policy FAQs


text:
package com.dslplatform.compiler.client.parameters;

import com.dslplatform.compiler.client.*;
import com.dslplatform.compiler.client.json.JSON;
import org.w3c.dom.*;

import java.io.*;
import java.lang.management.ManagementFactory;
import java.net.*;
import java.nio.charset.Charset;
import java.util.*;

public enum DslCompiler implements CompileParameter, ParameterParser {
	INSTANCE;

	@Override
	public String getAlias() {
		return "compiler";
	}

	@Override
	public String getUsage() {
		return "path or IP port";
	}

	private final static Charset UTF_8 = Charset.forName("UTF-8");

	private static final String DSL_COMPILER_SOCKET = "dsl-compiler-socket";

	public static Map<String, String> compile(
			final Context context,
			final String target,
			final List<String> settings,
			final String namespace,
			final String version,
			final List<File> dsls,
			final String library) throws ExitException {
		final Map<String, String> files = new HashMap<String, String>();
		final List<String> arguments = new ArrayList<String>();
		arguments.add("target=" + target);
		if (namespace != null && namespace.length() > 0) {
			arguments.add("namespace=" + namespace);
		}
		if (version != null && version.length() > 0) {
			arguments.add("version=" + version);
		}
		if (settings != null) {
			for (final String o : settings) {
				arguments.add("settings=" + o);
			}
		}
		if (library != null && library.length() > 0) {
			arguments.add("library=" + library);
		}
		for (final File f : dsls) {
			arguments.add("dsl=" + f.getAbsolutePath());
		}
		context.log("Compiling DSL to " + target + "...");
		final Either<byte[]> response = runCompiler(context, arguments);
		if (!response.isSuccess()) {
			context.error(response.whyNot());
			throw new ExitException();
		}
		final Either<Document> xml = Utils.readXml(new ByteArrayInputStream(response.get()));
		if (!xml.isSuccess()) {
			context.error(new String(response.get(), UTF_8));
			throw new ExitException();
		}
		final NodeList nodes = xml.get().getDocumentElement().getChildNodes();
		try {
			for (int i = 0; i < nodes.getLength(); i++) {
				final Element item = (Element) nodes.item(i);
				final Node key = item.getElementsByTagName("Key").item(0);
				final Node value = item.getElementsByTagName("Value").item(0);
				files.put(key.getTextContent(), value.getTextContent());
			}
		} catch (final Exception ex) {
			context.error("Invalid xml found");
			context.error(new String(response.get(), UTF_8));
			throw new ExitException();
		}
		context.notify("SOURCES", files);
		return files;
	}

	private static Either<byte[]> runCompiler(Context context, List<String> arguments) throws ExitException {
		final Socket socket = context.load(DSL_COMPILER_SOCKET);
		final File compiler = new File(context.get(INSTANCE));
		arguments.add("path=" + System.getProperty("user.dir"));
		context.notify("DSL", arguments);
		return socket != null
				? runCompilerSocket(context, socket, arguments)
				: runCompilerFile(context, compiler, arguments);
	}

	public static class ParseError {
		public final int line;
		public final int column;
		public final String error;

		ParseError(Map<String, Object> map) {
			this.line = map.containsKey("Line") ? ((Number) map.get("Line")).intValue() : 0;
			this.column = map.containsKey("Column") ? ((Number) map.get("Column")).intValue() : 0;
			this.error = (String) map.get("Error");
		}
	}

	public static class ParseResult {
		public final ParseError error;
		public final List<SyntaxConcept> tokens;

		@SuppressWarnings("unchecked")
		ParseResult(Map<String, Object> map) {
			List<Map<String, Object>> tokenMap = (List<Map<String, Object>>) map.get("Tokens");
			this.tokens = new ArrayList<SyntaxConcept>(tokenMap != null ? tokenMap.size() : 0);
			if (tokenMap != null) {
				for (Map<String, Object> t : tokenMap) {
					tokens.add(new SyntaxConcept(t));
				}
			}
			Object err = map.get("Error");
			this.error = err != null ? new ParseError((Map<String, Object>) err) : null;
		}
	}

	public enum SyntaxType {
		Keyword,
		Identifier,
		StringQuote,
		Expression,
		Type,
		Navigation,
		RuleStart,
		RuleExtension,
		RuleEnd
	}

	public static class SyntaxConcept {
		public final SyntaxType type;
		public final String value;
		public final String script;
		public final int line;
		public final int column;

		SyntaxConcept(Map<String, Object> map) {
			if (map.containsKey("Type")) {
				Object value = map.get("Type");
				if (value instanceof String) {
					this.type = SyntaxType.valueOf((String) value);
				} else {
					this.type = SyntaxType.values()[((Number) value).intValue()];
				}
			} else {
				this.type = SyntaxType.Keyword;
			}
			this.value = map.containsKey("Value") ? (String) map.get("Value") : "";
			this.script = map.containsKey("Script") ? (String) map.get("Script") : "";
			this.line = map.containsKey("Line") ? ((Number) map.get("Line")).intValue() : 0;
			this.column = map.containsKey("Column") ? ((Number) map.get("Column")).intValue() : 0;
		}
	}

	private static class ByteStream extends ByteArrayOutputStream {
		private final byte[] temp = new byte[8192];

		byte[] getBuffer() {
			return buf;
		}
	}

	private static int readInt(final byte[] buf) {
		int ret = 0;
		for (int i = 0; i < 4; i++) {
			ret <<= 8;
			ret |= (int) buf[i] & 0xFF;
		}
		return ret;
	}

	@SuppressWarnings("unchecked")
	public static class RuleInfo {
		public final String rule;
		public final String grammar;
		public final String[] children;
		public final String description;

		RuleInfo(Map<String, Object> json) {
			this.rule = (String) json.get("Rule");
			String gr = (String) json.get("Grammar");
			ArrayList<String> ch = (ArrayList<String>) json.get("Children");
			String de = (String) json.get("Description");
			this.grammar = gr != null ? gr : "";
			this.children = ch != null ? ch.toArray(new String[0]) : new String[0];
			this.description = de != null ? de : "";
		}
	}

	public static class TokenParser implements Closeable {
		private final Context context;
		private final File compiler;
		private final Map<String, RuleInfo> rules = new HashMap<String, RuleInfo>();

		private int port;
		private Socket socket;
		private Process process;
		private long startedOn;

		public int getPort() {
			return port;
		}

		TokenParser(final Context context, final File compiler, final int port, final Process process) {
			this.context = context;
			this.compiler = compiler;
			setupMonitor(port, process, this);
		}

		public Either<RuleInfo> findRule(String name) {
			if (name != null) {
				if (rules.isEmpty()) {
					try {
						Socket sck = setupSocket();
						if (sck == null) {
							return Either.fail("Unable to setup socket.");
						}
						Either<List<RuleInfo>> newRules = loadRules(sck);
						if (!newRules.isSuccess()) {
							return Either.fail(newRules.whyNot());
						}
						for (RuleInfo ri : newRules.get()) {
							rules.put(ri.rule, ri);
						}
					} catch (Exception ex) {
						return Either.fail("Unable to load rules: " + ex.getMessage());
					}
				}
				RuleInfo rule = rules.get(name);
				if (rule != null) return Either.success(rule);
				else Either.fail("Unknown rule: " + name);
			}
			return Either.fail("Rule name can't be null");
		}

		private void setupMonitor(final int port, final Process process, final TokenParser parser) {
			parser.port = port;
			parser.process = process;
			context.show("Started DSL Platform compiler at port: " + port);
			final Thread waitExit = new Thread(new Runnable() {
				@Override
				public void run() {
					try {
						process.waitFor();
					} catch (Exception ignore) {
					}
					context.show("DSL Platform compiler process stopped");
					parser.process = null;
				}
			});
			waitExit.setDaemon(true);
			waitExit.start();
			final Thread consumeOutput = new Thread(new Runnable() {
				@Override
				public void run() {
					final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
					final char[] buffer = new char[8192];
					int len;
					try {
						while ((len = reader.read(buffer)) != -1) {
							context.log(new String(buffer, 0, len));
						}
						reader.close();
					} catch (IOException ignore) {
					}
				}
			});
			consumeOutput.setDaemon(true);
			consumeOutput.start();
			startedOn = (new Date()).getTime();
		}

		public Either<ParseResult> parse(String dsl) {
			try {
				if (process == null) {
					final Random rnd = new Random();
					final int port = rnd.nextInt(40000) + 20000;
					final Either<Process> tryProcess = startServerMode(context, compiler, port);
					if (!tryProcess.isSuccess()) {
						return Either.fail(tryProcess.whyNot());
					}
					setupMonitor(port, tryProcess.get(), this);
					return Either.fail("Server restarting...");
				}
				Either<ParseResult> result = parseTokens(setupSocket(), dsl);
				if (!result.isSuccess()) {
					socketCleanup(false);
					result = parseTokens(setupSocket(), dsl);
				}
				if (!result.isSuccess()) {
					socketCleanup(true);
				}
				return result;
			} catch (Exception ex) {
				socketCleanup(true);
				return Either.fail(ex);
			}
		}

		@SuppressWarnings("unchecked")
		private Either<List<RuleInfo>> loadRules(final Socket socket) {
			final String command = "format=json rules include-length keep-alive\n";
			try {
				final OutputStream sos = socket.getOutputStream();
				sos.write(command.getBytes(UTF_8));
				sos.flush();
				final ByteStream os = getByteStream(context);
				final byte[] buf = os.temp;
				final InputStream is = socket.getInputStream();
				int read = is.read(buf, 0, 4);
				if (read != 4 || buf[0] != 'O') {
					return Either.fail("Invalid response from server.");
				}
				read = is.read(buf, 0, 4);
				if (read != 4) {
					return Either.fail("Invalid response from server. Expecting length.");
				}
				int length = readInt(buf);
				os.reset();
				while (length > 0 && (read = is.read(buf)) > 0) {
					length -= read;
					os.write(buf, 0, read);
				}
				os.flush();
				final List<Object> result = JSON.readList(os.getBuffer(), os.size());
				final List<RuleInfo> rules = new ArrayList<RuleInfo>(result.size());
				for (Object it : result) {
					rules.add(new RuleInfo((Map<String, Object>) it));
				}
				return Either.success(rules);
			} catch (IOException e) {
				return Either.fail(e.getMessage());
			}
		}

		private Either<ParseResult> parseTokens(final Socket socket, final String dsl) throws IOException {
			final byte[] dslUtf8 = dsl.getBytes(UTF_8);
			final String command = "tokens=" + dslUtf8.length + " format=json include-length keep-alive\n";
			try {
				final OutputStream sos = socket.getOutputStream();
				sos.write(command.getBytes(UTF_8));
				sos.write(dslUtf8);
				sos.flush();
				final ByteStream os = getByteStream(context);
				final byte[] buf = os.temp;
				final InputStream is = socket.getInputStream();
				int read = is.read(buf, 0, 4);
				if (read != 4 || buf[0] != 'O') {
					return Either.fail("Invalid response from server.");
				}
				read = is.read(buf, 0, 4);
				if (read != 4) {
					return Either.fail("Invalid response from server. Expecting length.");
				}
				int length = readInt(buf);
				os.reset();
				while (length > 0 && (read = is.read(buf)) > 0) {
					length -= read;
					os.write(buf, 0, read);
				}
				os.flush();
				return Either.success(new ParseResult(JSON.readMap(os.getBuffer(), os.size())));
			} catch (IOException e) {
				return Either.fail(e.getMessage());
			}
		}

		private Socket setupSocket() throws ExitException, IOException {
			if (socket != null) return socket;
			context.put(INSTANCE, Integer.toString(port));
			if (!INSTANCE.check(context)) {
				context.error("Unable to setup socket to DSL Platform");
			}
			context.show("Socket connected");
			socket = context.load(DSL_COMPILER_SOCKET);
			if (socket != null) {
				try {
					socket.setSoTimeout(10000);
				} catch (Exception ignore) {
				}
			}
			return socket;
		}

		private void socketCleanup(final boolean restartServer) {
			final long now = (new Date()).getTime();
			if (restartServer && now > startedOn + 60000) {
				stopServer();
			}
			final Socket sock = this.socket;
			if (sock != null) {
				try {
					sock.close();
				} catch (Exception ignore) {
				}
				this.socket = null;
				context.cache(DSL_COMPILER_SOCKET, null);
			}
		}

		private void stopServer() {
			final Process proc = process;
			if (proc != null) {
				context.show("Stopped DSL Platform compiler");
				try {
					proc.destroy();
				} catch (Exception ignore) {
				}
				this.process = null;
			}
		}

		public void close() {
			stopServer();
		}
	}

	public static Either<TokenParser> setupServer(final Context context, final File compiler) {
		context.show("Starting DSL Platform compiler...");
		final Random rnd = new Random();
		final int port = rnd.nextInt(40000) + 20000;
		final Either<Process> tryProcess = startServerMode(context, compiler, port);
		if (!tryProcess.isSuccess()) {
			return Either.fail(tryProcess.whyNot());
		}
		return Either.success(new TokenParser(context, compiler, port, tryProcess.get()));
	}

	private static Either<Process> startServerMode(final Context context, final File compiler, final int port) {
		final List<String> arguments = new ArrayList<String>();
		arguments.add(compiler.getAbsolutePath());
		arguments.add("server-mode");
		arguments.add("port=" + port);
		try {
			if (InetAddress.getLocalHost() instanceof Inet4Address) {
				arguments.add("ip=v4");
			}
		} catch (UnknownHostException ignore) {
		}
		try {
			String procId = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
			arguments.add("parent=" + procId);
		} catch (Exception ignore) {
		}
		if (!Utils.isWindows()) {
			final Either<String> mono = Mono.findMono(context);
			if (mono.isSuccess()) {
				arguments.add(0, mono.get());
			} else {
				return Either.fail("Mono is required to run DSL compiler. Mono not detected or specified.");
			}
		}
		final ProcessBuilder pb = new ProcessBuilder(arguments);
		context.put(INSTANCE, Integer.toString(port));
		try {
			return Either.success(pb.start());
		} catch (IOException e) {
			return Either.fail(e);
		}
	}

	private static boolean hasWhitespace(final String input) {
		for (int i = 0; i < input.length(); i++) {
			if (Character.isWhitespace(input.charAt(i)))
				return true;
		}
		return false;
	}

	private static Either<byte[]> runCompilerSocket(
			final Context context,
			final Socket socket,
			final List<String> arguments) throws ExitException {
		final StringBuilder sb = new StringBuilder();
		for (String arg : arguments) {
			if (!arg.startsWith("\"") && hasWhitespace(arg)) {
				sb.append('"');
				sb.append(arg);
				sb.append('"');
			} else {
				sb.append(arg);
			}
			sb.append(' ');
		}
		sb.append("include-length keep-alive\n");
		try {
			final OutputStream sos = socket.getOutputStream();
			sos.write(sb.toString().getBytes(UTF_8));
			sos.flush();
			final ByteStream os = getByteStream(context);
			final byte[] buf = os.temp;
			final InputStream is = socket.getInputStream();
			int read = is.read(buf, 0, 4);
			final boolean success = read == 4 && buf[0] == 'O';
			read = is.read(buf, 0, 4);
			if (read != 4) {
				return Either.fail("Invalid response from server. Expecting length.");
			}
			int length = readInt(buf);
			context.log("Response size from DSL compiler: " + length);
			os.reset();
			while (length > 0 && (read = is.read(buf)) > 0) {
				length -= read;
				os.write(buf, 0, read);
			}
			os.flush();
			if (!success) {
				return Either.fail(os.toString("UTF-8"));
			}
			return Either.success(os.toByteArray());
		} catch (IOException e) {
			context.error(e);
			throw new ExitException();
		}
	}

	private static ByteStream getByteStream(Context context) {
		ByteStream os = context.load("dsl-stream");
		if (os == null) {
			os = new ByteStream();
			context.cache("dsl-stream", os);
		}
		return os;
	}

	private static Either<byte[]> runCompilerFile(
			final Context context,
			final File compiler,
			final List<String> arguments) throws ExitException {
		Either<Utils.CommandResult> result;
		if (Utils.isWindows()) {
			result = Utils.runCommand(context, compiler.getAbsolutePath(), compiler.getParentFile(), arguments);
		} else {
			final Either<String> mono = Mono.findMono(context);
			if (mono.isSuccess()) {
				arguments.add(0, compiler.getAbsolutePath());
				result = Utils.runCommand(context, mono.get(), compiler.getParentFile(), arguments);
				if(monoNativeFailure(result) && promptUserMonoRetry(context)) {
					context.warning("Retrying in 1 second ...");
					context.error(result.explainError());
					sleep(1000);
					result = Utils.runCommand(context, mono.get(), compiler.getParentFile(), arguments);
				}
			} else {
				context.error("Mono is required to run DSL compiler. Mono not detected or specified.");
				throw new ExitException();
			}
		}
		if (!result.isSuccess()) {
			return Either.fail(result.whyNot());
		}
		if (result.get().exitCode != 0) {
			return Either.fail(result.get().output + result.get().error);
		}
		return Either.success(result.get().output.getBytes(UTF_8));
	}

	public static Either<String> migration(
			final Context context,
			final DatabaseInfo dbInfo,
			final List<File> currentDsls) throws ExitException {
		final List<String> arguments = new ArrayList<String>();
		arguments.add("target=" + dbInfo.database.toLowerCase() + dbInfo.dbVersion);
		if (context.contains(VarraySize.INSTANCE)) {
			arguments.add("varray=" + context.get(VarraySize.INSTANCE));
		}
		if (context.contains(GrantRole.INSTANCE)) {
			arguments.add("role=" + context.get(GrantRole.INSTANCE));
		}
		if (dbInfo.dsl != null && !dbInfo.dsl.isEmpty()) {
			final StringBuilder oldDsl = new StringBuilder();
			for (final String v : dbInfo.dsl.values()) {
				oldDsl.append(v);
			}
			final File previousDsl = new File(TempPath.getTempProjectPath(context), "old.dsl");
			try {
				Utils.saveFile(context, previousDsl, oldDsl.toString());
			} catch (IOException ex) {
				context.error("Unable to save old DSL version for comparison.");
				return Either.fail(ex);
			}
			arguments.add("previous-dsl=" + previousDsl.getAbsolutePath());
			if (dbInfo.compilerVersion != null) {
				arguments.add("previous-compiler=" + dbInfo.compilerVersion);
			}
		}
		for (final File f : currentDsls) {
			arguments.add("dsl=" + f.getAbsolutePath());
		}
		context.log("Creating SQL migration for " + dbInfo.database + " ...");
		final Either<byte[]> result = runCompiler(context, arguments);
		if (!result.isSuccess()) {
			return Either.fail(result.whyNot());
		}
		final String sql = new String(result.get(), UTF_8);
		return Either.success(context.notify("MIGRATION", sql));
	}

	public static Either<Boolean> parse(final Context context, final List<File> dsls) throws ExitException {
		final List<String> arguments = new ArrayList<String>();
		for (final File f : dsls) {
			arguments.add("dsl=" + f.getAbsolutePath());
		}
		context.log("Parsing DSL...");
		final Either<byte[]> response = runCompiler(context, arguments);
		if (!response.isSuccess()) {
			return Either.fail(response.whyNot());
		}
		return Either.success(false);
	}

	@Override
	public Either<Boolean> tryParse(final String name, final String value, final Context context) {
		if ("compiler".equals(name)) {
			context.put(INSTANCE, value);
			return Either.success(true);
		} else {
			return Either.success(false);
		}
	}

	@Override
	public boolean check(final Context context) throws ExitException {
		final String value = context.contains(INSTANCE) ? context.get(INSTANCE) : null;
		final boolean isEmpty = value == null || value.length() == 0;
		if (!isEmpty) {
			int port = -1;
			try {
				port = Integer.parseInt(value);
			} catch (NumberFormatException ignore) {
			}
			if (port > 0) {
				Socket socket;
				try {
					socket = new Socket("::1", port);
				} catch (Exception ex6) {
					context.log("Unable to open socket to port on IPv6 localhost: " + value);
					try {
						socket = new Socket("127.0.0.1", port);
					} catch (Exception ex4) {
						context.error("Unable to open socket to port on localhost: " + value);
						context.error(ex4);
						throw new ExitException();
					}
				}
				if (socket.isConnected()) {
					try {
						socket.setKeepAlive(true);
						socket.setSoTimeout(30000);
					} catch (SocketException ignore) {
					}
					context.cache(DSL_COMPILER_SOCKET, socket);
					return true;
				} else {
					context.error("Unable to connect to specified compiler on localhost:" + value);
					throw new ExitException();
				}
			}
		}
		final File path = new File(isEmpty ? "dsl-compiler.exe" : value);
		if (path.isDirectory()) {
			context.error("Specified compiler path is a directory: " + path.getAbsolutePath());
			throw new ExitException();
		}
		if (!path.exists()) {
			if (!isEmpty) {
				if (context.canInteract() || context.contains(Download.INSTANCE)) {
					context.warning("Specified compiler path not found: " + path.getAbsolutePath());
				} else {
					context.error("Specified compiler path not found: " + path.getAbsolutePath());
					throw new ExitException();
				}
			}
			final File tempPath = TempPath.getTempRootPath(context);
			final File compiler = new File(tempPath, "dsl-compiler.exe");
			if (compiler.exists() && testCompiler(context, compiler)) {
				if (isEmpty) {
					if (context.contains(Download.INSTANCE)) {
						context.show("Checking for latest compiler version due to download option");
						checkForLatestVersion(context, path, tempPath, compiler);
					}
					context.put(INSTANCE, compiler.getAbsolutePath());
					return true;
				}
				if (context.canInteract()) {
					final String answer =
							context.ask("Compiler found in default location: "
									+ compiler.getAbsolutePath() + ". Do you wish to use it? (y/N)");
					if (answer.toLowerCase().equals("y")) {
						context.put(INSTANCE, compiler.getAbsolutePath());
						return true;
					}
				}
			}
			if (!context.contains(Download.INSTANCE)) {
				if (context.canInteract()) {
					final String answer = context.ask("Do you wish to download compiler from the Internet? (y/N)");
					if (!answer.toLowerCase().equals("y")) throw new ExitException();
				} else throw new ExitException();
			}
			context.show("Downloading DSL Platform compiler since it's not found in: " + compiler.getAbsolutePath());
			downloadCompiler(context, path, tempPath, compiler, true);
		} else {
			if (!testCompiler(context, path)) {
				context.error("Specified compiler is invalid: " + path.getAbsolutePath());
				throw new ExitException();
			}
			context.put(INSTANCE, path.getAbsolutePath());
		}
		return true;
	}

	public static void checkForLatestVersion(Context context, File path, File tempPath, File compiler) throws ExitException {
		final Either<Long> lastModified = Download.lastModified(context, "dsl-compiler", "dsl-compiler.exe", compiler.lastModified());
		if (!lastModified.isSuccess()) {
			context.warning(lastModified.whyNot());
		} else if (compiler.lastModified() != lastModified.get()) {
			downloadCompiler(context, path, tempPath, compiler, false);
		}
	}

	private static void downloadCompiler(
			final Context context,
			final File path,
			final File tempPath,
			final File compiler,
			final boolean failOnError) throws ExitException {
		final long lastModified;
		try {
			lastModified = Download.downloadAndUnpack(context, "dsl-compiler", tempPath);
		} catch (final IOException ex) {
			final String remoteUrl = Download.remoteUrl(context);
			if (failOnError) {
				context.error("Error downloading compiler from " + remoteUrl);
				context.error("Try specifying alternative compiler or download location.");
				context.error(ex);
				throw new ExitException();
			} else {
				context.warning("Error downloading compiler from " + remoteUrl);
				context.warning("Skipping...");
				return;
			}
		}
		if (!testCompiler(context, compiler)) {
			context.error("Specified compiler is invalid: " + path.getAbsolutePath());
			throw new ExitException();
		}
		if (!compiler.setLastModified(lastModified)) {
			context.warning("Unable to set matching last modified date");
		}
		context.put(INSTANCE, compiler.getAbsolutePath());
	}

	private static boolean testCompiler(final Context context, final File path) throws ExitException {
		if (Utils.isWindows()) {
			return Utils.testCommand(context, path.getAbsolutePath(), "DSL Platform");
		} else {
			final Either<String> mono = Mono.findMono(context);
			if (mono.isSuccess()) {
				return Utils.testCommand(context, mono.get(), "DSL Platform", Collections.singletonList(path.getAbsolutePath()));
			} else {
				context.error("Mono is required to run DSL compiler. Mono not detected or specified.");
				throw new ExitException();
			}
		}
	}

	@Override
	public void run(final Context context) {
	}

	@Override
	public String getShortDescription() {
		return "Path or localhost port to DSL Platform compiler. .NET or Mono is required to run the compiler";
	}

	@Override
	public String getDetailedDescription() {
		return "DSL Platform compiler.\n" +
				"Requires .NET/Mono to run.\n" +
				"It is available for download at: https://tools.dsl-platform.com/dsl-compiler.zip\n" +
				"\n" +
				"Example:\n" +
				"\tcompiler\n" +
				"\tcompiler=/var/dsl-platform/dsl-compiler.exe\n" +
				"\tcompiler=12345\n";
	}

	private static boolean promptUserMonoRetry(Context context) {
		context.warning("Running the compiler failed due to a native Mono bug. ");
		if(context.canInteract()) {
			String answer = context.ask("Do you wish to retry [Y/n]?");
			return answer != null && ("y".equalsIgnoreCase(answer.trim()) || answer.trim().isEmpty());
		} else {
			return true;
		}
	}

	private static final String[] MONO_NATIVE_ERROR_SNIPPETS = {
			"SIGSEGV",
			"Native stacktrace:",
			"mono() [0x",
			"Debug info from gdb:",
			"Invalid IL code"
	};

	/**
	 * Checks if the output contains one of the regexes which could indicate
	 * a recurring mono bug.
	 */
	static boolean monoNativeFailure(String output) {
		if (output == null) {
			return false;
		} else {
			for (String snippet : MONO_NATIVE_ERROR_SNIPPETS) {
				if (output.contains(snippet)) return true;
			}
			return false;
		}
	}

	static boolean monoNativeFailure(Either<Utils.CommandResult> result) {
		if (result == null || !result.isSuccess()) {
			return true;
		} else {
			Utils.CommandResult commandResult = result.get();
			return monoNativeFailure(commandResult.output) || monoNativeFailure(commandResult.error);
		}
	}

	private static void sleep(long millis) {
		try {
			Thread.sleep(millis);
		} catch (InterruptedException ignore) {
		}
	}
}

redpajama_set_name: RedPajamaGithub


text:
Q: Ant Multiple Property Values with the Same Name I am working on an ant build script. How do i set the two property value with the same name:
<property name="java.src.dir" location="src" />
<property name="java.src.dir" location="src/java" />

In my application some of the directories are src/java and some are src. I need to make it flexible enough to work on both.


If you've been indoctrinated into the "Cult of Apple" then you're going to hate this because it's not "cool enough", and if you're less technically savvy (hi Mum) then probably the installation/file transfer is a bit more complicated than iTunes (but with less spyware).
One thing that's a bit annoying is the fiddly cabling for charging and music transfer. It's a nice setup as you only need 1 set of cables, but the plugs and stuff are just a bit hokey. The iPod "dual-use cables" are a much better idea.
A nice thing about the iriver that isn't immediately obvious. You can purchase a separate battery for them. So, no stupid Apple tax on your battery life, and from memory it wasn't expensive (~$70 Australian). This means I can have a spare battery hanging around, and I don't need that stupid "battery pack" to make it work.
Currently I'd give the iriver an 8/10 all round, and would recommend it to anybody looking for an MP3 player who is marginally more technically savvy than a complete computer-phobe.
You could be comparing apples with oranges here.
I imagine your Mini wasn't the 2nd gen Mini, nor is it a Nano. So it's a little unfair to compare to a current player.
Also you can't beat iPod for accessories!
Check out any old store (say JB HiFi), and count the things that click or slip with the iPod, then count the support for other flavours of MP3 player.


The 40000Hz strong ultrasound waves penetrate to the cellulite tissue and microvibrate the fat cells in high frequency. This result will generate countless air pocket, which breaks the fat cells membrane. This is so called Cavitation Effect. During this process, the triglycerides in the fat cells are decomposed into glycerol and free fatty acid. These stuff will be cleared by metabolism. The effect is visible right after just one treatment.
The Lipo Vacuum Cellulite Massage treatment pulls up the cellulite by the vacuum suction power and shakes it while the treatment probe is moving along the skin surface. This function will stimulate the collagen regeneration and reconstruct the elastin fiber so that the fat deposits can be relocated. This effect will reduce the cellulite lumps and bumps and make the cellulite less noticeable in a short period.
Multipolar radio frequency treatment can produce friction heat among the fat tissue. The thermal effect will dissolve the fat cells, making triglycerides into glycerin and free fatty acid.
This treatment probe can be used to tightening the skin, lift face and improve the regeneration of collagen and elastin fiber. It is a good treatment for anti Orange Peel.
It utilizes BIO microcurrent to activate the skin cells to move nutrients and waste products more efficiently. The skin will become more tightening and smooth. It is a good way for face lifting and rejuvenating.