Posted by: Nurul | August 3, 2009

Zend Studio Keyboard Shortcuts

Zend studio the boss PHP editor.

Here are some of the useful keyboard shortcuts for you

Editor

* Ctrl + D Duplicate Selection
* Ctrl + E Erase Line
* Ctrl + Space Show Code Completion
* Ctrl + Shift + 4 Collapse All DocBlocks

* Ctrl + Shift + 9 Collapse All DocBlocks
* Ctrl + Shift + E Expand All Folds
* Ctrl + Shift + C Collapse All Folds
* Ctrl + Space + Shft Show Function Arguments

* Ctrl + Shft + F Reformat Code
* Ctrl + / Add Remove Comment
* Ctrl + / + Shft Add Remove PHP Block Comment
* Ctrl + Enter Break Tag

* Ctrl + Back + Quote NBSP Tag
* F1 Open Function Help

Code Folding

* Ctrl + Shift + 1  Collapse All Non-PHP
* Ctrl + Shift + 2  Collapse All Classes
* Ctrl + Shift + 3  Collapse All Functions
* Ctrl + Shift + 4  Collapse All DocBlocks
* Ctrl + Shift + 9  Collapse All DocBlocks
* Ctrl + Shift + E  Expand All Folds
* Ctrl + Shift + C  Collapse All Folds

Debugging & Profiling

* F8 Debug URL
* F12 Profile URL
* Ctrl + F5 Run
* F5 Go

* F10 Step Over
* F11 Step Into
* Shft + F1 1 Step Out
* Shft + F5 Stop Debug

* Shft + F10 Go to Cursor
* F9 Toggle Breakpoint
* Shft + F8 Add Watch
* Ctrl + Alt + B Show In Browser

Find/Replace

* Ctrl + F Find
* F3 Find Next
* Shft + F3 Find Prev
* Ctrl + H Replace
* Ctrl + Alt + F Find In Files

CVS/Subversion

* Alt + U Update
* Alt + C Commit

Tools

* Alt + Ctrl + A Analyze Code
* Ctrl + Shft + I Check Include Files

Posted by: Nurul | July 12, 2009

Magento admin URL change

It is very easy to change admin URL for magento
If you want to change URL from

http://www.example.com/index.php/admin or http://www.example.com/admin
TO
http://www.example.com/index.php/siteadmin or http://www.example.com/siteadmin
Here’s what I did (worked for me on 1.3.1):

1) Open <magento_install_dir>/app/etc/local.xml
2) Find this code:

<config>
.
.
.
<admin>
<routers>
<adminhtml>
<args>
<frontName><![CDATA[admin]]></frontName>
</args>
</adminhtml>
</routers>
</admin>
.
.
.
</config>

3) In that snippit of code, change
<frontName><![CDATA[admin]]></frontName>
to
<frontName><![CDATA[siteadmin]]></frontName>
4) Save the local.xml file

5) Remove everything under <magento_install_dir>/var/cache/
6) Remove everything under <magento_install_dir>/var/session/

Update:
7) Don’t forget to change permissions for the local.xml to read only. I would recommend chmod 440 or 444.
:)

Posted by: Nurul | January 13, 2009

Top Joomla Extensions

According to people interest on joomla extensions these are the most popular joomla extensions

Community Builder

Community Builder

Community Builder suite (CB) extends the Joomla! user management system. Key features: extra fields in profile, enhanced registration workflows, user lists, connection paths between users, admin defined tabs and user profiles, image upload, front-end work

GPLv2.0Non-Commercialhttp://www.joomlapolis.com/

JCE

JCE

An advanced, configurable WYSIWYG editor for Joomla! based on Moxiecode’s TinyMCE. Includes advanced Image/Media, File and Link handling, plugin support, and an Administration interface for editor configuration.

Category:Editors

Expose Flash Gallery

Expose Flash Gallery

Exposé is a Flash-based tool which allows you to create eye-catching slide shows of your pictures on the web. A list of the features supported by exposé includes the following: – direct linking to a photo or album – a slide show can be automati

GPLv2.0Non-Commercialhttp://www.gotgtek.net

VirtueMart

VirtueMart

The complete e-Commerce shopping cart solution for Joomla! – used by thousands of store owners. It can be run in Store- and Catalog-Mode. With its powerful Administration Tool you can handle an unlimited Number of Categories, Products, Orders, Discounts,

GPLv2.0Non-Commercialhttp://virtuemart.net/
Category:Shopping Cart

SOBI2 – The Directory Component for Joomla

SOBI2 - The Directory Component for Joomla

SOBI 2 – Sigsiu Online Business Index 2 is a directory component for the WCMS Mambo and Joomla! to show entries of companies, clubs, persons, shops, products, aso. The entries are divided into categories, which can contain subcategories. One entry can be

GPLv2.0Non-Commercialhttp://www.sigsiu.net
Category:Directory

Events Calendar

Events Calendar

This project brings the well known and loved Events Calendar to Joomla. JEvents consists of a Joomfish compatible Joomla component and a number of modules and mambots. Component * One-off Events and complex repeating patterns of events can b

GPLv2.0Non-Commercialhttp://www.jevents.net
Category:Events

joomlaXplorer

joomlaXplorer

joomlaXplorer is a File- and FTP – Manager. It allows you to edit files, delete, copy, rename, archive and unpack files/directories directly on your server. You can – Browse Directories & Files – Edit, Copy, Move and Delete files – Search, Upload and D

AllVideos

AllVideos

*** Version 2.5.3 is out now, natively supporting Joomla! 1.0 and 1.5, introducing new features! (see the changelog below)*** AllVideos (by JoomlaWorks) is truely THE all-in-one media management solution for Joomla!. You can use the plugin to easily

GPLv2.0Non-Commercialhttp://www.joomlaworks.gr

Simple Image Gallery

Simple Image Gallery

*** Native Joomla! 1.5 version now available! *** Adding image galleries inside your Joomla! articles (content items) is now super-easy and simple, using the “Simple Image Gallery” Plugin for Joomla! 1.0.x & 1.5.x. Just add for example

GPLv2.0Non-Commercialhttp://www.joomlaworks.gr
Category:Photo Gallery

Joom!Fish – multilingual content manager

Joom!Fish - multilingual content manager

Joom!Fish 2.0 stable released! It is our pleasure to announce the immediate availability of Joom!Fish 2.0 stable version. Joom!Fish is the solution for your multilingual website if control over the translations matters for you. The extension is tot

GPLv2.0Non-Commercialhttp://www.joomfish.net

DOCman

DOCman

DOCman is a document management and download system for Joomla!. With this component your users can easily upload and manage files across multiple categories and make them available for download on a your Joomla! websites. Main features: * Infinite

GPLv2.0Non-Commercialhttp://www.joomlatools.eu
Category:Downloads

SmoothGallery + Lightbox Joomla Mambot Ajax

SmoothGallery + Lightbox Joomla Mambot Ajax

SmoothGallery Mambot allows you to easily and quickly add slideshows to your content items. This application is based on SmoothGallery by Jonathan Schemoul. http://smoothgallery.jondesign.net/ It now integrates with UGM – Ultimate Gallery Manager Componen

Extended Menu

This menu module offers almost all features of the mainmenu module plus many many more…. Like: – CSS- Menu with Sub-Menues – patTemplate support – split the menu up (e.g. sub-navigation on the side) – navigate through sections, categories, content i

Posted by: Nurul | November 26, 2008

PHP developer myths (increase performance)

Hi there are some myths retarding optimization PHP scripts
Main article
1# Using single quotes for your strings rather than double quotes can yield a substantial speed boost.
This is one of the most commonly repeated performance myths about PHP. Whether you use double quotes or single quotes is pretty much beside the point – yes, there is a performance boost to use single quotes, but it is much less than 0.01%, and it is generally just not worth the extra hassle. Many people use double quotes for everything, and that is fine – use whatever you feel most comfortable using, because it will not affect the speed of your script.
2# you should always take the comments and whitespace out of your scripts “for maximum performance”
Comments and whitespace have such a minute effect on the performance of your PHP scripts that it is not worth considering. Furthermore, if you use a PHP code cache system like Zend Performance Suite or PHP Accelerator, comments are stripped out for you in the cached version, meaning they have no impact at all.
3# Use GLOBAL inside function to access external values
There is a lot of fluff concerning the supposed performance hit of using GLOBAL inside functions to access external values. Some people will tell you it is faster to use GLOBAL, others that it is faster to pass a parameter in, and still others that it is faster to use a static or class variable to store the value in. I find them all to run at the same speed unless there are exceptional circumstances, and I would recommend you use the way that suits you best on the basis of ease of use as opposed to performance.
4# Use unset() on complex variables
You may find people telling you to use unset() on complex variables so that PHP can free up the resources. This is quite an unusual one to tackle, because it is the sort of thing that should be true, and it is re-enforced by the fact that using a function to free up external resources, such as mysql_close() and imagedestroy(), does actually have an effect. I have never found unset() to actually free up memory when it is called. In fact, it tends to just burn up a lot of CPU time, which might have the opposite impact to what you want. Generally I think it is best to leave PHP to do the clearing up of standard variables, even if they are very large arrays, and stick to concentrating on more important things.
5# use $var rather “$var”
Some may try to convince you that using typing print $var is better than print “$var”, and indeed it is – but not because one is faster. Instead, the first option looks a little neater, and I would recommend it for that reason only. Again, this is a style point – don’t let people tell you that either is faster than the other. This is particularly irrelevant if you use a PHP code cache, which will treat both code lines in exactly the same way.

Finally, be wary that a lot of the performance advice out there no longer applies as of PHP 5. For example, some people used to recommend putting methods as low down in your class hierarchy as possible on the grounds that function calls in derived classes are somehow faster than they would be if they were in the grandparent class. If this was true in a previous version of PHP, it is certainly no longer true now and you should stick with the OOP guidelines.

Posted by: Nurul | November 26, 2008

PHP Myths

It’s Really help me , Boost me up :)

I am a PHP developer. Maybe even a halfway decent one. As such, I often find myself engaged in conversations on the subject of web application development in general and PHP in particular. I am continually flustered by the myths, half-truths and outright falsehoods that technical and non-technical people alike hold about this humble programming language.

I’m far from a zealot about anything software related. I think if you’re excited about software, you’re missing the point. It’s like a carpenter being really excited about hammers instead of building houses. Having said that, I feel I really need to dispel a few of these things before they fester any longer. That and I’m getting tired of being talked down to by Java developers who feel their chosen language is The One True WayTM. So here’s my list.

So here’s Jaybill McCarthy’s Blog: 10 PHP Myth

Myth #1: PHP is not a truly Object-Oriented Language

I hear this one a lot from Java programmers. It’s completely false. PHP has excellent OO language facilities. There’s inheritance, abstract objects, interfaces, properties and methods. Okay, there’s no method overrides, but there are ways around this. Late binding is still a bit immature. I will say that there have been vast improvements in PHP’s OO mechanics with PHP 5, but I’ve written lots of PHP 4 apps that were totally OO. The mere fact that you can write purely procedural PHP code doesn’t mean that PHP isn’t OO capable. Furthermore, the fact that PHP allows you to mix OO and procedural code makes things like bootstrap scripts really simple.

Myth #2: PHP Encourages Sloppy Code

Also false. Is there a lot of sloppy PHP code around? Absolutely. PHP’s low entry barrier means that a lot of people who aren’t formally trained developers get in over their heads. The sloppy code that results is a result of poor training and bad management, not the language itself. Saying PHP encourages sloppy code is like saying hammers encourage bloody thumbs. Sure, you can bang your thumb with hammer, but is that the hammer’s fault or yours for not knowing how to use it correctly?

Myth #3: PHP doesn’t follow MVC

I know this sounds ridiculous, but I can’t tell you how many Rail-tards I’ve had this discussion with. No, PHP does not, in and of itself, provide an MVC framework. Neither does Ruby, or any language for that matter. That’s because Ruby and PHP are languages, not a application frameworks. MVC is a design pattern, not a language facility. There are many great MVC frameworks written for PHP. I like the Zend Framework. Can you make database calls from a script that also renders HTML? Sure you can. Does that mean you should? No.

Myth #4: PHP is slow because it’s interpreted

This one is insidious because it sounds so plausible. In fact, it should be true. In practice, it’s not. The Zend Engine that powers most PHP implementations is ridiculously fast right out of the box. Combine it with an accelerator, (like the free eAccelerator) which pre-complies and caches the code (and re-complies it if it changes on the disk), and it’s one of the best performing application platforms around, even compared to things that are traditionally compiled, like Java and .NET. Short of writing your app in C or C++, compiling it native and hooking directly into the web server or something, you’re not really going to get much faster.

Myth #5: PHP doesn’t have a good IDE or Debugger

This is true. I doesn’t have one. It has several. There are at least two debuggers and many good IDEs. You can get all the goodies you’d expect, like breakpoints, variable watching, mouse-over evaluation, etc. Can you use a text editor and an FTP client? Sure you can. You certainly don’t have to, though.

Myth #6: PHP apps all look the same

I have to say, it took me a long time to figure out what people who made this assertion were getting at. At first I shrugged it off as if the person saying it was crazy. After all, PHP is just a language, you can make the output look like…whatever you want! Surprisingly, I’ve heard this a lot. Eventually I determined that the confusion stems from non-technical people confusing PHP with PHP-Nuke, which is just an application written in PHP. It’s fairly customizable, but deals in columns and boxes that all look kind of the same.

Myth #7: PHP isn’t really for “serious” developers.

This is another one I hear from Java developers (and perhaps more amusingly, .NET developers). Similar to #2, I think this stems from PHP’s low entry barrier. Pretty much anyone can learn the rudiments of hacking a PHP script together in an afternoon. Does this mean it has no place in “serious” development by “serious” developers? Well, PHP, like any development platform, is a tool. How well a tool is used varies greatly based on the skill and training of the person using it. I have written many large scale, robust, high performance applications in PHP and so have lots of other people.

Myth #8: PHP is only good for web applications

That was true once, but these days it’s pretty much general purpose. It has a command line interpreter that can be run completely independent of the web server (for scripts) but can still use your existing PHP code libraries. You can even knock together GUI applications using PHP-GTK. Admittedly, PHP’s lineage and primary purpose is web applications, but that’s far from all you can do with it.

Myth #9: PHP code is a mess of “include” and “require” statements that break easily.

Being a scripting language, PHP is interpreted at run-time. That means any code that gets executed has to get pulled off the disk and the script in question needs to know where that is. The easiest (but by far the worst) way to do this is to place an “include” or “require” statement that loads your external script. If you do this and you move or rename a file, your script breaks unless you change the offending statement. A mess of includes and requires can make your code into spaghetti.

Fortunately, by following sound OO processes, good naming conventions and using __autoload, in-line includes and requires are generally completely unnecessary. __autoload is a callback function that accepts a class name as an argument. If you instantiate a class that the engine doesn’t know about, it calls your __autoload with the name of the class as a string. Assuming you have a reasonable naming convention, (one class per file, class name and filename match) it’s pretty trivial to load the required class when you need it. This has the side benefit of only loading classes that are actually needed for a particular script, as opposed to loading all of them before your script even runs.

Myth #10: PHP Code is rife with in-line SQL statements

Take a look at a lot of PHP applications and you’ll see it. SQL being scraped together with concatenated strings and passed to database (often mysql) specific statements. This makes your code brittle, annoying to debug and maintain and subject to SQL-injection attacks. It’s also completely unnecessary and easily avoided. Simply use a database abstraction layer like Zend_DB or ADOdb instead of directly talking to the database.

So there you have it. Ten common PHP myths utterly…well…busted. This isn’t to say that PHP isn’t without its faults, but I think few other tools get the unwarranted bad rap that PHP gets. Here’s hoping I cleared things up a little!

Posted by: Nurul | November 26, 2008

Creating Joomla plugin

Joomla! plugins serve a variety of purposes.They are like hook of Joomla!.  As modules enhance the presentation of the final output of the Web site, plugins enhance the data and can also provide additional, installable functionality

The eight different types of plug-ins include the following:
Authentication — Provides user authentication functionality so that additional methods may be
added. Some of the authentication plug-ins included with Joomla are LDAP, OpenID, GMail,
and Joomla.
Content — Allows content to be modified after it is retrieved from the database and before it
is sent to the user. This allows content to be modified (for applications such as email address
cloaking to prevent spam) or supplemented with additional information (such as item rating,
user comments, and page navigation features).
Editor — For content editors such as TinyMCE and XStandard Lite.
Editor button — These plug-ins extend the capabilities of the content editor with buttons that
add functions such as the ability to insert an image or a page break. In previous versions of
Joomla, this type of plug-in was called an editor-xtd.
Search — Used to add search capabilities for a particular item type such as content, sections,
contacts, Web links, newsfeeds, or categories.
System — Interfaces with the core Joomla system functions and allows control and modification
over foundation tasks such as publishing, unpublishing, and even installation.

User—Used to synchronize a user database with another user privilege system such as Gallery2,
Simple Machines Forum, and so on.
XML-RPC — Receives events directed through the XML Remote Procedure Call (RPC) communication
protocol.

Here is a tutorial  to create a content type plugin

For more about it visit developer Joomla! website

:)

Posted by: Nurul | November 26, 2008

Joomla Tips & Tricks

There are  lots of help around the web about joomla. Here are  some tips and tricks  links about Joomla!

http://docs.joomla.org/Category:Tips_and_tricks

http://www.alledia.com/blog/joomla-tips-&-tricks/

http://www.dart-creations.com/joomla-tips-and-tricks/

http://www.tm4y.co.za/joomla-tips/

These are very helpful to work :)

Posted by: Nurul | July 10, 2008

PHP4 is going to die (the PHP4 8-8-08 Deadline)

August 8th marks the point when nothing (at all) will be done to any version of PHP4 again. Full support ended back in December of 2007 with no new versions being released. 8-8-08 marks the end of that as well and PHP4 developers that discover bugs may not be able to get them fixed for more

Posted by: Nurul | June 24, 2008

HTTPS and SSL Setup Step-by-Step Guide

I have tried to enable SSL on localhost . I found a solution on wampserver forum . You can try this :)

****************
****Step1****** -> Create SSL Certificate and Key
****************

1a) Open the DOS command window and change directory to bin directory of wamp apache directory by using the DOS command without quotes: “cd /d c:\” and then “cd wamp\bin\apache\apache2.2.8\bin”. apache2.2.8 should be changed to what apache folder your wamp server has.

After done, the DOS prompt should look like: C:\wamp\bin\apache\apache2.2.8\bin>

1b) Create a server key with 1024 bits encryption. You should enter this command without quotes:
“openssl genrsa -des3 -out server.key 1024″. It’ll ask you a pass phrase, just enter it. ‘
1c) Remove the pass phrase from the RSA private key (while keeping a backup copy of the original file). Enter this command without quotes: “copy server.key server.key.org” and then “openssl rsa -in server.key.org -out server.key”. It’ll ask you the pass phrase, just type it.

1d) Create a self-signed Certificate (X509 structure) with the RSA key you just created. Enter the command without quotes: “openssl req -new -x509 -nodes -sha1 -days 365 -key server.key -out server.crt -config C:\wamp\bin\apache\apache2.2.8\conf\openssl.cnf”.

You’ll fill in the information after entering this command. The correct location of config file, openssl.cnf may need to be changed. In windows, you won’t see “.cnf” extension of the file openssl, but in DOS you’ll see the full name openssl.cnf.

****************
***** Step2***** -> Copy the server.key and server.crt files.
****************

2a) In the conf folder of apache2.2.8 folder, create two folders named as ssl.key and ssl.crt

2b) copy the server.key file to ssl.key folder and server.crt file to ssl.crt

****************
****Step3****** -> Edit the httpd.conf file and php.ini
****************

3a) In httpd.conf file, remove the comment ‘#’ at the line which says: LoadModule ssl_module
modules/mod_ssl.so

3b) In httpd.conf, remove the comment ‘#’ at the line which says: Include
conf/extra/httpd_ssl.conf
Then move that line after this block <IfModule ssl_module>…. </IfModule>

3c) open the php.ini file located in apache2.2….\bin folder, remove the comment ‘;’ at the line
which says: extension=php_openssl.dll

***************
****Step4***** -> Edit the httpd_ssl.conf file in the folder name, extra
***************

4a) Find the line which says “SSLMutex ….” and change it to “SSLMutex default” without quotes

4b) Find the line which says: <VirtualHost _default_:443>. Right after it, change the line which says “DocumentRoot …” to DocumentRoot “C:/wamp/www/” with quotes. Change the line “ErrorLog….” to Errorlog logs/sslerror_log. Change the line “TransferLog ….” to TransferLog logs/sslaccess_log

4c) SSL crt file: Change the line “SSLCertificateFile ….” to SSLCertificateFile “conf/ssl.crt/server.crt”

4d) SSL key file: Change the line “SSLCertificateKeyFile ….” to SSLCertificateKeyFile “conf/ssl.key/server.key”

4e) Change the line which says <Directory “C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin”> or something similar to <Directory “C:/wamp/www/”> and add the following lines inside those <Directory … >…</Directory> tags:

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

4f) Make sure the line CustomLog “logs/ssl_request_log” \
is uncommented (remove the #). This step is suggested by wmorse1.

**************
****Step5**** In the previous DOS Command windows, enter httpd -t . If it displays Sysntax is OK, then
************** go to Step 6. If not, then correct the wrong syntax and redo step 5.

**************
****Step6***** -> Restart the Apache server
***************

**************
****Step7**** -> if restart is successful, then open the browser and enter “https://localhost” without
************** quotes.

*************************
****Step8 (Optional)**** -> If you want to allow world wide web access to your HTTPS secure server, then
************** ********** in the httpd_ssl.conf file, change the line which says ‘ServerName localhost:443′ to ‘ServerName www.yourwebsitename.com:443′ without quotes. yourwebsitename is your registered internet domain name. If you don’t have it, then just use your WAN IP address. For example ‘ServerName 99.238.53.105:443′. Make sure these setups are correct to allow outside access to secured www server.

8.a The DocumentRoot you modified in step 4b points to the correct website folder on your
computer.

8.b If your computer’s connected to the router, setup the router to allow port 443 forwarding to your
computer.

8.c If your computer has a firewall enabled or behind a network firewall, set up the firewall to allow
incoming port 443 connection

And finally

Posted by: Nurul | May 25, 2008

Are you a lousy PHP programmer?

This is really nice post. I really love this post. I want to share this for all please visit
40 signs you really are a lousy PHP programmer
to know more. Here is some part for you.

You are a lousy PHP programmer if you

  1. don’t comment your code properly with something like phpDoc
  2. don’t see the need and/or benefits of a good programming IDE like Zend Studio or Eclipse PDT
  3. have never used some form of version control like Subclipse
  4. don’t adopt some coding & naming standards and general conventions and stick to to them at least throughout the project
  5. don’t use a consistent methodology
  6. don’t escape and/or validate properly input or sql queries
  7. don’t plan your application thoroughly before starting to code
  8. don’t use test-driven development
  9. don’t program & test with error reporting on
  10. don’t see the benefits of a debugger
  11. don’t refactor your code
  12. don’t keep the different layers seperated using something like MVC
  13. don’t know what these stand for: KISS, DRY, MVC, OOP, REST
  14. don’t return content but echo or print it from your functions or classes
  15. have never seen the advantage of unit tests or testing in general
  16. return HTML, not data, strings, or objects.
  17. hard code messages and configuration parameters
  18. don’t optimize your sql queries
  19. don’t use __autoload
  20. don’t allow intelligent error handling
  21. use $_GET instead of $_POST for any destructive actions
  22. don’t know how to use regular expressions
  23. you’ve never heard of sql injection or cross-site scripting
  24. don’t allow simple configuration, can be parameters passed to a class’s constructor, set/get methods called later, or constants defined at a runtime.
  25. don’t understand the benefits and limitations of Object Oriented Programming
  26. misuse OOP / everything you write , no matter how small is OOP
  27. you think reusable software equals/requires your code to be OOP
  28. don’t choose intelligent defaults
  29. don’t have one single configuration file
  30. don’t want the file contents to be seen, but give it a .inc extension instead of .php
  31. don’t use a database abstraction layer
  32. don’t keep it DRY, Don’t repeat yourself. If you have to copy and paste or duplicate something your design may be off.
  33. don’t make a function/class/method do just one thing and don’t make them interact.
  34. don’t try to take advantage of OOP specific features like abstract/interface classes, inheritage polymorphism & access modifiers.
  35. don’t optimize your application design with established design patterns
  36. don’t allow your user to define a base directory if you have multiple files and/or directories
  37. pollute the global namespace, one option is to prefix the functions in your library with a common string
  38. don’t allow a table prefix when using database tables
  39. use a separate template engine
  40. don’t take a look at established php frameworks for inspiration, most of them have advanced web dev concepts and good code

Older Posts »

Categories