473,398 Members | 2,120 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,398 software developers and data experts.

regarding Audio::wave

Hi

I am working telcom domain project where i have to record the voice and playback it.From google i got a code suitable to my project.I did updations added and installed few modules .I installed IO::module for getline function .after installing that am getting as "spiffy constructor 'io'"error ...........and string found where operator expected in io::all...."\...\all.pm"
please guys help to solve this problem
Mar 18 '08 #1
4 1434
numberwhun
3,509 Expert Mod 2GB
Hi

I am working telcom domain project where i have to record the voice and playback it.From google i got a code suitable to my project.I did updations added and installed few modules .I installed IO::module for getline function .after installing that am getting as "spiffy constructor 'io'"error ...........and string found where operator expected in io::all...."\...\all.pm"
please guys help to solve this problem
Can you post your code here and also, please post exactly what was output to the screen or log file?

Thanks,

Jeff
Mar 18 '08 #2
post the script... give the error print....
Mar 18 '08 #3
Hi,
#
# $Id: Vgetty.pm,v 1.2 1998/07/11 20:33:19 kas Exp $
#
# Copyright (c) 1998 Jan "Yenya" Kasprzak <kas@fi.muni.cz>. All rights
# reserved. This package is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#

package Modem::Vgetty;

use FileHandle;
use POSIX;
use strict;

use Carp;

use vars qw($testing $log_file $VERSION);

$VERSION='0.01';
$testing = 0;
$log_file = '/var/log/voicelog';

my @event_names = qw(BONG_TONE BUSY_TONE CALL_WAITING DIAL_TONE
DATA_CALLING_TONE DATA_OR_FAX_DETECTED FAX_CALLING_TONE
HANDSET_ON_HOOK LOOP_BREAK LOOP_POLARITY_CHANGE NO_ANSWER
NO_DIAL_TONE NO_VOICE_ENERGY RING_DETECTED RINGBACK_DETECTED
RECEIVED_DTMF SILENCE_DETECTED SIT_TONE TDD_DETECTED
VOICE_DETECTED UNKNOWN_EVENT);



sub new {
my ($class, $infd, $outfd, $pid) = @_;
my $self = bless {}, $class;

$infd ||= $ENV{'VOICE_INPUT'};
$outfd ||= $ENV{'VOICE_OUTPUT'};
$pid ||= $ENV{'VOICE_PID'};


$self->{'IN'} = FileHandle->new_from_fd( $infd, "r" )
|| return;
$self->{'OUT'} = FileHandle->new_from_fd( $outfd, "w" )
|| return;
$self->{'IN'}->autoflush;
$self->{'OUT'}->autoflush;

$self->{'PIPE_BUF_LEN'} = POSIX::_POSIX_PIPE_BUF ;

$self->{'PID'} = $pid;
$self->{'LOG'} = FileHandle->new();

if ($testing > 0) {
$self->{'LOG'}->open(">>$log_file") || return undef;
$self->{'LOG'}->autoflush;
$self->{'LOG'}->print("-----------\n### Pid $$ opening log\n----------\n");
}
$self->{'EVENTS'} = { map { $_ => {} } @event_names };

$self->init();

return $self;

}


# The basic two functions (a low-level interface);
sub receive {
my $self = shift;
my $input;
while(1) {
$input = $self->{IN}->getline;
chomp $input;
$self->{LOG}->print("received: $input\n") if $testing > 0;
last unless defined $self->{EVENTS}->{$input};
# Handle the event:
my $dtmf = '';
if ($input eq 'RECEIVED_DTMF') {
$dtmf = $self->{IN}->getline;
chomp $dtmf;
$self->{LOG}->print("DTMF $dtmf\n") if $testing > 0;
}
for (keys %{$self->{EVENTS}->{$input}}) {
$self->{LOG}->print("Running handler $_ for event $input\n") if $testing > 0;
&{$self->{EVENTS}->{$input}->{$_}}($self, $input, $dtmf);
$self->{LOG}->print("Handler $_ for event $input finished.\n") if $testing > 0;
}
}
$input;
}

sub send {
my $self = shift;
my $output = shift;
$self->{OUT}->print("$output\n");
kill PIPE => $self->{PID};
$self->{LOG}->print("sent: $output\n") if $testing > 0;
}

sub expect {
my $self = shift;
$self->{LOG}->print("expecting: ", (join '|', @_), "\n");
my $received = $self->receive || return undef;
for my $expected (@_) {
return $received if $received eq $expected;
}
return undef;
}

sub waitfor {
my $self = shift;
my $string = shift;
while ($self->expect($string) ne $string) { }
}

sub chat {
my $self = shift;
my @chatscript = @_;
my $received = 0;
for my $cmd (@chatscript) {
$received = 1 ^ $received;
next if $cmd eq '';
if ($received == 1) {
return undef unless $self->expect($cmd);

} else {
$self->send($cmd);
}
}
return 1;
}

# Initial chat
sub init {
my $self = shift;
# $self->chat ('HELLO SHELL', 'HELLO VOICE PROGRAM', 'READY');
$self->chat ('HELLO SHELL', 'HELLO VOICE PROGRAM');

return $self;
}

# Setting the voice device
$dev = undef;
sub device {
my $self = shift;
my $dev = shift;
$self->{LOG}->print("attempting to set device $dev") if $testing;
$self->chat ('', "DEVICE $dev", 'READY') || return undef;
$self->{DEVICE}=$dev;
$self->{LOG}->print("sucessfully set device $dev") if $testing;
}

sub shutdown {
my $self = shift;
$self->chat ('', 'GOODBYE', 'GOODBYE SHELL');
$self->{IN}->close;
$self->{OUT}->close;
$self->{LOG}->close if $testing > 0;
}

sub DESTROY {
my $self = shift;
$self->shutdown;
}

sub enable_events {
my $self = shift;
$self->chat ('', 'ENABLE EVENTS', 'READY');
}

sub disable_events {
my $self = shift;
$self->chat ('', 'DISABLE EVENTS', 'READY');
}

sub beep {
my $self = shift;
my $freq = shift;
my $len = shift;
$self->chat ('', "BEEP $freq $len", 'BEEPING');
}

sub dial {
my $self = shift;
my $num = shift;
$self->chat ('', "DIAL $num", 'DIALING');
}

sub getty {
my $self = shift;
$self->chat ('', 'GET TTY') || return undef;
my $id = $self->receive;
$self->expect ('READY') || return undef;
return $id;
}

sub autostop {
my $self = shift;
my $arg = shift;
$self->chat ('', "AUTOSTOP $arg", 'READY');
}

sub play {
my $self = shift;
my $file = shift;
$self->chat ('', "PLAY $file", 'PLAYING');
}

sub record {
my $self = shift;
my $file = shift;
$self->chat ('', "RECORD $file", 'RECORDING');
}

sub wait {
my $self = shift;
my $sec = shift;
$self->chat ('', "WAIT $sec", 'WAITING');
}

sub stop {
my $self = shift;
$self->send ('STOP'); # Nechceme READY.
}

sub add_handler {
my $self = shift;
my $event = shift;
my $name = shift;
my $func = shift;
if (!defined($self->{EVENTS}->{$event})) {
$self->{LOG}->print("add_handler: unknown event $event\n")
if $testing > 0;
return undef;
}
$self->{EVENTS}->{$event}->{$name} = $func;
}

sub del_handler {
my $self = shift;
my $event = shift;
my $name = shift;
if (!defined($self->{EVENTS}->{$event})) {
$self->{LOG}->print("del_handler: unknown event $event\n")
if $testing > 0;
return undef;
}
if (!defined($self->{EVENTS}->{$event}->{$name})) {
$self->{LOG}->print("del_handler: trying to delete nonexistent handler $name\n")
if $testing > 0;
} else {
delete $self->{EVENTS}->{$event}->{$name};
}
}

sub play_and_wait {
my $self = shift;
my $file = shift;
$self->play($file);
$self->waitfor('READY');
}
1;

__END__

=head1 NAME

Modem::Vgetty - interface to vgetty(8)

=head1 SYNOPSIS

use Modem::Vgetty;
$v = new Modem::Vgetty;

$string = $v->receive;
$v->send($string);
$string = $v->expect($str1, $str2, ...);
$v->waitfor($string);
$rv = $v->chat($expect1, $send1, $expect2, $send2, ...);

$ttyname = $v->getty;
$rv = $v->device($dev_type);
$rv = $v->autostop($bool);

$rv = $v->beep($freq, $len);
$rv = $v->dial($number);
$rv = $v->play($filename);
$rv = $v->record($filename);
$rv = $v->wait($seconds);
$rv = $v->play_and_wait($filename);
$v->stop;

$v->add_handler($event, $handler_name, $handler);
$v->del_handler($event, $handler_name);
$v->enable_events;
$v->disable_events;

$v->shutdown;

=head1 DESCRIPTION

C<Modem::Vgetty> is an encapsulation object for writing applications
for voice modems using the L<vgetty/8> or L<vm/8> package. The answering
machines and sofisticated voice applications can be written using this
module.

=head1 OVERVIEW

I<Voice modem> is a special kind of modem, which (besides the normal
data and/or fax mode) can communicate also in voice mode. It means
it can record sounds it hears from the phone line to the file,
Play-back recorded files, it can beep to the line, and it can detect
various standard sounds coming from the line (busy tone, silence,
dual tone modulation frequency (DTMF) keypad tones, etc).
An example of the voice modem can be the ZyXEL U1496, US Robotics
Sportster (not Courier), etc.

To use this software with the voice modem you need to have the
L<vgetty/8> package installed. B<Vgetty> is distributed as a part of
B<mgetty> package. In fact, B<vgetty> is a L<mgetty/8> with the voice
extensions. Vgetty has some support for scripting - when it receives
an incoming call, it runs a voice shell (it is program specified in
the B<voice.conf> file) as its child process, establishes the read
and write pipes to it, and tells it the number of the appropriate
descriptors in the environment variables. Voice shell can now
communicate with B<vgetty>. It can tell B<vgetty> "Play this file",
or "Record anything you hear to that file", or "Notify me when
user hangs up", etc. Sophisticated voice systems and answering
machines can be build on top of B<vgetty>.

B<mgetty> (including the B<vgetty>) is available at
the following URL:

ftp://ftp.leo.org/pub/comp/os/unix/networking/mgetty/

Originally there was a (Bourne) shell interface to B<vgetty> only.
The B<Modem::Vgetty> module allows user to write the voice shell in Perl.
The typical use is to write a script and point the B<vgetty> to it
(in B<voice.conf> file). The script will be run when somebody calls in.
Another use is running voice shell from the L<vm/8> program, which
can for example dial somewhere and say something.

=head1 QUICK START

#!/usr/bin/perl
use Modem::Vgetty;
my $v = new Modem::Vgetty;
$v->add_handler('BUSY_TONE', 'endh', sub { $v->stop; exit(0); });
$v->enable_events;
$v->record('/tmp/hello.rmd');
sleep 20;
$v->stop;
$v->shutdown;

The above example installs the simple `exit now'-style handler for the
B<BUSY_TONE> event (which is sent by B<vgetty> when user hangs up)
and then records the B<hello.rmd> file. Put this text into a file
and then point B<vgetty> to it in the B<voice.conf>. After you dial into
your voice modem, you can record a 20-seconds of some message.
Verify that B</tmp/hello.rmd> exists. Now delete the line contaning
the word "record" and two subsequent lines and insert to the file
the following line instead of them:

$v->play_and_wait('/tmp/hello.rmd');

Now call the voice modem and listen to the sounds you have just recorded.


=head1 METHODS

=head2 Begin and end of communication

The B<Modem::Vgetty> object will initialize the communication pipes to
the B<vgetty> at the creation time - in the constructor. The closing
of the communication is done via the B<shutdown> method:

$v->shutdown;

The module will call this method itself from the destructor, if you do
not call it explicitly.

=head2 Low-level communication
Mar 19 '08 #4
Hi rohitbasu77,

#
# $Id: Vgetty.pm,v 1.2 1998/07/11 20:33:19 kas Exp $
#
# Copyright (c) 1998 Jan "Yenya" Kasprzak <kas@fi.muni.cz>. All rights
# reserved. This package is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#

package Modem::Vgetty;

use FileHandle;
use POSIX;
use strict;

use Carp;

use vars qw($testing $log_file $VERSION);

$VERSION='0.01';
$testing = 0;
$log_file = '/var/log/voicelog';

my @event_names = qw(BONG_TONE BUSY_TONE CALL_WAITING DIAL_TONE
DATA_CALLING_TONE DATA_OR_FAX_DETECTED FAX_CALLING_TONE
HANDSET_ON_HOOK LOOP_BREAK LOOP_POLARITY_CHANGE NO_ANSWER
NO_DIAL_TONE NO_VOICE_ENERGY RING_DETECTED RINGBACK_DETECTED
RECEIVED_DTMF SILENCE_DETECTED SIT_TONE TDD_DETECTED
VOICE_DETECTED UNKNOWN_EVENT);



sub new {
my ($class, $infd, $outfd, $pid) = @_;
my $self = bless {}, $class;

$infd ||= $ENV{'VOICE_INPUT'};
$outfd ||= $ENV{'VOICE_OUTPUT'};
$pid ||= $ENV{'VOICE_PID'};


$self->{'IN'} = FileHandle->new_from_fd( $infd, "r" )
|| return;
$self->{'OUT'} = FileHandle->new_from_fd( $outfd, "w" )
|| return;
$self->{'IN'}->autoflush;
$self->{'OUT'}->autoflush;

$self->{'PIPE_BUF_LEN'} = POSIX::_POSIX_PIPE_BUF ;

$self->{'PID'} = $pid;
$self->{'LOG'} = FileHandle->new();

if ($testing > 0) {
$self->{'LOG'}->open(">>$log_file") || return undef;
$self->{'LOG'}->autoflush;
$self->{'LOG'}->print("-----------\n### Pid $$ opening log\n----------\n");
}
$self->{'EVENTS'} = { map { $_ => {} } @event_names };

$self->init();

return $self;

}


# The basic two functions (a low-level interface);
sub receive {
my $self = shift;
my $input;
while(1) {
$input = $self->{IN}->getline;
chomp $input;
$self->{LOG}->print("received: $input\n") if $testing > 0;
last unless defined $self->{EVENTS}->{$input};
# Handle the event:
my $dtmf = '';
if ($input eq 'RECEIVED_DTMF') {
$dtmf = $self->{IN}->getline;
chomp $dtmf;
$self->{LOG}->print("DTMF $dtmf\n") if $testing > 0;
}
for (keys %{$self->{EVENTS}->{$input}}) {
$self->{LOG}->print("Running handler $_ for event $input\n") if $testing > 0;
&{$self->{EVENTS}->{$input}->{$_}}($self, $input, $dtmf);
$self->{LOG}->print("Handler $_ for event $input finished.\n") if $testing > 0;
}
}
$input;
}

sub send {
my $self = shift;
my $output = shift;
$self->{OUT}->print("$output\n");
kill PIPE => $self->{PID};
$self->{LOG}->print("sent: $output\n") if $testing > 0;
}

sub expect {
my $self = shift;
$self->{LOG}->print("expecting: ", (join '|', @_), "\n");
my $received = $self->receive || return undef;
for my $expected (@_) {
return $received if $received eq $expected;
}
return undef;
}

sub waitfor {
my $self = shift;
my $string = shift;
while ($self->expect($string) ne $string) { }
}

sub chat {
my $self = shift;
my @chatscript = @_;
my $received = 0;
for my $cmd (@chatscript) {
$received = 1 ^ $received;
next if $cmd eq '';
if ($received == 1) {
return undef unless $self->expect($cmd);

} else {
$self->send($cmd);
}
}
return 1;
}

# Initial chat
sub init {
my $self = shift;
# $self->chat ('HELLO SHELL', 'HELLO VOICE PROGRAM', 'READY');
$self->chat ('HELLO SHELL', 'HELLO VOICE PROGRAM');

return $self;
}

# Setting the voice device
$dev = undef;
sub device {
my $self = shift;
my $dev = shift;
$self->{LOG}->print("attempting to set device $dev") if $testing;
$self->chat ('', "DEVICE $dev", 'READY') || return undef;
$self->{DEVICE}=$dev;
$self->{LOG}->print("sucessfully set device $dev") if $testing;
}

sub shutdown {
my $self = shift;
$self->chat ('', 'GOODBYE', 'GOODBYE SHELL');
$self->{IN}->close;
$self->{OUT}->close;
$self->{LOG}->close if $testing > 0;
}

sub DESTROY {
my $self = shift;
$self->shutdown;
}

sub enable_events {
my $self = shift;
$self->chat ('', 'ENABLE EVENTS', 'READY');
}

sub disable_events {
my $self = shift;
$self->chat ('', 'DISABLE EVENTS', 'READY');
}

sub beep {
my $self = shift;
my $freq = shift;
my $len = shift;
$self->chat ('', "BEEP $freq $len", 'BEEPING');
}

sub dial {
my $self = shift;
my $num = shift;
$self->chat ('', "DIAL $num", 'DIALING');
}

sub getty {
my $self = shift;
$self->chat ('', 'GET TTY') || return undef;
my $id = $self->receive;
$self->expect ('READY') || return undef;
return $id;
}

sub autostop {
my $self = shift;
my $arg = shift;
$self->chat ('', "AUTOSTOP $arg", 'READY');
}

sub play {
my $self = shift;
my $file = shift;
$self->chat ('', "PLAY $file", 'PLAYING');
}

sub record {
my $self = shift;
my $file = shift;
$self->chat ('', "RECORD $file", 'RECORDING');
}

sub wait {
my $self = shift;
my $sec = shift;
$self->chat ('', "WAIT $sec", 'WAITING');
}

sub stop {
my $self = shift;
$self->send ('STOP'); # Nechceme READY.
}

sub add_handler {
my $self = shift;
my $event = shift;
my $name = shift;
my $func = shift;
if (!defined($self->{EVENTS}->{$event})) {
$self->{LOG}->print("add_handler: unknown event $event\n")
if $testing > 0;
return undef;
}
$self->{EVENTS}->{$event}->{$name} = $func;
}

sub del_handler {
my $self = shift;
my $event = shift;
my $name = shift;
if (!defined($self->{EVENTS}->{$event})) {
$self->{LOG}->print("del_handler: unknown event $event\n")
if $testing > 0;
return undef;
}
if (!defined($self->{EVENTS}->{$event}->{$name})) {
$self->{LOG}->print("del_handler: trying to delete nonexistent handler $name\n")
if $testing > 0;
} else {
delete $self->{EVENTS}->{$event}->{$name};
}
}

sub play_and_wait {
my $self = shift;
my $file = shift;
$self->play($file);
$self->waitfor('READY');
}
1;

__END__

=head1 NAME

Modem::Vgetty - interface to vgetty(8)

=head1 SYNOPSIS

use Modem::Vgetty;
$v = new Modem::Vgetty;

$string = $v->receive;
$v->send($string);
$string = $v->expect($str1, $str2, ...);
$v->waitfor($string);
$rv = $v->chat($expect1, $send1, $expect2, $send2, ...);

$ttyname = $v->getty;
$rv = $v->device($dev_type);
$rv = $v->autostop($bool);

$rv = $v->beep($freq, $len);
$rv = $v->dial($number);
$rv = $v->play($filename);
$rv = $v->record($filename);
$rv = $v->wait($seconds);
$rv = $v->play_and_wait($filename);
$v->stop;

$v->add_handler($event, $handler_name, $handler);
$v->del_handler($event, $handler_name);
$v->enable_events;
$v->disable_events;

$v->shutdown;

=head1 DESCRIPTION

C<Modem::Vgetty> is an encapsulation object for writing applications
for voice modems using the L<vgetty/8> or L<vm/8> package. The answering
machines and sofisticated voice applications can be written using this
module.

=head1 OVERVIEW

I<Voice modem> is a special kind of modem, which (besides the normal
data and/or fax mode) can communicate also in voice mode. It means
it can record sounds it hears from the phone line to the file,
Play-back recorded files, it can beep to the line, and it can detect
various standard sounds coming from the line (busy tone, silence,
dual tone modulation frequency (DTMF) keypad tones, etc).
An example of the voice modem can be the ZyXEL U1496, US Robotics
Sportster (not Courier), etc.

To use this software with the voice modem you need to have the
L<vgetty/8> package installed. B<Vgetty> is distributed as a part of
B<mgetty> package. In fact, B<vgetty> is a L<mgetty/8> with the voice
extensions. Vgetty has some support for scripting - when it receives
an incoming call, it runs a voice shell (it is program specified in
the B<voice.conf> file) as its child process, establishes the read
and write pipes to it, and tells it the number of the appropriate
descriptors in the environment variables. Voice shell can now
communicate with B<vgetty>. It can tell B<vgetty> "Play this file",
or "Record anything you hear to that file", or "Notify me when
user hangs up", etc. Sophisticated voice systems and answering
machines can be build on top of B<vgetty>.

B<mgetty> (including the B<vgetty>) is available at
the following URL:

ftp://ftp.leo.org/pub/comp/os/unix/networking/mgetty/

Originally there was a (Bourne) shell interface to B<vgetty> only.
The B<Modem::Vgetty> module allows user to write the voice shell in Perl.
The typical use is to write a script and point the B<vgetty> to it
(in B<voice.conf> file). The script will be run when somebody calls in.
Another use is running voice shell from the L<vm/8> program, which
can for example dial somewhere and say something.

=head1 QUICK START

#!/usr/bin/perl
use Modem::Vgetty;
my $v = new Modem::Vgetty;
$v->add_handler('BUSY_TONE', 'endh', sub { $v->stop; exit(0); });
$v->enable_events;
$v->record('/tmp/hello.rmd');
sleep 20;
$v->stop;
$v->shutdown;

The above example installs the simple `exit now'-style handler for the
B<BUSY_TONE> event (which is sent by B<vgetty> when user hangs up)
and then records the B<hello.rmd> file. Put this text into a file
and then point B<vgetty> to it in the B<voice.conf>. After you dial into
your voice modem, you can record a 20-seconds of some message.
Verify that B</tmp/hello.rmd> exists. Now delete the line contaning
the word "record" and two subsequent lines and insert to the file
the following line instead of them:

$v->play_and_wait('/tmp/hello.rmd');

Now call the voice modem and listen to the sounds you have just recorded.


=head1 METHODS

=head2 Begin and end of communication

The B<Modem::Vgetty> object will initialize the communication pipes to
the B<vgetty> at the creation time - in the constructor. The closing
of the communication is done via the B<shutdown> method:

$v->shutdown;

The module will call this method itself from the destructor, if you do
not call it explicitly.

=head2 Low-level communication
Mar 19 '08 #5

Sign in to post your reply or Sign up for a free account.

Similar topics

8
by: LG | last post by:
Just have a question with regards to the clipboard, and how to read what other applications (Adobe InDesignCS) place in the clipboard. I am currently in the process of creating a booklet from a...
3
by: Kelvin Chu | last post by:
Hello, Python Wizards... I'm trying to use Python to write an aiff file. I've used the aifc module and I've set the parameters (# of channels, encoding rate, compression, etc.) What does raw...
0
by: Paul van der Heu | last post by:
I hope I've come to the right place..;^) For an app I am writing I need to create a list of available audio devices and display them in a combobox.. Displaying them is no problem, but I cannot...
2
by: Jo Chase | last post by:
I would like to record audio from a mic and perform some basic analysis on the audio wave patterns produced. What would be the easiest way to accomplish this in Python?
0
by: MarcoMB | last post by:
Can someone explain or help me to find some tutorial and sample apps about API for creating an application that implements a VU METER for audio wave soundcard device?What API win32 and algorithms i...
6
by: homevista | last post by:
PART III: Putting things together In part I we examined the modem to verify that it supported voice. If so, we took a note about the voice data format that we would use. In the second part, we...
0
luke14free
by: luke14free | last post by:
Hello, I'm doing a project for a physics project and having some problem doing it. What I exactly need to do is to gain some audio from a microphone, analyze it and take its wave. Then i'd have to...
0
by: mailtosantoshkumar | last post by:
Hi to all, I have problem with how to converting a DSS audio file format to wave format in dotnet. I have a Olympus DSS but i cant able to access the exe as well as dll which they in that...
1
by: madhurathod | last post by:
Please help me guys this is the error am getting while executing my script.... Anybody please help me to solve this Can't locate Modem/Vgetty.pm in @INC (@INC contains: D:/Perl/lib...
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
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
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
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,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

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.