Apparently, because eBay is global, and in some parts of the world mod-chips are illegal, it is not allowed to list devices that have mod chips in places where they are legal (e.g. Australia). Yet, it is legal to list flick knives on eBay. They are not legal in Australia. That is quite the definition of hypocrisy. I guess, a more accurate phrasing of the rule is “if it isn’t legal in the USA, you can’t list it on eBay no matter what country you’re in.”

Here is the actual extract from a breach email this month:

The following information may help explain the reason your listing(s) was removed:

eBay is aware of the legality of Mod Chips in Australia but because eBay is a worldwide entity we have our own set of rules, policies and regulations. eBay does not permit the the listing of devices or programs that allow the user to play backup games and/or play import games on a domestic system. Such devices bypass a copyright security system in the console; therefore, the device is infringing the copyrights of the content owner.

Copyright infringement is unlawful and against eBay’s policies. Copyright is the protection provided by law to the authors of creative works, such as movies, music, software, photographs and books, both published and unpublished. Copyright owners possess the exclusive right to reproduce the copyrighted work, to distribute copies of the copyrighted work, and to perform or display the copyrighted work publicly.

eBay prohibits the listing of unauthorised copies of copyrighted works. Unauthorised copies include (but are not limited to) backup, pirated, duplicated, or bootlegged copies.

Guideline: If the product you are selling is a copy of another work that you aren’t authorised to copy, don’t list the item. eBay prohibits the sale of items that can copy or create a backup of video games, including:

- mod chips
- softmods
- game enhancers
- boot discs

These devices are designed to bypass copyright security systems, allowing users to produce unauthorised copies of games. This is against the law and violates the rights of the copyright owner.

For more information visit the following Help page:

http://pages.ebay.com.au/help/policies/mod-chips.html

For more information visit the following Help page:

http://pages.ebay.com.au/help/policies/replica-counterfeit.html

Leave A Comment, Written on May 17th, 2012 , Serious

About 18 months ago, I investigated Saasu and Xero as online accounting software solutions. Since then, it seems Saasu has improved (I remained on their newsletter subscription since the trial) and so decided to check this out. Actually, I only checked out the points that I care about, so this isn’t a comparison so much as a how-my-opinion-of-Saasu-has-changed.

1. Due dates on invoices

I can’t see how to do +14 terms in Saasi on a per-invoice basis. I know in Xero, you can just type in”+14″ and it adds 14 days to the date in the invoice date field. The terms / date due box in Saasu doesn’t actually allow the + character, so you end up with “14″ if you try this, and it auto-completes this to “14th of the current month”.

2. PDF invoice layout

Setup of printed invoices seems more standard in Saasu than Xero to me. Saasu will print all items, ex-GST, then a total ex-GST. Then the GST amount, and the total including GST. Xero prints all items inc-GST, the total inc-GST, then the included GST amount. This is strange, because when the invoices are viewed on screen in Xero itself, they do it like Saasu does, but the printed versions are different.

3. App latency (or, site ping)

Xero have a host right here in Perth, Western Australia, so I can get mad pings to them. Saasu claim to store data in Australia and the USA, but I can’t figure out how to access the Australian site. As such, I’m stuck with 300ms+ pings to their Rackspace servers in the US. When you are trying to convince people to move from a desktop application, that is just too much of a delay between clicks. 150ms would be acceptable, so Japan. 80ms would be fine – so over east somewhere (I have arranged cloud hosting for Perth people over east before with no latency complaints).

4. Complex user roles.

What I am referring to is what MYOB calls security, Quicken has a similar feature. It is the option to limit a user or group of users to a specific set of tasks. For instance, you only want accounts payable people to have access to AP, marketing people to have read only access to all sales, etc. In Xero, you can only restrict access to 4 sections: bank reconciliation, invoices (accounts payable and receivable), create reports, and view reports. That means, your accounts payable people will have access to the accounts receivable as well (and if they have write access to payables, they will have write access to receivables as well!) and your marketing people will have access to reports on all sections. I did email Xero about this about 12 months ago, to which I got a response that it was not possible to limit roles any further but it would be passed on as a suggestion. 12 months later and it hasn’t been implemented, so I guess it’s not that high on the priority list. Why am I slamming them so much on this? Because the competition has very fine grained control (both on and offline competition).

5. BAS summaries

Both seem to do this well. Saasu will give a much more detailed report though, even going as far to include the PAYG Installment items (Xero doesn’t give this, you have to go and look it up manually). The added information in Saasu does make it MUCH more cluttered though, and that’s pretty much the story between the two. Saasu seems better for those who know what they are looking for, Xero is easier to setup and use for those who can get away with what it offers.

UPDATE: I sent an email to Saasu to ask them how to get access to the Australian site (i.e. the site hosted in Australia, as they quite clearly say they store customer data in Australia on their sales material: http://www.saasu.com/pricing/ – “Security and Data”). The response I got was:

(1) They do not allow customers to select which region of hosting they want to login to.

(2) They don’t provide direct access to customer data at a specific location (i.e. requesting the customer service team to give us access to the data stored in AU is denied. More than likely, a direct request for this would elicit a response of “the data is the same as the live data, just access the live data”.)

(3) They will not provide evidence of 3rd party auditing to demonstrate that the data is in fact stored in Australia, as they have not received a request that would consider it necessary, nor did they choose to disclose any additional information as to why customers are not allowed access to this information.

I have several problems with this an so still cannot recommend them in the course of my professional job.

With (1) and (2) it effectively means that they do not have local hosting of the web application, as even if they do, customers are not allowed to access it. The hosting is in the US to a Rackspace cloud.

With (3), the only evidence they provided was a quote given by them, Saasu, in an article written on Techworld (http://www.techworld.com.au/article/391667/home-grown_cloud_storage_service_launched/):

“Sydney-based SaaS accounting business, Saasu has moved some of its local storage to Ninefold’s Cloud. The company’s CTO PaulGlavich said Ninefold storage augments the main hosting provider and forms part of the data replication cycle.”

 

“Saasu has multiple geographic locations around the world where data is replicated for security and redundancy purposes,” Glavich said.”

Now, I’m not paranoid, and I do think they are replicating the data, however, I find the sales information incredibly misleading and I do wonder how quickly they would be able to get the application back online should Rackspace have issues, or should the connection Australia has to the USA get interrupted (either by accident, intention, or legal policy). If they are just replicating data, and have zero infrastructure for the application (which would explain why customers can’t access it directly), I expect it would take some time to roll out infrastructure and restore that data onto a new cloud service.

I also find the reactive attitude to 3rd party auditing surprising given that this is a SaaS company dealing with one the of the most important and difficult to replace types of information with businesses (their accounts). I would think a proactive approach to auditing would make a lot of sense, and be a marketing boon when trying to sell companies on SaaS accounting systems.

It would seem to me that the marketing dog is wagging the business by the tail in this instance. The Sydney based company really does make it seem on the pricing material as though they have hosting here, which they technically do, but customers can’t access it. I can’t flaw it from a technical perspective with the way it’s written, but it does seem misleading to me. I read it as “multiple hosting locations — if one goes down you can still access the others”, but I’ve been given no information to support this. Somewhat disappointing.

1 Comment, Written on January 23rd, 2012 , Serious

I had to do some work on a ZenOSS system last week which ended up in my dropping to the ZenOSS console AKA zendmd. Finding API references is tricky, but they do allow tab completion / option listing. On a main device in /Devices/Server, I get the following 614 options, but without an API reference, I have no idea what most of them do.

>>> d.
Display all 614 possibilities? (y or n)
d.COPY(                                 	d.manage_addSiteRootForm(
d.DELETE(                               	d.manage_addUserCommand(
d.HDDIO(                                	d.manage_addUserFolder(
d.HEAD(                                 	d.manage_addZenMenu(
d.LOCK(                                 	d.manage_addZenMenuItem(
d.MKCOL(                                	d.manage_changeOwnershipType(
d.MOVE(                                 	d.manage_changePermissions(
d.OPTIONS(                              	d.manage_changeProperties(
d.PROPFIND(                             	d.manage_changePropertyTypes(
d.PROPPATCH(                            	d.manage_change_history(
d.PUT(                                  	d.manage_change_history_page(
d.SQLConnectionIDs(                     	d.manage_clone(
d.SiteRootAdd(                          	d.manage_copyObjects(
d.TRACE(                                	d.manage_copyright(
d.UNLOCK(                               	d.manage_createEventMap(
d.ZQueryIds(                            	d.manage_cutObjects(
d.absolute_url(                         	d.manage_defined_roles(
d.absolute_url_path(                    	d.manage_delLocalRoles(
d.ac_inherited_permissions(             	d.manage_delObjects(
d.access_debug_info(                    	d.manage_delProperties(
d.acquiredRolesAreUsedBy(               	d.manage_deleteAdministrativeRole(
d.addDTMLDocument(                      	d.manage_deleteBatchEvents(
d.addDTMLMethod(                        	d.manage_deleteEvents(
d.addDeviceGroup(                       	d.manage_deleteHeartbeat(
d.addLocalTemplate(                     	d.manage_deleteMaintenanceWindow(
d.addLocation(                          	d.manage_deleteObjects(
d.addManufacturer(                      	d.manage_deleteUserCommand(
d.addRelation(                          	d.manage_deleteZenMenu(
d.addSystem(                            	d.manage_deleteZenMenuItem(
d.addToZenPack(                         	d.manage_doUserCommand(
d.adminRoles(                           	d.manage_editAdministrativeRoles(
d.all_meta_types(                       	d.manage_editDevice(
d.allowedRolesAndUsers(                 	d.manage_editLocalRoles(
d.applyDataMap(                         	d.manage_editProperties(
d.applyProductContext(                  	d.manage_editRoles(
d.aqBaseHasAttr(                        	d.manage_editUserCommand(
d.availability(                         	d.manage_editedDialog(
d.bindTemplates(                        	d.manage_exportObject(
d.bobobase_modification_time(           	d.manage_fixupOwnershipAfterAdd(
d.breadCrumbs(                          	d.manage_form_title(
d.buildMenus(                           	d.manage_getPermissionMapping(
d.buildRelations(                       	d.manage_getUserRolesAndPermissions(
d.cacheComponents(                      	d.manage_hasId(
d.cacheRRDValue(                        	d.manage_historicalComparison(
d.callZenScreen(                        	d.manage_historyCompare(
d.changeDeviceClass(                    	d.manage_historyCopy(
d.changeOwnership(                      	d.manage_importExportForm(
d.changePythonClass(                    	d.manage_importObject(
d.checkRelations(                       	d.manage_index_main(
d.checkRemotePerm(                      	d.manage_linkObjects(
d.checkValidId(                         	d.manage_listAdministrativeRoles(
d.collectDevice(                        	d.manage_listLocalRoles(
d.comments                              	d.manage_main(
d.compile(                              	d.manage_menu(
d.convertEventField(                    	d.manage_options
d.createHierarchyObj(                   	d.manage_owner(
d.createdTime                           	d.manage_page_footer(
d.creator(                              	d.manage_page_header(
d.custPropertyIds(                      	d.manage_page_style.css(
d.custPropertyMap(                      	d.manage_pasteObjects(
d.defaultTimeout                        	d.manage_permission(
d.default_catalog                       	d.manage_permissionForm(
d.deleteDevice(                         	d.manage_propertiesForm(
d.deleteZenProperty(                    	d.manage_propertyTypeForm(
d.dependencies(                         	d.manage_removeRelation(
d.dependents(                           	d.manage_renameForm(
d.detailKeys                            	d.manage_renameObject(
d.details(                              	d.manage_renameObjects(
d.device(                               	d.manage_reportUserPermissions(
d.deviceClass(                          	d.manage_role(
d.doCommandForTarget(                   	d.manage_roleForm(
d.editableDeviceList(                   	d.manage_saveMenuItemOrdering(
d.eligiblePacks(                        	d.manage_setEventStates(
d.event_key                             	d.manage_setLocalRoles(
d.exportXml(                            	d.manage_setPermissionMapping(
d.exportXmlHook(                        	d.manage_snmpCommunity(
d.exportXmlProperties(                  	d.manage_tabs(
d.exportXmlRelationships(               	d.manage_takeOwnership(
d.exportZProperties(                    	d.manage_top_frame(
d.factory_type_information              	d.manage_undeleteBatchEvents(
d.fetchRRDValue(                        	d.manage_undeleteEvents(
d.fetchRRDValues(                       	d.manage_undo_transactions(
d.filtered_manage_options(              	d.manage_unlinkObjects(
d.filtered_meta_types(                  	d.manage_workspace(
d.findChild(                            	d.manage_zmi_logout(
d.findObject(                           	d.manage_zmi_prefs(
d.followNextHopIps(                     	d.meta_type
d.fullRRDPath(                          	d.meta_types
d.get(                                  	d.modelerLock
d.getAdministrativeRoles(               	d.monitor
d.getAqChainForUserCommands(            	d.monitorDevice(
d.getAttribute(                         	d.monitors(
d.getAttributeNode(                     	d.moveMeBetweenRels(
d.getAttributes(                        	d.moveObject(
d.getAvailableTemplates(                	d.name(
d.getBreadCrumbName(                    	d.objectIds(
d.getBreadCrumbUrlPath(                 	d.objectIds_d(
d.getChildNodes(                        	d.objectItems(
d.getCreatedTimeString(                 	d.objectItems_d(
d.getDataForJSON(                       	d.objectMap(
d.getDataSourceOptions(                 	d.objectMap_d(
d.getDefaultGraphDefs(                  	d.objectValues(
d.getDeviceClassName(                   	d.objectValues_d(
d.getDeviceClassPath(                   	d.os(
d.getDeviceComponents(                  	d.owner_info(
d.getDeviceComponentsNoIndexGen(        	d.pastSnmpMaxFailures(
d.getDeviceGroupNames(                  	d.path(
d.getDeviceIp(                          	d.perfServer(
d.getDeviceIpAddress(                   	d.permission_settings(
d.getDeviceLink(                        	d.permissionsOfRole(
d.getDeviceMacaddress(                  	d.portal_type
d.getDeviceName(                        	d.possible_permissions(
d.getDeviceUrl(                         	d.preMWProductionState
d.getDmd(                               	d.prepId(
d.getDmdKey(                            	d.primaryAq(
d.getDmdObj(                            	d.primarySortKey(
d.getDmdRoot(                           	d.priority
d.getElementsByTagName(                 	d.productionState
d.getEventDetail(                       	d.propdict(
d.getEventDetailFromStatusOrHistory(    	d.propertyDescription(
d.getEventHistory(                      	d.propertyIds(
d.getEventManager(                      	d.propertyItems(
d.getEventOwnerList(                    	d.propertyLabel(
d.getEventSummary(                      	d.propertyMap(
d.getExpandedLinks(                     	d.propertyValues(
d.getFirstChild(                        	d.propertysheets
d.getGraphDef(                          	d.pushConfig(
d.getGraphDefUrl(                       	d.rackSlot
d.getHTMLEventSummary(                  	d.redirectToUserCommands(
d.getHWManufacturerName(                	d.reindex_all(
d.getHWProductClass(                    	d.relationshipManagerPathRestriction
d.getHWProductKey(                      	d.removeLocalRRDTemplate(
d.getHWProductName(                     	d.removeRelation(
d.getHWSerialNumber(                    	d.removeZDeviceTemplates(
d.getHWTag(                             	d.rename(
d.getHierarchyObj(                      	d.renameDevice(
d.getIconPath(                          	d.renameDeviceInEvents(
d.getId(                                	d.renameDeviceInPerformance(
d.getIdLink(                            	d.restrictedTraverse(
d.getLastChange(                        	d.rolesOfPermission(
d.getLastChangeString(                  	d.rrdPath(
d.getLastChild(                         	d.saveCustProperties(
d.getLastPollSnmpUpTime(                	d.saveZenProperties(
d.getLinks(                             	d.security
d.getLocationLink(                      	d.selectedRoles
d.getLocationName(                      	d.sendEventWhenBlocked(
d.getMaintenanceWindows(                	d.sendEventWhenBlockedFlag
d.getManageInterface(                   	d.sendEventWhenResultBlocked(
d.getManageIp(                          	d.setAdminLocalRoles(
d.getManageIpObj(                       	d.setGroups(
d.getMenus(                             	d.setHWProduct(
d.getModificationTimeString(            	d.setHWProductKey(
d.getMonitoredComponents(               	d.setHWSerialNumber(
d.getNetworkRoot(                       	d.setHWTag(
d.getNextLockableParent(                	d.setLastChange(
d.getNextSibling(                       	d.setLastPollSnmpUpTime(
d.getNodeName(                          	d.setLocation(
d.getNodeType(                          	d.setManageIp(
d.getNodeValue(                         	d.setOSProduct(
d.getNonLoopbackIpAddresses(            	d.setOSProductKey(
d.getNowString(                         	d.setPerformanceMonitor(
d.getOSManufacturerName(                	d.setPriority(
d.getOSProcessMatchers(                 	d.setProdState(
d.getOSProductKey(                      	d.setProductInfo(
d.getOSProductName(                     	d.setSendEventWhenBlockedFlag(
d.getObjByPath(                         	d.setSiteManager(
d.getOverriddenObjects(                 	d.setSnmpLastCollection(
d.getOwner(                             	d.setSystems(
d.getOwnerDocument(                     	d.setTerminalServer(
d.getOwnerTuple(                        	d.setTitle(
d.getParentNode(                        	d.setZenProperty(
d.getPeerDeviceClassNames(              	d.smallRolesWidget
d.getPerformanceServer(                 	d.snmpAgeCheck(
d.getPerformanceServerName(             	d.snmpAgent
d.getPhysicalPath(                      	d.snmpContact
d.getPhysicalRoot(                      	d.snmpDescr
d.getPingStatus(                        	d.snmpIgnore(
d.getPingStatusNumber(                  	d.snmpLocation
d.getPingStatusString(                  	d.snmpMonitorDevice(
d.getPrettyLink(                        	d.snmpOid
d.getPreviousSibling(                   	d.snmpSysName
d.getPrimaryDmdId(                      	d.snmpindex
d.getPrimaryId(                         	d.sub_meta_types
d.getPrimaryParent(                     	d.superValues(
d.getPrimaryPath(                       	d.sysUpTime(
d.getPrimaryUrlPath(                    	d.sysedgeLicenseMode
d.getPriority(                          	d.systems(
d.getPriorityString(                    	d.tabs_path_default(
d.getProdState(                         	d.tabs_path_info(
d.getProductionStateString(             	d.this(
d.getProperty(                          	d.title
d.getPropertyType(                      	d.titleOrId(
d.getRRDContextData(                    	d.title_and_id(
d.getRRDDataPoint(                      	d.title_or_id(
d.getRRDDataPoints(                     	d.todayDate(
d.getRRDFileName(                       	d.tpURL(
d.getRRDNames(                          	d.tpValues(
d.getRRDPaths(                          	d.traceRoute(
d.getRRDSum(                            	d.undoable_transactions(
d.getRRDTemplate(                       	d.unindex_ips(
d.getRRDTemplateByName(                 	d.unindex_object(
d.getRRDTemplateName(                   	d.unlock(
d.getRRDTemplates(                      	d.unrestrictedTraverse(
d.getRRDValue(                          	d.unsetSendEventWhenBlockedFlag(
d.getRRDValues(                         	d.upToOrganizerBreadCrumbs(
d.getRelationshipManagerId(             	d.updateDevice(
d.getRelationshipNames(                 	d.updateProcesses(
d.getRelationships(                     	d.uptimeStr(
d.getReportableComponents(              	d.urlLink(
d.getSiteManager(                       	d.userCanTakeOwnership(
d.getSnmpConnInfo(                      	d.userCommands(
d.getSnmpLastCollection(                	d.userdefined_roles(
d.getSnmpLastCollectionString(          	d.users_with_local_role(
d.getSnmpStatus(                        	d.validClipData(
d.getSnmpStatusNumber(                  	d.validRoles(
d.getSnmpStatusString(                  	d.valid_property_id(
d.getStatus(                            	d.valid_roles(
d.getStatusCssClass(                    	d.validate_roles(
d.getStatusImgSrc(                      	d.values(
d.getStatusString(                      	d.view(
d.getSubObjects(                        	d.viewName(
d.getSystemNames(                       	d.virtual_url_path(
d.getSystemNamesString(                 	d.visibleCustPropertyMap(
d.getTagName(                           	d.write(
d.getThresholdInstances(                	d.yesterdayDate(
d.getThresholds(                        	d.zCollectorClientTimeout
d.getTreeItems(                         	d.zCollectorDecoding
d.getUnusedId(                          	d.zCollectorPlugins
d.getUrlForUserCommands(                	d.zCommandCommandTimeout
d.getUserCommand(                       	d.zCommandExistanceTest
d.getUserCommandEnvironment(            	d.zCommandLoginTimeout
d.getUserCommandIds(                    	d.zCommandLoginTries
d.getUserCommandTargets(                	d.zCommandPassword
d.getUserCommands(                      	d.zCommandPath
d.getWrappedOwner(                      	d.zCommandPort
d.getXMLEdges(                          	d.zCommandProtocol
d.getZ(                                 	d.zCommandSearchPath
d.getZenRootNode(                       	d.zCommandUsername
d.getZopeObj(                           	d.zDeviceTemplates
d.get_local_roles(                      	d.zFileSystemMapIgnoreNames
d.get_local_roles_for_userid(           	d.zFileSystemMapIgnoreTypes
d.get_request_var_or_attr(              	d.zFileSystemSizeOffset
d.get_valid_userids(                    	d.zHardDiskMapMatch
d.groups(                               	d.zIcon
d.hasChildNodes(                        	d.zIfDescription
d.hasObject(                            	d.zInterfaceMapIgnoreNames
d.hasProperty(                          	d.zInterfaceMapIgnoreTypes
d.has_local_roles(                      	d.zIpServiceMapMaxPort
d.has_order_support                     	d.zKeyPath
d.helpLink(                             	d.zLinks
d.hw(                                   	d.zLocalInterfaceNames
d.icon                                  	d.zLocalIpAddresses
d.id                                    	d.zMaxOIDPerRequest
d.index_html                            	d.zMySqlPassword
d.index_object(                         	d.zMySqlUsername
d.ipAddressAsInt(                       	d.zPingMonitorIgnore
d.isAnObjectManager                     	d.zProdStateThreshold
d.isInTree                              	d.zPythonClass
d.isLocal(                              	d.zRouteMapCollectOnlyIndirect
d.isLocalName(                          	d.zRouteMapCollectOnlyLocal
d.isLockedFromDeletion(                 	d.zRouteMapMaxRoutes
d.isLockedFromUpdates(                  	d.zSnmpAuthPassword
d.isPrincipiaFolderish                  	d.zSnmpAuthType
d.isResultLockedFromDeletion(           	d.zSnmpCommunities
d.isResultLockedFromUpdates(            	d.zSnmpCommunity
d.isTempDevice(                         	d.zSnmpEngineId
d.isTopLevelPrincipiaApplicationObject  	d.zSnmpMonitorIgnore
d.isUnlocked(                           	d.zSnmpPort
d.items(                                	d.zSnmpPrivPassword
d.keys(                                 	d.zSnmpPrivType
d.listDAVObjects(                       	d.zSnmpSecurityName
d.list_imports(                         	d.zSnmpTimeout
d.location(                             	d.zSnmpTries
d.lockFromDeletion(                     	d.zSnmpVer
d.lockFromUpdates(                      	d.zStatusConnectTimeout
d.lockStatus(                           	d.zSysedgeDiskMapIgnoreNames
d.lockWarning(                          	d.zTelnetEnable
d.lookupSchema(                         	d.zTelnetEnableRegex
d.maintenanceWindows(                   	d.zTelnetLoginRegex
d.makeLocalRRDTemplate(                 	d.zTelnetPasswordRegex
d.manage(                               	d.zTelnetPromptTimeout
d.manageIp                              	d.zTelnetSuccessRegexList
d.manage_CopyContainerAllItems(         	d.zTelnetTermLength
d.manage_CopyContainerFirstItem(        	d.zWinEventlog
d.manage_DAVget(                        	d.zWinEventlogMinSeverity
d.manage_FTPlist(                       	d.zWinPassword
d.manage_FTPstat(                       	d.zWinUser
d.manage_UndoForm(                      	d.zWmiMonitorIgnore
d.manage_access(                        	d.zenPropIsPassword(
d.manage_ackBatchEvents(                	d.zenPropertyIds(
d.manage_ackEvents(                     	d.zenPropertyItems(
d.manage_addAdministrativeRole(         	d.zenPropertyMap(
d.manage_addDTMLDocument(               	d.zenPropertyOptions(
d.manage_addDTMLMethod(                 	d.zenPropertyPath(
d.manage_addDocument(                   	d.zenPropertyString(
d.manage_addFile(                       	d.zenScreenUrl(
d.manage_addFolder(                     	d.zenpathjoin(
d.manage_addImage(                      	d.zenpathsplit(
d.manage_addItemsToZenMenu(             	d.zentinelTabs(
d.manage_addLocalRoles(                 	d.zmanage_addProperty(
d.manage_addLogMessage(                 	d.zmanage_delObjects(
d.manage_addMaintenanceWindow(          	d.zmanage_delProperties(
d.manage_addOrderedFolder(              	d.zmanage_editProperties(
d.manage_addProduct                     	d.zmanage_exportObject(
d.manage_addProperty(                   	d.zmanage_importObject(
d.manage_addRelation(                   	d.zmanage_importObjects(
d.manage_addSiteRoot(                   	d.zope_quick_start(
4 Comments, Written on January 8th, 2012 , Informative

This is a redesign of a site I did back in 2008. Sir Technology is a business IT solutions provider. They wanted to redesign their website to keep it aligned with moving strategic objectives. This is a clean, corporate image, designed to push a professional brand image. The site has a ‘dynamic’ feel to it through the use of rolling images and dropdown menus without social media integration.

Leave A Comment, Written on January 3rd, 2012 , Freelance Work

Just stumbled across an article on the Australian Customs website from 2002 announcing an amendment to the Prohibited Imports act. The highlight from this:

As a result of an Australasian Police Ministers' Council (APMC) resolution to
develop a uniform prohibited weapons (non-firearms) list, the definitions of
10 existing items have been amended and 13 new items have been included in
Schedule 2.

The definitions of the following items have been amended:

Item 9 - daggers
Item 12 - electric shock devices
Item 13 - acoustic shock devices
Item 18 - blowpipes and blowguns
Item 18A - blowpipe and blowgun darts
Item 18C - pistol crossbows
Item 19 - flick knives
Item 19A - knuckle dusters
Item 21 - goods incorporating a concealed knife, spike or blade
Item 23 - shuriken throwing irons or star knives
There are other reasons to have some of these items prohibited for sure, but obviously none of them were sufficient alone to cause this to occur for the 100 years prior. I find it weird that the tipping point was wanting to comply with creating a uniform prohibited weapons act act australasia wide. We have a totally different culture to every other country in the region; there’s generally a good reason NOT to be uniform with the rest of them! I hope we got something good in return for complying with this…At least our government is good enough to publish this material to the general public though I guess.
Leave A Comment, Written on January 1st, 2012 , Serious

ZenOSS is a great monitoring tool we use at work. Unfortunately, it lacks some really simple improvements that would make a huge difference in time-saving for me (and I’m sure I’m not alone).

1. A ‘next update in’ count (doesn’t have to be live, can reload when page is refreshed)
This should be on each device’s graph page to indicate when the next poll time for that device is. Alternatively, for complex devices, there could be an option to print it onto the graph image for those units that are polled at irregular intervals compared to the actual device. Obviously there are circumstances where this wouldn’t work, but they are exactly that: circumstances where this wouldn’t work. Most of the time it would, and it makes debugging easier.

2. Graph “pages” i.e. tabs within the graph section.
Some devices we monitor have *a lot* of graphs. It would be great to be able to say “this graph tab holds the summary information” and then create another tab for lower level detailed info.

3. The ability to view last polled data source information in it’s raw state. Normally, the data source information is processed into data points to be stored into the graph. It would be nice to see the raw output before it was processed for debugging purposes. Obviously this would have to be stored in a new location as RRD files won’t cater for this, but even if we just store the last 5 events, it would be massively useful for debugging. Both Naigios and Hyperic HQ allow some sort of means of doing this.

They are the 3 that are bugging me right now because they seem rather simple to implement (i.e. not many dependencies to worry about) ;)

Leave A Comment, Written on November 29th, 2011 , Serious

Listing on eBay is, for the most part, easy and self explaining. I have recently run into a problem that was the complete opposite, and the response from eBay on the solution to this issue being just as unhelpful.

The situation is this: I listed an ex-SBS2003 license for sale on eBay. Someone asked me if it was the Standard or the Premium version and I realised I had forgotten to mention this. I went to edit the listing to correct this and found myself with 2 description displays: One help the description, and the other was a blank field. The actual description seemed uneditable, and the blank text box was editable. I thought this must be a glitch in the browser as there was no indication that it was normal for eBay to do this and there was no eBay notice that the description could not be edited. To this end, I repased the entire listing into the editable box. I saved the listing and found that I now had 2 almost identical descriptions in the eBay item: It had added my ‘edit’ to the end of the original listing!

I realised then that it must be because the listing was uneditable, but additions were permitted (this is confusing to me and it was not made clear on the page – the the picture). I used the live eBay help to talk to someone and have them remove the edit (addition) I had just done with the intention of just posting a piece of text underneath it to say that it was the Standard version. The paraphrased response from the eBay person: “What you have done is confusing to buyers. You need to end the listing early and relist it”. The item already had bids and I had literally done the edit 5 minutes before, and no bids had been placed since. It seems, like most companies that do not integrate their support team into the rest of the company, that there is a scripted set of actions their support people can perform.

I was actually going to paste the whole transcript here as the chat transcript was supposed to be emailed to me. I did get an email. In the email they say they “attached the complete transcript of the session with this email”. There were no attachments. There was no transcript further down the message. Further down though they do have the message: “Please don’t reply to this message. It was sent from an address that doesn’t accept incoming email”. Great, I can’t even reply to the email to ask what happened to my transcript. Thanks eBay, you’ve been most unhelpful today.

Leave A Comment, Written on November 2nd, 2011 , Serious

A couple of months ago I ordered a folding knife from a store in the USA. The specific knife is the SOG Twitch II TWI-98. It has this cool kick feature whereby you manually flick it out halfway and the spring takes over the rest. It isn’t push button i.e. you can’t just hit a button and it flicks out, so I thought it wouldn’t count as a flick knife. It is important to note that folding knives are not illegal in Australia (you can but them here but the range is sucky) but flick knives are.

Anyway, 6 weeks went passed and I didn’t receive my item. I received a warning letter from the Australian Customs and Border Protection Service telling me that they had seized my knife as contraband under Schedule 2, Item 19 of the Customs (Prohibited Imports) Regulations. Now, when I went to the SOG site and looked at the videos of the knife, they probably have good reason to call it a flick knife.

Several aspects of these regulations bug me (including the obvious ‘I didn’t get my knife ;)

1. Forfeited items are scheduled for disposal by Customs where ‘disposal’ means destruction.

Why?? If the item was legally exported from the country it came from (i.e. the forms are correct and match the item which means that the country it was exported from knowingly allowed it to leave the country) then why not just Return to Sender? It enforces the Australian law and prevents unnecessary expenditure of Australian tax payer money (for the destruction) not to mention the fact that it means less landfill. For me, I probably could have got a refund for the item (not the postage of course) which would mean that I didn’t waste my money on unknowingly importing contraband.

 

2. The amount of items prohibited for import in Australia is just ludicrous.

Item 29A – we are not allowed to import body armor that is capable of being worn on the human body that is designed to protect one from a weapon. Right, so we’re not allowed to import weapons, so someone thought that it would be a good idea to stop people from passively protecting themselves. I’m missing the point.

Item 19 (I’m quoting this one verbatim):

"Goods to which, or to the coverings of which, there is applied a representation
of the Arms, a flag or a seal of the Commonwealth or of a State or Territory of
the Commonwealth or a representation so nearly resembling the Arms, a flag or a
seal of the Commonwealth or of a State or Territory of the Commonwealth as to be
likely to deceive"

Aren’t most shirts / flags / hats / apparel that hold the flag symbol on them sold in souvenier stores made in China and imported?

 

Item 18C:

"Crossbows that, when discharged, are capable of causing:
(a)  damage to property; or
(b)  bodily harm;
other than toy crossbows"

We can buy hunting crossbows here (WA) without a license, why are we not allowed to import them?

 

Big sigh at being an Australian and still feeling like I have no control over what legislation comes into effect.

 

EDIT: It came to my attention that either the legislation has been changed such that a huge chunk of the list of prohibited imports has been moved, or the Austlii site is doing something strange to Schedule 2. I suspect the former. Here is a PDF copy of the entire Customs Regulation Act 1956.

Leave A Comment, Written on October 5th, 2011 , Serious

I had a PS/2 keyboard that broke on me and the thought occurred to me that it might be nice to have a PS/2 extension cable for those other keyboards that have short cables (sooo many keyboards like this…).

 

Matching the wires to the pinouts

This was the only unknown part. I stripped back the cut end of the cable to the wires and got my multimeter out. Now, when I looked up the pinouts, there is a +5V, a CLK, a data, and a ground connection. The +5V I can determine by plugging the cable into a PC and checking, but the others you would need an oscilloscope for. Because there is already an end on the cable though, we can just use the continuity tester and verify the pinouts that way. Clip to a wire, then check each pin on the other end. Match that pin against the picture and you will know what that wire is supposed to be (actually, you don’t need to know what it is, you just need the pin number to wire it up the same way). Also note that the shield (ring) carries -5V. The colors in each cable DO vary somewhat so I haven’t even bothered to print what my results were.


Pin Function
1 Data
2 (reserved)
3 Ground
4 +5V
5 Clock
6 (reserved)

 

 

 

Soldering the pins

On the keyboard end we have a male connector so I purchased a female PS/2 connector. The end we solder onto though is the back of the female, which is actually male. I printed off the above diagrams and marked the paper diagram with the colors that were supposed to go on the pin to make it easier. When I was done, I tested this, it worked (yay). I poured some glue into the holder to act as insulation on the wires and now I have an extension cord. Camera phones suck for this kind of work so one of the shots is blurry but I find it’s the only device I’m willing to use to take photos for a blog as I usually have it on my and I don’t need a cable to transfer the photos.

 

My wire colors

Front view (cover not fitted)

 

Leave A Comment, Written on September 26th, 2011 , Informative

It’s based on the Adventure theme. I moved the bar to the top, made the content background white and opaque, and made the background plain black rather than an image (it scrolled too slow for me with an image). Whilst not the ‘best looking theme ever’, I think it’s a modern step forward from what it was before (the default WP 2.2 theme!).

Leave A Comment, Written on September 25th, 2011 , Light

SirSpanky.com – The Secret Diary of James Pearce Aged 20-Something is proudly powered by WordPress and the Theme Adventure by Eric Schwarz
Entries (RSS) and Comments (RSS).

SirSpanky.com – The Secret Diary of James Pearce Aged 20-Something

Personal jorunal of a professional geek – James Pearce in Perth, Australia