text:
Design x Technology x Post Production
Pakistan selects Joyland as Oscar submission.
Nathan joins Filmmaker U to talk film sound design.
Malala Yousafzai joins Joyland as executive producer.
Nathan on building the TiSD Burbank studios and working with immersive audio on the Music Production Podcast.
Joyland wins Un Certain Regard Jury Prize at Cannes
TiSD Feature Film Joyland to premiere at Cannes Film Festival
TiSD Feature Film I Love My Dad wins the Grand Jury Prize and Audience Award at SXSW
Krotos interview with Nathan on his approach to dynamic, software driven sound design.
Building a Post Business: This is Sound Design's Nathan Ruyle in Post Magazine
We are returning to SXSW in 2022 with two feature films: The comedy I Love My Dad and documentary Crows are White
Check out Nathan's article The Invisible Art: Why Sound Design Is Finally Getting Its Due in Moviemaker Magazine
This is Sound Design is an independent sound design and post-production studio, with facilities in Los Angeles and New York. Founded by Nathan Ruyle in 2008, TiSD builds relationships with filmmakers and digital media creators through design-centric audio post-production.
TiSD has developed a sound creation workflow that is focused on bringing original ideas to life through a collaborative process that integrates design into every step, from editorial and foley through the final mix. Through state-of-the-art facilities and integration of emerging technologies, we continue to push the boundaries of what is possible with sound in cinema, broadcast and beyond.
This is Sound Design was built on an independent creative spirit which continues to inspire our original approach to the sound of each project. We are proud of the diversity of our team and our colaborators and are excited to empower this new generation of creators to tell their stories in their own way.
Nathan Ruyle
Founder | Supervising Sound Designer | Rerecording Mixer
IMDB | Resume
This is Sound Design was founded on the idea that the process of creating sound for a film is much more than a collection of services. As the tools have evolved in the last decade, most films can and should have a more personal and organic approach to realize the potential of the sound.
Just as a production designer develops the look and visual language of a film, we work with filmmakers to develop a sonic language unique to each project. Then our team collaborates through editorial, foley, and the final mix to realize the sound design, translating concepts and ideas into an original sound experience.
If you are interested in working with This is Sound Design on an upcoming film, please contact us for a collection of clips of our past work relevant to your project.
Navigate to our IMDB page for our ever-growing list of feature and short film projects.
This is Sound Design is bringing our cinematic sound design and mixing process to episodic tv and web series. We have most recently worked with director David Wain and Jax Media for the upcoming comedy series Today's Special and with Gunpowder and Sky on the scifi/action series ALT.
We are creating some of the most cinematic and highest quality sound for storytelling in the podcast space, drawing our experience in traditional broadcast radio (Founder Nathan worked in Public Radio prior to founding TiSD) coupled with our workflows and creative approach to sound in film. Our new Burbank facility includes dedicated studio space for podcast production.
Hunted, our recent collaboration with Dick Wolf and Endeavor Audio, reached the top ten of the iTunes Charts in 2019.
We design and mix commercials and branded content for clients big and small, from startups and nonprofits to Google and Intel.
We have the knowledge, experience and tools to make your presentation sound great on any device, be it television, radio, computer, mobile phone, or tablet. For broadcast we have a trusted mastering process to assure compliance with US and European broadcast loudness standards.
Our primary facilities in LA are conveniently located and client friendly for voiceover, mixes and final playback sessions for up to 8 in attendance. We also offer remote voiceover and review sessions at our facility in NYC or from any internet connected computer.
Commercial Sound Design and Mix for Intel
This is Sound Design is pioneering cinematic sound design and mixing for immersive media. Our workflow for VR is built on our years of experience creating sound for films, combined with a deep background in emerging technology. We've been working hands-on with interactive audio in Max/MSP, Unity and Fmod for over a decade and are thrilled to have these parts of our work converging in immersive audio for virtual and augmented reality.
As both the production and delivery technology for VR is rapidly evolving, we continue to refine our process which begins with planning in pre-production, continues into the field or on-set with specialized microphones and recording techniques and then moves into post.
You can experience our work in VR on Hulu's Interactive VR Web Series Door #1:
This is Sound Design mixes feature film trailers for theatrical, broadcast and online presentation.
We mix theatrical trailers for TASA compliance in our reference calibrated mix-stage with industry standard Leqm metering. Using our custom delivery workflow we can be certain the theatrical experience of the trailer will be the same when viewing at home or on a smart phone or tablet.
This is Sound Design's studio facilities are located at 911 N Victory Blvd, Burbank, CA 91502.
Click here for directions.
At this location we offer 3 mix stages, 2 isolated adr studios, foley recording, and additional sound editorial suites.
Click here to learn more about our new facility
This is Sound Design Studios Inc


text:
using System;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;

namespace Tencent
{
    /// <summary>
    /// 腾讯提供的微信加解密服务。
    /// </summary>
    public class Cryptography
    {
        private static int HostToNetworkOrder(int inval)
        {
            var outval = 0;
            for (var i = 0; i < 4; i++)
                outval = (outval << 8) + ((inval >> (i * 8)) & 255);
            return outval;
        }

        ///  <summary>
        ///  AES解密方法。
        ///  </summary>
        ///  <param name="input">需要解密的内容。</param>
        ///  <param name="encodingAesKey">解密Key。</param>
        /// <param name="appId">公众号的AppId。</param>
        /// <returns>解密后的内容。</returns>
        public static string AES_decrypt(string input, string encodingAesKey, out string appId)
        {
            var key = Convert.FromBase64String(encodingAesKey + "=");
            var iv = new byte[16];
            Array.Copy(key, iv, 16);
            var btmpMsg = AES_decrypt(input, iv, key);

            var len = BitConverter.ToInt32(btmpMsg, 16);
            len = IPAddress.NetworkToHostOrder(len);

            var bMsg = new byte[len];
            var bAppid = new byte[btmpMsg.Length - 20 - len];
            Array.Copy(btmpMsg, 20, bMsg, 0, len);
            Array.Copy(btmpMsg, 20 + len, bAppid, 0, btmpMsg.Length - 20 - len);
            var oriMsg = Encoding.UTF8.GetString(bMsg);
            appId = Encoding.UTF8.GetString(bAppid);

            return oriMsg;
        }

        /// <summary>
        /// AES加密。
        /// </summary>
        /// <param name="input">需要加密的内容。</param>
        /// <param name="encodingAesKey">加密Key。</param>
        /// <param name="appId">公众号的AppId。</param>
        /// <returns>加密后的内容。</returns>
        public static string AES_encrypt(string input, string encodingAesKey, string appId)
        {
            var key = Convert.FromBase64String(encodingAesKey + "=");
            var iv = new byte[16];
            Array.Copy(key, iv, 16);
            var randcode = CreateRandCode(16);
            var bRand = Encoding.UTF8.GetBytes(randcode);
            var bAppid = Encoding.UTF8.GetBytes(appId);
            var btmpMsg = Encoding.UTF8.GetBytes(input);
            var bMsgLen = BitConverter.GetBytes(HostToNetworkOrder(btmpMsg.Length));
            var bMsg = new byte[bRand.Length + bMsgLen.Length + bAppid.Length + btmpMsg.Length];

            Array.Copy(bRand, bMsg, bRand.Length);
            Array.Copy(bMsgLen, 0, bMsg, bRand.Length, bMsgLen.Length);
            Array.Copy(btmpMsg, 0, bMsg, bRand.Length + bMsgLen.Length, btmpMsg.Length);
            Array.Copy(bAppid, 0, bMsg, bRand.Length + bMsgLen.Length + btmpMsg.Length, bAppid.Length);

            return AES_encrypt(bMsg, iv, key);
        }

        private static string CreateRandCode(int codeLen)
        {
            const string codeSerial = "2,3,4,5,6,7,a,c,d,e,f,h,i,j,k,m,n,p,r,s,t,A,C,D,E,F,G,H,J,K,M,N,P,Q,R,S,U,V,W,X,Y,Z";
            if (codeLen == 0)
            {
                codeLen = 16;
            }
            var arr = codeSerial.Split(',');
            var code = string.Empty;
            var rand = new Random(unchecked((int)DateTime.Now.Ticks));
            for (var i = 0; i < codeLen; i++)
            {
                var randValue = rand.Next(0, arr.Length - 1);
                code += arr[randValue];
            }
            return code;
        }

        private static string AES_encrypt(byte[] input, byte[] iv, byte[] key)
        {
            using (var aes = new RijndaelManaged
            {
                KeySize = 256,
                BlockSize = 128,
                Padding = PaddingMode.None,
                Mode = CipherMode.CBC,
                Key = key,
                IV = iv
            })
            {
                //秘钥的大小,以位为单位
                //支持的块大小
                //填充模式
                //aes.Padding = PaddingMode.PKCS7;
                var encrypt = aes.CreateEncryptor(aes.Key, aes.IV);
                byte[] xBuff;

                #region 自己进行PKCS7补位,用系统自己带的不行

                var msg = new byte[input.Length + 32 - input.Length % 32];
                Array.Copy(input, msg, input.Length);
                var pad = Kcs7Encoder(input.Length);
                Array.Copy(pad, 0, msg, input.Length, pad.Length);

                #endregion 自己进行PKCS7补位,用系统自己带的不行

                #region 注释的也是一种方法,效果一样

                //ICryptoTransform transform = aes.CreateEncryptor();
                //byte[] xBuff = transform.TransformFinalBlock(msg, 0, msg.Length);

                #endregion 注释的也是一种方法,效果一样

                using (var ms = new MemoryStream())
                {
                    using (var cs = new CryptoStream(ms, encrypt, CryptoStreamMode.Write))
                    {
                        cs.Write(msg, 0, msg.Length);
                        xBuff = ms.ToArray();
                    }
                }

                var output = Convert.ToBase64String(xBuff);
                return output;
            }
        }

        private static byte[] Kcs7Encoder(int textLength)
        {
            const int blockSize = 32;
            // 计算需要填充的位数
            var amountToPad = blockSize - (textLength % blockSize);
            if (amountToPad == 0)
            {
                amountToPad = blockSize;
            }
            // 获得补位所用的字符
            var padChr = Chr(amountToPad);
            var tmp = string.Empty;
            for (var index = 0; index < amountToPad; index++)
            {
                tmp += padChr;
            }
            return Encoding.UTF8.GetBytes(tmp);
        }

        /**
         * 将数字转化成ASCII码对应的字符,用于对明文进行补码
         *
         * @param a 需要转化的数字
         * @return 转化得到的字符
         */

        private static char Chr(int a)
        {
            var target = (byte)(a & 0xFF);
            return (char)target;
        }

        private static byte[] AES_decrypt(string input, byte[] iv, byte[] key)
        {
            using (var aes = new RijndaelManaged
            {
                KeySize = 256,
                BlockSize = 128,
                Mode = CipherMode.CBC,
                Padding = PaddingMode.None,
                Key = key,
                IV = iv
            })
            {
                var decrypt = aes.CreateDecryptor(aes.Key, aes.IV);
                byte[] xBuff;
                using (var ms = new MemoryStream())
                {
                    using (var cs = new CryptoStream(ms, decrypt, CryptoStreamMode.Write))
                    {
                        var xXml = Convert.FromBase64String(input);
                        var msg = new byte[xXml.Length + 32 - xXml.Length % 32];
                        Array.Copy(xXml, msg, xXml.Length);
                        cs.Write(xXml, 0, xXml.Length);
                        xBuff = Decode2(ms.ToArray());
                    }
                }
                return xBuff;
            }
        }

        private static byte[] Decode2(byte[] decrypted)
        {
            var pad = decrypted[decrypted.Length - 1];
            if (pad < 1 || pad > 32)
            {
                pad = 0;
            }
            var res = new byte[decrypted.Length - pad];
            Array.Copy(decrypted, 0, res, 0, decrypted.Length - pad);
            return res;
        }
    }
}

redpajama_set_name: RedPajamaGithub


The world's best wheel cleaner, designed by detailers, for detailers. Quicker, better results than you have ever achieved before.
Power Wheel Cleaner™ has been the most efficient wheel cleaner available since its introduction in 2006. Now, in its fourth iteration, absolutely nothing targets and removes brake dust as efficiently as Power Wheel Cleaner™.
Power Wheel Cleaner™ will not damage any paint or glass.
Should you make the mistake of applying it to the body, replace waxes on any section of your vehicle where Power Wheel Cleaner™ is been applied.
Power Wheel Cleaner™ will clean most dirty wheels without requiring any touching and requires only light agitation from a wheel brush for very heavily soiled wheels -even with baked on dusting.
1. For best results, spray a few pumps of Power Wheel Clean™ directly onto cool (never hot) wheels.
2. Allow Power Wheel Clean™ to dwell for 1-2 minutes.
3. Remove by rinsing, preferably with high pressure water.
For heavily soiled wheels, use a wheel brush to agitate and allow slightly longer dwelling times.
Important: Power Wheel Cleaner contains two active ingredients which separate. When refilling containers, shake refill container well before dispensing. Always shake well before each and every use to ensure both components are used simultaneously.


Only 1d 4h 53m 59s left!
This is my new model of Jet Zeppelin!
Thank you watched this image!
Very nice. This would be great animated!
Splendid, I like this format a lot.
Another fantastic model,and you've placed it in an equally fantastic setting...great work!
Another cool model. Always beautifully done.
Great fantasy world, I would like to be a traveler there :-).


art deco bar cart art bar cart jean fray art bar trolley cart art deco brass bar cart.
art deco bar cart art champagne bar cart by for sale art deco style bar cart.
art deco bar cart art circular bar cart art deco bar cart australia.
art deco bar cart 3 gallery vintage art bar cart art deco bar carts for sale.
art deco bar cart art rolling bar cart art deco brass bar cart.
art deco bar cart vintage art bar cart in chrome and oak for sale art deco style bar cart.
art deco bar cart art bar cart carts 1 champagne by art bar cart french art deco bar cart.
art deco bar cart art bar cart art deco bar trolley cart.
art deco bar cart a vintage art inspired two tier bar cart with a circular chrome frame and clear art deco bar trolley cart.
art deco bar cart art rolling bar cart art deco bar trolley cart.
art deco bar cart art bar cart by circa art deco champagne bar cart by pommery.
art deco bar cart art style bar cart art deco champagne bar cart by pommery.
art deco bar cart art bar art bars art rolling bar cart vintage art deco bar cart.
art deco bar cart elegant art bar cart art antiques art deco style bar cart.
art deco bar cart art streamline nickel and glass bar cart by art deco brass bar cart.
art deco bar cart art wrought iron marble top bar cart art deco bar trolley cart.
art deco bar cart art bar cart modern bar carts modern acrylic and glass serving bar cart modern art art bar cart art deco bar carts for sale.
art deco bar cart interesting art graphic furniture with the great style art graphic furniture chrome art deco bar cart australia.
art deco bar cart streamlined aluminum art bar cart vintage art deco bar cart.
art deco bar cart interior art home designs entertaining bar carts not only fill up modern creative cart art deco bar carts for sale.
art deco bar cart mid century modernist bar cart art antiques art deco chrome bar cart.
art deco bar cart mid century art style metal bar cart serving table art deco bar carts for sale.
art deco bar cart industries dynamic art aluminium and black art bar cart art deco bar cart australia.
art deco bar cart bar cart brass art deco brass bar cart.
art deco bar cart art deco chrome bar cart.
art deco bar cart art bar cart in bamboo brass and smoked glass for sale at vintage art deco bar cart.
art deco bar cart art deco bar trolley cart.
art deco bar cart mesmerizing bar carts for sale at wonderful rolling liquor cart art roaring serving art deco bar cart australia.
art deco bar cart vintage art chrome bar cart art deco bar carts for sale.
art deco bar cart stunning french mid century modernist bar cart art deco bar trolley cart.
art deco bar cart share and get a off coupon code art roaring rolling serving and bar cart design on wheels brass bar cart vintage art deco bar cart.
art deco bar cart art deco bar carts for sale.
art deco bar cart bar carts quirky french art deco bar cart.
art deco bar cart art bar cart fabulous art bar or dessert cart with removable tray art champagne vintage art deco bar cart.
art deco bar cart art bar cart french art period bar cart art style bar cart french art deco bar cart.
art deco bar cart art rolling bar cart for sale art deco brass bar cart.
art deco bar cart outstanding bar cart with wood and chrome in restored condition vintage art deco bar cart.
art deco bar cart art bar cart art bar cart circular drinks trolley round serving antique iconic furniture style art bar cart art deco style bar cart.
art deco bar cart art bar cart vintage art chrome bar cart vintage bar carts art chrome bar art bar cart art deco bar trolley cart.


A group of people representing union and retiree organizations on October 2 presented a petition with one-half million signatures to the Social Security Administration in Washington DC urging it to stop closing local offices and to restore the face-to-face services on which people applying for benefits depend.
Representatives of the American Federation of Government Employees (AFGE), the Alliance for Retired Americans, and Social Security Works joined together to rally and present the petitions.
Support rallies were held in New York City, Oakland, and Columbus, Ohio.
Because of budget cuts, the Social Security Administration during the last three years has closed 80 local offices and 500 contact stations.
"Budget cuts have degraded the Social Security Administration's ability to service millions of baby boomers who are becoming eligible for retirement," said AFGE in a media statement about the event.
The strategic plan, known as Vision 2025, has not been released yet, but in July, the agency released a report that made recommendations that will likely be included in the new strategic plan.
In an opinion piece appearing in Government Executive, David Cox, president of AFGE, said that instead of closing offices and allowing staff to dwindle through attrition, the Social Security Administration needs to enhance face-to-face services even if it means fighting for more resources.
"We should not be afraid to fight for the resources needed to build a (comprehensive service delivery system)," he writes.
But fighting for adequate funding is not presented as an option in the Vision 2025 report.
The report, entitled Anticipating the Future: Developing a Vision and Strategic Plan for the Social Security Administration for 2025-2030, was written by a panel convened by the National Academy of Public Administration.
The panel was chaired by Jonathan Bruel, the former executive director of the IBM Center for the Business of Government, a research and policy group funded by IBM whose purpose is to connect government agencies with services provided by businesses.
According to the report, the Social Security Administration currently uses some technology to deliver some services, but acknowledges that there have been problems with it that require human intervention.
Of those applications that have been submitted online, 95 percent had information missing that required a call back by a Social Security worker.
The current web site has had other problems as well. For example, criminals set up fraudulent accounts through the MySocialSecurity web portal and benefits were paid to these phony accounts.
But Cox argues that expanding a flawed automated system and over relying on automated tools will hurt the agency's customers.
One important service that automated systems can't do well is informing people about benefits to which they are entitled but not aware of.
The American Federation of Government Employees blamed understaffing for the long waits for medical care at Veterans Administration hospitals and urged Congress to act quickly on a recently introduced bill that will fund the hiring of more frontline staff.
USA Today reports that more than 57,000 veterans in need of medical care have had to wait more than 90 days to see a doctor. An additional 64,000 veterans who sought care over the last ten years at VA facilities never got to see a doctor.
According to AFGE, since 2009 2 million veterans have entered the VA health system but over the same period of time staffing has increased only 9 percent.
The VA's inability to keep up with its rapidly rising caseload is due to Congress' failure to properly fund the services that the VA provides.
To address this problem, Sen. Bernie Sanders and Sen. John McCain have crafted a bill that increases VA funding by $500 million. The funding would be used to hire more doctors and nurses.
"The measure provides for the hiring of new medical personnel in an expedited manner at hospitals and clinics that lack enough doctors, nurses and other medical staff to provide quality care in a timely manner and ensures dedicated funding is available to hire health care professionals," said Sanders.
The bill will also allow the VA to lease 26 new medical facilities that would expand access to care and give veterans living more than 40 miles from a VA hospital or clinic to use private clinics instead of the VA.
Sanders said that the bill whose title is the Veterans Access to Care Through Choice, Accountability, and Transparency Act of 2014 is not perfect but it is a good first step toward improving veterans health care.
"While this is not the bill that I would have written, we have taken a significant step forward with this agreement," said Sanders.
One problems with the bill is that it expands the outsourcing of health care services.
"As many Veterans Service Organizations have expressed, such a move could jeopardize the quality of patient care since veterans will be left largely on their own to navigate care between providers lacking specialized knowledge of this population, without the critical care coordination for their complex medical needs that only the VA can provide," said Cox.
Cox said that outsourcing should be used only as a last resort and pointed to the great strides that the VA has made in expanding access in rural areas through smart investments in telehealth and mobile clinics.
"We need to double-down on these proven systems and deliver to our veterans the quality, specialized care they earned through their service to our nation," he said.
Cox also said that while it's good that the bill allows for the hiring of more doctors and nurses, it should have increased funding for more support staff and more clinic space.
Sanders is hopeful that the Senate will take action on the compromise soon, but there may be a problem with its passage in the House.
The House recently passed its version of the VA bill, but it doesn't included the $500 million for hiring new staff that is the key feature of the Senate bill.
Unions representing locked out government workers are mobilizing members to urge leaders of the US House of Representatives to allow a vote on a Senate resolution that will end the shutdown of the federal government.
More than 800,000 federal workers have been locked out since the shutdown began on October 1.
The shutdown is the latest blow to a federal workforce charged with protecting lives and property, ensuring the health of the nation, providing essential social services, and promoting the quality of life.
David Cox, president of the American Federation of Government Employees (AFGE) said that federal workers have endured the brunt of the sacrifices caused by "manufactured" budget crises.
Federal workers' pay has been frozen for three years, last spring federal workers were furloughed to help pay for the sequestration budget cuts, and they are constantly confronted with the possibility of permanent layoffs.
Now because a minority members within in the House of Representatives whose goal, according to Cox, is "anybody's guess," have refused to vote on a Senate resolution that would keep the government operating, half the government workforce has been locked out and the other half is expected to work without a paycheck.
AFGE is mobilizing locals across the country to organize members to attend meetings with members of Congress to urge them to support an up or down vote on the Senate resolution.
AFGE members and other unionized federal workers will be at an October 4 rally in Washington organized by the Congressional Progressive Caucus.
In urging members to attend October 4 rally, Colleen Kelley, president of the National Treasury Employees Union (NTEU), said that federal employees have suffered enough.
In addition to supporting an up or down vote on the Senate resolution, NTEU is mobilizing members to support H.R. 3223, a bill that the House of Representatives will take up on October 4.
If passed, the bill will ensure that furloughed workers will be paid once they are allowed to return to work.
What is sometimes lost in the media coverage of the shutdown is the important services that federal employees provide and the impact that the shutdown is having on these services.
At a recent media conference on the shutdown carried by C-Span, some furloughed employees explained the impact.
Amy Fritz of the National Weather Service builds computer models that helps predict and track tropical storms and hurricanes.
Fritz, who holds two masters degrees, said that without a paycheck, she will have a hard time repaying $130,000 in student loans she took out to finance her education.
Marcello Del Canto, a budget analyst for the Substance Abuse and Mental Health Administration, said that because of the shutdown, millions of people who need substance abuse and mental health services can't get them today.
She is concerned that the sequestration and shutdown will make federal work unattractive to highly qualified people like those with whom she works.
Steve Hopkins of the Environmental Protection Agency said that he went into government work to provide a service mandated by Congress, but now he can't do it because a minority in Congress won't act to end the shutdown.
He added that recent furloughs at his agency caused by sequestration cost employees an average of $2,500.


text:
Food News: The Crispy Coop now serving near Grandview
Erin Edwards Dining Editor, Columbus Monthly
The latest updates from the bar and restaurant scenes
The Crispy Coop, a new fried chicken venture from the owners of Uncle Nick's Greek Fried Chicken, opened Saturday at 1717 Northwest Blvd. in Fifth by Northwest. The owners shuttered Uncle Nick's last year at 1333 Northwest Blvd. in preparation for the move to the former Acre space. The new restaurant offers the same fried chicken and Texas potatoes (aka jojos) as Uncle Nick's, as well as new offerings such as chicken sandwiches and Nashville-style hot chicken. The restaurant's hours are 11 a.m. to 9 p.m. daily.
A fast-casual Mediterranean spot called Shawerma Bite is now open at 12 E. 16th Ave., across from Ohio State's Wexner Center for the Arts. Customers can choose to build a wrap or a bowl using falafel, shawarma, beef kebab or shish tawook (grilled chicken) as the base.
The rooftop restaurant and bar Vaso (6540 Riverside Dr.) launched a revamped brunch service this weekend. The new menu, offered from 10 a.m. to 2 p.m. Saturdays and Sundays, features dishes such as chilaquiles, stuffed French toast, chorizo hash and more. A mimosa and bloody mary service is also available.
The Max & Erma's at 1317 Hamilton Rd. in Gahanna closed last month and its memorabilia, kitchen equipment and furniture are being auctioned off. It's the latest development in the slow decline of the regional burger chain, which was founded in Columbus in 1972 by Todd Barnum and Barry Zacks. The original Max & Erma's in German Village closed in 2017.
Huong Vietnamese Restaurant (1270 Morse Rd.) is temporarily closed for vacation and will reopen at 11 a.m. on Friday, Feb. 7.

redpajama_set_name: RedPajamaCommonCrawl


text:
Home » Blogs » nandi's blog » John Hammond Was Supposed to Die in Jurassic Park
John Hammond Was Supposed to Die in Jurassic Park
Those that have read the original book know full well that John Hammond wasn't supposed to make it out of the park and that his death would eventually be chalked up to an accident that happened during a business trip to his park. But the death that awaited him could have been much more gruesome than the one he received in the book.
If you recall he was startled by the pre-recorded roar of a T-Rex and as a result went tumbling down a hillside where he was attacked by a pack of the small but lethal dinosaurs that came to be known as 'compies' and met his end at the claws of his own creations. It kind of depends on who you ask but even Jeremy Dick of MovieWeb seems to make it sound as though Hammond had what was coming to him in the book. Of course if you really look at it from a different perspective the man in the book was a great deal different from the character that the late Richard Attenborough portrayed in the movie.
Both men were highly ambitious and didn't like being told they couldn't do something, but for some reason the man in the book seemed a bit colder, a little more ruthless when it came to getting his way, while Richard's iteration of Hammond was more like the kindly old grandfather that was also a shrewd businessman with far-reaching ambitions. In other words one of them seemed cold and willing to do whatever it took while the other was more likely to cave in the pursuit of something that nature vetoed a long, long time ago. But I'm getting off point just a bit since the deaths of the two men could have been different had Hammond been slated for an early death in the first movie. It sounds as though he was hiding in one of the large rooms, perhaps looking melancholy at one of the displays of the park, when one of the velociraptors found him and tore him apart, giving him a rather gruesome death. But Spielberg decided to spare him instead and allowed Hammond into the second movie, which kind of deviated in a big way from the book but wasn't quite enough to raise a tremendous stink among fans. After all the movie made Hammond into a very likable guy whereas the lawyer was the one that people might have shrugged their shoulders at and said 'meh' when he was chomped in half. Even with Dennis Nedry, who was perhaps the silliest of the antagonists, finally met his end people were still likely to go 'meh', simply because it didn't seem like he mattered much anymore.
But John Hammond was the guy that got this whole ball of wax rolling from a story standpoint, so it's not too hard to see how he could be seen as something of an antagonist hiding in plain sight during the book. In the movie it was simply too much to believe that he would be one of those being taken out by a dinosaur since he was too nice of a guy. He was a bit of an irritant since he didn't want to see the writing on the wall that humanity, one of the most violent and ruinous species in the world, mixed in with dinosaurs, who were destructive simply in their very means of survival at times, could not possibly coexist, even for a matter of moments. The distance between the two species is simply too great, and as it's been seen in the movies that have come along since, the propensity for violence between dinosaurs and human beings is something that runs along a thin edge and can become ugly very quickly. After all, humanity has come to learn that our place in this world varies from day to day, and that unless we subjugate or somehow learn to coexist with the animals around us then there's a good chance that we'll end up destroying them or being consumed by them in some way, shape, or form.
Nature selected dinosaurs a long time ago for extinction no matter how harsh that sounds or how fatalistic it might be. Minds like that of John Hammond are typically called great but at the same time they're usually lacking in something called humility since they see what they CAN do, not what they SHOULD do. The lost history of this world is something that humanity is usually better off observing instead of witnessing firsthand since the histories that have come and gone haven't always been kind. Hammond however, and those like him that came in the movies after, had to learn the hard way, and unless Spielberg had stepped in to let him into the second movie, Hammond would have perished in a most painful and horrifying manner.
Source: www.tvovermind.com
Alligator Study Reveals Insight Into Dinosaur Hearing
A new study of American alligators found...
Jurassic World 3: New Dinosaur Robot Revealed
'Jurassic Park' Roars Back into Theaters this September
This September, in honor of its...
Jurassic World 2 Trailer Is Coming in Late November
23 Exceptional Prehistoric Creatures
Fearsome animals existed at the time of the...
Scientists Uncover Partially-Preserved "DINOSAUR-like" Corpse
There have been suggestions that the corpse...
10 Strange Looking Dinosaurs
To date, paleontologists have named nearly a...
T. Rex Bite is No Match for Finch Bird, Study Says
Research have found that the bite force of...
Rhinoceroses Lived in Yukon Territory 8-9 Million Years Ago
During the Tertiary period, a span of time...
Jurassic Park T-Rex Has a Name and It's Not Rexy
It turns out the T. rex from ...
Fukui Dinosaur Museum Renovation to Spark Roaring...
Laura Dern Overjoyed that Her Jurassic Park Charac...
Royal Tyrrell Museum Palaeontologists Use 3D Print...
Pu'an Dinosaur Geopark: China to Build Real-Life J...
10 Dinosaur Games You Definitely Need to Play
Here's How the 'Jurassic Park' Movi...
Original Jurassic Park Cast Likely To Return After...
You Can Actually Hang Out With Dinosaurs In These...


text:
"""Script to create a bunch of tarballs and montages, made available on the
/dex/downloads page.
"""
from __future__ import division
import math
import os, os.path
import pkg_resources
import re
import subprocess
from subprocess import PIPE
import sys
import tarfile

phi = (1 + 5 ** 0.5) / 2

# Find the spline-pokedex downloads dir as relative to this script; it's not a
# data dir, so pkg_resources isn't much help
this_dir, _ = os.path.split(__file__)
downloads_dir = os.path.abspath(
    os.path.join(this_dir, '../splinext/pokedex/public/downloads')
)
media_dir = pkg_resources.resource_filename('pokedex', 'data/media')

def create_downloads():
    # Gotta chdir to get the gzip header right; see Python bug 4750
    os.chdir(downloads_dir)

    # Per-generation Pokémon tarballs
    make_tarball('generation-1.tar.gz', ['red-green', 'red-blue', 'yellow'])
    make_tarball('generation-2.tar.gz', ['gold', 'silver', 'crystal'])
    make_tarball('generation-3.tar.gz', ['ruby-sapphire', 'emerald', 'firered-leafgreen'])
    make_tarball('generation-4.tar.gz', ['diamond-pearl', 'platinum', 'heartgold-soulsilver'])

    # Other Pokémon stuff
    make_tarball('overworld.tar.gz', ['overworld'])
    make_tarball('pokemon-cries.tar.gz', ['cries'])
    make_tarball('pokemon-sugimori.tar.gz', ['sugimori'])
    make_tarball('pokemon-footprints.tar.gz', ['footprints'])
    make_tarball('pokemon-trozei.tar.gz', ['trozei'])
    make_tarball('pokemon-icons.tar.gz', ['icons'])

    # Not Pokémon at all!
    make_tarball('chrome.tar.gz', ['chrome', 'ribbons'])
    make_tarball('items.tar.gz', ['items'])

    # Bunch o' montages
    make_montage('red-green.png',       'red-green/gray/{0}.png',   56, 151)
    make_montage('red-green-sgb.png',   'red-green/{0}.png',        56, 151)
    make_montage('red-blue.png',        'red-blue/gray/{0}.png',    56, 151)
    make_montage('red-blue-sgb.png',    'red-blue/{0}.png',         56, 151)
    make_montage('yellow.png',          'yellow/gray/{0}.png',      56, 151)
    make_montage('yellow-sgb.png',      'yellow/{0}.png',           56, 151)
    make_montage('yellow-gbc.png',      'yellow/gbc/{0}.png',       56, 151)
    make_montage('generation-1-back.png',
        'red-blue/back/gray/{0}.png',       32, 151)
    make_montage('red-green-blue-back-sgb.png',
        'red-blue/back/{0}.png',            32, 151)
    make_montage('yellow-back-sgb.png', 'yellow/back/{0}.png',      32, 151)
    make_montage('yellow-back-gbc.png', 'yellow/back/gbc/{0}.png',  32, 151)

    make_montage('gold.png',            'gold/{0}.png',             56, 251)
    make_montage('gold-shiny.png',      'gold/shiny/{0}.png',       56, 251)
    make_montage('silver.png',          'silver/{0}.png',           56, 251)
    make_montage('silver-shiny.png',    'silver/shiny/{0}.png',     56, 251)
    make_montage('crystal.png',         'crystal/{0}.png',          56, 251)
    make_montage('crystal-shiny.png',   'crystal/shiny/{0}.png',    56, 251)
    make_montage('gold-silver-back.png',
        'silver/back/{0}.png',              48, 251)
    make_montage('gold-silver-back-shiny.png',
        'silver/back/shiny/{0}.png',        48, 251)
    make_montage('crystal-back.png',
        'crystal/back/{0}.png',              48, 251)
    make_montage('crystal-back-shiny.png',
        'crystal/back/shiny/{0}.png',        48, 251)

    make_montage('generation-3.png',
        'ruby-sapphire/{0}.png',            64, 386, transparent=True)
    make_montage('generation-3-shiny.png',
        'ruby-sapphire/shiny/{0}.png',      64, 386, transparent=True)
    make_montage('emerald-frame2.png',
        'emerald/frame2/{0}.png',           64, 386, transparent=True)
    make_montage('emerald-frame2-shiny.png',
        'emerald/shiny/frame2/{0}.png',     64, 386, transparent=True)
    make_montage('firered-leafgreen.png',
        'firered-leafgreen/{0}.png',        64, 151, transparent=True)
    make_montage('firered-leafgreen-shiny.png',
        'firered-leafgreen/shiny/{0}.png',  64, 151, transparent=True)
    make_montage('generation-3-back.png',
        'ruby-sapphire/back/{0}.png',       64, 386, transparent=True)
    make_montage('generation-3-back-shiny.png',
        'ruby-sapphire/back/shiny/{0}.png', 64, 386, transparent=True)
    make_montage('firered-leafgreen-back.png',
        'firered-leafgreen/back/{0}.png',   64, 151, transparent=True)
    make_montage('firered-leafgreen-back-shiny.png',
        'firered-leafgreen/back/shiny/{0}.png', 64, 151, transparent=True)

    make_montage('diamond-pearl.png',
        'diamond-pearl/{0}.png',            80, 493, transparent=True)
    make_montage('diamond-pearl-shiny.png',
        'diamond-pearl/shiny/{0}.png',      80, 493, transparent=True)
    make_montage('diamond-pearl-frame2.png',
        'diamond-pearl/frame2/{0}.png',     80, 493, transparent=True)
    make_montage('diamond-pearl-shiny-frame2.png',
        'diamond-pearl/shiny/frame2/{0}.png', 80, 493, transparent=True)
    make_montage('platinum.png',
        'platinum/{0}.png',                 80, 493, transparent=True)
    make_montage('platinum-shiny.png',
        'platinum/shiny/{0}.png',           80, 493, transparent=True)
    make_montage('platinum-frame2.png',
        'platinum/frame2/{0}.png',          80, 493, transparent=True)
    make_montage('platinum-shiny-frame2.png',
        'platinum/shiny/frame2/{0}.png',    80, 493, transparent=True)
    make_montage('heartgold-soulsilver.png',
        'heartgold-soulsilver/{0}.png',     80, 493, transparent=True)
    make_montage('heartgold-soulsilver-shiny.png',
        'heartgold-soulsilver/shiny/{0}.png', 80, 493, transparent=True)
    make_montage('heartgold-soulsilver-frame2.png',
        'heartgold-soulsilver/frame2/{0}.png', 80, 493, transparent=True)
    make_montage('heartgold-soulsilver-shiny-frame2.png',
        'heartgold-soulsilver/shiny/frame2/{0}.png', 80, 493, transparent=True)
    make_montage('diamond-pearl-back.png',
        'diamond-pearl/back/{0}.png',       80, 493, transparent=True)
    make_montage('diamond-pearl-back-shiny.png',
        'diamond-pearl/back/shiny/{0}.png', 80, 493, transparent=True)
    make_montage('platinum-back.png',
        'platinum/back/{0}.png',            80, 493, transparent=True)
    make_montage('platinum-back-shiny.png',
        'platinum/back/shiny/{0}.png',      80, 493, transparent=True)
    make_montage('platinum-back-frame2.png',
        'platinum/back/frame2/{0}.png',     80, 493, transparent=True)
    make_montage('platinum-back-shiny-frame2.png',
        'platinum/back/shiny/frame2/{0}.png', 80, 493, transparent=True)
    make_montage('heartgold-soulsilver-back.png',
        'heartgold-soulsilver/back/{0}.png', 80, 493, transparent=True)
    make_montage('heartgold-soulsilver-back-shiny.png',
        'heartgold-soulsilver/back/shiny/{0}.png', 80, 493, transparent=True)
    make_montage('heartgold-soulsilver-back-frame2.png',
        'heartgold-soulsilver/back/frame2/{0}.png', 80, 493, transparent=True)
    make_montage('heartgold-soulsilver-back-shiny-frame2.png',
        'heartgold-soulsilver/back/shiny/frame2/{0}.png', 80, 493, transparent=True)

    # And female montages, which are a little different
    make_diff_montage(
        filename='diamond-pearl-female-diff.png',
        other_filename='diamond-pearl.png',
        pattern='diamond-pearl/female/{0}.png',
        fallback_pattern='diamond-pearl/{0}.png',
        sprite_size=80,
        pokemon=493,
    )
    make_diff_montage(
        filename='platinum-female-diff.png',
        other_filename='platinum.png',
        pattern='platinum/female/{0}.png',
        fallback_pattern='platinum/{0}.png',
        sprite_size=80,
        pokemon=493,
    )
    make_diff_montage(
        filename='heartgold-soulsilver-female-diff.png',
        other_filename='heartgold-soulsilver.png',
        pattern='heartgold-soulsilver/female/{0}.png',
        fallback_pattern='heartgold-soulsilver/{0}.png',
        sprite_size=80,
        pokemon=493,
    )
    make_diff_montage(
        filename='diamond-pearl-back-female-diff.png',
        other_filename='diamond-pearl-back.png',
        pattern='diamond-pearl/back/female/{0}.png',
        fallback_pattern='diamond-pearl/back/{0}.png',
        sprite_size=80,
        pokemon=493,
    )
    make_diff_montage(
        filename='platinum-back-female-diff.png',
        other_filename='platinum-back.png',
        pattern='platinum/back/female/{0}.png',
        fallback_pattern='platinum/back/{0}.png',
        sprite_size=80,
        pokemon=493,
    )
    make_diff_montage(
        filename='heartgold-soulsilver-back-female-diff.png',
        other_filename='heartgold-soulsilver-back.png',
        pattern='heartgold-soulsilver/back/female/{0}.png',
        fallback_pattern='heartgold-soulsilver/back/{0}.png',
        sprite_size=80,
        pokemon=493,
    )

    # Overworld
    make_montage('overworld-right.png',
        'overworld/right/{0}.png', 32, 493, transparent=True)
    make_montage('overworld-down.png',
        'overworld/down/{0}.png', 32, 493, transparent=True)
    make_montage('overworld-up.png',
        'overworld/up/{0}.png', 32, 493, transparent=True)
    make_montage('overworld-right-shiny.png',
        'overworld/shiny/right/{0}.png', 32, 493, transparent=True)
    make_montage('overworld-down-shiny.png',
        'overworld/shiny/down/{0}.png', 32, 493, transparent=True)
    make_montage('overworld-up-shiny.png',
        'overworld/shiny/up/{0}.png', 32, 493, transparent=True)

    # Other miscellaneous
    make_montage('footprints.png', 'footprints/{0}.png', 48, 493,
        subst_forms=False)
    make_montage('sugimori.png', 'sugimori/{0}.png', 96, 493,
        padding=2, subst_forms=False, filter='lanczos')
    make_labeled_montage(
        'items.png', 'items', suffix='.png',
        sprite_size=24, horiz_padding=36, vert_padding=6,
    )
    make_labeled_montage(
        'berries.png', 'items/big', suffix='-berry.png',
        sprite_size=48, horiz_padding=4, vert_padding=4,
    )

def make_tarball(filename, contents):
    """Packs `contents` into the tar file `filename`."""
    print "Generating", filename + "...",
    sys.stdout.flush()

    tar = tarfile.open(filename, 'w:gz')
    for content in contents:
        tar.add(os.path.join(media_dir, content), arcname=content)
    tar.close()

    print "ok"

def make_montage(filename, pattern, sprite_size, pokemon,
    padding=0, subst_forms=True, filter='point', transparent=False):

    u"""Creates a montage in `filename` out of PNG images matching `pattern`,
    which should be a str.format pattern.  `sprite_size` is the size of each
    sprite, for calculating the dimensions of the final product, and `pokemon`
    is the number of Pokémon that should be in the resulting image.

    The background will be transparent iff `transparent` is true.
    """
    print "Generating", filename + "...",
    sys.stdout.flush()

    transparent_switches = []
    if transparent:
        transparent_switches = ['-background', 'transparent']

    # Find all the files we want
    files = [
        os.path.join(media_dir, pattern.format(n))
        for n in range(1, pokemon + 1)
    ]
    if subst_forms:
        # Fill in reliable forms for overworld sprites
        for n, form in [(201, 'j'), (386, 'normal'),
                        (412, 'plant'), (413, 'plant'),
                        (422, 'west'), (423, 'west')]:
            if n >= len(files): break
            img = "{0}-{1}".format(n, form)
            files[n - 1] = os.path.join(media_dir, pattern.format(img))

    # Figure out the dimensions of the image.  Try to keep to the golden ratio,
    # because it rocks.
    # Thus: rows * (phi * rows) = pokemon
    rows = int(math.ceil( (pokemon / phi) ** 0.5 ))

    outfile = os.path.join(downloads_dir, filename)
    subprocess.Popen(
        ['montage',
            '-filter',      filter,
            '-geometry',    "{0}x{0}+{1}+{1}>".format(sprite_size, padding),
            '-tile',        "x{0}".format(rows),
        ]
            + files
            + transparent_switches
            + [outfile]
    ).wait()

    # Optipng it
    subprocess.Popen(['optipng', '-quiet', outfile]).wait()

    print "ok"

def make_diff_montage(filename, other_filename, pattern, fallback_pattern,
    sprite_size, pokemon):

    u"""Similar to `make_montage`, except!  This version assumes `pattern`
    refers to a file that may or may not exist, and `fallback_pattern` fills in
    the gaps.  Also it then diffs the generated image with `other_filename`.
    """
    print "Generating", filename + "...",
    sys.stdout.flush()

    # Find all the files we want
    files = []
    for n in range(1, pokemon + 1):
        img = os.path.join(media_dir, pattern.format(n))
        if os.path.exists(img):
            files.append(img)
        else:
            files.append(
                os.path.join(media_dir, fallback_pattern.format(n)))

    # Golden ratio blah blah
    rows = int(math.ceil( (pokemon / phi) ** 0.5 ))

    outfile = os.path.join(downloads_dir, filename)
    subprocess.Popen(
        ['montage',
            '-background',  'transparent',
            '-geometry',    "{0}x{0}+0+0>".format(sprite_size),
            '-tile',        "x{0}".format(rows),
        ]
            + files
            + [outfile]
    ).wait()

    # Do the comparison in-place
    subprocess.Popen([
        'compare',
        outfile, os.path.join(downloads_dir, other_filename),
        outfile,
    ]).wait()

    # Optipng it
    subprocess.Popen(['optipng', '-quiet', outfile]).wait()

    print "ok"

def make_labeled_montage(filename, directory, suffix,
    sprite_size, horiz_padding, vert_padding):

    u"""Makes a montage, with labels, of the files in the named directory.
    Only files ending in `suffix` will be used, and the suffix will be removed.

    The rest is a bunch of boring math.
    """
    print "Generating", filename + "...",
    sys.stdout.flush()

    # Find all the files we want
    s = len(suffix)
    file_args = []
    file_count = 0
    filenames = os.listdir(os.path.join(media_dir, directory))
    filenames.sort()
    for img in filenames:
        if not img.endswith(suffix):
            continue

        # Cut off .png
        label = img[:-s]

        file_args.extend([
            '-label',
            label,
            os.path.join(media_dir, directory, img),
        ])
        file_count += 1

    # Golden ratio blah blah.  Except with the padding it becomes...
    tile_h = sprite_size + vert_padding * 2 + 16  # 16 for label height
    tile_w = sprite_size + horiz_padding * 2
    # tile_h * rows * phi == tile_w * (n / rows)
    # => rows = sqrt((tile_w * n) / (tile_h * phi)
    rows = int(math.ceil(
        ((tile_w * file_count) / (tile_h * phi)) ** 0.5
    ))

    outfile = os.path.join(downloads_dir, filename)
    subprocess.Popen(
        ['montage',
            '-background',  'transparent',
            '-geometry',    "+{0}+{1}".format(horiz_padding, vert_padding),
            '-tile',        "x{0}".format(rows),
        ]
            + file_args
            + [outfile]
    ).wait()

    # Optipng it
    subprocess.Popen(['optipng', '-quiet', outfile]).wait()

    print "ok"

if __name__ == '__main__':
    create_downloads()


1. We believe that there is but one living and true God, an eternally existent spiritual being of absolute knowledge, power and goodness; creator and preserver of all things visible and invisible. That in the unity of this Godhead, there are three persons of one substance, power and eternity - Father, Son and Holy Spirit.
2. We believe that Jesus Christ is the second person of the triune Godhead; that He was eternally of one substance with the Father; that He became incarnated by the Holy Spirit; was born of the virgin Mary, thus uniting in one perfect personality forever two whole and perfect natures, Godhead and manhood, very God and very man, the God-man Jesus Christ.
3. We believe in the personality and deity of the Holy Spirit; that He did proceed from the Father and the Son and is the third person of the Godhead, of one substance, power, and eternity with them; that He is present with and active in, the church, convicting the whole world of sin, righteousness and judgment.
4. We believe that the 66 books of the Old and New Testament which the church has universally accepted as the Holy Scriptures were given by divine inspiration and constitute the revealed Word of God, as the only supreme, sufficient and authoritative rule of faith and practice, and that the Holy Spirit, who motivated men of God to speak through the written word, has providentially guarded, in its preservation, the integrity of the message, and continues to illumine the hearts of those who read that they may understand God's redemptive plan.
5. We believe that man was a special creation by God but that he forfeited his first estate and is very far fallen from original righteous ness; and because of the corruption of his nature, as received from Adam, he is incline to evil and that continually.
6. We believe that Jesus Christ died for our sins and by the shedding of His blood made atonement for the sins of all mankind. This atonement is the only ground of salvation. We also believe in Christ's bodily resurrection from the dead, that He ascended into heaven to the right hand of the Father and is there today in intercession for us.
7. We believe that every individual must accept Jesus Christ as his personal Savior and Lord; the Holy Spirit working in his life will bring him to God to do this act. This same Holy Spirit enables this previous sinner to live a godly life.
8. We believe that Jesus Christ fills every Christian with the Holy Spirit and empowers him for service if he asks for this experience.
9. We believe in the imminent, personal return of Jesus Christ to this world to establish His kingdom, to rule unrighteousness and to judge all unrepentant men.
10. We believe in the bodily resurrection of the dead, that the bodies of both the just and the unjust shall be reunited with their spirits, that everlasting life is assured to all who believe in and follow Jesus Christ; and that the non-Christian shall go away into everlasting punishment in hell.
11. We believe in the one holy universal church which is the body of Christ and to which all true believers belong, and in its mission to witness concerning its Head, Jesus Christ, preaching the gospel to all peoples.


Whenever Loic Le Meur, the founder of Seesmic and Le Web conference in Paris, organises something in his native France you can be sure that it will sell like hot baguettes. Which was exactly the case for Social Media Management Day on 6th April – a half-day free conference held by Seesmic (which was represented by Loic (@loic) himself and Cedric Giorgi (@cgiorgi), Seesmic Europe Director).
Over 400 participants, most of them social media pros and community managers, gathered in the impressive Microsoft France venue to listen to representatives of some of the biggest companies in the country (France Televisions, Air France, Orange, Microsoft, Canon, La Poste, Schweppes/Orangina, Ben & Jerry's and others) sharing their social media practices and insights.
In the organisers' own words the aim of the event was to provide "hands-on expertise on how executives at big brands manage social media" – and also to hear it directly from them, and not the agencies. This practical orientation of the event (apart from Loic's celebrity status) was probably the main attraction for the audience eager to get something beyond the usual phrases about engagement, authenticity and 'being everyone's true friend' repeated endlessly at numerous social media events… So, did we get it?
Not quite sure how much actual value this sort of nuggets really bring, but it's always interesting to take a peek behind the closed door of a big company's marketing department – even if the visit is closely guarded. Besides, Facebook France was also represented (actually is there any respected social media event nowadays without a speaker from Facebook?) – and it's always good to hear vital statics and updates straight from the horse's mouth.
Speaking of Facebook, I was actually rather surprised to hear the speakers talking 90% about Facebook and Twitter – as if social media were just that. Other channels were only mentioned when prompted (with YouTube taking the lead) and it was only Michel & Augustin (a small French FMCG brand with a cult status comparable to Innocent in the UK) and Orange who gave some deserved airtime to blogging. The latter was represented by Yann Gourvennec of Orange Business Services who in my opinion provided some of the most valuable insights plus some memorable quotes of the day ("To buy fans = to buy love. This is called prostitution and it doesn't work" or "There is no such thing as social media strategies, there is only tactical adaptation of a global strategy").
Judging from the audience's questions and numerous tweets (#SMMD1), there were two things that everyone really wanted to hear about: tools and budgets. Yet contrary to organisers' promise there was not too much talk about the actual tools used – apart from the separate session about Salesforce Chatter (a free internal social network for enterprises which looked interesting enough for most of the people I spoke to plan to try it out), somebody mentioned Socialbakers and that was pretty much it. The budget question was (as could be expected) answered without giving the actual numbers: 10% of marketing budget and "cheaper than TV" (go figure!).
However, I did have the impression that the atmosphere was quite open and convivial (at least as much as it can be when big companies are revealing their "secrets") and the discussions following – sometimes quite daring – questions from the audience were very animated.
All in all it was an interesting afternoon in a unusually relaxed atmosphere and I did come out with a much better sense of how social media "the French way" is done. In his closing speech Loic Le Meur implied that there are plans for more Social Media Management Days – and given that (as promptly pointed out by himself) the afternoon attracted four times as many participants as the first Le Web conference, who knows what this event might grow into in future… watch this space!
If you understand French there is a couple of very good conference write-ups to be found here and here (including a video of the Facebook France interview). The recording of the entire event should be available soon on Seeismic website.
This post was originally published on the TCS Digital World blog.


I was tripped at the start of a 5K and pulled my hamstring, and now I can't run without pain. Friends tell me to try to run as usual. I want to return to running as soon as possible, as I'm preparing for a fall marathon. Any suggestions?
Thanks for this important question, Kevin.
If your long-term goal is to keep running and racing without pain and constant re-injury, ignore your friends' advice. Running in pain can make an injury worse, or lead to another injury if the pain is causing you to alter your form. You also run the risk of permanently reducing your performance potential by preventing proper healing of the muscle fibers.
When you pull or tear a hamstring, the healing process shortens the muscle fibers and causes scar tissue to form. Yes, you can run taking small steps (shorten your stride length), but as soon as you try to extend to your normal stride length you'll risk another pull. As long as you can maintain your form you can run realizing it is for training, not to set new records!
To properly heal your pulled hamstring, you must stretch and strengthen the muscles with exercises carried out under the guidance of a knowledgeable physical therapist. This treatment will encourage the muscles to retain their pre-injury strength and length — or even become stronger and longer. A good physical therapist can also perform soft-tissue work to bring in blood flow — which promotes healing — and break up scar tissue. Realize this may take 4-6 weeks.
I suggest you visit a sports medicine doctor to have your injury evaluated and get a referral for physical therapy. You will most likely be able to run during this treatment, though it's wise to avoid racing and speed training. If you are in a real hurry, PRP has had fantastic results healing a tear in 3-7 days.
To reduce your risk of re-injury, take time to stretch the hamstrings after every run. Running causes microtears between the hamstrings' muscle fibers, and without stretching the fibers heal back shorter. Over time this decreases your stride length — so you run slower — and makes the hamstring vulnerable to a serious pull or tear.
Kevin, let us know how you are doing and when you get back to regular training.
Lewis G. Maharam, MD, FACSM is one of the world's most extensively credentialed and well-known sports health experts. Better known as Running Doc™, Maharam is author of Running Doc's Guide to Healthy Running and past medical director of the NYC Marathon and Rock 'n' Roll Marathon series. He is also past president of the New York Chapter of the American College of Sports Medicine. Learn more at runningdoc.com.


text:
import camelcaseKeys = require('camelcase-keys');

camelcaseKeys({'foo-bar': true});
// => {fooBar: true}

camelcaseKeys({'foo-bar': true, 'nested': {unicorn_rainbow: true}}, {deep: true});
// => {fooBar: true, nested: {unicornRainbow: true}}

camelcaseKeys({'_': [], 'foo-bar': true});
// => {_: [], fooBar: true}


I am trying to figure out how much hip movement to employ in my own breastroke. When I swam in college (85 - 89) we still had to keep some part of our heads above water during each stroke. So, the stroke tended to be more flat compared to breastrokers today. I used some hip movement on the end of my kick back then, but really very little.
Now, since the head can go completely under water during each stroke, it seems to follow that there is more hip movement. I'm talking about an almost sinuous movement to the stroke - getting some benefit of a dolphin kick at the end of each kick, as you feet go up to follow your hips.
However, how much hip movement seems to vary from swimmer to swimmer. At a glance, it seems that the higher a swimmer brings his head out to breath, the more hip movement seems to be used. I'm wondering if the hip movement itself is an advantage - or if it is used to adjust for a breastrokers breathing style? Would appreciate hearing any other thoughts on the subject.
Good question. I've always felt it's about keeping your hips high, as do Hansen and Kitajima. When doing that, it actually feels like a lot of hip movement to me, though it doesn't look like it.
When I move my hips a lot like Phelps, I find that I go farther per stroke. If I really stretch it out and do a nice wave, I can go 25 yards in 5 or 6 strokes.
It is easy to get too much hip movement and go up too high.Just playing around now on land I am guessing I go about 6 in.(as 3 forward and then 6 back and then 3 forward to get back in streamline.)The big difference between Kitajima this year vs last is last year he went much higher in the water.
In general, yes, undulation during breaststroke definitely helps your overall movement through the water. With regard to the videos, I would say that the two that you should be concentrating on are Hansen and Kitajima since Phelps isn't really "known" for his breaststroke (it's his worst stroke while swimming the IM).


Non woven D-cut bags are available in square as well as rectangle shapes. These bags are simple, yet are stylish and are available in a lot of different sizes and colours. There is a D punch on the top of the bag which improvises the handle of the bag. The handle of the bag is not an additional attachment and is just one with the bag. So the whole D-Cut bag is just made using a single piece non woven fabric. D Punch bags are some of the most commonly using bags that one can see. One can also see a lot of D-cut plastic bags.
These bags don't only look elegant, but can also handle a lot of abuse and withstand heavy load. These kind of bags are given away by shop owners in a lot of retail stores since they not only fit the human hands, but they are good at retaining the shape well and are quite stiff when compared to plastic bags, they can be hanged on the sides of motorcycles without one having to worry about the bag getting stuck in the wheels like plastic bags which are flimsy and can't hold shape – and might we add, they are harmful to the environment.
The high-quality non-woven fabric that are used to make these bags ensure excellent tensile strength of our D-Cut bags and can withstand heavy load. Our state-of-the-art non woven bag making machines can produce tens of thousands of bags with high precision and quality. By buying our D-cut bags you are not only providing quality give-away to your valuable customers, but you shall also take pride in contributing to a greener environment. These bags are highly re-usable and also easy to recycle unlike their plastic counterparts.
We have shipped out D-Cut bags to a number of clients in Chennai and other cities in Tamil nade like, Coimbatore, Madurai, etc. Because of the quality of our products and competitive pricing, we've also shipped many orders to cities in other states like, Bangalore and Hyderabad.
Highly recommended for any purpose involving lesser weight materials. Very simple in look and cost effective compared to other models. These bags could be used by, but not limited to retail outlets, gift shops, book stores, events like exhibitions, shopping malls, shoe shops, wedding bags, temple bags, small electronics sellers (mobile phones, accessories, cameras), etc.
Take a look at some of the D-Cut shopping bags that we have created for some of our customers.


text:
Q: c# Fill string with 0 at left I try to fill a string with 0 at left.
My variable :
string value = "0.5";

So my output is 0.5 and I want 00.5. This value can also be an integer like 450, needed as 0450.
I tried  string.Format("{0:0000}", value); but it doesn't work.
I also tried string value = (double.Parse(value)).ToString("0000"); but it doesn't work.

A: You should use PadLeft method for that
var value = "0.5";
var result = value.PadLeft(4, '0'); //gives 00.5

redpajama_set_name: RedPajamaStackExchange


Hi, Check out this vehicle: 2007 Chevrolet TRAILBLAZER LT LEATHER LOW MILES COLD AC RUNS GREAT !!
2007 Chevrolet TRAILBLAZER LT LEATHER LOW MILES COLD AC RUNS GREAT !!
Body Style LT LEATHER LOW MILES COLD AC RUNS GREAT !!
Gulf Coast Auto Sales.| Luxury Highline Vehicles : has been visited 6,166,025 total times.


The creation declares the glory of God and part of the reason He has created such a magnificent universe is so He would receive glory for it (Psalm 19:1), however we are also part of that creation, but there's something more that God wants us to do than to just exist. He wants us to glorify God in our bodies by remaining free from sexual immorality (1 Cor 6:12-20). That is God's will, so whatever we do, we must do it for His glory, because nothing else matters.
After Jesus was about to return to the Father, He commanded His disciples to go into all the world and make other disciples in other nations, so that's part of the reason God created these twelve men, however, this imperative command (Matt 28:18-20) wasn't just for them; it is for all of us. We were created to become the children of God so that we might seek out others who might become part of the family of God.
God has saved us to do good works too. It's not that these works saved us (Eph 2:8-9), but we were saved to do them. The Apostle Paul wrote, "we are his workmanship, created in Christ Jesus for good works, which God prepared beforehand, that we should walk in them" (Eph 2:10). Try to imagine that. Long ago, before we even existed, and perhaps even the universe and time itself, God had laid out good works for us to do. Now the only question is will we walk in them when we come across opportunities to do them.
Of course, God has saved us to reign and rule with Christ, but of course, under Christ. This is found in several places in Scripture. In the Book of Revelation the Apostle John wrote (Rev 1:1-2), "To him who loves us and has freed us from our sins by his blood and made us a kingdom, priests to his God and Father, to him be glory and dominion forever and ever. Amen" (Rev 1:5b-6). That is part of the reason God created believers.
The Apostle Peter, in writing to the church (including us!), wrote, "But you are a chosen people, a royal priesthood, a holy nation, a people for God's own possession, to proclaim the virtues of Him who called you out of darkness into His marvelous light" (1st Pet 2:9), so let us who believe abstain from any sexual immorality, be used by God to witness to others, to walk in the good works God has planned for us to do, to someday fulfill our purpose in the New Jerusalem. That's 4 reasons God created you.


In this category you will find all our exclusive and bonus material. Never displayed elsewhere or, for example, behind the scene material.
Sebastian Rolls is being taken care of by 3 mistresses at Loversland.


text:
Q: TPL Producer consumer pattern - Start may not be called on a task that was already started I am trying to implement parallel processing inside sql server using custom sql clr code, like the example in below link.
http://www.sqlnotes.info/2015/12/03/run-t-sql-in-parallel/
The problem with the example in the above link is its using threads and locks and that's consuming lot of time. Hence the gains of parallel processing are negligible in many cases. So to fix this, I am trying to create a similar utility which uses Producer-Consumer pattern using TPL.
Producers - are sql procs which call the code to execute sql commands.
Consumer - The utility should should parallel process these queries.
I will send the queries to be processed in batches, by using begin transaction, commit and sp_getapplock. The consumer should start at begin and keep looking for new tasks to process and end when the transaction is committed. For this I am trying to use below code:
List<Task> PendingTaskList = new List<Task>();

    void StartWorker()
    {
        (Task.Factory.StartNew(() =>
        {
            while (!IsClosed)
            {
                Parallel.ForEach(PendingTaskList, new ParallelOptions { MaxDegreeOfParallelism = 10 }, task =>
                {
                    if (task.Status == TaskStatus.Created)
                    {
                        task.Start();
                    }
                });
                while ((!IsClosed) && (PendingTaskList.Count == 0)) Task.Delay(1);
            }
        }, TaskCreationOptions.LongRunning)).Start();
    }

    void Enqueue(string commandText, SqlParameter[] paramList, string queryName, string attributeSysCode)
    {
        //TODO: Localize variables in here ...
        //TODO: Do parameter checking on the T-SQL command text paased here ...
        //TODO: Consider caching pre-compiled versions of popular T-SQL parameters by hashvalue of param string here as key ...

        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = commandText;
        cmd.CommandTimeout = 0;
        cmd.CommandType = CommandType.Text;

        AsyncTaskItem item = new AsyncTaskItem() { Command = cmd, sqlParamList = paramList, QueryName = queryName, AttributeSysCode = attributeSysCode };
        var task = new Task(() => RunOne(item));
        PendingTaskList.Add(task.ContinueWith(t =>
            {
                PendingTaskList.Remove(t);
                CompletedTaskList.Add(t);
            }));

    }

The above code is throwing error "Start may not be called on a task that was already started.'"
How do I get around this issue?

A: Remove the call to Start(). Since StartNew() starts the task it creates, there's no need for the Start().


• Kenilworth's pre season games will be against Leamington, away, on Tues 19th August, kick off 7pm. The following week, 26th August we will entertain Leamington in a return game at Glasshouse Lane. Our pre season will then conclude with a first round Warwickshire Cup game away at Old Coventrians on Sat 30th August, kick off 3pm. The third XV are also having a pre season game against Stratford 3's at home on Friday 29th August, kick off 7pm.
• There has been a change to our league fixtures and, due to work being undertaken at Silhillians, we have switched our fixtures with them and our first home league fixture is now v Silhillians on the 6th Sept. Our new 2014/15 programme will be on display for this game. Who will be the cover star this year?
These events are aimed at businesses supporting local charities and if you take a table your company will get a brief mention in terms of the services they offer on the menu which each guest will receive. Places are available for both events at £20 of which at least £5 will go to the charity and there will be raffles etc on the day to raise further funds.
• Applications are now being invited for the 2015 Six Nations games at Twickenham, v Italy, v Scotland and v France. Full details on how to apply for these tickets are on the News section of the web site. Closing date for applications is 23rd Sept. Please note that the RFU are offering half price junior (<15) tickets for the Italy game.
• Sad news – Life Member David Pritchard has passed away. There is no information on the funeral yet and this will be posted on the web site whenever I know.
Please note that for the duration of Paul's holidays the club will be closed on Sundays, Mondays and Tuesdays.


People often ask what is my favourite town or city in Thailand. The answer is easy, it is Hua Hin, a once quiet fishing village on the Gulf of Siam, two hours drive from Bangkok, and a world away from the bustle and noise of the capital city. Mind you, Bangkok is up there with the favourites as well, but it is the capital city after all, and all capital cities are deserving of their popularity.
I have been visiting Hua Hin for about 25 years now, stopping off on every holiday to recharge my batteries in the peace and tranquillity of one of the hotels just outside the town. For the last twenty years, that hotel has been the Dusit Thani Hua Hin, a 5-star establishment that attracts guests from far and wide, but it also pleases the Thai people because come the week-end, they flock to it for the great food (especially the Saturday night barbecue), the delightful seaside setting, and the chance to go horse-riding at dawn on the beach (the only hotel at which this is available).
Today's Hua Hin owes much of its popularity to the fact that many people discovered it only after the tsunami that devastated the southern beaches of Phi Phi, Phuket, Kao Lak etc. Before the tsunami it could be said that the fishing village atmosphere was very evident, but today, the little fishing harbour is being crowded by the shops, restaurants, and tailors that line the roads leading to the sea.
Most of the major hotel chains have a presence here – Hyatt, Hilton, Marriott, Aleena, Sofitel, and of course, the only already mentioned, Dusit Thani. I choose Dusit Thani because it is a purely Thai owned hotel with service and attention to detail that reflects the Thai ideal of hospitality. All these hotels have excellent restaurants but Hua Hin itself must be one of the best towns in which to find food from every nation. As well as Thai restaurants, of which there are many, there are Chinese, French, German, Indian, Italian, Korean, Swiss, Japansese, Vietnamese, American and European/Mediterranean fusion.
With the growth of a well-heeled retirement colony in the town, bakeries have sprung up as well as cheese and meat importers. Fresh vegetables can be purchased daily at the local market, or there is a Tesco/Lotus supermarket for those who feel the need for packaged veggies and air-conditioned stores.
Hua Hin is one of the most popular spots to which people want to retire as the climate is never too hot or too humid, unlike say Phuket or the islands in the south. It is also within easy distance of Bangkok, there is a good transport network, and perhaps most important of all, there are six championship golf courses in the area.
I cannot recommend the town too much. For me it is the perfect place for a holiday.


text:
Jérôme Deconinck
Development & Prosperity
This description of Jérôme Deconinck's work was prepared when Jérôme Deconinck was elected to the Ashoka Fellowship in 2008.
In response to increasing agricultural industrialization throughout France, Jérôme Deconinck has created the first agricultural land trust to mobilize the French population to preserve their agricultural heritage, and to promote the development of a more unified small-scale organic farming culture. He is demonstrating that another form of rural development—one that preserves landscapes, ensures custody of the environment, and maintains economic and social activities—is possible.
France continues to lose an average of 66,000 hectares of agricultural land each year, having already seen its number of farms cut in half in the last twenty years. Recognizing the enormous social and environmental implications of these changes, Jérôme has created France's first agricultural land trust, demonstrating that another form of rural development is possible. By mobilizing citizens to invest in agricultural land acquisition, he works to protect large territories from widespread land speculation caused by urbanization and increasingly industrialized agriculture. Finally, Jérôme combines his work with small-scale farmers with legislative advocacy efforts, urging the government to adopt measures and reforms that will better democratize access to agricultural lands. Jérôme's land trust aims to help small farmers create their own organic or otherwise environmentally friendly enterprises. Through his land trust, he is dramatically reversing the trends plaguing rural areas in France, preserving the otherwise diminishing role of farmers in rural villages, and giving a common voice to grassroots movements working in the field. Whereas previous efforts to expand organic agriculture have relied on a combative approach, Jérôme's land trust scheme is demonstrating that organic agriculture can coexist with its industrial counterpart. He is ultimately working to restore ties between the French population and their ancestral agricultural traditions, providing them with ownership over their common heritage.
Over the last several decades, urbanization and industrialization have led to a radical shift in the French landscape, once dominated by agriculture. Since 1970, over 170 hectares of agricultural land have been lost each day to other uses, including urbanization, industrialization, and land management policies. This, in turn, has led to a rapid increase in the value of agricultural land; in the French region of Picardie, for example, the value of agricultural land has quintupled over the past five years. As a result, agricultural land is currently concentrated in the hands of the few large industrial farms that can still afford to own it. Of the small-scale landowners who have managed to hold onto their lands, most are aging farmers waiting for their property to be rezoned, so that they can sell it; indeed, today, 85 percent of land belongs to farmers aged fifty-five and older. As a result, it is increasingly difficult for people to acquire land and create their own agricultural enterprises.
In an attempt to protect farmers from this speculation, the government has instituted strict rules controlling the rents for rural territories, maintaining a low price disconnected from the real value of land. The government has, for example, helped launch a public-private body called SAFER, which aims to purchase land in order to protect it from speculation. Yet the scheme is riddled with corruption and misaligned objectives: SAFER's private sector representatives belong to agro-industrial lobbies that protect the interest of large commercial farms. As a result, it is much more profitable for small farmers to rent their lands rather than farm them themselves, restricting farmers' role as custodians of the land and subjecting them to an uncertain future.
Consequently, the number of agricultural enterprises has dropped dramatically over the past fifty years, from 600,000 farms in 1950 to fewer than 300,000 today. While French agriculture is already among the top three most industrialized in Europe, this trend is only likely to continue; indeed, it is estimated that in the next twenty years, there will be fewer than 150,000 farms in France, more and more of which will use industrial methods of production. The disappearance of farms has produced a corresponding loss in France's rural population and job availability. Today, rural inhabitants represent 25 percent of the French population, but farmers, only 4 percent of the national workforce. These trends have had dramatic social consequences on rural areas, as local stores, schools, and even hospitals have been forced to close. The environmental impact has been all the more significant, as small-scale farming plays a critical role in preserving rural landscapes. Moreover, it is estimated that agro-industrial enterprises produce twice as many tons of oil waste as traditional farms, and emit as much greenhouse gas as all French households put together.
While some European agricultural policies have quickly reacted to similar trends in incentivizing a shift to high value-added organic farming, the French sector has resisted going organic. Only 2 percent of French agriculture is currently certified as organic, with the result that France imports from 50 to 90 percent of the organic produce it consumes. France's agro-industries currently exercise inordinate influence over governmental institutions, receiving the vast majority of the European Union's heavy agricultural subsidies. Meanwhile, the most vocal proponents of traditional agriculture are virtually powerless in the face of existing institutions; characterized by their unwavering opposition to globalization, unrealistic and politicized claims, and refusal to compromise, they have failed to propose a viable solution to today's agricultural crisis.
In order to stop speculation on arable land and open up ownership to as many people as possible, Jérôme has created Terre de Liens, France's first agricultural land trust. By mobilizing private savings and creating a new financial product, and soon by capitalizing on donations through a public foundation, he is building a critical mass of private depositors willing to invest in agricultural land acquisition. This capital allows Terre de Liens to back up small agricultural entrepreneurs looking to create their organic or environmentally responsible farm, using land that would otherwise be lost to speculation and most likely be purchased by large agro-industrial farmers. When creating the land trust in 2007, Jérôme immediately saw the importance of incentivizing investors and making his financial product mainstream. Through careful lobbying, he managed to change the finance law and obtain a tax-deductible status for socially and environmentally responsible land acquisition investment, which guarantees a 25 percent tax allowance to investors, and a return close to 5 percent a year over five years, at a level comparable to most savings products. Also, the soon-to-be-created foundation will enable retiring and responsible land-owners to protect the future of their organic farms by placing it in the hands of responsible entrepreneurs. This unique mechanism in the French context is built on the combination of several models successfully implemented in the Netherlands and the United Kingdom, where Jérôme drew much of his inspiration. Within the first two years of his project, he has collected more than €700,000 (US$929,000) in savings and through an innovative campaign, recently raised more than €3M (US$ 3.9M) in less than 3 months.
Beyond the acquisition of land, Jérôme sees his land trust as an essential tool to increase public awareness around the growing state of rural depression, and to mobilize French citizens around the issue of agricultural preservation, giving them a concrete way to participate in the custody of French rural territories. Jérôme has mobilized 160 investors, and plans to engage more than 1,600 by the end of the year, through a media campaign and expanded distribution channels. Among his partners are NEF, a large socially responsible bank, and BIOCOOP, the largest organic grocery distribution chain with 300 stores in France, which will promote his product in the fall as soon as he gets the accreditation from the financial market authority. This should coincide with his obtaining tax-deductible status for his foundation.
Jérôme's decision to create a land trust is born from several years of grassroots work supporting agricultural entrepreneurs in the process of creating their organic and/or ecologically friendly exploitations. During those years, he realized that the main bottleneck in rural entrepreneurship was the difficulty to secure land. Terre de Liens has set up a network of local branches in French agricultural regions, which inform and help would-be entrepreneurs through the process of business-plan preparation, land acquisition, and organic certification. In 2007, they accompanied nearly 200 project leaders, in 80 percent of cases from the initial stages of conception. Terre de Liens local branches also play an active role in farming schools across France, where they inform and educate students about enterprise creation and sustainable farming, elements usually absent from curricula. In the long-term, Jérôme wants to foster a comprehensive shift in agricultural education.
Locally, Terre de Liens' branches also play a key role in mobilizing grassroots networks and citizen organizations (COs) to work hand-in-hand to promote the rise of a new form of agricultural economy. Shifting away from traditional discourses and the organic vs. industrial dichotomy, Jérôme sees that small organic farms can coexist with large agro-industrial complexes. Because of a rising demand and the development of local distribution networks, an organic farm operating through individual distribution schemes can be profitable with 3 hectares, whereas the operating expenses of agro-industrial farming necessitate a minimum of 17 hectares to be lucrative. Jérôme's strategy is hence to demonstrate this viability through the multiplication of projects, and to organize rural actors in lobbying for better recognition and representation of small agricultural entrepreneurs. Thanks to a network of 400 COs throughout France, including organic cooperatives and villages, farming schools and Community Supported Agriculture networks, Terre de Liens has secured representative positions in regional governments, and is shifting regional policies for the protection of arable land and small agricultural operators.
An agronomical engineer by training, Jérôme felt compelled to work closely with those operating the land rather than to work in a laboratory to do research. He shifted away from his initial study to get engaged in rural movements. After a few years of volunteering, he created his own position of national coordinator at RELIER, a network connecting local initiatives to foster rural development. In his daily work of supporting entrepreneurs in the creation of their exploitations, he quickly realized that the bottleneck in the sector was access and acquisition of land because of the pressing speculation.
Using his extensive knowledge of rural law, the lessons learned by his grassroots work, and the expertise of his friend Kurt Wartena, a retired Dutch organic entrepreneur, Jérôme started studying existing models in the rest of Europe and in other fields, especially low-income housing, where the land acquisition model of Habitat et Humanisme struck him as very transferable. He also took a course in fundraising and resource mobilization from ESSEC, a leading business school in France, to eventually leave RELIER in 2006 and create Terre de Liens, the first agricultural land trust in France, and its adjoining foundation.
Jérôme lives in a little village in the Drôme region, far from the working-class neighborhood where he grew up, in the city of Lyon. Jérôme says he will not rest until 35 percent of French agriculture is organic, and until every single French citizen owns a piece of agricultural land.


First, prepare the parsnips. Preheat the oven to 450 degrees F. Buy organic parsnips and you don't have to peel them. Scrub them well and cut into sticks about 3 inches long and 1/2 inch thick. Place them on a parchment lined baking sheet and toss with coconut oil. Sprinkle with salt and pepper and bake for 30 minutes, turning halfway through.
Prepare the Hilary's Broccoli Casserole Bites while the parsnips are baking.
To make the dressing, place the tahini, olive oil, lemon juice, apple cider vinegar, parsley, garlic, green onion, salt, pepper, maple syrup, and 1/4 c of water in a blender. Blend on high until smooth.
Place the fries on a serving platter once they are done baking. Top with the Bites and drizzle with dressing. Optional garnishes are parsley, diced red onion, sriracha, and lemon zest.
Subscribe to our newsletter to get exclusive coupons, recipes, and more.