Jon-G blogs for Net-Entwicklung.de

03.10.2009

IE Testing

Abgelegt unter: Coding — Schlagwörter:, — Jonathan Gilbert @ 18:15

Testing web applications with Internet Explorer was always a daunting task. Back in the days of IE3, IE4, IE5 and IE5.5 for Mac it was quite normal to have different PCs running different versions because IE never really had a viable option for installing different versions parallel. There was a trick on upgrading from IE4 to 5 which allowed this in theory but each version still tended to work a little different to standalone installations.

Nowadays things are easier – it is quite easy have different configurations running in virtual machines. There are however some other tools kicking around which also (supposedly?) make things easier. Here a a few links I´ve collected (but not necessarily tried):
http://en.gibney.org/crossbrowser_testing/
http://www.my-debugbar.com/wiki/IETester/HomePage “IETester is a free WebBrowser that allows you to have the rendering and javascript engines of IE8, IE7 IE 6 and IE5.5 on Windows 7, Vista and XP, as well as the installed IE in the same process.”

http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64- B5F1-73D0A413C8EF&displaylang=en#filelist VirtualPC direct from Microsoft

06.08.2009

This is amazing! It really works!

Abgelegt unter: Fun stuff — Jonathan Gilbert @ 08:29

amazing

15.07.2009

Interesting reads (PHP & more) and tools (Twitter & more)

Abgelegt unter: Coding, Databases, Tools — Jonathan Gilbert @ 17:38

More on PHP Performance
http://php100.wordpress.com/2009/07/13/php-performance/

Benchmarking PHP
http://blueprint.intereactive.net/benchmarking-our-php/

PHP Abstract Podcast Episode 42: Keith Casey & Web2Project
http://devzone.zend.com/article/4831-PHP-Abstract-Podcast-Episode-42-Keith-Casey-Web2Project

3 Part Series on namespaces in PHP 5.3
http://www.sitepoint.com/blogs/2009/07/13/php-53-namespaces-basics/
http://www.sitepoint.com/blogs/2009/07/14/php-namespaces-import-alias-resolution/
http://www.sitepoint.com/blogs/2009/07/15/how-to-use-php-namespaces-part-3-keywords-and-autoloading/

50 useful PHP Tools
http://www.smashingmagazine.com/2009/01/20/50-extremely-useful-php-tools/

List of “White Label” or “Private Label” (Applications you can Rebrand) Social Networking Platforms, Community Platforms
http://www.web-strategist.com/blog/2007/02/12/list-of-white-label-social-networking-platforms/

Freitags Open House für Freiberufler, Ideen und Projekte
http://hallenprojekt.de/mindmatters

The “AddToAny”-widgets
http://www.addtoany.com/

Twitter Tool for Team Tweeting
http://www.tweetfunnel.com/

Twitter toolbox
http://hootsuite.com/

Widgets galore
http://www.widgetbox.com/

Command line access to the web
http://yubnub.org/

Online wordprocessor
http://writer.zoho.com/

“Test everything” – nice idea to generate links to various services
http://tester.jonasjohn.de/

UIzard – in-browser web appication development tool – want to look more closely at this
http://www.uizard.org/

14.07.2009

Interesting stuff recently read

Abgelegt unter: Allgemein — Jonathan Gilbert @ 01:04

26.06.2009

Check / Uncheck all checkboxes

Abgelegt unter: Coding — Schlagwörter: — Jonathan Gilbert @ 20:35

It’s a common problem: you have a list of elements on a page and you want yout user to be able to do something to several or all elements at once (delete, move, etc.) so you give each element a checkbox and a “delete selected” button (or similar :~). Everything is cool but then you figure it would be nice to have a “select all” resp. “unselect all” box too, so help avoid “click orgies”. So in the page you generate something like this:

<input type=’checkbox’ id=’sel1′ value=’xxx’ name=’sel[]‘ /> xxx
<input type=’checkbox’ id=’sel2′ value=’yyy’ name=’sel[]‘ /> yyy
<input type=’checkbox’ id=’sel3′ value=’zzz’ name=’sel[]‘ />  zzz
<input type=’checkbox’ id=’selAll’ value=” name=’selAll’ onClick=’selectAll(this.checked, \”sel[]\”)’ /> (un)select all

There are several ways of doing this, but I like my solution, just because its mine its short and effective:

function selectAll(state, name) {
..boxes = document.getElementsByName(name);
..boxCnt = boxes.length;
..for (i=0; i<boxCnt; i++) {
....boxes[i].checked = state;
..}
}

That’s it!

24.06.2009

Multiple Inserts in Oracle (example using PHP)

Abgelegt unter: Coding, Databases — Schlagwörter:, , — Jonathan Gilbert @ 00:17

Everybody knows how to make multiple inserts into MySQL:

INSERT INTO [table_name] ([col_1], [col_2])
  VALUES
    ([val_1_1], [val_1_2]),
    ([val_2_1], [val_2_2]),
    ([val_3_1], [val_3_2])

That´s easy! But multiple inserts to an Oracle DB don´t work like that… here are two ways of doing the same job with Oracle:

insert all
  into [table_name] ([col1], [col2]) values ([val1_1], [val1_2])
  into [table_name] ([col1], [col2]) values ([val2_1], [val2_2])
  into [table_name] ([col1], [col2]) values ([val3_1], [val3_2])
  select 1 from dual

or alternatively

insert into [table_name] ([col1], [col2])
  select [val1_1], [val1_2] from dual
  union all
    select [val2_1], [val2_2] from dual
  union all
    select [val3_1], [val3_2] from dual

This is useful if you need to insert a lot of rows into a table – which usually occurs in a job like data import from other sources rather than as a result of user interaction. Running a PHP script for example to insert 50.000 rows into a table would fire 50.000 inserts if you don´t use multiple inserts. This is slow and can also cause you to run into memory problems.

Here is a simple example of how to do this in PHP:

class MyImportTest extends MyDatabaseModel
{
 protected static $_parallelImports = 50;
 protected static $_insertCache = array();

 public static function insertImportDataIntoDb($inputData)
 {
  $added = 0;
  foreach ($inputdata as $inputArray) {
    $added += self::_addCaseToInsertCache($inputArray['col1'], $inputArray['col2']);
    if ($added % self::$_parallelInserts == 0) {
      self::_flushInsertCache();
    }
  }
	if ($added % self::$_parallelInserts != 0) {
    self::_flushInsertCache();
  }
 }

 function addCaseToInsertCache($col1, $col2)
 {
  // maybe do validity checks here and return 0 if an element is not added
  self::$_insertCache[] = array($col1, $col2);
  return 1;
 }

 function flushInsertCache()
 {
  $db = self::getDb();
  $sql = 'INSERT INTO "TABLE_NAME" ("COL1", "COL2")';
  $values = '';
  foreach (self::$_insertCache as $insert) {
            $values .= (empty($values)) ? '' : ' UNION ALL ';
            $values .= 'SELECT ' .
                $insert[0] . ', ' .
                $insert[1] . ', ' .
                $insert[5] . ' FROM DUAL';
        } // if using string values, then don't forget to use quotes!
        $db->query($sql . $values);
        self::$_insertCache = array();
    }
 }
}

23.06.2009

Abgelegt unter: Dit un dat, Fun stuff — Schlagwörter:, — Jonathan Gilbert @ 23:40

Studieren in Fernost gewinnt Gold. Von Januar bis März 2009 hatte ich das Glück an der Entwicklung der Studiensuchmaschine und der Integration in SchülerVZ arbeiten zu dürfen :-)

Wer nicht in SchülerVZ drin ist geht auf http://www.studieren-in-fernost.de und klickt oben rechts auf “Maschine starten”…

16.06.2009

HowTo: Check if a username exists in LDAP (without authenticating user)

Abgelegt unter: Coding — Jonathan Gilbert @ 21:40


/**
* check if user exists in LDAP
* @param string $username username
* @return bool
*/
public static function isUser($username)
{
  $auth = Zend_Auth::getInstance();
  $config = Zend_Registry::get('ldap');
  $options = $config->toArray();

  $password = 'x';

  $adapter = new Zend_Auth_Adapter_Ldap($options, $username, $password);

  // because we have given an invalid password, this will always return error messages
  $result = $auth->authenticate($adapter);
  // here is a sample error message from which we deduce that "data 525" means that a user does not exist
  // "0x31: Invalid credentials: 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece: ..."
  // this seems to be confirmed by the following error codes for MS AD found on http://www-01.ibm.com/support/docview.wss?uid=swg21290631
  // 525 user not found
  // 52e invalid credentials
  // 530 not permitted to logon at this time
  // 531 not permitted to logon at this workstation
  // 532 password expired
  // 533 account disabled
  // 701 account expired
  // 773 user must reset password
  // 775 user account locked
  $messages = $result->getMessages();
  if ((false !== strpos($messages[1], 'data 525')) ||
    (false !== strpos($messages[1], 'data 533')) ||
    (false !== strpos($messages[1], 'data 701'))) {
    return false;
  }
  return true;
}

Easy way to delete duplicate rows in Oracle

Abgelegt unter: Databases — Jonathan Gilbert @ 21:15

DELETE FROM [tablename] A WHERE A.ROWID > ANY (
  SELECT B.ROWID FROM [tablename] B
  WHERE A.[uniquecolumn] = B.[uniquecolumn]
  [ AND A.[anothercolumn] = B.[anothercolumn] ]
)

08.06.2009

XSS – Infos and Tools

Abgelegt unter: Coding — Schlagwörter:, — Jonathan Gilbert @ 00:31
Ältere Artikel »

Bloggen Sie auf WordPress.com.