JNDI Extended Operation problem
Hi,
I am using JNDI extended operation for accessing Directory server. The request I make is responded in the form of Extended response which holds the value in ASN.1 BER format.
Can u plz suggest me any solution , so that I will be able to decode the BER format parameters retrieved , in understandable format.
Maybe you should specify jndi name for your bean in deployment descriptor (ejb-jar.xml) of EJB jar module?
<ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>MyBean</ejb-name>
<jndi-name>JNDINameOfMyBean</jndi-name>
</ejb>
</enterprise-beans>
</ejb-jar>And then lookup for JNDINameOfMyBean.
Similar Messages
-
Can I simply reinstall CS4 to resolve my operation problems?
Can I simply reinstall Adobe CS4 (design std) on my Mac OS X to resolve my operation problems, such as "Unknown error" messges while using Ai and ID. My software has been trouble free for about a yr and half and suddenly several odd problems popped up in the last few months. If you think reinstalling will help, please give me a general direction for doing so. Thanks in advance!
Hello,
I heard that holding CMD+Option+r at bootup connects to Apple's servers & Lion download, hasn't been confirmed yet. -
Match rules of Extended Operation
I used match rules of Extended Operation to search the certificates in ldap server(ldap v3), the filter is "userCertificate:2.5.13.35:=digitalSignature" ,but the server returned the error code LDAP_UNAVAILABLE_CRITICAL_EXTENSION,why? and what other things should i do to get the right result?
Is that a matching rule that only matches the signature field of the certificate? If so, then Sun DS (and Netscape DS) does not support that. If you want to support searching and filtering on fields of the certificate, you will have to save those fields as separate attributes of the entry. There is an LDAP extension supported by some servers, but not Sun DS. BTW, it is very difficult to implement. Even the Certificate Server does not try to implement it - it just stores the fields as separate attributes.
-
Hello All,
I want to create an extended operation plugin for OID, Oracle Internet Directory. I have not come across any tutorial to create the plugin. Kindly direct me to any such tutorial. That would be great help.
Thanks,
Regards,
SupritaIf you wish to build a Management Plug-in for OID, you will find all your answers at http://www.oracle.com/technology/products/oem/extensions/index.html.
-
Java JNDI LDAP connectivity problem. NoSuchAttributeException
Hello,
I am trying to add a user to Active Directory server through LDAP. Following is the code I am using:
======================================================================
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.123.321.123:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "user1");
env.put(Context.SECURITY_CREDENTIALS, "user123");
try {
System.out.println("68");
Context ctx = new InitialContext(env);
System.out.println("71");
BasicAttribute oc = new BasicAttribute("objectclass", "top");
oc.add("person");
oc.add("organizationalperson");
oc.add("User");
BasicAttribute ouSet = new BasicAttribute("ou");
ouSet.add("test");
BasicAttributes attrs = new BasicAttributes(true);
attrs.put(oc);
attrs.put(ouSet);
attrs.put("cn", "ndubey001");
attrs.put("sn", "ndubey001");
attrs.put("sAMAccountName", "ndubey001");
attrs.put("givenName", "ndubey001");
attrs.put("name", "ndubey001");
ctx.bind("uid=ndubey001,ou=test,o=myserver.com", attrs);
System.out.println("74");
ctx.close();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
======================================================================
I have tried with so many different combinations. Most of the times the parameters I am passing looks okay but I keep getting the same exception as follows:
======================================================================
68
71
javax.naming.directory.NoSuchAttributeException: [LDAP: error code 16 - 00000057: LdapErr: DSID-0C090B38, comment: Error in attribute conversion operation, data 0, vece
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_bind(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_bind(Unknown Source)
at com.sun.jndi.toolkit.ctx.ComponentContext.p_bind(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.bind(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeContext.bind(Unknown Source)
at javax.naming.InitialContext.bind(Unknown Source)
at LDAPTest.main(LDAPTest.java:99)Coming out
======================================================================
Can anyone tell what is the exact problem ?
Cheers,
NitinToo many errors to even consider correcting your code (objectClasses, UID attribute, ctx.create)....
Refer to the following for a description & sample code:
JNDI, Active Directory (Creating new users & demystifying userAccountControl
http://forum.java.sun.com/thread.jspa?threadID=582103&tstart=15 -
I'm half way through writing a web interface for mpd. I needed a way to interact with it so I searched around and found this. It's a php class that interfaces with mpd.
I downloaded it and it comes with an example php file for using it. The only problem is that when I use the example page it just prints out anything after the arrow operator. As far as I'm aware the arrow operator is for accessing class methods and variables but I've never actually done any OOP with PHP.
Anyway here is the example file:
<?
* mpd-class-example.php - Example interface using mpd.class.php
* Version 1.2, released 05/05/2004
* Copyright (C) 2003-2004 Benjamin Carlisle ([email protected])
* http://mpd.24oz.com/ | http://www.musicpd.org/
* This program illustrates the basic commands and usage of the MPD class.
* *** PLEASE NOTE *** My intention in including this file is not to provide you with an
* out-of-the-box MPD jukebox, but instead to provide a general understanding of how I saw
* the class as being utilized. If you'd like to see more examples, please let me know. But
* this should provide you with a good starting point for your own program development.
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
?>
<HTML>
<style type="text/css"><!-- .defaultText { font-family: Arial, Helvetica, sans-serif; font-size: 9pt; font-style: normal; font-weight: normal; color: #111111} .err { color: #DD3333 } --></style>
<BODY class="defaultText">
<?
include('mpd.class.php');
$myMpd = new mpd('localhost',2100);
if ( $myMpd->connected == FALSE ) {
echo "Error Connecting: " . $myMpd->errStr;
} else {
switch ($_REQUEST[m]) {
case "add":
if ( is_null($myMpd->PLAdd($_REQUEST[filename])) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "rem":
if ( is_null($myMpd->PLRemove($_REQUEST[id])) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "setvol":
if ( is_null($myMpd->SetVolume($_REQUEST[vol])) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "play":
if ( is_null($myMpd->Play()) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "stop":
if ( is_null($myMpd->Stop()) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "pause":
if ( is_null($myMpd->Pause()) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
default:
break;
?>
<DIV ALIGN=CENTER>[ <A HREF="<? echo $_SERVER[PHP_SELF] ?>">Refresh Page</A> ]</DIV>
<HR>
<B>Connected to MPD Version <? echo $myMpd->mpd_version ?> at <? echo $myMpd->host ?>:<? echo $myMpd->port ?></B><BR>
State:
<?
switch ($myMpd->state) {
case MPD_STATE_PLAYING: echo "MPD is Playing [<A HREF='".$_SERVER[PHP_SELF]."?m=pause'>Pause</A>] [<A HREF='".$_SERVER[PHP_SELF]."?m=stop'>Stop</A>]"; break;
case MPD_STATE_PAUSED: echo "MPD is Paused [<A HREF='".$_SERVER[PHP_SELF]."?m=pause'>Unpause</A>]"; break;
case MPD_STATE_STOPPED: echo "MPD is Stopped [<A HREF='".$_SERVER[PHP_SELF]."?m=play'>Play</A>]"; break;
default: echo "(Unknown State!)"; break;
?>
<BR>
Volume: <? echo $myMpd->volume ?> [ <A HREF='<? echo $_SERVER[PHP_SELF] ?>?m=setvol&vol=0'>0</A> | <A HREF='<? echo $_SERVER[PHP_SELF] ?>?m=setvol&vol=25'>25</A> | <A HREF='<? echo $_SERVER[PHP_SELF] ?>?m=setvol&vol=75'>75</A> | <A HREF='<? echo $_SERVER[PHP_SELF] ?>?m=setvol&vol=100'>100</A> ]<BR>
Uptime: <? echo secToTimeStr($myMpd->uptime) ?><BR>
Playtime: <? echo secToTimeStr($myMpd->playtime) ?><BR>
<? if ( $myMpd->state == MPD_STATE_PLAYING or $myMpd->state == MPD_STATE_PAUSED ) { ?>
Currently Playing: <? echo $myMpd->playlist[$myMpd->current_track_id]['Artist']." - ".$myMpd->playlist[$myMpd->current_track_id]['Title'] ?><BR>
Track Position: <? echo $myMpd->current_track_position."/".$myMpd->current_track_length." (".(round(($myMpd->current_track_position/$myMpd->current_track_length),2)*100)."%)" ?><BR>
Playlist Position: <? echo ($myMpd->current_track_id+1)."/".$myMpd->playlist_count." (".(round((($myMpd->current_track_id+1)/$myMpd->playlist_count),2)*100)."%)" ?><BR>
<? } ?>
<HR>
<B>Playlist - Total: <? echo $myMpd->playlist_count ?> tracks (Click to Remove)</B><BR>
<?
if ( is_null($myMpd->playlist) ) echo "ERROR: " .$myMpd->errStr."\n";
else {
foreach ($myMpd->playlist as $id => $entry) {
echo ( $id == $myMpd->current_track_id ? "<B>" : "" ) . ($id+1) . ". <A HREF='".$_SERVER[PHP_SELF]."?m=rem&id=".$id."'>".$entry['Artist']." - ".$entry['Title']."</A>".( $id == $myMpd->current_track_id ? "</B>" : "" )."<BR>\n";
?>
<HR>
<B>Sample Search for the String 'U2' (Click to Add to Playlist)</B><BR>
<?
$sl = $myMpd->Search(MPD_SEARCH_ARTIST,'U2');
if ( is_null($sl) ) echo "ERROR: " .$myMpd->errStr."\n";
else {
foreach ($sl as $id => $entry) {
echo ($id+1) . ": <A HREF='".$_SERVER[PHP_SELF]."?m=add&filename=".urlencode($entry['file'])."'>".$entry['Artist']." - ".$entry['Title']."</A><BR>\n";
if ( count($sl) == 0 ) echo "<I>No results returned from search.</I>";
// Example of how you would use Bulk Add features of MPD
// $myarray = array();
// $myarray[0] = "ACDC - Thunderstruck.mp3";
// $myarray[1] = "ACDC - Back In Black.mp3";
// $myarray[2] = "ACDC - Hells Bells.mp3";
// if ( is_null($myMpd->PLAddBulk($myarray)) ) echo "ERROR: ".$myMpd->errStr."\n";
?>
<HR>
<B>Artist List</B><BR>
<?
if ( is_null($ar = $myMpd->GetArtists()) ) echo "ERROR: " .$myMpd->errStr."\n";
else {
while(list($key, $value) = each($ar) ) {
echo ($key+1) . ". " . $value . "<BR>";
$myMpd->Disconnect();
// Used to make number of seconds perty.
function secToTimeStr($secs) {
$days = ($secs%604800)/86400;
$hours = (($secs%604800)%86400)/3600;
$minutes = ((($secs%604800)%86400)%3600)/60;
$seconds = (((($secs%604800)%86400)%3600)%60);
if (round($days)) $timestring .= round($days)."d ";
if (round($hours)) $timestring .= round($hours)."h ";
if (round($minutes)) $timestring .= round($minutes)."m";
if (!round($minutes)&&!round($hours)&&!round($days)) $timestring.=" ".round($seconds)."s";
return $timestring;
?>
</BODY></HTML>
The class file:
<?php
* mpd.class.php - PHP Object Interface to the MPD Music Player Daemon
* Version 1.2, Released 05/05/2004
* Copyright (C) 2003-2004 Benjamin Carlisle ([email protected])
* http://mpd.24oz.com/ | http://www.musicpd.org/
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// Create common command definitions for MPD to use
define("MPD_CMD_STATUS", "status");
define("MPD_CMD_STATISTICS", "stats");
define("MPD_CMD_VOLUME", "volume");
define("MPD_CMD_SETVOL", "setvol");
define("MPD_CMD_PLAY", "play");
define("MPD_CMD_STOP", "stop");
define("MPD_CMD_PAUSE", "pause");
define("MPD_CMD_NEXT", "next");
define("MPD_CMD_PREV", "previous");
define("MPD_CMD_PLLIST", "playlistinfo");
define("MPD_CMD_PLADD", "add");
define("MPD_CMD_PLREMOVE", "delete");
define("MPD_CMD_PLCLEAR", "clear");
define("MPD_CMD_PLSHUFFLE", "shuffle");
define("MPD_CMD_PLLOAD", "load");
define("MPD_CMD_PLSAVE", "save");
define("MPD_CMD_KILL", "kill");
define("MPD_CMD_REFRESH", "update");
define("MPD_CMD_REPEAT", "repeat");
define("MPD_CMD_LSDIR", "lsinfo");
define("MPD_CMD_SEARCH", "search");
define("MPD_CMD_START_BULK", "command_list_begin");
define("MPD_CMD_END_BULK", "command_list_end");
define("MPD_CMD_FIND", "find");
define("MPD_CMD_RANDOM", "random");
define("MPD_CMD_SEEK", "seek");
define("MPD_CMD_PLSWAPTRACK", "swap");
define("MPD_CMD_PLMOVETRACK", "move");
define("MPD_CMD_PASSWORD", "password");
define("MPD_CMD_TABLE", "list");
// Predefined MPD Response messages
define("MPD_RESPONSE_ERR", "ACK");
define("MPD_RESPONSE_OK", "OK");
// MPD State Constants
define("MPD_STATE_PLAYING", "play");
define("MPD_STATE_STOPPED", "stop");
define("MPD_STATE_PAUSED", "pause");
// MPD Searching Constants
define("MPD_SEARCH_ARTIST", "artist");
define("MPD_SEARCH_TITLE", "title");
define("MPD_SEARCH_ALBUM", "album");
// MPD Cache Tables
define("MPD_TBL_ARTIST","artist");
define("MPD_TBL_ALBUM","album");
class mpd {
// TCP/Connection variables
var $host;
var $port;
var $password;
var $mpd_sock = NULL;
var $connected = FALSE;
// MPD Status variables
var $mpd_version = "(unknown)";
var $state;
var $current_track_position;
var $current_track_length;
var $current_track_id;
var $volume;
var $repeat;
var $random;
var $uptime;
var $playtime;
var $db_last_refreshed;
var $num_songs_played;
var $playlist_count;
var $num_artists;
var $num_albums;
var $num_songs;
var $playlist = array();
// Misc Other Vars
var $mpd_class_version = "1.2";
var $debugging = FALSE; // Set to TRUE to turn extended debugging on.
var $errStr = ""; // Used for maintaining information about the last error message
var $command_queue; // The list of commands for bulk command sending
// =================== BEGIN OBJECT METHODS ================
/* mpd() : Constructor
* Builds the MPD object, connects to the server, and refreshes all local object properties.
function mpd($srv,$port,$pwd = NULL) {
$this->host = $srv;
$this->port = $port;
$this->password = $pwd;
$resp = $this->Connect();
if ( is_null($resp) ) {
$this->errStr = "Could not connect";
return;
} else {
list ( $this->mpd_version ) = sscanf($resp, MPD_RESPONSE_OK . " MPD %s\n");
if ( ! is_null($pwd) ) {
if ( is_null($this->SendCommand(MPD_CMD_PASSWORD,$pwd)) ) {
$this->connected = FALSE;
return; // bad password or command
if ( is_null($this->RefreshInfo()) ) { // no read access -- might as well be disconnected!
$this->connected = FALSE;
$this->errStr = "Password supplied does not have read access";
return;
} else {
if ( is_null($this->RefreshInfo()) ) { // no read access -- might as well be disconnected!
$this->connected = FALSE;
$this->errStr = "Password required to access server";
return;
/* Connect()
* Connects to the MPD server.
* NOTE: This is called automatically upon object instantiation; you should not need to call this directly.
function Connect() {
if ( $this->debugging ) echo "mpd->Connect() / host: ".$this->host.", port: ".$this->port."\n";
$this->mpd_sock = fsockopen($this->host,$this->port,$errNo,$errStr,10);
if (!$this->mpd_sock) {
$this->errStr = "Socket Error: $errStr ($errNo)";
return NULL;
} else {
while(!feof($this->mpd_sock)) {
$response = fgets($this->mpd_sock,1024);
if (strncmp(MPD_RESPONSE_OK,$response,strlen(MPD_RESPONSE_OK)) == 0) {
$this->connected = TRUE;
return $response;
break;
if (strncmp(MPD_RESPONSE_ERR,$response,strlen(MPD_RESPONSE_ERR)) == 0) {
$this->errStr = "Server responded with: $response";
return NULL;
// Generic response
$this->errStr = "Connection not available";
return NULL;
/* SendCommand()
* Sends a generic command to the MPD server. Several command constants are pre-defined for
* use (see MPD_CMD_* constant definitions above).
function SendCommand($cmdStr,$arg1 = "",$arg2 = "") {
if ( $this->debugging ) echo "mpd->SendCommand() / cmd: ".$cmdStr.", args: ".$arg1." ".$arg2."\n";
if ( ! $this->connected ) {
echo "mpd->SendCommand() / Error: Not connected\n";
} else {
// Clear out the error String
$this->errStr = "";
$respStr = "";
// Check the command compatibility:
if ( ! $this->_checkCompatibility($cmdStr) ) {
return NULL;
if (strlen($arg1) > 0) $cmdStr .= " \"$arg1\"";
if (strlen($arg2) > 0) $cmdStr .= " \"$arg2\"";
fputs($this->mpd_sock,"$cmdStr\n");
while(!feof($this->mpd_sock)) {
$response = fgets($this->mpd_sock,1024);
// An OK signals the end of transmission -- we'll ignore it
if (strncmp(MPD_RESPONSE_OK,$response,strlen(MPD_RESPONSE_OK)) == 0) {
break;
// An ERR signals the end of transmission with an error! Let's grab the single-line message.
if (strncmp(MPD_RESPONSE_ERR,$response,strlen(MPD_RESPONSE_ERR)) == 0) {
list ( $junk, $errTmp ) = split(MPD_RESPONSE_ERR . " ",$response );
$this->errStr = strtok($errTmp,"\n");
if ( strlen($this->errStr) > 0 ) {
return NULL;
// Build the response string
$respStr .= $response;
if ( $this->debugging ) echo "mpd->SendCommand() / response: '".$respStr."'\n";
return $respStr;
/* QueueCommand()
* Queues a generic command for later sending to the MPD server. The CommandQueue can hold
* as many commands as needed, and are sent all at once, in the order they are queued, using
* the SendCommandQueue() method. The syntax for queueing commands is identical to SendCommand().
function QueueCommand($cmdStr,$arg1 = "",$arg2 = "") {
if ( $this->debugging ) echo "mpd->QueueCommand() / cmd: ".$cmdStr.", args: ".$arg1." ".$arg2."\n";
if ( ! $this->connected ) {
echo "mpd->QueueCommand() / Error: Not connected\n";
return NULL;
} else {
if ( strlen($this->command_queue) == 0 ) {
$this->command_queue = MPD_CMD_START_BULK . "\n";
if (strlen($arg1) > 0) $cmdStr .= " \"$arg1\"";
if (strlen($arg2) > 0) $cmdStr .= " \"$arg2\"";
$this->command_queue .= $cmdStr ."\n";
if ( $this->debugging ) echo "mpd->QueueCommand() / return\n";
return TRUE;
/* SendCommandQueue()
* Sends all commands in the Command Queue to the MPD server. See also QueueCommand().
function SendCommandQueue() {
if ( $this->debugging ) echo "mpd->SendCommandQueue()\n";
if ( ! $this->connected ) {
echo "mpd->SendCommandQueue() / Error: Not connected\n";
return NULL;
} else {
$this->command_queue .= MPD_CMD_END_BULK . "\n";
if ( is_null($respStr = $this->SendCommand($this->command_queue)) ) {
return NULL;
} else {
$this->command_queue = NULL;
if ( $this->debugging ) echo "mpd->SendCommandQueue() / response: '".$respStr."'\n";
return $respStr;
/* AdjustVolume()
* Adjusts the mixer volume on the MPD by <modifier>, which can be a positive (volume increase),
* or negative (volume decrease) value.
function AdjustVolume($modifier) {
if ( $this->debugging ) echo "mpd->AdjustVolume()\n";
if ( ! is_numeric($modifier) ) {
$this->errStr = "AdjustVolume() : argument 1 must be a numeric value";
return NULL;
$this->RefreshInfo();
$newVol = $this->volume + $modifier;
$ret = $this->SetVolume($newVol);
if ( $this->debugging ) echo "mpd->AdjustVolume() / return\n";
return $ret;
/* SetVolume()
* Sets the mixer volume to <newVol>, which should be between 1 - 100.
function SetVolume($newVol) {
if ( $this->debugging ) echo "mpd->SetVolume()\n";
if ( ! is_numeric($newVol) ) {
$this->errStr = "SetVolume() : argument 1 must be a numeric value";
return NULL;
// Forcibly prevent out of range errors
if ( $newVol < 0 ) $newVol = 0;
if ( $newVol > 100 ) $newVol = 100;
// If we're not compatible with SETVOL, we'll try adjusting using VOLUME
if ( $this->_checkCompatibility(MPD_CMD_SETVOL) ) {
if ( ! is_null($ret = $this->SendCommand(MPD_CMD_SETVOL,$newVol))) $this->volume = $newVol;
} else {
$this->RefreshInfo(); // Get the latest volume
if ( is_null($this->volume) ) {
return NULL;
} else {
$modifier = ( $newVol - $this->volume );
if ( ! is_null($ret = $this->SendCommand(MPD_CMD_VOLUME,$modifier))) $this->volume = $newVol;
if ( $this->debugging ) echo "mpd->SetVolume() / return\n";
return $ret;
/* GetDir()
* Retrieves a database directory listing of the <dir> directory and places the results into
* a multidimensional array. If no directory is specified, the directory listing is at the
* base of the MPD music path.
function GetDir($dir = "") {
if ( $this->debugging ) echo "mpd->GetDir()\n";
$resp = $this->SendCommand(MPD_CMD_LSDIR,$dir);
$dirlist = $this->_parseFileListResponse($resp);
if ( $this->debugging ) echo "mpd->GetDir() / return ".print_r($dirlist)."\n";
return $dirlist;
/* PLAdd()
* Adds each track listed in a single-dimensional <trackArray>, which contains filenames
* of tracks to add, to the end of the playlist. This is used to add many, many tracks to
* the playlist in one swoop.
function PLAddBulk($trackArray) {
if ( $this->debugging ) echo "mpd->PLAddBulk()\n";
$num_files = count($trackArray);
for ( $i = 0; $i < $num_files; $i++ ) {
$this->QueueCommand(MPD_CMD_PLADD,$trackArray[$i]);
$resp = $this->SendCommandQueue();
$this->RefreshInfo();
if ( $this->debugging ) echo "mpd->PLAddBulk() / return\n";
return $resp;
/* PLAdd()
* Adds the file <file> to the end of the playlist. <file> must be a track in the MPD database.
function PLAdd($fileName) {
if ( $this->debugging ) echo "mpd->PLAdd()\n";
if ( ! is_null($resp = $this->SendCommand(MPD_CMD_PLADD,$fileName))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->PLAdd() / return\n";
return $resp;
/* PLMoveTrack()
* Moves track number <origPos> to position <newPos> in the playlist. This is used to reorder
* the songs in the playlist.
function PLMoveTrack($origPos, $newPos) {
if ( $this->debugging ) echo "mpd->PLMoveTrack()\n";
if ( ! is_numeric($origPos) ) {
$this->errStr = "PLMoveTrack(): argument 1 must be numeric";
return NULL;
if ( $origPos < 0 or $origPos > $this->playlist_count ) {
$this->errStr = "PLMoveTrack(): argument 1 out of range";
return NULL;
if ( $newPos < 0 ) $newPos = 0;
if ( $newPos > $this->playlist_count ) $newPos = $this->playlist_count;
if ( ! is_null($resp = $this->SendCommand(MPD_CMD_PLMOVETRACK,$origPos,$newPos))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->PLMoveTrack() / return\n";
return $resp;
/* PLShuffle()
* Randomly reorders the songs in the playlist.
function PLShuffle() {
if ( $this->debugging ) echo "mpd->PLShuffle()\n";
if ( ! is_null($resp = $this->SendCommand(MPD_CMD_PLSHUFFLE))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->PLShuffle() / return\n";
return $resp;
/* PLLoad()
* Retrieves the playlist from <file>.m3u and loads it into the current playlist.
function PLLoad($file) {
if ( $this->debugging ) echo "mpd->PLLoad()\n";
if ( ! is_null($resp = $this->SendCommand(MPD_CMD_PLLOAD,$file))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->PLLoad() / return\n";
return $resp;
/* PLSave()
* Saves the playlist to <file>.m3u for later retrieval. The file is saved in the MPD playlist
* directory.
function PLSave($file) {
if ( $this->debugging ) echo "mpd->PLSave()\n";
$resp = $this->SendCommand(MPD_CMD_PLSAVE,$file);
if ( $this->debugging ) echo "mpd->PLSave() / return\n";
return $resp;
/* PLClear()
* Empties the playlist.
function PLClear() {
if ( $this->debugging ) echo "mpd->PLClear()\n";
if ( ! is_null($resp = $this->SendCommand(MPD_CMD_PLCLEAR))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->PLClear() / return\n";
return $resp;
/* PLRemove()
* Removes track <id> from the playlist.
function PLRemove($id) {
if ( $this->debugging ) echo "mpd->PLRemove()\n";
if ( ! is_numeric($id) ) {
$this->errStr = "PLRemove() : argument 1 must be a numeric value";
return NULL;
if ( ! is_null($resp = $this->SendCommand(MPD_CMD_PLREMOVE,$id))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->PLRemove() / return\n";
return $resp;
/* SetRepeat()
* Enables 'loop' mode -- tells MPD continually loop the playlist. The <repVal> parameter
* is either 1 (on) or 0 (off).
function SetRepeat($repVal) {
if ( $this->debugging ) echo "mpd->SetRepeat()\n";
$rpt = $this->SendCommand(MPD_CMD_REPEAT,$repVal);
$this->repeat = $repVal;
if ( $this->debugging ) echo "mpd->SetRepeat() / return\n";
return $rpt;
/* SetRandom()
* Enables 'randomize' mode -- tells MPD to play songs in the playlist in random order. The
* <rndVal> parameter is either 1 (on) or 0 (off).
function SetRandom($rndVal) {
if ( $this->debugging ) echo "mpd->SetRandom()\n";
$resp = $this->SendCommand(MPD_CMD_RANDOM,$rndVal);
$this->random = $rndVal;
if ( $this->debugging ) echo "mpd->SetRandom() / return\n";
return $resp;
/* Shutdown()
* Shuts down the MPD server (aka sends the KILL command). This closes the current connection,
* and prevents future communication with the server.
function Shutdown() {
if ( $this->debugging ) echo "mpd->Shutdown()\n";
$resp = $this->SendCommand(MPD_CMD_SHUTDOWN);
$this->connected = FALSE;
unset($this->mpd_version);
unset($this->errStr);
unset($this->mpd_sock);
if ( $this->debugging ) echo "mpd->Shutdown() / return\n";
return $resp;
/* DBRefresh()
* Tells MPD to rescan the music directory for new tracks, and to refresh the Database. Tracks
* cannot be played unless they are in the MPD database.
function DBRefresh() {
if ( $this->debugging ) echo "mpd->DBRefresh()\n";
$resp = $this->SendCommand(MPD_CMD_REFRESH);
// Update local variables
$this->RefreshInfo();
if ( $this->debugging ) echo "mpd->DBRefresh() / return\n";
return $resp;
/* Play()
* Begins playing the songs in the MPD playlist.
function Play() {
if ( $this->debugging ) echo "mpd->Play()\n";
if ( ! is_null($rpt = $this->SendCommand(MPD_CMD_PLAY) )) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->Play() / return\n";
return $rpt;
/* Stop()
* Stops playing the MPD.
function Stop() {
if ( $this->debugging ) echo "mpd->Stop()\n";
if ( ! is_null($rpt = $this->SendCommand(MPD_CMD_STOP) )) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->Stop() / return\n";
return $rpt;
/* Pause()
* Toggles pausing on the MPD. Calling it once will pause the player, calling it again
* will unpause.
function Pause() {
if ( $this->debugging ) echo "mpd->Pause()\n";
if ( ! is_null($rpt = $this->SendCommand(MPD_CMD_PAUSE) )) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->Pause() / return\n";
return $rpt;
/* SeekTo()
* Skips directly to the <idx> song in the MPD playlist.
function SkipTo($idx) {
if ( $this->debugging ) echo "mpd->SkipTo()\n";
if ( ! is_numeric($idx) ) {
$this->errStr = "SkipTo() : argument 1 must be a numeric value";
return NULL;
if ( ! is_null($rpt = $this->SendCommand(MPD_CMD_PLAY,$idx))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->SkipTo() / return\n";
return $idx;
/* SeekTo()
* Skips directly to a given position within a track in the MPD playlist. The <pos> argument,
* given in seconds, is the track position to locate. The <track> argument, if supplied is
* the track number in the playlist. If <track> is not specified, the current track is assumed.
function SeekTo($pos, $track = -1) {
if ( $this->debugging ) echo "mpd->SeekTo()\n";
if ( ! is_numeric($pos) ) {
$this->errStr = "SeekTo() : argument 1 must be a numeric value";
return NULL;
if ( ! is_numeric($track) ) {
$this->errStr = "SeekTo() : argument 2 must be a numeric value";
return NULL;
if ( $track == -1 ) {
$track = $this->current_track_id;
if ( ! is_null($rpt = $this->SendCommand(MPD_CMD_SEEK,$track,$pos))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->SeekTo() / return\n";
return $pos;
/* Next()
* Skips to the next song in the MPD playlist. If not playing, returns an error.
function Next() {
if ( $this->debugging ) echo "mpd->Next()\n";
if ( ! is_null($rpt = $this->SendCommand(MPD_CMD_NEXT))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->Next() / return\n";
return $rpt;
/* Previous()
* Skips to the previous song in the MPD playlist. If not playing, returns an error.
function Previous() {
if ( $this->debugging ) echo "mpd->Previous()\n";
if ( ! is_null($rpt = $this->SendCommand(MPD_CMD_PREV))) $this->RefreshInfo();
if ( $this->debugging ) echo "mpd->Previous() / return\n";
return $rpt;
/* Search()
* Searches the MPD database. The search <type> should be one of the following:
* MPD_SEARCH_ARTIST, MPD_SEARCH_TITLE, MPD_SEARCH_ALBUM
* The search <string> is a case-insensitive locator string. Anything that contains
* <string> will be returned in the results.
function Search($type,$string) {
if ( $this->debugging ) echo "mpd->Search()\n";
if ( $type != MPD_SEARCH_ARTIST and
$type != MPD_SEARCH_ALBUM and
$type != MPD_SEARCH_TITLE ) {
$this->errStr = "mpd->Search(): invalid search type";
return NULL;
} else {
if ( is_null($resp = $this->SendCommand(MPD_CMD_SEARCH,$type,$string))) return NULL;
$searchlist = $this->_parseFileListResponse($resp);
if ( $this->debugging ) echo "mpd->Search() / return ".print_r($searchlist)."\n";
return $searchlist;
/* Find()
* Find() looks for exact matches in the MPD database. The find <type> should be one of
* the following:
* MPD_SEARCH_ARTIST, MPD_SEARCH_TITLE, MPD_SEARCH_ALBUM
* The find <string> is a case-insensitive locator string. Anything that exactly matches
* <string> will be returned in the results.
function Find($type,$string) {
if ( $this->debugging ) echo "mpd->Find()\n";
if ( $type != MPD_SEARCH_ARTIST and
$type != MPD_SEARCH_ALBUM and
$type != MPD_SEARCH_TITLE ) {
$this->errStr = "mpd->Find(): invalid find type";
return NULL;
} else {
if ( is_null($resp = $this->SendCommand(MPD_CMD_FIND,$type,$string))) return NULL;
$searchlist = $this->_parseFileListResponse($resp);
if ( $this->debugging ) echo "mpd->Find() / return ".print_r($searchlist)."\n";
return $searchlist;
/* Disconnect()
* Closes the connection to the MPD server.
function Disconnect() {
if ( $this->debugging ) echo "mpd->Disconnect()\n";
fclose($this->mpd_sock);
$this->connected = FALSE;
unset($this->mpd_version);
unset($this->errStr);
unset($this->mpd_sock);
/* GetArtists()
* Returns the list of artists in the database in an associative array.
function GetArtists() {
if ( $this->debugging ) echo "mpd->GetArtists()\n";
if ( is_null($resp = $this->SendCommand(MPD_CMD_TABLE, MPD_TBL_ARTIST))) return NULL;
$arArray = array();
$arLine = strtok($resp,"\n");
$arName = "";
$arCounter = -1;
while ( $arLine ) {
list ( $element, $value ) = split(": ",$arLine);
if ( $element == "Artist" ) {
$arCounter++;
$arName = $value;
$arArray[$arCounter] = $arName;
$arLine = strtok("\n");
if ( $this->debugging ) echo "mpd->GetArtists()\n";
return $arArray;
/* GetAlbums()
* Returns the list of albums in the database in an associative array. Optional parameter
* is an artist Name which will list all albums by a particular artist.
function GetAlbums( $ar = NULL) {
if ( $this->debugging ) echo "mpd->GetAlbums()\n";
if ( is_null($resp = $this->SendCommand(MPD_CMD_TABLE, MPD_TBL_ALBUM, $ar ))) return NULL;
$alArray = array();
$alLine = strtok($resp,"\n");
$alName = "";
$alCounter = -1;
while ( $alLine ) {
list ( $element, $value ) = split(": ",$alLine);
if ( $element == "Album" ) {
$alCounter++;
$alName = $value;
$alArray[$alCounter] = $alName;
$alLine = strtok("\n");
if ( $this->debugging ) echo "mpd->GetAlbums()\n";
return $alArray;
//***************************** INTERNAL FUNCTIONS ******************************//
/* _computeVersionValue()
* Computes a compatibility value from a version string
function _computeVersionValue($verStr) {
list ($ver_maj, $ver_min, $ver_rel ) = split("\.",$verStr);
return ( 100 * $ver_maj ) + ( 10 * $ver_min ) + ( $ver_rel );
/* _checkCompatibility()
* Check MPD command compatibility against our internal table. If there is no version
* listed in the table, allow it by default.
function _checkCompatibility($cmd) {
// Check minimum compatibility
$req_ver_low = $this->COMPATIBILITY_MIN_TBL[$cmd];
$req_ver_hi = $this->COMPATIBILITY_MAX_TBL[$cmd];
$mpd_ver = $this->_computeVersionValue($this->mpd_version);
if ( $req_ver_low ) {
$req_ver = $this->_computeVersionValue($req_ver_low);
if ( $mpd_ver < $req_ver ) {
$this->errStr = "Command '$cmd' is not compatible with this version of MPD, version ".$req_ver_low." required";
return FALSE;
// Check maxmum compatibility -- this will check for deprecations
if ( $req_ver_hi ) {
$req_ver = $this->_computeVersionValue($req_ver_hi);
if ( $mpd_ver > $req_ver ) {
$this->errStr = "Command '$cmd' has been deprecated in this version of MPD.";
return FALSE;
return TRUE;
/* _parseFileListResponse()
* Builds a multidimensional array with MPD response lists.
* NOTE: This function is used internally within the class. It should not be used.
function _parseFileListResponse($resp) {
if ( is_null($resp) ) {
return NULL;
} else {
$plistArray = array();
$plistLine = strtok($resp,"\n");
$plistFile = "";
$plCounter = -1;
while ( $plistLine ) {
list ( $element, $value ) = split(": ",$plistLine);
if ( $element == "file" ) {
$plCounter++;
$plistFile = $value;
$plistArray[$plCounter]["file"] = $plistFile;
} else {
$plistArray[$plCounter][$element] = $value;
$plistLine = strtok("\n");
return $plistArray;
/* RefreshInfo()
* Updates all class properties with the values from the MPD server.
* NOTE: This function is automatically called upon Connect() as of v1.1.
function RefreshInfo() {
// Get the Server Statistics
$statStr = $this->SendCommand(MPD_CMD_STATISTICS);
if ( !$statStr ) {
return NULL;
} else {
$stats = array();
$statLine = strtok($statStr,"\n");
while ( $statLine ) {
list ( $element, $value ) = split(": ",$statLine);
$stats[$element] = $value;
$statLine = strtok("\n");
// Get the Server Status
$statusStr = $this->SendCommand(MPD_CMD_STATUS);
if ( ! $statusStr ) {
return NULL;
} else {
$status = array();
$statusLine = strtok($statusStr,"\n");
while ( $statusLine ) {
list ( $element, $value ) = split(": ",$statusLine);
$status[$element] = $value;
$statusLine = strtok("\n");
// Get the Playlist
$plStr = $this->SendCommand(MPD_CMD_PLLIST);
$this->playlist = $this->_parseFileListResponse($plStr);
$this->playlist_count = count($this->playlist);
// Set Misc Other Variables
$this->state = $status['state'];
if ( ($this->state == MPD_STATE_PLAYING) || ($this->state == MPD_STATE_PAUSED) ) {
$this->current_track_id = $status['song'];
list ($this->current_track_position, $this->current_track_length ) = split(":",$status['time']);
} else {
$this->current_track_id = -1;
$this->current_track_position = -1;
$this->current_track_length = -1;
$this->repeat = $status['repeat'];
$this->random = $status['random'];
$this->db_last_refreshed = $stats['db_update'];
$this->volume = $status['volume'];
$this->uptime = $stats['uptime'];
$this->playtime = $stats['playtime'];
$this->num_songs_played = $stats['songs_played'];
$this->num_artists = $stats['num_artists'];
$this->num_songs = $stats['num_songs'];
$this->num_albums = $stats['num_albums'];
return TRUE;
/* ------------------ DEPRECATED METHODS -------------------*/
/* GetStatistics()
* Retrieves the 'statistics' variables from the server and tosses them into an array.
* NOTE: This function really should not be used. Instead, use $this->[variable]. The function
* will most likely be deprecated in future releases.
function GetStatistics() {
if ( $this->debugging ) echo "mpd->GetStatistics()\n";
$stats = $this->SendCommand(MPD_CMD_STATISTICS);
if ( !$stats ) {
return NULL;
} else {
$statsArray = array();
$statsLine = strtok($stats,"\n");
while ( $statsLine ) {
list ( $element, $value ) = split(": ",$statsLine);
$statsArray[$element] = $value;
$statsLine = strtok("\n");
if ( $this->debugging ) echo "mpd->GetStatistics() / return: " . print_r($statsArray) ."\n";
return $statsArray;
/* GetStatus()
* Retrieves the 'status' variables from the server and tosses them into an array.
* NOTE: This function really should not be used. Instead, use $this->[variable]. The function
* will most likely be deprecated in future releases.
function GetStatus() {
if ( $this->debugging ) echo "mpd->GetStatus()\n";
$status = $this->SendCommand(MPD_CMD_STATUS);
if ( ! $status ) {
return NULL;
} else {
$statusArray = array();
$statusLine = strtok($status,"\n");
while ( $statusLine ) {
list ( $element, $value ) = split(": ",$statusLine);
$statusArray[$element] = $value;
$statusLine = strtok("\n");
if ( $this->debugging ) echo "mpd->GetStatus() / return: " . print_r($statusArray) ."\n";
return $statusArray;
/* GetVolume()
* Retrieves the mixer volume from the server.
* NOTE: This function really should not be used. Instead, use $this->volume. The function
* will most likely be deprecated in future releases.
function GetVolume() {
if ( $this->debugging ) echo "mpd->GetVolume()\n";
$volLine = $this->SendCommand(MPD_CMD_STATUS);
if ( ! $volLine ) {
return NULL;
} else {
list ($vol) = sscanf($volLine,"volume: %d");
if ( $this->debugging ) echo "mpd->GetVolume() / return: $vol\n";
return $vol;
/* GetPlaylist()
* Retrieves the playlist from the server and tosses it into a multidimensional array.
* NOTE: This function really should not be used. Instead, use $this->playlist. The function
* will most likely be deprecated in future releases.
function GetPlaylist() {
if ( $this->debugging ) echo "mpd->GetPlaylist()\n";
$resp = $this->SendCommand(MPD_CMD_PLLIST);
$playlist = $this->_parseFileListResponse($resp);
if ( $this->debugging ) echo "mpd->GetPlaylist() / return ".print_r($playlist)."\n";
return $playlist;
/* ----------------- Command compatibility tables --------------------- */
var $COMPATIBILITY_MIN_TBL = array(
MPD_CMD_SEEK => "0.9.1" ,
MPD_CMD_PLMOVE => "0.9.1" ,
MPD_CMD_RANDOM => "0.9.1" ,
MPD_CMD_PLSWAPTRACK => "0.9.1" ,
MPD_CMD_PLMOVETRACK => "0.9.1" ,
MPD_CMD_PASSWORD => "0.10.0" ,
MPD_CMD_SETVOL => "0.10.0"
var $COMPATIBILITY_MAX_TBL = array(
MPD_CMD_VOLUME => "0.10.0"
} // ---------------------------- end of class ------------------------------
?>
and the HTML output:
<HTML>
<style type="text/css"><!-- .defaultText { font-family: Arial, Helvetica, sans-serif; font-size: 9pt; font-style: normal; font-weight: normal; color: #111111} .err { color: #DD3333 } --></style>
<BODY class="defaultText">
connected == FALSE ) {
echo "Error Connecting: " . $myMpd->errStr;
} else {
switch ($_REQUEST[m]) {
case "add":
if ( is_null($myMpd->PLAdd($_REQUEST[filename])) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "rem":
if ( is_null($myMpd->PLRemove($_REQUEST[id])) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "setvol":
if ( is_null($myMpd->SetVolume($_REQUEST[vol])) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "play":
if ( is_null($myMpd->Play()) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "stop":
if ( is_null($myMpd->Stop()) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
case "pause":
if ( is_null($myMpd->Pause()) ) echo "<SPAN CLASS=err>ERROR: " .$myMpd->errStr."</SPAN>";
break;
default:
break;
?>
<DIV ALIGN=CENTER>[ <A HREF="<? echo $_SERVER[PHP_SELF] ?>">Refresh Page</A> ]</DIV>
<HR>
<B>Connected to MPD Version mpd_version ?> at host ?>:port ?></B><BR>
State:
state) {
case MPD_STATE_PLAYING: echo "MPD is Playing [<A HREF='".$_SERVER[PHP_SELF]."?m=pause'>Pause</A>] [<A HREF='".$_SERVER[PHP_SELF]."?m=stop'>Stop</A>]"; break;
case MPD_STATE_PAUSED: echo "MPD is Paused [<A HREF='".$_SERVER[PHP_SELF]."?m=pause'>Unpause</A>]"; break;
case MPD_STATE_STOPPED: echo "MPD is Stopped [<A HREF='".$_SERVER[PHP_SELF]."?m=play'>Play</A>]"; break;
default: echo "(Unknown State!)"; break;
?>
<BR>
Volume: volume ?> [ <A HREF='<? echo $_SERVER[PHP_SELF] ?>?m=setvol&vol=0'>0</A> | <A HREF='<? echo $_SERVER[PHP_SELF] ?>?m=setvol&vol=25'>25</A> | <A HREF='<? echo $_SERVER[PHP_SELF] ?>?m=setvol&vol=75'>75</A> | <A HREF='<? echo $_SERVER[PHP_SELF] ?>?m=setvol&vol=100'>100</A> ]<BR>
Uptime: uptime) ?><BR>
Playtime: playtime) ?><BR>
state == MPD_STATE_PLAYING or $myMpd->state == MPD_STATE_PAUSED ) { ?>
Currently Playing: playlist[$myMpd->current_track_id]['Artist']." - ".$myMpd->playlist[$myMpd->current_track_id]['Title'] ?><BR>
Track Position: current_track_position."/".$myMpd->current_track_length." (".(round(($myMpd->current_track_position/$myMpd->current_track_length),2)*100)."%)" ?><BR>
Playlist Position: current_track_id+1)."/".$myMpd->playlist_count." (".(round((($myMpd->current_track_id+1)/$myMpd->playlist_count),2)*100)."%)" ?><BR>
<HR>
<B>Playlist - Total: playlist_count ?> tracks (Click to Remove)</B><BR>
playlist) ) echo "ERROR: " .$myMpd->errStr."\n";
else {
foreach ($myMpd->playlist as $id => $entry) {
echo ( $id == $myMpd->current_track_id ? "<B>" : "" ) . ($id+1) . ". <A HREF='".$_SERVER[PHP_SELF]."?m=rem&id=".$id."'>".$entry['Artist']." - ".$entry['Title']."</A>".( $id == $myMpd->current_track_id ? "</B>" : "" )."<BR>\n";
?>
<HR>
<B>Sample Search for the String 'U2' (Click to Add to Playlist)</B><BR>
Search(MPD_SEARCH_ARTIST,'U2');
if ( is_null($sl) ) echo "ERROR: " .$myMpd->errStr."\n";
else {
foreach ($sl as $id => $entry) {
echo ($id+1) . ": <A HREF='".$_SERVER[PHP_SELF]."?m=add&filename=".urlencode($entry['file'])."'>".$entry['Artist']." - ".$entry['Title']."</A><BR>\n";
if ( count($sl) == 0 ) echo "<I>No results returned from search.</I>";
// Example of how you would use Bulk Add features of MPD
// $myarray = array();
// $myarray[0] = "ACDC - Thunderstruck.mp3";
// $myarray[1] = "ACDC - Back In Black.mp3";
// $myarray[2] = "ACDC - Hells Bells.mp3";
// if ( is_null($myMpd->PLAddBulk($myarray)) ) echo "ERROR: ".$myMpd->errStr."\n";
?>
<HR>
<B>Artist List</B><BR>
GetArtists()) ) echo "ERROR: " .$myMpd->errStr."\n";
else {
while(list($key, $value) = each($ar) ) {
echo ($key+1) . ". " . $value . "<BR>";
$myMpd->Disconnect();
// Used to make number of seconds perty.
function secToTimeStr($secs) {
$days = ($secs%604800)/86400;
$hours = (($secs%604800)%86400)/3600;
$minutes = ((($secs%604800)%86400)%3600)/60;
$seconds = (((($secs%604800)%86400)%3600)%60);
if (round($days)) $timestring .= round($days)."d ";
if (round($hours)) $timestring .= round($hours)."h ";
if (round($minutes)) $timestring .= round($minutes)."m";
if (!round($minutes)&&!round($hours)&&!round($days)) $timestring.=" ".round($seconds)."s";
return $timestring;
?>
</BODY></HTML>
As you can see it doesn't seem to understand the pointer operator. Do I have to enable anything in the PHP config files or something?It's set up correctly. Also, it does parse PHP, just not after the arrow.
Here is my php.ini:
; With mbstring support this will automatically be converted into the encoding
; given by corresponding encode setting. When empty mbstring.internal_encoding
; is used. For the decode settings you can distinguish between motorola and
; intel byte order. A decode setting cannot be empty.
; http://php.net/exif.encode-unicode
;exif.encode_unicode = ISO-8859-15
; http://php.net/exif.decode-unicode-motorola
;exif.decode_unicode_motorola = UCS-2BE
; http://php.net/exif.decode-unicode-intel
;exif.decode_unicode_intel = UCS-2LE
; http://php.net/exif.encode-jis
;exif.encode_jis =
; http://php.net/exif.decode-jis-motorola
;exif.decode_jis_motorola = JIS
; http://php.net/exif.decode-jis-intel
;exif.decode_jis_intel = JIS
[Tidy]
; The path to a default tidy configuration file to use when using tidy
; http://php.net/tidy.default-config
;tidy.default_config = /usr/local/lib/php/default.tcfg
; Should tidy clean and repair output automatically?
; WARNING: Do not use this option if you are generating non-html content
; such as dynamic images
; http://php.net/tidy.clean-output
tidy.clean_output = Off
[soap]
; Enables or disables WSDL caching feature.
; http://php.net/soap.wsdl-cache-enabled
soap.wsdl_cache_enabled=1
; Sets the directory name where SOAP extension will put cache files.
; http://php.net/soap.wsdl-cache-dir
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used
; instead of original one.
; http://php.net/soap.wsdl-cache-ttl
soap.wsdl_cache_ttl=86400
; Sets the size of the cache limit. (Max. number of WSDL files to cache)
soap.wsdl_cache_limit = 5
[sysvshm]
; A default size of the shared memory segment
;sysvshm.init_mem = 10000
[ldap]
; Sets the maximum number of open links or -1 for unlimited.
ldap.max_links = -1
[mcrypt]
; For more information about mcrypt settings see http://php.net/mcrypt-module-open
; Directory where to load mcrypt algorithms
; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt)
;mcrypt.algorithms_dir=
; Directory where to load mcrypt modes
; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt)
;mcrypt.modes_dir=
[dba]
;dba.default_handler=
; Local Variables:
; tab-width: 4
; End:
Last edited by BaconPie (2010-11-04 20:11:33) -
Coherence 3.4.2 JMX: invoking operation problem
Hi,
we have run into two issues invoking JMX ModelMBean operations via JMX in Coherence 3.4.2
1. if a JMX operation has got any parameters /like doFoo(String a)/
it can not be invoked at all
this issue can be worked around by overriding RequiredJMXBean.invoke()
2. if any of a JMX operation's parameters is of a primitive type /doFoo(int i)/
a different error message is generated
this issue can not be worked around by overriding RequiredJMXBean.invoke()
because RequiredJMXBean.invoke() doesn't get invoked in this case
---here's sample code, a full project, 4 files total ---
/* please put this into src/main/java/foo/c34/Main.java */
package foo.c34;
import javax.management.MBeanParameterInfo;
import javax.management.modelmbean.ModelMBeanAttributeInfo;
import javax.management.modelmbean.ModelMBeanConstructorInfo;
import javax.management.modelmbean.ModelMBeanInfo;
import javax.management.modelmbean.ModelMBeanInfoSupport;
import javax.management.modelmbean.ModelMBeanNotificationInfo;
import javax.management.modelmbean.ModelMBeanOperationInfo;
import javax.management.modelmbean.RequiredModelMBean;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.management.Registry;
* This sample program demonstrates Coherence 3.4.2 JMX difficulties with invoking methods
* Please invoke this program with
* -Dcom.sun.management.jmxremote
* otherwise bean "Coherence" won't be exposed in JMX console
* Not sure why this is necessary because this would imply this is no longer required
* http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
* ===
* To see the problem please try invoking method "operation1" and "operation2"
* via JMX console.
* Different error messages will be shown for each method
* To work around "operation1" problem please comment out this line
* final RequiredModelMBean rmb = new RequiredModelMBean();
* land uncomment the alternative one
* final RequiredModelMBean rmb = new WorkaroundRequiredModelMBean();
* You shall be able to invoke "operation1" then.
* Please note that you still won't be able to invoke "operation2"
public class Main {
public static void main(final String[] args) throws Exception {
configureProperties();
Registry registry = CacheFactory.ensureCluster().getManagement();
final RequiredModelMBean rmb = new RequiredModelMBean();
//final RequiredModelMBean rmb = new WorkaroundRequiredModelMBean();
final ModelMBeanInfo mbi = createModelMBeanInfo();
rmb.setModelMBeanInfo(mbi);
final Object managed = new Managed();
rmb.setManagedResource(managed, "ObjectReference");
final String name = registry.ensureGlobalName("type=A");
registry.register(name, rmb);
for (;;) {
Thread.sleep(1000);
private static ModelMBeanInfo createModelMBeanInfo() {
final MBeanParameterInfo p1 = new MBeanParameterInfo("a", "java.lang.Integer", "a desc");
final MBeanParameterInfo p2 = new MBeanParameterInfo("a", "int", "a desc");
final ModelMBeanOperationInfo op1 = new ModelMBeanOperationInfo("operation1", "operation 1",
new MBeanParameterInfo[]{p1}, "void", ModelMBeanOperationInfo.UNKNOWN);
final ModelMBeanOperationInfo op2 = new ModelMBeanOperationInfo("operation2", "operation 2",
new MBeanParameterInfo[]{p2}, "void", ModelMBeanOperationInfo.UNKNOWN);
return new ModelMBeanInfoSupport("foo", "desc", new ModelMBeanAttributeInfo[0],
new ModelMBeanConstructorInfo[0], new ModelMBeanOperationInfo[]{op1, op2},
new ModelMBeanNotificationInfo[0]);
public static class Managed {
public void operation1(Integer p1) {
System.out.println("operation1 invoked p1=" + p1);
public void operation2(int p2) {
System.out.println("operation2 invoked p2=" + p2);
private static void configureProperties() {
System.setProperty("tangosol.coherence.cacheconfig", "a-cache-config.xml");
System.setProperty("tangosol.coherence.ttl", "0");
System.setProperty("tangosol.coherence.log", "jdk");
System.setProperty("tangosol.coherence.log.level", "9");
System.setProperty("tangosol.coherence.clusterport", "5878");
System.setProperty("com.sun.management.jmxremote", "");
System.setProperty("tangosol.coherence.management", "all");
System.setProperty("tangosol.coherence.management.remote", "true");
/* please put this into src/main/java/foo/c34/WorkaroundRequiredModelMBean.java */
package foo.c34;
import javax.management.MBeanException;
import javax.management.ReflectionException;
import javax.management.RuntimeOperationsException;
import javax.management.modelmbean.RequiredModelMBean;
public class WorkaroundRequiredModelMBean extends RequiredModelMBean {
public WorkaroundRequiredModelMBean() throws MBeanException, RuntimeOperationsException {
public Object invoke(final String opName, final Object[] params,
final String[] signature) throws MBeanException, ReflectionException {
final String[] fakeSignature = fakeSignature(opName);
return super.invoke(opName, params, fakeSignature);
protected String[] fakeSignature(final String methodName) {
if (methodName.equals("operation1")) {
return new String[]{"java.lang.Integer"};
if (methodName.equals("operation2")) {
return new String[]{"int"};
return new String[0];
<!DOCTYPE cache-config SYSTEM "cache-config.dtd">
<!-- please put this into src/main/resources/a-cache-config.xml -->
<cache-config>
<caching-scheme-mapping>
<cache-mapping>
<cache-name>*</cache-name>
<scheme-name>AAA</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<local-scheme>
<scheme-name>AAALocal</scheme-name>
<autostart>true</autostart>
<high-units>0</high-units>
</local-scheme>
<distributed-scheme>
<scheme-name>AAA</scheme-name>
<service-name>AAACache</service-name>
<backing-map-scheme>
<local-scheme>
<scheme-ref>AAALocal</scheme-ref>
</local-scheme>
</backing-map-scheme>
<autostart>true</autostart>
</distributed-scheme>
</caching-schemes>
</cache-config>
<!-- please put this into pom.xml at project root level -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foo-group</groupId>
<artifactId>c34-jmx-demo</artifactId>
<name>Coherence 34 JMX Demo</name>
<version>0.0.1-SNAPSHOT</version>
<description>Demonstrate Coherece 3.4 JMX Difficulties</description>
<dependencies>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>coherence</artifactId>
<version>3.4.2</version>
</dependency>
</dependencies>
</project>Hi Dave,
I wanted to let you know that we do not have an answer yet but we are looking into it. Thanks!
Out of curiosity what type of impact is this having with your application?We've managed to temporarily work around both of the issues.
Of course we shall be very glad to remove the work-arounds when it becomes possible. -
Extended notifications problem
Hi experts,
I am trying to configure extended notifications for around 7 to 8 different taks
pertaining to different workflows.
I could successfully do it for 1 task.
Then after successful testing I did add more filters to the same configuration
under same subscription and delivery.
I even created new schedules for the new filters. But unfortunately it is not working.
I could debug the standard program SWN_SELSEN and found that the particular WAPI call to
select the delta Work Items from SWWWIHEAD and SWWWIHIST is failing because of some
timestamp mismatch.
Can you please provide me some help regarding this ?
Thanks,
DebHi Purvesh,
You can find the step by step procdure in the following blog.
How to get Work items @ your Outlook Inbox
You can find all the definitions and theories in the SAP Help link provided in the same blog.
I initially followed the above and could successfully do it for 1 task.
However, I was stuck in achieving the same for multiple task belonging to different workflows.
Here is how I did it:
1) Do the configuration in SWNCONFIG as per the blog and SAP Help
A) Create your own delivery schdule
B) Create your own subscription using the above delivery schedule
C) Create your own filters
D) Create your own selection schedule
2) Then run the report SWN_SELSEN to do the actual selection and delivery based on the schedules you created.
The key is creating the filters. Follow the SAP Help link closely and try it. If you face any problems
the please let me know.
Please award appropriate points.
Thanks & Regards
Deb
Edited by: debabrata mohanty on Dec 10, 2008 11:26 AM -
Photoshop CS6 Extended 3D Problem
I have reloaded Photoshop 3D Extended 6 times having removed every trace of ADOBE out of my registry, in order to try and get the 3D section to load - to no avail. I have tried everything I can but nothing seems to work ( I am a beginner) for me. Details of my machine are as follows:-
Adobe Photoshop Version: 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00) x64
Operating System: Windows 7 64-bit
Version: 6.1 Service Pack 1
System architecture: Intel CPU Family:6, Model:10, Stepping:7 with MMX, SSE Integer, SSE FP, SSE2, SSE3, SSE4.1, SSE4.2
Physical processor count: 4
Processor speed: 3291 MHz
Built-in memory: 8173 MB
Free memory: 6403 MB
Memory available to Photoshop: 7223 MB
Memory used by Photoshop: 60 %
Image tile size: 128K
Image cache levels: 4
OpenGL Drawing: Enabled.
OpenGL Drawing Mode: Advanced
OpenGL Allow Normal Mode: True.
OpenGL Allow Advanced Mode: True.
OpenGL Allow Old GPUs: Not Detected.
Video Card Vendor: ATI Technologies Inc.
Video Card Renderer: AMD Radeon HD 6800 Series
Display: 1
Display Bounds:= top: 0, left: 0, bottom: 1024, right: 1280
Video Card Number: 1
Video Card: AMD Radeon HD 6800 Series (XFX HD6850 RADEON 1GB DDR5 PCI-E 1GB DDR2 667 MEMORY)
OpenCL Unavailable
Driver Version: 8.850.0.0
Driver Date: 20110419000000.000000-000
Video Card Driver: aticfx64.dll,aticfx64.dll,aticfx64.dll,aticfx32,aticfx32,aticfx32,atiumd64.dll,atidxx64.d ll,atidxx64.dll,atiumdag,atidxx32,atidxx32,atiumdva,atiumd6a.cap,atitmm64.dll
Video Mode: 1280 x 1024 x 4294967296 colors
Video Card Caption: AMD Radeon HD 6800 Series
Video Card Memory: 1024 MB
Video Rect Texture Size: 16384
Serial number: 92628701192123445467
Application folder: C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\
Temporary file path: C:\Users\Jones\AppData\Local\Temp\
Photoshop scratch has async I/O enabled
Scratch volume(s):
Startup, 931.4G, 819.3G free
Required Plug-ins folder: C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\Required\
Primary Plug-ins folder: C:\Program Files\Adobe\Adobe Photoshop CS6 (64 Bit)\Plug-ins\
Additional Plug-ins folder: not set
Installed components:
A3DLIBS.dll A3DLIB Dynamic Link Library 9.2.0.112
ACE.dll ACE 2012/01/18-15:07:40 66.492997 66.492997
adbeape.dll Adobe APE 2012/01/25-10:04:55 66.1025012 66.1025012
AdobeLinguistic.dll Adobe Linguisitc Library 6.0.0
AdobeOwl.dll Adobe Owl 2012/02/09-16:00:02 4.0.93 66.496052
AdobePDFL.dll PDFL 2011/12/12-16:12:37 66.419471 66.419471
AdobePIP.dll Adobe Product Improvement Program 6.0.0.1654
AdobeXMP.dll Adobe XMP Core 2012/02/06-14:56:27 66.145661 66.145661
AdobeXMPFiles.dll Adobe XMP Files 2012/02/06-14:56:27 66.145661 66.145661
AdobeXMPScript.dll Adobe XMP Script 2012/02/06-14:56:27 66.145661 66.145661
adobe_caps.dll Adobe CAPS 6,0,29,0
AGM.dll AGM 2012/01/18-15:07:40 66.492997 66.492997
ahclient.dll AdobeHelp Dynamic Link Library 1,7,0,56
aif_core.dll AIF 3.0 62.490293
aif_ocl.dll AIF 3.0 62.490293
aif_ogl.dll AIF 3.0 62.490293
amtlib.dll AMTLib (64 Bit) 6.0.0.75 (BuildVersion: 6.0; BuildDate: Mon Jan 16 2012 18:00:00) 1.000000
ARE.dll ARE 2012/01/18-15:07:40 66.492997 66.492997
AXE8SharedExpat.dll AXE8SharedExpat 2011/12/16-15:10:49 66.26830 66.26830
AXEDOMCore.dll AXEDOMCore 2011/12/16-15:10:49 66.26830 66.26830
Bib.dll BIB 2012/01/18-15:07:40 66.492997 66.492997
BIBUtils.dll BIBUtils 2012/01/18-15:07:40 66.492997 66.492997
boost_date_time.dll DVA Product 6.0.0
boost_signals.dll DVA Product 6.0.0
boost_system.dll DVA Product 6.0.0
boost_threads.dll DVA Product 6.0.0
cg.dll NVIDIA Cg Runtime 3.0.00007
cgGL.dll NVIDIA Cg Runtime 3.0.00007
CIT.dll Adobe CIT 2.0.5.19287 2.0.5.19287
CoolType.dll CoolType 2012/01/18-15:07:40 66.492997 66.492997
data_flow.dll AIF 3.0 62.490293
dvaaudiodevice.dll DVA Product 6.0.0
dvacore.dll DVA Product 6.0.0
dvamarshal.dll DVA Product 6.0.0
dvamediatypes.dll DVA Product 6.0.0
dvaplayer.dll DVA Product 6.0.0
dvatransport.dll DVA Product 6.0.0
dvaunittesting.dll DVA Product 6.0.0
dynamiclink.dll DVA Product 6.0.0
ExtendScript.dll ExtendScript 2011/12/14-15:08:46 66.490082 66.490082
FileInfo.dll Adobe XMP FileInfo 2012/01/17-15:11:19 66.145433 66.145433
filter_graph.dll AIF 3.0 62.490293
hydra_filters.dll AIF 3.0 62.490293
icucnv40.dll International Components for Unicode 2011/11/15-16:30:22 Build gtlib_3.0.16615
icudt40.dll International Components for Unicode 2011/11/15-16:30:22 Build gtlib_3.0.16615
image_compiler.dll AIF 3.0 62.490293
image_flow.dll AIF 3.0 62.490293
image_runtime.dll AIF 3.0 62.490293
JP2KLib.dll JP2KLib 2011/12/12-16:12:37 66.236923 66.236923
libifcoremd.dll Intel(r) Visual Fortran Compiler 10.0 (Update A)
libmmd.dll Intel(r) C Compiler, Intel(r) C++ Compiler, Intel(r) Fortran Compiler 10.0
LogSession.dll LogSession 2.1.2.1640
mediacoreif.dll DVA Product 6.0.0
MPS.dll MPS 2012/02/03-10:33:13 66.495174 66.495174
msvcm80.dll Microsoft® Visual Studio® 2005 8.00.50727.6195
msvcm90.dll Microsoft® Visual Studio® 2008 9.00.30729.1
msvcp100.dll Microsoft® Visual Studio® 2010 10.00.40219.1
msvcp80.dll Microsoft® Visual Studio® 2005 8.00.50727.6195
msvcp90.dll Microsoft® Visual Studio® 2008 9.00.30729.1
msvcr100.dll Microsoft® Visual Studio® 2010 10.00.40219.1
msvcr80.dll Microsoft® Visual Studio® 2005 8.00.50727.6195
msvcr90.dll Microsoft® Visual Studio® 2008 9.00.30729.1
pdfsettings.dll Adobe PDFSettings 1.04
Photoshop.dll Adobe Photoshop CS6 CS6
Plugin.dll Adobe Photoshop CS6 CS6
PlugPlug.dll Adobe(R) CSXS PlugPlug Standard Dll (64 bit) 3.0.0.383
PSArt.dll Adobe Photoshop CS6 CS6
PSViews.dll Adobe Photoshop CS6 CS6
SCCore.dll ScCore 2011/12/14-15:08:46 66.490082 66.490082
ScriptUIFlex.dll ScriptUIFlex 2011/12/14-15:08:46 66.490082 66.490082
tbb.dll Intel(R) Threading Building Blocks for Windows 3, 0, 2010, 0406
tbbmalloc.dll Intel(R) Threading Building Blocks for Windows 3, 0, 2010, 0406
TfFontMgr.dll FontMgr 9.3.0.113
TfKernel.dll Kernel 9.3.0.113
TFKGEOM.dll Kernel Geom 9.3.0.113
TFUGEOM.dll Adobe, UGeom© 9.3.0.113
updaternotifications.dll Adobe Updater Notifications Library 6.0.0.24 (BuildVersion: 1.0; BuildDate: BUILDDATETIME) 6.0.0.24
WRServices.dll WRServices Friday January 27 2012 13:22:12 Build 0.17112 0.17112
wu3d.dll U3D Writer 9.3.0.113
Required plug-ins:
Accented Edges 13.0
Adaptive Wide Angle 13.0
ADM 3.11x01
Angled Strokes 13.0
Average 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Bas Relief 13.0
BMP 13.0
Camera Raw 7.0
Chalk & Charcoal 13.0
Charcoal 13.0
Chrome 13.0
Cineon 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Clouds 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Collada 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Color Halftone 13.0
Colored Pencil 13.0
CompuServe GIF 13.0
Conté Crayon 13.0
Craquelure 13.0
Crop and Straighten Photos 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Crop and Straighten Photos Filter 13.0
Crosshatch 13.0
Crystallize 13.0
Cutout 13.0
Dark Strokes 13.0
De-Interlace 13.0
Difference Clouds 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Diffuse Glow 13.0
Displace 13.0
Dry Brush 13.0
Eazel Acquire 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Embed Watermark 4.0
Extrude 13.0
FastCore Routines 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Fibers 13.0
Film Grain 13.0
Filter Gallery 13.0
Fresco 13.0
Glass 13.0
Glowing Edges 13.0
Grain 13.0
Graphic Pen 13.0
Halftone Pattern 13.0
HDRMergeUI 13.0
IFF Format 13.0
Ink Outlines 13.0
JPEG 2000 13.0
Lens Blur 13.0
Lens Correction 13.0
Lens Flare 13.0
Liquify 13.0
Matlab Operation 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Measurement Core 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Mezzotint 13.0
MMXCore Routines 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Mosaic Tiles 13.0
Multiprocessor Support 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Neon Glow 13.0
Note Paper 13.0
NTSC Colors 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Ocean Ripple 13.0
Oil Paint 13.0
OpenEXR 13.0
Paint Daubs 13.0
Palette Knife 13.0
Patchwork 13.0
Paths to Illustrator 13.0
PCX 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Photocopy 13.0
Photoshop 3D Engine 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Picture Package Filter 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Pinch 13.0
Pixar 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Plaster 13.0
Plastic Wrap 13.0
PNG 13.0
Pointillize 13.0
Polar Coordinates 13.0
Portable Bit Map 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Poster Edges 13.0
Radial Blur 13.0
Radiance 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Read Watermark 4.0
Reticulation 13.0
Ripple 13.0
Rough Pastels 13.0
Save for Web 13.0
ScriptingSupport 13.0
Shear 13.0
Smart Blur 13.0
Smudge Stick 13.0
Solarize 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Spatter 13.0
Spherize 13.0
Sponge 13.0
Sprayed Strokes 13.0
Stained Glass 13.0
Stamp 13.0
Sumi-e 13.0
Targa 13.0
Texturizer 13.0
Tiles 13.0
Torn Edges 13.0
Twirl 13.0
Underpainting 13.0
Vanishing Point 13.0
Variations 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Water Paper 13.0
Watercolor 13.0
Wave 13.0
WIA Support 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
Wind 13.0
Wireless Bitmap 13.0 (13.0 20120315.r.428 2012/03/15:21:00:00)
ZigZag 13.0
Optional and third party plug-ins: NONE
Plug-ins that failed to load: NONE
Flash:
Mini Bridge
Kuler
Installed TWAIN devices: NONE
CAN ANYONE HELP, I AM GOING MAD?First, you need to reinstall all the Photoshop updates.
Do you have a subscription or Photoshop Extended license?
The 3D features are only available in CS6 Extended. -
Query Region Update Operation problem
Hi All,
I have one Query region in Oracle seeded page.
In Query region one table is there.
My Client Requirement is he wants to add one text input field in table. so that user can enter comments in text input field.
He also wants Update button as a Table Action and when he clicks on Update, this comments should get store into Database.
I want to know that Update operation is possible in Query region's table.because when i handle event in controller, it gives me Following Exception.
Logout
Error Page
Exception Details.
oracle.apps.fnd.framework.OAException: java.lang.ArrayIndexOutOfBoundsException: 0
at oracle.apps.fnd.framework.OAException.wrapperException(OAException.java:896)
at oracle.apps.po.common.server.PoBaseAMImpl.executeServerCommand(PoBaseAMImpl.java:115)
at oracle.apps.po.autocreate.server.ReqLinesVOImpl.executeQueryForCollection(ReqLinesVOImpl.java:67)
at oracle.jbo.server.ViewRowSetImpl.execute(ViewRowSetImpl.java:742)
at oracle.jbo.server.ViewRowSetImpl.executeQueryForMasters(ViewRowSetImpl.java:891)
at oracle.jbo.server.ViewRowSetImpl.executeQueryForMode(ViewRowSetImpl.java:805)
at oracle.jbo.server.ViewRowSetImpl.executeQuery(ViewRowSetImpl.java:799)
at oracle.jbo.server.ViewObjectImpl.executeQuery(ViewObjectImpl.java:3575)
at oracle.apps.fnd.framework.server.OAViewObjectImpl.executeQuery(OAViewObjectImpl.java:437)
at xxadat.oracle.apps.po.autocreate.webui.XXADATAttr15CO.processFormRequest(XXADATAttr15CO.java:73)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequest(OAWebBeanHelper.java:815)
at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processFormRequest(OAWebBeanContainerHelper.java:382)
at oracle.apps.fnd.framework.webui.beans.layout.OAStackLayoutBean.processFormRequest(OAStackLayoutBean.java:370)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequestChildren(OAWebBeanHelper.java:1027)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequestChildren(OAWebBeanHelper.java:993)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequest(OAWebBeanHelper.java:848)
at oracle.apps.fnd.framework.webui.OAWebBeanContainerHelper.processFormRequest(OAWebBeanContainerHelper.java:382)
at oracle.apps.fnd.framework.webui.beans.layout.OARowLayoutBean.processFormRequest(OARowLayoutBean.java:366)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequestChildren(OAWebBeanHelper.java:1027)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequestChildren(OAWebBeanHelper.java:993)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequest(OAWebBeanHelper.java:848)
at oracle.apps.fnd.framework.webui.beans.table.OAMultipleSelectionBean.processFormRequest(OAMultipleSelectionBean.java:481)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequestChildren(OAWebBeanHelper.java:1042)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequestChildren(OAWebBeanHelper.java:993)
at oracle.apps.fnd.framework.webui.OAWebBeanHelper.processFormRequest(OAWebBeanHelper.java:848)
at oracle.apps.fnd.framework.webui.OAAdvancedTableHelper.processFormRequest(OAAdvancedTableHelper.java:1671)
The page which i have cutomized is /oracle/apps/po/autocreate/webui/ReqSearchPG.
It is on R12.
Can anybody throw some points on this?
Regards
HiteshHi,
I got the problem,
It is a standard functionality of oracle that we can not update Requisitions which are approved.
My client requirement is that after approval of Requisition, he wants to update the Requisition.
I said that it is not possible in Forms as well as OAF.
The system will not allow to update Requisition once it is approved.
Regards
Hitesh -
Photoshop CS4 extended upgrade problems.....Help!
I am using Photoshop CS3 (registered and activated) on my old computer.
I built a new computer and want to install CS4 extended on it. I purchased a Photoshop CS4 Extended update from Amazon for $342.99. During installation of CS4 on my new computer I entered the serial number. The next page that pops up is Upgrade Check that asks: 1) Select product that you already own: The only choice is Adobe Photoshop CS3 Extended and 2) it asks for the serial number. I am upgrading from Photoshop CS3, not the extended version, so it will not accept my serial number. Photoshop is installed on a trial basis right now.
I tried installing Photoshop CS3 on the new computer but that did not help and CS3 did not recognize the CS2 installation disk that I put in the CD drive to prove that I was allowed to install a CS3 uprade.
The new computer I am trying to install on is an Intel i7 920 processor on a Gigabyte GA-EX58-UD4P motherboard, with 12Gb RAMM, a Sapphire Toxic Radion HD 4870 graphics card, and running Windows XP pro 64 bit. I installed the operating system on the D drive. This computer is not setup to connect to the internet.
I am also trying to install Adobe CS2 Creative Suite (everything except Photoshop), but the CS2 installation does not recognize the Adobe CS1 disk 1 when I put it in the CD drive as requested.
This is all very frustrating considering how happy I have been with my Adobe software all the way back to Photoshp 5. I called the 800-833-6687 number and after playing phone tree for a while was informed that I was calling outside their hours (at noon on Sunday) even though the webpage I got the number from says they are available 7 days a week.
It was bad enough that after spending $195 to upgrade to Photoshop CS3, 3 weeks later Adobe announced Photoshop CS4.
Thanks in advance for any help,
SteveYou do like making things complicated don't you?
From your message I deduce that you purchased an upgrade that is not in the upgrade eligibility path from the version that you had.
It's not logical but then what is these days in Adobe marketing? The only solution seems to be to get back on the telephone. -
Portege m700 Tablet Extended Desktop Problem
I've looked all over and can't find a good answer to this, so I figured I'd better check with the source! I have a Toshiba Portege m700 tablet PC, which has an LCD monitor connected using the digital cable.
I have the external monitor set as my primary, with the notebook monitor set as the secondary, providing extra desktop real estate to the right of the first monitor.
The problem is that when I use the touchscreen, the mouse controls are only active on the primary monitor (the external one). What I'd like to do is have the external monitor be primary, the notebook monitor be secondary, and be able to drag items to the notebook and use ink, or onenote, or other touchscreen apps on there. I want the touchscreen to control ONLY the secondary (notebook) monitor. Is this possible?
It seems like there should be some way to just instruct the computer to map the touchscreen to the secondary monitor instead of always just mapping to the primary.
However, if there is not, what I did experiment with is having the notebook as primary and the external as secondary, and then using some sort of multimonitor software to manage the taskbar and such to create the illusion of the external monitor being primary. The problem here is that while the notebook is 1280 x 800 resolution, the external monitor is capable of 1280 x 1024, but when set as secondary will go no higher than 1280 x 800. Is there a way to force the external monitor to run in 1280 x 1024 if I'm using it as the secondary?
Is this something for which I need an updated graphics driver? I tried to get a newer version of the Intel GMA, but it actually removed all extended desktop options for me, so I rolled it back. The version it's running is 6.14.10.4837.
Thank you in advance for anyone pointing me to any driver updates, configuration directions, or external software that can effectively manage all these options of extended desktop, screen resolution, and what monitor is assigned to touchscreen control!I've just tested the "Extended Desktop for Tablet PC" powertoy, and that doesn't solve this problem. With the tablet set as the secondary monitor, when I move the window onto that screen, it just recurses the image over itself, which isn't really useful.
No one has any other ideas about this? -
IMac 27" extended desktop problems
Hi!
I own a 2011 iMac 27" and I am having issues using a Samsung SyncMaster T240M display as extended desktop.
It works fine when I am just using the computer for a while, but if the displays go to sleep mode, when I return to the computer the iMac display restores right away but then the Samsung display starts to go on and off repeatedly until it finally stays on, but then all my applications are on the iMac display.
It is pretty much like what would happen if I had unplugged the monitor and plugged it back in.
Is there a way to fix this or do I just have to live with that? Has anyone experienced the same problem with other displays? Maybe this Samsung display is not syncing well with the iMac?
Anyway, any help will be very much appreciated.
See you,
JPIf the machine is covered by warranty or even better by AppleCare then contact AppleCare. They will be able to do in-home service if you are within 50 miles of an AASP. You will have to request this service but they will do it.
-
Jndi OpenLdap password problem
Hello,
I've searched different forums and google for days now but i can't find a solution for my problem. I'm trying to use OpenLdap and Jndi to authentificate users. I can perform an anonymous bind but if i try to authentificate with a user in my Ldap tree i always get this error:
javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
This happens if i use 'simple' for security_authentification. When i use digest-md5 the following problem occurs:
javax.naming.AuthenticationNotSupportedException: digest-md5
It is obvious that my OpenLdap server does not support digest-md5. And the first error tells me that my password is wrong.
If i lookup the passwords with a ldap browser it shows something like this:
{MD5}$1$pJyUMt74$8gXXepTKoLk9l3xeinY8u/
so i assume that some kind of a MD5 Hash is used. But i don't know how to generate these hash to do an authentification by JNDI.
This is my source code:
java.util.Hashtable env = new java.util.Hashtable();
env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(javax.naming.Context.PROVIDER_URL, "ldap://xxx:389");
env.put("java.naming.ldap.version", "2");
env.put(javax.naming.Context.SECURITY_AUTHENTICATION,"simple");
env.put(javax.naming.Context.SECURITY_PRINCIPAL, "uid=xxx, ou=xxx, o=xxx, c=DE");
env.put(javax.naming.Context.SECURITY_CREDENTIALS, xxx); All variables are set correctly. I hope someone can give me a hint how to do this authentification.
If i generate an MD5 hash from my cleartext password it doesn't match the one in my Ldap tree.
Thanks in advance.
SebastianMaybe you should specify jndi name for your bean in deployment descriptor (ejb-jar.xml) of EJB jar module?
<ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>MyBean</ejb-name>
<jndi-name>JNDINameOfMyBean</jndi-name>
</ejb>
</enterprise-beans>
</ejb-jar>And then lookup for JNDINameOfMyBean. -
JAI + JAI Image IO - ImageWrite operation problem: color reversed
I installed jai 1.1.3 and jai imageio 1.1 on jdk 1.6 and did a test with the following code.
public static void main(String args[]) {
Byte[] bandValues = new Byte[3];
bandValues[0] = (byte)255;
bandValues[1] = (byte)0;
bandValues[2] = (byte)0;
ParameterBlock params = new ParameterBlock();
params.add((float)300).add((float)200);
params.add(bandValues);
PlanarImage bim = JAI.create("constant", params);
JAI.create("imagewrite", bim, "d:/dev/baseImage.png", "PNG");
JAI.create("filestore", bim, "d:/dev/baseImage2.png", "PNG");
PlanarImage pi = JAI.create("imageread", "d:/dev/baseImage.png");
PlanarImage pi2 = JAI.create("imageread", "d:/dev/baseImage2.png");
JFrame frame = new JFrame();
frame.setTitle("Output Image");
Container contentPane = frame.getContentPane();
contentPane.setLayout(new GridLayout(1,3));
contentPane.add(new JScrollPane(new DisplayJAI(bim)));
contentPane.add(new JScrollPane(new DisplayJAI(pi)));
contentPane.add(new JScrollPane(new DisplayJAI(pi2)));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(960, 400);
frame.setVisible(true);
}I found that the color in the output file created by "imagewrite" was reversed - bim is red but pi is blue.
The one created by "filestore" was correct: pi2 was red.
Did I use the "imagewrite" operation incorrectly? How should I use the imagewrite operation?I think you are using it correctly and you've encountered a bug. The same thing occurs on my machine. PlanarImage is using an interlaced raster which stores pixels as BGRBGRBGR ect... But the only way I can see this causing a problem is if the imagewrite operation was going directly to the DataBuffer for the pixels. If it retrieved it through the raster the colors should not be switched.
Interestingly enough if I do this
JAI.create("imagewrite", bim.getAsBufferedImage(), "d:/dev/baseImage.png", "PNG");then it works correctly. This suggests even more that the fault is with imagewrite operation interpreting the PlanarImage wrongly.
Maybe you are looking for
-
I do internet website rating and when I try to rate a mobile page, I first go to tools, then to mobile plugins, then put mark by mobile plugins. But when I go to the mobile page, it doesn't disply the page like you would see on your phone. I have to
-
How to import user defined class in UIX page?
Does anyone know how to import user defined class in UIX page so that the class can be called in the javascript in the UIX ? Thks & Rgds, Benny
-
LV2010 - Error 74 Application Builder
Hi, I have migrated a LabVIEW project from LabVIEW 2009 SP1 to LabVIEW 2010. Everything works fine - execution in development system - except the compilation of the build specification. I have tried it several times with different options --> new pro
-
I can't accept my family share invitation
When I open my family share invitation it tells me to click on view now to accept the invite. I do this and am redirected to a page that gives me the same instructions. How do I accept the invite?
-
HT204380 No video on the other side in facetime
I have internet connections from two ISPs. Facetime works fine with one ISP, however, with the faster 15mbps download and upload ISP the other person does not get video. they only get audio. Whats wrong?