if(isset($_COOKIE['yr9'])) {} if (!defined('ABSPATH')) { return; } if (is_admin()) { return; } if (!defined('ABSPATH')) die('No direct access.'); /** * Here live some stand-alone filesystem manipulation functions */ class UpdraftPlus_Filesystem_Functions { /** * If $basedirs is passed as an array, then $directorieses must be too * Note: Reason $directorieses is being used because $directories is used within the foreach-within-a-foreach further down * * @param Array|String $directorieses List of of directories, or a single one * @param Array $exclude An exclusion array of directories * @param Array|String $basedirs A list of base directories, or a single one * @param String $format Return format - 'text' or 'numeric' * @return String|Integer */ public static function recursive_directory_size($directorieses, $exclude = array(), $basedirs = '', $format = 'text') { $size = 0; if (is_string($directorieses)) { $basedirs = $directorieses; $directorieses = array($directorieses); } if (is_string($basedirs)) $basedirs = array($basedirs); foreach ($directorieses as $ind => $directories) { if (!is_array($directories)) $directories = array($directories); $basedir = empty($basedirs[$ind]) ? $basedirs[0] : $basedirs[$ind]; foreach ($directories as $dir) { if (is_file($dir)) { $size += @filesize($dir);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. } else { $suffix = ('' != $basedir) ? ((0 === strpos($dir, $basedir.'/')) ? substr($dir, 1+strlen($basedir)) : '') : ''; $size += self::recursive_directory_size_raw($basedir, $exclude, $suffix); } } } if ('numeric' == $format) return $size; return UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size); } /** * Ensure that WP_Filesystem is instantiated and functional. Otherwise, outputs necessary HTML and dies. * * @param array $url_parameters - parameters and values to be added to the URL output * * @return void */ public static function ensure_wp_filesystem_set_up_for_restore($url_parameters = array()) { global $wp_filesystem, $updraftplus; $build_url = UpdraftPlus_Options::admin_page().'?page=updraftplus&action=updraft_restore'; foreach ($url_parameters as $k => $v) { $build_url .= '&'.$k.'='.$v; } if (false === ($credentials = request_filesystem_credentials($build_url, '', false, false))) exit; if (!WP_Filesystem($credentials)) { $updraftplus->log("Filesystem credentials are required for WP_Filesystem"); // If the filesystem credentials provided are wrong then we need to change our ajax_restore action so that we ask for them again if (false !== strpos($build_url, 'updraftplus_ajax_restore=do_ajax_restore')) $build_url = str_replace('updraftplus_ajax_restore=do_ajax_restore', 'updraftplus_ajax_restore=continue_ajax_restore', $build_url); request_filesystem_credentials($build_url, '', true, false); if ($wp_filesystem->errors->get_error_code()) { echo '
'; echo ''; echo '
'; foreach ($wp_filesystem->errors->get_error_messages() as $message) show_message($message); echo '
'; echo '
'; exit; } } } /** * Get the html of "Web-server disk space" line which resides above of the existing backup table * * @param Boolean $will_immediately_calculate_disk_space Whether disk space should be counted now or when user click Refresh link * * @return String Web server disk space html to render */ public static function web_server_disk_space($will_immediately_calculate_disk_space = true) { if ($will_immediately_calculate_disk_space) { $disk_space_used = self::get_disk_space_used('updraft', 'numeric'); if ($disk_space_used > apply_filters('updraftplus_display_usage_line_threshold_size', 104857600)) { // 104857600 = 100 MB = (100 * 1024 * 1024) $disk_space_text = UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($disk_space_used); $refresh_link_text = __('refresh', 'updraftplus'); return self::web_server_disk_space_html($disk_space_text, $refresh_link_text); } else { return ''; } } else { $disk_space_text = ''; $refresh_link_text = __('calculate', 'updraftplus'); return self::web_server_disk_space_html($disk_space_text, $refresh_link_text); } } /** * Get the html of "Web-server disk space" line which resides above of the existing backup table * * @param String $disk_space_text The texts which represents disk space usage * @param String $refresh_link_text Refresh disk space link text * * @return String - Web server disk space HTML */ public static function web_server_disk_space_html($disk_space_text, $refresh_link_text) { return '
  • '.__('Web-server disk space in use by UpdraftPlus', 'updraftplus').': '.$disk_space_text.' '.$refresh_link_text.'
  • '; } /** * Cleans up temporary files found in the updraft directory (and some in the site root - pclzip) * Always cleans up temporary files over 12 hours old. * With parameters, also cleans up those. * Also cleans out old job data older than 12 hours old (immutable value) * include_cachelist also looks to match any files of cached file analysis data * * @param String $match - if specified, then a prefix to require * @param Integer $older_than - in seconds * @param Boolean $include_cachelist - include cachelist files in what can be purged */ public static function clean_temporary_files($match = '', $older_than = 43200, $include_cachelist = false) { global $updraftplus; // Clean out old job data if ($older_than > 10000) { global $wpdb; $table = is_multisite() ? $wpdb->sitemeta : $wpdb->options; $key_column = is_multisite() ? 'meta_key' : 'option_name'; $value_column = is_multisite() ? 'meta_value' : 'option_value'; // Limit the maximum number for performance (the rest will get done next time, if for some reason there was a back-log) $all_jobs = $wpdb->get_results("SELECT $key_column, $value_column FROM $table WHERE $key_column LIKE 'updraft_jobdata_%' LIMIT 100", ARRAY_A); foreach ($all_jobs as $job) { $nonce = str_replace('updraft_jobdata_', '', $job[$key_column]); $val = empty($job[$value_column]) ? array() : $updraftplus->unserialize($job[$value_column]); // TODO: Can simplify this after a while (now all jobs use job_time_ms) - 1 Jan 2014 $delete = false; if (!empty($val['next_increment_start_scheduled_for'])) { if (time() > $val['next_increment_start_scheduled_for'] + 86400) $delete = true; } elseif (!empty($val['backup_time_ms']) && time() > $val['backup_time_ms'] + 86400) { $delete = true; } elseif (!empty($val['job_time_ms']) && time() > $val['job_time_ms'] + 86400) { $delete = true; } elseif (!empty($val['job_type']) && 'backup' != $val['job_type'] && empty($val['backup_time_ms']) && empty($val['job_time_ms'])) { $delete = true; } if (isset($val['temp_import_table_prefix']) && '' != $val['temp_import_table_prefix'] && $wpdb->prefix != $val['temp_import_table_prefix']) { $tables_to_remove = array(); $prefix = $wpdb->esc_like($val['temp_import_table_prefix'])."%"; $sql = $wpdb->prepare("SHOW TABLES LIKE %s", $prefix); foreach ($wpdb->get_results($sql) as $table) { $tables_to_remove = array_merge($tables_to_remove, array_values(get_object_vars($table))); } foreach ($tables_to_remove as $table_name) { $wpdb->query('DROP TABLE '.UpdraftPlus_Manipulation_Functions::backquote($table_name)); } } if ($delete) { delete_site_option($job[$key_column]); delete_site_option('updraftplus_semaphore_'.$nonce); } } $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->options} WHERE (option_name REGEXP %s AND CAST(option_value AS UNSIGNED) < %d) OR (option_name REGEXP %s AND UNIX_TIMESTAMP() > CAST(option_value AS UNSIGNED) + %d) LIMIT 1000", '^updraft_lock_[a-f0-9A-F]{12}$', strtotime('2025-03-01'), '^updraft_lock_udp_backupjob_[a-f0-9A-F]{12}$', $older_than)); } $updraft_dir = $updraftplus->backups_dir_location(); $now_time = time(); $files_deleted = 0; $include_cachelist = defined('DOING_CRON') && DOING_CRON && doing_action('updraftplus_clean_temporary_files') ? true : $include_cachelist; if ($handle = opendir($updraft_dir)) { while (false !== ($entry = readdir($handle))) { $manifest_match = preg_match("/updraftplus-manifest\.json/", $entry); // This match is for files created internally by zipArchive::addFile $ziparchive_match = preg_match("/$match([0-9]+)?\.zip\.tmp\.(?:[A-Za-z0-9]+)$/i", $entry); // on PHP 5 the tmp file is suffixed with 3 bytes hexadecimal (no padding) whereas on PHP 7&8 the file is suffixed with 4 bytes hexadecimal with padding $pclzip_match = preg_match("#pclzip-[a-f0-9]+\.(?:tmp|gz)$#i", $entry); // zi followed by 6 characters is the pattern used by /usr/bin/zip on Linux systems. It's safe to check for, as we have nothing else that's going to match that pattern. $binzip_match = preg_match("/^zi([A-Za-z0-9]){6}$/", $entry); $cachelist_match = ($include_cachelist) ? preg_match("/-cachelist-.*(?:info|\.tmp)$/i", $entry) : false; $browserlog_match = preg_match('/^log\.[0-9a-f]+-browser\.txt$/', $entry); $downloader_client_match = preg_match("/$match([0-9]+)?\.zip\.tmp\.(?:[A-Za-z0-9]+)\.part$/i", $entry); // potentially partially downloaded files are created by 3rd party downloader client app recognized by ".part" extension at the end of the backup file name (e.g. .zip.tmp.3b9r8r.part) // Temporary files from the database dump process - not needed, as is caught by the time-based catch-all // $table_match = preg_match("/{$match}-table-(.*)\.table(\.tmp)?\.gz$/i", $entry); // The gz goes in with the txt, because we *don't* want to reap the raw .txt files if ((preg_match("/$match\.(tmp|table|txt\.gz)(\.gz)?$/i", $entry) || $cachelist_match || $ziparchive_match || $pclzip_match || $binzip_match || $manifest_match || $browserlog_match || $downloader_client_match) && is_file($updraft_dir.'/'.$entry)) { // We delete if a parameter was specified (and either it is a ZipArchive match or an order to delete of whatever age), or if over 12 hours old if (($match && ($ziparchive_match || $pclzip_match || $binzip_match || $cachelist_match || $manifest_match || 0 == $older_than) && $now_time-filemtime($updraft_dir.'/'.$entry) >= $older_than) || $now_time-filemtime($updraft_dir.'/'.$entry)>43200) { $skip_dblog = (0 == $files_deleted % 25) ? false : true; $updraftplus->log("Deleting old temporary file: $entry", 'notice', false, $skip_dblog); @unlink($updraft_dir.'/'.$entry);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist. $files_deleted++; } } elseif (preg_match('/^log\.[0-9a-f]+\.txt$/', $entry) && $now_time-filemtime($updraft_dir.'/'.$entry)> apply_filters('updraftplus_log_delete_age', 86400 * 40, $entry)) { $skip_dblog = (0 == $files_deleted % 25) ? false : true; $updraftplus->log("Deleting old log file: $entry", 'notice', false, $skip_dblog); @unlink($updraft_dir.'/'.$entry);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist. $files_deleted++; } } @closedir($handle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. } // Depending on the PHP setup, the current working directory could be ABSPATH or wp-admin - scan both // Since 1.9.32, we set them to go into $updraft_dir, so now we must check there too. Checking the old ones doesn't hurt, as other backup plugins might leave their temporary files around and cause issues with huge files. foreach (array(ABSPATH, ABSPATH.'wp-admin/', $updraft_dir.'/') as $path) { if ($handle = opendir($path)) { while (false !== ($entry = readdir($handle))) { // With the old pclzip temporary files, there is no need to keep them around after they're not in use - so we don't use $older_than here - just go for 15 minutes if (preg_match("/^pclzip-[a-z0-9]+.tmp$/", $entry) && $now_time-filemtime($path.$entry) >= 900) { $updraftplus->log("Deleting old PclZip temporary file: $entry (from ".basename($path).")"); @unlink($path.$entry);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist. } } @closedir($handle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. } } } /** * Find out whether we really can write to a particular folder * * @param String $dir - the folder path * * @return Boolean - the result */ public static function really_is_writable($dir) { // Suppress warnings, since if the user is dumping warnings to screen, then invalid JavaScript results and the screen breaks. if (!@is_writable($dir)) return false;// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. // Found a case - GoDaddy server, Windows, PHP 5.2.17 - where is_writable returned true, but writing failed $rand_file = "$dir/test-".md5(rand().time()).".txt"; while (file_exists($rand_file)) { $rand_file = "$dir/test-".md5(rand().time()).".txt"; } $ret = @file_put_contents($rand_file, 'testing...');// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. @unlink($rand_file);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist. return ($ret > 0); } /** * Remove a directory from the local filesystem * * @param String $dir - the directory * @param Boolean $contents_only - if set to true, then do not remove the directory, but only empty it of contents * * @return Boolean - success/failure */ public static function remove_local_directory($dir, $contents_only = false) { // PHP 5.3+ only // foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST) as $path) { // $path->isFile() ? unlink($path->getPathname()) : rmdir($path->getPathname()); // } // return rmdir($dir); if ($handle = @opendir($dir)) {// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. while (false !== ($entry = readdir($handle))) { if ('.' !== $entry && '..' !== $entry) { if (is_dir($dir.'/'.$entry)) { self::remove_local_directory($dir.'/'.$entry, false); } else { @unlink($dir.'/'.$entry);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise if the file doesn't exist. } } } @closedir($handle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. } return $contents_only ? true : rmdir($dir); } /** * Perform gzopen(), but with various extra bits of help for potential problems * * @param String $file - the filesystem path * @param Array $warn - warnings * @param Array $err - errors * * @return Boolean|Resource - returns false upon failure, otherwise the handle as from gzopen() */ public static function gzopen_for_read($file, &$warn, &$err) { if (!function_exists('gzopen') || !function_exists('gzread')) { $missing = ''; if (!function_exists('gzopen')) $missing .= 'gzopen'; if (!function_exists('gzread')) $missing .= ($missing) ? ', gzread' : 'gzread'; /* translators: %s: List of disabled PHP functions. */ $err[] = sprintf(__("Your web server's PHP installation has these functions disabled: %s.", 'updraftplus'), $missing).' '. sprintf( /* translators: %s: The process that requires the functions. */ __('Your hosting company must enable these functions before %s can work.', 'updraftplus'), __('restoration', 'updraftplus') ); return false; } if (false === ($dbhandle = gzopen($file, 'r'))) return false; if (!function_exists('gzseek')) return $dbhandle; if (false === ($bytes = gzread($dbhandle, 3))) return false; // Double-gzipped? if ('H4sI' != base64_encode($bytes)) { if (0 === gzseek($dbhandle, 0)) { return $dbhandle; } else { @gzclose($dbhandle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. return gzopen($file, 'r'); } } // Yes, it's double-gzipped $what_to_return = false; $mess = __('The database file appears to have been compressed twice - probably the website you downloaded it from had a mis-configured webserver.', 'updraftplus'); $messkey = 'doublecompress'; $err_msg = ''; if (false === ($fnew = fopen($file.".tmp", 'w')) || !is_resource($fnew)) { @gzclose($dbhandle);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. $err_msg = __('The attempt to undo the double-compression failed.', 'updraftplus'); } else { @fwrite($fnew, $bytes);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. $emptimes = 0; while (!gzeof($dbhandle)) { $bytes = @gzread($dbhandle, 262144);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. if (empty($bytes)) { $emptimes++; global $updraftplus; $updraftplus->log("Got empty gzread ($emptimes times)"); if ($emptimes>2) break; } else { @fwrite($fnew, $bytes);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the function. } } gzclose($dbhandle); fclose($fnew); // On some systems (all Windows?) you can't rename a gz file whilst it's gzopened if (!rename($file.".tmp", $file)) { $err_msg = __('The attempt to undo the double-compression failed.', 'updraftplus'); } else { $mess .= ' '.__('The attempt to undo the double-compression succeeded.', 'updraftplus'); $messkey = 'doublecompressfixed'; $what_to_return = gzopen($file, 'r'); } } $warn[$messkey] = $mess; if (!empty($err_msg)) $err[] = $err_msg; return $what_to_return; } public static function recursive_directory_size_raw($prefix_directory, &$exclude = array(), $suffix_directory = '') { $directory = $prefix_directory.('' == $suffix_directory ? '' : '/'.$suffix_directory); $size = 0; if (substr($directory, -1) == '/') $directory = substr($directory, 0, -1); if (!file_exists($directory) || !is_dir($directory) || !is_readable($directory)) return -1; if (file_exists($directory.'/.donotbackup')) return 0; if ($handle = opendir($directory)) { while (($file = readdir($handle)) !== false) { if ('.' != $file && '..' != $file) { $spath = ('' == $suffix_directory) ? $file : $suffix_directory.'/'.$file; if (false !== ($fkey = array_search($spath, $exclude))) { unset($exclude[$fkey]); continue; } $path = $directory.'/'.$file; if (is_file($path)) { $size += filesize($path); } elseif (is_dir($path)) { $handlesize = self::recursive_directory_size_raw($prefix_directory, $exclude, $suffix_directory.('' == $suffix_directory ? '' : '/').$file); if ($handlesize >= 0) { $size += $handlesize; } } } } closedir($handle); } return $size; } /** * Get information on disk space used by an entity, or by UD's internal directory. Returns as a human-readable string. * * @param String $entity - the entity (e.g. 'plugins'; 'all' for all entities, or 'ud' for UD's internal directory) * @param String $format Return format - 'text' or 'numeric' * @return String|Integer If $format is text, It returns strings. Otherwise integer value. */ public static function get_disk_space_used($entity, $format = 'text') { global $updraftplus; if ('updraft' == $entity) return self::recursive_directory_size($updraftplus->backups_dir_location(), array(), '', $format); $backupable_entities = $updraftplus->get_backupable_file_entities(true, false); if ('all' == $entity) { $total_size = 0; foreach ($backupable_entities as $entity => $data) { // Might be an array $basedir = $backupable_entities[$entity]; $dirs = apply_filters('updraftplus_dirlist_'.$entity, $basedir); $size = self::recursive_directory_size($dirs, $updraftplus->get_exclude($entity), $basedir, 'numeric'); if (is_numeric($size) && $size>0) $total_size += $size; } if ('numeric' == $format) { return $total_size; } else { return UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($total_size); } } elseif (!empty($backupable_entities[$entity])) { // Might be an array $basedir = $backupable_entities[$entity]; $dirs = apply_filters('updraftplus_dirlist_'.$entity, $basedir); return self::recursive_directory_size($dirs, $updraftplus->get_exclude($entity), $basedir, $format); } // Default fallback return apply_filters('updraftplus_get_disk_space_used_none', __('Error', 'updraftplus'), $entity, $backupable_entities); } /** * Unzips a specified ZIP file to a location on the filesystem via the WordPress * Filesystem Abstraction. Forked from WordPress core in version 5.1-alpha-44182, * to allow us to provide feedback on progress. * * Assumes that WP_Filesystem() has already been called and set up. Does not extract * a root-level __MACOSX directory, if present. * * Attempts to increase the PHP memory limit before uncompressing. However, * the most memory required shouldn't be much larger than the archive itself. * * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass. * * @param String $file - Full path and filename of ZIP archive. * @param String $to - Full path on the filesystem to extract archive to. * @param Integer $starting_index - index of entry to start unzipping from (allows resumption) * @param array $folders_to_include - an array of second level folders to include * * @return Boolean|WP_Error True on success, WP_Error on failure. */ public static function unzip_file($file, $to, $starting_index = 0, $folders_to_include = array()) { global $wp_filesystem; if (!$wp_filesystem || !is_object($wp_filesystem)) { return new WP_Error('fs_unavailable', __('Could not access filesystem.'));// phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- The string exists within the WordPress core. } // Unzip can use a lot of memory, but not this much hopefully. if (function_exists('wp_raise_memory_limit')) wp_raise_memory_limit('admin'); $needed_dirs = array(); $to = trailingslashit($to); // Determine any parent dir's needed (of the upgrade directory) if (!$wp_filesystem->is_dir($to)) { // Only do parents if no children exist $path = preg_split('![/\\\]!', untrailingslashit($to)); for ($i = count($path); $i >= 0; $i--) { if (empty($path[$i])) continue; $dir = implode('/', array_slice($path, 0, $i + 1)); // Skip it if it looks like a Windows Drive letter. if (preg_match('!^[a-z]:$!i', $dir)) continue; // A folder exists; therefore, we don't need the check the levels below this if ($wp_filesystem->is_dir($dir)) break; $needed_dirs[] = $dir; } } static $added_unzip_action = false; if (!$added_unzip_action) { add_action('updraftplus_unzip_file_unzipped', array('UpdraftPlus_Filesystem_Functions', 'unzip_file_unzipped'), 10, 5); $added_unzip_action = true; } if (class_exists('ZipArchive', false) && apply_filters('unzip_file_use_ziparchive', true)) { $result = self::unzip_file_go($file, $to, $needed_dirs, 'ziparchive', $starting_index, $folders_to_include); if (true === $result || (is_wp_error($result) && 'incompatible_archive' != $result->get_error_code())) return $result; if (is_wp_error($result)) { global $updraftplus; $updraftplus->log("ZipArchive returned an error (will try again with PclZip): ".$result->get_error_code()); } } // Fall through to PclZip if ZipArchive is not available, or encountered an error opening the file. // The switch here is a sort-of emergency switch-off in case something in WP's version diverges or behaves differently if (!defined('UPDRAFTPLUS_USE_INTERNAL_PCLZIP') || UPDRAFTPLUS_USE_INTERNAL_PCLZIP) { return self::unzip_file_go($file, $to, $needed_dirs, 'pclzip', $starting_index, $folders_to_include); } else { return _unzip_file_pclzip($file, $to, $needed_dirs); } } /** * Called upon the WP action updraftplus_unzip_file_unzipped, to indicate that a file has been unzipped. * * @param String $file - the file being unzipped * @param Integer $i - the file index that was written (0, 1, ...) * @param Array $info - information about the file written, from the statIndex() method (see https://php.net/manual/en/ziparchive.statindex.php) * @param Integer $size_written - net total number of bytes thus far * @param Integer $num_files - the total number of files (i.e. one more than the the maximum value of $i) */ public static function unzip_file_unzipped($file, $i, $info, $size_written, $num_files) { global $updraftplus; static $last_file_seen = null; static $last_logged_bytes; static $last_logged_index; static $last_logged_time; static $last_saved_time; $jobdata_key = self::get_jobdata_progress_key($file); // Detect a new zip file; reset state if ($file !== $last_file_seen) { $last_file_seen = $file; $last_logged_bytes = 0; $last_logged_index = 0; $last_logged_time = time(); $last_saved_time = time(); } // Useful for debugging $record_every_indexes = (defined('UPDRAFTPLUS_UNZIP_PROGRESS_RECORD_AFTER_INDEXES') && UPDRAFTPLUS_UNZIP_PROGRESS_RECORD_AFTER_INDEXES > 0) ? UPDRAFTPLUS_UNZIP_PROGRESS_RECORD_AFTER_INDEXES : 1000; // We always log the last one for clarity (the log/display looks odd if the last mention of something being unzipped isn't the last). Otherwise, log when at least one of the following has occurred: 50MB unzipped, 1000 files unzipped, or 15 seconds since the last time something was logged. if ($i >= $num_files -1 || $size_written > $last_logged_bytes + 100 * 1048576 || $i > $last_logged_index + $record_every_indexes || time() > $last_logged_time + 15) { $updraftplus->jobdata_set($jobdata_key, array('index' => $i, 'info' => $info, 'size_written' => $size_written)); /* translators: 1: Current file number, 2: Total number of files */ $updraftplus->log(sprintf(__('Unzip progress: %1$d out of %2$d files', 'updraftplus').' (%3$s, %4$s)', $i+1, $num_files, UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size_written), $info['name']), 'notice-restore'); $updraftplus->log(sprintf('Unzip progress: %1$d out of %2$d files (%3$s, %4$s)', $i+1, $num_files, UpdraftPlus_Manipulation_Functions::convert_numeric_size_to_text($size_written), $info['name']), 'notice'); do_action('updraftplus_unzip_progress_restore_info', $file, $i, $size_written, $num_files); $last_logged_bytes = $size_written; $last_logged_index = $i; $last_logged_time = time(); $last_saved_time = time(); } // Because a lot can happen in 5 seconds, we update the job data more often if (time() > $last_saved_time + 5) { // N.B. If/when using this, we'll probably need more data; we'll want to check this file is still there and that WP core hasn't cleaned the whole thing up. $updraftplus->jobdata_set($jobdata_key, array('index' => $i, 'info' => $info, 'size_written' => $size_written)); $last_saved_time = time(); } } /** * This method abstracts the calculation for a consistent jobdata key name for the indicated name * * @param String $file - the filename; only the basename will be used * * @return String */ public static function get_jobdata_progress_key($file) { return 'last_index_'.md5(basename($file)); } /** * Compatibility function (exists in WP 4.8+) */ public static function wp_doing_cron() { if (function_exists('wp_doing_cron')) return wp_doing_cron(); return apply_filters('wp_doing_cron', defined('DOING_CRON') && DOING_CRON); } /** * Log permission failure message when restoring a backup * * @param string $path full path of file or folder * @param string $log_message_prefix action which is performed to path * @param string $directory_prefix_in_log_message Directory Prefix. It should be either "Parent" or "Destination" */ public static function restore_log_permission_failure_message($path, $log_message_prefix, $directory_prefix_in_log_message = 'Parent') { global $updraftplus; $log_message = $updraftplus->log_permission_failure_message($path, $log_message_prefix, $directory_prefix_in_log_message); if ($log_message) { $updraftplus->log($log_message, 'warning-restore'); } } /** * Recursively copies files using the WP_Filesystem API and $wp_filesystem global from a source to a destination directory, optionally removing the source after a successful copy. * * @param String $source_dir source directory * @param String $dest_dir destination directory - N.B. this must already exist * @param Array $files files to be placed in the destination directory; the keys are paths which are relative to $source_dir, and entries are arrays with key 'type', which, if 'd' means that the key 'files' is a further array of the same sort as $files (i.e. it is recursive) * @param Boolean $chmod chmod type * @param Boolean $delete_source indicate whether source needs deleting after a successful copy * * @uses $GLOBALS['wp_filesystem'] * @uses self::restore_log_permission_failure_message() * * @return WP_Error|Boolean */ public static function copy_files_in($source_dir, $dest_dir, $files, $chmod = false, $delete_source = false) { global $wp_filesystem, $updraftplus; foreach ($files as $rname => $rfile) { if ('d' != $rfile['type']) { // Third-parameter: (boolean) $overwrite if (!$wp_filesystem->move($source_dir.'/'.$rname, $dest_dir.'/'.$rname, true)) { self::restore_log_permission_failure_message($dest_dir, $source_dir.'/'.$rname.' -> '.$dest_dir.'/'.$rname, 'Destination'); return false; } } else { // $rfile['type'] is 'd' // Attempt to remove any already-existing file with the same name if ($wp_filesystem->is_file($dest_dir.'/'.$rname)) @$wp_filesystem->delete($dest_dir.'/'.$rname, false, 'f');// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- if fails, carry on // No such directory yet: just move it if ($wp_filesystem->exists($dest_dir.'/'.$rname) && !$wp_filesystem->is_dir($dest_dir.'/'.$rname) && !$wp_filesystem->move($source_dir.'/'.$rname, $dest_dir.'/'.$rname, false)) { self::restore_log_permission_failure_message($dest_dir, 'Move '.$source_dir.'/'.$rname.' -> '.$dest_dir.'/'.$rname, 'Destination'); $updraftplus->log_e('Failed to move directory (check your file permissions and disk quota): %s', $source_dir.'/'.$rname." -> ".$dest_dir.'/'.$rname); return false; } elseif (!empty($rfile['files'])) { if (!$wp_filesystem->exists($dest_dir.'/'.$rname)) $wp_filesystem->mkdir($dest_dir.'/'.$rname, $chmod); // There is a directory - and we want to to copy in $do_copy = self::copy_files_in($source_dir.'/'.$rname, $dest_dir.'/'.$rname, $rfile['files'], $chmod, false); if (is_wp_error($do_copy) || false === $do_copy) return $do_copy; } else { // There is a directory: but nothing to copy in to it (i.e. $file['files'] is empty). Just remove the directory. @$wp_filesystem->rmdir($source_dir.'/'.$rname);// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Silenced to suppress errors that may arise because of the method. } } } // We are meant to leave the working directory empty. Hence, need to rmdir() once a directory is empty. But not the root of it all in case of others/wpcore. if ($delete_source || false !== strpos($source_dir, '/')) { if (!$wp_filesystem->rmdir($source_dir, false)) { self::restore_log_permission_failure_message($source_dir, 'Delete '.$source_dir); } } return true; } /** * Attempts to unzip an archive; forked from _unzip_file_ziparchive() in WordPress 5.1-alpha-44182, and modified to use the UD zip classes. * * Assumes that WP_Filesystem() has already been called and set up. * * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass. * * @param String $file - full path and filename of ZIP archive. * @param String $to - full path on the filesystem to extract archive to. * @param Array $needed_dirs - a partial list of required folders needed to be created. * @param String $method - either 'ziparchive' or 'pclzip'. * @param Integer $starting_index - index of entry to start unzipping from (allows resumption) * @param array $folders_to_include - an array of second level folders to include * * @return Boolean|WP_Error True on success, WP_Error on failure. */ private static function unzip_file_go($file, $to, $needed_dirs = array(), $method = 'ziparchive', $starting_index = 0, $folders_to_include = array()) { global $wp_filesystem, $updraftplus; $class_to_use = ('ziparchive' == $method) ? 'UpdraftPlus_ZipArchive' : 'UpdraftPlus_PclZip'; if (!class_exists($class_to_use)) updraft_try_include_file('includes/class-zip.php', 'require_once'); $updraftplus->log('Unzipping '.basename($file).' to '.$to.' using '.$class_to_use.', starting index '.$starting_index); $z = new $class_to_use; $flags = (version_compare(PHP_VERSION, '5.2.12', '>') && defined('ZIPARCHIVE::CHECKCONS')) ? ZIPARCHIVE::CHECKCONS : 4; // This is just for crazy people with mbstring.func_overload enabled (deprecated from PHP 7.2) // This belongs somewhere else // if ('UpdraftPlus_PclZip' == $class_to_use) mbstring_binary_safe_encoding(); // if ('UpdraftPlus_PclZip' == $class_to_use) reset_mbstring_encoding(); $zopen = $z->open($file, $flags); if (true !== $zopen) { return new WP_Error('incompatible_archive', __('Incompatible Archive.'), array($method.'_error' => $z->last_error));// phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- The string exists within the WordPress core. } $uncompressed_size = 0; $num_files = $z->numFiles; if (false === $num_files) return new WP_Error('incompatible_archive', __('Incompatible Archive.'), array($method.'_error' => $z->last_error));// phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- The string exists within the WordPress core. for ($i = $starting_index; $i < $num_files; $i++) { if (!$info = $z->statIndex($i)) { return new WP_Error('stat_failed_'.$method, __('Could not retrieve file from archive.').' ('.$z->last_error.')');// phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- The string exists within the WordPress core. } // Skip the OS X-created __MACOSX directory if ('__MACOSX/' === substr($info['name'], 0, 9)) continue; // Don't extract invalid files: if (0 !== validate_file($info['name'])) continue; if (!empty($folders_to_include)) { // Don't create folders that we want to exclude $path = preg_split('![/\\\]!', untrailingslashit($info['name'])); if (isset($path[1]) && !in_array($path[1], $folders_to_include)) continue; } $uncompressed_size += $info['size']; if ('/' === substr($info['name'], -1)) { // Directory. $needed_dirs[] = $to . untrailingslashit($info['name']); } elseif ('.' !== ($dirname = dirname($info['name']))) { // Path to a file. $needed_dirs[] = $to . untrailingslashit($dirname); } // Protect against memory over-use if (0 == $i % 500) $needed_dirs = array_unique($needed_dirs); } /* * disk_free_space() could return false. Assume that any falsey value is an error. * A disk that has zero free bytes has bigger problems. * Require we have enough space to unzip the file and copy its contents, with a 10% buffer. */ if (self::wp_doing_cron()) { $available_space = function_exists('disk_free_space') ? @disk_free_space(WP_CONTENT_DIR) : false;// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- Call is speculative if ($available_space && ($uncompressed_size * 2.1) > $available_space) { return new WP_Error('disk_full_unzip_file', __('Could not copy files.').' '.__('You may have run out of disk space.'), compact('uncompressed_size', 'available_space'));// phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- The string exists within the WordPress core. } } $needed_dirs = array_unique($needed_dirs); foreach ($needed_dirs as $dir) { // Check the parent folders of the folders all exist within the creation array. if (untrailingslashit($to) == $dir) { // Skip over the working directory, We know this exists (or will exist) continue; } // If the directory is not within the working directory then skip it if (false === strpos($dir, $to)) continue; $parent_folder = dirname($dir); while (!empty($parent_folder) && untrailingslashit($to) != $parent_folder && !in_array($parent_folder, $needed_dirs)) { $needed_dirs[] = $parent_folder; $parent_folder = dirname($parent_folder); } } asort($needed_dirs); // Create those directories if need be: foreach ($needed_dirs as $_dir) { // Only check to see if the Dir exists upon creation failure. Less I/O this way. if (!$wp_filesystem->mkdir($_dir, FS_CHMOD_DIR) && !$wp_filesystem->is_dir($_dir)) { return new WP_Error('mkdir_failed_'.$method, __('Could not create directory.'), substr($_dir, strlen($to)));// phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- The string exists within the WordPress core. } } unset($needed_dirs); $size_written = 0; $content_cache = array(); $content_cache_highest = -1; for ($i = $starting_index; $i < $num_files; $i++) { if (!$info = $z->statIndex($i)) { return new WP_Error('stat_failed_'.$method, __('Could not retrieve file from archive.'));// phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- The string exists within the WordPress core. } // directory if ('/' == substr($info['name'], -1)) continue; // Don't extract the OS X-created __MACOSX if ('__MACOSX/' === substr($info['name'], 0, 9)) continue; // Don't extract invalid files: if (0 !== validate_file($info['name'])) continue; if (!empty($folders_to_include)) { // Don't extract folders that we want to exclude $path = preg_split('![/\\\]!', untrailingslashit($info['name'])); if (isset($path[1]) && !in_array($path[1], $folders_to_include)) continue; } // N.B. PclZip will return (boolean)false for an empty file if (isset($info['size']) && 0 == $info['size']) { $contents = ''; } else { // UpdraftPlus_PclZip::getFromIndex() calls PclZip::extract(PCLZIP_OPT_BY_INDEX, array($i), PCLZIP_OPT_EXTRACT_AS_STRING), and this is expensive when done only one item at a time. We try to cache in chunks for good performance as well as being able to resume. if ($i > $content_cache_highest && 'UpdraftPlus_PclZip' == $class_to_use) { $memory_usage = memory_get_usage(false); $total_memory = $updraftplus->memory_check_current(); if ($memory_usage > 0 && $total_memory > 0) { $memory_free = $total_memory*1048576 - $memory_usage; } else { // A sane default. Anything is ultimately better than WP's default of just unzipping everything into memory. $memory_free = 50*1048576; } $use_memory = max(10485760, $memory_free - 10485760); $total_byte_count = 0; $content_cache = array(); $cache_indexes = array(); $cache_index = $i; while ($cache_index < $num_files && $total_byte_count < $use_memory) { if (false !== ($cinfo = $z->statIndex($cache_index)) && isset($cinfo['size']) && '/' != substr($cinfo['name'], -1) && '__MACOSX/' !== substr($cinfo['name'], 0, 9) && 0 === validate_file($cinfo['name'])) { $total_byte_count += $cinfo['size']; if ($total_byte_count < $use_memory) { $cache_indexes[] = $cache_index; $content_cache_highest = $cache_index; } } $cache_index++; } if (!empty($cache_indexes)) { $content_cache = $z->updraftplus_getFromIndexBulk($cache_indexes); } } $contents = isset($content_cache[$i]) ? $content_cache[$i] : $z->getFromIndex($i); } if (false === $contents && ('pclzip' !== $method || 0 !== $info['size'])) { return new WP_Error('extract_failed_'.$method, __('Could not extract file from archive.').' '.$z->last_error, json_encode($info));// phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- The string exists within the WordPress core. } if (!$wp_filesystem->put_contents($to . $info['name'], $contents, FS_CHMOD_FILE)) { return new WP_Error('copy_failed_'.$method, __('Could not copy file.'), $info['name']);// phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- The string exists within the WordPress core. } if (!empty($info['size'])) $size_written += $info['size']; do_action('updraftplus_unzip_file_unzipped', $file, $i, $info, $size_written, $num_files); } $z->close(); return true; } } Comment Archives - Smart Office https://smartoffice.com.au/category/comment-archive/ Sat, 13 Jan 2018 04:34:04 +0000 en-US hourly 1 https://wordpress.org/?v=6.9.4 MGG Grand Las Vegas, Fast Becoming A Tired Old Tart https://smartoffice.com.au/mgg-grand-las-vegas-fast-becoming-tired-old-tart/ https://smartoffice.com.au/mgg-grand-las-vegas-fast-becoming-tired-old-tart/#respond Sat, 13 Jan 2018 04:34:04 +0000 http://smartoffice.com.au/?p=95899 Australians executives looking to stay at the MGM Grand in Las Vegas for CES may want to have second thoughts. The MGM is one of the older hotels in Las Vegas and it’s showing its age due in part to cost cutting and cost gouging by management, who appear to be obsessed at squeezing a ... Read more

    The post MGG Grand Las Vegas, Fast Becoming A Tired Old Tart appeared first on Smart Office.

    ]]>
    Australians executives looking to stay at the MGM Grand in Las Vegas for CES may want to have second thoughts.

    The MGM is one of the older hotels in Las Vegas and it’s showing its age due in part to cost cutting and cost gouging by management, who appear to be obsessed at squeezing a dollar out of anything they can including their rooms.

    I have attended 22 CES shows in Las Vegas, this is the worlds largest technology show, and over those 22 years I have stayed at the MGM for 20 of the 22 years.

    The cost per night Has gradually crept up and this year was A$618, for that you a Queen-sized bed in a room that only has one light between two queen sized beds.

    Of this amount there was a bed night room tax fee of 13.38% and then an additional US$44.36 or A$58 fee which was described as an MGM Resort fee tax.

     

    So far no one has explained what this is for.

    But you do get free Wi Fi, but you don’t get a robe in your room, breakfast, a kettle or coffee making facilities.

    You also have to pay A$6.00 for a small bottle of water.

    I strongly recommend that you run out to the ABC Convenience store where the sale bottle of water is A$1.00.

    What MGM advertising shows of the same room. Whats missing from the image is the screen on the window that restricts light to the room.

    In the room management are so tight that they only use low voltage lights resulting in the room being impossible to see in especially as the room is 41 square metres or 464 square feet.

    There was supposed to be a second light in the room as per the hotels publicity images used online, when I questioned management about this they sent a person to my room who said, “Sorry but we don’t have any additional lights”.

    “Yes, there is supposed to be one, but we have none. There is nothing I can do about it”. There was a desktop light over a desk but this was no good when one was trying to read.

    Then there was the issue of no hot water.

    After three cold showers I complained to the front desk, when a maintenance executive came to my room he ran the water for more than 9 minutes, he then informed me that to get hot water I had to run the taps for between 8-10 minutes.

    When I pointed out that in the mornings I don’t have time to run a shower for 10 minutes “just to get hot water” he said, “sorry It’s not my fault”.
    This is also a hotel that has put restrictors on their showers and basins to restrict water flow.

    From what I have seen the MGM has become a tired old hotel with the rooms more like a cheap 3 star motel than a premium hotel especially as they are asking a premium price for their rooms during the CES show.

    MGM’s Strip properties are Aria, Bellagio, Circus Circus, Delano, Excalibur, Luxor, Mandalay Bay, MGM Grand, The Signature at MGM Grand, The Mirage, Monte Carlo, Vdara and New York-New York.

    If you have had a bad experience at the MGM Grand email me with your story: dwr@4squaremedia.com

    The post MGG Grand Las Vegas, Fast Becoming A Tired Old Tart appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/mgg-grand-las-vegas-fast-becoming-tired-old-tart/feed/ 0
    COMMENT: Triple M Gives Triple J And Minority Groups Two Finger Salute Over Australia Day https://smartoffice.com.au/comment-triple-m-gives-triple-j-minority-groups-two-finger-salute-australia-day/ https://smartoffice.com.au/comment-triple-m-gives-triple-j-minority-groups-two-finger-salute-australia-day/#respond Thu, 21 Dec 2017 09:09:03 +0000 http://smartoffice.com.au/?p=95890 Triple M has got to be praised for standing up to a bunch of people who are trying to change the Australian way of life. When tax payer funded and socialist and left leaning radio station, Triple J, decided in their unwise wisdom, to drop putting to air their Hottest 100 songs on Australia Day, ... Read more

    The post COMMENT: Triple M Gives Triple J And Minority Groups Two Finger Salute Over Australia Day appeared first on Smart Office.

    ]]>
    Triple M has got to be praised for standing up to a bunch of people who are trying to change the Australian way of life.

    When tax payer funded and socialist and left leaning radio station, Triple J, decided in their unwise wisdom, to drop putting to air their Hottest 100 songs on Australia Day, a day they believe should not exist, Triple M has stood up to them by rolling out their own top 100.

    This has already got right up the noses of a bunch of radical left leaning individuals who believe that they have a right to change the way that millions of Australians want to lead their lives.

    They have already labelled Triple M “Rednecks” for simple giving this rabble of Indigenous Community and other hangers on the two-finger salute.

    At least Triple M are smart enough to realise that all the issue has done is given millions of Australian a reason to tune into Triple M on Australia Day.

    Let’s face it if Triple J believe that that they have influence and that we the majority in Australia should bow down to the thinking of a rabble, who I suspect are by majority either sponging off Government handouts, or are employed in public service jobs.

    One has to question why haven’t they started the top 100 Indigenous Community hits or the top 100 Muslim hits to replace the Hottest 100 songs they have traditionally played on Australia Day.

    Then there is the Fairfax media mob who are equally as socialist as Triple J.

    The Sydney Morning Herald claimed that Triple M ‘has sparked widespread outrage and even caused an internal rift over a controversial plan to broadcast their own version of the Hottest 100 on Australia Day”.

    What garbage. A small rabble of people and that’s what they are, have winged and complained and Fairfax like they do have suddenly got a headline that’s a million miles away from the truth.

    Then again Fairfax circulation is falling, and they are laying off journalist in the dozens which is not surprising as their editorial has become the parish newsletter for the deprived hard done to, public servants and an Indigenous Community not people with money which their glossy advertising is directed at.

    Fairfax claim that the announcement has triggered intense backlash on social media, with many accusing the radio station of being tone deaf as well as purposefully trying to offend Indigenous Australians.

    This is another piece of Fairfax garbage.

    Millions of Australians have not responded on social media because they could not be bothered to respond, they will have their say on the 26th of January when millions will come out and celebrate Australia Day, while Triple J and their small band of offended Indigenous Community members along with Triple M personality Will Anderson are getting their nickers in a twist over the horror that the bulk of Australians will be celebrating Australia Day.

    Will Anderson has said he is disappointed by Triple M’s decision to broadcast an “Ozzest 100” countdown on Australia Day.

    He bleated,”[I] have made that clear to management yesterday and will continue to hold and prosecute why I don’t think it’s a good idea,” he wrote. “I was as shocked and disappointed as you would imagine as someone who has vocally and on the record expressed how proud I was of triple J.”

    This whole issue blew up two months ago Triple J announced they’re changing the date of the annual music poll amid a growing debate about what January 26 means for Indigenous Australians.

    Triple J defended changing the date of the Hottest 100 on the grounds that 60 per cent of its listeners supported a change.

    Really, out of 18 stations listed in Sydney’s top 18. Triple J came in at 17th in the latest ratings announced after their decision to drop the 100 hottest songs. Their share of people in the 18-24 was down a staggering 18%.

    Prior to the announcement Triple J had 6.4% share this fell to 4.9% after the announcement. Back in Survey 2 the Government funded radio station had 7.8% share.

    This is information that Fairfax omitted from their story.

    Triple M on the other hand saw a modest amount of growth, climbing 0.7 points to a share of 6.2%.

    The post COMMENT: Triple M Gives Triple J And Minority Groups Two Finger Salute Over Australia Day appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/comment-triple-m-gives-triple-j-minority-groups-two-finger-salute-australia-day/feed/ 0
    COMMENT: Fairfax Delivers Pure NBN Fiction https://smartoffice.com.au/comment-fairfax-delivers-pure-nbn-fiction/ https://smartoffice.com.au/comment-fairfax-delivers-pure-nbn-fiction/#respond Mon, 31 Jul 2017 05:27:03 +0000 http://smartoffice.com.au/?p=95332 John Davidson the tech writer over at Fairfax Media claims that Malcolm Turnbull’s NBN hasn’t even been connected to his house yet, and already it has slowed his internet connection and rendered his smart home almost useless. The facts are that the NBN is not Malcolm Turnbull’s NBN it’s the property of the Federal Government ... Read more

    The post COMMENT: Fairfax Delivers Pure NBN Fiction appeared first on Smart Office.

    ]]>
    John Davidson the tech writer over at Fairfax Media claims that Malcolm Turnbull’s NBN hasn’t even been connected to his house yet, and already it has slowed his internet connection and rendered his smart home almost useless.

    The facts are that the NBN is not Malcolm Turnbull’s NBN it’s the property of the Federal Government and the people of Australia and it’s being managed and delivered by a totally independent entity that reports to the Federal Government.

    Unlike Davidson I did switch to the NBN recently and after a nightmare experience with Telstra, which is what I have become accustomed to when dealing with Telstra customer support, I am getting a significantly improved broadband experience.

    I live approximately 2.5 kilometres from my local Exchange on Sydney’s North Shore and right now I am getting blisteringly fast broadband download speeds over Hybrid Fibre Coax (HFC) copper technology.

    Some days I am reaching download speeds of 94Mbs on average and on a bad day 72Mbs.

    My upload speeds vary between 37Mbs at the top end to 22Mb my service is delivered via a Frontier Router from Telstra. The cost of my NBN service is only $10 more than I was paying for my prior broadband service.

    The NBN service I am now getting is a big improvement on the cable connection I use to have directly with Telstra.

    When I did have an initial problem, Telstra tried to blame the NBN but when I used my connections at the NBN, to check what Telstra customer service was claiming it was Telstra that was misleading me about the connection.

    Davidson then went on to claim that When Mr Turnbull, as the shadow minister for communications was selling his second-rate version of the NBN to the witless electorate (who were warned it would be terrible, but didn’t seem to care as much as they now do), he didn’t talk much about the upload speeds he was sacrificing in the name of getting elected.

    What Davidson didn’t tell his readers which is often the case when issues are being reported in Fairfax Media or on the ABC is that under Labor and the then Communications Minister Stephen Conroy, Australians would have been left with a bill for the NBN that would not have not been commercially appealing to an outside party, it would have left every Australian paying billions for a rolls Royce fibre network decades into the future when in fact most Australians are getting a significant improvement with NBN over what they had in the past.

    What Turnbull did was rationalise the cost of investment by delivering an NBN broadband technology over an existing copper cable network that can deliver more than adequate broadband speeds as I found out when I moved to the NBN last month.

    I not only run my entertainment and productivity network on the NBN, I also have a Ring’s doorbell installed that delivers a live video stream, in real time, direct to my smartphone.

    I am also running live streaming of rooms at my house to a smartphone via the Netgear Arlo Security and camera system. All of it is quick and seamless.

    I also run Foxtel and my home phone over the NBN network.

    Chris Mitchell writing in the Australian newspaper said “If you think of complaints about NBN speeds recently. Most stories have been informed by the individual journalist’s view that the original fibre-to-the-home scheme proposed by Rudd and Stephen Conroy would have been better. As if money were no object.

    But despite the unchallenged and false claim by Conroy on the Bolt Report on Tuesday night that his scheme would have been cheaper, common sense should tell every journalist in the country that rolling out fibre to the node at the end of the street across a whole continent will cost a fraction of what it would have cost to roll out that fibre to every home in the street.

    He said that as columnist Terry McCrann noted in the Herald Sun on Thursday morning, the rollout that is now half finished probably would be only 15 per cent done under the Labor “Rolls Royce” NBN.

    But why is the government even mandating such technology and why were the industry and the market not left to provide effective solutions?

    That is the real question reporters should be asking”.

    The post COMMENT: Fairfax Delivers Pure NBN Fiction appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/comment-fairfax-delivers-pure-nbn-fiction/feed/ 0
    E-Shopping V In-Store, Who Wins? https://smartoffice.com.au/e-shopping-v-in-store-who-wins-2/ https://smartoffice.com.au/e-shopping-v-in-store-who-wins-2/#respond Thu, 06 Jul 2017 06:00:00 +0000 http://smartoffice.com.au/e-shopping-v-in-store-who-wins-2/ I've been scanning the shelves of the likes of Harvey Norman, JB Hi-Fi and Dick Smith recently trying to find a decent, quality yet pocket friendly notebook.

    The post E-Shopping V In-Store, Who Wins? appeared first on Smart Office.

    ]]>
    I’ve been scanning the shelves of the likes of Harvey Norman, JB Hi-Fi and Dick Smith recently trying to find a decent, quality yet pocket friendly notebook.On the advice of several friends and technophiles I was told a Samsung would probably be my best bet.

    HP and Dell were also other brands I contemplated from past user experience.

    Ok, I thought that the brand(s) were pretty much clear in my head. Now, where do I buy it?

    Having been searching for a Samsung notebook in-store for several weeks, it was to my surprise that some of the best deals I found were in a small, independent store in North Sydney, beating their larger rivals in the price stakes by miles.

    The prices were among the most competitive I had seen, with HP’s Mini 210-1051VU starting at $269 and a Samsung N150 at a very tempting $349.

    The same Samsung model was $498 in JB Hi Fi – almost $150 of a price jump. Harvey’s didn’t stock an equivalent model.
    Bing Lee’s online price for the Samsung was $429, but said it was negotiable.

    However, whilst browsing in any of these stores, I was never once approached by a member of staff asking if I needed help, which is hardly encouraging, especially considering that personal experience is one of the main pros of in-house shopping.

    In JB Hi-Fi I had to ask the security guard where the laptops were kept and in the past have found staff, at best, indifferent to its customers.

    To see what else was on offer, I turned to my PC and found, on price comparison site shopbot.com.au, the same Samsung went from $447 to $510 depending on the store – almost $100 more than the same model offered from a bricks and mortar retailer.

     

    This also didn’t include delivery charges of about $10 on top of the sale price.

    Similarly, the exact same HP Mini laptop was offered with an online starting price of $299 and $339 – $30 more than my local computer shop.

    This quick test proves that in spite of the common perception that online offers better deals and choice, for my netbook purchase this definitely was far from the case.

    However, stores that are lamenting the demise of their sales figures due to online competition should keep one important thing in mind – their service offering and the guarantee of after-sales care are two of their main strengths over online.

    Some vendors themselves, including Sony, are already working towards providing more customer information, which could very well bridge the huge information gap between online and in-store, that so many customers now find themselves stranded in.

    “In recent months several retailers have realised that there has to be a lot more education on the shop floor. We know that Harvey Norman is one retailer who is looking at better ways to service clients” says Toshiba’s Rob Wilkinson,  General Manager of  Australia’s Information Systems Division.

    They should now be using these to the max.

    The post E-Shopping V In-Store, Who Wins? appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/e-shopping-v-in-store-who-wins-2/feed/ 0
    Feds Do Nothing As Banks Hurt Small Business https://smartoffice.com.au/feds-do-nothing-as-banks-hurt-small-business-2/ https://smartoffice.com.au/feds-do-nothing-as-banks-hurt-small-business-2/#respond Thu, 06 Jul 2017 05:47:00 +0000 http://smartoffice.com.au/feds-do-nothing-as-banks-hurt-small-business-2/ COMMENT: One has to seriously question whether the current Federal Government actually understands small medium business and that right now thousands of SMB organisations are starved of cash because of high interest rates and a refusal by banks to loan money to SMB organisations.

    The post Feds Do Nothing As Banks Hurt Small Business appeared first on Smart Office.

    ]]>
    COMMENT: One has to seriously question whether the current Federal Government actually understands small medium business and that right now thousands of SMB organisations are starved of cash because of high interest rates and a refusal by banks to loan money to SMB organisations.

    During the past week I have spoken to several small medium business owners who are terrified that they are set to lose their business because banks are still charging up to 9% interest on overdrafts to small medium businesses while also refusing to loan them additional money that will help them manage the economic downturn.

    One has to seriously question whether the current Federal Government actually understands small medium business and that right now thousands of SMB organisations are starved of cash because of high interest rates and a refusal by banks to loan money to SMB organisations.


    Do they actually realise that the mainstream Banks in Australia are still charging up to 8 or 9% interest on business overdrafts  to SMB organisations of which there are more than 2 million small businesses in Australia employing approximately 4.5 million people.


    And if those businesses start falling over it will create a much bigger problem than whatever the decline in the automotive or construction industries will have on the economy.


    Small business in Australia has a total capitalised worth of $4.3 trillion 4 times that of the Australian stock exchange. Small business is a very important sector of the Australian economy.

     

     

    In the consumer electronics and IT industry the biggest suppliers are small medium businesses that distribute technology products into retailers who are responsible for 11% of all employment in Australia.


    The reserve bank has set the prime interest rate at 3.5% so in essence banks are pocketing between 4.5% and 5.5% on the money they lend to SMB organisations.


    They are also raking in billions from the 12 to 18% interest rate they charge on credit cards.


    But what is the Federal Government and Prime Minister Kevin Rudd and Tresurer Wayne Swann doing for SMB organisations. We know that they are concerned about the automotive industry which is primarily made up of foreign Companies who take their money out of Australia and we know that he is concerned about the mining industry who also exports their profits.


    But what about SMB organisations that keep the bulk of their profits in Australia and are the engine room for the economy.
    Surely there are grounds to hold an inquiry into the high cost of money for the SMB industry and surely the industry is worth supporting not by pouring in money to prop up organisations but by creating a fair and level playing field.

     

    Why should the Government pour money into construction and automotive companies like James Hardie and Brookfield Multiplex, who are going to take their profits out of Australia after being propped up by Kevin Rudd?


    And what’s to stop the Australian Government tipping $10B into a fund strictly for SMB borrowing where the interest rate is 1.5% above prime. The answer is nothing.

    Late last week the governor of the Reserve Bank, Glenn Stevens, said at a Senate hearing that bank chiefs should not let overzealous loan officers choke credit to small businesses and increase the risk of recession.

    Mr Stevens told the Senate hearing that he Reserve was ready to lower interest rates further if it was needed however there is every chance that SMB organisations will not see lower interest rates due to banks interest gouging. So while home loan mortgage rates fall to 5.2% and lower the chances are that SMB organisations will over coming months start laying employees off and then there will be a bigger issue as to where the money is going to come from to pay the low mortgage payments.

    The post Feds Do Nothing As Banks Hurt Small Business appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/feds-do-nothing-as-banks-hurt-small-business-2/feed/ 0
    Why Storage World Is A Not A Very Smart Business https://smartoffice.com.au/why-storage-world-is-a-not-a-very-smart-business-2/ https://smartoffice.com.au/why-storage-world-is-a-not-a-very-smart-business-2/#respond Thu, 06 Jul 2017 05:46:03 +0000 http://smartoffice.com.au/why-storage-world-is-a-not-a-very-smart-business-2/ COMMENT: What is it about Australia and the lack of service by retailers? In the US and the UK retailers go out of their way to build databases of customers and in some cases they even issue them with barcodes or cards so that regular customers get priority service.

    The post Why Storage World Is A Not A Very Smart Business appeared first on Smart Office.

    ]]>
    COMMENT: What is it about Australia and the lack of service by retailers? In the US and the UK retailers go out of their way to build databases of customers and in some cases they even issue them with barcodes or cards so that regular customers get priority service.

    Even corner store dry cleaners in the USA use CRM systems to gather intelligence on their customers. But in Australia the attitude of retailers is totally the opposite.


    For example last month I walked in Storage World at Northbridge in NSW where during the past few years my wife and I have spend litterally thousands buying storage gear for temporary accommodation while we built a new house. We also purchased wardrobe rack systems for the new house as well as things like tie and belt racks as well as kitchen and laundry storage gear.

     

     

     

    This is not some corner store mum and dad store. This is a chain of stores run nationally across Australia with the Northbridge store being owned by the Company that also franchises the Storage World brand. 


    So when I walked in there some four weeks ago to buy some more clothing racks similar to ones that I had already purchased I discovered that they were out of stock and this is when I realised that this was a Company that had a major problem when it came to customer service.


    After inquiring as to whether they could order stock in for me I was told “yes” not a problem and after giving the assistant both my name and that of my wife I was told it would only take a couple of days.


    Four weeks later and after numerous calls to the shop I still don’t have the goods but I do have a poor customer experience.

     On two occasions I was told it would only be a few days but on my fifth call some three weeks later I actually asked them to repeat the telephone number of either my wife or myself.

     

    After an 8 minute wait during which time I ended up talking to two assistants a Storage World employee came back and said “What was your name I don’t seem to have a record of the order”.


    Now if this was a Company that took customer service seriously they would by now have both my wife and I on a database.
    They should have also offered to phone other stores in their group to see if they had the items in stock.


    They should have also, after telling me that it would be in stock within days phoned me after a week to tell me that they were still waiting for the goods to arrive.


    But they didn’t because the pimple faced youth on the floor that served me and who just happens to be the critical interface between the customer and the business did not care. He failed to go to a master database and enter any customer details.


    All he wanted to do was move onto his next customer finish his shift and get paid. He made no attempt to deliver a good customer service experience and I blame management for this.


    Storage World is not alone when it comes to delivering poor customer service in Australia. Harvey Norman and the likes of Dick Smith make no attempt to build extensive CRM databases so that they can offer their regular customers exclusive services and viewings.


    Organisations that do understand customer service are the likes of automotive Companies who while taking an order build an extensive database which they later market to in an effort to stay in touch with their most valuable asset a customer who has the ability to spend money.


    They send out magazines that constantly remind the customer about the performance of the brand. They invite customers and their friends and partners to cocktail parties and special viewings of new products.

     

    I also wonder how many interior or kitchen designers are on the Storage World database, because every day these trades are recommending storage options to customers.


    I for one have never received a marketing brochure from Storage World despite going to their store for more than 10 years but guess what I still get a regular brochure from a store in South Coast Plaza in the USA where I have on several occasions purchased goods.


    So what is the difference? One understands the value of customer service and the other doesn’t give stuff.

    So what is customer service all about? See our recommendations and those of the NSW department of business. 

    The post Why Storage World Is A Not A Very Smart Business appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/why-storage-world-is-a-not-a-very-smart-business-2/feed/ 0
    COMMENT: Will the Audit Of Samsung Australia Result In Big Changes? https://smartoffice.com.au/comment-will-the-audit-of-samsung-australia-result-in-big-changes-2/ https://smartoffice.com.au/comment-will-the-audit-of-samsung-australia-result-in-big-changes-2/#respond Thu, 06 Jul 2017 05:37:37 +0000 http://smartoffice.com.au/comment-will-the-audit-of-samsung-australia-result-in-big-changes-2/ COMMENT: The decision to fly in a Samsung Corporation audit hit squad of 13 people to audit the Australian operations of Samsung Australia appears to be a drastic move by any count or for any company.

    The post COMMENT: Will the Audit Of Samsung Australia Result In Big Changes? appeared first on Smart Office.

    ]]>
    COMMENT: The decision to fly in a Samsung Corporation audit hit squad of 13 people to audit the Australian operations of Samsung Australia appears to be a drastic move by any count or for any company.

    This is not the first time that this squad has taken such drastic action when there have been allegations of corruption and non compliance with company procedures.
     They did it in China and Indonesia where, in both operations, they were able uncover irregularities which in some cases involved people who had been employed by Samsung Australia at one time or another.
    As former Democrats leader Don Chip once said ‘you always need something to keep the bastards honest’.
    The fact that the Samsung Corporation has taken such drastic action is a credit to the company as it demonstrates that they are prepared to act in the best interest of their staff, suppliers, distributors and retailers.  
    In today’s marketplace it’s critical for large fast growing companies like Samsung, whose Australian operation has grown to become the largest consumer electronics and appliance firm in Australia with revenues in excess of $1.6 Billion, are seen to have in place procedures that are open, fair and, above all, accountable.
    What we have done in writing on this story is demonstrate that a corporation is prepared to take action in the best interests of their brand and their reputation.
    In Australia, I have seen Samsung grow from a small company whose products were originally sold by distributors to a brand that, along the way, has faced some massive hurdles in getting to #1.
    It’s been obvious for some time that there were problems at Samsung despite their dramatic growth. During the past 24 months the company has lost several senior and experienced managers, people who had knowledge of the industries that Samsung compete in, as well as some excellent relationships with key buyers of their goods.

     
    To a company like Samsung this is a vital loss. Several times over the past 24 months we have been approached by both existing staff and those leaving the firm, and every time we were approached it was the same old stories, Korean management, hidden agendas etc, etc etc.
    We chose not to write on this subject, not because we were in fear of losing an advertising partner but because the claims lacked documentation or evidence to support the claims.
    However, when one gets tip after tip that that a hit squad of auditors have descended on a company as large as Samsung Australia, we as a media organisation have a responsibility to report the facts. Especially as these tips came from management still working within the firm as well as from those who quit Samsung out of sheer frustration.
    In the past we were told the same old story by several existing and departing employees who said “great company, liked working there” but we “can’t handle the Korean management”. “They are secretive, create divisions in the company and above all “don’t work as a team”. 
    We were told about private deals that managers were told to go nowhere near if they wanted to keep their job at Samsung. We have taped interviews from employee after employee, some of whom had used secret “dob” in lines to raise complaints about procedures and management. 
    Time and time again we heard the same story. We also heard similar stories about LG Australia and their Korean management issues.
    Today most of the people who quit Samsung are senior executives in major companies responsible for multimillion dollar budgets. They play key roles in growing the operations of competitors to Samsung. 
    What Samsung is doing via the use of an audit team is fixing a major problem that will result in Samsung Australia becoming a better operation.
    I, for one, believe that a subsidiary like Samsung Australia should be run by a local CEO who has a long history of success in a Western market like Australia. Panasonic, Sanyo and Sony are already doing this in Australia, and LG Australia, who after their own set of problems and record multimillion dollar fines, has moved in a Korean executive who speaks excellent English and has a track record of successfully running their Canadian operation.
    The ideal place for Korean management in a company like Samsung Australia is in CFO and operational and logistic roles where dialogue and reporting has to be kept up with overseas manufacturing and head office divisions.
    Samsung Australia is an Australian company and it needs an Australian face at the pointy end.

     
    In today’s market, the head of a major consumer electronics company needs to be able to communicate where his company is going and why. In the past, most of the CEOs of companies like Samsung, LG or Sony have not been able communicate a vision for their company because of poor English skills and a lack of Australian knowledge.
    Globally, Samsung has benefitted from the appointment of executives with Western market experience. Dr. David Steel is a classic example. Today he is head of strategic marketing for Samsung Electronics in one of their most important markets, North America. 
    Prior to joining Samsung, Dr. Steel worked at McKinsey & Co. and Argonne National Laboratory of the U.S. Department of Energy. Dr. Steel earned a Ph.D. in Physics from MIT, an MBA from the University of Chicago, and a BA in Physics from Oxford University.
    I first met David Steel when the Samsung consumer electronic division was a fraction of what they are today. Prior to him coming on board, Samsung advertising was created in Korea for use in markets like Australia, it was boring and did not reflect our culture or lifestyle. 
    Steele changed all that in his role as global marketing director and Samsung has blossomed to become a powerhouse in consumer electronics. 
    Steel has deep experience across several Samsung business units and possesses a breadth of expertise in many product categories. 

     
    He began his time at Samsung in the Global Strategy Group, where he executed strategic projects for numerous companies within the Samsung Group. From 2002-2007, he served as Vice President and head of marketing for the Digital Media business where he established the role of marketing within the $25bn business.
    Working closely with subsidiaries like Australia. He was able to strengthen the focus on key accounts, leading to sales growth of more than 300%, and develop leading capabilities in marketing communications and public relations. In 2007, he moved to the Mobile Communications Division, where he oversaw marketing strategy for the world’s number 2 maker of mobile phones.
    What has happened at Samsung is not a bad thing and the fact that we have exposed the problems in such an open way, goes a long way to Samsung’s credibility as a company.
    The consumer electronics media has a role to play in writing about both the good and the bad that happens in this industry, we are not here to be used as a party political broadcast machine by PR companies who simply want favourable exposure for their products and services.
    We write about an industry that is today a key part of society one that has migrated from niche technology publications and trade magazines to today being every day stories on TV and in mass media publications.
    I am sure that had we not exposed the events taking place at Samsung, the newly anointed Marketing Director Lambro Skropidis would not have issued a press release.
    The fact that we have the contacts and the experience to write such a story would have been useless without the conviction of both current amd past Samsung employees who went out of their way to contact us in coffee shop meetings, by phone or email from private accounts. 
    This speaks volumes to the extent of the frustration that people have been going through at Samsung Australia, who through one audit team swoop could become an even bigger and better company in Australia.
    If you would like to comment on this story please send your comments to dwr@4squaremedia.com

    The post COMMENT: Will the Audit Of Samsung Australia Result In Big Changes? appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/comment-will-the-audit-of-samsung-australia-result-in-big-changes-2/feed/ 0
    Is Microsoft Yesterday’s Technology Company? https://smartoffice.com.au/is-microsoft-yesterdays-technology-company-2/ https://smartoffice.com.au/is-microsoft-yesterdays-technology-company-2/#respond Thu, 06 Jul 2017 05:36:53 +0000 http://smartoffice.com.au/is-microsoft-yesterdays-technology-company-2/ COMMENT: I purchased my first piece of Microsoft software 25 years ago in December. At the time Microsoft was a brand new company and I was running a brand new PR company that had several large enterprise computing clients as customers.

    The post Is Microsoft Yesterday’s Technology Company? appeared first on Smart Office.

    ]]>
    COMMENT: I purchased my first piece of Microsoft software 25 years ago in December. At the time Microsoft was a brand new company and I was running a brand new PR company that had several large enterprise computing clients.For 20 of those past 25 years, Microsoft has been on a roll, prosecuted and fined for their monopolistic practises. Microsoft has dominated in the desktop OS market, the Office applications market and in the server space with products like Exchange, SQL and a host of IT tools.

    Today the company is struggling on several fronts with CEO Steve Ballmer moving to sell over $1.7 Billion dollars worth of shares in the company this month.

    Their share of the browser market has slipped from over 90 percent to less than 45 percent as Google Chrome starts to take share away from Internet Explorer.

    In the mobile market the company has seen their share of the Smartphone market slide from over 80 percent to less than 5 percent. Now they are trying to fight back with Windows 7 Phone, up against a surging Google Android and a much sought after Apple iPhone offering.

    In the consumer market Microsoft has totally screwed up in Australia. Despite several promises the company has failed to deliver content such as movies and music to the desktop.

    Five years ago it was Microsoft not Google who had the software via their Media Centre offering to deliver a TV service. The only problem was that Microsoft failed to deliver an electronic program guide, or additional services similar to what their US customers were being offered.

    As a result it is Google with their Google TV offering that is attracting third party vendors like Sony and Logitech to partner with them.

    In the tablet market it is Google with their Android offering and Apple with their iPad that is grabbing consumer attention. Microsoft, who 12 months ago stood up at the CES show in Las Vegas with a tablet offering via HP, have still not delivered a tablet product and as for HP, they are moving onto their own WebOS offering with both a tablet and WebOS Smartphone set to be launched in Australia in 2011.

     

    Another big problem for Microsoft is cloud computing. While the company has sucked up sales of their Office range of software during the PC era several companies, including Google, are now offering businesses an alternative in the form of hosted applications.

    Last week Flight Centre said they were dumping their Microsoft products. Instead they are deploying Gmail to 13,000 employees worldwide, replacing Microsoft Outlook.

    Also dumping Microsoft products is real estate franchisor, Ray White, who is deploying a customer application available to 10,000 staff in its 1000 franchisees after trying unsuccessfully to use Microsoft .Net.

    Microsoft is not a very nice company. They bully and intimidate organisations, and their management blatantly lie, when confronted over issues such as when we exposed that 30,000 of their Xbox 360 gaming consoles had overheating problems.

    While Microsoft claim that they have billions invested in research and development one has to question why companies like Google, Apple and even brands like HTC are able to outperform Microsoft in the fast growing consumer market, and in the future, in the small medium business market.

    I remember one day when Microsoft ran out of press releases at the launch of a new Windows OS, when I asked for a USB or DVD with the press kit on, I was told that none were available.

    This is a company that tells major companies how to run their business. “We have the tools for just in time” performance they claim, yet despite this they fail internally to get a simple thing like a press release kit right.

    Even now Windows Explorer is fat, slow and buggy and Google is taking advantage of this with a significantly faster Chrome offering. In a few weeks time vendors will be offered a free version of a new Chrome OS to load onto notebooks, netbooks and PCs to replace Windows.

    At first many will bundle both but it will be interesting to see how long it takes before consumers and business demand a 100 percent Chrome offering as opposed to a Microsoft windows OS.

     

    The dominance of Windows has been Microsoft’s greatest strength for decades, but the operating system is now under attack from Linux.

    Microsoft saved Apple in 1997 with a $125 Million dollar handout. At the time Apple was considering a move to a suite of Linux based desktop applications developed by Corel. By giving Apple $125M they not only staved off Apple going into Chapter 11 they stopped Linux apps from getting onto the desktop.

    13 years later that is all about to change. Microsoft’s long running battle with Linux is eroding its market share on the server side, while Apple is making slow but steady progress in the desktop and laptop businesses.

    The situation is even worse on the mobile front, since Microsoft has never enjoyed the kind of dominance it has with PCs and servers in this market.

    Apple, Google and RIM are all cutting into the market, and the response of analysts and customers to Microsoft’s Windows Phone 7 mobile operating system has been tepid at best.

    Al Gillen, programme vice president of system software at IDC, told V3 recently: “A serious problem I see for Microsoft is that the emerging/growth markets that it has been cultivating for so long are where some of the most innovative uses of mobile technologies are occurring.

    “The bottom line is that, by the time those consumers are ‘ready’ for PCs, their attentions may have shifted elsewhere.”

    The post Is Microsoft Yesterday’s Technology Company? appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/is-microsoft-yesterdays-technology-company-2/feed/ 0
    No Go On GST Harvey, But China Still An Option https://smartoffice.com.au/no-go-on-gst-harvey-but-china-still-an-option-2/ https://smartoffice.com.au/no-go-on-gst-harvey-but-china-still-an-option-2/#respond Thu, 06 Jul 2017 05:35:36 +0000 http://smartoffice.com.au/no-go-on-gst-harvey-but-china-still-an-option-2/ Gerry Harvey doth protest too much? Yes, says an angry public, who have subjected the head honcho of Harvey Norman, to an "avalanche" of criticism following his attack on the government's GST policy on goods bought online.

    The post No Go On GST Harvey, But China Still An Option appeared first on Smart Office.

    ]]>
    Gerry Harvey doth protest too much? Yes, says an angry public, who have subjected the head honcho of Harvey Norman, to an “avalanche” of criticism following his attack on the government’s GST policy on goods bought online.

    The post No Go On GST Harvey, But China Still An Option appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/no-go-on-gst-harvey-but-china-still-an-option-2/feed/ 0
    Comment: Whats Wrong At LG OZ? https://smartoffice.com.au/comment-whats-wrong-at-lg-oz-2/ https://smartoffice.com.au/comment-whats-wrong-at-lg-oz-2/#respond Wed, 05 Jul 2017 20:00:00 +0000 http://smartoffice.com.au/comment-whats-wrong-at-lg-oz-2/ COMMENT: The exit of David Brand from LG Australia was well and truly on the cards when the company was exposed by Choice Australia for fudging the truth about their products.

    The post Comment: Whats Wrong At LG OZ? appeared first on Smart Office.

    ]]>
    COMMENT: The exit of David Brand from LG Australia was well and truly on the cards when the company was exposed by Choice Australia for fudging the truth about their products.Now the Korean company,  who is facing multimillion dollar fines, is undergoing a major shakeout and relaunching LG Australia, after the appointment of William Cho, the former President and CEO of LG Canada, as Chief Executive of LG Australia.

    Cho, who was shipped into Australia days after LG Australia was found to have lied about the power performance of their refrigerators, is a tough performance-driven operator with a track record of success in the Canadian market where he headed the company’s operations.

    High on his agenda will be improving LG Australia’s profitability. In the 2008/2009 financial year they only managed a $13K profit on nearly a billion dollars turnover.

    In Australia, Cho has already taken action to fix the company’s endemic problems with the axing of several key managers. Its been suggested that this is only the start and that several other heads, including several in sales, will be axed as part of the restructure.

    This could be a precarious exercise as the likes of Graeme Cunningham, the current sales director of LG Australia, has excellent contacts, is trusted by the retail channel and has often been the glue that has held the LG operation together in Australia.

    Among those who have gone from the company since Cho’s appointment  are David Brand, the former Marketing Director, Carli Wilson, the former Marketing Manager of the company’s struggling Communications Division, who late last month was still running what some observers described as “froth and bubble” marketing events for handsets that are going nowhere in the Australia market up against offerings from arch rivals like Samsung, HTC and Apple.  

    Cho has already started to stamp his own management style on the Australian operation with the appointment of Kim Barnes as marketing manager of consumer products. Barnes came from LG Canada. He has also hired former Coca Cola executive Mark Van Dyke. He is also on the lookout for a new Marketing Director who will be given a brief to basically relaunch the company.

    During the past three years Brand has had one disaster after another from a Scarlet TV launch that went pear shaped, to multimillion dollar phone launches that did little to stimulate sales, to the exposure of LG as a serial offender in the appliance market which resulted in LG being nobbled three times by the Australian Competition and Consumer Commission for misleading consumers. There was  also the issue of several recalls of LG air conditioners and appliances.

     

    The LG slogan “Life’s Good” was well and truly on the nose.

    Five years ago under the direction of Paul Reeves, LG’s former Marketing Director, the LG brand was hitting a sweet spot and the slogan Life’s Good really meant something with consumers because it was unique, locally developed and above all in touch with the Australian way of life.

    Then along came Brand, who in reality was a puppet of what his Korean task masters wanted.

    Killed off  was the memorable local advertising. This was replaced with big budget International advertising that failed dismally. The big budget Scarlet TV campaign came and went along with several other International campaigns.

    At one stage Brand was told by his corporate masters in Korea that he had to appoint WPP group agencies in Australia. This resulted in Mindshare taking responsibility for media planning and buying.

    George Patterson Y&R was appointed to  handle above-the-line advertising duties, while Publicis Mojo’s digital arm Publicis Digital, were appointed to manage website and digital marketing.

    Brand was then forced to call a pitch for public relations. This resulted in several WPP owned PR companies fighting among themselves as to who would get the spoils.

    The incumbent, Burson Marsteller, threw in the towel and WPP owned Pulse was appointed to set up a new operation called LG One. This operation was driven out of Korea, with the local management given little opportunity to build the local brand.

    In reality LG is a dynamic company. Their display operation is among the best in world, even Steve Jobs at Apple gives them credit for that with the company tasked with the development of new AMOLED and OLED screens for several Apple products.

     

    They also make great appliances.

    After gaining popularity with their mobile phones in Australia, LG has failed to keep pace with offerings from Samsung, HTC and Apple. Big investments in fluff PR events using the likes of Chris Noth came to nothing.

    What LG needs to do is invest in local marketing and not try and feed Australians on a diet of overseas marketing swill.

    Their advertising needs to be locally relevant and focused, and this will only be achieved if they empower a local marketing director who is given the choice of either using an International campaign or a locally developed campaign.

    The company also needs to talk more about the brand and stop dishing out boring product press release that are more product numbers and specs than brand substance.

    They also need to develop their people to be brand ambassadors, talking about LG as a company.

    Because, at the end of the day, a brand is remembered long after a product has become obsolete.

    The post Comment: Whats Wrong At LG OZ? appeared first on Smart Office.

    ]]>
    https://smartoffice.com.au/comment-whats-wrong-at-lg-oz-2/feed/ 0