Saturday, December 16, 2006
Thursday, November 30, 2006
Wednesday, November 29, 2006
Rails Migrations
Schema Statements
column(name, type, options = {})
- create_table(name, options)
- drop_table(name)
- rename_table(old_name, new_name)
- add_column(table_name, column_name, type, options)
- rename_column(table_name, column_name, new_column_name)
- change_column(table_name, column_name, type, options)
- remove_column(table_name, column_name)
- add_index(table_name, column_name, index_type)
- remove_index(table_name, column_name)
column(name, type, options = {})
Instantiates a new column for the table. The type parameter must be one of the following values: :primary_key, :string, :text, :integer, :float, :datetime, :timestamp, :time, :date, :binary, :boolean.
Available options are (none of these exists by default):
- :limit: Requests a maximum column length (:string, :text, :binary or :integer columns only)
- :default: The column’s default value. You cannot explicitely set the default value to NULL. Simply leave off this option if you want a NULL default value.
- :null: Allows or disallows NULL values in the column. This option could have been named :null_allowed.
Examples
# Assuming def is an instance of TableDefinition
def.column(:granted, :boolean)
#=> granted BOOLEAN
def.column(:picture, :binary, :limit => 2.megabytes)
#=> picture BLOB(2097152)
def.column(:sales_stage, :string, :limit => 20, :default => 'new', :null => false)
#=> sales_stage VARCHAR(20) DEFAULT 'new' NOT NULL
Appends a primary key definition to the table definition. Can be called multiple times, but this is probably not a good idea.
Returns a String whose contents are the column definitions concatenated together. This string can then be pre and appended to to generate the final SQL to create the table.
Commands
- rake db_schema_dump: run after you create a model to capture the schema.rb
- rake db_schema_import: import the schema file into the current database (on error, check if your schema.rb has ”:force => true” on the create table statements
- ./script/generate migration MigrationName: generate a new migration with a new ‘highest’ version (run ’./script/generate migration’ for this info at your fingertips)
- rake migrate: migrate your current database to the most recent version
- rake migrate VERSION=5: migrate your current database to a specific version (in this case, version 5)
Saturday, April 29, 2006
Oracle Server Architecture
An Oracle server consists of an instance and a database. When a database is being created the instance is created first (and resides in memory). The physical database is created with information from the instance. The relationship between an instance and a database can be one-to-one or many-to-one (Real Application Cluster).
An instance consists of memory structures and processes. All memory structures reside within the System Global Area. The following are the required structures and processes for any instance:
An instance consists of memory structures and processes. All memory structures reside within the System Global Area. The following are the required structures and processes for any instance:
- Database buffer cache - the memory used to execute SQL. Data is copied into the buffer from the physical database and modified in the cache. Actual writing to the physical database occurs as infrequently as possible.
- Shared pool - consists of the library cache and the data dictionary cache (among other structures). The library cache is used to store parsed code for reuse. The data dictionary cache is used to store recently used object definitions for reuse.
- Log buffer - small cache used to record changes to the database.
- SMON - system monitor. Responsible for opening the connection between an instance and the database.
- PMON - process monitor. Responsible for maintaining user sessions.
- DBWn - database writer. Responsible for writing to physical data files in the database.
- LGWR - log writer. Responsible for recording all changes to the database by writing to the online redo log files on disk.
- CKPT - checkpoint process. Responsible for synchronizing instance with database at certain intervals.
- controlfiles - contains pointers to the other files in the database. It's a good idea to make multiple copies of this, the Oracle server will make sure they are synchronized.
- online redo log files - contains every change made to the database, in chronological order. A redo log consists of groups of redo log files. Each file is called a member. A database consists of a minimum of two groups with a minimum of one member each. Therefore a database can be created with two redo log files. One group is the current group. The process of logging changes is outlined here:
- The LGWR flushes the log buffer to a member of the current group.
- When all the members of the current group are full (fixed file size for redo log files) the other group is flagged as the current group.
- The previous current group is archived. Oracle can be configured to write to multiple copies simultaneously as a backup.
- datafiles - contain data. A minimum of two are required for 10g.
- initialization parameter file
- password file
- archived redo log files
Sunday, April 23, 2006
cat2email
I modified a plugin by Scott Merrill a while ago for my wordpress class blog. I needed a plugin that would allow posts placed in a certain category to be emailed to a specific list of users. The cat2email plugin worked well, the only problem was that each category could only have one email address associated with it. I modified the plugin to allow multiple addresses to be associated with a category. It would be great to have a list of email addresses to choose from (registered users of the blog) to associate categories with. Currently you have to type in each email address separately. Here's the code:
<?php
/*
Plugin Name: cat2email
Plugin URI: http://www.skippy.net/
Description: Sends an email to a specified address on a per-category basis. Copyright 2005 Scott Merrill, licensed under the GPL.
Version: 1.1
Author: Scott Merrill
Author URI: http://www.skippy.net/
Modified by: Reza Shibli -> http://rshibli.blogger.com
*/
function cat2email_menu() {
add_management_page('Category To Email', 'Category2Email', 9, __FILE__, 'c2e_manage');
}
function cat2email ($post_ID = 0) {
// gets the link to the new post
$postdata = get_postdata($post_ID);
$user = get_userdata($postdata['Author_ID']);
$myname = $user->user_nicename;
$myemailadd = $user->user_email;
$cats = wp_get_post_cats('1', $post_ID);
foreach ($cats as $cat) {
$c2e_cat = get_option("c2e_" . $cat);
if ('' != $c2e_cat) {
if ('' == $to) {
$to = $c2e_cat;
} else {
$to .= ", " . $c2e_cat;
}
}
}
if ('' == $to) {
// no one to send to!
return $post_ID;
}
// Set sender details
$headers = "From: " . $myname . " <" . $myemailadd . ">\r\n";
// Set email subject
$subject = $postdata['Title'];
$mailtext = '';
if ('html' == get_option('c2e_format')) {
// To send HTML mail, the Content-type header must be set
// http://us2.php.net/manual/en/function.mail.php
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: ' . get_bloginfo('html_type') . '; charset=' . get_bloginfo('charset');
$mailtext = "<html><head><title>$subject</title></head><body>";
$content = $postdata['Content'];
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
$mailtext .= $content;
} else {
$mailtext = $postdata['Content'];
}
if ('html' == get_option('c2e_format')) {
$mailtext .= "</body></html>";
}
// And away we go...
if (isset($_POST['publish'])) { // we only want to send on publish
mail($to, $subject, $mailtext, $headers);
}
return $post_ID;
} // end cat2email
////////////////////
function c2e_manage() {
global $cache_categories, $wpdb;
$cache_categories = get_all_category_ids();
if (isset($_POST['c2e_action'])) {
$c2e_action = $_POST['c2e_action'];
}
if ('delete' == $c2e_action) {
c2e_delete();
} elseif ('delete_one' == $c2e_action) {
c2e_delete_one();
}
elseif ('add' == $c2e_action) {
c2e_add();
} elseif ('format' == $c2e_action) {
c2e_format();
}
$c2e_list = array();
if (count($cache_categories) == 0) {
update_category_cache();
}
$c2e_format = get_option('c2e_format');
if (FALSE === $c2e_format) {
$c2e_format = 'plain';
}
// get the list of defined addresses
foreach ($cache_categories as $cat) {
$foo = get_option("c2e_" . $cat);
if ( (FALSE != $foo) ) {
$c2e_list[$cat] = $foo;
}
}
echo "<div class='wrap'>\r\n";
echo "<fieldset class='options'><legend>Email Options:</legend>\r\n";
echo "<form method='POST'><input type='hidden' name='c2e_action' value='format'><p align='center'>Generate plaintext or HTML email?<br />\r\n";
echo "<input type='radio' name='c2e_format' value='plain'";
if ('plain' == $c2e_format) {
echo " checked='checked'";
}
echo " /> Plaintext <input type='radio' name='c2e_format' value='html'";
if ('html' == $c2e_format) {
echo " checked='checked'";
}
echo " /> HTML<br /><input type='submit' name='submit' value='submit' /></p></form>\r\n";
echo "<strong>Note:</strong> HTML emails will make sure that your posts will display (mostly) correctly in the recipient's mail program; but not every mail program supports this. Make sure your recipient(s) actually want HTML email before selecting this.</p></fieldset>\r\n";
echo "<fieldset class='options'><legend>Defined Notifications:</legend>\r\n";
if ( (is_array($c2e_list)) && (count($c2e_list) > 0) ) {
echo '<table width="100%" cellpadding="3" cellspacing="3"><tr>';
echo '<th scope="col">Category</th><th scope="col">Email</th><th></th></tr>';
$alternate = 'alternate';
foreach ($c2e_list as $key => $value) {
echo "<tr class='$alternate'>";
$catname = get_category($key)->cat_name;
//print "$catname<br \>";
echo "<td width='20%' align='center'>$catname</td>";
echo "<td width='70%' align='center'><a href='mailto:$value'>$value</a></td>";
echo "<td width='5%' align='center'><form action='' method='POST'><input type='hidden' name='cat' value='$key' /><input type='submit' name='c2e_action' value='delete' /></form></td>";
echo "</tr>\r\n";
("alternate" == $alternate) ? $alternate = "" : $alternate = "alternate";
}
}
echo "</table></fieldset>";
echo "<fieldset class='options'><legend>Add New Notification:</legend>\r\n";
echo "<form action='' method='POST'>";
echo "<input type='hidden' name='c2e_action' value='add'>";
echo "<select name='cat'>";
foreach ($cache_categories as $cat) {
//if (''== $c2e_list[$cat]) {
echo "<option value='" .$cat. "'>".get_category($cat)->cat_name."</option>";
//}
}
echo "</select> : ";
echo "<input type='text' name='email' value='' size='20' />";
echo "<input type='submit' name='submit' value='submit' /></form>";
echo "</fieldset>\r\n";
echo "</div>";
include(ABSPATH . '/wp-admin/admin-footer.php');
// just to be sure
die;
} // end c2e_manage
//////////////////
function c2e_add() {
if ( (isset($_POST['cat'])) && (isset($_POST['email'])) && (is_email($_POST['email'])) ) {
// first check to see if it exists
$cat = $_POST['cat'];
$email = $_POST['email'];
$foo = get_option("c2e_$cat");
if (FALSE != $foo) {
print "FASLE != foo";
// now see if it's different
if ($foo != $email) { //here we should check to see if $email is contained in the string $foo. -REZA
print "in if statement";
update_option("c2e_$cat", "$foo, $email");
}
} else {
update_option("c2e_$cat", "$email");
}
}
// clear the $_POST variable, and go back to manage
$_POST['c2e_action'] = '';
//c2e_manage();
} // c2e_add
/////////////////////
function c2e_delete() {
if (isset($_POST['cat'])) {
$cat = $_POST['cat'];
// make sure this exists in the DB
$foo = get_option("c2e_$cat");
if (FALSE != $foo) {
//create an array of emails
$emails = array();
$emails[] = strtok($foo, ", ");
while (TRUE)
{
$temp = strtok(", ");
if ($temp == FALSE)
break;
else
$emails[] = $temp;
}
//now we print out a page giving user the option to delete specific email addresses. (only if array contains more than one address!)
if (count($emails) <= 1)
{
update_option("c2e_$cat", '');
}
else
{
echo "<div class='wrap'>\r\n";
echo "<fieldset class='options'><legend>Email Addresses</legend>\r\n";
echo '<table width="100%" cellpadding="3" cellspacing="3"><tr>';
echo '<th scope="col">Email</th><th></th></tr>';
$alternate = 'alternate';
foreach ($emails as $addr)
{
echo "<tr class='$alternate'>";
echo "<td width='50%' align='center'><a href='mailto:$addr'>$addr</a></td>";
echo "<td width='50%' align='center'><form action='' method='POST'><input type='hidden' name='addr' value='$addr' /><input type='hidden' name='cat' value='$cat' /><input type='submit' name='c2e_action' value='delete_one' /></form></td>";
echo "</tr>\r\n";
("alternate" == $alternate) ? $alternate = "" : $alternate = "alternate";
}
echo "</div>";
}
}
}
$_POST['c2e_action'] = '';
//c2e_manage();
} // c2e_delete
function c2e_delete_one()
{
if ( (isset($_POST['cat'])) && (isset($_POST['addr'])) )
{
$del = $_POST['addr'];
$cat = $_POST['cat'];
$foo = get_option("c2e_$cat");
print "$del <br> $foo";
if (FALSE != $foo)
{
//create an array of emails
$emails = array();
$emails[] = strtok($foo, ", ");
while (TRUE)
{
$temp = strtok(", ");
if ($temp == FALSE)
break;
else
$emails[] = $temp;
}
$temp = '';
foreach ($emails as $dress)
{
if ($dress != $del)
if ($temp != '')
$temp=$temp.', '.$dress;
else
$temp = $dress;
}
update_option("c2e_$cat", $temp);
}
}
//$_POST['c2e_action']='';
}
/////////////////////
function c2e_format() {
if (isset($_POST['c2e_format'])) {
update_option('c2e_format', $_POST['c2e_format']);
}
$_POST['c2e_action'] = '';
} // c2e_format
/////////////////////
// main program block
add_action('admin_menu', 'cat2email_menu');
add_action ('publish_post', 'cat2email');
?>
<?php
/*
Plugin Name: cat2email
Plugin URI: http://www.skippy.net/
Description: Sends an email to a specified address on a per-category basis. Copyright 2005 Scott Merrill, licensed under the GPL.
Version: 1.1
Author: Scott Merrill
Author URI: http://www.skippy.net/
Modified by: Reza Shibli -> http://rshibli.blogger.com
*/
function cat2email_menu() {
add_management_page('Category To Email', 'Category2Email', 9, __FILE__, 'c2e_manage');
}
function cat2email ($post_ID = 0) {
// gets the link to the new post
$postdata = get_postdata($post_ID);
$user = get_userdata($postdata['Author_ID']);
$myname = $user->user_nicename;
$myemailadd = $user->user_email;
$cats = wp_get_post_cats('1', $post_ID);
foreach ($cats as $cat) {
$c2e_cat = get_option("c2e_" . $cat);
if ('' != $c2e_cat) {
if ('' == $to) {
$to = $c2e_cat;
} else {
$to .= ", " . $c2e_cat;
}
}
}
if ('' == $to) {
// no one to send to!
return $post_ID;
}
// Set sender details
$headers = "From: " . $myname . " <" . $myemailadd . ">\r\n";
// Set email subject
$subject = $postdata['Title'];
$mailtext = '';
if ('html' == get_option('c2e_format')) {
// To send HTML mail, the Content-type header must be set
// http://us2.php.net/manual/en/function.mail.php
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: ' . get_bloginfo('html_type') . '; charset=' . get_bloginfo('charset');
$mailtext = "<html><head><title>$subject</title></head><body>";
$content = $postdata['Content'];
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
$mailtext .= $content;
} else {
$mailtext = $postdata['Content'];
}
if ('html' == get_option('c2e_format')) {
$mailtext .= "</body></html>";
}
// And away we go...
if (isset($_POST['publish'])) { // we only want to send on publish
mail($to, $subject, $mailtext, $headers);
}
return $post_ID;
} // end cat2email
////////////////////
function c2e_manage() {
global $cache_categories, $wpdb;
$cache_categories = get_all_category_ids();
if (isset($_POST['c2e_action'])) {
$c2e_action = $_POST['c2e_action'];
}
if ('delete' == $c2e_action) {
c2e_delete();
} elseif ('delete_one' == $c2e_action) {
c2e_delete_one();
}
elseif ('add' == $c2e_action) {
c2e_add();
} elseif ('format' == $c2e_action) {
c2e_format();
}
$c2e_list = array();
if (count($cache_categories) == 0) {
update_category_cache();
}
$c2e_format = get_option('c2e_format');
if (FALSE === $c2e_format) {
$c2e_format = 'plain';
}
// get the list of defined addresses
foreach ($cache_categories as $cat) {
$foo = get_option("c2e_" . $cat);
if ( (FALSE != $foo) ) {
$c2e_list[$cat] = $foo;
}
}
echo "<div class='wrap'>\r\n";
echo "<fieldset class='options'><legend>Email Options:</legend>\r\n";
echo "<form method='POST'><input type='hidden' name='c2e_action' value='format'><p align='center'>Generate plaintext or HTML email?<br />\r\n";
echo "<input type='radio' name='c2e_format' value='plain'";
if ('plain' == $c2e_format) {
echo " checked='checked'";
}
echo " /> Plaintext <input type='radio' name='c2e_format' value='html'";
if ('html' == $c2e_format) {
echo " checked='checked'";
}
echo " /> HTML<br /><input type='submit' name='submit' value='submit' /></p></form>\r\n";
echo "<strong>Note:</strong> HTML emails will make sure that your posts will display (mostly) correctly in the recipient's mail program; but not every mail program supports this. Make sure your recipient(s) actually want HTML email before selecting this.</p></fieldset>\r\n";
echo "<fieldset class='options'><legend>Defined Notifications:</legend>\r\n";
if ( (is_array($c2e_list)) && (count($c2e_list) > 0) ) {
echo '<table width="100%" cellpadding="3" cellspacing="3"><tr>';
echo '<th scope="col">Category</th><th scope="col">Email</th><th></th></tr>';
$alternate = 'alternate';
foreach ($c2e_list as $key => $value) {
echo "<tr class='$alternate'>";
$catname = get_category($key)->cat_name;
//print "$catname<br \>";
echo "<td width='20%' align='center'>$catname</td>";
echo "<td width='70%' align='center'><a href='mailto:$value'>$value</a></td>";
echo "<td width='5%' align='center'><form action='' method='POST'><input type='hidden' name='cat' value='$key' /><input type='submit' name='c2e_action' value='delete' /></form></td>";
echo "</tr>\r\n";
("alternate" == $alternate) ? $alternate = "" : $alternate = "alternate";
}
}
echo "</table></fieldset>";
echo "<fieldset class='options'><legend>Add New Notification:</legend>\r\n";
echo "<form action='' method='POST'>";
echo "<input type='hidden' name='c2e_action' value='add'>";
echo "<select name='cat'>";
foreach ($cache_categories as $cat) {
//if (''== $c2e_list[$cat]) {
echo "<option value='" .$cat. "'>".get_category($cat)->cat_name."</option>";
//}
}
echo "</select> : ";
echo "<input type='text' name='email' value='' size='20' />";
echo "<input type='submit' name='submit' value='submit' /></form>";
echo "</fieldset>\r\n";
echo "</div>";
include(ABSPATH . '/wp-admin/admin-footer.php');
// just to be sure
die;
} // end c2e_manage
//////////////////
function c2e_add() {
if ( (isset($_POST['cat'])) && (isset($_POST['email'])) && (is_email($_POST['email'])) ) {
// first check to see if it exists
$cat = $_POST['cat'];
$email = $_POST['email'];
$foo = get_option("c2e_$cat");
if (FALSE != $foo) {
print "FASLE != foo";
// now see if it's different
if ($foo != $email) { //here we should check to see if $email is contained in the string $foo. -REZA
print "in if statement";
update_option("c2e_$cat", "$foo, $email");
}
} else {
update_option("c2e_$cat", "$email");
}
}
// clear the $_POST variable, and go back to manage
$_POST['c2e_action'] = '';
//c2e_manage();
} // c2e_add
/////////////////////
function c2e_delete() {
if (isset($_POST['cat'])) {
$cat = $_POST['cat'];
// make sure this exists in the DB
$foo = get_option("c2e_$cat");
if (FALSE != $foo) {
//create an array of emails
$emails = array();
$emails[] = strtok($foo, ", ");
while (TRUE)
{
$temp = strtok(", ");
if ($temp == FALSE)
break;
else
$emails[] = $temp;
}
//now we print out a page giving user the option to delete specific email addresses. (only if array contains more than one address!)
if (count($emails) <= 1)
{
update_option("c2e_$cat", '');
}
else
{
echo "<div class='wrap'>\r\n";
echo "<fieldset class='options'><legend>Email Addresses</legend>\r\n";
echo '<table width="100%" cellpadding="3" cellspacing="3"><tr>';
echo '<th scope="col">Email</th><th></th></tr>';
$alternate = 'alternate';
foreach ($emails as $addr)
{
echo "<tr class='$alternate'>";
echo "<td width='50%' align='center'><a href='mailto:$addr'>$addr</a></td>";
echo "<td width='50%' align='center'><form action='' method='POST'><input type='hidden' name='addr' value='$addr' /><input type='hidden' name='cat' value='$cat' /><input type='submit' name='c2e_action' value='delete_one' /></form></td>";
echo "</tr>\r\n";
("alternate" == $alternate) ? $alternate = "" : $alternate = "alternate";
}
echo "</div>";
}
}
}
$_POST['c2e_action'] = '';
//c2e_manage();
} // c2e_delete
function c2e_delete_one()
{
if ( (isset($_POST['cat'])) && (isset($_POST['addr'])) )
{
$del = $_POST['addr'];
$cat = $_POST['cat'];
$foo = get_option("c2e_$cat");
print "$del <br> $foo";
if (FALSE != $foo)
{
//create an array of emails
$emails = array();
$emails[] = strtok($foo, ", ");
while (TRUE)
{
$temp = strtok(", ");
if ($temp == FALSE)
break;
else
$emails[] = $temp;
}
$temp = '';
foreach ($emails as $dress)
{
if ($dress != $del)
if ($temp != '')
$temp=$temp.', '.$dress;
else
$temp = $dress;
}
update_option("c2e_$cat", $temp);
}
}
//$_POST['c2e_action']='';
}
/////////////////////
function c2e_format() {
if (isset($_POST['c2e_format'])) {
update_option('c2e_format', $_POST['c2e_format']);
}
$_POST['c2e_action'] = '';
} // c2e_format
/////////////////////
// main program block
add_action('admin_menu', 'cat2email_menu');
add_action ('publish_post', 'cat2email');
?>
Saturday, April 22, 2006
Oracle 10g on Mac OS X
Finally! Oracle 10g Enterprise edition is installed on my Powerbook G4! Hooray! I thought I'd document the problems I went through to get it working in this post for your convenience. Enjoy.
p.s. I'm running 10.4.5
I started out by following the instructions at Sergio's Blog, but quickly ran into problems. The first problem was during the actual installation of the db. As the installer was configuring the install it popped up a message saying "Error: Thrown when the ip address of a host cannot be determined." Apparently this error has something to do with the reverse address resolution protocol and it's implementation in os x. RARP is the opposite of ARP. ARP determines a systems IP address based on a name, RARP determines a systems name based on its IP address.
You can solve this problem by doing two things. It's important to note at this point that I did both things at the same time, so I'm not sure if they work separately.
Until I got to the database creation phase. That failed miserably.
Checking my install log revealed the following error:
dyld: Symbol not found: _SSL_ALG_CLIENT_AUTH_MODE_RSA_SIGN_CLIENTSIDE_BS
Referenced from: /opt/app/oracle/product/10.1.0/db_1/lib/libnnz10.dylib
Expected in: flat namespace
This is easily solved with some googling. Here's what you have to do:
p.s. I'm running 10.4.5
I started out by following the instructions at Sergio's Blog, but quickly ran into problems. The first problem was during the actual installation of the db. As the installer was configuring the install it popped up a message saying "Error: Thrown when the ip address of a host cannot be determined." Apparently this error has something to do with the reverse address resolution protocol and it's implementation in os x. RARP is the opposite of ARP. ARP determines a systems IP address based on a name, RARP determines a systems name based on its IP address.
You can solve this problem by doing two things. It's important to note at this point that I did both things at the same time, so I'm not sure if they work separately.
- Modify your /etc/hosts file. This can be done by: (assuming you are logged in as your oracle user and admin is the administrator user of the system...)
- su - admin
- enter password
- sudo emacs /etc/hosts
- add the following after the comments but before everything else.
- hostname ip-address
- The hostname can be obtained by typing the command hostname into the terminal.
- The IP address can be obtained using the ifconfig command.
- Use Netinfo Manager to add a machine to the database.
- Double click Netinfo Manager (Applications -> Utilities)
- Add a new machine with name: hostname and ip-address: ip-address
Until I got to the database creation phase. That failed miserably.
Checking my install log revealed the following error:
dyld: Symbol not found: _SSL_ALG_CLIENT_AUTH_MODE_RSA_SIGN_CLIENTSIDE_BS
Referenced from: /opt/app/oracle/product/10.1.0/db_1/lib/libnnz10.dylib
Expected in: flat namespace
This is easily solved with some googling. Here's what you have to do:
- Ensure that your $ORACLE_HOME path is set correctly (I had to do this manually).
- cd $ORACLE_HOME/lib
- mv libnnz10.dylib libnnz10.dylib.ori
- relink all
- mv libnnz10.dylib.ori libnnz10.dylib
Subscribe to:
Posts (Atom)