473,396 Members | 1,784 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

Behaviour of objects


I was playing with matrices and wrote a routine to return the minor
matrix if given a matrix and index. The minor is the matrix given by
removing the first row and i-th column.

e.g. using JavaScript indices and a 3x3 matrix:

if A = | 1 2 3 |
| 4 5 6 |
| 7 8 9 |

then minor(A,0) = | 5 6 |
| 8 9 |

minor(A,1) = | 4 6 |
| 7 9 |

minor(A,2) = | 4 5 |
| 7 8 |

Here's my routine to do it:

// A is a square matrix
// i is the minor index
function minor(A, i) {
A.shift()
var j = A.length;
while (j--) {
A[j].splice(i,1);
}
return A;
}

But when I pass it a matrix (object with arrays) the original object is
modified as well. Kinda sux because the alternative is to copy the
elements across individually. What's going on?

Here's a test case that shows ob3 before being passed to the routine,
what is returned and then the state of ob3 afterward. The minor matrix
is correct, but the original ob3 has been modified.

<input type="button" value="minor test" onclick="
var ob3 = [];
ob3[0] = [ 1, 2, 3 ];
ob3[1] = [ 4, 5, 6 ];
ob3[2] = [ 7, 8, 9 ];

alert('ob3 before:\n' + ob3.join('\n'));
alert('minor(0): \n' + minor(ob3, 0).join('\n'));
alert('ob3 after: \n' + ob3.join('\n'));
">

<script type="text/javascript">
function minor(A, i) {
A.shift()
var j = A.length;
while (j--) {
A[j].splice(i,1);
}
return A;
}
</script>

--
RobG
Jul 23 '05 #1
7 1170
On 26/05/2005 15:57, RobG wrote:
I was playing with matrices [...]
Ughh. Useful, but I hate them.

[snip]
// A is a square matrix
// i is the minor index
function minor(A, i) {
A.shift()
var j = A.length;
while (j--) {
A[j].splice(i,1);
}
return A;
}

But when I pass it a matrix (object with arrays) the original object is
modified as well. Kinda sux because the alternative is to copy the
elements across individually. What's going on?


Though assigning directly to A won't alter the matrix, modifying
properties of A, or calling methods which modify their objects (which
both shift and splice do) will. Objects are referenced; you don't get
copies. I think you have little option but to alter your algorithm to
extract the data, or copy the object yourself, first.

Mike

--
Michael Winter
Replace ".invalid" with ".uk" to reply by e-mail.
Jul 23 '05 #2
Michael Winter wrote:
On 26/05/2005 15:57, RobG wrote:
I was playing with matrices [...]


Ughh. Useful, but I hate them.

[snip]
// A is a square matrix
// i is the minor index
function minor(A, i) {
A.shift()
var j = A.length;
while (j--) {
A[j].splice(i,1);
}
return A;
}

But when I pass it a matrix (object with arrays) the original object is
modified as well. Kinda sux because the alternative is to copy the
elements across individually. What's going on?


Though assigning directly to A won't alter the matrix, modifying
properties of A, or calling methods which modify their objects (which
both shift and splice do) will. Objects are referenced; you don't get
copies. I think you have little option but to alter your algorithm to
extract the data, or copy the object yourself, first.


I tried:

var A = ob3;

But that seems to just create a new reference to the same object. Also
tried copying this way:

var A = [];
var i=0;
while ( ob3[i] ) {
A[i] = ob3[i];
i++;
}

But same issue - each row is just a reference to a row in ob3. A
pleasant bonus is mangling of the matrix by minor(). Final attempt:

var A = [];
var j, i=0;
do {
j=0;
A[i] = [];
do {
A[i][j] = ob3[i][j];
} while ( undefined != ob3[++j] )
} while ( ob3[++i] )

The 'copy' is now done inside the minor() function with the appropriate
elements omitted during the process - pity, splice(), shift() et al are
such cool methods.

--
Rob

Jul 23 '05 #3
RobG wrote:

I was playing with matrices and wrote a routine to return the minor
matrix if given a matrix and index. The minor is the matrix given by
removing the first row and i-th column.

e.g. using JavaScript indices and a 3x3 matrix:

if A = | 1 2 3 |
| 4 5 6 |
| 7 8 9 |

then minor(A,0) = | 5 6 |
| 8 9 |

minor(A,1) = | 4 6 |
| 7 9 |

minor(A,2) = | 4 5 |
| 7 8 |

Here's my routine to do it:

// A is a square matrix
// i is the minor index
function minor(A, i) {
A.shift()
var j = A.length;
while (j--) {
A[j].splice(i,1);
}
return A;
}

But when I pass it a matrix (object with arrays) the original object is
modified as well. Kinda sux because the alternative is to copy the
elements across individually. What's going on?

Here's a test case that shows ob3 before being passed to the routine,
what is returned and then the state of ob3 afterward. The minor matrix
is correct, but the original ob3 has been modified.

<input type="button" value="minor test" onclick="
var ob3 = [];
ob3[0] = [ 1, 2, 3 ];
ob3[1] = [ 4, 5, 6 ];
ob3[2] = [ 7, 8, 9 ];

alert('ob3 before:\n' + ob3.join('\n'));
alert('minor(0): \n' + minor(ob3, 0).join('\n'));
alert('ob3 after: \n' + ob3.join('\n'));
">

<script type="text/javascript">
function minor(A, i) {
A.shift()
var j = A.length;
while (j--) {
A[j].splice(i,1);
}
return A;
}
</script>

You need to copy "A", B=A.slice(0);Mick
Jul 23 '05 #4
Mick White wrote:
RobG wrote:

I was playing with matrices and wrote a routine to return the minor
matrix if given a matrix and index. The minor is the matrix given by
removing the first row and i-th column. [...]
<script type="text/javascript">
function minor(A, i) {
A.shift()
var j = A.length;
while (j--) {
A[j].splice(i,1);
}
return A;
}
</script>

You need to copy "A", B=A.slice(0);Mick


Nope, doesn't work. It's effectively the same as copying the rows to
the new matrix, then slicing them - the original matrix is mangled.

if have:
var ob3 = [];
ob3[0] = [ 1, 2, 3 ];
ob3[1] = [ 4, 5, 6 ];
ob3[2] = [ 0, 0, 0 ];

minor(ob3,0) becomes:

[ 5, 6 ]
[ 0, 0 ]

which is correct, but ob3 becomes:

[ 1, 2, 3 ]
[ 4, 5 ]
[ 0, 0 ]

which no longer represents anything useful - as soon as I try for the
next minor matrix, the script bombs.

For the record, I was doing this to play with an algorithm to produce
the determinant of an n_x_n matrix. Full solution below - please test
to your heart's content, I'd love to know of errors or optimisations.
I've tested a few manual examples, plus the standard few for zero
results.

Seems to work OK in Safari, Firefox (Windows & Mac) and IE.
*************** Sample stuff ***************

<table style="border-collapse: collapse;">
<tr>
<td style="background-color: #D8DFE0; text-align: center;
vertical-align: top;">
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj(2);
" value="Determinant 2x2"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj(3);
" value="Determinant 3x3"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj(4);
" value="Determinant 4x4"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj(5);
" value="Determinant 5x5"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj('5a');
" value="Determinant 5x5 a"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj('5b');
" value="Determinant 5x5 b"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj('5c');
" value="Determinant 5x5 c"><br>
</td>
<td style="width: 20em; height: 15em; background-color: #D8DFE0;
text-align: center; vertical-align: top;">
<span id="result" style="vertical-align: top;"></span>
</td>
</tr>
</table>
******** SCRIPT *******

// Just for testing

function showObj(x){

var ob2 = []
ob2[0] = [ 1, 2 ]
ob2[1] = [ 3, 4 ]

var ob3 = []
ob3[0] = [ 1, 2, 3 ]
ob3[1] = [ 4, 5, 6 ]
ob3[2] = [ 7, 8, 9 ]

var ob4 = []
ob4[0] = [ 1, 2, 3, 3 ]
ob4[1] = [ 4, 5, 6, 1 ]
ob4[2] = [ 7, 8, 9, 2 ]
ob4[3] = [ 1, 1, 2, 3 ]

var ob5 = []
ob5[0] = [ 1, 0, 4, -2, 0 ]
ob5[1] = [ 4, 1, 6, -2, 0 ]
ob5[2] = [ 0, 7, 1, 0, -7 ]
ob5[3] = [ 0, -6, 8, 1, 0 ]
ob5[4] = [ -9, 0, 0, 5, 1 ]

// 5x5 with column of zeros: - det = 0
var ob5a = []
ob5a[0] = [ 1, 0, 0, 6, 0 ]
ob5a[1] = [ 4, 1, 0, -2, 0 ]
ob5a[2] = [ 0, 7, 0, 0, -7 ]
ob5a[3] = [ 0, -6, 0, 1, 0 ]
ob5a[4] = [ -9, 0, 0, 5, 1 ]

var ob5b = []
ob5b[0] = [ 1, 0, 4, -2, 0 ]
ob5b[1] = [ 4, 1, 6, -2, 0 ]
ob5b[2] = [ 0, 0, 0, 0, 0 ] // row of zeros: - det = 0
ob5b[3] = [ 0, -6, 8, 1, 0 ]
ob5b[4] = [ -9, 0, 0, 5, 1 ]

var ob5c = []
ob5c[0] = [ 1, 0, 4, -2, 0 ]
ob5c[1] = [ 4, 1, 6, -2, 0 ]
ob5c[2] = [ 0, 7, 1, 0, -7 ]
ob5c[3] = [ 0, -6, 8, 1, 0 ]
ob5c[4] = [ 0, -6, 8, 1, 0 ] // identical row: det = 0
if ( 2 == x ) {
return '<b>2x2</b><br>'+ob2.join('<br>')+'<br>'+det(ob2);

} else if ( 3 == x) {
return '<b>3x3</b><br>'+ob3.join('<br>')+'<br>'+det(ob3);
} else if ( 4 == x) {
return '<b>4x4</b><br>'+ob4.join('<br>') +'<br>'+det(ob4);
} else if ( 5 == x) {
return '<b>5x5</b><br>'+ob5.join('<br>') +'<br>'+det(ob5);
} else if ( '5a' == x) {
return '<b>5x5 (column of zeros)</b><br>'
+ ob5a.join('<br>') + '<br>' + det(ob5a);
} else if ( '5b' == x) {
return '<b>5x5 (row of zeros)</b><br>'
+ ob5b.join('<br>') + '<br>' + det(ob5b);
} else if ( '5c' == x) {
return '<b>5x5 (identical row)</b><br>'
+ ob5c.join('<br>') + '<br>' + det(ob5c);
}
}

<script type="text/javascript">
/* det()
Finds the determinant of a square matrix using determinant
expansion by minors (or "Laplacian expansion by minors,"
or sometimes "Laplacian expansion")

if A = | a1 a2 |
| b1 b2 |

detA = a1.b2 - a2.b1

if A = | a1 a2 a3 |
| b1 b2 b3 |
| c1 c2 c3 |

detA = a1(b2.c3 - b3.c2) - a2(b1.c3 - b3.c1) + a3(b1.c2 - b2.c1)
= a1.b2.c3 - a1.b3.c2 - a2.b1.c3 + a2.b3.c1
+ a3.b1.c2 - a3.b2.c1
etc.

Information derived from the Wolfram site:
http://mathworld.wolfram.com/Determinant.html
*/

// Doesn't check squareness or size
function det(a) {
var i = a[0].length;
if ( 2 == i ) { // det of 2x2
return +a[0][0]*a[1][1] - +a[0][1]*a[1][0];
} else {
var x=0;
var j=0;
do {
if ( 0 != +a[0][j] ) { // Speed opt - don't do if factor is 0
if (j%2) { // add even columns, subtract odd
x -= a[0][j] * det( minor(a, j) );
} else {
x += a[0][j] * det( minor(a, j) );
}
}
} while ( ++j < i )
return x;
}
}

// Returns the i-th minor of square matrix b
// remove top row, remove i-th element of remaining rows
// Doesn't check squareness or size
function minor(A, i){
var B = [];
var k, n, j=1; // Skip first row of A
do {
k=0; // A column
n=0; // B column
B[j-1] = []; // New row for B
do {
if ( k != i ) { // Skip i-th element
B[j-1][n++] = A[j][k];
}
} while ( undefined != A[j][++k] )
} while ( A[++j] )
return B;
}
</script>
--
Rob
Jul 23 '05 #5
RobG wrote:
Mick White wrote:
RobG wrote:

I was playing with matrices and wrote a routine to return the minor
matrix if given a matrix and index. The minor is the matrix given by
removing the first row and i-th column.
[...]
I'll check ot out, Rob.
Mick

<script type="text/javascript">
function minor(A, i) {
A.shift()
var j = A.length;
while (j--) {
A[j].splice(i,1);
}
return A;
}
</script>

You need to copy "A", B=A.slice(0);Mick

Nope, doesn't work. It's effectively the same as copying the rows to
the new matrix, then slicing them - the original matrix is mangled.

if have:
var ob3 = [];
ob3[0] = [ 1, 2, 3 ];
ob3[1] = [ 4, 5, 6 ];
ob3[2] = [ 0, 0, 0 ];

minor(ob3,0) becomes:

[ 5, 6 ]
[ 0, 0 ]

which is correct, but ob3 becomes:

[ 1, 2, 3 ]
[ 4, 5 ]
[ 0, 0 ]

which no longer represents anything useful - as soon as I try for the
next minor matrix, the script bombs.

For the record, I was doing this to play with an algorithm to produce
the determinant of an n_x_n matrix. Full solution below - please test
to your heart's content, I'd love to know of errors or optimisations.
I've tested a few manual examples, plus the standard few for zero
results.

Seems to work OK in Safari, Firefox (Windows & Mac) and IE.
*************** Sample stuff ***************

<table style="border-collapse: collapse;">
<tr>
<td style="background-color: #D8DFE0; text-align: center;
vertical-align: top;">
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj(2);
" value="Determinant 2x2"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj(3);
" value="Determinant 3x3"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj(4);
" value="Determinant 4x4"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj(5);
" value="Determinant 5x5"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj('5a');
" value="Determinant 5x5 a"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj('5b');
" value="Determinant 5x5 b"><br>
<input type="button" onclick="
document.getElementById('result').innerHTML = showObj('5c');
" value="Determinant 5x5 c"><br>
</td>
<td style="width: 20em; height: 15em; background-color: #D8DFE0;
text-align: center; vertical-align: top;">
<span id="result" style="vertical-align: top;"></span>
</td>
</tr>
</table>
******** SCRIPT *******

// Just for testing

function showObj(x){

var ob2 = []
ob2[0] = [ 1, 2 ]
ob2[1] = [ 3, 4 ]

var ob3 = []
ob3[0] = [ 1, 2, 3 ]
ob3[1] = [ 4, 5, 6 ]
ob3[2] = [ 7, 8, 9 ]

var ob4 = []
ob4[0] = [ 1, 2, 3, 3 ]
ob4[1] = [ 4, 5, 6, 1 ]
ob4[2] = [ 7, 8, 9, 2 ]
ob4[3] = [ 1, 1, 2, 3 ]

var ob5 = []
ob5[0] = [ 1, 0, 4, -2, 0 ]
ob5[1] = [ 4, 1, 6, -2, 0 ]
ob5[2] = [ 0, 7, 1, 0, -7 ]
ob5[3] = [ 0, -6, 8, 1, 0 ]
ob5[4] = [ -9, 0, 0, 5, 1 ]

// 5x5 with column of zeros: - det = 0
var ob5a = []
ob5a[0] = [ 1, 0, 0, 6, 0 ]
ob5a[1] = [ 4, 1, 0, -2, 0 ]
ob5a[2] = [ 0, 7, 0, 0, -7 ]
ob5a[3] = [ 0, -6, 0, 1, 0 ]
ob5a[4] = [ -9, 0, 0, 5, 1 ]

var ob5b = []
ob5b[0] = [ 1, 0, 4, -2, 0 ]
ob5b[1] = [ 4, 1, 6, -2, 0 ]
ob5b[2] = [ 0, 0, 0, 0, 0 ] // row of zeros: - det = 0
ob5b[3] = [ 0, -6, 8, 1, 0 ]
ob5b[4] = [ -9, 0, 0, 5, 1 ]

var ob5c = []
ob5c[0] = [ 1, 0, 4, -2, 0 ]
ob5c[1] = [ 4, 1, 6, -2, 0 ]
ob5c[2] = [ 0, 7, 1, 0, -7 ]
ob5c[3] = [ 0, -6, 8, 1, 0 ]
ob5c[4] = [ 0, -6, 8, 1, 0 ] // identical row: det = 0
if ( 2 == x ) {
return '<b>2x2</b><br>'+ob2.join('<br>')+'<br>'+det(ob2);

} else if ( 3 == x) {
return '<b>3x3</b><br>'+ob3.join('<br>')+'<br>'+det(ob3);
} else if ( 4 == x) {
return '<b>4x4</b><br>'+ob4.join('<br>') +'<br>'+det(ob4);
} else if ( 5 == x) {
return '<b>5x5</b><br>'+ob5.join('<br>') +'<br>'+det(ob5);
} else if ( '5a' == x) {
return '<b>5x5 (column of zeros)</b><br>'
+ ob5a.join('<br>') + '<br>' + det(ob5a);
} else if ( '5b' == x) {
return '<b>5x5 (row of zeros)</b><br>'
+ ob5b.join('<br>') + '<br>' + det(ob5b);
} else if ( '5c' == x) {
return '<b>5x5 (identical row)</b><br>'
+ ob5c.join('<br>') + '<br>' + det(ob5c);
}
}

<script type="text/javascript">
/* det()
Finds the determinant of a square matrix using determinant
expansion by minors (or "Laplacian expansion by minors,"
or sometimes "Laplacian expansion")

if A = | a1 a2 |
| b1 b2 |

detA = a1.b2 - a2.b1

if A = | a1 a2 a3 |
| b1 b2 b3 |
| c1 c2 c3 |

detA = a1(b2.c3 - b3.c2) - a2(b1.c3 - b3.c1) + a3(b1.c2 - b2.c1)
= a1.b2.c3 - a1.b3.c2 - a2.b1.c3 + a2.b3.c1
+ a3.b1.c2 - a3.b2.c1
etc.

Information derived from the Wolfram site:
http://mathworld.wolfram.com/Determinant.html
*/

// Doesn't check squareness or size
function det(a) {
var i = a[0].length;
if ( 2 == i ) { // det of 2x2
return +a[0][0]*a[1][1] - +a[0][1]*a[1][0];
} else {
var x=0;
var j=0;
do {
if ( 0 != +a[0][j] ) { // Speed opt - don't do if factor is 0
if (j%2) { // add even columns, subtract odd
x -= a[0][j] * det( minor(a, j) );
} else {
x += a[0][j] * det( minor(a, j) );
}
}
} while ( ++j < i )
return x;
}
}

// Returns the i-th minor of square matrix b
// remove top row, remove i-th element of remaining rows
// Doesn't check squareness or size
function minor(A, i){
var B = [];
var k, n, j=1; // Skip first row of A
do {
k=0; // A column
n=0; // B column
B[j-1] = []; // New row for B
do {
if ( k != i ) { // Skip i-th element
B[j-1][n++] = A[j][k];
}
} while ( undefined != A[j][++k] )
} while ( A[++j] )
return B;
}
</script>

Jul 23 '05 #6
JRS: In article <y%******************@twister.nyroc.rr.com>, dated Fri,
27 May 2005 22:17:02, seen in news:comp.lang.javascript, Mick White
<mw***********@rochester.rr.com> posted :
Lines: 238 RobG wrote:
Mick White wrote:
RobG wrote:
I was playing with matrices and wrote a routine to return the minor
matrix if given a matrix and index. The minor is the matrix given by
removing the first row and i-th column.


[...]


I'll check ot out, Rob.
Mick

<script type="text/javascript">

.... :-(


--
© John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 MIME ©
Web <URL:http://www.uwasa.fi/~ts/http/tsfaq.html> -> Timo Salmi: Usenet Q&A.
Web <URL:http://www.merlyn.demon.co.uk/news-use.htm> : about usage of News.
No Encoding. Quotes before replies. Snip well. Write clearly. Don't Mail News.
Jul 23 '05 #7
Mick White wrote:
RobG wrote:
You need to copy "A", B=A.slice(0);Mick


Nope, doesn't work. It's effectively the same as copying the rows to
the new matrix, then slicing them - the original matrix is mangled.


var a = [0, 1, 2, 3];
var b = a.slice(1);
alert(b); // 1,2,3
delete a[2];
alert([a, b].join("|")); // 0,1,,3|1,2,3

So:

function Matrix(A)
{
this.matrix = [0];

if (A)
{
for (var i = A.length; i--;)
{
var row = A[i];
this.matrix[i] = [];
for (var j = row.length; j--;)
{
this.matrix[i][j] = row[j];
}
}
}
}

Matrix.prototype = {
toString: function matrix_toString(A)
{
if (!A)
{
A = this;
}

if ((A = A.matrix))
{
var as = [];

for (var i = 0, len = A.length; i < len; i++)
{
var row = A[i];
as[i] = row.join(" ");
}
}

return as.join("\n");
},

minor: function matrix_minor(i, A)
{
if (!A)
{
A = this;
}

if ((A = A.matrix))
{
A = new Matrix(A);
A.matrix = A.matrix.slice(1);
for (var m, j = (m = A.matrix).length; j--;)
{
m[j].splice(i, 1);
}
}

return A;
}
};

var A = new Matrix([[0, 1, 2], [3, 4, 5], [6, 7, 8]]);
alert([A, A.minor(1)].join("\n___\n"));
PointedEars
Jul 23 '05 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

11
by: Nicolas Lehuen | last post by:
Hi, I hope this is not a FAQ, but I have trouble understanding the behaviour of the super() built-in function. I've read the excellent book 'Python in a Nutshell' which explains this built-in...
45
by: Jordan Rastrick | last post by:
Can anybody please give me a decent justification for this: class A(object): def __init__(self, a): self.a = a def __eq__(self, other): return self.a == other.a s = A(3)
2
by: Matt | last post by:
I'm new to Java but experienced with PL/SQL. I've found what appears to be strange behaviour (a bug?) when attempting to create java stored objects using the UNIX version of Oracle SQL*PLUS...
4
by: gautam | last post by:
can anyone pls tell me y is the memory allocation not alligned to 4 Bytes. Note : compiled with gcc in linux 9 void function(int a,int b,int c) { char buffer1; Bytes allocated(as shown by gdb)...
4
by: Sean Hammond | last post by:
I've managed to create a scenario in which editing an object in a list of objects seems to edit every object in the list, rather than just the one. I'm totally stumped and wondered if anyone would...
9
by: horizon5 | last post by:
Hi, my collegues and I recently held a coding style review. All of the code we produced is used in house on a commerical project. One of the minor issues I raised was the common idiom of...
9
by: Fijoy George | last post by:
Hi all, I am a bit perplexed by the following behaviour of the 'is' comparator False True My understanding was that every literal is a constructure of an object. Thus, the '2.' in 'x = 2.'...
1
by: sachingoel82 | last post by:
Hi All, I find following C++ behaviour regarding temporary objects quite contradictory. Consider this: class A { ... public:
3
by: rs387 | last post by:
Hi, I've found the following behaviour on importing a variable from a module somewhat odd. The behaviour is identical in Python 2.5 and 3.0b2. In summary, here's what happens. I have a...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.