EDDY: Yeah, it was quite a good competition for me. Just one apparatus, the parallel bars… but the rest was really OK, so I'm quite happy.
Yeah, everything was so clean until parallel bars and after that, high bar was really fantastic as well. You looked really happy when you finished there.
EDDY: After all, I was happy that it was a good competition and that I didn't get any bad injuries, so yeah.
What did you enjoy the most about the competition?
EDDY: It's a feeling like in a European championships or a World championships. Just very special, because the normal competitions, they are not as big as this one. There were lots of people and the entertainer (Lucas Fischer, former Swiss national gymnast) was really cool, so it was great.
You're going to the European championships in Poland in about a month. Do you have anything planned, any small upgrades?
EDDY: Not really any upgrades, no. I feel like now I know where I am and what I need to work on, and I think I'm on the right track!


text:
Gulf boom delivers more horse power
Reena Amos Dyes
Published Wednesday, March 19, 2008
(SUPPLIED)
Rising wealth in the region is driving growth in the equestrian world and as a result more than 200 horses will go on sale at the fourth Dubai International Horse Fair (DIHF), the region's leading exhibition, which kicks off today at the Dubai International Convention and Exhibition Centre.
Apart from top international breeders, manufacturers and distributors will be on hand to take advantage of growing demand for accessories, equipment and equestrian services.
The event's draw has become international and manufacturers and distributors from Canada, France, Germany, New Zealand, the United Kingdom and the United States are expected to hold major displays and product launches for the Middle East.
One of the highlights of the show will be the auction of Arabian and thoroughbred horses by Al Faisal Stud, which will be the biggest horse sale in the UAE.
Despite the fact the Arab world has had a long history of breeding and raising champion horses, over the years, regional horse owners have started looking to mature international markets to meet all their equine needs. But experts Emirates Business spoke to on the eve of the DIHF said regional breeders are working to reverse the trend.
They also pointed out that as the population continues to grow and as world-class facilities for horse racing, polo and show jumping are being built in the UAE, the country is all set to make its mark on the racing map of the world and the market for equestrian supplies and services is set to grow with it.
Talking to Emirates Business about how the importance of the DIHF and the business has grown over the years, Abdulla Qassem, who is a board member of the Higher Organising Committee of DIHF and Dubai International Arabian Horse Championship, said: "The show has grown in exhibition net space of more than 250 per cent since its launch four years ago.
Last year's edition hosted 213 exhibitors from 27 countries. More than 30 countries have confirmed their presence at the show and the number of exhibitors has increased.
"This year the show will host an official French pavilion for the first time plus exhibitors from Japan and Singapore. A total of 7,833 visitors from 71 countries came to the show last year.
In addition, there is increased participation from regional and local companies this year, which reflects the strong demand from suppliers and distributors to access the dynamic Middle East's equestrian market."
The rise in interest in the show and the increase in business is attributed to the fact the population in the region and their spending power has been rising steadily along with the country's equestrian facilities.
Qassem said: "Thanks to the visionary leadership of the rulers across the Gulf, booming economical developments allow people to enjoy increased spending capacity and become riders and horse owners.
"As a result, some of the world's best-established European and American specialist suppliers are looking to raise their profile in the Middle East through their participation in the fair."
One exhibition stand sure to draw attention will be from France, with genetics experts providing material on the use of cloning for breeding championship race horses.
Other product launches will include a new mobile weighing machine, a full range of world equine hydrotherapy spas, an oval horse walker and an interactive simulator which imitates real-life racing conditions at most major racecourses throughout the world.
The simulator is the world's first to address the psychology of racing, providing computer-generated insights into the jockey's technique and suggestions related to use of the whip and balance.
One of the companies that is expected to display the latest in racing equipment, riding apparel, saddlery and grooming kits at the show is Highline Horse Accessories. The company is one of UAE's largest distributors of saddle and tack products.
Mohamed Saleh, production manager, Highline Horse Accessories, said: "The DIHF has become an important date in the calendar for local firms, and is a prime opportunity for groups like ours to network with new and existing customers from fields including showrooms, clubs and stables."
Another company expected to participate is Al Awani, a regional company that offers a complete range of the latest equestrian products, services and techniques.
Al Awani has been participating in the show since the beginning. It's finance manager Abdul Kareem Feroze said: "Participating in the DIHF is any exhibitor's dream and definitely a shopper's paradise as more and more innovative products are being launched at the show each year."
Talking about the business generated at the show last year and the equestrian industry in general, Abdulla Qassem said: "It is difficult to assess in financial terms the immediate amount of business generated at the fair as buying and breeding horses is a long-term investment.
Another point to consider is that deals and businesses are ongoing through the year as a result of opportunities presented at the exhibition.
"However businesses dealing in the sale of equestrian accessories do see growing figures and contacts annually at the show. The equestrian industry is a growing multi-billion dollar industry, which is especially booming in the UAE as the booming economy allows more and more people to take to horse racing and breeding."
The expected presence of breeders like Al Faisal Stud, Ajman Stud, Sharjah Racing and Equestrian Centre, Al Naif Stud from Qatar, Cavalry of Oman and the Emirates Horse Breeders Society at the DIHF will showcase regional breeding success and also point to the fact the demand for Arabian horses is now growing and efforts made by regional breeders to reverse the trend of buying horses from international markets is paying off.
Abdulla Qassem said: "Previously, regional horse owners looked to mature international markets to meet all their equine needs. Today however, the increased presence of gold standard farms and breeders like Godolphin are helping to turn the tide.
"The market for Arabian horses and associated products has grown over the years and the evidence is the increasing numbers of buyers attending the show and the sales made each passing year. The presence of world class breeders, premium equipment, top level veterinarians and increased number of local suppliers have also assisted in changing this trend," said Qaseem.
"Large international equestrian operations also view the fair as a serious opportunity to cultivate long-term relationships with buyers, distributors and breeders for the Arabian horse.
"The Arab world has had a long history of breeding and raising champion horses and its status as a top quality market is exponentially increasing with the rise of developments like the UAE's iconic new Meydan Racecourse and the prominence of the Dubai World Cup," said DIHF's QassemThe DIHF will run until March 22 at the Dubai International Convention and Exhibition Centre.

redpajama_set_name: RedPajamaCommonCrawl


text:
Console Games Featured
Vintage Gaming – Super Dodge Ball
No Comments on Vintage Gaming – Super Dodge Ball
Super Dodge Ball might just be the ideal game from the 8-bit era that you didn't play. It's exactly what the title says, your team (USA in our NES version) battles dodge ball teams from around the globe in a tournament. Each team (from places like Iceland, Kenya and China) had different strengths and weaknesses, and sometimes their dodge ball courts themselves provided difficulties, such as the Iceland court being…icy. Each member of the teams could dash, jump, throw and catch the dodge balls, and also had superpowered moves if you timed them right while dashing or dashing/jumping.
If you check out the screenshots below, you might notice that it bears more than a passing resemblance to last week's OGT entrant, River City Ransom. That's because, in Japan, there was a whole series of 'Kunio-kun' games (Kunio being the main character in most of them), with only a few making it over here. SDB was made for a few other platforms, and is currently available via the Wii Virtual Console. In addition to the tournament mode, you had 2 player VS play, as well as a schoolyard brawl mode (also 1 or 2 players). There is one thing that makes Super Dodge Ball hard to enjoy in it's original environment – there can be many times where there is too much activity on the screen and the characters flicker. It was a limitation of the NES. Still, I got past it easily and it shouldn't stop you.
I consider Super Dodge Ball an 'ideal' NES game because it does exactly what you need it to do. It's easy to learn – your buddies could pick it up in a few minutes – but hard enough to entertain. The same goofily endearing graphics from River City Ransom make nailing a guy with one of your super shots particularly fun. It's simple fun, and we can all use that. Check it out, won't you?
Tags Console Games, console gaming, NES, Super Dodge Ball, Vintage Gaming, Virtual Console
Console Games Featured PC Games
Vintage Gaming – Jedi Knight 2: Jedi Outcast
2 Comments on Vintage Gaming – Jedi Knight 2: Jedi Outcast
First person shooters were huge for me when I was younger, despite the fact I wasn't very good at them. That meant FPS's that still had a single player story were much loved and more likely to be bought. Jedi Outcast was the second 'Jedi Knight' game but the third game starring Kyle Katarn, one of my favorite 'Expanded Universe' Star Wars characters. In Dark Forces, we learn that Katarn was instrumental in the theft of the original Death Star plans delivered to Princess Leia. In Dark Forces II: Jedi Knight, Katarn learns of his Force sensitivity and defeats a Dark Jedi who killed his father.
The Kyle Katarn we see in JK2 is an older man who has set aside his Jedi ways and is trying to just live his mercenary life, having been scarred by very nearly turning to the Dark Side. However, things go wrong when he encounters a Dark Jedi and is soundly defeated – and his partner presumed murdered – when investigating odd Imperial activity relating to Jedi history. He takes up his lightsaber once more find the culprits.
The game used a modified Quake III: Team Arena engine which looked plenty good for the time, and performed well. All of the typical Force powers are there, including lightning and grip (choke), and if there's one problem, it's that you don't have the powers and your saber right off the bat due to the story. Which is a great story, by the way, with the expected cameos (including Billy Dee Williams as Lando).
The other side of this is the multiplayer. It was pretty popular for it's time, I had a great time playing JK2 with friends and at LAN parties, and still install it for nostalgia's sake every once in a while. I keep it unpatched so I can use the ridiculously fun if overpowered Force grip power to grab dudes and toss them off ledges. The bots are fun to play against and can have dynamic difficulty (so you don't constantly pwn them). Very handy if you don't have enough people looking to play. A nice touch with that is each bot plays differently – the Lando bot doesn't use the Force, for example, but is deadly with the other weapons. Which are fun Star Wars-ized versions of your typical FPS weapons. Each has an alt-fire mode to add a little more depth.
But really, if you are playing this or any of the other Jedi Knight games (which will be covered too, all are awesome), you want to fight with a lightsaber. You will not be disappointed with JK2 for this, as it kicks ass. 3 different combat styles, each with different special moves, combined with the ability to throw your saber, saber clashes and more really make the lightsaber combat sing. Another nice touch is the ability to challenge another player to single combat, allowing you to duel your opponent without taking any damage from (or doing damage to) everyone else in the level.
Look, this is one game I could go on and on about (500 words and counting!) but I say, let's play it. SO, I am going to get my JK2 server up and running, maybe tonight, and I challenge anyone who wants to be destroyed beat the snot out of me to dig out their copy and have a go. I'll update the post with the server IP when I get it going.
Tags Jedi Knight, Jedi Knight II, Jedi Outcast, ogt, old game tuesday, pc games, pc gaming, star wars, Vintage Gaming
Game Review – Tomb Raider
No Comments on Game Review – Tomb Raider
I played bits and pieces of the early Tomb Raider games, but was never a fan of them. I didn't seek them out. But I kept hearing how good this new one was, at least before everyone moved on to Bioshock: Infinite, and when I saw a good deal, I jumped in and bought it. I'm glad that I did.
Tomb Raider acts as a sort of reboot for the franchise. How did Lara Croft get to be the guns akimbo, dinosaur killing, treasure finding badass? Well, you'll know after this. Lara is part of an archaeological team looking for an ancient empire named Yamatai. She figures out that they've been heading in the wrong direction, and as a result, they end up shipwrecked. She blames herself. People die, and she blames herself more. She becomes determined to find a way off the island, complicated by the fact that any craft that approaches by land or sea gets knocked around and destroyed by strange storms. She finds evidence that it's been happening for hundreds of years, and that the island's inhabitants are the survivors of those wrecks.
The look of the game hearkens back to Indiana Jones, but what the game really plays like to me is Batman: Arkham Asylum or Arkham City, if instead of beating everyone with fists, Bats went all Oliver Queen on people. Secret, hidden things to find and collect abound. Instead of Detective Mode there's 'Survival Insticts' which helps hidden items, climbable areas, and living creatures. There are puzzles, In which you have to find a way past an obstacle or blocked path. They are just difficult enough to be fun, but not to frustrate you into oblivion. I only got stuck once, and once I checked the walkthrough for the puzzle that got me, I decided I must be too tired and went to bed.
The main story arc took me about 15 hours or so to finish – but I only found 71% of the stuff available to find, and almost no complete sets. You can go back after the game is over and find the rest if you like, and as you are playing, you can fast travel via campsites. I didn't do that though, as I wanted to see the story. One other note – there is a point where Lara is about to be sexually assaulted, which generated a ton of discussion when the game was being first talked about. It's not worse than the typical 'female hero is tied up and rescued just in the nick of time' trope, though in this case Lara basically rescues herself and shoots the guy in the face. If this is something that will bother you, the game is probably best avoided.
So what's the verdict? I had a blast. I played until 3 in the morning a couple of times, wanting to see one more thing, reveal one more important plot point. That doesn't happen to me much any more. There's a few rough patches, the infamous one is how quickly she gets over killing her first person, but that's to be expected in a video game. If you want to see what the game looks like on a decent but not world-beating PC, check the gallery below. If you wish to purchase the game, here's an Amazon link (it installs via Steam). It's also available on PS3 and Xbox360, just change the option under Platform.
Tags Console Games, Lara Croft, pc games, pc gaming, Tomb Raider
Featured Movies Review
Movie Review – G.I. Joe: Retaliation
No Comments on Movie Review – G.I. Joe: Retaliation
I was never a G.I. Joe kid growing up – I don't remember it being forbidden, but discouraged, but it was also always on opposite something else I wanted to watch. I went to see this with a couple of friends who were way more into the Joes than I ever was, including one that had read the comics in addition to watched the cartoons. I mostly treated the movie as a generic sci-fi action movie that happened to be based on licensed characters, and it was an interesting comparison.
I just spent a few minutes trying to write a synopsis for the plot and broke up laughing. I think that means it's a true plot worth of the Cobra you know from the old cartoon. Think Goldeneye, but sillier. The writing is pretty bad, but in an entertaining 'groanworthy' fashion. Dwayne 'The Rock' Johnson is a solid addition to the cast – he does well with lackluster material. I like him as an action star. Jonathan Pryce as the 'President' was fine. Byung-hyun Lee as Storm Shadow and Ray Park as Snake Eyes kept the martial arts action legit. Bruce Willis was having fun, but felt like a third wheel at times. Didn't need him at all.
Look, I'm not going to say it was great. But the action sequences were crazy like you'd expect from G.I. Joe, and the Cobra superweapon was actually scary. Don't concentrate on it too hard, is all.
Tags Bruce Willis, Dwayne Johnson, GI Joe: Retaliation, movie, movie review, movies
Movie Review – The Croods
No Comments on Movie Review – The Croods
I almost didn't go see The Croods. When I was just seeing the stand-ups and posters in the theaters, it didn't appeal to me. Cavemen really do little for me – how many jokes can you make about them, anyway? Early clips and trailers did little to disuade me from that notion. What actually got me interested was seeing that Chris Sanders was behind it. Lilo and Stitch and How to Train your Dragon are big hits around here, and enjoyable for all ages, so I took the two oldest kids to check it out. Everybody loved it. Sure, it had some old jokes, but old jokes are still funny if well executed. There's more heart here than you realize – it kind of sneaks up on you in classic Chris Sanders fashion.
If you're looking for a good family movie to see while you're waiting for Despicable Me 2 or Monsters University, this is it. Bring a few tissues, and prepare to ooh and aah at the visuals.
Tags Emma Stone, kids movies, movie, movie review, movies, Nicholas Cage, Ryan Reynolds, The Croods
Featured PC Games Review
SimCity – My Impressions
No Comments on SimCity – My Impressions
If you are reading this, you probably know all the debates on the new SimCity, about always-on (and whether it's needed), how scummy EA is, the stupid decisions leading up to the release of the game, and so on. I'll be touching on all of that, as well as the actual gameplay.
First, Origin. I really don't like Origin as a platform. Steam already won out for me as far as a game hosting platform, I didn't need another one with all different 'friends'. They also didn't let you pre-load the game, which would've helped EA immensely when the release hit. It's also an extra layer of clcking to even GET to the game, as you click Play on Origin, but that doesn't, you know, PLAY the game, that opens another window, which runs the updater, and then you get to click again. Why? Isn't that the benefit of having an always-on client? You make me use it, but it provides no convenience or benefit to me.
So, you're in the game finally. A note on regions: forget, at least for now, trying to join random folks in a public region. You can't sort them by any means, or filter out filled regions. They come up in the same order each time, so you'd have to page past every full region to try and find one with a city site open. That's actually just a theory, as I paged past dozens of regions and never got far enough to find one with open spots. Hopefully you are playing with friends, and you can click their name and join their regions (or get invited to private regions). I won't tell you that sometimes friend requests are buggy, though.
Once you've battled past these issues though, and you are in a city site, and building…well, it's just great. The simplifications to zoning, power and water help to cut down on pointless busywork. Curved roads can be difficult to work with, but can make for some lovely designs – I wish there were some oddly shaped buildings that could better take advantage of the space though. At least for me, the game seems bring along something new to manage at just the right time, which is usually when I'm feeling pretty confident in my mayoral abilities. It hasn't felt particularly hard to me, even at 125k inhabitants, but there were a few touchy moments. Usually they were caused by changes my region-mates made, like using up all the water or sewer capacity I was using while I was signed off. That's an annoying side effect of the asynchronous multiplayer, especially if you don't have the money/space to easily fix the issue when you do jump back in.
Now, the question: Should I buy this game? Looking at just the game itself, and not the opinions on EA and Origin, it's a qualified yes. Can you get your head around building a smaller, focused city versus a huge sprawling megalopolis? Do you have friends you'd like to play a SimCity game with? Go for it. If not, you may just want to play SC2k again. This doesn't replace that, at least for me.
Tags EA, game review, Maxis, pc games, pc gaming, simcity
Movie Review – Lincoln
No Comments on Movie Review – Lincoln
This isn't normally what I go to the movies for, which if you've read my previous reviews, you could probably guess. It's not exactly comparable to The Avengers or Ponyo. Still, Lincoln is a damn fine movie. The main thrust of the movie examines Abraham Lincoln (Daniel Day-Lewis) as he pushes to get the 13th amendment through the House of Representatives early in 1865. Mixed with this is marriage strife, caused in part by Robert Todd Lincoln's (Robin, er, Joseph Gordon-Levitt) desire to join the Union army. Sally Field was excellent as Mary Todd Lincoln, as well.
The scene-stealer for me, was Tommy Lee Jones as Radical Republican Thaddeus Stevens. He had the best lines, thanks in part to the fact that the debates in the House were as much rap battles with put-downs and sly remarks as they were stately debates. You can add James Spader and Tim Blake Nelson to that list of scene-stealing too, as lobbyists employed to try and win over lame-duck Democrats to the Republican side on the amendment.
The Oscar buzz for this film is well-deserved. I could listen to this version of Lincoln tell his stories for hours. Definitely well worth seeing if you are in the mood for some more thoughtful fare before the big summer movie season.
Tags Abraham Lincoln, Daniel Day-Lewis, James Spader, Joseph Gordon-Levitt, Lincoln, movie, movie review, movies, Sally Field, Steven Spielberg, Tim Blake Nelson, Tommy Lee Jones
Comics Featured Review
Book Review – Dragon Age: Those Who Speak
No Comments on Book Review – Dragon Age: Those Who Speak
I got my hands on a galley copy of Dragon Age: Those Who Speak, the latest graphic novel filling in the gaps in the Dragon Age universe. Written by David Gaider, this comic follows Dragon Age: The Silent Grove and takes Alistair, Varric and Isabela to the Tevinter Imperium, giving us a taste of that foul place, continuing Alistair's quest to find out what happened to King Maric. This book seemed to move along a bit better, and gives you some insight into our favorite pirate lass. It felt more like the characters I'm used to, while still giving some depth which was needed. Oh, and there's one more 'friendly' face that appears but I won't spoil it. Definitely worth picking up if you're itching for something to hold you over until Dragon Age III: Inquisition comes out.
Previously available as individual comics (in three parts), what I reviewed represents a collection of all three, available in February.
Tags book review, comic, comic book, comic books, comics, David Gaider, Dragon Age, Those Who Speak
Movie Review – Rise of the Guardians
No Comments on Movie Review – Rise of the Guardians
Rise of the Guardians is the latest William Joyce property to be adapted to the big screen, though I would caution that it's a pretty loose adaptation. It's a Dreamworks production, so the visuals are great. The story follows the Guardians of childhood – somewhat nebulously defined, but Santa ("North"), the Easter Bunny, the Sandman, and the Tooth Fairy are charged with protecting the children of the world. Santa is not your Norman Rockwell guy, but a tatted up, scimitar-wielding tough guy. The Easter Bunny is an Aussie rabbit that OF COURSE is armed with boomerags. You know what both of them do for kids. The Sandman makes sure there are sweet dreams, and the Tooth Fairy isn't gathering teeth so much as good memories. The Man in the Moon acts as a guiding force for the Guardians.
Jack Frost is a wild card in the mix. He obviously has mystical powers, just like the Guardians, but he seems to just wander the world, invisible to everyone, causing trouble as a young man does. When Loki Pitch Black, the boogeyman, returns, the Man in the Moon makes Jack Frost a Guardian, much to the chagrin of the rest of the team. As you might expect, there is turmoil and strife, and Jack eventually learns who he is (oh yeah – he forgot his childhood before he became magic) and what his special talent is.
All in all it was an entertaining movie, though not one that has embedded itself in mine and my kids' conciousness the way Despicable Me has, for example. If you are looking for a movie to see as a family over the holidays, this is a good choice.
Tags Christmas Movies, movie, movie review, movies, Rise of the Guardians
Lightning Movie Reviews – Skyfall, Wreck-It Ralph and The Man with the Iron Fists
No Comments on Lightning Movie Reviews – Skyfall, Wreck-It Ralph and The Man with the Iron Fists
Spoiler - this is the 'room' where the ghosts from Pac-Man live
Spoiler – this is the 'room' where the ghosts from Pac-Man live
I have been to several movies lately, and have been remiss in reviewing them. I aim to make up for that now. Here are my quick hit thoughts on the movies in the title.
Skyfall – This is an amazing movie, but not for the reasons you'd expect for a Bond movie. Sure, there's action, exotic locales, babes and all the usual trappings. But it's a very personal story for Bond and M, one that might just tug at your heartstrings a bit. Also, if you are one of those Bond purists who decried the Craig era Bond going away from some classic elements from the 60s and 70s movies, the end to this one should feel like wrapping up in a warm blanket. I won't say more because *I* wasn't spoiled about any of this, and you shouldn't either. See this movie.
Wreck-It Ralph – Shifting gears a bit, I took my kids to see this a week or so ago. It's a wonderful movie, playing well with your classic video game friends and foes, and using the associated tropes to tell a good story. Try and catch all the references – I never had a Sega system of any kind, so some of the obscure characters from that side of things escaped me – but stay for the great characters. Ralph is a big lug who's easy to root for, forced to live in the dump by the 'good' characters in his game. Vanellope is actually not as annoying as the trailers might make you think, and the love story angle with Fix-It Felix Jr. and Sgt. Calhoun is hilarious (but still rings true). Find some kids and take them.
The Man with the Iron Fists – This was obviously made by someone (The RZA) who loves Quentin Tarantino's movies, but learned all the wrong lessons from them. The action is obscured and hard to follow. The humor elements are out of place. The hero character is under-developed. Only Russell Crowe seems to be having any fun (and it's almost worth it just to see him) but this is a 'wait for SpikeTV' type of film. Seriously, it's going to be one of their favorites, I'm sure.
I hope that helps, and if you have any other questions, comment away!
Tags movie, movie review, movies, review, Skyfall, The Man with the Iron Fists, Wreck-It Ralph
Movie Review – Hotel Transylvania
3 Comments on Movie Review – Hotel Transylvania
We saw Hotel Transylvania recently, and I was surprised at how much I enjoyed it. Adam Sandler voices Dracula, who, it turns out, isn't such a bad guy. He just wants to raise his daughter Mavis (voiced by Selena Gomez) in peace, so he builds a monsters-only hotel surrounded by layers of defenses to keep the outside world at bay. It works for the first 118 years of her life, but of course, a human gets in and hilarity ensues.
I was nervous about whether or not Genndy Tartakovsky's style could translate to a 3D animated film, but the Samurai Jack creator did great in his first feature. The action scenes are a strong suit but it's well-balanced by some surprisingly poignant moments. I can't say that the animation itself was on par with Pixar, but definitely respectable – right there with Illumination's Despicable Me. You have some great side characters, though I think Kevin James's voice sticks out a bit instead of blending in.
If you have kids, it's a good way to spend an afternoon. It won't probably become a smash hit, but it'll be a movie you'll enjoy watching at Halloween every year. Now let's hope Genndy can get that Samurai Jack movie back in production!
Tags Adam Sandler, Dracula, Genndy Tartakovsky, Hotel Transylvania, Mavis, movie, movie review, movies, Samurai Jack, Selena Gomez
Featured Life Review
How to Train Your Dragon Live!
No Comments on How to Train Your Dragon Live!
The fam and I saw the How to Train Your Dragon Live show over the weekend, and we have pictures! It's a tough thing to photograph, but these are the best. And of course, a few pictures of the cutest kids in the world are in there.
My Mattie!
My Eva!
Gronkle!
Tags Dreamworks, Eva, Hiccup, How to Train Your Dragon, How to Train Your Dragon Live!, mattie, movie, picture, pictures, Toothless


New built to high standards. Walking distance to school and some 800 meters to supermarkets and shops.
There is one terrace on each side of the house. Each of 21 m2.
TV and telephone in all bedrooms and lounge.
Place for two normal cars in garage and for three small ones.


text:
Annual Report of the Board of Regents of the Smithsonian Institution
Smithsonian Institution. Board of Regents
The Institution, 1858
One or two months before this time , a circular letter of advice is transmitted to all
the institutions and individuals in the United States and the Canadas known or
supposed to have a desire to avail themselves of the facilities of the Smithsonian
The time occupied in invoicing and making up the packages varies with the
occasion , although a month is usually required to finish the work . After the
bundles are all made up , those for each agent are brought into one heap , and
they are ...
The packages are sent to the agents of the Institution , who inclose them in boxes
, which are forwarded monthly , or oftener . On being received in Washington they
are unpacked , an entry made of their contents , and the parcels placed ...
... at Evanston , Illinois , to procure for its museum a collection of specimens of the
natural history of the northwest , visited southern Illinois in the spring , and after
exploring the vicinity of Cairo and New Madrid for several months , proceeded to
Now , it seems to me that it can be proved , or at This amazing difference in favor
of a smaller river is due to the fact that the Ganges , being a tropical river , the
rains all fall during six months , and are therefore very heavy . The washing of the
Letter from the Secretary to Congress
Report of Professor Henry for 1857
Report of Professor Baird Assistant Secretary
List of Meteorological Stations and Observers
Report of the Executive Committee
LECTURES On Coal By Prof Jos LE Conte
METEOROLOGY Colonia Tovar Venezuela By A FendLER
according amount appears battery becomes brush carbon cause charge circuit closed clouds coal collections compared conducting connected containing continued Course diameter direction discharge distance earth effect electricity equal evident experiments fact feet figures force galvanic give given glass greater heat Henry High inches increase Institution intensity Kinds latter length less light lower magnetism March mean metallic Middle month Morse nature nearly needle negative object observations obtained original passed period plants plate positive present produced Prof Professor publication quantity rain received remains remarkable represented river secondary seen Smithsonian spark spiral stars surface telegraph temperature Ther thermometer thick tion United whole wind wire
Página 9 - The emphasis upon publications as a means of diffusing knowledge was expressed by the first Secretary of the Smithsonian Institution. In his formal plan for the Institution, Joseph Henry articulated a program that included the following statement: "It is proposed to publish a series of reports, giving an account of the new discoveries in science, and of the changes made from year to year in all branches of knowledge not strictly professional.
Página 7 - I mean stock to remain in this country, to the United States of America, to found at Washington, under the name of the Smithsonian Institution, an establishment for the increase and diffusion of knowledge among men.
Página 12 - January, 1847, requiring an equal division of the income between the active operations and the museum and library, when the buildings are completed, be and it is hereby repealed.
Página 8 - It is proposed — 1. To stimulate men of talent to make original researches, by offering suitable rewards for memoirs containing new truths; and, 2. To appropriate annually a portion of the income for particular researches, under the direction of suitable persons. To DIFFUSE KNOWLEDGE. It is proposed — 1. To publish a series of periodical reports on the progress of the different branches of knowledge; and, 2 To publish occasionally separate treatises on subjects of general interest.
Página 12 - Art-Union and other similar societies. 12. A small appropriation should annually be made for models of antiquities, such as those of the remains of ancient temples, &c. 13. For the present, or until the building is fully completed, besides the Secretary, no permanent assistant will be required, except one, to act as librarian. 14. The Secretary, by the law of Congress, is alone responsible to the Regents.
Página 10 - ... Agriculture. 4. Application of science to arts. II. MORAL AND POLITICAL CLASS. 5. .Ethnology, including particular history, comparative philology, antiquities, &c. 6. Statistics and political economy. 7. Mental and moral philosophy. 8. A survey of the political events of the world, penal reform, &c. HI. LITERATURE AND THE FINE ARTS. 9. Modern literature. 10. The fine arts, and their application to the useful arts. 11. Bibliography. 12. Obituary notices of distinguished individuals.
Página 26 - We are indebted to the National Telegraph Line for a series of observations from New Orleans to New York and as far westward as Cincinnati, which have been published in the Evening Star of this city.
Página 11 - To carry out the plan before described, a library will be required, consisting, 1st, of a complete collection of the transactions and proceedings of all the learned societies in the world ; 2d, of the more important current periodical publications, and other works necessary in preparing the periodical reports.
Página 8 - ... be considered, but also the continual expense of keeping it in repair, and of the support of the establishment necessarily connected with it. There should also be but few individuals permanently supported by the Institution. 12. The plan and dimensions of the building should be determined by the plan of organization, and not the converse. 13. It should be recollected that mankind in general are to be benefited by the bequest, and that, therefore, all unnecessary expenditure on local objects would...
Página 96 - In this room, and extending around the same, was a circuit of wire stretched along the wall, and at one termination of this, in the recess of a window, a bell was fixed, while the other extremity was connected with a galvanic apparatus. You showed us the manner in which the bell could be made to ring by a current of electricity, transmitted through this wire, and you remarked that this method might be adopted for giving signals, by the ringing of a bell at the distance of many miles from the point...
Título Annual Report of the Board of Regents of the Smithsonian Institution
Mis. doc.
Publication (Smithsonian Institution)
Autor Smithsonian Institution. Board of Regents
Editor The Institution, 1858


text:
#include <sys/param.h>

#include <errno.h>
#include <s2n.h>

#include "error/s2n_errno.h"

#include "crypto/s2n_fips.h"

#include "tls/s2n_cipher_suites.h"
#include "tls/s2n_connection.h"
#include "tls/s2n_record.h"
#include "tls/s2n_resume.h"
#include "tls/s2n_alerts.h"
#include "tls/s2n_tls.h"
#include "tls/s2n_kex.h"

#include "stuffer/s2n_stuffer.h"

#include "utils/s2n_safety.h"
#include "utils/s2n_socket.h"
#include "utils/s2n_random.h"
#include "utils/s2n_str.h"

/* From RFC 5246 7.4 */
#define TLS_HELLO_REQUEST              0
#define TLS_CLIENT_HELLO               1
#define TLS_SERVER_HELLO               2
#define TLS_SERVER_NEW_SESSION_TICKET  4
#define TLS_SERVER_CERT               11
#define TLS_SERVER_KEY                12
#define TLS_SERVER_CERT_REQ           13
#define TLS_CLIENT_CERT_REQ           13 /* Same as SERVER_CERT_REQ */
#define TLS_SERVER_HELLO_DONE         14
#define TLS_CLIENT_CERT               11  /* Same as SERVER_CERT */
#define TLS_CLIENT_CERT_VERIFY        15
#define TLS_CLIENT_KEY                16
#define TLS_CLIENT_FINISHED           20
#define TLS_SERVER_FINISHED           20  /* Same as CLIENT_FINISHED */
#define TLS_SERVER_CERT_STATUS        22

struct s2n_handshake_action {
    uint8_t record_type;
    uint8_t message_type;
    char writer;                /* 'S' or 'C' for server or client, 'B' for both */
    int (*handler[2]) (struct s2n_connection * conn);
};

/* Client and Server handlers for each message type we support.
 * See http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-7 for the list of handshake message types
 */
static struct s2n_handshake_action state_machine[] = {
    /* message_type_t           = {Record type   Message type     Writer S2N_SERVER                S2N_CLIENT }  */
    [CLIENT_HELLO]              = {TLS_HANDSHAKE, TLS_CLIENT_HELLO, 'C', {s2n_client_hello_recv, s2n_client_hello_send}},
    [SERVER_HELLO]              = {TLS_HANDSHAKE, TLS_SERVER_HELLO, 'S', {s2n_server_hello_send, s2n_server_hello_recv}},
    [SERVER_NEW_SESSION_TICKET] = {TLS_HANDSHAKE, TLS_SERVER_NEW_SESSION_TICKET,'S', {s2n_server_nst_send, s2n_server_nst_recv}},
    [SERVER_CERT]               = {TLS_HANDSHAKE, TLS_SERVER_CERT, 'S', {s2n_server_cert_send, s2n_server_cert_recv}},
    [SERVER_CERT_STATUS]        = {TLS_HANDSHAKE, TLS_SERVER_CERT_STATUS, 'S', {s2n_server_status_send, s2n_server_status_recv}},
    [SERVER_KEY]                = {TLS_HANDSHAKE, TLS_SERVER_KEY, 'S', {s2n_server_key_send, s2n_server_key_recv}},
    [SERVER_CERT_REQ]           = {TLS_HANDSHAKE, TLS_CLIENT_CERT_REQ, 'S', {s2n_client_cert_req_send, s2n_client_cert_req_recv}},
    [SERVER_HELLO_DONE]         = {TLS_HANDSHAKE, TLS_SERVER_HELLO_DONE, 'S', {s2n_server_done_send, s2n_server_done_recv}},
    [CLIENT_CERT]               = {TLS_HANDSHAKE, TLS_CLIENT_CERT, 'C', {s2n_client_cert_recv, s2n_client_cert_send}},
    [CLIENT_KEY]                = {TLS_HANDSHAKE, TLS_CLIENT_KEY, 'C', {s2n_client_key_recv, s2n_client_key_send}},
    [CLIENT_CERT_VERIFY]        = {TLS_HANDSHAKE, TLS_CLIENT_CERT_VERIFY, 'C', {s2n_client_cert_verify_recv, s2n_client_cert_verify_send}},
    [CLIENT_CHANGE_CIPHER_SPEC] = {TLS_CHANGE_CIPHER_SPEC, 0, 'C', {s2n_client_ccs_recv, s2n_client_ccs_send}},
    [CLIENT_FINISHED]           = {TLS_HANDSHAKE, TLS_CLIENT_FINISHED, 'C', {s2n_client_finished_recv, s2n_client_finished_send}},
    [SERVER_CHANGE_CIPHER_SPEC] = {TLS_CHANGE_CIPHER_SPEC, 0, 'S', {s2n_server_ccs_send, s2n_server_ccs_recv}},
    [SERVER_FINISHED]           = {TLS_HANDSHAKE, TLS_SERVER_FINISHED, 'S', {s2n_server_finished_send, s2n_server_finished_recv}},
    [APPLICATION_DATA]          = {TLS_APPLICATION_DATA, 0, 'B', {NULL, NULL}}
};

/* We support different ordering of TLS Handshake messages, depending on what is being negotiated. There's also a dummy "INITIAL" handshake
 * that everything starts out as until we know better.
 */
static message_type_t handshakes[128][16] = {
    [INITIAL] = {
            CLIENT_HELLO,
            SERVER_HELLO
    },

    [NEGOTIATED] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | WITH_SESSION_TICKET ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            APPLICATION_DATA},

    [NEGOTIATED | FULL_HANDSHAKE ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_HELLO_DONE,
            CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | WITH_SESSION_TICKET ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_HELLO_DONE,
            CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_KEY, SERVER_HELLO_DONE,
            CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | WITH_SESSION_TICKET ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_KEY, SERVER_HELLO_DONE,
            CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | OCSP_STATUS ] ={
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_HELLO_DONE,
            CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | OCSP_STATUS | WITH_SESSION_TICKET ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_HELLO_DONE,
            CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | OCSP_STATUS ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_KEY, SERVER_HELLO_DONE,
            CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | OCSP_STATUS  | WITH_SESSION_TICKET ] ={
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_KEY, SERVER_HELLO_DONE,
            CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | CLIENT_AUTH] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_REQ, SERVER_HELLO_DONE,
            CLIENT_CERT, CLIENT_KEY, CLIENT_CERT_VERIFY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | CLIENT_AUTH | NO_CLIENT_CERT ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_REQ, SERVER_HELLO_DONE,
            CLIENT_CERT, CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | CLIENT_AUTH | WITH_SESSION_TICKET] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_REQ, SERVER_HELLO_DONE,
            CLIENT_CERT, CLIENT_KEY, CLIENT_CERT_VERIFY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | CLIENT_AUTH | NO_CLIENT_CERT | WITH_SESSION_TICKET ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_REQ, SERVER_HELLO_DONE,
            CLIENT_CERT, CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | CLIENT_AUTH] = {
           CLIENT_HELLO,
           SERVER_HELLO, SERVER_CERT, SERVER_KEY, SERVER_CERT_REQ, SERVER_HELLO_DONE,
           CLIENT_CERT, CLIENT_KEY, CLIENT_CERT_VERIFY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
           SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
           APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | CLIENT_AUTH | NO_CLIENT_CERT ] = {
           CLIENT_HELLO,
           SERVER_HELLO, SERVER_CERT, SERVER_KEY, SERVER_CERT_REQ, SERVER_HELLO_DONE,
           CLIENT_CERT, CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
           SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
           APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | CLIENT_AUTH | WITH_SESSION_TICKET] = {
           CLIENT_HELLO,
           SERVER_HELLO, SERVER_CERT, SERVER_KEY, SERVER_CERT_REQ, SERVER_HELLO_DONE,
           CLIENT_CERT, CLIENT_KEY, CLIENT_CERT_VERIFY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
           SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
           APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | CLIENT_AUTH | NO_CLIENT_CERT | WITH_SESSION_TICKET ] = {
           CLIENT_HELLO,
           SERVER_HELLO, SERVER_CERT, SERVER_KEY, SERVER_CERT_REQ, SERVER_HELLO_DONE,
           CLIENT_CERT, CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
           SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
           APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | OCSP_STATUS | CLIENT_AUTH] = {
           CLIENT_HELLO,
           SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_CERT_REQ, SERVER_HELLO_DONE,
           CLIENT_CERT, CLIENT_KEY, CLIENT_CERT_VERIFY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
           SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
           APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | OCSP_STATUS | CLIENT_AUTH | NO_CLIENT_CERT ] = {
           CLIENT_HELLO,
           SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_CERT_REQ, SERVER_HELLO_DONE,
           CLIENT_CERT, CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
           SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
           APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | OCSP_STATUS | CLIENT_AUTH | WITH_SESSION_TICKET] = {
           CLIENT_HELLO,
           SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_CERT_REQ, SERVER_HELLO_DONE,
           CLIENT_CERT, CLIENT_KEY, CLIENT_CERT_VERIFY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
           SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
           APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | OCSP_STATUS | CLIENT_AUTH | NO_CLIENT_CERT | WITH_SESSION_TICKET ] = {
           CLIENT_HELLO,
           SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_CERT_REQ, SERVER_HELLO_DONE,
           CLIENT_CERT, CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
           SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
           APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | OCSP_STATUS | CLIENT_AUTH ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_KEY, SERVER_CERT_REQ, SERVER_HELLO_DONE,
            CLIENT_CERT, CLIENT_KEY, CLIENT_CERT_VERIFY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | OCSP_STATUS | CLIENT_AUTH | NO_CLIENT_CERT ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_KEY, SERVER_CERT_REQ, SERVER_HELLO_DONE,
            CLIENT_CERT, CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | OCSP_STATUS | CLIENT_AUTH | WITH_SESSION_TICKET ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_KEY, SERVER_CERT_REQ, SERVER_HELLO_DONE,
            CLIENT_CERT, CLIENT_KEY, CLIENT_CERT_VERIFY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },

    [NEGOTIATED | FULL_HANDSHAKE | PERFECT_FORWARD_SECRECY | OCSP_STATUS | CLIENT_AUTH | NO_CLIENT_CERT | WITH_SESSION_TICKET ] = {
            CLIENT_HELLO,
            SERVER_HELLO, SERVER_CERT, SERVER_CERT_STATUS, SERVER_KEY, SERVER_CERT_REQ, SERVER_HELLO_DONE,
            CLIENT_CERT, CLIENT_KEY, CLIENT_CHANGE_CIPHER_SPEC, CLIENT_FINISHED,
            SERVER_NEW_SESSION_TICKET, SERVER_CHANGE_CIPHER_SPEC, SERVER_FINISHED,
            APPLICATION_DATA
    },
};

static char handshake_type_str[128][MAX_HANDSHAKE_TYPE_LEN] = {0};

static const char* handshake_type_names[] = {
    "NEGOTIATED|",
    "FULL_HANDSHAKE|",
    "PERFECT_FORWARD_SECRECY|",
    "OCSP_STATUS|",
    "CLIENT_AUTH|",
    "WITH_SESSION_TICKET|",
    "NO_CLIENT_CERT|"
};

#define ACTIVE_MESSAGE( conn ) handshakes[ (conn)->handshake.handshake_type ][ (conn)->handshake.message_number ]
#define PREVIOUS_MESSAGE( conn ) handshakes[ (conn)->handshake.handshake_type ][ (conn)->handshake.message_number - 1 ]

#define ACTIVE_STATE( conn ) state_machine[ ACTIVE_MESSAGE( (conn) ) ]
#define PREVIOUS_STATE( conn ) state_machine[ PREVIOUS_MESSAGE( (conn) ) ]

#define EXPECTED_MESSAGE_TYPE( conn ) ACTIVE_STATE( conn ).message_type

/* Used in our test cases */
message_type_t s2n_conn_get_current_message_type(struct s2n_connection *conn)
{
    return ACTIVE_MESSAGE(conn);
}

static int s2n_advance_message(struct s2n_connection *conn)
{
    char this = 'S';
    if (conn->mode == S2N_CLIENT) {
        this = 'C';
    }

    /* Actually advance the message number */
    conn->handshake.message_number++;

    /* Set TCP_QUICKACK to avoid artificial dealy during the handshake */
    GUARD(s2n_socket_quickack(conn));

    /* If optimized io hasn't been enabled or if the caller started out with a corked socket,
     * we don't mess with it
     */
    if (!conn->corked_io || s2n_socket_was_corked(conn)) {
        return 0;
    }

    /* Are we changing I/O directions */
    if (ACTIVE_STATE(conn).writer == PREVIOUS_STATE(conn).writer) {
        return 0;
    }

    /* We're the new writer */
    if (ACTIVE_STATE(conn).writer == this) {
        if (s2n_connection_is_managed_corked(conn)) {
            /* Set TCP_CORK/NOPUSH */
            GUARD(s2n_socket_write_cork(conn));
        }

        return 0;
    }

    /* We're the new reader, or we reached the "B" writer stage indicating that
       we're at the application data stage  - uncork the data */
    if (s2n_connection_is_managed_corked(conn)) {
        GUARD(s2n_socket_write_uncork(conn));
    }

    return 0;
}

int s2n_generate_new_client_session_id(struct s2n_connection *conn)
{
    if (conn->mode == S2N_SERVER) {
        struct s2n_blob session_id = { .data = conn->session_id, .size = S2N_TLS_SESSION_ID_MAX_LEN };

        /* Generate a new session id */
        GUARD(s2n_get_public_random_data(&session_id));
        conn->session_id_len = S2N_TLS_SESSION_ID_MAX_LEN;
    }
    return 0;
}

int s2n_conn_set_handshake_type(struct s2n_connection *conn)
{
    /* A handshake type has been negotiated */
    conn->handshake.handshake_type = NEGOTIATED;

    if (conn->config->use_tickets) {
        if (conn->session_ticket_status == S2N_DECRYPT_TICKET) {
            if (!s2n_decrypt_session_ticket(conn)) {
                return 0;
            }

            if (s2n_config_is_encrypt_decrypt_key_available(conn->config) == 1) {
                conn->session_ticket_status = S2N_NEW_TICKET;
                conn->handshake.handshake_type |= WITH_SESSION_TICKET;
            }

            /* If a session ticket is presented by the client, then skip lookup in Session ID server cache */
            goto skip_cache_lookup;
        }

        if (conn->session_ticket_status == S2N_NEW_TICKET) {
            conn->handshake.handshake_type |= WITH_SESSION_TICKET;
        }
    }

    /* If a TLS session is resumed, the Server should respond in its ServerHello with the same SessionId the
     * Client sent in the ClientHello. */
    if (s2n_allowed_to_cache_connection(conn) && !s2n_resume_from_cache(conn)) {
        return 0;
    }

skip_cache_lookup:
    if (conn->mode == S2N_CLIENT && conn->client_session_resumed == 1) {
        return 0;
    }

    /* If we're doing full handshake, generate a new session id. */
    GUARD(s2n_generate_new_client_session_id(conn));

    /* If we get this far, it's a full handshake */
    conn->handshake.handshake_type |= FULL_HANDSHAKE;

    s2n_cert_auth_type client_cert_auth_type;
    GUARD(s2n_connection_get_client_auth_type(conn, &client_cert_auth_type));

    if (conn->mode == S2N_CLIENT && client_cert_auth_type == S2N_CERT_AUTH_REQUIRED) {
        /* If we're a client, and Client Auth is REQUIRED, then the Client must expect the CLIENT_CERT_REQ Message */
        conn->handshake.handshake_type |= CLIENT_AUTH;
    } else if (conn->mode == S2N_SERVER && client_cert_auth_type != S2N_CERT_AUTH_NONE) {
        /* If we're a server, and Client Auth is REQUIRED or OPTIONAL, then the server must send the CLIENT_CERT_REQ Message*/
        conn->handshake.handshake_type |= CLIENT_AUTH;
    }

    if (s2n_kex_is_ephemeral(conn->secure.cipher_suite->key_exchange_alg)) {
        conn->handshake.handshake_type |= PERFECT_FORWARD_SECRECY;
    }

    if (s2n_server_can_send_ocsp(conn) || s2n_server_sent_ocsp(conn)) {
        conn->handshake.handshake_type |= OCSP_STATUS;
    }

    return 0;
}

int s2n_conn_set_handshake_no_client_cert(struct s2n_connection *conn) {
    s2n_cert_auth_type client_cert_auth_type;
    GUARD(s2n_connection_get_client_auth_type(conn, &client_cert_auth_type));
    S2N_ERROR_IF(client_cert_auth_type != S2N_CERT_AUTH_OPTIONAL, S2N_ERR_BAD_MESSAGE);

    conn->handshake.handshake_type |= NO_CLIENT_CERT;
    return 0;
}

const char *s2n_connection_get_handshake_type_name(struct s2n_connection *conn)
{
    notnull_check_ptr(conn);

    int handshake_type = conn->handshake.handshake_type;

    if (handshake_type == INITIAL) {
        return "INITIAL";
    }

    if (handshake_type_str[handshake_type][0] != '\0') {
        return handshake_type_str[handshake_type];
    }

    /* Compute handshake_type_str[handshake_type] */
    char *p = handshake_type_str[handshake_type];
    char *end = p + sizeof(handshake_type_str[0]);

    for (int i = 0; i < sizeof(handshake_type_names) / sizeof(handshake_type_names[0]); ++i) {
        if (handshake_type & (1 << i)) {
            p = s2n_strcpy(p, end, handshake_type_names[i]);
        }
    }

    if (p != handshake_type_str[handshake_type] && '|' == *(p - 1)) {
        *(p - 1) = '\0';
    }

    return handshake_type_str[handshake_type];
}

static int s2n_conn_update_handshake_hashes(struct s2n_connection *conn, struct s2n_blob *data)
{
    if (s2n_handshake_is_hash_required(&conn->handshake, S2N_HASH_MD5)) {
        /* The handshake MD5 hash state will fail the s2n_hash_is_available() check
         * since MD5 is not permitted in FIPS mode. This check will not be used as
         * the handshake MD5 hash state is specifically used by the TLS 1.0 and TLS 1.1
         * PRF, which is required to comply with the TLS 1.0 and 1.1 RFCs and is approved
         * as per NIST Special Publication 800-52 Revision 1.
         */
        GUARD(s2n_hash_update(&conn->handshake.md5, data->data, data->size));
    }

    if (s2n_handshake_is_hash_required(&conn->handshake, S2N_HASH_SHA1)) {
        GUARD(s2n_hash_update(&conn->handshake.sha1, data->data, data->size));
    }

    const uint8_t md5_sha1_required = (s2n_handshake_is_hash_required(&conn->handshake, S2N_HASH_MD5) &&
                                       s2n_handshake_is_hash_required(&conn->handshake, S2N_HASH_SHA1));

    if (md5_sha1_required) {
        /* The MD5_SHA1 hash can still be used for TLS 1.0 and 1.1 in FIPS mode for
         * the handshake hashes. This will only be used for the signature check in the
         * CertificateVerify message and the PRF. NIST SP 800-52r1 approves use
         * of MD5_SHA1 for these use cases (see footnotes 15 and 20, and section
         * 3.3.2) */
        GUARD(s2n_hash_update(&conn->handshake.md5_sha1, data->data, data->size));
    }

    if (s2n_handshake_is_hash_required(&conn->handshake, S2N_HASH_SHA224)) {
        GUARD(s2n_hash_update(&conn->handshake.sha224, data->data, data->size));
    }

    if (s2n_handshake_is_hash_required(&conn->handshake, S2N_HASH_SHA256)) {
        GUARD(s2n_hash_update(&conn->handshake.sha256, data->data, data->size));
    }

    if (s2n_handshake_is_hash_required(&conn->handshake, S2N_HASH_SHA384)) {
        GUARD(s2n_hash_update(&conn->handshake.sha384, data->data, data->size));
    }

    if (s2n_handshake_is_hash_required(&conn->handshake, S2N_HASH_SHA512)) {
        GUARD(s2n_hash_update(&conn->handshake.sha512, data->data, data->size));
    }

    return 0;
}

/* Writing is relatively straight forward, simply write each message out as a record,
 * we may fragment a message across multiple records, but we never coalesce multiple
 * messages into single records.
 * Precondition: secure outbound I/O has already been flushed
 */
static int handshake_write_io(struct s2n_connection *conn)
{
    uint8_t record_type = ACTIVE_STATE(conn).record_type;
    s2n_blocked_status blocked = S2N_NOT_BLOCKED;

    /* Populate handshake.io with header/payload for the current state, once.
     * Check wiped instead of s2n_stuffer_data_available to differentiate between the initial call
     * to handshake_write_io and a repeated call after an EWOULDBLOCK.
     */
    if (conn->handshake.io.wiped == 1) {
        if (record_type == TLS_HANDSHAKE) {
            GUARD(s2n_handshake_write_header(conn, ACTIVE_STATE(conn).message_type));
        }
        GUARD(ACTIVE_STATE(conn).handler[conn->mode] (conn));
        if (record_type == TLS_HANDSHAKE) {
            GUARD(s2n_handshake_finish_header(conn));
        }
    }

    /* Write the handshake data to records in fragment sized chunks */
    struct s2n_blob out = {0};
    while (s2n_stuffer_data_available(&conn->handshake.io) > 0) {
        int max_payload_size;
        GUARD((max_payload_size = s2n_record_max_write_payload_size(conn)));
        out.size = MIN(s2n_stuffer_data_available(&conn->handshake.io), max_payload_size);

        out.data = s2n_stuffer_raw_read(&conn->handshake.io, out.size);
        notnull_check(out.data);

        /* Make the actual record */
        GUARD(s2n_record_write(conn, record_type, &out));

        /* MD5 and SHA sum the handshake data too */
        if (record_type == TLS_HANDSHAKE) {
            GUARD(s2n_conn_update_handshake_hashes(conn, &out));
        }

        /* Actually send the record. We could block here. Assume the caller will call flush before coming back. */
        GUARD(s2n_flush(conn, &blocked));
    }

    /* We're done sending the last record, reset everything */
    GUARD(s2n_stuffer_wipe(&conn->out));
    GUARD(s2n_stuffer_wipe(&conn->handshake.io));

    /* Advance the state machine */
    GUARD(s2n_advance_message(conn));

    return 0;
}

/*
 * Returns:
 *  1  - more data is needed to complete the handshake message.
 *  0  - we read the whole handshake message.
 * -1  - error processing the handshake message.
 */
static int read_full_handshake_message(struct s2n_connection *conn, uint8_t * message_type)
{
    uint32_t current_handshake_data = s2n_stuffer_data_available(&conn->handshake.io);
    if (current_handshake_data < TLS_HANDSHAKE_HEADER_LENGTH) {
        /* The message may be so badly fragmented that we don't even read the full header, take
         * what we can and then continue to the next record read iteration.
         */
        if (s2n_stuffer_data_available(&conn->in) < (TLS_HANDSHAKE_HEADER_LENGTH - current_handshake_data)) {
            GUARD(s2n_stuffer_copy(&conn->in, &conn->handshake.io, s2n_stuffer_data_available(&conn->in)));
            return 1;
        }

        /* Get the remainder of the header */
        GUARD(s2n_stuffer_copy(&conn->in, &conn->handshake.io, (TLS_HANDSHAKE_HEADER_LENGTH - current_handshake_data)));
    }

    uint32_t handshake_message_length;
    GUARD(s2n_handshake_parse_header(conn, message_type, &handshake_message_length));

    S2N_ERROR_IF(handshake_message_length > S2N_MAXIMUM_HANDSHAKE_MESSAGE_LENGTH, S2N_ERR_BAD_MESSAGE);

    uint32_t bytes_to_take = handshake_message_length - s2n_stuffer_data_available(&conn->handshake.io);
    bytes_to_take = MIN(bytes_to_take, s2n_stuffer_data_available(&conn->in));

    /* If the record is handshake data, add it to the handshake buffer */
    GUARD(s2n_stuffer_copy(&conn->in, &conn->handshake.io, bytes_to_take));

    /* If we have the whole handshake message, then success */
    if (s2n_stuffer_data_available(&conn->handshake.io) == handshake_message_length) {
        return 0;
    }

    /* We don't have the whole message, so we'll need to go again */
    GUARD(s2n_stuffer_reread(&conn->handshake.io));

    return 1;
}

static int s2n_handshake_conn_update_hashes(struct s2n_connection *conn)
{
    uint8_t message_type;
    uint32_t handshake_message_length;

    GUARD(s2n_stuffer_reread(&conn->handshake.io));
    GUARD(s2n_handshake_parse_header(conn, &message_type, &handshake_message_length));

    struct s2n_blob handshake_record = {0};
    handshake_record.data = conn->handshake.io.blob.data;
    handshake_record.size = TLS_HANDSHAKE_HEADER_LENGTH + handshake_message_length;
    notnull_check(handshake_record.data);

    /* MD5 and SHA sum the handshake data too */
    GUARD(s2n_conn_update_handshake_hashes(conn, &handshake_record));

    return 0;
}

static int s2n_handshake_handle_sslv2(struct s2n_connection *conn)
{
    S2N_ERROR_IF(ACTIVE_MESSAGE(conn) != CLIENT_HELLO, S2N_ERR_BAD_MESSAGE);

    /* Add the message to our handshake hashes */
    struct s2n_blob hashed = {.data = conn->header_in.blob.data + 2,.size = 3 };
    GUARD(s2n_conn_update_handshake_hashes(conn, &hashed));

    hashed.data = conn->in.blob.data;
    hashed.size = s2n_stuffer_data_available(&conn->in);
    GUARD(s2n_conn_update_handshake_hashes(conn, &hashed));

    /* Handle an SSLv2 client hello */
    GUARD(s2n_stuffer_copy(&conn->in, &conn->handshake.io, s2n_stuffer_data_available(&conn->in)));
    GUARD(s2n_sslv2_client_hello_recv(conn));
    GUARD(s2n_stuffer_wipe(&conn->handshake.io));

    /* We're done with the record, wipe it */
    GUARD(s2n_stuffer_wipe(&conn->header_in));
    GUARD(s2n_stuffer_wipe(&conn->in));
    conn->in_status = ENCRYPTED;

    /* Advance the state machine */
    GUARD(s2n_advance_message(conn));

    return 0;
}

/* Reading is a little more complicated than writing as the TLS RFCs allow content
 * types to be interleaved at the record layer. We may get an alert message
 * during the handshake phase, or messages of types that we don't support (e.g.
 * HEARTBEAT messages), or during renegotiations we may even get application
 * data messages that need to be handled by the application. The latter is punted
 * for now (s2n does not support renegotiations).
 */
static int handshake_read_io(struct s2n_connection *conn)
{
    uint8_t record_type;
    int isSSLv2;

    GUARD(s2n_read_full_record(conn, &record_type, &isSSLv2));

    if (isSSLv2) {
        GUARD(s2n_handshake_handle_sslv2(conn));
    }

    /* Now we have a record, but it could be a partial fragment of a message, or it might
     * contain several messages.
     */
    S2N_ERROR_IF(record_type == TLS_APPLICATION_DATA, S2N_ERR_BAD_MESSAGE);
    if(record_type == TLS_CHANGE_CIPHER_SPEC) {
        S2N_ERROR_IF(s2n_stuffer_data_available(&conn->in) != 1, S2N_ERR_BAD_MESSAGE);

        GUARD(s2n_stuffer_copy(&conn->in, &conn->handshake.io, s2n_stuffer_data_available(&conn->in)));
        GUARD(ACTIVE_STATE(conn).handler[conn->mode] (conn));
        GUARD(s2n_stuffer_wipe(&conn->handshake.io));

        /* We're done with the record, wipe it */
        GUARD(s2n_stuffer_wipe(&conn->header_in));
        GUARD(s2n_stuffer_wipe(&conn->in));
        conn->in_status = ENCRYPTED;

        /* Advance the state machine */
        GUARD(s2n_advance_message(conn));

        return 0;
    } else if (record_type != TLS_HANDSHAKE) {
        if (record_type == TLS_ALERT) {
            GUARD(s2n_process_alert_fragment(conn));
        }

        /* Ignore record types that we don't support */

        /* We're done with the record, wipe it */
        GUARD(s2n_stuffer_wipe(&conn->header_in));
        GUARD(s2n_stuffer_wipe(&conn->in));
        conn->in_status = ENCRYPTED;
        return 0;
    }

    /* Record is a handshake message */
    while (s2n_stuffer_data_available(&conn->in)) {
        int r;
        uint8_t actual_handshake_message_type;
        GUARD((r = read_full_handshake_message(conn, &actual_handshake_message_type)));

        /* Do we need more data? */
        if (r == 1) {
            /* Break out of this inner loop, but since we're not changing the state, the
             * outer loop in s2n_handshake_io() will read another record.
             */
            GUARD(s2n_stuffer_wipe(&conn->header_in));
            GUARD(s2n_stuffer_wipe(&conn->in));
            conn->in_status = ENCRYPTED;
            return 0;
        }

        s2n_cert_auth_type client_cert_auth_type;
        GUARD(s2n_connection_get_client_auth_type(conn, &client_cert_auth_type));

        /* If we're a Client, and received a ClientCertRequest message instead of a ServerHelloDone, and ClientAuth
         * is set to optional, then switch the State Machine that we're using to expect the ClientCertRequest. */
        if (conn->mode == S2N_CLIENT
                && client_cert_auth_type == S2N_CERT_AUTH_OPTIONAL
                && actual_handshake_message_type == TLS_CLIENT_CERT_REQ
                && EXPECTED_MESSAGE_TYPE(conn) == TLS_SERVER_HELLO_DONE) {
            conn->handshake.handshake_type |= CLIENT_AUTH;
        }

        /* According to rfc6066 section 8, server may choose not to send "CertificateStatus" message even if it has
         * sent "status_request" extension in the ServerHello message. */
        if (conn->mode == S2N_CLIENT
                && EXPECTED_MESSAGE_TYPE(conn) == TLS_SERVER_CERT_STATUS
                && actual_handshake_message_type != TLS_SERVER_CERT_STATUS) {
            conn->handshake.handshake_type &= ~OCSP_STATUS;
        }

        S2N_ERROR_IF(actual_handshake_message_type != EXPECTED_MESSAGE_TYPE(conn), S2N_ERR_BAD_MESSAGE);

        /* Call the relevant handler */
        r = ACTIVE_STATE(conn).handler[conn->mode] (conn);

        /* Don't update handshake hashes until after the handler has executed since some handlers need to read the
         * hash values before they are updated. */
        GUARD(s2n_handshake_conn_update_hashes(conn));

        GUARD(s2n_stuffer_wipe(&conn->handshake.io));

        if (r < 0) {
            GUARD(s2n_connection_kill(conn));

            return r;
        }

        /* Advance the state machine */
        GUARD(s2n_advance_message(conn));
    }

    /* We're done with the record, wipe it */
    GUARD(s2n_stuffer_wipe(&conn->header_in));
    GUARD(s2n_stuffer_wipe(&conn->in));
    conn->in_status = ENCRYPTED;

    return 0;
}

int s2n_negotiate(struct s2n_connection *conn, s2n_blocked_status * blocked)
{
    char this = 'S';
    if (conn->mode == S2N_CLIENT) {
        this = 'C';
    }

    while (ACTIVE_STATE(conn).writer != 'B') {
        /* Flush any pending I/O or alert messages */
        GUARD(s2n_flush(conn, blocked));

        if (ACTIVE_STATE(conn).writer == this) {
            *blocked = S2N_BLOCKED_ON_WRITE;
            if (handshake_write_io(conn) < 0 && s2n_errno != S2N_ERR_BLOCKED) {
                /* Non-retryable write error. The peer might have sent an alert. Try and read it. */
                const int write_errno = errno;
                const int write_s2n_errno = s2n_errno;
                const char *write_s2n_debug_str = s2n_debug_str;

                if (handshake_read_io(conn) < 0 && s2n_errno == S2N_ERR_ALERT) {
                    /* handshake_read_io has set s2n_errno */
                    return -1;
                } else {
                    /* Let the write error take precedence if we didn't read an alert. */
                    errno = write_errno;
                    s2n_errno = write_s2n_errno;
                    s2n_debug_str = write_s2n_debug_str;
                    return -1;
                }
            }
        } else {
            *blocked = S2N_BLOCKED_ON_READ;
            if (handshake_read_io(conn) < 0) {
                if (s2n_errno != S2N_ERR_BLOCKED && s2n_allowed_to_cache_connection(conn) && conn->session_id_len) {
                    conn->config->cache_delete(conn, conn->config->cache_delete_data, conn->session_id, conn->session_id_len);
                }

                return -1;
            }
        }

        /* If the handshake has just ended, free up memory */
        if (ACTIVE_STATE(conn).writer == 'B') {
            GUARD(s2n_stuffer_resize(&conn->handshake.io, 0));
        }
    }

    *blocked = S2N_NOT_BLOCKED;

    return 0;
}

redpajama_set_name: RedPajamaGithub


Adfactors PR made it seven-in-a-row, when it won the Agency of the Year title at the India PR & Corporate Communications Awards (IPRCCA), hosted by exchange4media, this evening.
Separately, the consultancy won eight trophies – a mix of gold, silver and bronze – for campaign excellence on behalf of clients including ICICI Bank, ICICI Lombard, Pidilite Industries, Kailash Satyarthi Foundation, Aviva Life Insurance, Premier Futsal, and Cochlear India.
The jurists, notably, conferred the Lifetime Achievement Award for Public Relations to Adfactors PR chairman Rajesh Chaturvedi for his contributions to the industry and guiding Adfactors PR to become India's largest PR firm. Separately, Hemant Batra, senior vice-president with the Financial Services practice, was chosen as the PR Person of the Year for his commitment to the profession and the firm, his work, the awards won, and the business impact of his work.


Since we have the whole Internet everywhere with our mobile devices, security has become a very important topic. We store all kinds of personal files in our smartphones and tablets and even more sensitive information such as bank accounts, address books and other important accounts. The password has protected each one of these aspects, a lock screen code could help protect anyone from accessing most of our phone's features, but then there are some additional passwords for the apps that need more security. Still, if for whatever reason those passwords fall into the wrong hands, anyone could access our accounts.
Gerhard Eschelbeck, Head of Security & Privacy Engineering at Google has addressed this matter at Google's "The Future of Security" Roundtable. He has been working in security research for the past twenty years trying to solve that only the right people get access to the right information. This might seem like a simple problem to solve, but with more advanced technologies accessible to everyone, it becomes more complicated. There are many bad actors who try to access information with advanced phishing techniques and there are so many of these cases every day that it would be impossible to address them individually. Users need to be educated so their devices become less prone to an attack, they might create stronger passwords or even use a password manager to make it easier, still there are more advanced techniques to ensure security.
Two-step verification has been proven to be quite effective, as if someone figures out your password, you'll be notified in another way so they can't access the information unless you accept that notification. Security Keys from the FIDO Alliance provide an even better level of protection as the information is encrypted and only the one holding the physical Security Key will be able to access the information. While these technologies improve security, there might be ways where people don't have to input passwords or carry physical tokens to ensure online security. Currently, we have some Automatic Unlocking with some Bluetooth connected devices, but it could be extended to additional devices once everything gets connected. There is also a research on how devices could recognize your voice or the way you walk in order to authenticate your identity. This way, devices could share security knowledge in order to handle future challenges.


If your dad or mum is a firefighter, there's oodles of good picture books about their exciting job (firefighters are high on the list of thrilling topics for pre-schoolers). However, have you noticed that there's not really many books about the less exciting jobs? Perhaps being an administrative assistant, a plumber, a public servant or an engineer is as exciting as a firefighter, it just depends on the way you present it.
Author Andrew King and illustrator Benjamin Johnston have created a new kind of hero – an engineering bear – in Engibear's Dream.
The story is about Engibear, who wants to build a robot (also known as a 'bearbot') to help him with his work. Early versions fail, often spectacularly, but Engibear keeps trying. He tweaks his designs, makes some changes and each time his bearbot improves until finally he perfects it at Bearbot Type Ten.
Engibear built it quickly, he wanted results.
And got quite a surprise when he heard the KABOOM!
The joy of this book is in the illustrations. Johnston has brought Engibear and all the Bearbots to life. Terrific cartoon-like colour drawings, each bursting with movement and action, are overlaid on grid paper. It's a clever technique that allows children to differentiate between the plan for each Bearbot and the built version. The highlight is the last few pages where the author has included double-paged spreads of the Bearbot Types, each with their particular specifications and improvements noted. I suspect that there are many kids who will pore over these last few pages, 'reading' them again and again.
Special mention must also be made of the end-papers. I particularly like a book that includes illustrated end-papers and Engibear's Dream has the best I've come across in a long time. The inside of the front and back covers show a three-dimensional map of Munnagong, Engibear's home town. It has all the detail you would expect in an engineering book and there's lots of fun to be had locating places of interest in the town (from the Munnagong Opera House to the International Space Centre).
Engibear's Dream is not the first book to deliver a 'don't give up' message but it is the first to do it in a unique way, geared to inquiring little minds.
The book is suitable for children aged three years and over. Find Engibear's Dream online at The Engineer's Bookshop for $24.95 plus $3.30 postage.


text:
How Can She Slap?
This popular catchphrase "How can she slap?!" came from a reality television show incident. Bindass Dadagiri is an Indian reality TV show that has claims of being the meanest television show on Indian television. This show premiered on June 9th, 2008, following the story of four sweet students revisiting their college years, discussing being bullied, surviving three Dadas and competing against each other for 50,000 in cash. These four students were put to the test, ultimately competing in this contest as individuals would on Fear Factor.
This quote is from the first season of the show when one of the competitors named Esha told another contest to "go fuck off." This contest responded with "You go," angering Esha and resulting in a slap to his face. He instantly slapped her back, and immediately following the hit, gets beaten by the the shows crew from offstage. It is then when he yells the phrase "How can she slap?!"
Increased Popularity:
In may of 2008, TMZ hear about this incident and brought it to the public's attention. The clip was then posted on YouTube but was taken down due to copyright restrictions. Following the tiny blow up of this clip, this phrase was used in a few remix videos reaching around 200,000 to 500,00 views, then shortly died out.
Dr. Phil M&M
I Fear No Man
Ralph In Danger


In the spirit of giving back to the community in which it works, NAAG donated school supplies to the Francis-Stevens Education Campus as part of a new community outreach program. Francis-Stevens is a local elementary school located on 24th and N Street, only a few blocks away from the NAAG office. The supplies included art utensils such as paint rollers, sculpting clay, and markers as well as clothing, writing materials, handy wipes, and bookends.
Principal Maurice Kennard said, "Giving everyday items, such as Clorox wipes and bookends frees up money in the school's budget for extra activities and materials." NAAG Executive Director Jim McPherson helped deliver the items along with NAAG's Charities Committee Co-Chairs Ellen Taverna and Erjona Fatusha, and NAAG's Andrew Giessel and William Malloy.
Keziah Kelsey, the school's art teacher said, "The donated supplies have made a tremendous difference in our classroom. My students can create without restrictions or limits. Their creativity is unbound." In addition to the supplies, NAAG donated over $500 to the school for use by the students.
NAAG staff raised the funds after holding an office-wide raffle of a donated TV. NAAG's Judy McKee and its finance department helped organize the raffle and collect donations. The raffle was conducted with the intention of giving the winnings to a local elementary school. NAAG is looking forward to partnering with Francis-Stevens in spring 2009 for Law Day programs, test monitoring, and tutoring projects with seventh and eighth grade students.
This year, NAAG's Charities Committee will also coordinate NAAG's participation in Virginia Attorney General Bob McDonnell's 3rd "Legal Food Frenzy." The Frenzy is a philanthropic competition among Virginia's legal community to donate food for local food banks. NAAG hopes to top the 745 pounds of food raised for last year's event.


Jesus commanded us to love one another as he has loved us. Yet, he loved us enough to suffer a horrific death for our salvation. How can we possibility love like that; especially with people we don't even like?
Fr. John Riccardo, pastor of Our Lady of Good Counsel in Plymouth, Michigan, whose Ave Maria radio program Christ is the Answer focuses on Catholic teachings, addressed this quandary in his May 10 homily.
The Shroud has only been on display 5 times in the last 100 years. It is believed by many experts to be the burial cloth of Jesus. Although carbon testing had once determined it was a fraud, further studies have called those results into question. The cloth depicts a man who has gone through everything Jesus went through—scourging, beatings, crowning with thorns, and nails through wrist and feet. No one has been able to explain how the 3-dimensional image was imprinted as if from a burst of radiation, and no one has been able to replicate it.
He then heard God rebuke him: "You see my face every day, all day long. Don't you recognize me?"
The title of the exhibition of the Shroud is, "The Greatest Love." Father John explained that when standing in front of the Shroud, "…you see the face quite literally of the image of love; a man who has laid down his life in horrific fashion for you and for me." He pointed out that love moves and acts or else it is just an illusion.
The challenge, according to Fr. John, is to show love even for those we don't like. Otherwise, we fail to follow God's command to love one another as he has loved us.
Fr. John said that Jesus wants to give us a new heart in order to love the way he does and he does this through Holy Communion. "Our heart must be crushed and replaced with his heart," he said. "It is through receiving the precious blood of Jesus, it's as if God wants to give us a transfusion. He is putting his blood into our heart so it will look like his, because that is what he expects of us." He added that until that happens, we will never have real joy because real joy come from being overwhelmed by the love that God has for us, then in turn overwhelming others with the love that we have received.
Suggestions for those struggling to love certain people.
2) Place those whom we struggle to love on the altar and offer the Mass for them. Fr. John explained that there is no prayer greater than the Mass because it is the representation--sacramentally speaking-- of the gift of self, which Jesus made upon the cross. "If we will join our prayers to his, especially for those we find hard to love, then we look a lot like Jesus," he said.
Several years ago, I got to know Fr. John Riccardo when he shared his call to the priesthood story in the AG book. With his permission, I will occasional access the podcasts of his Sunday homilies to share as articles.
For more inspiration, check out Big Hearted: Inspiring Stories From Everyday Families. Your children will laugh while learning spiritual lessons with Dear God, You Can't Be Serious.