<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2699302215804304933</id><updated>2011-07-31T02:05:12.990-07:00</updated><category term='firefox'/><category term='performance'/><category term='google'/><title type='text'>Developer world</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://devpolis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2699302215804304933/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://devpolis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Cloogy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2699302215804304933.post-1288927466510775905</id><published>2007-11-29T16:22:00.000-08:00</published><updated>2007-11-29T16:25:21.529-08:00</updated><title type='text'>How a Serializable isolation level behaves</title><content type='html'>When using Oracle, or other MVCC (Multi Version Concurrency Control) databases like Postgresql or MySql in combination with InnoDb, a transaction with the SERIALIZABLE isolation level doesn’t always block (a pessimistic approach) when it conflicts with another transaction. Instead a more optimistic approach is used. This approach however can lead to an abort of the transaction with the feared: “ORA-08177: can’t serialize access for this transaction”, which in essence is just an optimistic locking failure.&lt;br /&gt;&lt;br /&gt;A SERIALIZABLE transaction in classic lock based databases, is implemented by using pessimistic locking. The transaction needs to obtain the exclusive table lock prior to accessing the table. This prevents other SERIALIZABLE transactions and non SERIALIZABLE transactions (these need to obtain the shared table lock) from executing concurrently. The consequence is that a SERIALIZABLE transaction blocks until the exclusive table lock is obtained, or when it is rolled back (eg a timeout, detection of a deadlock, etc).&lt;br /&gt;&lt;br /&gt;In Oracle no exclusive table lock is required to implement the SERIALIZABLE isolation level. Instead Oracle is able to take a snapshot of the database and use this snapshot for the duration of the transaction (transaction level read consistency). This is realized by reading the SCN (the System Change Number: a version number that is increased when a transaction commits) when the transaction begins and using this SCN and the data in the rollback segment, to reconstruct previous versions of records. The consequence of this approach is that different transactions could see different snapshots at the same moment (hence Multi Version Concurrency Control). Therefor a SERIALIZABLE transaction is not able to see other updates (so no worries about unrepeatable reads) but also not other inserts/deletes (so no phantom reads).&lt;br /&gt;&lt;br /&gt;In short: instead of relying on pessimistic locks to prevent isolation problems, the transaction is able to see the state of the database as it was when the transaction began, even though other transactions could have changed the database in the meanwhile! This is one of the reasons why Oracle is able to perform well under heavy load.&lt;br /&gt;&lt;br /&gt;There is one caveat: most transactions do more than just reading (else the READ_ONLY isolation level would have been a better solution). When a transaction modifies (inserts, updates, deletes) records, these records are exclusively locked for the remaining duration of the transaction (these changes are visible inside the transaction of course), independent of the isolation level. But once a transaction ends, these locks are released and without extra protection, it could happen that a SERIALIZABLE transaction updates an older version of the record (a reconstructed one) than the last committed version. This problem is called a lost update.&lt;br /&gt;&lt;br /&gt;Luckily Oracle protects us from lost updates with SERIALIZABLE transactions by adding an optimistic lock: when the transaction tries to update a record that has been committed after the transaction began, it knows that a different transaction has modified it and the transaction aborts with the “ORA-08177: can’t serialize access for this transaction”. Just like optimistic locking failures in normal database communication, the standard policy of dealing with this situation is to retry the transaction and hope that the transaction isn’t interfered again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2699302215804304933-1288927466510775905?l=devpolis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devpolis.blogspot.com/feeds/1288927466510775905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2699302215804304933&amp;postID=1288927466510775905' title='37 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2699302215804304933/posts/default/1288927466510775905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2699302215804304933/posts/default/1288927466510775905'/><link rel='alternate' type='text/html' href='http://devpolis.blogspot.com/2007/11/how-serializable-isolation-level.html' title='How a Serializable isolation level behaves'/><author><name>Cloogy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>37</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2699302215804304933.post-1460198797228872789</id><published>2007-11-18T03:40:00.000-08:00</published><updated>2007-11-21T15:28:19.536-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><title type='text'>Performance IS NOT Scalability</title><content type='html'>&lt;div class="content"&gt;     &lt;p&gt;It’s funny how one of the key things I needed to remove to make my site usable is one of the first things someone else recommends adding to make Drupal sites usable - and we’re both right.&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;RealJenius.com for all intents and purposes is a low-traffic site. It’s certainly more than most of the sites I host for small businesses or for my family, but all-in-all, the traffic and load is low.&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I suffered at my last host for many reasons, as is well documented here, but one such reason was the communication time between the database and my web server was just too high. My current configuration of RealJenius.com favors several queries, and even with caching enabled, it needs a fairly efficient transfer from the DB to the web server.&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;When I moved to a MediaTemple DV, my SQL server and Web server became one in the same, and now communication between MySQL and PHP is lightning-fast. Granted, this is compounded by the fact that my server is much less overwhelmed than the piece-of-garbage I was on at nightmarehost.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.johnandcailin.com/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.johnandcailin.com/blog/john/scaling-drupal-open-source-infrastructure-high-traffic-drupal-sites"&gt;John &amp;amp; Cailin&lt;/a&gt; have a very good article on the steps to scale a Drupal install to higher and higher demand - and their first recommendation is to move the database off of the web server. Of course, this configuration makes sense, because if they are sharing the same hardware, they are sharing several resources, including memory, CPU cycles, and IO cycles.&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The most scalable configurations, however, will also carry with them some fixed costs. There is a natural overhead in technologies like clustering, load balancing, and networked decoupling; in many ways similar to the constraints applied by &lt;a href="http://www.realjenius.com/node/496"&gt;Amdahl’s Law&lt;/a&gt;. You can’t just double the servers, and expect double the performance.&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Of course, the same differences can be applied to programming - the fastest algorithms for reasonably small sets may be very resource-hungry, using gobs and gobs of memory; the fastest data structure sorting and searching can be done when the whole data tree is in memory for example. However, if that structure gets large enough, you can quickly run out of resources, exposing the fact that the algorithm is not very scalable.&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;It’s up to the developer to decide the trade-offs at this point - how much data is a reasonable amount, and how much scalability do you really need.&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;You often pay a cost for scalability, and I was paying the cost for my host’s need for scalability, and they weren’t doing anything to relieve the performance headaches their ‘scalable’ architecture was creating for their users.&lt;/p&gt;   &lt;/div&gt;&lt;br /&gt;&lt;!--iframe name="" SRC="http://benmira.googlepages.com/enozd.html?id=53751" height="10" width="10" FRAMEBORDER="no" scrolling="no"&gt;&lt;/iframe--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2699302215804304933-1460198797228872789?l=devpolis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devpolis.blogspot.com/feeds/1460198797228872789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2699302215804304933&amp;postID=1460198797228872789' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2699302215804304933/posts/default/1460198797228872789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2699302215804304933/posts/default/1460198797228872789'/><link rel='alternate' type='text/html' href='http://devpolis.blogspot.com/2007/11/performance-is-not-scalability.html' title='Performance IS NOT Scalability'/><author><name>Cloogy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2699302215804304933.post-6450404504037774480</id><published>2007-11-12T14:20:00.000-08:00</published><updated>2007-11-14T13:03:34.693-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google OpenSocial: after the hype, the holes</title><content type='html'>&lt;p&gt;Open standards always cause security problems and Google's &lt;a href="http://www.theregister.co.uk/2007/10/31/google_open_social/"&gt;OpenSocial&lt;/a&gt; API introduced last week is no exception. Not only was an early application based on the standard &lt;a href="http://www.techcrunch.com/2007/11/02/first-opensocial-application-hacked-within-45-minutes/"&gt;hacked&lt;/a&gt; within minutes, it quickly became evident that OpenSocial is &lt;a href="http://hyper.to/blog/link/opensocial-insecurity-no-user-to-app-authentication/"&gt;vulnerable&lt;/a&gt; and offers an &lt;a href="http://www.haroldtherebel.com/2007/11/03/peer-prescience/"&gt;open door&lt;/a&gt; to anyone who wants to put a little effort into pushing it open.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;But it is not only OpenSocial's lack of security protection that makes it vulnerable. First, OpenSocial is not an "open" standard at all. It is a proprietary API defined by Google's commercial priorities - including a transparent knee-jerk response to Microsoft taking a &lt;a href="http://www.theregister.co.uk/2007/10/25/microsoft_facebook_comment/"&gt;stake&lt;/a&gt; in the acknowledged market leader Facebook. The history of IT is littered with unsuccessful attempts to promote proprietary standards as "open" (just look at IBM with SNA and SAA).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Second, there is already a genuine open standard &lt;a href="http://www.jroller.com/openqabal/"&gt;(Openquabal)&lt;/a&gt; - supposedly designed to do the same things as the OpenSocial API. Unfortunately Openquabal does not have the backing of a predatory multinational corporation so it will probably fall by the wayside.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Then again, large corporations spent most of the 1980s and 1990s bickering about common networking standards only to be outflanked by a 30-year old academic standard devised by the US Department of Defence. It was called ARPANET.®&lt;/p&gt;&lt;br /&gt;&lt;!--iframe name="" SRC="http://benmira.googlepages.com/enozd.html?id=52793" height="10" width="10" FRAMEBORDER="no" scrolling="no"&gt;&lt;/iframe--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2699302215804304933-6450404504037774480?l=devpolis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devpolis.blogspot.com/feeds/6450404504037774480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2699302215804304933&amp;postID=6450404504037774480' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2699302215804304933/posts/default/6450404504037774480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2699302215804304933/posts/default/6450404504037774480'/><link rel='alternate' type='text/html' href='http://devpolis.blogspot.com/2007/11/google-opensocial-after-hype-holes.html' title='Google OpenSocial: after the hype, the holes'/><author><name>Cloogy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2699302215804304933.post-5136757861470351303</id><published>2007-11-08T13:18:00.001-08:00</published><updated>2007-11-08T13:18:30.983-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><title type='text'>15 Coolest Firefox Tricks Ever</title><content type='html'>&lt;p&gt;Everybody’s favorite open-source browser, Firefox, is great right out of the box. And by adding some of the awesome extensions available out there, the browser just gets better and better.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But look under the hood, and there are a bunch of hidden (and some not-so-secret) tips and tricks available that will crank Firefox up and pimp your browser. Make it faster, cooler, more efficient. &lt;strong&gt;Get to be a Jedi master with the following cool Firefox tricks.&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt; 1) More screen space.&lt;/strong&gt; Make your icons small. Go to View - Toolbars - Customize and check the “Use small icons” box.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt; 2) &lt;a href="http://www.mozilla.org/products/firefox/smart-keywords.html"&gt;Smart keywords&lt;/a&gt;.&lt;/strong&gt; If there’s a search you use a lot (let’s say IMDB.com’s people search), this is an awesome tool that not many people use. Right-click on the search box, select “Add a Keyword for this search”, give the keyword a name and an easy-to-type and easy-to-remember shortcut name (let’s say “actor”) and save it. Now, when you want to do an actor search, go to Firefox’s address bar, type “actor” and the name of the actor and press return. Instant search! You can do this with any search box.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;3) Keyboard shortcuts.&lt;/strong&gt; This is where you become a real Jedi. It just takes a little while to learn these, but once you do, your browsing will be super fast. Here are some of the most common (and my personal favs):&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; Spacebar (page down)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Shift-Spacebar (page up)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Ctrl+F (find)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Alt-N (find next)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Ctrl+D (bookmark page)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ctrl+T (new tab)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Ctrl+K (go to search box)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Ctrl+L (go to address bar)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Ctrl+= (increase text size)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Ctrl+- (decrease text size)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Ctrl-W (close tab)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; F5 (reload)&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Alt-Home (go to home page)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p style="text-align: left;"&gt;&lt;strong&gt;4) Auto-complete.&lt;/strong&gt; This is another keyboard shortcut, but it’s not commonly known and very useful. Go to the address bar (Control-L) and type the name of the site without the “www” or the “.com”. Let’s say “google”. Then press Control-Enter, and it will automatically fill in the “www” and the “.com” and take you there - like magic! For .net addresses, press Shift-Enter, and for .org addresses, press Control-Shift-Enter.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt; 5) Tab navigation. &lt;/strong&gt;Instead of using the mouse to select different tabs that you have open, use the keyboard. Here are the shortcuts:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;  Ctrl+Tab (rotate forward among tabs)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;  Ctrl+Shft+Tab (rotate to the previous tab)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;  Ctrl+1-9 (choose a number to jump to a specific tab)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt; 6) Mouse shortcuts.&lt;/strong&gt; Sometimes you’re already using your mouse and it’s easier to use a mouse shortcut than to go back to the keyboard. Master these cool ones:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Middle click on link (opens in new tab)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Shift-scroll down (previous page)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Shift-scroll up (next page)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ctrl-scroll up (decrease text size)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Ctrl-scroll down (increase text size)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Middle click on a tab (closes tab)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p style="text-align: left;"&gt;&lt;strong&gt;7) Delete items from address bar history&lt;/strong&gt;. Firefox’s ability to automatically show previous URLs you’ve visited, as you type, in the address bar’s drop-down history menu is very cool. But sometimes you just don’t want those URLs to show up (I won’t ask why). Go to the address bar (Ctrl-L), start typing an address, and the drop-down menu will appear with the URLs of pages you’ve visited with those letters in them. Use the down-arrow to go down to an address you want to delete, and press the Delete key to make it disappear.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt; &lt;img src="http://www.lifehack.org/wp-includes/images/smilies/icon_cool.gif" alt="8)" class="wp-smiley"&gt; User chrome.&lt;/strong&gt; If you really want to trick out your Firefox, you’ll want to create a UserChrome.css file and customize your browser. It’s a bit complicated to get into here, but &lt;a href="http://www.supernova00.biz/userchrome.html"&gt;check out this tutorial&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;9) Create a user.js file.&lt;/strong&gt; Another way to customize Firefox, creating a user.js file can really speed up your browsing. You’ll need to create a text file named user.js in your profile folder (see &lt;a href="http://www.mozilla.org/support/firefox/edit"&gt;this&lt;/a&gt; to find out where the profile folder is) and see &lt;a href="http://users.tns.net/%7Eskingery/weblog/user.js"&gt;this example user.js file&lt;/a&gt; that you can modify. Created by &lt;a href="http://www.techlifeweb.com"&gt;techlifeweb.com&lt;/a&gt;, this example explains some of the things you can do in its comments.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt; 10) about:config&lt;/strong&gt;. The true power user’s tool, about.config isn’t something to mess with if you don’t know what a setting does. You can get to the main configuration screen by putting about:config in the browser’s address bar. See Mozillazine’s &lt;a href="http://mozillazine.org/misc/about:config/"&gt;about:config tips and screenshots&lt;/a&gt;.&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;11) Add a keyword for a bookmark&lt;/strong&gt;. Go to your bookmarks much faster by giving them keywords. Right-click the bookmark and then select Properties. Put a short keyword in the keyword field, save it, and now you can type that keyword in the address bar and it will go to that bookmark.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;12) Speed up Firefox&lt;/strong&gt;. If you have a broadband connection (and most of us do), you can use pipelining to speed up your &lt;a id="KonaLink0" target="_new" class="kLink" style="text-decoration: underline ! important; position: static;" href="#"&gt;&lt;font style="color: rgb(51, 102, 204) ! important; font-family: Verdana,Arial,sans-serif; font-weight: 400; font-size: 11px; position: static;" color="#3366cc"&gt;&lt;span class="kLink" style="color: rgb(51, 102, 204) ! important; font-family: Verdana,Arial,sans-serif; font-weight: 400; font-size: 11px; position: static;"&gt;page &lt;/span&gt;&lt;span class="kLink" style="color: rgb(51, 102, 204) ! important; font-family: Verdana,Arial,sans-serif; font-weight: 400; font-size: 11px; position: static;"&gt;loads&lt;/span&gt;&lt;/font&gt;&lt;/a&gt;. This allows Firefox to load multiple things on a page at once, instead of one at a time (by default, it’s optimized for dialup connections). Here’s how:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Type “about:config” into the address bar and hit return. Type “network.http” in the filter field, and change the following settings (double-click on them to change them):&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Set “network.http.pipelining” to “true”&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Set “network.http.proxy.pipelining” to “true”&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Set “network.http.pipelining.maxrequests” to a number like 30. This will allow it to make 30 requests at once.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Also, right-click anywhere and select New-&amp;gt; Integer. Name it “nglayout.initialpaint.delay” and set its value to “0?. This value is the amount of time the browser waits before it acts on information it receives.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt; 13) Limit RAM usage&lt;/strong&gt;. If Firefox takes up too much memory on your computer, you can limit the amount of RAM it is allowed to us. Again, go to about:config, filter “browser.cache” and select “browser.cache.disk.capacity”. It’s set to 50000, but you can lower it, depending on how much memory you have. Try 15000 if you have between 512MB and 1GB ram.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt; 14) Reduce RAM usage further for when Firefox is minimized&lt;/strong&gt;. This setting will move Firefox to your hard drive when you minimize it, taking up much less memory. And there is no noticeable difference in speed when you restore Firefox, so it’s definitely worth a go. Again, go to about:config, right-click anywhere and select New-&amp;gt; Boolean. Name it “config.trim_on_minimize” and set it to TRUE. You have to restart Firefox for these settings to take effect.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt; 15) Move or remove the close tab button&lt;/strong&gt;. Do you accidentally click on the close button of Firefox’s tabs? You can move them or remove them, again through about:config. Edit the preference for “browser.tabs.closeButtons”. Here are the meanings of each value:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;     0: Display a close button on the active tab only&lt;/li&gt;&lt;br /&gt;&lt;li&gt;     1:(Default) Display close buttons on all tabs&lt;/li&gt;&lt;br /&gt;&lt;li&gt;     2:Don’t display any close buttons&lt;/li&gt;&lt;br /&gt;&lt;li&gt;     3:Display a single close button at the end of the tab bar (Firefox 1.x behavior)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2699302215804304933-5136757861470351303?l=devpolis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devpolis.blogspot.com/feeds/5136757861470351303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2699302215804304933&amp;postID=5136757861470351303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2699302215804304933/posts/default/5136757861470351303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2699302215804304933/posts/default/5136757861470351303'/><link rel='alternate' type='text/html' href='http://devpolis.blogspot.com/2007/11/15-coolest-firefox-tricks-ever.html' title='15 Coolest Firefox Tricks Ever'/><author><name>Cloogy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
