text:
I wanted to take look at Grunt for a while now. Finally, a couple of weeks
ago, I ran into a problem that I couldn't overcome with NPM and its scripts
section alone. The right time to check out Grunt, I thought. Has been too long
on my TODO-list.
The problem I had to handle was: deployment of a node project to my dev server.
And I didn't want to rely on git hooks or CI for this. I wanted a script I
could call that uploaded everything to my dev server via ssh, ran npm install
and restarted the application (more on this in a seperate post later).
After googling for "deploy grunt" and reading through the gazillion results, it became quickly clear to me, that I wasn't the first person that wanted to try and do this with the help of the boar (or whatever this thing is). I installed about every grunt plugin I could find but none fit my needs exactly … so what now? Fork another plugin and adjust it to comply with my requirements? Write my own plugin from scratch?
No, no, no. I might want to reuse this later on with a different server (no ssh) or deploy a frontend-project (not a node one) and would have to update/extend the plugin to accomodate this. Most authors of the aforementioned plugins have done exactly that – they wrote a plugin that did what they needed 100%. But because we as developers are very biased and only want to do it "our way", these plugins are all the same but at the same time different. And, of course, I didn't like a single one of them :).
Ok, so no plugin. What then. I decided to write a simple Grunt task that used other node modules (not Grunt plugins) to accomplish everything I needed. In this, I could reuse code that others had written – maybe not for this use-case but as a standalone module that was so granular that it "only" solved one problem but that perfectly.
Don't write plugins that try to solve too many problems at once.
Write small modules that run in all kind of environments and solve exactly one problem. This way, others can use your code – even in scenarios which you haven't been thinking about while writing the code … this is a good thing.
Funny enough, a couple of days after my first stint with Grunt, I listened to the JavaScript Jabber podcast and they were talking about Gulp (and Grunt, of course) with Eric Schoffstall – one of the developers behind "the streaming build system". It was really interesting and you should definitely go and listen to it (after you've finished reading the post).
I don't want to talk about performance or other important reasons why A is better than B, but there are two things – in my eyes – Gulp (or the Gulp community) does better than Grunt:
1) There is a curated plugin list
So, we're curating it. We don't just come out and say, "Oh this plugin sucks. We think it's stupid. You're not allowed on our website." But we do say, "This plugin doesn't work," or, "It has too many bugs. It just shouldn't be a plugin. And those are our requirements."
So there shouldn't be duplicate plugins or plugins that wrap some functionality you could use directly via its node module
2) Recipes instead of too many plugins
[…] we actually have a section of docs called recipes. And these are just, "Hey, I used Mocha with Gulp. Here is a task that I used it in and let me explain why I did a couple of things." So that way, people can just say, "Okay, I want to use Mocha. Let me go look at the recipes and go find one for Mocha." And it'll explain in-depth why they did what they did, how to use it […]
If there is a problem you solved by using already available node modules, share it with other devs that might get stuck at the same point. But don't do it writing your own plugin – write a small HOWTO instead.
Don't write code that can't be used outside of Grunt/Gulp
]]>Fun fact: You can check who added what link by checking the commits.
]]>Accessed information included usernames, email addresses, mailing addresses, phone numbers, and encrypted passwords. Actual passwords were not revealed, […]
Good to know, that they didn't store the password in plain text but encrypted the most sensitive data.
You see, in today's world it is very important to make sure that an attacker, after aquiring your user data, isn't able to just know you password and:
1) log into your account
2) more importantly – use the password for other services with which he/she
could really "harm" you
[…] however it is possible for a malicious person with enough computing power to guess and crack an encrypted password, particularly a weak or obvious one.
That's true – even when using encryption. So, we as developers have to make sure that this process of "computing" or "guessing" takes as long as possible (and has to be repeated for every password).
I can remember my first attemps at server-side user-management with PHP 13-14 years ago. I just stored the user's data like this:
---------------------- | user | password | ---------------------- | phil | topsecret | | aron | notsosecret | ----------------------
The user sent the data via POST
to the server where I would compare the password he/she just entered with the password stored inside my database like this:
// don't do this if ($_POST["password"] === $row["password"]) { // grant access ... }
If the user ever forgot his/her password, I could just get it from the DB and resend it via email :( – a really bad idea! But back in the days I didn't know better.
Rule #1
Never save passwords in plain text
Use a hash function to store the password securely. Hash functions are one-way algorithms that turn your plain text password into a totally unrecognizable number and letter combination. Plus they produce results that differ completely even if the input is almost the same.
The following snippets are JavaScript because our last project was a node.js project – but these functions are available in other programming languages as well.
You get the idea …
But this is not enough. If we save the once hashed password into the DB, hackers can use methods like "dictionary"–, "brute force"-attacks, lookup– or rainbow-tables to "guess" your password. It'll take some time, but they will get there – and even faster if the original password only contains letters from a-z.
Rule #2
Salt your password before saving it
Hashing function always produce the same result if the input is the same. You
can run the code above as many times as you like, the result won't change.
Two users with the same password would get the same hash, which makes it easier
for an attacker because he/she can use lookup- or rainbow-tables to "decrypt"
your password.
Appending a random string (a salt) to the password makes this impossible.
I don't know if they still do, but in a previous version wordpress used the
hashed SITE_URL
as a salt for every password – not good. You can do better
than that.
Create a new salt everytime you store a password in the database – never reuse an old one. And don't make the salt to short. It gets harder to hack the longer the salt is.
var crypto = require("crypto"); var salt = crypto.randomBytes(64);
If you don't use the same salt for every password, you have to store the salt in the database as well. Either in a seperate column or add it to the password as "metadata".
------------------------------------------ | user | password | ------------------------------------------ | phil | <hashed password + salt>:<salt> | | aron | <hashed password + salt>:<salt> | ------------------------------------------
Salting the passwords prevents hackers from using lookup-tables to gain access to your passwords quickly but with up-to-date hardware they can use "brute force" to generate billions of hashes a second and compare them with the hashes you stored in the database.
Rule #3
Use "slow" hash functions
This may sound strange but another method to make sure it'll take attackers more time to hack the passwords is to use an encryption algorithm that takes it time to produce a result. This reduces the number of hashes a hacker can generate to a fraction of the number above.
PBKDF2 is a good choice for this.
Storing the encrypted password
Retrieving the encrypted password
Hope this summary helps and makes your next project a bit more secure (than it already is).
]]>YMNNJ is a collection of vanilla JavaScript snippets that can (more or less) replace some often used jQuery built-in functions. Zack Bloom and Adam Schwartz, the guys behind YMNNJ, want us to think twice before using a (big) framework/library like jQuery:
If you're developing a library on the other hand, please take a moment to consider if you actually need jQuery as a dependency. Maybe you can include a few lines of utility code, and forgo the requirement.
I totally agree with this statement. You should pause and ponder before using something like jQuery (or e.g. Modernizr), be it in a library or any other project you are doing. It comes with a cost that you definitely should be aware of.
Tim Kadlec also wrote a post and sums up the performance hits pretty well:
This is concerning, but it's not just download sizes that you should be worried about. In a presentation given at Velocity in 2011, Maximiliano Firtman pointed out that on some phones (older, but still popular, BlackBerry devices for example) can take up to 8 seconds just to parse jQuery. More recent research from Stoyan Stefanov revealed that even on iOS 5.1, it was taking as many as 200-300ms to parse jQuery.
But jQuery isn't all bad, of course not. Fittingly, Webplatform Daily posted a link to a list by Rick Waldron of all the quirks jQuery fixes for us developers that need to address as much devices/browsers as possible. Try fixing (or even finding them in the first place) them in vanilla JS by yourself.
So, if you're aware of the "downsides" of something like jQuery but decide to use it anyway (because of all the "upsides" it includes), it's totally fine. But think of ways to use it responsibly.
Again taken from Mr. Kadlec's post:
[…] some of the devices we needed to test on couldn't load the page at all if jQuery was present — it was just too much JavaScript for the device to handle.
In one of our last mobile projects we decided to rely on jQuery for all the more
fancy things we wanted to implement. Features that the older phones couldn't or
shouldn't cope with because they would crash or suffer devastating performance
hits that would keep the users from navigating the site. Using
Progressive enhancement and a technique like the BBC's
"Cutting the mustard" allowed us to only deliver JavaScript (including
jQuery) to the more capable devices – avoiding to make your beloved
Blackberry explode :)
In addition, the user only had to download HTML, CSS and assets to view the
page, which saved about 40-50KB of transfered data and some JS parsing/execution
Tim's closing paragraph:
I'm not saying that we stop using libraries altogether—and neither were the people who created "You Might Not Need jQuery". I'm suggesting we make that decision with a great deal of care.
]]>So we developers take care of:
Each of the points above will improve your site's performance – sometimes more sometimes less, depending – of course – on your site and its structure/content.
In one of our last projects we took this to heart and wanted to deliver a beautiful and fast mobile website (m-dot-domain, so it was really only mobile). We're not talking about the "under 1 second to screen" scenario, but rather a smooth surfing experience using a 3G network. Let's say something like 1-2 seconds until "start to render" and ~10 seconds for "loaded".
Starting with HTML templates/components that – if needed – get progressively enhanced was a good foundation for this. With dummy content filling the HTML, this is a breakdown of the filesizes (gzipped) by type:
Putting JS at the bottom of the <body>
made the browser only wait for the HTML
and CSS before beginning to render the page. Sadly, because we're using
webfonts, it begins rendering the content without displaying the text. Only
after the webfont is downloaded, does the text become visible – in my eyes
webfonts' biggest disadvantage.
I used my slow vServer to get this waterfall, so an optimized setup with an additional CDN (like the live-server) should be even faster.
As we can see in the waterfall above – "start render" lies somewhere between 2-3 seconds and the webfonts are loaded a second later. This way the user should be able to start reading after 4 seconds. So far, so good.
This is also the moment the JS is loaded (async) and executes. Some of the
components "change" a bit because of the progressive enhancement kicking in but
nothing so serious that it'll annoy the user too much.
And this is only for the user's first visit – the second time the cache will be
filled with our CSS, JS, images and fonts and the page load time should be even
Because our client uses a big fancy CMS, this is the point where we bundled up our assets and handed them over to them. Their developers had to integrate our templates and scripts into the colossus that is their CMS and most of all, they also had to add things like:
From here on out it got messy …
Tracking shouldn't have been a big problem, you might think. No, it usually isn't.
But they had to include more than one tracking-script and not at the bottom of
the document but the head (I think we could check and move them to the bottom,
though). These are mostly small scripts that load fast but every request hurts
on mobile.
There are services like Segment.io but they are US-based
and we Germans don't like to send our data across the pond ;) Besides, I don't
think they support german newspapers' most important tracking-provider IVW.
Nonetheless are these kind of services a great tool for improving your website's
performance: one call instead of two or three every time you want to track
something = big win!
On to advertisement. Because our client offers all its content free of charge,
ads are the only source of revenue they got. So these are important and we have
to make sure they are loaded and displayed correctly.
The setup gets even more complicated because the client uses a "middleware" that
is based on DoubleClick as the technical foundation – leading to more and more
scripts that have to be fetched from different servers (double ouch).
DoubleClick offers an <iframe>
-based "async" version of the GPT but we
can't use it because the different ad-formats won't play well with iframes =
even more synchronous JavaScript stopping the page from being rendered :(
Most of the time the first ad is located on the top of every page, so the aforementioned
scripts have to be loaded before this (in the <head>
). Not 1, not 2,
but 4 (in words: FOUR) scripts are loaded before the custom initialisation is
run and the first ad can be displayed on page … ah no, I forgot to mention
that every ad loads one or more JS files to get the content they
All these tracking and ad scripts push the "start render" back 4.5 seconds which
leads to readers looking at a blank screen for 8 seconds. If you're
lucky, they haven't left the site when the content starts trickling in.
I'd also like to point to the fact that the webfonts are loaded long after the
"start render" at around 13 seconds which means that even though the browser
starts to render the page, copy isn't displayed until they are downloaded
Let's take a look at how this changes the page's waterfall:
Concluding points 1 and 2 we have to realize that many 3rd party content providers just don't care about performance – at least not as much as we developers would like them to.
The last thing I want to talk about is point 3: real content.
In our case we built templates for a home-, overview- and article-page using
dummy copy and images that nearly reflected real-life content (at least the
amount we thought made sense considering our performance budget).
The client was in too much of a "desktop-mode" and filled the landingpage with
everything that came to mind. So we ended up with around 50 article-teasers and
multiple more complex gallery widgets etc.
I don't say that it was there mistake (alone), we should have sat down with them more often and talked about how peformance is a feature and how it (sometimes) is more important than an abundance of different content elements put on the same page.
Points 1 and 2 destroyed our time to first render and 3 let the page get way too heavy for a "smooth surfing experience using a 3G network".
Let's not bury our heads in the sand and instead learn from a project like this. But sometimes complaining again and again is enough to make all those shitty 3rd party widgets/scripts improve. At least I hope so.
]]>Maybe we got something you haven't read/watched before:
Blogging with Jekyll + S3 + CloudFront
Quick Tip for Easily Deploying Octopress Blog on Amazon CloudFront
One open thing was to enable gzipped content. Zipping is certainly the most obvious performance optimization. Usually the webserver takes care of it, but we don't have a webserver here. We have a CDN and like every CDN CloudFront doesn't "process" request, it just serves files. Meaning that by definition it does not compress files when requested by a client. However that only means that we need to create zipped files when we deploy the Octopress files. A very good starting point:
I made some modifications regarding CloudFront. Also rename
is not available on OSX so I changed it around a bit.
But with all these advantages there also come challenges. One is positioning inside the book. So what to do, when you want to save the user's current reading position, so that he can continue on the same "page" when he comes back? Since the user can read the text on different devices with different screen resolutions and different text settings (e.g. font size settings) you can not simply save "Page 36″.
If you just want the rough position (i.e. no certain text) the plain percentage is a way to go. The monocle framework (that we use at Nimbi and PaperC) does exactly that. It saves the reading position by dividing the current page number by the total number of pages (base on the rendering on the current device). On a smartphone the user might be on page 50 of 100 pages total where he is on page 6 of 12 pages total on his desktop browser. Both lead to roughly the same position.
We must be aware that there is a certain cognitive load for the user to find his actual last sentence on a page when changing devices or even changing from portait to landscape mode on his tablet. We have no chance to save the actual last words the user read.
When it comes to saving annotations we need something more accurate. The user wants to highlight a certain sentence. We need a way to save the exact text so we can allow the user to navigate to that text directly and visually highlight the text.
Just saving the selected string as text and do a full text search when trying to find the string won't do the job, since finding the actual word is impossible when the user selected a word like e.g. "and". So together with the actual string we need at least an offset from the beginning of the text (which is usually a chapter in ebooks, also called component).
This is a typical way to deal with search results. Search engines usually deliver results based on full text search. When they index a HTML document they strip away all markup leaving the text only. So what they can give you is the found string and an offset (numbers of characters) from the beginning of the document. A result for a term like "and" (which is usually a stop word in search engines) will contain different offsets for the same term.
The bad news is, that in order for the offset to be accurate, you need to make sure that your local text-online version of the HTML document is exactly the same as the one your search engine indexed. You need to know exactly how/if the search engine converts linebreaks to spaces and how the search engine deals with spaces/linebreaks between DOM nodes (and other things). And then you have to apply these rules to the implementations on your client.
To avoid the "offset-hell" you could tell your search engine to deliver an index of the appearance in the document instead of an offset. Assuming you have three appearances of the term "and" the search engine could deliver the index 0, 1 or 2 to a result dataset. With that you are always certain which term you are dealing with.
Either way it's not trivial to first convert the markup to text-only and then, after you found the term, find this term back in your DOM tree. Also note, that operations on huge amounts of text can be CPU-intensive, especially on mobile devices.
Back to the case where a user wants to highlight a portion of text. Why not letting the DOM help us a little. We can make use of the Range obj.
"The Range object represents a fragment of a document that can contain nodes and parts of text nodes in a given document."
That seems like the perfect fit for our use case. And it is! While it's not supported by every browser environment it is well supported on engines that are typically used for displaying ebook (epub) content. For our "and" example it would look like this (jQuery pseuso code):
The range of a more complex text (that runs over more that one DOM node) could look like this (user selected "Prejudice is a book"):
This is a good starting point for describing fragments of text embedded in html. If you want to locate the visual position of this range you can call
For saving the dataset to the backend we need a string representation of the DOM elements. Different approaches are possible. As XPath it could look something like this:
Or, if you don't want to rely on elements to have id's or classes:
Yap, in Xpath the index starts with 1.
However, for Nimbi and PaperC we tried to keep the data smaller (it's potentially big data, right?) and query language agnostic:
startContainer and endContainer are the first textnode in the frist childNode of body (i.e. body.childNodes[0].childNodes[0]). The dataset is smaller (less to send over the wire and to save in the db) and – more importantly – it does not rely on XPath. While XPath might not be the bottleneck in this kind of application, it is known for not necessarily being fast, especially on mobile devices. And there is no XPath on Android < 2.4.
Here is an example of a more complex DOM tree:
This pretty much solved the position issue for us.
The position is 100% unique. You'll find the fragment no matter the screen size or font settings. You can even save the position of a single character.
It makes use of the most basic HTML. The DOM tree was there since Day 1 of the HTML standard. So even the oldest and most outdated html parser should be able to find the fragment.
It's query agnostic. You don't need XPath or other stuff.
Very small data footprint.
Since the position is described in a DOM tree, the backend needs a XML/HTML parser to "understand" the position. Asume that you want the backend to create a "heatmap" of the book, where the users set highlights, where they stopped reading and so on. The backend will have to convert the position to it's own positioning format (if it is not using the DOM tree in the first place).
Also the implementation relies on a valid DOM. Epub components (a html chapter of an epub) are typically XHTML. If they are not served with mimetype application/xhtml the browser will fall into quirks mode. When you now have DOM elements that are only valid according to XHTML they will not correctly hook into the DOM tree. Since we are using a numeric tree representation (e.g. 12/0/4/0) one invalid DOM element can mess up the whole tree and we won't be able to find the elements. While this may sound scary, setting the correct mimetype will fix the issue entirely.
Eventually we decided to also use this approach to save the user's last reading position. We now save the first character on a page as the current reading position. We thought back and forth if we might should take a character somewhere from the middle of the page. However with the first character approach we can be sure, that the user always sees something that he has already read, so that he can easily find the last read sentence.
Well, the hard part is – of course – to let the user select text (hint: window.getSelection()) and to visually highlight text fragments. But this is something for another blog post… :)
]]>Dear JavaScript pros: This is a blog post for beginners. So don't shoot me for simplifying things.
Many developers (especially from the Flash / ActionScript community, but not only them) are currently wanting to "learn" HTML5. Some want to focus on websites, others want to build (single-page-) apps. Some want to do shiny advertising'ish projects, others want to focus more on "products". And many say, that therefore they need to learn jQuery now.
When someone asks you if you're into jQuery, just confirm. Chances are, that clients/employers won't mind to ask, since they assume that you do.
My prediction is, that you'll use 10 jQuery methods max in the beginning. When starting with jQuery, using jQuery is mostly understanding HTML and CSS (you understand HTML and CSS, right?). Anyway, api.jquery.com is your friend. In a year from now, you'll probably laugh about your jQuery code, but that's ok for now, you have bigger problems.
Backbone enables you to write a class-like code structure, that fulfills all the aforementioned criteria. And – most importantly – since it so widespread many people already know it. For me, working with backbone made working in big teams possible (you want to work in big teams, right?). There are many other frameworks out there, lots of them with a strong feature set. However, what I like about Backbone that it does not have a big feature set.
While understanding require is quite straight forward (the documentation will do), the learning curve of backbone is harder. Try to avoid the famous ToDo list example. It gives the impression that backbone applications are always big and/or complicated. The truth is backbone can be extremely simple. Start with something waaaaay simpler.
Other things you might want to check on github:
* HTML5 Boilerplate (especially the .htaccess file is very interesting)
* Twitter Bootstrap issues
* Modernizr
* Good list of things to look into
With the never webkit builds on iOS5 and Android ICS finally overflow:scroll works as expected. On iOS you also have the "native" scroll bounce, which is huge IMHO (with bounce I mean the ease when the scrolled viewport reaches the top/end). The app finally feels native, a big step for web apps.
It wasn't the sluggishness and weak performance of iScroll and scrollability I was mad about, it was the wrong implementation of the bounce physics. I was always able the tell the difference of a native and a phonegap app by checking scroll views.
Check example 1 (with iOS5+ device or simulator)
The magic happens with this line.
Without you would still have a touchmove scroll with one finger, however the "native" bounce comes with -webkit-overflow-scrolling:touch. I notices however one thing that differs from the native scroll. When the content to scroll is on top (e.g. you can't scroll any further up) and try it anyways, the touchmove bubbles up. Try example 1 again (with iOS5+ device or simulator) In this case it bubble to the top window object which then will scroll the browser chrome. While this might be an expected behavior, it still feels not very native. Let's fix this.
Check example 2 (with iOS5+ device or simulator)
When you try the same here, you'll notice that you can drag the scrolled content with the expected physics. This feels, well, simply amazing. I have been working with all the JavaScript scroll implementations for such a long time now and now it's finally native. Yeah!
So how is it done?
Notice that in the previous example you can still scroll the browser chrome? Try it by dragging (touch moving) the grey background. If you have a web app (instead of a website) you might want to disable the scrolling of the window viewport entirely.
Check example 3 (with iOS5+ device or simulator)
Listen to the touchmove event on document level and prevent the default behavior. With this setting alone scrolling would be disabled globally, also in the overflow div. That why you need to set another touchmove listener to the scroll div and stop the bubbling. This event then will never reach the document object.
Or, actually not so edge. Check a variation of the previous example (with iOS5+ device or simulator) where there are not enough item for the div to be scrollable. When you try to scroll you'll notice, that the browser chrome scrolls. Not good.
Here corrected example 4 (with iOS5+ device or simulator)
However, it adds more markup and more JavaScript. I would appreciate a smarter solution.
]]>… unless you know what you do.
Since I started programming I have always been fighting with "strange" code comments. Everyone told me I had to document my code. Also I wanted to be a good citizen and make it as easy as possible for my co-workers to understand my code. On the other hand there was always so little time. And writing good comments takes time. Also I understood that when the codes changes I also have to update the comments (even more time consuming). Plus I was not sure what to comment. Every line? Every method? Or a summary of the class in the header?
When I got better at coding I noticed that no one is writing comments. At least not many. However I found out that comments can be very useful when there is a codeline that needs clarification. So I still felt guilty for not commenting my code.
Last year I got my hands on Clean Code by Robert C. Martin. Dear programmers out there, you need to read this book.
The chapter on Code Comments made me totally change my mind about writing comments and feeling guilty for not writing them. Bottom line: The code itself is the best comment, only write comments when it's really needed, don't leave commented code lines.
Recently I came into a project with some other programmers. I found the following comment styles (different coding styles aside, that is another story). Which do you find best?
public class AbstractModuleMediator extends Mediator implements IMediator { /* public variables and consts */ /* protected and private variables and consts */ private static const log : Logger = LogContext.getLogger(AbstractModuleMediator); /* public functions */ /** * Constructor for the AbstractModuleMediator class */ public function AbstractModuleMediator(name : String, viewComponent : IModule) { super(name, viewComponent); } }
public class SomeModule extends AbstractInteractionModule { private static const log : Logger = LogContext.getLogger(SomeModule); // ✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖ // VARIABLES // ✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖ private var _vo : SomeVo; // ✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖ // CONSTRUCTOR // ✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖ public function SomeModule() : void { }; // ✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖ // PUBLIC FUNCTIONS // ✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖✖ override public function create() : void { } }
public class SomeMediator extends AbstractModuleMediator implements IMediator { // _____________________________________________________________________________________________________________ // C O N S T A N T // ============================================================================================================= public static const NAME : String = "SomeMediator/"; private static const log : Logger = LogContext.getLogger(SomeMediator); // _____________________________________________________________________________________________________________ // V A R I A B L E S // ============================================================================================================= // _____________________________________________________________________________________________________________ // I N I T I A L I Z E // ============================================================================================================= public function SomeMediator(name : String, module : IModule) { super(name, module); log.debug("VideoPlayerMediator()"); } // _____________________________________________________________________________________________________________ // P R I V A T E - F U N C T I O N S // ============================================================================================================= }
public class SomeMediator extends AbstractModuleMediator { public static const NAME:String = "SomeMediator/"; private static const log:Logger = LogContext.getLogger(SomeMediator); public function SomeMediator(viewComponent : IModule) { super(NAME, viewComponent); } override public function onRegister() : void { } }
So what's the best commented code? It's #4. Why? Think about when you first enter a class to make some adjustments. You need to understand the code. You need to read the code. Everything thats distracts you from reading code is useless and should be avoided.
We all know (at least we should) the order of static field, public field, private field, constructor, public methods, private methods. No need to repeat that.
The other thing Martin points out is the danger of uncommented code lines. This one is harder to achieve since it needs you to make a quick code review on all edited classes before you commit something. Take this example:
facade.registerProxy(new ChannelProxy()); facade.registerProxy(new SoundProxy()); //facade.registerProxy(new SoundAssetProxy()); facade.registerProxy(new SubtitleStateProxy()); facade.registerProxy(new SocialShareProxy()); facade.registerProxy(new TrackProxy());
I had a ticket where I needed to fix a sound issue. I came across this command and the uncommented line left nothing but questions for me. Is this work in progress? Or a permanent removal? Does this Proxy even exist any longer? And most importantly: Does this has something to do with my issue?
Of course someone just forgot to remove this line/comment. However, it cost me some minutes to figure that out.
/** * Always returns true. */ public boolean isAvailable() { return false; }
Do I need to say more? This – of course – is the worst thing that can happen with code comments. The code changes but the comment stays the same. When you change a commented line/function/method and you can – for whatever reason – not change the comment, delete the comment.
As you see from the examples it's way harder to write good comments then no comments at all. So instead of making it all worse just don't do it. If you consider yourself as someone who writes exceptable code, that should explain enough for you and your co-workers.
// // Dear maintainer: // // Once you are done trying to 'optimize' this routine, // and have realized what a terrible mistake that was, // please increment the following counter as a warning // to the next guy: // // total_hours_wasted_here = 39 //
stop(); // Hammertime!
// I dedicate all this code, all my work, to my wife, Darlene, who will // have to support me and our three children and the dog once it gets // released into the public.]]>
Note: Some of the points will maybe auto set, when using the final FDT4 Standalone version.
When hitting F11 by default Eclipse is launching the currently active class (the one you're currently editing). Of course you want to launch the previous build. Got to Preferences –> Run/Debug –> Launching and set the "Launch Operation" to "Always launch the previous launched application".
When working with big project FDT4 has a hell of work to do when (re-)building the project. This can be seriously annoying. So instead of letting FDT autobuild the project when changes happen, you want to do this manually (ctrl/cmd + B). Goto Project and disable "Build automatically".
With that you not only have your copyright in the class (not so useful) but also will the svn tag be updated. Go to Preferences –> FDT –> Code Style –> Code Templates –> "typecomment" –> "Edit…" and insert your custom class comment.
It drives me nuts, when the braces formating style is not correct ;). Go to Preferences –> FDT –> Code Style –> ActionScript Formatter –> Braces Tab –> "Wrap All". Clean that mess with ctrl/cmd + shift + F.
You want to code assistant to appear when typing and not only when typing . or hitting ctrl/cmd + SPACE. Go to Preferences –> FDT –> Editor –> Code Assist. Set the delay in the "Auto activation Delay:" to 50. In the field "Auto activation triggers for AS:" you insert "abcdefghijklmnopqrstuvwxyz_.:".
You need then, don't you? Right click on the grey vertical bar, left to the code editing window and select "Show line numbers".
No need to share the space with all classes.
So these are my 7 steps to get FDT4 up and running. Take it or leave it… :)
Do you have some FDT essentials you can't live without? Please write a comment!
]]>Some time ago I wrote a blog post about fixing slow iTunes backup. The article became the by far most visited one on this blog and we are still getting tons of visitors from google every day. When reading the comments you can see that lots of users seem to have the same/similar problem.
The issue results from the fact, that some apps save lots of files to the file system of the iPod Touch, iPhone or iPad. While – of course – nothing speaks against using the file system to save data, the problem starts when files getting to many. iTunes then needs ages to copy them to the computer when doing a sync (the backup before the sync in particular).
If using a reasonable number of files you will never have a problem. However, if your app syncs data from the web (for instance a news or rss reader) make sure that you delete the read / no longer needed files. Please :)
The usual customer otherwise might have the feeling the iPhone "doesn't work" anymore. Or even worse, the customer reads our article and blames your app in the comments… :)
PS: Personally, I haven't worked on apps that make extensive use of the file system. If you have, feel free to share your experiences.
]]>I finally had the time to write something about the facebook-actionscript-api we used in one of our last projects. It's a very interesting API when you want to add Facebook support (user management) to your site/project. There are different things you can do with this API: i.e. access user information, post on the user's wall, get user's photos and much much more.
For the litte demo application I decided to use the feature to access the user's photos to create an ImageViewer in pure ActionScript. It's just a small example of what you can do with the facebook-actionscript-api but I think it's a good starting point for someone who hadn't had the chance to take a look at this whole Facebook Connect stuff.
Facebook introduced a new API some weeks ago – the Graph API – but the facebook-actionscript-api is still based on the "Old REST API". You can find a in-depth documentation of the old API here: http://developers.facebook.com/docs/reference/rest/
Here are the methods we called to get all the info we needed for the ImageViewer demo:
But you don't have to worry about the exact name or URL of the methods because the facebook-actionscript-api provides Call-classes for every method there is (i.e. GetAlbums.as).
Before you can send out any calls you have to get a Facebook session and of course log into your Facebook account. Session and login are handled via Facebook's own JavaScript library (http://static.ak.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php).
Here's the JS part in our index.html:
We use the ExternalInterface to call the fbLogin() function from our ActionScript class passing the API_KEY as a parameter.
To get your own API key to meddle with, you have to have a Facebook account and install the Developers application here: http://www.facebook.com/developers/ You can create your own app after you've installed the developer stuff.
// ... ExternalInterface.call("fbLogin", FacebookConnectTest.API_KEY); // ...
Here is where the "Facebook magic" happens … the fbLogin() function connects to the Facebook page and checks the login status of the user. It either logs you in straightaway or displays the "connect screen" in an iFrame.
After confirming the connection the login form pops up in a new window.
After logging in, the user has to allow the application to access the information it needs (see permissions() function). Because we just want to display the user's photos, we only need to get the "user_photos" permission.
First allow access to the general user info.
And then allow us to grab your photos. This again happens in an iFrame overlay in the same window our app is running.
After settings all relevant permissions the onLoginHandler() JS-function is called. This function collects the creates session data and passes it to our flash-application (using an ExternalInterface-Callback).
// ... ExternalInterface.addCallback("onLogin", onLogin); // ... /** * JS callback - called when user logged into facebook account. */ private function onLogin(session:Object):void { if(session == null) { return; } _session = session; // save session data in shared object for later use ... var my_so:SharedObject = SharedObject.getLocal(FacebookConnectTest.SO_NAME); my_so.data.session = session; // start a WebSession with the session secret and key passed in from Javascript var webSession:WebSession = new WebSession(FacebookConnectTest.API_KEY, session.secret, session.session_key); _facebook.startSession(webSession); webSession.addEventListener(FacebookEvent.CONNECT, onSessionConnect); webSession.addEventListener(FacebookEvent.ERROR, onSessionError); webSession.verifySession(); }
We just take the supplied data and create a WebSession object and afterwards verify the session.
In addition we are saving the session in a shared object so we can access it at a later time when the user returns to our application – if the session is still valid, we log the user in.
If the sessions is valid, the onSessionConnect() handler is called and we submit the first API call to retrieve the user's first- and lastname.
// ... var call:FacebookCall = _facebook.post(new GetInfo([_session.uid], ['first_name', 'last_name'])); call.addEventListener(FacebookEvent.COMPLETE, handleGetInfoResponse); // ...
The facebook-actionscript-api handles the results automatically and converts the returned XML into value objects we can use within our result handler:
// ... var infoData:GetInfoData = event.data as GetInfoData; if(infoData != null) { if(infoData.userCollection == null || infoData.userCollection.getItemAt(0) == null) { return; } var firstName:String = infoData.userCollection.getItemAt(0).first_name; var lastName:String = infoData.userCollection.getItemAt(0).last_name; _loginTxt.htmlText = "Hello " + firstName + " " + lastName + "! <a href='event:logout'>Logout</a>"; // ... } // ...
Because the API is meant to be used with Flex we have to get used to the extra level of "collections" that are added to the data (i.e. infoData.userCollection). But we can access the ArrayCollection kinda like a normal Array – just use getItemAt(index:int) instead of the [].
Now we want to get the user's photo albums – so create another call and submit it:
// get albums var call:FacebookCall = _facebook.post(new GetAlbums(_session.uid)); call.addEventListener(FacebookEvent.COMPLETE, handleGetAlbumsResponse); // ...
The result handler should look familiar:
// ... private function handleGetAlbumsResponse(event:FacebookEvent):void { var albumsResponseData:GetAlbumsData = event.data as GetAlbumsData; if(albumsResponseData != null) { var tempCovers:Array = []; for(var i:int = 0; i < albumsResponseData.albumCollection.length; i++) { var album:AlbumData = albumsResponseData.albumCollection.getItemAt(i) as AlbumData; if(album != null) { _albums.push(album); tempCovers.push(album.cover_pid); } } // ... } } // ...
By now you should be comfortable working with the returned results …
If you want to know how the others call look like, download the sourcecode and open the FacebookConnectTest class.
To display the album thumbnails we used the TileList flash component – here is a good article how the component works: http://www.adobe.com/devnet/flash/quickstart/tilelist_component_as3/
If you still have questions, don't hesitate to ask.
You can download the sourcecode here: /examples/fbconnect/source.zip
You can find the online demo here: /examples/fbconnect/
Don't forget to download the SWC from Google code: http://code.google.com/p/facebook-actionscript-api/downloads/list (it isn't included in our sources).
The ImageViewer code is by no means bug-free but – as i said before – should give you a good insight of the API. I put everything into one class … but don't worry, I also added some short comments so hopefully you won't get lost :)
Update October: As you can see from the comments this solution does work for most users with iPad, iPhone and iPod Touch. Please leave a comment, which App causes the slow backup.
Since months I searched for a solution to fix the slow iPhone sync without restoring my iPhone or having to reinstall all my Apps. Finally I found a surprisingly easy solution, covert and buried in an Apple support forum thread. So I decided to write this down here, also to better remember how to fix it the next time… ;)
Note: If you're wondering, this is still a development blog for Flash. I just thought this might be an important information for the people out there.
It's the Apps! Apps on the iPhone might store data to work properly. Some do store a lot, some don't. For instance a game saves some highscore data (not very much), where a newspaper App or a rss reader might save updated data (can be very much). I believe lots of iPhone users, that experiencing slow backups, have problems with one or many Apps that are leaking in terms of saving tons of tiny files to the iPhone, especially when they have a lot of Apps and when they did backups cross devices (i.e. iPhone 2G to iPhone 3GS).
However, some users got the sync problem fixed with relatively easy solutions. You want to check them first.
When the solutions above does not work for you, it's probably an App (or many Apps) causing the backup problem.
First it's generally a good idea to remove Apps that you don't need anymore. I know, iPhone users (including me) tend to leave unused Apps on the device. Removing those apps saves you space on the device, speeds up the backup process (even if the app it not evil) and keeps the backup folder within iTunes small. So clean up!
Didn't work? Ok, let's go hunting…
Windows XP:
\Documents and Settings\USERNAME\Application Data\Apple Computer\MobileSync\Backup
Windows Vista / Windows 7:
\Users\USERNAME\AppData\Roaming\Apple Computer\MobileSync\Backup
\USERNAME\Library\Application Support\MobileSync\Backup
The folder has a strange long name like 6de624828c9d586e1f088f932798039e57e2af7c. To find the right folder (if you find more than one) open the settings in iTunes, go to devices and find the list "Devices backups". Match the date of the last backup and the date of the folder.
First the backup progress bar in iTunes should move "normally". After a while the progress bar stops. Probably this is the moment, where iTunes is backing up an App that is causing the endless loop.
Get into the backup folder. Sort after date, so the newest files are on top. Every file iTunes backups actually consists of two files. The file with the data (.mddata) and an info file for that (.mdinfo), both again with a strange long name. While we cannot look into the actual data (can be an image, a html file, a plist file or whatever), we can have a look into the info file and see at least which App the file belongs to.
Start a text editor and open the .mdinfo file. It's a binary file, so we see a lot of crap, however you also should see a string like this AppDomain-com.kayak.travel. There you go, the app iTunes is currently trying to backup is the Kayak app (Note: This is just an example, Kayak did NOT cause the slow backup in my case).
Wait some seconds. As you can see in the folder, the .mddata files a relatively small, so iTunes should move on to the next .mddata/.mdinfo file soon. iTunes still tries to backup the same file? Wait some more seconds. Still the same file? Well, we have a hit! The file iTunes tries to backup is corrupt.
In my case however, iTunes continued to backup files. So again, open the newest .mdinfo file. Same app as before? Wait another minute and open the newest .mdinfo file. Still the same app? Well, we have a hit! Although iTunes didn't stop to backup, it has a hell of a lot to do by copying all files of the app from the device to the backup folder.
Note: Maybe iTunes continues to another app after a while and gets slow again. Then you have more then one "evil" app.
Let the sync run through (if it's stuck, cancel it).
Unplug the device.
We want iTunes to make a clean backup. Copy the backup folder to somewhere else (can take some time). After this is finished, delete the backup in "Settings" –> "Devices" –> "Device Backups".
Now delete the evil apps from the device.
Connect the device. Start iTunes (if it doesn't start automatically). Start a sync (if it doesn't automatically). Since iTunes does not find a backup file, it'll do complete backup, which may take a while.
After that is finished do another sync, it should be super fast. Yeah!
For me the App that caused the problem, was a newspaper app, that seemed to keep all (old) articles on the files system of the iPhone. After removing the app everything went back to normal.
A side effects was that the size of my backup folder went from 1GB to 100MB.
Sources: sbessel in Apple support forum, iphonealley.com – Clean backup
]]>I made it back from cologne. Thanks to the vulcano I made new friends with lots of business guys in the night train from Cologne to Berlin…
I just want to point out some session (in order of appearance). If you miss one here I either missed it or found it crap… ;)
Kirill Safonov (center) – Image by Marc via Flickr
Kirill Safonov made a fast forward demo of IntelliJ IDEA with an example project during the lunch break. Very very impressive. I tend to stick to my proven workflow and switch to new tools pretty late. However, the guys seem to build a tool with even more "coding comfort" then FDT. Will definitely have a look at IDEA soon. Also I'll try to contact them, If they are willing to create a screencast out of that demo.
Michael Plank – Image by Marc via Flickr
I always thought Michael is just some marketing guy traveling the world for FDT. I couldn't been wronger. He actually has a very strong technical background. He was talking about "component based development" using the example of a MMOG based on Flash. The pros against object orientated development are so obvious when it come to complex games (Keith Peters also pointed that at FOTB09).
Saban Ünlü (workshop) – Image by Marc via Flickr
Saban gave an overview of developing iPhone Apps with Flash CS5. Despite the questionable future of this workflow I found it quite interesting. Seams that Adobe did a good job implementing the iPhone packager. Let's see what the future brings…
Showed some old stuff and new experiment. This guy is sooo creative when it comes to developing new interfaces of creating music with the computer. He is the guy the music companies will steal cool innovative interfaces from. And btw, the Audiotool looks abolutely magnificent! Hey Adobe, hey music software companies, you need to buy this tool! It's a final product with a potential high user base. The only thing they need are some resources to create a documentation and some tutorials. And of course integrate all the cool interfaces from André.
Ralph Hauwert – Image by Marc via Flickr
Amazing in depths 3D and ActionScript optimization stuff. Good inspiration. I especially liked the titles for laboom. Some particle optimization stuff I can't wait to play with.
Johannes Mainusch – Image by Marc via Flickr
I did some rant in the past and excuse them to be lazy and to not progress their platform. And altough you barley see new features on xing, they do a lot of stuff under the hood to improve the performance and response time of their site. I especially found it refreshing not to have a evangelist-speech but someone who's quite honest with the fails they made in the past and fails they're still making.
Mario Klingemann – Image by Marc via Flickr
Nice talk with some old and some new stuff. He finally has released some of his tool on google code (can be found here). Also one other very handy thing he pointed out: You can very easy control the "randomness" of the Math.random() method by using the penner ease functions. Will definitely come in handy something.
Greetings to Martin, Michael, Raphael, Jens, Thien, Oliver, Andre, Claudia and thanks for the nice talks!
]]>Keith Peters was right, when he said, that Flash has a lack of UI component frameworks. The Flex components has a quasi monopoly on that. Besides his minimal components there is another alternative: AsWing.
Last year Neue Digitale / Razorfish gave me the chance to dive into AsWing. The task was to build a form manager that can not only run in Flex projects but also in straight AS3 projects where no flex runtime is available.
Click to see AsWing in action (not very sexy, huu? Don't worry, of course thats all skinnable :) ) .
AsWing is a port of the famous Java UI framework Swing, which was first released in 1996. The original port was made to AS2, which is still available. However, with AsWing 2.0 the AS3 version will be complete. AsWing 2.0 is still beta but safe to use.
Here some demo code from the simple login example above:
[SWF(backgroundColor="#AAAAAAA", frameRate="30", width="400", height="300")] public class Main extends MovieClip { private var pwdTextfield : JTextField; private var okBtn : JButton; private var userTextfield : JTextField; private var jf : JFrame; private var vp : JViewport; public function Main() { var sprite:Sprite = new Sprite(); sprite.x = sprite.y = 30; addChild(sprite); okBtn = new JButton("Ok"); okBtn.setEnabled(false); okBtn.addActionListener(_okPressed); userTextfield = new JTextField("", 8); userTextfield.addEventListener(Event.CHANGE, _onPwdTextfieldChange); pwdTextfield = new JTextField("", 8); pwdTextfield.setDisplayAsPassword(true); pwdTextfield.addEventListener(Event.CHANGE, _onPwdTextfieldChange); jf = new JFrame(sprite, "Login"); var form:Form = new Form(); form.addRow(new JLabel("Username"), new JSpacer(new IntDimension(8)), userTextfield); form.addRow(new JLabel("Password"), new JSpacer(new IntDimension(8)), pwdTextfield); form.addRow(null, new JSpacer(new IntDimension(8)), okBtn); vp = new JViewport(form); jf.getContentPane().append( vp ); jf.setSizeWH(300, 160); jf.show(); } private function _onPwdTextfieldChange(e:Event) : void { okBtn.setEnabled( (userTextfield.getText() != "" && pwdTextfield.getText() != "")); } private function _okPressed(e:Event) : void { var successOutput:String = "Welcome " + userTextfield.getText(); var successLabel:JLabel = new JLabel(successOutput); vp.removeAll(); vp.append(successLabel); } }
More sophisticated examples on request…
The documentation can be found here
Here some tutorial you can start with
Well, I guess AsWing had it's 15 minutes of fame when the AS2 version came out. Back then, there were not many robust UI frameworks. Obviously that changed with the hole Flex thing. Nowadays the people tend to use the Flex components, since it's industry standard.
The Flex components offer a wide range of features. However, we all know that it's getting tricky when you want to change basic functionality of them (not sure, if this still applies to Flex 4 Spark components). I'm not saying that this is all easy with AsWing, but at least you can just click in the source code and hack something in… ;)
– Ported from very robust Java Swing
– Very fast
– No Flex framework required (AS3 only)
– Very flexible once learned
– Tough learning curve
– Small community
– Future questionable
Overall it was fun to work with AsWing. It's powerful and once learned very flexible. And it's fast as hell. The rendering is really fast unlike Flex(3).


text:
Looks like Bistro LQ has closed (updated 3/25/2011)
- 12 Comments
- Follow
Hat tip to Eater LA.
Bistro LQ
8009 Beverly Boulevard, Los Angeles, CA 90048
WHAT?! I'm very, very sad. I had one of the best meals in L.A. there.
0 -
Just saw that too. Quite a pity. I wonder if he'll be cooking more permanently at Vertical.
0 -
No! Some friends and I were planning a trip to try Bistro LQ for the first time as soon as I got through a particularly busy period at work. That was definitely top of our list of restaurants that we have not yet tried.
Bistro LQ
8009 Beverly Boulevard, Los Angeles, CA 900480 -
Very sad. Looks like LA isn't ready for that type of cuisine and that level of cheese service. I'm convinced he'd kill it in SF, NYC, or Chicago. I wish him the best.
0 -
No! I really wanted to eat there and I was saving up for it! Really disappointed.

subset: commoncrawl


text:
Welcome to the AT&T Illinois Public Policy Microsite.
For more than 135 years, AT&T has consistently provided innovative, reliable, high-quality products and services and excellent customer care. Today, our mission is to connect people with their world, everywhere they live and work, and do it better than anyone else. We're fulfilling this vision by creating new solutions for consumers and businesses and by driving innovation.
AT&T is one of the largest private sector employers in Illinois, and we are investing considerable resources in this state, including:
- AT&T invested more than $3 billion in its best-in-class wireless and wireline networks in Illinois between 2012-2014.
- AT&T and its employees contributed approximately $28 million through giving programs in Illinois from 2009-2013.
- AT&T is committed to volunteer causes in Illinois as our employees and retirees provided 850,000 hours of personal time from 2009-2013.
Paul La Schiazza
President - AT&T Illinois
Our Illinois Newsletters highlight the key issues and events impacting our state, providing examples of the many ways our employees work to improve the communities we serve.
Click here to read the latest news from AT&T Illinois
More than $1 million awarded for school success and career readiness; AT&T recognized as a 'Friend of Ag' and more — AT&T Illinois
Dear Colleague:
I want to share with you some 2014 highlights from AT&T Illinois, including news about broadband services in Illinois, our Aspire contributions to education programs and AT&T's community involvement throughout the state.
Please accept my warm wishes for a safe and enjoyable holiday season.
Paul La Schiazza
President — AT&T Illinois


text:
Damien Hirst Prints
Damien Hirst's career started out as being a member, better yet cited as the most famous member of the YBAs (Young British Artists). His works use modes of display borrowed from science such as his Pharmacy in which a sense of excess can be inferred. Excess can too be seen through his dot paintings that actually are the chemical compositions to pharmaceutical drugs. Or rather, it is not excess that is being exemplified in some cases, such as his Mother and Child Divided, but science is still a key notion. In such a work, and other works like The Physical Impossibility of Death in the Mind of Someone Living, science is of high importance whether he is putting a calf and her child literally split down the middle in formaldehyde for all to observe or whether he is putting a dead shark in a tank. Hirst uses the shock factor to grab the attention of his viewer.


text:
Some time in the first century AD a Chinese mathematician by the name of Sun Zi published a book, Sun Zi Suanjing, or "The Arithmetical Classic of Sun Zi". In this book Sun Zi introduced a method of solving systems of linear congruences that became known as the Chinese Remainder Theorem.
The Chinese Remainder Theorem states that when the moduli of a system of linear congruences are pairwise relatively prime, there is a unique solution of the system modulo the product of the moduli.
Let $n_1, n_2, \ldots, n_r$ be positive integers such that $n_i \perp n_j$ for all $i \ne j$. Then the system of linear congruences:
$x \equiv b_1 \pmod {n_1}$
$x \equiv b_2 \pmod {n_2}$
$x \equiv b_r \pmod {n_r}$
has a simultaneous solution which is unique modulo $\displaystyle \prod_{i \mathop = 1}^r n_i$.
To obtain the solution to the set of congruences:
$$x\equiv b_1c_1\dfrac{N}{n_1}+\cdots+b_rc_r\dfrac{N}{n_r} \pmod N,$$
where $N=n_1n_2\cdots n_r$
and the $c_i$ are determined from $c_i \dfrac {N} {n_i} \equiv 1 \pmod {n_i}$
Let $\displaystyle N = \prod_{i \mathop = 1}^r n_i$ and $N_k = \dfrac N {n_k}$ for $k = 1, 2, \ldots, r$.
Because $n_i \perp n_k$ for each $i \ne k$, we have $\gcd \left\{{N_k, n_k}\right\} = \gcd \left\{{n_1 n_2 \cdots n_{k-1} n_{k+1} \cdots n_r, n_k}\right\} = 1$.
So, by the definition of linear congruence $N_k x \equiv 1 \pmod {n_k}$ has a unique solution modulo $n_k$.
Let this solution be $x_k$.
So, $N_k x_k \equiv 1 \pmod {n_k}$
Show that $x_0 = b_1 N_1 x_1 + b_2 N_2 x_2 + \cdots + b_r N_r x_r$ satisfies each of the congruences, then evaluate $x_0$ modulo $n_k$ for each $k = 1, 2, 3, \ldots, r$.
We start by noting that $$i \ne k \implies \dfrac {n_k} {N_i} \text{ so } N_i \equiv 0 \pmod {n_k}$$
So, for each $k = 1, 2, \ldots, r$ we have $x_0 \equiv b_k N_k x_k$ because each of the remaining terms in the sum is congruent modulo $n_k$ to $0$.
Finally, since $x_k$ was found such that $N_k x_k \equiv 1 \pmod {n_k}$ we have $x_0 \equiv b_k \pmod {n_k}$ as we claimed.
All we need to do now is show that this solution we have discovered is unique modulo $N$.
So, suppose that $x'$ is a second solution of the system.
That is, $x_0 \equiv x' \equiv b_k \pmod {n_k}$ for each $k = 1, 2, \ldots, r$.
So each $n_k$ divides $x' - x_0$.
But because each of the moduli are pairwise coprime, we have $$\displaystyle \prod_{i \mathop = 1}^r \dfrac {n_i} {x'} - x_0$$
That is $$\displaystyle x' \equiv x_0 \pmod {\prod_{i \mathop = 1}^r n_i}$$ as we wanted to show. Q.E.D.
This problem can be expressed as a system of congruences
$x \equiv 2\pmod 3$
$x \equiv 3\pmod 5$
$x \equiv 2\pmod 7$
To solve for $x$, let $N = 3 \cdot 5 \cdot 7 = 105$
$\dfrac N {3} = 35$
$\dfrac N {5} = 21$
$\dfrac N {7} = 15$
Here we see that 2 is an inverse of $\dfrac N {3} = 35$ modulo $3$ because $35 \cdot 2 \equiv 2 \cdot 2 \equiv 1 \pmod 3$; 1 is an inverse of $\dfrac N {5} = 21$ modulo $5$, because $21 \equiv 1 \pmod 5$; and 1 is an inverse of $\dfrac N {7} = 15 \pmod 7$, because $15 \equiv 1 \pmod 7$. The solution to this system are those $x$ such that $$x\equiv b_1c_1\dfrac{N}{n_1}+\cdots+b_rc_r\dfrac{N}{n_r} \pmod N,$$ $$= 2 \cdot 35 \cdot 2 + 3 \cdot 21 \cdot 1 + 2 \cdot 15 \cdot 1$$ $$= 233 \equiv 23 \pmod {105} $$
The answer is 23 eggs.
The Chinese Remainder Theorem (or CRT) has applications in many fields, the foremost of which are computing, cryptography, and coding theory.
In computing the CRT gave rise to modular technique and has been adapted into a generalized technique for signal and image processing referred to as homomorphic image computing.
In computing the Chinese Remainder Algorithm (or CRA) is basically a divide-and-conquer technique that can be used to develop other divide-and-conquer techniques. A complex problem can be divided into smaller problems and solved independently, allowing for parallel processing. Afterwards the smaller problems can be combined by CRT to obtain a solution to the original problem. This is demonstrated in linear feedback shift register synthesis problem for sequences over $Z/(m)$.
Cyclic convolution and Fourier transform are an important part of digital signal processing, as well as computer science and mathematics. There is a variety of algorithms for calculating cyclic convolution and discrete Fourier transform that attempt to rearrange one dimension arrays into multi-dimension arrays with shorter lengths. One of the most effective ways to do this is through the CRT and CRA.
In coding theory, detection and correction of errors is done by adding redundancy to data that is sent via a noisy channel or in a computer. The CRT remainder techniques are useful in developing code that detects errors.
In cryptography, the CRT is used in secret sharing through error-correcting code. The CRT is itself a secret-sharing scheme without any need for modification:
Let $m_1,m_2, \cdots m_i$ be $t$ pairwise relatively prime integers, and $m = \prod_{i \mathop = 1}^t m_i$. Suppose we have have a secret which is an integer $s$ with $0 \leq s < m$. The secret $s$ can be shared among $t$ parties as follows. Let $P_1, P_2, \cdots P_t$ denote the $t$ parties that will share the secret. We give $P_i$ the residue $s_i = s \pmod {m_i}$ the information known only to $P_i$. By the CRT the $t$ pieces of information $s_i$ are sufficient to determine the original secret $s$, but with anything less than $t$ number of residue $s_i$ cannot determine the original $s$.
Other tyes of secret-sharing schemes are also implemented with the CRT.
The Chinese Remainder Theorem seems to have been known throughout Asia since the Sun Zi Suanjing first appeared in the 1st century AD. Although Sun Zi did not provide a complete proof, mathematicians in India, such as Aryabhata, went on to provide a complete algorithm for solving this problem. It's amazing to see how ancient mathematics, like the CRT and Euclidian algebra continue to find so many applications today.
(LaTeX formatting provided by the awesome MathJax library.


text:
Mon-Fri: 7am-1am EST / Sat-Sun: 7am-11pm EST
If you placed an order on ApplianceHelp.com the order is still valid and you can check on its status and make changes here on PartSelect.com. Click here for more details.
ApplianceKitchenAid Dishwasher
Level of DifficultyA Bit Difficult
Time to do repair30 - 60 mins
Age of Appliance1 - 4 years
Tools PliersScrew driversSocket set
Awesome! Followed video and went exactly as stated. Saved $400. from repair company estimate. Wife happy.
Help other customers find the most helpful instructions.
Were these instructions helpful?
Part Number: PS774514


text:
Sleeps | 4 |
Bedrooms | 2 |
Bathrooms | 1 |
Property type | cabin |
Minimum Stay | 3 nights |
Cozy, rustic cabin with large screen porch and deck set on private, peaceful, mountain lake (no motorboats). Great swimming and fishing -as the lake is very deep and clean. A canoe and a paddle boat are available for renters use. Great mountain/road biking opportunities and hiking trails. Fully equipped kitchen, cozy living area with wood stove, TV& DVD/VCR, heat available. Less than three miles to Vermont border! About 45 minutes from Saratoga, NY-Ten minutes south of Granville, NY, 25 minutes to Manchester, Vermont and Glens Falls, NY. Great place to get away, relax and enjoy a wonderfully private lake.
Guest Book Comments: We both had a wonderful week The lake was beautiful and peaceful. Thank you for sharing your 'gem of a spot' with us. Hope to be back. Wendy & Neil Rothkopf, LOng Island, NY
We had a wonderful time hope to be back next year. Jason & Shannon Riley, Troy, NY
It was so nice to sit on the porch or dock with such peace and quiet. We would defintely like to return next year. Eva & Peder, New Hampshire
What a great place! Loved the cottage- especially the screened porch. Loved the lake and the privacy. The Reid Family, Canada
Thank you for the wonderful week. Great place, wonderful pond, the best neighbors. Swimming, fishing, boating and bairds singing & relaxation. What could be better than that? Sue McCartee, Salem, NY
We are a blended family with four kids at different ages. We live close to this cabin in Vermont and work as a local real estate agency owner (Scott) and a teacher at the local school.
Phoebe or Scott McChesney purchased this cabin in 2003
This cabin and Green Pond captured our hearts the minute we saw it. It is so relaxing and peaceful- feels like a real getaway. Our favorite place is the screened porch!
Green Pond is a wonderful body of water- it is clean, fresh and lots of fun to play in!
My family of four plus our dog enjoyed four days of fun fishing, swimming, relaxing and reconnecting in this quaint cottage in the woods. Well cared-for and clean with all the comforts of home - minus internet and cell, but that was a pleasant surprise - we didn't miss it one bit! The house is extremely private with almost no neighbors in sight, but those we encountered on our walks were quite friendly (and provided a great fireworks show!). The fishing for blue gills and bass was outstanding and provided hours of entertainment! And the screened porch is the best feature with cool breezes from the water and evening views of the sunset over the lake. We enjoyed our dinner out on the porch every night. Looking forward to a future opportunity to visit again!
My boyfriend and I spent 1 week at this wonderful cabin on green pond. It is by far the best rental we've made in years. The property is very private. It's a wooded lot so the cottage stays cool. The pond is small but very deep so the water is super clear and refreshing. You can dive right off the dock or you can go down the side (wearing watershoes).
The screened deck is by far the coolest part of the cottage. It looks out on the water, you're safe from any bugs, there's a nice breeze. It is the most relaxing place I have been in years. The beds are comfortable. There is plenty of equipment, both for in and outside. The DVD collection was actually pretty great, too. Everything is old but very well maintained which gives the whole place a quaint vacation feel.
Nearby, there is a wealth of activities. Merck Forest offers free hiking and over 36 miles of wooden paths. We went up Haystack Mountain. We biked a bit on the roads. We visited the gorgeous villages of Vermont and ate LOTS of Ben & Jerry's ice cream!
Scott and Phoebe were very helpful in answering our questions and in advising us on stuff to do.
Note that out dog Billy was welcomed and probably enjoyed his vacation most of all. The people of Vermont and NY are very welcoming to canine friends and being from Montreal, this was a real treat for us! The pictures do not do this property justice. It really is just wonderful!
Other Activities: Exploring small Vermont towns and outlet shopping in Lake George & Manchester
Golf: Lake Saint Catherine is a public 18-hole golf course that is located about 10 miles from the cabin. In Manchester, Vermont (about 25 minutes away) there is Gleneagles Golf Course (also public). There are various private clubs in the area as well.
Ski: There are various skiing opportunities in neighboring Vermont: Stratton Mountain, Bromley and Okemo are all within an hour.
Rate Period | Nightly | Weekend Night | Weekly | Monthly | Event | ||||
My Standard Rate
3 night minimum stay
Pet Fee | $50 |
Notes |
cleaning fee for pets
* 25% security deposit upon reservation *cleaning fee MAY apply *must have good references *rent must be paid in full prior to start date Weekly or weekend rentals that include a holiday (Memorial Day, July 4th, Labor Day) will be slightly higher. Please inquire. May be extra fee if occupancy is over 4 people. Renters pay 25% deposit by check or money order when agreement is signed and balance of rent two weeks prior to arrival |
Payment is usually accepted in the quoted currency (USD) unless the currency and the amount is specifically agreed in advance with the owner / advertiser.


text:
Video Details
Date: 4 years ago
Runtime: 0:26
Views: 4,096
3 Comments
All Comments
4 years ago
i need that to be me baby!!!! very bad.... I want you! xoxoxo Soooooooo fucking sexy!!!!!!!
You have not added any videos to your playlist. Click on the "+" in the video thumbnails to add videos.


text:
About us
Working in partnership to influence policy
We use our knowledge of what works to reduce crime to help inform policy and shape practice. In line with this, we work closely with government and public and private sector partners, using our experience on the ground to establish and pilot the best ways of reducing crime in local neighbourhoods. Nacro is also a regular contributor to government consultations and important debates on key subjects in the criminal justice sector.
Evidence of good practice
The government is currently looking to reform the way in which the probation service in England and Wales operates and delivers its services. As part of those reforms under what has been termed the Transforming Rehabilitation agenda, delivery organisations like Nacro have been asked to outline evidence of good practice across a range of specific areas. This section includes that information and outlines our expertise in more depth.
Partnering with industry
We work with commercial sector sponsors on corporate social responsibility activities and we also advise employers on recruitment resettlement issues. We always welcome new partnerships.
Our people
Nacro employs a team of dedicated staff and volunteers. Our work is led by our Council of Trustees and our Leadership Team.


text:
Third year architecture student. Recently completed successful paid internship with a 35 person firm where I gained experience in commercial biotech design, project management and vendor relations.
Delawie Wilkes Rodrigues Barker, Intern
Documented specifications, completed AutoCAD drawings, participated in weekly project management meetings and attended site visits of certain projects in process.


text: Mortis Metalikus: Helbrute Flag By: froptyman Channel: warhammer40k (More by author: Most viewed, Newest, Most Thumbs) previous next random - Fav + Fav Comment (Enlarge) My first attempt at painting a model and my setup I use to paint. I think I did quite well, but any tips and advice would be much appreciated. Tags: Hellbrute | warhammer | painting | Model Recommend tagsx +200 Views: 14988 Favorited: 6 Submitted: 02/09/2013 Share On Facebook Remove from favorites Add to favorites Unsubscribe from froptyman Subscribe to froptyman Subscribe to warhammer40k Unsubscribe from warhammer40k


text:
The game of football figures prominently in The Arsenal Stadium Mystery -- not the American gridiron version, but the soccer-style competition played in England. The focus is on Anthony Bushell, playing a champion British football player. Bushell is poisoned to death during a game, in full view of a capacity crowd. Police inspector more
All The Arsenal Stadium Mystery cast + crew photos


text:
Slaverys End In Tennessee
Publication Year: 2009
Published by: The University of Alabama Press
List of Figures and Tables
Download PDF (111.3 KB)
pp. viii
Download PDF (468.4 KB)
pp. ix-x
Download PDF (565.2 KB)
pp. 3-5
In the District of Columbia 's Lincoln Park stands the national monument commemorating the emancipation of slaves during the Civil War. Financed by blacks but designed by whites, it depicts an erect Abraham Lincoln liberating a crouching slave. Although faithful enough to folklore, the symbolic bronze ...
1. The Institution and the Confederates
Download PDF (2.6 MB)
pp. 6-18
Shortly before the 1861 referendum in Tennessee on separation from the Union, a slave sentenced to hang for killing an overseer spoke his last words from a gallows platform at Memphis. Isaac, the doomed man, argued that secession would do the South no good, that it would only make Southern white soldiers ...
2. The Master and Slave Relationship after Federal Occupation
Download PDF (3.2 MB)
pp. 19-32
...Nashville's fall, a slave there discovered several soldiers pilfer their interests. These basic facts have been clear to historians for several decades. The main point of debate is the issue of the disloyalty's driving forces. Evaluated in terms of the evidence leave unless "lured away with false hopes of equality and free ...
3. Federal Occupation and the Slave Code
Download PDF (3.1 MB)
pp. 33-45
On March 13, 1862, Andrew Johnson returned to Tennessee as a brigadier general and military governor. Soon after his arrival in Nashville, he issued an "Appeal to the People of Tennessee" that accused the Confederates of destroying state government and rule by law. He pledged to restore both and, in addition, to ...
4. Black Ghettos and Contraband Camps
Download PDF (2.9 MB)
pp. 46-59
Slaves ran away in quest of freedom, but that promising beacon all too often led to the torments of poverty. Possessing little property, they forsook even a regular subsistence in leaving their owners. Unless they stole from their masters, they lacked significant resources beyond their ability to ...
5. Beginning of Economic and Social Reconstruction
Download PDF (5.1 MB)
pp. 60-80
As slavery began to unravel amidst civil war, contrabands and free blacks pressed for new privileges. To the pragmatists among them, gains seemed possible. For the visionaries, like a preacher in Nashville, it was a matter of providential justice: "De Lord He was wid us, and wouldn't let us be 'pressed no ...
6. Black Military Service
Download PDF (4.0 MB)
pp. 81-97
During the spring of 1863 Lorenzo Thomas traveled the length of the Mississippi Valley addressing federal troops about the army's manpower shortage and the expediency of recruiting as many contrabands as possible to fill the gap. Congress had empowered Lincoln to accept black recruits in July 1862, but ...
7. The Politics of Emancipation
Download PDF (4.5 MB)
pp. 98-117
Although contrabands had gained virtual freedom, only white politicians could make it legal. Northern Republicans and their Southern unionist allies originally waged war just to save the Union. Growing numbers of contrabands and their many services pressured the politicians to broaden war aims. The ...
8. End of an Institution
Download PDF (3.2 MB)
pp. 118-131
On April 5, 1865, the day appointed for inaugurating Tennessee's new civil government, the capitol building was decorated with a gigantic banner that bore antislavery quotations from the Founding Fathers set alongside pictures of black soldiers and schoolchildren. Shortly before William G. Brownlow ...
Download PDF (11.7 MB)
pp. 132-180
Bibliographical Essay
Download PDF (1.2 MB)
pp. 181-185
Prior to the 1930s historians wrote little about slavery during the Civil War. W E. Burghardt Du Bois's Black Reconstruction (New York, 1935) included the first sympathetic overview of black wartime activities. Bell Irvin Wiley's sub sequent Southern Negroes, 1861-1865 (New Haven, 1938) supplied a wealth of data drawn from previously framework. These early studies established the assertiveness of con ...
Download PDF (1.1 MB)
pp. 186-191
Print-ISBN-13: 9780817311834
Page Count: 208
Publication Year: 2009


text:
1. Crisis Management (financial temperature test).
6. Affordable Medical Insurance Alternative.
2. Doing the Books (including meaningful budgeting).
7. Audit (Review) of Books.
3. Church Personnel and Administration Manual.
8. Capital Fund Raising.
4. Church Financial Management Manual with Stewardship Programs
9. Business Manager for 40 Churches NATIONWIDE.
5. Compliance with the Law of the Land.
10. The only known ministry of its kind.


text:
Committee Description:
Standing Committee; advisory to the college president or designee on issues of personal safety. Focus is on education and prevention strategies, opportunity reduction and victim assistance. The committee reviews data and policies and safety concerns for the campus. Initiatives are recommended that increase personal awareness and safety on campus. Membership includes University Police, Judicial Affairs, Health Center, and Facilities and must maintain a minimum of six (6) persons, at least half of whom are female, one-third from students, one-third from the faculty and one-third selected by the President. The chairperson is the Assistant Dean of Students for Judicial Affairs.
Membership for 2014-2015:
Lisa Evaneski, Chair, Student Conduct and Compliance
Heather Losi, Accounting, Finance and Law
Mary McCune, History
Joshua McKeown, OIEP
Rebecca Nadzadi, Campus Life
John Rossi, University Police
Michelle Sloan, Lifestyles Center


text:
Tim Beckman has amassed just six wins in his first two seasons as the Illini head coach, and that means he's also piled up 18 losses.
And with a lot of losing comes an opportunity for a larger variety of players to play, including those who haven't yet set foot on campus.
Beckman announced his 2014 recruiting class Wednesday, and he assured the 18 new players that they'll have a chance to compete for playing time right away.
"I do believe that these players understand that we're going to play the best at whichever position it might be," Beckman said. "If he's a freshman or he's a senior, you're going to play the most consistent football player. And if that man is always consistently playing at that level, you're going to play him. And I hope that players that decide to come to the University of Illinois, regardless of their age, know that they're going to have a fair chance to compete every day and showcase what they can do, freshman or senior."
[MORE: Illini OC Bill Cubit wants to 'out-recruit' his own guys]
The rankings didn't provide a very solid evaluation of Beckman's latest group, with Rivals ranking the Illini 11th out of 12 Big Ten teams. No player on Illinois' list ranks above a three-star recruit, per Rivals, with the Illini being one of two Big Ten teams — along with Purdue — with an average star-value under three.
But no matter what the rankings say — Illinois offensive coordinator Bill Cubit he doesn't worry about stars at all — the Illini are excited about their recruits. Rivals ranks Lincolnway East offensive lineman Nick Allegretti as the team's best. The 6-foot-4, 280-pound Allegretti was the 20th-ranked prospect in the state.
Another addition of note is quarterback Chayce Crouch, a three-star signal-caller out of Newark, Ohio. Crouch has Cubit excited, and he joins a quarterback competition to replace four-year starter Nathan Scheelhaase that will be sure to get very interesting as the offseason progresses. Reilly O'Toole backed up Scheelhaase the past two seasons, Aaron Bailey proved a dynamic playmaker in limited action last season, and Wes Lunt will be eligible after transferring in from Oklahoma State. Throw Crouch in the mix, and the Illini are suddenly flush with QBs.
"You look at the teams that are winning and being successful and playing in championships and Super Bowls and stuff like that, the quarterbacks are very, very key to creating those atmospheres and winning," Beckman said. "And Bill Cubit does an unbelievable job, as good a job as I've ever been around any quarterback coach doing. And I really like the players and the attitudes and the accountability and the leadership that we're getting at that position, and Chayce Crouch just adds to that. We'll continue to build that position. That position has got to be a strong point of your program"
[RELATED: Illinois National Signing Day coverage]
In addition to Allegretti and Crouch, here's the rest of the Illinois recruiting class:
— Running back: Matt Domer, Hazel Crest, Ill.
— Wide receivers: Geronimo Allison, Tampa, Fla.; Mike Dudek, Naperville, Ill.; Tyrin Stone-Davis, Philadelphia, Pa.; Malik Turner, Springfield, Ill.
— Offensive lineman: Peter Cvijanovic, Concord Township, Ohio
— Defensive linemen: Joe Fotu, San Leandro, Calif.; Paul James III, Miami, Fla.; Tito Odenigbo, Centerville, Ohio; Jihad Ward, Philadelphia, Pa.
— Linebackers: Henry McGraw, Overland Park, Kan.; Carroll Phillips, Miami, Fla.; Austin Roberts, Rice Lake, Wis.; Tre Watson, Tampa, Fla.
— Defensive backs: Julian Hylton, Tinley Park, Ill.; Chris James, Orange, Texas


text:
PRs for manpage 'mailwrapper(8)'
This is an experimental report containing PRs for manpage 'mailwrapper(8)' as of Fri May 30 07:37:57 2014 UTC. See notes.
PRs for manpage 'mailwrapper(8)':
S | Submitted | Tracker | Resp. | Description |
o | 2001/10/20 | bin/31387 | mailwrapper(8): When getuid(2)=0, mailwrapper should drop priviledges | |
o | 2001/02/20 | bin/25218 | mailwrapper(8) invokes sendmail when resources are tight |
GNATS has no finer-grained categorization than 'kern', 'bin', 'ports', and so forth. To augment this, the bugmeisters have adopted the convention of adding '<name>(<section>)' to the Synopsis field. Consider this a prototype of a better search function.
Please give feedback on this report to email@example.com. Thanks.
Bugs can be in one of several states:
- o - open
- A problem report has been submitted, no sanity checking performed.
- a - analyzed
- The problem is understood and a solution is being sought.
- f - feedback
- Further work requires additional information from the originator or the community - possibly confirmation of the effectiveness of a proposed solution.
- p - patched
- A patch has been committed, but some issues (MFC and / or confirmation from originator) are still open.
- r - repocopy
- The resolution of the problem report is dependent on a repocopy operation within the CVS repository which is awaiting completion.
- s - suspended
- The problem is not being worked on, due to lack of information or resources. This is a prime candidate for somebody who is looking for a project to do. If the problem cannot be solved at all, it will be closed, rather than suspended.
- c - closed
- A problem report is closed when any changes have been integrated, documented, and tested -- or when fixing the problem is abandoned.


text:
Click to expand
What do you think? Give us your opinion. Anonymous comments allowed.
idkmyusername (03/21/2013) [-] But the drums in the deep....... the balroq... imagine how terrifying it would be to fight a 20ft tall fire demon on a 2ft long bridge above a gap that falls to the other side of the planet...
#51 to #10
bigmanfifty (03/21/2013) [-] Obviously actually spending a single minute in middle-earth would make you **** your pants.
unless you were in the shire, then you just smoke the pipe-weed, watch fireworks and drink up.
mfw shire
unless you were in the shire, then you just smoke the pipe-weed, watch fireworks and drink up.
mfw shire
#40 to #36
ljxjlos (03/21/2013) [-]
NOT exactly. They are close in terms of Strenght because Gandalf/Mithrandir/Olórin isn´t allowed to "go full-power", as he is only sent by the Valar as a Helper, an advisor, not as a warrior. Only because the Balrog are supposed to be Maiar, as Gandalf himself, it doesn´t mean, they are equal. Balrogs are clearly stated to be "lower Maiar" (still, extremely powerful, though), while Gandalf/Olórin is stated to be the wisest of the Maiar, and I´m pretty sure, he isn´t just all about Brains. Being the wisest of the Maiar, at least sets him on the same Level as Osse,Uinen,Sauron or maybe even Eonwe (even if I doubt that, particullary, even though I want to believe it)...


text:
August 2014, TruckingInfo.com - Cover Story
By Staff
There are many ways to tell a story – through words in books and magazines, pictures, videos, song, and more. With the inaugural issue of the HDT Fact Book, we are telling trucking's story through facts, numbers, statistics, charts, and graphs.
Tags: Emissions, Drivers, Safety, Equipment, Statistics, Parts, industry statistics, Fuel and Oil
January 2014, TruckingInfo.com - WebXclusive
By Deborah Lockridge
In May, Navistar International Corp. named Bill Kozek, a 26-year veteran of Paccar, as president of Navistar's North America Truck and Parts business. He succeeded Jack Allen, who was promoted to chief operating officer. Kozek spoke with HDT Editor in Chief Deborah Lockridge shortly after the company announced disappointing fourth-quarter earnings. Here's the Q&A.
Tags: Navistar, SCR, EGR, Engines, Emissions
We offer e-newsletters that deliver targeted news and information for the entire fleet industry.
The expert, Mark Betner from CITGO, will answer your questions
The expert, Rence Oliphant from Hendrickson, will answer your questions
Navman's Drive Apps Streamline Driver Workflow
Bendix Expands Reman Components Offering
Peterbilt's SmartLinq Shows Fleet Health in Real-Time
Predictive Cruise Control Available on Model 579 and 567


text:
If the game freezes, just click inside it (games can get unresponsive if you click elsewhere on the page).
Yes |
No |
This is a very crazy school, the school's teachers have a fast, accurate and relentless style of conduct, school students often crying, shouting and even the teacher, you are a teacher, come the possession of your students!
This game is played with mouse only.


text:
"My centre is giving way, my right is in retreat, situation excellent. I shall attack.
Find a translation for this quote in other languages:
Select another language:
Discuss this Marechal Ferdinand Foch quote with the community:
Quote of the Day
Would you like us to send you a FREE inspiring quote delivered to your inbox daily?
Use the citation below to add this quote to your bibliography:
"Marechal Ferdinand Foch Quotes." Quotes.net. STANDS4 LLC, 2015. Web. 20 Apr. 2015. <http://www.quotes.net/quote/47914>.


text:
Aloha from Missouri!
Made it to ST Genevieve Missouri last night and finally got the laptop hooked up.
Nice little town they got here, time to scope out the ladies! ^_^ My baby puddles is being shipped here in a truck, so lets hope it gets here soon Im already missing her. =( ~Lev |
Umm, is this a long term thing, or are you just visiting?
Prolly long term
~Lev |
So the new move was all about the women, huh? :p
...as long as they understand that from the get-go!!!
Good luck on the move Lev., and even more luck on the Missouri girls.........:eek:
Just kidding, hate that you had to move. Will miss you around here. Anyway, no need to be a stranger, and hope you will keep us updated on your progress. Take care Bro. |
Kinda excited heard there are some good places around here to wheel! ~Lev |
Don't forget.............you are the one in control of your destiny. One thing I have learned in life, no matter where I go, I am still there with all my baggage. Things don't change because of geographical relocation. Most of the things we want different in our lives, are within us, and not because of where we are. Dude, I get way to carried away with trying to express logic. Don't pay me any mind. I am just imparting years of experience. Hope you have a good time, and please don't be offended by what I just said. I just want you to be happy.
~Lev |
No problem, just be the best you can be, and be honest with yourself. Hope it all works out for you. Hope it dosen't take as long as it did, for me.
Sokay, bro. We're still next door neighbors. Just on the other side.
LOL yea, we went thru little rock last night to get here. Next week we will be heading back to Arkansas to place my grandparents head stone in Amity finally. Always loved Arkansas this time of the year.
~Lev |
Sorry Lev., I know I get too heavy, especially on a public forum. I wish you the best of luck.!!!!!!!!
Yeah, we lived in Missouri years ago. Damn good food but the ppl are a bit weird =P
~Lev |
Sad/happy for ya. Hope all is well. Stay away from the women. My first EX is from there. All 1st quarter, no finish. Still took all my sh*t. Pretty cool places up there, puddles should be happy!
Good luck in your new location, Lev. :D
So why the move? Job? Don't forget to change your location on your profile.
Just a change of location DFW area is a killer.
~Lev |
~Lev |
All times are GMT -5. The time now is 12:12 PM. |
User Alert System provided by
Advanced User Tagging v3.1.0 (Pro) -
vBulletin Mods & Addons Copyright © 2015 DragonByte Technologies Ltd.


text:
Friendly helpful staff greeted us at 7 AM for an early arrival at no extra charge. Mostly French but they understand English. We had a beach view room which was truly a suite including large ling room, small kitchenette bathroom, separate toilet and nice bedroom.The infinity pool is lovely but not much beach.
All the TV stations are in French. Food prices were extremely high but a nice, clean local place is just across the street and gives you a local flavor for food. The shuttle to town is only $7 pp each way.
Bedroom was big with another area meant to be a living room. Big drawback is that the bathrooms really smelled bad( it is because of some peculiar cleaner they use ). Even the bed smelled like pee. Food served at the restaurant was really bad!!!!
The surroundings are beautiful. Very 'Tahitian' - thundering surf, burning torches in the evening in front of the open air (hot!) restaurant. Room overlooking ocean with a nice good size patio.
Surly male staff at front desk. Elevators and vending machines out of order. Protruding rusty screws in pool lights ( be careful!)By 3 PM no more pool towels. No USA outlets in room, only European. Bring adaptor or buy an overpriced one at the 'boutique'
The price and proximity to downtown
The graffiti on the side of the building
Most staff were great, going the extra mile, rooms are huge and well appointed.
Night staff not so good. Wi-Fi was out and they refused to look into it. Towels are like sand paper and first room tv didn't work and no tolist paper dispenser. Little things that make it miss its apparent aim of being top notch. Area is a little sketch, fine if you have a car. If not then for women or cautious people I would stay elsewhere.
staff tried
mosquito breeding ground, dilapidated, "pool" is a joke, far from anything, no beach, no internet (charge extra - it doesn't work) terrible value for money. Next to hospital, so dreary guests want to talk about their son dying or their cancer diagnosis.
old needs upgraded
The pools were awesome! One pool was half swimming pool / half ocean lagoon with fish where you could snorkel and the other swimming pool was a sand-bottom infinity pool looking out onto the ocean. AMAZING! The cleaning staff and concierge were super nice
The check-in staff and food staff were not as friendly. They were pleasant but did not make us feel as welcome as the concierge and cleaning staff.
I strayed here with my husband and two kids ages 3 and 7. It was clean and up to date. U can walk to and from the airport and the market. It's about $20 can ride into town.
Clean and up to date
Very clean, stylish and functional. The room is of a good size, and the bathroom has a shower curtain. Had a good view over Moorea. Wifi was free.
The cable channels are all in French. There needs to be some English channels. The path up to the hotel is too steep and the concrete is rough. This needs to be smoothed. There are also a lot of steps to pull your suitcase over. There is no soap, just shower gel. There needs to be a proper bar of soap. The aircon tends to blow over the bed so you may need to shut off the aircon in the night.
The views were nice and there were shops within walking distance.
The hotel was very outdated and the staff had trouble communicating. Food selection was not very good.
Wir sind weder Anbieter noch Verkäufer. Wir bestimmen die Preise der angezeigten Reiseprodukte nicht selbst. Daher können wir nicht für die Produkte anderer Unternehmen garantieren.
Wir durchsuchen und sammeln riesige Mengen an Daten für Sie. Unser Service erlaubt es Ihnen, die Angebote Hunderter Reise-Websites schnell und einfach miteinander zu vergleichen. Als Suchmaschine können wir nicht für die gefundenen Preise garantieren.
Warum sind die Preise nicht in jedem Fall akkurat? Bei Flugtickets, Hotelzimmern und Mietwagen ändern sich ständig die Kontingente und Angebote. Preisdaten werden zwischengespeichert und aktualisiert, und all das bei Hunderten verschiedener Airlines und noch mehr Buchungssystemen, die allesamt dieselben Reiseprodukte zu verkaufen versuchen. Es kann also sein, dass ein Angebot nicht mehr zum selben Preis erhältlich ist oder bereits ausverkauft ist, bevor Sie zur Webseite des Anbieters gelangen.
Falls Sie weitere Fragen haben oder uns einen Preisfehler melden möchten, schicken Sie uns bitte eine E-Mail und wir werden Ihnen so schnell wie möglich weiterhelfen.


text:
Welcome, Sign In
Run Windows Programs on Your Mac
Description:If you switched to Mac from the PC, there are likely a few Windows applications that you miss. Running Windows on the Mac as a virtual machine though, you can run Windows apps full screen on your Mac and you'd swear you were sitting at a PC. You can also use "Unity" mode and run Windows programs inside OSX. (2:22)
Source: butterscotch
Tags: Run Windows Programs on Mac , apple , Apple Inc. , Apple Macintosh