text:
(New material based on NPR reporting added to the top of this post at 12:30 p.m. ET.)
Republican presidential candidate Herman Cain is reassessing his campaign but still plans to move ahead at this time, his Iowa campaign director tells The Associated Press and NPR.
That Iowa campaign aide, Steve Grubbs, reports Cain said to senior staff today during a conference call that new allegations from a woman who claims to have had a long affair with him have taken an emotional toll on his family. Cain also said the allegations — which he denies — have damaged his fundraising, Grubbs says.
But, Grubbs added during a phone conversation with NPR's Tamara Keith, "as far as I heard, we're moving ahead" with the campaign — even though Grubbs said Cain also spoke of "reassessing" the campaign over the next few days.
Earlier, National Review's The Corner blog cast a slightly different take on the news. It wrote that "in a conference call this morning, Herman Cain told his senior staff that he is 'reassessing' whether to remain in the race. He told them he will make his final decision 'over the next several days.' "
Cain's campaign, as we've reported, had earlier been rocked by allegations that he sexually harassed women while he was at the helm of the National Restaurant Association. He denies those allegations as well.
It's All Politics follows the campaign news.
Update at 12:17 p.m. ET. More From The AP — 'Some Uncertainty' From Cain:
"One participant on the call, speaking on the condition of anonymity because of the private nature of the conversation, said that as part of that assessment, Cain's campaign is examining the impact of the newest allegations," the AP now adds. "This person described the tone as positive but also said there was some uncertainty coming from Cain."
And Politico reports that it's been told Cain has also been calling individual supporters "to ask for their advice on how to proceed in the presidential race."


text:
Christina Applegate's Blog: My Tips for a Working Mother
Please welcome Christina Applegate for a four-part blog.
The actress, who stars as Reagan on NBC's hit comedy Up All Night, is also mom to daughter Sadie Grace, 21 months, with fiancé Martyn LeNoble.
Applegate, 40, is the creative partner for FabKids.com, a monthly outfit club for stylish girls sizes 2-8.
She can also be found @1capplegate on Twitter.
In her first blog post for PEOPLE, Applegate shares some of her most tried-and-true tips to making it all happen as a working mom.
Working on FabKids — Courtesy Christina Applegate
As most mothers know and first-time mothers quickly learn, having a baby is something you can never fully prepare for. Of course, people will tell you how much your life will change, but understanding the full impact of having a little one come into your life is something you just can't fully comprehend until it actually happens!
Before my daughter Sadie was born, I was already a busy person. Between my acting career, personal life and the work I do for my breast cancer charity, Right Action for Women, I was already performing something of a juggling act. And now that Sadie is in my life, I am busier — and happier than ever before!
This year, I was thrilled to join FabKids.com, a monthly outfit club that empowers girls to express their own personal style in a way that builds confidence and lets them shine. I love that we help take the guesswork out of keeping your kids in fun, ready-to-play clothes — great for all of us working mothers!
I am all about finding the best tips and tricks to achieving balance and every mother has her own strategy to handling the juggling act of work and life. Here are some of my personal favorite tricks that I have learned along the way:
Find something you love to do with your daughter
Finding something you can bond with your daughter over is completely priceless. You learn so much about her when you spend quality time together and the act of doing something together that you both enjoy brings you closer than ever. It's also a great opportunity to create a life lesson.
Right now, Sadie and I are building an urban garden, filled with vegetables. I love this idea because it feeds Sadie's interest while teaching her healthy eating habits and gives her an introduction to sustainable living. Would you believe it? She loves kale!
Build a support system
It can be easy to forget that you are not alone when you have so much on your plate. Building your own support system gives you a shoulder to lean on when it comes to all the things that come with raising a child. It's great to surround yourself with like-minded people — or people you trust to be involved in your every day life.
In my case, I'm incredibly lucky because in addition to my family and close friends, so many of us on the set of Up All Night have kids around the same age. We even have a playroom on set!
On set at Up All Night – Courtesy Christina Applegate
The ongoing juggling act and the power of distraction
The main point of a successful juggling act is to not drop the ball, no matter how many balls there are up in the air! When it comes to Sadie, I have found that distracting her with something engaging is a much more efficient way to get her to switch gears, as opposed to just telling her "no" or "stop." She'd much rather discover something new than be told to stop doing something. To be honest, I would too!
I love being a busy mom. Every day I feel enriched by everything that's going on in my life. And it goes without saying that Sadie is my favorite part.
— Christina Applegate

subset: commoncrawl


text:
Shocking Police Action in Fort Worth Generates Controversy
NBC 5 / nbcdfw.com
Even George Orwell would find this one hard to believe.
The National Highway Transportation Safety Administration is engaging in what they've called a 'voluntary program', in which drivers are being asked at roadblocks to pull over and offer breath, blood and saliva samples-for a price.
According to a story by NBC 5 in Fort Worth, the Pacific Institute for Research and Evaluation, working for the NHTSA as a contractor, set up a check-point on Beach Street in North Fort Worth. Off-duty officers from the Fort Worth Police Department reportedly took part in the 'voluntary survey'.
One individual interviewed by NBC 5 said she gestured that she just wanted to go straight ahead but was forced into a parking spot off the street-
"They were asking for cheek swabs...They would give $10 for that. Also, if you let them take your blood, they would pay you $50 for that."
The 'survey', funded by the NHTSA, is a three-year, $7.9 million project that is supposed to determine the number of drunk or drug-impaired drivers. It's being conducted in some 30 cities nationwide. Isn't that what we, the taxpayers of communities across the state, are paying our police and sheriff's offices to do?
The Fort Worth Police Department has since offered an apology to the citizens of Fort Worth. The project smacks of yet another 'Big Brother' scheme by the federal government.
See the complete story from NBC 5 by clicking here. Be sure to take our poll below.


text:
'Games 3.0' Is Nothing New 41
At Next Generation, author Matt Matthews points out that gamers have been 'making things' for a while now. Sony's Phil Harrison touted the 'Games 3.0' vision at his GDC keynote last month, saying that the new thing is gamers making their own entertainment and sharing it with others. "[Harrison's view] ignores an important fact: the tools of game creation have been given to players over and over again for almost a quarter of a century, since at least 1983. The lessons learned since then will be instructive as Sony again puts the players in control." He goes on to discuss titles like RPGMaker, Pinball Wizard, and some of the famous mods that have changed the industry.


text:
Adjustment in rupee, which has fallen by nearly 20 per cent since May, was called as the country has seen high inflation compared with other countries, Prime Minister's economic adviser C Rangarajan said on Tuesday.
"In some sense,
the adjustment in the rupee was very much called for because our inflation rate was running so much higher than in the other countries," said Rangarajan, chairman of Prime Minister's Economic Advisory Council.
On Tuesday, the partially convertible rupee, the worst performing currency among the major global economies, dropped as much as 3.1 percent to 68.12 per dollar.


text:
Chelsea defeated Liverpool 2-1 to win their fourth FA Cup in six seasons in Saturday's final.
Goals in either half from Ramires and Didier Drogba gave the Blues a 2-0 lead before Andy Carroll emerged from the bench to halve the deficit.
Carroll was then denied superbly by Petr Cech, who tipped his header onto the crossbar as Liverpool claimed the ball had crossed the line.
However replays showed the whole of the ball had not gone over the strip of white chalk.
Kenny Dalglish's decision not to start Carroll backfired horrendously as Liverpool struggled to impose themselves on the showpiece occasion.
In the 11th minute Jay Spearing was robbed of possession in midfield before Juan Mata fed the ball to Ramires. The Brazilian then muscled off Jose Enrique with ease before beating a culpable Pepe Reina at his near post.
Despite trailing, the Reds offered little cause for optimism in a largely event-free first-half which saw Chelsea defend their lead with ease.
With Luis Suarez starting as a lone striker, the Uruguayan was invariably dropping deep, leaving Liverpool bereft of a striker further afield.
Yet Carroll still did not emerge at half-time and as the Reds continued to struggle for rhythm, Drogba struck.
Again 23-year-old Spearing was robbed in midfield before an adoirt pass from Frank Lampard found Drogba on the left hand side of the penalty area.
Facing Martin Skrtel, the Ivorian slotted the ball through the Slovakian defender's legs and into the corner of the net to double the Blues' lead.
It was Drogba's fourth FA Cup final goal, to add to his four League Cup final goals for Chelsea, as the 34-year-old again reaffirmed his big-game prowess.
Spearing was shortly after withdrawn for Carroll, and the former Newcastle striker's impact elevated his side.
In the 64th minute, and nine minutes after his introduction, he flummoxed Terry after capitalising on a loose ball to rifle the ball past Cech. The Czech Republic goalkeeper got a hand to the effort, but failed to stand imposingly tall.
Suddenly momentum had swung in Liverpool's favour. Carroll caused consternation for a previously comfortable Chelsea rearguard as he won lofted crosses into the area time and again.
Roberto di Matteo brought on Raul Meireles for Ramires in a bid to reenergise his tiring team, but five minutes later the game's flashpoint occurred.
Suarez's cross inside the area found Carroll at the far post, and the 23-year-old's fierce header was blocked by Cech onto the crossbar before Branislav Ivanovic cleared the ball.
ITV's technology showed the ball was largely over the line, but the law states the whole of it must cross the goal-line to be given as a goal. Suarez was booked for dissent.
Thereafter, Chelsea held out as Liverpool strived to seek out the excellent Carroll, but to no avail, as they lost their second successive FA Cup final at Wembley.
Di Matteo is now the 14th man to win the cup as a player and as a manager, as Chelsea boosted their confidence ahead of the Champions League final against Bayern Munich in two weeks' time.


text:
|SitePoint Sponsor
User Tag List
Results 1 to 3 of 3
Aug 18, 2007, 21:02 #1
- Join Date
- Aug 2007
- Posts
- 97
- Mentioned
- 0 Post(s)
- Tagged
- 0 Thread(s)
Returning data from ajax to new element
I'm having trouble placing some data returned by an ajax function in the page where I want it.
I've included the relevant html and the javascript function below. There is some php code included which works but is not relevant to this question. The first ajax part of the function works. I have tested it with positive results in another context.
The part starting with "var x . . ." is the part that is not working. This part is supposed to generate the following html:

{content returned by ajax function}

inside of the

It doesn't.
Here is the html that calls the function:

<? if (!empty($row['title_short'])) echo $row['title_short']; ?>
Here's the function:
function showHidePage(objID, page) {
//Set remote php location.
var serverPage = 'pages/' + page + '.php';
//Assign the container div to a variable
var obj = document.getElementById(objID);
//Implement ajax request.
xmlhttp.open("GET", serverPage);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
//Create new html objects and include ajax results.
var x = document.createElement('div');
var text = xmlhttp.responseText;
var y = document.createTextNode(text);
//Append to container object
Aug 19, 2007, 08:43 #2
- Join Date
- Sep 2005
- Location
- Tanzania
- Posts
- 4,662
- Mentioned
- 2 Post(s)
- Tagged
- 0 Thread(s)
Have you checked that you're actually receiving the text? Try adding this:
var y = document.createTextNode(text);
Aug 19, 2007, 09:06 #3
- Join Date
- Aug 2007
- Posts
- 97
- Mentioned
- 0 Post(s)
- Tagged
- 0 Thread(s)
Thanks for the tips
Raffles -- Thanks for the debugging tip. This is part of javascript I am just learning and it is quite different than php debugging. I will try it.
I will take some time next time to learn how to use the highlighting features you mention. This is my first post here. Just signed up and just getting into javascript and this forum.
I have some additional tips from other sources, as well and will see what I can get together.


text:
Monday, May 17, 2010
More Doodle Art....
This one makes me think of planets. I used the fake writing here too. Mostly acrylic paints, some applied with my fingers (!) and ink.
More fake writing on this one. Acrylic paints, ink, some colored pencils, and markers.
Same thing again....just playing with paint, ink, markers....seeing what appears on the page.
I like making these circle flowers....
This one was spray painted. I used some sequin waste for the white circles and some fake writing along the side. I may add something else but for now I'm not messing with it anymore.
These are just beginning. Laying down some colors with a palette knife....don't know where they're going to go but it will be fun playing!
Are you having fun today? It's turned chilly and windy again here so I'm staying in and doing more art.
23 comments:
Janet! I love that you've shared so many beautiful pages! The colours are fabulous....and those flowers...third one down is splendiderific!!!!! and the circle flowers are awesome too!!!!ReplyDelete
well done...i must pick up my pens and colours soon!
ciao bella
creative carmelina
It just looks like you are having so much fun!!! love all of these pieces :)ReplyDelete
I think fun covers these papers so well, they not only look great but I think youve had a lot of fun making them and it shows... fake writing huh? Ive never thought of that before!ReplyDelete
I absolutely love that first one! I can see it framed and hung on a wall. Your doodle creations are so joyful and pleasant. Keep up the good work (or rather, play!)ReplyDelete
Wow Janet!!!! I completely LOVE your doodle-art! all of it!ReplyDelete
I really like these.You have been very busy lady. By the way where did you get your sequin waste??? Please and thanks in advance. Also what size do you wear? I am preparing your goat costume and will send it right off to you! (anyone who reads this is going to say, what the heck...) :-)ReplyDelete
I love your fake writing. It is beautiful..I think it is your language. LOLReplyDelete
You have been busy...great pieces...love the purple! I just realized that's one color I don't use very often. I need to check Traci's class...our internet has been down part of today.ReplyDelete
Thanks for taking the time to visit me and for leaving a comment. I appreciate each and every comment and will answer any questions via email. Otherwise I will respond to your comments with comments of my own on your blog. I love the blogging community!!


text:
Published: 2012/11/23
by Brian Robbins
"A Wedding Ring or Two Rattling off the Frets" : John Bell on Widespread Panic's Wood
Photo by Tarver Shelton
A little guitar talk – you're primarily a Washburn man, aren't you?
Yeah, those guys have always treated me well and the guitars and mandolins take a beating. It's a good relationship: they've never asked me to sign anything – everything we do is mutual agreement; mutual comfort level.
I always love hearing that; some companies make great stuff, but they're not always easy to deal with.
Yeah, I've been with Washburn for a long time.
Do you write primarily on acoustic?
Yeah … if it's a case where the music's in my head, then I'll go and find it on the guitar. Or sometimes I'll be goofing around on the guitar and I'll hear something quirky that I like. Or maybe a lyrical idea will come in – either lyrics themselves or a concept – and then I'll go to the guitar and try to match the feeling of what the images are telling me. From there, I'll usually go to a multi-track situation and create a demo – enough to give the guys an idea of where I was going with it. Maybe a little bass, or some electric guitar or pedal organ … a little percussion – even if it's just a shaker – just to give it a listenable sound. Not to say, "This is how the song goes and that's the way we're going to do it" – but just to give the idea a chance so that they have something to work with.
That's pretty much how everybody writes: we all just come up with ideas and shoot them off each other. Nothing's sacred and we usually inspire each other to make it a better song … a band -written song. That's what makes it fun for me: then it's almost like you're playing a cover because it didn't all come out of you; it came out of the guys you've been playing with for 25 years.
The live acoustic setting doesn't come easy for a lot of people and I think they get unnerved by it.
Yeah – and it's not just the accidental sounds you get; it's the percussive elements, as well. And that's very helpful when you're writing – the acoustic guitar is more or less your drum track.
That's always been my approach to guitar playing: it's a six-string drum.
(laughs) There you go. And that's basically how I approach it with Jimmy: he's obviously got this huge musical vocabulary; a command of melody and single-note leads; all the flavors and feeling for different modes and stuff. I like to stick to shapes and movement and things like that.
You don't have to worry about me saying, "Hey – I wanna take a lead!" (laughter)
Well, it's a nice mix and you two always work well together. Hey – you mentioned the mandolin earlier: I want to hear some more John Bell mandolin, man.
(laughs) Yeah, who knows? Maybe I'll work out something for New Year's.
Cool – bring it on! So looking ahead, we have the pair of New Years shows in Charlotte, NC on the 30th and 31st …
And then we have the Dominican Republic at the end of January – the same sort of things we did in Cancun but applying what we learned to make it better for everybody. We've never been to the Dominican Republic before, and that's pretty cool.
That's part of it for me: I like being together for 26 years and still doing new things.
It's great that it feels that way to you, man – I'm tickled to hear that. I should let you go now, John. I appreciate you taking the time to talk about the new album … it's really something to be proud of.
Thank you. I've got to admit, I'm listening to it from time to time now … even with how much I listened to it putting the sequencing together. (laughter)
Thanks, take care, and be careful out there, John.
All right, man – thank you. Cheers.


text:
Scientists to Explore from Arctic to Jungles
U-T San Diego -- Passports will take a beating this summer among the county's huge scientific research community.
DREW TALLEY, biological oceanographer, University of San Diego, will spend part of June in Bahia San Quintin, Baja California, comparing bivalve populations to historic records from the 1960s. (Full Story)


text:
BioWare, Electronic Arts' role-playing game mill, has its nose to the grindstone with the next round of sequels to its most recent series. Mass Effect 4 is on the way (only it won't really be Mass Effect 4). Dragon Age 3: Inquisition has been in a variety of production stages over the past two years, and all that's clear is that EA and BioWare want to tailor it to whatever customers say they want. What consoles will these games be on, though? Maybe PlayStation 3 and Xbox 360, maybe the PlayStation 4 and Next Xbox, definitely PCs? Definitely the latter three based on word from BioWare.
The next Mass Effect game and Dragon Age 3: Inquisition will both run on DICE's shiny new Frostbite 3 engine. Those games didn't put in an appearance at GDC 2013 when DICE debuted Battlefield 4, but the studio's new general manager Aaryn Flynn confirmed on Twitter that those sequels will use the same tech.
"For everyone who's been asking after the BF4 reveal, DA3 and the next Mass Effect are also using Frostbite 3," said Flynn, "It's awesome."
Prior to Flynn's announcement, all that was known was that these sequels would use a new engine. Dragon Age 3 at least started out using Frostbite 2, though. "We are working on a new engine which we believe will allow us to deliver a more expansive world, better visuals, more reactivity to player choices, and more customization," said producer Mark Darrah in December, "We've started with Frostbite 2 from DICE as a foundation to accomplish this."
If the engine technology has changed yet again, it's questionable whether or not these games will make it out to current consoles after all. One thing, at least, seems like a guarantee. Mass Effect 3 on Wii U won't be followed by the next Mass Effect game. DICE confirmed for Eurogamer during a GDC interview that the Frostbite 3 engine does not support Nintendo's new console. "The biggest problem we have right now is we don't want to back down from what we see as our low spec machines," said DICE's Patrick Bach, "We right now don't have support for the Wii U in the Frostbite engine. The reason for that is it takes development time." That's bad news for the Wii U's future prospects, as Epic Games also confirmed to us that the Wii U would not run Unreal 4 either.
Editors' Recommendations
- From 'Anthem' to 'Smash Bros. on Switch,' here are the games coming to E3 2018
- DT Daily: What's 'Next' for No Man's Sky's big universe?
- 4A Games' post-apocalyptic 'Metro Exodus' delayed to next year
- A 'Dark Souls Remastered' network test will begin on May 11
- PlayStation chief says the next console is still three years away


text:
Graduate Degrees and Programs
COIS6040 - Professional Communication
Fall 2012
Professional Communication prepares students to communicate in business contexts. Students analyze business situations and audiences, determine the appropriate medium--oral and written--they require, and develop and present communications in professional settings. By participating in peer reviews, students hone their skills in analyzing, critiquing and revising communications. Class members also collaborate on projects, working as part of a professional team. Throughout the course, students develop strategies for communicating in international professional situations.
3 Credits
Schedule Book for All Active and Available Future Terms, Course starting with COIS6040
No Courses Found


text:
One of the oldest matchmaking services providing Macdowall personals to the area. Matchmaker specializes in helping singles in the Macdowall personals area find that special someone. Whether you are seeking a serious relationship or marriage; matchmaker.com can help you today. Our Macdowall personals service provides the latest in dating services to help you meet Macdowall single men and Macdowall single women. Create a free singles ad and start dating online, its easy!
MacdowallJoin Now Free!
Macdowall Girls | Macdowall Men | Macdowall Gay | Macdowall Lesbians
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
More Macdowall Links:
Macdowall Dating | Macdowall Speed Dating | Macdowall Chat | Macdowall Singles | Macdowall Love
Senior Dating | Catholic Dating | Christian Dating | Muslim Dating
Black Singles | Asian Singles | Latin Dating
Specializing in Macdowall personals services for the past ten years and helping Macdowall singles find that special someone has helped matchmaker become one of the best online destinations. Our cupid matchmaking service allows you to receive email updates when new members that match your preferences join out Macdowall dating service. Find the best Macdowall classifieds and Macdowall personals when joining our online dating service today!


text:
The latter of the 4, System.Runtime.Remoting.Messaging, gives us the remoting infrastructure needed to communicate with the remote FTP Server. Support for FTP in .Net 2.0 is not only a new feature, but it doesn't get nearly enough attention as it should. Before 2.0 we were delegated to relying on 3rd party libraries if we wanted to access FTP functionality. I have been asked many times how to go about creating an FTP Class Library in C#, both professionally and from friends I know in the industry, so I thought it was time to dive into the world of Sockets and remoting.
At the time of this tutorial my FTP Class Library doesn't yet have support for FTPS or recursive downloading, but I plan on implementing that in the future. The features you will have available when you complete this tutorial are:
- Uploading
- Recursive Uploading
- Download
- Resume (Download & Upload)
- Delete (Files & Directories)
- Rename Files
- Create Directory
Keep in mind that this is a large class library, responsible for a lot of functionality, so this tutorial is rather lengthy. Now into the making of your class library. As with any .Net code you write you need to add your using Directives. The using Directive allows us access to the types and methods in Namespace's without having to fully qualify the Namespace as well:
using System; using System.IO; using System.Net; using System.Text; using System.Diagnostics; using System.Net.Sockets; using System.Runtime.Remoting; using System.Runtime.Remoting.Messaging;
Next we need our Global variables. Some of these are for populating our Public Properties. Variables are required for properties as properties don't allocate any storage space on their own, and to prevent the variables from being directly modified, always declare them as private:
#region Variables //Property Variables private string _ftpServer = string.Empty; private string _ftpPath = "."; private string _ftpUsername = string.Empty; private string _ftpPassword = string.Empty; private int _ftpPort = 21; private bool _isLoggedIn = false; private bool _isBinary = false; private int _timeOut = 10; //Static variables private static int BUFFER_SIZE = 512; private static Encoding ASCII = Encoding.ASCII; //Misc Global variables private bool _doVerbose = false; private string statusMessage = string.Empty; private string result = string.Empty; private int bytes = 0; private int _statusCode = 0; private Byte[] buffer = new Byte[BUFFER_SIZE]; private Socket ftpSocket = null; #endregion
Now we need to look at the Properties for our library. All our properties are Public, making them accessible from outside the class, but we have Read/Write variables, where the value is set outside our library, and we have ReadOnly properties, where the value is set from within the library itself, and retrieve from elsewhere. In this version of out library we have properties for the following:
- Server name
- Working directory path
- Username
- Password
- Port number
- Is the user logged in
- Use binary mode or Ascii
- Timeout value
In future versions I will be adding these as storable values, to keep a list of FTP Servers I connect to, and hashed values for the username/password combination of each server. Here are our properties:
#region Class Properties #region Read/Write Properties /// <summary> /// Display all communications to the debug log /// </summary> public bool DoVerbose { get { return _doVerbose; } set { _doVerbose = value; } } /// <summary> /// FTP Server port to use, default is usually 21 /// </summary> public int FtpPort { get { return _ftpPort; } set { _ftpPort = value; } } /// <summary> /// Timeout waiting for a response from server, in seconds. /// </summary> public int TimeoutValue { get { return _timeOut; } set { _timeOut = value; } } /// <summary> /// Name of the FTP server we wish to connect to /// </summary> /// <returns></returns> public string FtpServer { get { return _ftpServer; } set { _ftpServer = value; } } /// <summary> /// The remote port we wish to connect through /// </summary> /// <returns></returns> public int RemotePort { get { return _ftpPort; } set { _ftpPort = value; } } /// <summary> /// The working directory /// </summary> public string FtpPath { get { return _ftpPath; } set { _ftpPath = value; } } /// <summary> /// Server username /// </summary> public string FtpUsername { get { return _ftpUsername; } set { _ftpUsername = value; } } /// <summary> /// Server password /// </summary> public string FtpPassword { get { return _ftpPassword; } set { _ftpPassword = value; } } /// <summary> /// If the value of mode is true, set /// binary mode for downloads, else, Ascii mode. /// </summary> public bool IsBinary { get { return _isBinary; } set { //if _isBinary already exit if (_isBinary == value) return; //check the value being passed //if it's true send the command //for binary download if (value) Execute("TYPE I"); else //otherwise stay in Ascii mode Execute("TYPE A"); //now check the status code, if //its not 200 throw an exception if (_statusCode != 200) { throw new FtpException(result.Substring(4)); } } } #endregion #region ReadOnly Properties /// <summary> /// determine if the user is logged in /// </summary> public bool IsLoggedIn { get { return _isLoggedIn; } } /// <summary> /// returns the status code of the command /// </summary> public int StatusCode { get { return _statusCode; } } #endregion #endregion
Notice the property StatusCode, this is a readonly property that will hold the FTP code returned from the remote server. This value is crucial when creating an FTP client. Now we move on to the methods of our class library. Before a user can do anything on an FTP Server, they first need to login to that server with the correct username and password. For our login method we create a Socket to communicate with the server through, once we have successfully connection to the host, we can execute 2 FTP commands:
- USER: Used to send the username to the server
- PASS: Used to send the password to the server
Then based on the returned status code we act accordingly, we either let the user know they logged on successfully, or we throw our custom exception FtpException (We'll get to that later):
#region FTPFtpLogin /// <summary> /// method to log in to the remote ftp server /// </summary> public void FtpLogin() { //check if the connection is currently open if (_isLoggedIn) { //its open so we need to close it CloseConnection(); } //message that we're connection to the server Debug.WriteLine("Opening connection to " + _ftpServer, "FtpClient"); //create our ip address object IPAddress remoteAddress = null; //create our end point object IPEndPoint addrEndPoint = null; try { //create our ftp socket ftpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //retrieve the server ip remoteAddress = Dns.GetHostEntry(_ftpServer).AddressList[0]; //set the endpoint value addrEndPoint = new IPEndPoint(remoteAddress, _ftpPort); //connect to the ftp server ftpSocket.Connect(addrEndPoint); } catch (Exception ex) { // since an error happened, we need to //close the connection and throw an exception if (ftpSocket != null && ftpSocket.Connected) { ftpSocket.Close(); } throw new FtpException("Couldn't connect to remote server", ex); } //read the host response readResponse(); //check for a status code of 220 if (_statusCode != 220) { //failed so close the connection CloseConnection(); //throw an exception throw new FtpException(result.Substring(4)); } //execute the USER ftp command (sends the username) Execute("USER " + _ftpUsername); //check the returned status code if (!(_statusCode == 331 || _statusCode == 230)) { //not what we were looking for so //logout and throw an exception LogOut(); throw new FtpException(result.Substring(4)); } //if the status code isnt 230 if (_statusCode != 230) { //execute the PASS ftp command (sends the password) Execute("PASS " + _ftpPassword); //check the returned status code if (!(_statusCode == 230 || _statusCode == 202)) { //not what we were looking for so //logout and throw an exception LogOut(); throw new FtpException(result.Substring(4)); } } //we made it this far so we're logged in _isLoggedIn = true; //verbose the login message Debug.WriteLine("Connected to " + _ftpServer, "FtpClient"); //set the initial working directory ChangeWorkingDirectory(_ftpPath); } #endregion
Next we will look at the CloseConnection method. This method is called mainly when we close our application. Here we check to see if the socket is still active, if so we execute the FTP command of QUIT which immediately terminates the connection tot he FTP server:
#region CloseConnection /// <summary> /// method to close the connection /// </summary> public void CloseConnection() { //display the closing message Debug.WriteLine("Closing connection to " + _ftpServer, "FtpClient"); //check to see if the connection is still active //if it is then execute the ftp quit command //which terminates the connection if (ftpSocket != null) { Execute("QUIT"); } //log the user out LogOut(); } #endregion
You will notice that in the first 2 methods we looked at, both called a method named Execute. The Execute method is what we will be using to send our FTP commands to the remote server. Here we convert the command string into a byte array, then use the Send Method of the Socket to send the converted command to the remote server. Once we send the command we wait for and read the host's response:
private void Execute(String msg) { //check to see if verbose debugging is enabled //if so write the command to the window if (_doVerbose) Debug.WriteLine(msg,"FtpClient"); //convert the command to a byte array Byte[] cmdBytes = Encoding.ASCII.GetBytes((msg + "\r\n").ToCharArray()); //send the command to the host ftpSocket.Send(cmdBytes, cmdBytes.Length, 0); //read the returned response readResponse(); } #endregion
You'll notice the method call to readResponse as the last line in the Execute method. It is in here we set the values of our _statusCode variable, along with the result and statusMessage variables. These values come from a method called ParseHostResponse. First the readResponse method:
#region readResponse /// <summary> /// /// </summary> private void readResponse() { statusMessage = ""; result = ParseHostResponse(); _statusCode = int.Parse(result.Substring(0,3)); } #endregion
Now for ParseHostResponse:
#region ParseHostResponse /// <summary> /// Method to parse the response from the remote host /// </summary> /// <returns></returns> private string ParseHostResponse() { while(true) { //retrieve the host response and convert it to //a byte array bytes = ftpSocket.Receive(buffer,buffer.Length, 0); //decode the byte array and set the //statusMessage to its value statusMessage += ASCII.GetString(buffer,0,bytes); //check the size of the byte array if ( bytes < buffer.Length ) { break; } } //split the host response string[] msg = statusMessage.Split('\n'); //check the length of the response if (statusMessage.Length > 2) statusMessage = msg[msg.Length - 2]; else statusMessage = msg[0]; //check for a space in the host response, if it exists return //the message to the client if (!statusMessage.Substring(3,1).Equals(" ")) return ParseHostResponse(); //check if the user selected verbose Debugging if (_doVerbose) { //loop through the message from the host for(int i = 0; i < msg.Length - 1; i++) { //write each line out to the window Debug.Write( msg[i], "FtpClient" ); } } //return the message return statusMessage; } #endregion
Now, when doing FTP you need to open a new socket for any transfers. To do this we use the passive approach, by letting the remote server send us the IP and port we need to connect through. We do this by sending the PASV command to the server, it then returns the IP and post in this format 227 Entering Passive Mode (192,168,8,36,8,75), so we need to parse this so we have the information for transferring the data. We do this by looping through the return message, building the IP and port number, then we attempt a connect with that information:
/// <summary> /// when doing data transfers, we need to open another socket for it. /// </summary> /// <returns>Connected socket</returns> private Socket OpenSocketForTransfer() { //send the PASV command (Passive command) Execute("PASV"); //check the status code, if it //isnt 227 (successful) then throw an exception if (_statusCode != 227) { throw new FtpException(result.Substring(4)); } //find the index of the opening "(" //and the closing ")". The return //message from the server, if successful, has //the IP and port number for the client in //enclosed in "(" & ")" int idx1 = result.IndexOf('('); int idx2 = result.IndexOf(')'); //now we need to get everything in the parenthesis string ipData = result.Substring((idx1+1),(idx2-idx1)-1); //create new integer array with size of 6 //the returning message is in 6 segments int[] msgSegments = new int[6]; //get the length of the message int msgLength = ipData.Length; int partCount = 0; string buffer = ""; //now we need to loop through the host response for (int i = 0; i < msgLength && partCount <= 6; i++) { //convert each character to a char char chr = char.Parse( ipData.Substring(i,1) ); //check to see if the current character is numeric if (char.IsDigit(chr)) { //since its a number we add it to our buffer variable buffer+=chr; } //now we need to check for the //comma seperating the digits else if (chr != ',') { //no comma so throw an exception throw new FtpException("Malformed PASV result: " + result); } else { //check to see if the current character is a comma //or if the counter + 1 equals the host response length if (chr == ',' || i + 1 == msgLength) { try { //since its one of the 2 we add it to the //current index of the message segments msgSegments[partCount++] = int.Parse(buffer); buffer = ""; } //handle any exceptions thrown catch (Exception ex) { throw new FtpException("Malformed PASV result (not supported?): " + result, ex); } } } } //now we assemble the IP address returned from the host string ipAddress = msgSegments[0] + "."+ msgSegments[1]+ "." + msgSegments[2] + "." + msgSegments[3]; //the last 2 segments are the port we need to use int port = (msgSegments[4] << 8) + msgSegments[5]; Socket tranferSocket = null; IPEndPoint ipEndPoint = null; try { //create our new socket for transfering data tranferSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); ipEndPoint = new IPEndPoint(Dns.GetHostEntry(ipAddress).AddressList[0], port); tranferSocket.Connect(ipEndPoint); } catch(Exception ex) { // doubtfull.... if ( tranferSocket != null && tranferSocket.Connected ) tranferSocket.Close(); //throw an FtpException throw new FtpException("Can't connect to remote server", ex); } //return the socket return tranferSocket; }
Now we have all the information for connecting to the remote server, for logging into the server, and for opening a data socket for the data transfer, now lets look at how we would go about uploading a file to an FTP Server. With uploading a file, we will attempt to enable resuming the download in case the connection is interrupted, but remember, all servers don't support resuming.
To do this we initially get the size of the file, then when we start the upload we look for a file with the same name, if it exists then we check its size against the file on the clients computer. If they don't match we send the REST command, which will initialize a resume, it is here when we will be informed if the FTP server supports the resume feature. If it doesn't support resume, we overwrite the file there with the one being uploaded:
#region UploadFile /// <summary> /// Upload a file and set the resume flag. /// </summary> /// <param name="fileName"></param> /// <param name="resume"></param> public void UploadFile(string fileName, bool resume) { //make sure the user is logged in if (!_isLoggedIn) { //FtpLogin(); throw new FtpException("You need to log in before you can perform this operation"); } Socket dataSocket = null; long resumeOffset = 0; //if resume is true if (resume) { try { //set _isBinary to true IsBinary = true; //get the size of the file resumeOffset = GetFileSize(Path.GetFileName(fileName)); } catch (Exception) { // file not exist resumeOffset = 0; } } // open stream to read file FileStream input = new FileStream(fileName, FileMode.Open); //if resume is true //and the size of the file read is //less than the initial value if (resume && input.Length < resumeOffset) { // different file size Debug.WriteLine("Overwriting " + fileName, "FtpClient"); resumeOffset = 0; } else if (resume && input.Length == resumeOffset) { // file done input.Close(); Debug.WriteLine("Skipping completed " + fileName + " - turn resume off to not detect.", "FtpClient"); return; } //now create our socket needed for //the file transfer dataSocket = OpenSocketForTransfer(); //if the file size is greater than 0 if (resumeOffset > 0) { //execute the rest command, which //sets the point the resume will occurr //if the upload is interrupted Execute("REST " + resumeOffset); //check the status code, if it's not //350 the resume isnt supported by the server if (_statusCode != 350) { Debug.WriteLine("Resuming not supported", "FtpClient"); resumeOffset = 0; } } //execute the store ftp command (starts the transfer of the file) Execute("STOR " + Path.GetFileName(fileName)); //check the status code, we need a //value of 150 or 125, otherwise throw an exception if (_statusCode != 125 && _statusCode != 150) { throw new FtpException(result.Substring(4)); } //now check the resumeOffset value, //if its not zero then we need to resume //the upload process where it ended if (resumeOffset != 0) { //let the user know the upload is resuming Debug.WriteLine("Resuming at offset " + resumeOffset, "FtpClient"); //use the Seek method to get to where the upload ended input.Seek(resumeOffset, SeekOrigin.Begin); } //let the user know the uploading has begun Debug.WriteLine("Uploading file " + fileName + " to " + _ftpPath, "FtpClient"); //upload the file while ((bytes = input.Read(buffer, 0, buffer.Length)) > 0) { dataSocket.Send(buffer, bytes, 0); } //close our reader input.Close(); //check to see if the socket is still connected //if it is then disconnect it if (dataSocket.Connected) { dataSocket.Close(); } //read the host's response readResponse(); //checking for a successful upload code (226 or 250) //if not either then throw an exception if (_statusCode != 226 && _statusCode != 250) { throw new FtpException(result.Substring(4)); } } #endregion
You will notice we reference a method named GetFileSize when we upload the file. This is a method we use to retrieve the size of the file they're uploading (we also use it for the downloading as well). Here we sent the SIZE command to the server, and if successful it returns the file size, in decimal format, otherwise we throw an exception:
#region GetFileSize /// <summary> /// Method to retrieve the size of the file based /// on the name provided /// </summary> /// <param name="file">Name of the file to get the size of</param> /// <returns>The files size</returns> public long GetFileSize(string file) { //make sure the user is logged in if (!_isLoggedIn) { //FtpLogin(); throw new FtpException("You need to log in before you can perform this operation"); } //execute the size command, which //returns the files size as a decimal number Execute("SIZE " + file); long fileSize = 0; //check our returning status code //if it's not 213 the command failed if (_statusCode == 213) { //set the file size fileSize = long.Parse(result.Substring(4)); } else { //command failed so throw an exception throw new FtpException(result.Substring(4)); } //return the file size return fileSize; } #endregion
For downloading a file, we also attempt to implement a resume, checking in the same fashion to see if the server supports this command. Here we require the name of the file on the server to download, the name you want the file on the clients computer, and a boolean resume value. Once we send the REST command, we then send the RETR command to retrieve the remote file. We then set a timeout value, and check that value in a loop, while calling the Receive Method of the Socket Class until we either reach the timeout value, of the number of bytes remaining is zero:
#region DownloadFile /// <summary> /// Download a remote file to a local file name which can include /// a path, and set the resume flag. The local file name will be /// created or overwritten, but the path must exist. /// </summary> /// <param name="ftpFile">File on the server to download</param> /// <param name="localFile">Name of the file on the local machine</param> /// <param name="resume"></param> public void DownloadFile(string ftpFile, string localFile, Boolean resume) { //make sure the user is logged in if (!_isLoggedIn) { //FtpLogin(); throw new FtpException("You need to log in before you can perform this operation"); } IsBinary = true; //display a downloading file message Debug.WriteLine("Downloading file " + ftpFile + " from " + _ftpServer + "/" + _ftpPath, "FtpClient"); //check if a local file name was provided //if not then set its value to the ftp file name if (localFile.Equals("")) { localFile = ftpFile; } //create our filestream object FileStream output = null; //check to see if the local file exists //if it doesnt then create the file //otherwise overwrite it if (!File.Exists(localFile)) { //create the new file output = File.Create(localFile); } else { //overwrite the existsing file output = new FileStream(localFile, FileMode.Open); } //create our new socket for the transfer Socket dataSocket = OpenSocketForTransfer(); //create our resume point long resumeOffset = 0; //if resume was set to true if (resume) { //set the value of our resume variable resumeOffset = output.Length; //check if its value is greater than 0 (zero) if (resumeOffset > 0) { //execute our rest command, which sets the //resume point for the download in case //the download is interrupted Execute("REST " + resumeOffset); //check the status code, if not a 350 //code then the server doesnt support resuming if (_statusCode != 350) { //Server dosnt support resuming resumeOffset = 0; Debug.WriteLine("Resuming not supported:" + result.Substring(4), "FtpClient"); } else { Debug.WriteLine("Resuming at offset " + resumeOffset, "FtpClient"); //seek to the interrupted point output.Seek(resumeOffset, SeekOrigin.Begin); } } } //execute out retr command //which starts the file transfer Execute("RETR " + ftpFile); //check the status code, we need 150 or 125 //otherwise the download failed if (_statusCode != 150 && _statusCode != 125) { //throw an FtpException throw new FtpException(result.Substring(4)); } //set a timeout value DateTime timeout = DateTime.Now.AddSeconds(_timeOut); //check the timeout value against the current time //if its less then download the file while (timeout > DateTime.Now) { //receive the binary data from the socket bytes = dataSocket.Receive(buffer, buffer.Length, 0); //write the file output.Write(buffer, 0, bytes); //make sure the file is greater than //zero in size, if not exit the method if (bytes <= 0) { break; } } //close our stream output.Close(); //check to see if the socket is still open, //if it is then close it if (dataSocket.Connected) { dataSocket.Close(); } //read the host's response readResponse(); //we're looking for a status code of 226 or 250, //if that isnt returned the download failed if (_statusCode != 226 && _statusCode != 250) { throw new FtpException(result.Substring(4)); } } #endregion
How will someone know what file(s) they want to download? Thats good question, which I have a good answer for. When you plug your library into a UI for the user, you have a method to list all the files that are currently on the FTP server. We do this by executing the NLST command. This will retrieve the name and size of all files on the server, then we simply populate a string array with that information, and use it to populate the UI for the client to view:
#region ListFiles /// <summary> /// Return a string array containing the remote directory's file list. /// </summary> /// <param name="mask"></param> /// <returns></returns> public string[] ListFiles(string mask) { //make sure the user is logged in if (!_isLoggedIn) { //FtpLogin(); throw new FtpException("You need to log in before you can perform this operation"); } //create new socket Socket dataSocket = OpenSocketForTransfer(); //execute the ftp nlst command, which //returns a list of files on the remote server Execute("NLST " + mask); //check the return code, we're looking for //either 150 or 125, otherwise the command failed if (!(_statusCode == 150 || _statusCode == 125)) { //failed, throw an exception throw new FtpException(result.Substring(4)); } //set the message to empty statusMessage = ""; //create a timeout value based on our timeout property DateTime timeout = DateTime.Now.AddSeconds(_timeOut); //loop while out timeout value is //greater than the current time while (timeout > DateTime.Now) { //retrieve the data from the host int bytes = dataSocket.Receive(buffer, buffer.Length, 0); //convert it to Ascii format statusMessage += ASCII.GetString(buffer, 0, bytes); //exit the method is nothing is returned if (bytes < buffer.Length) break; } //throw the returned message into a string array string[] msg = statusMessage.Replace("\r", "").Split('\n'); //close the socket connection dataSocket.Close(); //check the return message if (statusMessage.IndexOf("No such file or directory") != -1) //return an empty message msg = new string[] { }; //read the host's response readResponse(); //if we didnt receive a status code of 226 //then the process failed if (_statusCode != 226) //return an empty message msg = new string[] { }; // throw new FtpException(result.Substring(4)); return msg; } #endregion
I had mentioned earlier in this tutorial that our library will offer recursive uploading to the FTP server, so lets take a look at how we offer that functionality. FOr this we require the user to provide the directory path, a boolean value for recursive, and a mask value , such as '*.*', '*.jpg*', etc. We take that directory name and check to see if the directory already exists on the server, if it doesnt we create that directory.
From there we change the working directory to the new directory, we want to be in the new directory when we start the upload, we'll look at that method next.Then we start our loop, we first upload all the files that are in that directory, then, if the user opted for recursive, we loop through all the directories in the specified directory and upload them, and their files as well, then we change the working directory back to the root directory:
#region UploadDirectory /// <summary> /// Upload a directory and its file contents /// </summary> /// <param name="dirPath">Path of the directory to upload</param> /// <param name="recursive">Whether to recurse sub directories</param> /// <param name="fileMask">Only upload files of the given mask(i.e;'*.*','*.jpg', ect..)</param> public void UploadDirectory(string dirPath, bool recursive, string fileMask) { //make sure the user is logged in if (!_isLoggedIn) { //FtpLogin(); throw new FtpException("You need to log in before you can perform this operation"); } string[] directories = dirPath.Replace("/", @"\").Split('\\'); string rootDirectory = directories[directories.Length - 1]; // make the root dir if it does not exist if (ListFiles(rootDirectory).Length < 1) { CreateDirectory(rootDirectory); } //make the new directory the working directory ChangeWorkingDirectory(rootDirectory); //loop through the files in the directory foreach (string file in Directory.GetFiles(dirPath, fileMask)) { //upload each file UploadFile(file, true); } //check if recusrsive was specified if (recursive) { //since recursive is true, we loop through all the //directories in the directory provided foreach (string directory in Directory.GetDirectories(dirPath)) { //upload each directory UploadDirectory(directory, recursive, fileMask); } } //change working directory back to root level ChangeWorkingDirectory(".."); } #endregion
For changing the working directory for the user all we need is the name of the directory they wish to make the working directory. We then execute the [i[CWD[/i] command, which stands for, Change Working Directory. We then check for a stus code of 250, if we dont receive that code we throw an exception, if we do we then execute the PWD command (Print Working Directory) and check for a status of 257. If we dont receive that status from the server we throw an exception, otherwise we write out the message of the new directory:
#region ChangeWorkingDirectory /// <summary> /// Change the current working directory on the remote FTP server. /// </summary> /// <param name="dirName"></param> public void ChangeWorkingDirectory(string dirName) { //check to make sure a directory name was supplied if (dirName == null || dirName.Equals(".") || dirName.Length == 0) { //no directory was provided so throw an exception //and break out of the method throw new FtpException("A directory name wasn't provided. Please provide one and try your request again."); } //before we can change the directory we need //to make sure the user is logged in if (!_isLoggedIn) { //FtpLogin(); throw new FtpException("You need to log in before you can perform this operation"); } //execute the CWD command = Change Working Directory Execute("CWD " + dirName); //check for a return status code of 250 if (_statusCode != 250) { //operation failed, throw an exception throw new FtpException(result.Substring(4)); } //execute the PWD command //Print Working Directory Execute("PWD"); //check for a status code of 250 if (_statusCode != 257) { //operation failed, throw an exception throw new FtpException(result.Substring(4)); } // we made it this far so retrieve the //directory from the host response _ftpPath = statusMessage.Split('"')[1]; Debug.WriteLine("Current directory is " + _ftpPath, "FtpClient"); } #endregion
There are 2 more small methods I'd like to go over with you, one is for renaming a file, the other is for deleting a file. There is, of course, more in this library, but this tutorial is getting quite long as it is, so I'll be including the file with this tutorial, so you can look through the rest of the code.
For deleting a file, we send the DELE command to the remote server, then wait for a response. If we receive a status code of 250 all is good and the file was deleted, if not we throw an exception with the error message returned from the server:
#region DeleteFile /// <summary> /// method to delete a file from the FTP server. /// </summary> /// <param name="file">File to delete</param> public void DeleteFile(string file) { //make sure the user is logged in if (!_isLoggedIn) { //FtpLogin(); throw new FtpException("You need to log in before you can perform this operation"); } //execute the delete command Execute("DELE " + file); //check for a status code of 250, if //not then throw an exception if (_statusCode != 250) { throw new FtpException(result.Substring(4)); } Debug.WriteLine("Deleted file " + file, "FtpClient"); } #endregion
Now, to rename a file we send two commands to the server. First we send the RNFR command, which is rename from, then we send the RNTO, which is rename to. When wwe send the first command we check for a status code of 350, if successful we send the 2nd command, then look for a status of 250. If all goes well then the file is renamed, otherwise we throw an exception with the message from the FTP server:
#region RenameFile /// <summary> /// Rename a file on the remote FTP server. /// </summary> /// <param name="oldName">File to rename</param> /// <param name="newName">New name of the file</param> /// <param name="replace">setting to false will throw exception if it exists</param> public void RenameFile(string oldName, string newName, bool replace) { //make sure the user is logged in if (!_isLoggedIn) { //FtpLogin(); throw new FtpException("You need to log in before you can perform this operation"); } //execute the rename from command Execute("RNFR " + oldName); //check for a status code of 350 if (_statusCode != 350) { throw new FtpException(result.Substring(4)); } //if they didnt choose to replace the file, and a //file with that name already exists then throw an exception if (!replace && ListFiles(newName).Length > 0) { throw new FtpException("File already exists"); } //execute the rename to command Execute("RNTO " + newName); //check for a status code of 250, if //not then throw an exception if (_statusCode != 250) { throw new FtpException(result.Substring(4)); } //write the successful message out Debug.WriteLine("Renamed file " + oldName + " to " + newName, "FtpClient"); } #endregion
One finaly method, this method is for creating a new directory on the server. To do this we send the MKD command to the server (Make Directory), then check the status code thats returned. If its not either 250 or 257 we throw an exception containing the message from the server, otherwise the operation was successful:
#region CreateDirectory /// <summary> /// Create a directory on the remote FTP server. /// </summary> /// <param name="dirName">Name of the directory to create</param> public void CreateDirectory(string dirName) { //make sure the user is logged in if (!_isLoggedIn) { //FtpLogin(); throw new FtpException("You need to log in before you can perform this operation"); } //check to make sure a directory name was supplied if (dirName == null || dirName.Equals(".") || dirName.Length == 0) { //no directory was provided so throw an exception //and break out of the method throw new FtpException("A directory name wasn't provided. Please provide one and try your request again."); } //execute the make directory command Execute("MKD " + dirName); //check for a status code of 250 or 257 if (_statusCode != 250 && _statusCode != 257) { //operation failed, throw an exception throw new FtpException(result.Substring(4)); } Debug.WriteLine("Created directory " + dirName, "FtpClient"); } #endregion
There are a couple more methods in the library, but Ill let you look through them on your own, because I now want to show the short class file that makes our cutom FtpException we throw whever a command fails. In this class we inherit from the Exception Class, and it contains nothing but the 2 base contructors Microsoft suggests all custom exception classes have:
public class FtpException : Exception { public FtpException(string message) : base(message) { } public FtpException(string message, Exception innerException) : base(message, innerException) { } }
That's it, thats our Custom Exception class, and our FTP Class Library. Like I metioned earlier, I will be including this library with the tutorial, but it is under the GNU General Public License so the licensing information must remain in tact with the library and code at all times. So now you have a good understanding of creating your own custom FTP Class Library utilizing just the objects available in the .Net Framework 2.0.
I know this tutorial was long and indepth, but I hope you found it useful and informative, as I did when creating this library. Thank you so much for reading.
PCFtp.zip (46.54K)
Number of downloads: 12465
Happy Coding!


text:
Free-kicks are a crucial part of modern day football - they can be scored from, assist a goal or just cause havoc for the defending team. Here is a list of some of the greatest set-play artists of recent times.
Roberto Carlos
The tiny Brazilian with tree-trunk legs was probably best known for his outstanding free-kicks. With an unusual stuttering run-up, Roberto Carlos executed a still-ball situation perfectly. If ever Real Madrid or Brazil got a free-kick within 30 yards of goal, there would not be many volunteers to stand ten yards in front of it.
David Beckham
A master when it comes to set-pieces, Beckham is renowned for his marvelous ability to plant a ball in the back of the net. An unorthodox technique when striking the ball as his leg looks to twist, Goldenballs certainly developed an almost unstoppable solution to beating a goalkeeper and the wall from distance.
Brazilian number two on our list, Juninho Pernambucano is arguably the best taker on our list. Spending the majority of his career at French side Lyon, he scored an astonishing 44 free-kicks during his ten years in France.
Cristiano Ronaldo
A global superstar and fantastic footballer, he does not only have skills and open-play goals to his game. He is one of the most lethal strikers of a static football, and is the best player when it comes to putting sheer pace and power on the ball whilst elevating it over the wall, as he demonstrated against David James and Portsmouth back in 2008.
An all-round genius, he has always been able to float a ball effortlessly over the wall only for it to drop into a keeper's goal. David Seaman is one of many goalies that know this, after the Brazilian magician looped the ball over the former England number one from a staggering 40-yards at the 2002 World Cup.
DISCLAIMER: This article has been written by a member of the GiveMeFootball Writing Academy and does not represent the views of GiveMeFootball.com or SportsNewMedia. The views and opinions expressed are solely that of the author credited at the top of this article. GiveMeFootball.com and SportsNewMedia do not take any responsibility for the content of its contributors.
Do YOU want to write for GiveMeSport? Get started today by signing-up and submitting an article HERE: https://www.givemesport.com/writeforgms


text:
WASHINGTON — Consumers are growing more confident about the job market, companies are ordering more equipment, and home prices are rising in most major cities.
The latest government data suggest the economy is improving as the holiday shopping season begins. The main threat is a package of huge spending cuts and tax increases, known as the fiscal cliff, that will kick in unless Congress strikes a budget deal by year's end.
Rising home values, more hiring, and lower gas prices pushed consumer confidence in November to the highest level in nearly five years. And steady consumer spending appears to have encouraged businesses to invest more in October after pulling back over the summer.
Those trends could boost economic growth slightly in the final months of the year. But the real payoff could be early next year if the fiscal cliff is avoided. Businesses that have postponed expanding could move forward. That could lead to more hiring.
''Right now, households don't seem to be letting the fiscal threat control their urge to spend,'' said Joel Naroff, president of Naroff Economic Advisors. ''The first weekend of holiday sales was great, vehicle sales are holding up, and housing is strong.''
Reports on Tuesday showed:
■ The Conference Board's consumer confidence index rose to 73.7 in November, from 73.1 in October. Both are the best readings since February 2008. The index is still below 90, the level that is consistent with a healthy economy. It last reached that point in December 2007, the first month of the Great Recession. But the index has increased from the record low of 25.3 in February 2009.
■ The Standard & Poor's/Case-Shiller 20-city index of home prices rose 3 percent in September, compared with the same month last year. Prices gained 3.6 percent in the July-September quarter, compared with the same quarter in 2011.
■ Companies ordered more industrial machinery and other large equipment in October. Orders for core capital goods, considered a proxy for business investment, rose 1.7 percent,the Commerce Department said. That follows sharp declines over the summer.
One reason Americans are more optimistic is because they see the job market improving, the Conference Board survey showed. Employers added 171,000 jobs in October and more jobs were created in August and September than first thought.
The percentage of Americans who say jobs are ''plentiful'' rose to 11.2 percent from 10.4 percent in the previous month. That's the highest level in four years.
Falling gas prices are providing another boost. Gas prices have dropped from an average of $4 a gallon in September to $3.42 Tuesday, AAA says.
There are signs consumer optimism is leading to more spending. Shoppers spent an average of $423 from Thursday through Sunday, up from $398 last year. Online sales jumped 30.3 percent on Cyber Monday.
''Hopefully, their optimism is warranted,'' said Joseph LaVorgna, an economist at Deutsche Bank.
But if the fiscal cliff isn't avoided, they ''could be in for a rude awakening.''


text:
Friday, September 10, 2010
Interactive Interview with an Agent: Barbara Galletly
KV: How did you get into agenting?
BG: I heard about a job (at Georges Borchardt, Inc., where I still work) from a friend, working with a couple of French publishers (I studied French and translation in college) and a lot of authors I had read in college and was totally in love with, and--I can't remember this, but according to my boss--I gave an impassioned speech during which I declared that advocating for the kind of daring and serious books my agency represents was all I really wanted to do. I have always been a reader, and a hugely judgmental one at that, and I seem to have rather luckily stumbled into a job where my opinion means something.
KV: How would you summarize your personal agenting philosophy? What do you expect from an agent-author relationship?
BG: I guess it would still be the same as it was in the beginning. I think my job as an agent is to stand up for authors brave enough to write daring stories, to offer explanations that make us think as much as they give us facts. There's a lot of great writing, but I want to represent those books that aim to challenge the status quo and disrupt the way we might be drawn into thinking about it. Whether it's fiction or non-fiction, I think this is the kind of book that is most important. Publishers aren't always eager to take on projects that aren't easy, and that's what I'm here to try to change. Of course an agent's job is also to protect her author's rights before and after a contract is signed.
KV: What client work do you have coming out soon? What drew you to those writers and/or projects?
BG: I co-agented something over the summer that I'm very excited about--it's a novel called LAMB by Bonnie Nadzam, which Kate Johnson and I sold to Judith Gurewitsch at Other Press. This is a really beautifully told story about a man who does something terrible to a young girl, but the author is able to get the reader to empathize with this man.
KV: What genres do you represent? What genres do you definitely NOT represent?
BG: Literary fiction, narrative non-fiction, works in translation. No commercial/genre fiction or self-help, diet, business books.
KV: What query pet peeves and/or pitfalls should writers avoid when querying you?
BG: I don't like getting mass e-mail submissions! Especially when I can see the names of the other agents and their e-mail addresses…
KV: What are you looking for in a manuscript right now?
BG: I think it's important that a manuscript comes with an author who is dedicated to building a personal platform, who has more than one project in them and is looking for a career as a writer.
KV: What's the best way to query you?
BG: I know it's a pain, but if a letter or e-mail is addressed specifically to me, I'm much more impressed.
KV: How do you feel about a writer's including a few sample pages at the bottom of the query? Do you find that more assertive or obnoxious?
BG: I am happy to ask for the amount of material I would like to read (I will usually ask for three chapters if I'm interested). But if the text is already there, it does make life easy. So really, I think it depends on the query and it's fine either way.
Thanks, Ms. Galletly, for these responses. I was particularly drawn to your statement about wanting to represent books that challenge the status quo. I suspect that will resonate with a lot of us.
All right, now for the fun part:) You know the drill: Leave a question in the comments, and Ms. Galletly will answer it sometime in the next little while. This is a one-day-only event, so I'll be cutting questions off at midnight PDT. But in the meantime, have at it!
29 comments:
- Elena Solodow said...
Great interview!
For Ms. Galletly:
Was there a book in the past ten years that particularly challenged the status quo? And/or was there a book in your lifetime that really drew you into the publishing industry?
- September 10, 2010 at 10:16 AM
- Anne R. Allen said...
How refreshing to hear about an agent who is interested in literary fiction!
We're always told that literary fiction doesn't sell, and if you can call your novel anything else (like women's fiction or YA) you should do it. We're also told that if you haven't got an MA and/or a story published in the New Yorker or the Paris Review, you shouldn't try to publish literary fiction. Want to comment on that?
- September 10, 2010 at 10:22 AM
Elena, thanks for your question. I think the status quo evolves very slowly, but successful books that I see moving our attention in an interesting new direction are ones like Anne Carson's translations or her new NOX, or Paul Harding's TINKERS. Books that are different and challenge us to think more about why we read and what to read.
Oddly, the book that drew me into publishing was probably Anna Karenina. Reading that after high school, I realized for the first time (recognizing what a translation is, what it does, why we need it) that there are a lot of different factors that go into book publication. It's so cool to be able to take part!
- September 10, 2010 at 10:46 AM
Anne, this is certainly an interesting question! YA, "women's fiction," or even literary fiction are of course all labels that are helpful to publishers and bookstores marketing titles. Furthermore it's often genre books that sell the best because they find their audiences easily and authors have loyal fans. However, it's important to note that it's hard to make a name as an author in any genre, regardless of whether you eventually become a best seller. I think it's essential that you worry first about what you're writing, and worry second about what to call it since you rarely can control it. Additionally, there are lots of opportunities to start building a reputation in any genre, and that's important to work on. Get your work out to small journals, publish it for free every now and then, blog or tweet. Get yourself known to the people who interest you and who you want to impress, and you'll begin to create a niche for yourself in the place you really belong. I think the freedom afforded by the internet to publicize yourself is really helpful to literary publishing, and a lot of small presses are flourishing. They may not always be small, and you may well grow with them. In short, do the thing that's right for you and, with hard work and some luck you'll find success.
- September 10, 2010 at 11:04 AM
Oops. That last "Anonymous" was me...
I also wanted to add that labels, while helpful, are really always contentious. You've probably seen that there's a lot said lately about the fact that literary fiction by women often gets "maligned" as "women's fiction"--you may be hearing a lot of this in response to the overwhelming success of Jonathan Franzen's FREEDOM. But as Anne points out, and as remains the case, things that are easily placed in commercial categories are easier to sell.
- September 10, 2010 at 11:07 AM
Great interview! How would you describe the market for translation? Does your job as an agent change when the work originates in a different language?
- September 10, 2010 at 12:51 PM
Anonymous, thanks for your nice comment! The market for translation is an interesting one, especially because it seems to me that it's growing. There are some wonderful publishers that have always done translations, and a wonderful job with them (Grove, New Directions, Dalkey, Viking, University of Nebraska) and there are lots of new smaller presses that are also doing exciting book length translation projects (Archipelago, Three Percent, Ugly Duckling). There are still more examples of great publications and organizations, especially online, that publish and review translations (Words Without Borders, Complete Review, PEN World Voices, Granta, the millions I'm forgetting this second) that are encouraging growth in publication of translation. That said, Three Percent is named for the percentage of all books published in translation each year in the US... Let's say there's room for continued growth, and it's not always easy to find a publisher even for an amazing work in translation.
Translation deals aren't just different because they require different publishers (and editors who understand the original language, in many cases) though, they're also different for contractual purposes. There's an author (or, for many European books, the original publisher is the proprietor) and also a translator that must be taken into account, either initially or after the initial deal has been struck. When the two parties split the royalties, they each receive less at the end of the day. Or, if the translator is working on something like The Iliad or Don Quixote that's in the public domain, s/he's treated more like an author. I should also add that it's often the translator that finds a publisher and convinces him or her to take their project on.
I could obviously talk for hours about this, I'd be happy to talk to you further if you want to email me directly! email@example.com
- September 10, 2010 at 1:31 PM
- Krista V. said...
A question that has plagued me for years: Why is nonfiction so much easier to sell? Are there really that many more nonfiction readers than fiction ones, or is there some other market dynamic at work?
(As an aside, I think it's really interesting that you work with translations. I never realized how important the translator is until I was reading FAUST in college. No matter how good the original work is, the translation can only be as good as the translator. (And the translator of my copy of FAUST was good.))
- September 10, 2010 at 1:41 PM
Amazing interview! I really enjoyed reading your answers! I was wondering if Kindles and Nooks and iPads have had and impact on the publishing world? Also, are the determining what people are interested in writing or reading?
- September 10, 2010 at 2:03 PM
- Nina said...
I just hate those books that make you empathize for the offender, which also may be one of the reasons why I am completely drawn to them. The Norwegian writer Karin Fossum has a talent for that, and I've read all of her books. She is the only one I know who can evoke such feelings of sympathy in a human begin who doesn't deserve it at all, so I'd love to read a book where someone else has the same ability to do so.
Forcing you to love something you hate is something I consider as art!
No questions though, but good luck =D
- September 10, 2010 at 2:27 PM
How do you like editing?
How do you become an editor?
Have you written any books?
And if so, what are they about, and do you like writing books?
What kind of tales do you edit?
Such as novels, short stories,children's books, young adult, adult, etc.
Thanks for answering!!!
- September 10, 2010 at 2:38 PM
One more,
Anna Karenina was also a very exciting book for me. Are there any other books that have captured your attention in that way? Any suggested reading? Thanks!!! And wonderful reading your answers!!
- September 10, 2010 at 3:04 PM
It sound like you've got a lot of experience with book translation. If you have a book that you would like to have translated, how do you go about finding a good translator?
Also, in line with a previous comment, are novella-length books becoming more popular with the advent of e-readers, since the overhead of publishing a physical book is eliminated?
- September 10, 2010 at 5:00 PM
Hi Krista V. Nonfiction is easier to sell for a few reasons. Most importantly, there don't seem to be as many people who enjoy stories for the sake of stories as there are who want to learn about what really happened. It's sometimes said that people don't have time for make believe, or to make believe for a whole book. Some of us disagree!
More importantly, nonfiction books take advantage of current events and get great coverage in news media--books about politicians who have made mistakes or succeeded, about movie stars or rock stars, sports teams or particularly controversial competitions, are popular in the way tabloids and reality shows or exposes are. People want the inside scoop.
- September 10, 2010 at 6:03 PM
Emma Heins, I think this is a great question. Electronic reading devices have been great, in my opinion, primarily because they've gotten more people talking about books. There a lot of ongoing debates about which is better, what the devices should do and not do for the reader, how we should buy electronic books and what they should cost. And people are really trying them out! They're not just buying the devices, they seem to be buying more books.
I have an iPad, which is great because I can keep a lot of reading material in a relatively small and comparatively light-weight space. Two of my co-workers have Sony Readers, one has a Kindle. My boyfriend reads on his cell phone! And meanwhile book publishers are trying to take advantage of this. I think it's great that we will be seeing some books that contain cool images and videos, color, audio, and other special effects. Check out Electric Literature and other cool new publishers that are doing fun things with books that have really never been done before!
- September 10, 2010 at 6:11 PM
Esther, I am not an editor, but I love to edit! As an agent my job isn't as much a matter of correcting grammar and syntax as much as to help a writer refine and configure her essay, chapter, novel, or whatever we're working on, to best suit her vision for the piece. I work with writers of adult literary fiction and nonfiction including book-length and short works, but not with children's books or young adult stories and novels. I am not a writer (though sometimes I write poems) but I do like writing. Maybe you can tell by how long my responses to these questions are!
- September 10, 2010 at 6:21 PM
Anonymous, two favorite authors whose books have expanded my ideas about what books can do: Lydia Davis and WG Sebald.
- September 10, 2010 at 6:23 PM
Michaela G, Thanks for your question. I really hope I continue to gain lots of experience with translation! I think primarily I have found that one must explore--this is where the internet really comes in handy. But so far it seems to me that universities and graduate level literary translation programs are the best places to find not just great links, but also great translators to champion one's previously untranslated work. Students are looking for works to translate, and they may have greater access to funding that allows them to take on projects, especially experimental or "difficult" ones. Also, literary journals like Words Without Borders or Pen World Voices may be able to help because they have readers of many languages to help them.
Re: your second question, you're exactly right, length may become, and in fact seems to be becoming, less of an issue as digital books grow in popularity. Well, this may not be true of established writers whose novellas sell well already. But it seems to be true of new writers whose early works are shorter--it's no longer problematic to figure out how to publish and price and find a place on the shelf for a novella because of its physical size. Electric Literature, which I mentioned previously, is doing some novellas by previously unpublished writers--I wish them much success.
- September 10, 2010 at 6:46 PM
Hi Barbara,
I enjoyed your comments and am very interested in translation as an occupation. Is this filed predominantly focused on another language to English for the US market or is there a lot of demand in other languages/countries? What is the best school for this/specific degree?
- September 10, 2010 at 6:54 PM
- playgroupwithsylviaplath said...
Barbara --
Do you or your agency prefer authors to come with complete proposals ready to market, or do you like to be involved earlier in crafting of the package once the initial proposal is submitted. I have heard of agents working both ways -- and am curious what the right stage for approach is -- not too early, not too late (like Goldilocks porridge, I would guess).
Thanks. I found the discussion on genre fiction and narrative non-fiction particularly interesting.
- September 10, 2010 at 7:10 PM
- Myrna Foster said...
Thanks for the great interview!
Ms. Galletly, would you be interested in a memoir that was self-published a couple of decades ago and sold-out because the writer was known among respected aviators as a pioneer and inventor? I'm not trying to turn this into a query, but I do wonder how you feel about looking at projects that have been self-published. The writer I mentioned was my grandfather.
- September 10, 2010 at 8:48 PM
- Krista V. said...
Great questions, everyone, and awesome, awesome answers, Barbara. Thank you for all of these detailed and thoughtful responses. Tons of great information crammed into such a small space.
- September 10, 2010 at 11:13 PM
Wonderful interview!
Ms. Galletly, recently (and not so recently) literary fiction writers have been using speculative fiction to spin thought-provoking literary tales (McCormac, Atwood, for example). As a writer of what I consider fiction that cradle literary and commercial fiction with speculative elements, is this something your agency represents.
- September 11, 2010 at 12:57 AM
KayM, there is probably a greater demand for translators of English into other languages because there's a greater tendency for English-language work to be translated for foreign consumption than vice-versa. There's certainly a need for translations into English, but unfortunately there's not a lot of money in that pursuit for the translator. I'm not really sure about what the best school would be, though I know there are many interesting translation programs in this country and abroad.
- September 11, 2010 at 10:05 AM
playgroupwithsylviaplath, I think it's appropriate to have a proposal ready to go. If we have changes to suggest we'll certainly share those, but it's important to us to understand as much as possible about what you're going for before we get involved. We also need to see that you've put in a lot of hard work and that you're dedicated to your project before we get involved. After all, it's your story and will be your book!
- September 11, 2010 at 10:11 AM
Myrna Foster, thanks for your question. This is a difficult thing to assess specifically, but I think yes, it is difficult to find a new publisher for a book that is out of print and several decades old unless an editor felt a strong attachment to it or there was something in the memoir that was relevant or timely now. However, self-publication is getting more and more easy, efficient and affordable, and this is a great way to make a book available again especially when it's already written and ready to go to press. If your family members and peers of your grandfather are asking for copies, print-on-demand, e-book or one-time print run editions all sound like good options. I wish I could be more helpful with particulars!
- September 11, 2010 at 10:33 AM
Ken, thank you! I think it's important to consider a work on its own, and to think about previous and continued successes and failures later. I would definitely be happy to read and let you know what I think!
- September 11, 2010 at 10:36 AM
I have had a great time with this Q+A, thanks to all for your comments and questions.
But most importantly, Krista V., Thank you so much for having me here! It has been a real treat.
- September 11, 2010 at 10:38 AM
- Krista V. said...
I'm glad, Barbara. You're welcome anytime:)
- September 11, 2010 at 9:34 PM


text:
Hikari Cichlid Gold contains special color enhancers designed to bring out the natural beauty and proper form of cichlids and other larger tropical fish. We utilize the highest grade of ingredients formulated in exacting quantities to produce a food that will bring the brilliant colors of your fish to life!
Dog Supplies | Cat
Supplies | Fish Supplies
| Bird Supplies | Horse
Supplies | Reptile Supplies
| Small Pet Supplies
| Cattle Supplies | Reviews
| Related Stores
Copyright © TSCPets.com All Rights Reserved.


text:
Driving innovation in the field of shapes forward.
Its a ROUNDED rectangle.
I wrote the innovation in allcaps so you wouldn't miss it.
I am still trying to work out what happened in the actual court.
"I think these two pictures look the same"
"Yeah, I think so too"
"Court is adjourned"
Surely you hardly need more than a few minutes.
I have an Acer Iconia tablet and my wife has the early Samsung 7" tablets. The reality is that the Samsung tablets are a ripoff of the Apple tablets. Look at the ports, Oh wait there are none (unlike most Android tablets). What about the connector? Oh wait it looks just like the Apple (even though most android tablets are not like that). The reality is that Samsung is ripping off the design of Apple...
While there is probably some truth to the notion that Samsung took the best external design elements of the Ipad for the Tab, it's sort of ludicrous to ban their product because of it. The underlying principle of the law in the US as I understand it is that Samsung can't sell something that confuses buyers into thinking that they are actually buying an Ipad. I imagine that the basis of the German law is similar.
I am quite surprised that Apple actually won this case, and dare I say that I think Apple is prob
The underlying principle of the law in the US as
Yes, but this is Germany.
What is the underlying principle of the law there?
The underlying principle of the law in the US as I understand it is that Samsung can't sell something that confuses buyers into thinking that they are actually buying an Ipad.
No, german law (and that means the rest of the world except of the US; obviously) is not similar.
If you "invent" something and give it a "unique" look and feel, I can not just copy "your" look and feel.
As a matter of fact I have not much clue about this law suit (I have more important stuff to do). But it embraces how less clue most
Damn those pesky facts, they always get in the way of a good argument!
That's OK, at least German court has a proper lack of respect for facts. They don't let facts push them around, no siree.
Such as?
That's generally what happens to me-too players in a fiercely competitive new market, at least if the first movers are aggressive with IP. I'm not defending it, just saying it's how the world works.
I read about this originally in this Techcrunch article:
http://techcrunch.com/2011/09/09/apple-ftw-german-court-upholds-galaxy-tab-10-1-sales-ban/ [techcrunch.com]
In it, they link to the design in question, Community Design 000181607 for the iPad:
http://www.scribd.com/doc/61944044/Community-Design-000181607-0001 [scribd.com]
Look at it! I mean look at it! It is literally a rounded rectangle with a screen on the front! I'm not even exaggerating. Look at it!
I realize you're trolling this story making a ton of posts (10 at the time of my post, all trolls) ridiculing anyone that has bad things to say about Apple, but your response is completely nonsensical to mine, making it not even an amusing troll.
The judge obviously did see this document, as it is purported to be the Community Design (what people are calling patents) in question around which this case revolves.
The judge has decided that, "Apple's minimalistic design isn't the only technical solut
Look at it! I mean look at it! It is literally a rounded rectangle with a screen on the front! I'm not even exaggerating. Look at it!
Wow! This makes all the dumb patents look insignificant.
I'm going out today to register rectangular bricks. I'll be able to sue every builder in the world for using my design.
I came across this yesterday and found it interesting (comparisons of what Samsung's tablets looked like before and after the iPad came out):
It seems like it's not quite as silly as it's usually been presented. (Don't get me wrong, I do think it's silly.)
golly, a phone-call icon that has a phone handset on it. a notebook icon that looks like notebook paper. contact information that looks like a head-and-shoulders of a, um, contact.
apple sucks. they do evil.
Did they say anything about how it feels? Maybe if they'd ignored feel in the first place they'd have put Microsoft out of business in 1994.
Can anyone tell me why this isn't prior art?
http://techcrunch.com/2009/07/04/crunchpad-prototype-coming-this-month-be-available-asap/ [techcrunch.com]
http://techcrunch.com/2008/07/21/we-want-a-dead-simple-web-tablet-help-us-build-it/ [techcrunch.com]
My monitor could be prior art. Its a rectangle with rounded edges so I don't cut my hand against the edge when closing the laptop lid.
Because, despite many misleading headlines and voluminous nerdrage, this has never been about tablets in general. Apple didn't sue Samsung for making a tablet. Apple sued Samsung for making a tablet with some very specific features and designs that they claimed were stolen from protected Apple designs. After looking at the case, the courts have agreed that those very specific features were indeed used improperly.
But all the headlines are "Apple claims they own all tablets" and then we get posts like yours.
Care to toss me a link to an article listing these very specific features?
Apple claims to own rectangular tablet computers with rounded corners and cameras on the front that can be used in portrait mode. If that doesn't just about cover all tablets what does?
Everybody had those on Deep Space 9.
Do they? Is that the complete court filings compressed into one sentence? Where did you read the court filings? (And doctored documents posted by bloggers do not count as court filings.) Is it possible Slashdot posters and the judge have different sources?
Apple claims to own rectangular tablet computers with rounded corners and cameras on the front that can be used in portrait mode.
Interesting, considering that the first iPad didn't have a front-facing camera, and those of us who thought that was a ridiculous oversight were called Apple-hating trolls and told that a camera would be a useless addition.
What, you've never complained about a missing or broken feature in an Apple product before?
My favorite is still this forum thread [ipadforums.net] where a guy is complaining that he's using "hun" to address his girlfriend, and iPad email and chat apps always capitalize it; so he was asking for a way to add his spelling to the spell checker dictionary - and, apparently, it is simply not extensible in iOS. The advice he got from a resident Apple fan:
"call her something else besides hun? Honey? Baby? Babe? Seems like an easy f
Supplying components to Apple != being involved in Apple's manufacturing process.
And from conception it was supposed to be a big iPod Touch anyway, so they're still copying Apple.
Can anyone tell me why this isn't prior art?
http://techcrunch.com/2009/07/04/crunchpad-prototype-coming-this-month-be-available-asap/ [techcrunch.com] [techcrunch.com]
http://techcrunch.com/2008/07/21/we-want-a-dead-simple-web-tablet-help-us-build-it/ [techcrunch.com] [techcrunch.com]
I know people seem to forget things, but around that time the rumor mill was in full gear speculating that Apple was creating a secret "tablet-like" device. I believe it all started with this patent: Apple Reveals Secret Notebook Tablet [patentlyapple.com]. The patent was revele
Too bad Apple can't sell their iDevices on their own merits, rather than snuffing out the competition!
I hate those guys - Indiana Jones
Illinois Nazis.
-Elwood Blues
I hate Illinois Nazis.
-Jake Blues
According to the story Samsung Germany is appealing the decision so it's probably not "final". In addition, the ruling only bans Samsung Germany from selling into the EU marketplace; other Samsung divisions can sell into it.
Who would have thought that, in 2011, we would be complaining about the damn German Capitalists ruining Europe?
I guess the old motto still holds true: if you can't beat 'em, join 'em!
I would've thought by now we'd be pissed that the people on Ganymede were running an unobtainium cartel and driving up the price of telekinesis.
But, it's still Germans. And not one flying car.
The Apple Defenders are cracking me up defending this.
The judge had the gall to say "The court is of the opinion that Apple's minimalistic design isn't the only technical solution to make a tablet computer". Seriously.
If you don't understand how absolutely ridiculous that is, the idea of a "minimalistic design" (even if you then go into details about silly things like rounded corners, no buttons, etc...) as something you can own, then there's simply no hope for you.
Germany's a bit nutty anyway, so I don't put too much stock in it. Worst case Samsung should just add a little button somewhere, change a few angles here or there, and resell. Then it can continue the slow domination of Apple again.
The Nike "swoosh" is also a "minimalist design". Yet if I make a logo that looks almost the same, except I put a pink dot in the middle of mine, Nike are still going to haul my ass to court.
If it is a logo it is by definition without function, and has no place in a minimalist design.
Apparently, Samsung's lawyers are not that bright.
From any other angle it looks wildly different than an iPad.
http://photos.appleinsider.com/samsungvsapple.003.082411.jpg [appleinsider.com]
This is why anti-Apple sites only show you the front of the frame, to make you think the whole thing looked like an iPad. The patent does not just concern the front, but the whole design together, which must be copied in order to get an injunction. And that's what Samsung did.
I take it this "solandri" dude contacted the Samsung legal team with his amazing discovery?
Then what was the point?
http://www.roughlydrafted.com/2011/08/23/samsungs-digital-picture-frame-was-no-ipad [roughlydrafted.com]
Based on what the judge wrote, it sounds to me like he has his hand in the Apple's cookie jar.
OS News [osnews.com] has more info on this.
Whoever controls Gene Roddenberry's estate should sue apple. [wikipedia.org]
My understanding (but IANAL and my German is poor) from the judgement http://www.lg-duesseldorf.nrw.de/presse/pressemitteilungen_ab_2009/13-11.pdf [lg-duesseldorf.nrw.de] (small PDF) and also from this article http://www.chip.de/news/Galaxy-Tab-10.1-Verkaufsverbot-endgueltig-bestaetigt_50819592.html [www.chip.de] is that this is not a decision on the patent, but simple the rejection of Samsungs attempt to have the provisional injunction lifted. The real case is due maybe mid-2012 !
Shhh. That kind of perspective is not welcome here. It's all about the outrage and gnashing of teeth, mere facts shouldn't get in the way.
This is the problem with the courts.
An provisional injunction that prevents you from selling something for a year is effectively a judgment. What, is the court going to say Ok, we were wrong, Samsung can go back in time and sell their tablets? No, they'll probably say "ok, in 2013 you can go ahead and sell your 2011 tablet" when the product isn't even being manufactured any longer...
Archos 5 Internet Tablet was released September 15th 2009 with android Apple iPad April 2010. Archos should sue Apple to block the iPad in Europe. Jobisan Fanbois starting to see how this could get out of hand? no? figures
This process can check if this value is zero, and if it is, it does something child-like. -- Forbes Burkowski, CS 454, University of Washington


text:
Ardrossan is a town in Ayrshire in Scotland.
Get in
Most people coming here are only transiting through to get to the Isle of Arran.
By road
From the south, the A78 now by-passes Irvine, Stevenston and Saltcoats so Ardrossan is a lot easier to get to. A recommended route avoiding the traffic lights is to stay on the bypass until you pass Ardrossan, turn left and then turn right at a public toilet, following the coast. Stay on this road and then turn right at the crossroads at Princes Street.
From Glasgow, the M8 takes you to Glasgow Airport and at the Airport, the A737 signposted Irvine and going through Dalry is the best route.
Even though the bypass has been built, the main roads around the town centre can be clogged with ferry traffic, especially in the summer, so watch out. Extensive long term parking is available at the Harbour.
By train
Good train service from Glasgow, with stops in town and at the ferry docks. As of January 2009 at least one of the signs at South Beach station is full of bullet holes...
By boat
From the harbour, you can catch the Cal-Mac ferry to the Isle of Arran.
By plane
The nearest is Prestwick Airport. Also convenient is Glasgow Airport.
Get around
Shanks pony is the best way to get about or take the bus. Or one of those new fangled car thingies
Go to the Isle of Arran. Or go to Auchenharvie Leisure Centre on the 11 bus.
There is a good chippy, Alberts fish and chicken bar only 5 minutes walk from the ferry terminal (they do excellent chips!). Or try one of the best chippys ever the Cafe Palazzo at the top of the street. They also offer a sit down service, an extensive selection of sweets and newspapers. Don't forget the happy kitchen and the new italian restrunt doon the harbour (sorry marina aye right its the harbour) Chechi
a lot charlies the caslthill vaults the lauraston(for the rich folk)
Free internet access at the library, with pleasant foreigner-tolerant librarians.
Or go doon the Harbour and use the free internet doon there they have a free wifi set up doon there.
Get out
As soon as possible. There are 6 roads out of the town, the train to Glasgow and the ferry to the Isle of Arran. So why the bloody hell do folk want to stay there I do not know. (Could be worse right enought you could stay in Stevenston)