quinta-feira, 26 de março de 2009

iMasters Fóruns > Internet via Celular

iMasters Fóruns > Internet via Celular: "*99#
*99***1#

Clique em avançar.
O nome de usuario e senha variam conforme a operadora.
Eis os nomes:
Operadora claro
Usuario:claro
Senha:claro

Operadora TIM
Usuario:tim
Senha:tim

Obs.: Atentem que o usuario e senha estão em minúsculo.

Alguns telefones precisam de um script para inicialização para o modem:

AT+CGDCONT=1,'IP','tim.br'"

terça-feira, 24 de março de 2009

sexta-feira, 20 de março de 2009

Configuração dos parâmetros das APN's (Access Point Name - nome dos pontos
de
acesso) da VIVO, para serviços de dados
Todas estas configurações já vêm pré-carregadas em seu celular VIVO, e sem
elas não é
possível utilizar ou acessar serviços como:
- Vivo WAP
- Vivo Foto/Video Torpedo
- Vivo Play
- Vivo ZAP
No caso de o celular ter sido adquirido em outra operadora, outro país ou em
um caso
onde os parâmetros de configuração de rede tenham que ser inseridos
manualmente,
você deve usar os seguintes valores:
- Vivo WAP e Foto/Video Torpedo para aparelhos com suporte ao protocolo WAP
1.x
Pode-se verificar se o telefone suporta protocolo WAP 1.x ou WAP 2.0 nas
especificações
do mesmo, junto ao fabricante do aparelho.
Vivo WAP
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, para
acesso ao
WAP gateway.
Nome da conexão: Vivo WAP
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Usuário: vivo
Senha: vivo
Pedir senha: Não
Autenticação: PAP (Normal)
Endereço IP do Proxy: 200.142.130.166
Porta: 9203 (Sessão segura e com conexão permanente)
Página Inicial: http://termwapgsm1x.vivo.com.br
Vivo Foto/Video Torpedo
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, com
acesso ao WAP
gateway e plataforma para serviços MMS.
Nome da Conexão: Vivo MMS
Nome do Ponto de Acesso (APN): mms.vivo.com.br
Usuário: vivo
Senha: vivo
Endereço IP do Proxy: 200.142.130.166
Porta: 9203
MMSC URL: http://termnat.vivomms.com.br:8088/mms
- Vivo WAP e Foto/Vídeo Torpedo para aparelhos com suporte ao protocolo WAP
2.x
Pode-se verificar se o telefone suporta protocolo WAP 1.x ou WAP 2.0 nas
especificações
do mesmo, junto ao fabricante do aparelho.
Vivo WAP
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, para
acesso ao
WAP gateway.
Nome da conexão: Vivo WAP
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Usuário: vivo
Senha: vivo
Pedir senha: Não
Autenticação: PAP (Normal)
Endereço IP do Proxy: 200.142.130.104
Porta: 80
Página Inicial: http://termwapgsm2.vivo.com.br
Vivo Foto/Video Torpedo
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, com
acesso ao WAP
gateway e plataforma para serviços MMS.
Nome da Conexão: Vivo MMS
Nome do Ponto do Acesso (APN): mms.vivo.com.br
Usuário: vivo
Senha: vivo
Autenticação: PAP (Normal)
Endereço IP do Proxy: 200.142.130.104
Porta: 80
MMSC URL: http://termnat.vivomms.com.br:8088/mms
- Vivo Play
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, para
streaming de
conteúdos, utilizando as portas:
TCP:554
UDP: de 1024 a 65000
Nome da Conexão: Vivo Play
Nome do Ponto de Acesso (APN): play.vivo.com.br
Usuário: vivo
Senha: vivo
Autenticação: PAP (Normal)
Endereço de Proxy: Não utilizar proxy
- Vivo ZAP
Esta conexão recebe um IP público, para acesso direto à internet.
Nome da conexão: Vivo ZAP
Nome do Ponto de Acesso (APN): zap.vivo.com.br
Usuário: vivo
Senha: vivo
Autenticação: PAP (Normal)
Endereço de Proxy: Não utilizar proxy

Fonte: Site Vivo http://www.vivo.com.br

Parâmetros VIVO para terminais GSM GPRS/EDGE
Configuração dos parâmetros das APN’s (Access Point Name – nome dos pontos de acesso) da VIVO,
para serviços de dados
Todas estas configurações já vêm pré-carregadas em seu celular VIVO, e sem elas não é
possível utilizar ou acessar serviços como:
- Vivo WAP
- Vivo Foto/Video Torpedo
- Vivo Play
- Vivo ZAP
No caso de o celular ter sido adquirido em outra operadora, outro país ou em um caso
onde os parâmetros de configuração de rede tenham que ser inseridos manualmente,
você deve usar os seguintes valores:
- Vivo WAP e Foto/Video Torpedo para aparelhos com suporte ao protocolo WAP 1.x
Pode-se verificar se o telefone suporta protocolo WAP 1.x ou WAP 2.0 nas especificações
do mesmo, junto ao fabricante do aparelho.
Vivo WAP
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, para acesso ao
WAP gateway.
Nome da conexão: Vivo WAP
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Usuário: vivo
Senha: vivo
Pedir senha: Não
Autenticação: PAP (Normal)
Endereço IP do Proxy: 200.142.130.166
Porta: 9201 (Sessão segura e com conexão permanente)
Página Inicial: http://termwapgsm1x.vivo.com.br
Vivo Foto/Video Torpedo
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, com acesso ao WAP
gateway e plataforma para serviços MMS.
Nome da Conexão: Vivo MMS
Nome do Ponto de Acesso (APN): mms.vivo.com.br
Usuário: vivo
Senha: vivo
Endereço IP do Proxy: 200.142.130.166
Porta: 9201
MMSC URL: http://termnat.vivomms.com.br:8088/mms
Vivo JAVA
Esta conexão recebe um IP privado.
Nome da conexão: Vivo Java
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Endereço de Proxy: 200.142.130.166
Porta: 9201
- Vivo WAP e Foto/Vídeo Torpedo para aparelhos com suporte ao protocolo WAP 2.x
Pode-se verificar se o telefone suporta protocolo WAP 1.x ou WAP 2.0 nas especificações
do mesmo, junto ao fabricante do aparelho.
Vivo WAP
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, para acesso ao
WAP gateway.
Nome da conexão: Vivo WAP
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Usuário: vivo
Senha: vivo
Pedir senha: Não
Autenticação: PAP (Normal)
Endereço IP do Proxy: 200.142.130.104
Porta: 80
Página Inicial: http://termwapgsm2.vivo.com.br
Vivo Foto/Video Torpedo
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, com acesso ao WAP
gateway e plataforma para serviços MMS.
Nome da Conexão: Vivo MMS
Nome do Ponto do Acesso (APN): mms.vivo.com.br
Usuário: vivo
Senha: vivo
Autenticação: PAP (Normal)
Endereço IP do Proxy: 200.142.130.104
Porta: 80
MMSC URL: http://termnat.vivomms.com.br:8088/mms
Vivo JAVA
Esta conexão recebe um IP privado.
Nome da conexão: Vivo Java
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Endereço de Proxy: 200.142.130.104
Porta: 80
Vivo Play
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, para streaming de
conteúdos, utilizando as portas:
TCP:554
UDP: de 1024 a 65000
Nome da Conexão: Vivo Play
Nome do Ponto de Acesso (APN): play.vivo.com.br
Usuário: vivo
Senha: vivo
Autenticação: PAP (Normal)
Endereço de Proxy: Não utilizar proxy
Vivo ZAP
Esta conexão recebe um IP público, para acesso direto à internet.
Nome da conexão: Vivo ZAP
Nome do Ponto de Acesso (APN): zap.vivo.com.br
Usuário: vivo
Senha: vivo
Autenticação: PAP (Normal)
Endereço de Proxy: Não utilizar proxy

Script paro o Vivo Zap no Linux (atualizado)

12/11/2008 – 14:05

As conexões móveis estão se tornando as sucessoras do acesso discado, no sentido de que estão disponíveis em praticamente qualquer lugar, atendendo até mesmo as áreas mais afastadas, onde outras modalidades de conexões não estão disponíveis, além de fazerem a alegria de quem precisa de uma conexão contínua em qualquer lugar para trabalhar ou manter contato com os amigos.

Embora existam muitas arestas a aparar, as conexões via 3G são bem suportadas no Linux, muito embora a configuração nem sempre seja tão simples quando poderia.

Uma avanço importante foi a adição do suporte a modems 3G no NetworkManager, que já está disponível para os usuários do Ubuntu 8.10. Ao plugar um modem compatível, ele pergunta se você quer configurar a conexão e a partir daí a opção da rede 3G fica disponível na lisa de redes, pronta para ser ativada quando necessário. Entretanto, o NetworkManager ainda não oferece suporte a conexões via Bluetooth e nem atende a usuários de todas as distribuições.

Recentemente, recebi alguns equipamentos da Vivo para testes (agradecimentos ao Átila e ao Celso), o que me permitiu elaborar um script de conexão cobrindo as principais formas de conexão usando um plano de dados no Linux. Usando o script você pode conectar usando:

1- Um modem USB (o script inclui regras para o udev e workarounds para ativar modems Huawei E156, Huawei E220/226 e Aiko 82D mesmo em distribuições antigas).
2- Um celular ou smartphone plugado na porta USB, sendo usado como modem. Nos Nokia você precisa apenas ligar o cabo e escolher o modo PC Suite.
2- Conexão via Bluetooth DUN (o modo de compartilhamento usado nos Nokia e na maioria dos outros aparelhos)
3- Conexão via Bluetooth PAN (o modo usado no Windows Mobile)

A conexão via modems USB é relativamente simples, mas as outras duas são um pouco mais complicadas, mas o script ajuda a configurar a conexão fazendo apenas algumas perguntas simples.

Intencionalmente, ele foi escrito usando uma interface o mais simples possível, utilizando apenas menus de texto, de forma a ser o mais compatível possível e rodar em qualquer distribuição sem a necessidade de instalar pacotes adicionais. Para as conexões via USB ele precisa apenas que o wvdial esteja instalado (e que o Kernel em uso ofereça suporte ao modem) e para as conexões via Bluetooth ele precisa também do bluez, que vem pré-instalado em quase todas as distribuições atuais.

Ele inclui também alguns workarounds para problemas comuns (como o ajuste da rota padrão) e mensagens explicativas para erros comuns.

Baixe aqui: http://www.gdhpress.com.br/blog/arquivos/vivozap.zip

O arquivo inclui o script "conectar-vivoza" original, juntamente com uma versão com codificação ISO-8859-1 (que você pode utilizar caso os caracteres acentuados estejam aparecendo trocados), o arquivo huawei.out, que é necessário para alguns modems e pacotes do wvdial para distribuições baseadas no Debian, que você pode utilizar caso não tenha outra conexão disponível para instalar via apt.

Para usar o script, valem os passos de sempre:

1- Baixe o arquivo .zip e descompacte-o (no Linux você pode descompactar usando o comando "unzip", como em "unzip vivozap.zip).

2- Acesse a pasta que será criada e, caso necessário, transforme o script em executável usando o comando "chmod +x", como em:
$ chmod +x conectar-vivozap

3- Logue-se como root usando o comando "su".

4- Execute o script, usando o "./conectar-vivozap" ou "sh conectar-vivozap":
# ./conectar-vivozap

Da primeira vez que é executado, o script faz as perguntas necessárias e gera um arquivo de configuração e a partir da segunda conexão ele conecta diretamente, usando a configuração anteriormente gerada. A idéia central é tornar a conexão o mais simples possível.

Se você está curioso em ver os passos que são executados pelo script, abra o arquivo usando um editor de textos, como o gedit ou o kwrite. O código está bem comentado.

Por enquanto o script funciona apenas quando executado diretamente como root, devido à necessidade de modificar a configuração do pppd e do bluetooth. Apesar do nome, ele pode ser usado também para conexões com outras operadoras, basta substituir a linha "vivomode="1" por "vivomode="0" no início do script. O arquivo foi gerado com codificação UTF-8 (que é usada por padrão no Ubuntu e na maioria das outras distribuições atuais. Se estiver vendo caracteres estranhos, baixe a versão alternativa com codificação ISO-8859-1 ou mude a codificação para UTF-8 nas configurações do terminal ou do editor de textos.

Para quem está curioso, aqui vai o "código fonte" do script (o Wordpress troca as aspas e alguns outro caracteres por causa do UTF-8, por isso não tente copiar o texto diretamente. Em vez disso, baixe usando o link acima).

#!/bin/sh
# Script para conectar no Vivo Zap usando um smartphone como modem
# Por Carlos E. Morimoto
# http://www.gdhpress.com.br
# http://www.guiadohardware.net
# Pode ser alterado e redistribuído livremente dentro dos termos da GPL
# Caracteres estranhos? Mude a codificação do editor para UTF-8# Mude de 1 para 0 para que o script pergunte qual operadora utilizar:
vivomode="1"# Ajusta o charset
export LANG=pt_BR.UTF-8
export CHARSET=UTF-8
clear
echo 'Este é um script para conectar no Vivo Zap usando um modem 3G USB ou um
smarthphone que permita o acesso via DUN ou PAN, via Bluetooth. Escrito por
Carlos Morimoto , em parceria com a Vivo.Versões atualizadas podem ser baixadas em:
http://www.gdhpress.com.br/blog/script-vivo-zap/
'
sleep 1

# Verifica se o script está sendo executado pelo root.
# Por enquanto ele não funciona através do sudo por causa do uso do echo para
# escrever em arquivos de configuração.
if [ "`id -u`" != "0" ]; then
echo 'Este script precisa ser executado como root. Digite "su -" para se logar
como root e execute o script novamente.
Se você está usando o Ubuntu, defina a senha de root usando o comando
"sudo passwd" e em seguida logue-se usando o "su -".
Para facilitar, você pode copiar este script para a pasta /usr/local/bin/, de
forma a não precisar mais executá-lo usando o caminho completo ou o ./
'
read pausa
exit 0
fi

# Funções usadas ao longo do scrip

bpairing()
{

# Fecha o kbluetoothd
killall kbluetoothd.real &>/dev/null

echo "Localizando aparelhos com bluetooth nas proximidades:"
echo "
hcitool scan
echo "
echo 'Digite o endereço do endereço bluetooth do seu aparelho, conforme mostrado
na lista acima (dica: você pode colar usando o botão do meio do mouse).
Se por acaso ele não aparecer, verifique se ele está configurado em modo
"Visível por todos", ou informe o endereço manualmente. Nos Nokia, você pode
descobrir o endereço do bluetooth digitando *#2820#.
Ex: 00:21:FE:CF:A2:E1'
read blueaddr
echo blueaddr=\"$blueaddr\" >> /home/$USER/.3gconfig

echo "
echo 'Testando a conexão com o smartphone'
l2ping -c 3 $blueaddr
echo "

echo "
echo 'Digite o PIN que será usado ao fazer o pairing entre o PC e o smartphone
O PIN é um código numérico de segurança, que você digita nos dois aparelhos ao
fazer o pareamento. É recomendável escolher um código com pelo menos 8 dígitos.
Ex: 2985679833'
read pin
echo "pin=\"$pin\"" >> /home/$USER/.3gconfig

# Descobre o nome da maquina. Se algo der errado, o nome é 'pc'
nome=`cat /etc/hostname`
if [ -z "$nome" ]; then
nome="pc"
fi

# Gera a configuração do hcid:
cat </etc/bluetooth/hcid.conf
options {
autoinit yes;
security auto;
pairing multi;
passkey "$pin";
}
device {
name "$nome";
class 0×3e0100;
iscan enable; pscan enable;
lm accept;
lp rswitch,hold,sniff,park;
}
EOF

# Coloca o PC em modo discoverable
cd /var/lib/bluetooth/??:??:??:??:??:??
sed -i -e "s/mode connectable/mode discoverable/g" config &>/dev/null
verif=`cat config | grep discoverable`
if [ -z "$verif" ]; then echo "mode discoverable" >> config; fi
cd /

# Reinicia o bluetooth e ativa a porta
/etc/init.d/bluetooth restart
hciconfig hci0 up &>/dev/null
}

bcanal()
{
echo "
echo 'Preciso agora saber qual é o canal usado pelo DUN no seu aparelho.
Os aparelhos da Nokia usam o canal 2 e aparelhos de outras marcas usam
geralmente o canal 1. Use o comando "sdptool search DUN" para descobrir qual
canal seu aparelho usa, em caso de dúvidas.

2 : Aparelhos da Nokia
1 : Aparelhos de outros fabricantes

Ex: 2'
read canal
channel="channel $canal"
echo channel=\"channel $canal\" >> /home/$USER/.3gconfig

# Gera a configuração do rfcomm
echo 'rfcomm0 {' > /etc/bluetooth/rfcomm.conf
echo ' bind yes;' >> /etc/bluetooth/rfcomm.conf
echo " device $blueaddr;" >> /etc/bluetooth/rfcomm.conf
echo " $channel;" >> /etc/bluetooth/rfcomm.conf
echo " comment \"$nome\";" >> /etc/bluetooth/rfcomm.conf
echo '}' >> /etc/bluetooth/rfcomm.conf
}

bmesg()
{
echo "
echo 'Falta agora o mais importante, que é fazer o pareamento entre o PC e
o smartphone. No aparelhos da Nokia com o S60, isso é feito através do
Configuraçs. > Conectiv. > Bluetooth. Use o direcional para a direita para
acessar o menu de dispositivos pareados e acesse o Opções > Novo Disp.
pareado > Mais dispositivos para iniciar a busca. Assim que o PC aparecer
na lista, clique no Parar e clique sobre ele para fazer o pairing. Quando
perguntado, informe o mesmo código PIN que definiu na opção anterior e
responda que sim quando ele perguntar se você deseja que o PC possa
abrir conexões automaticamente.
Obs: Se você está usando o Ubuntu, faça o pairing usando o applet Bluetooth
ao lado do relógio, clicando no Configurar novo dispositivo.
Se você já fez o pairig anteriormente, não é necessário fazê-lo de novo.

Depois de feito o pareamento, pressione Enter para continuar.'
read pausa
}

errowvdial()
{
echo 'Não consegui encontrar o wvdial, que preciso para estabelecer a conexão.
Você pode instalá-lo usando o gerenciador de pacotes, ou diretamente via linha
de comando:

No Ubuntu, Kubuntu, Kurumin, Satux ou outra distribuição derivada do Debian use:
apt-get update
apt-get install wvdial

No Mandriva, use:
urpmi wvdial

No Fedora, use:
yum install wvdial

No OpenSUSE, use:
zypper install wvdial

(se por acaso ele estiver instalado em uma localização fora do padrão, crie
o link /usr/bin/wvdial, apontando para ele)'
}

huaweiout()
{
if [ -e "huawei.out" ]; then
echo '
Arquivo huawei.out encontrado. Gostaria de executá-lo para ativar o modem?
(Pressione "s" para executá-lo ou qualquer outra tecla para ignorar
'
read resposta
if [ "$resposta" = "s" ]; then
./huawei.out
echo "Esperando 15 segundos para que o modem seja ativado…"
sleep 15
jarodei="1"
fi
fi
}

checaporta()
{

# Checa se o huawei.out está disponível
huaweiout
echo "Detectando o modem USB…"
sleep 1

if [ -e "/dev/ttyACM0" ]; then
echo "Modem encontrado em /dev/ttyACM0"; sleep 2
porta="/dev/ttyACM0"
echo 'porta="/dev/ttyACM0"' >> /home/$USER/.3gconfig

elif [ -e "/dev/ttyUSB0" ]; then
echo "Modem encontrado em /dev/ttyUSB0"; sleep 2
porta="/dev/ttyUSB0"
echo 'porta="/dev/ttyUSB0"' >> /home/$USER/.3gconfig

elif [ -e "/dev/ttyUSB1" ]; then
echo "Modem encontrado em /dev/ttyUSB1"; sleep 2
porta="/dev/ttyUSB1"
echo 'porta="/dev/ttyUSB1"' >> /home/$USER/.3gconfig

elif [ -e "/dev/ttyUSB2" ]; then
echo "Modem encontrado em /dev/ttyUSB2"; sleep 2
porta="/dev/ttyUSB2"
echo 'porta="/dev/ttyUSB2"' >> /home/$USER/.3gconfig

elif [ -e "/dev/usb/ttyUSB0" ]; then
echo "Modem encontrado em /dev/usb/ttyUSB0"; sleep 2
porta="/dev/usb/ttyUSB0"
echo 'porta="/dev/usb/ttyUSB0"' >> /home/$USER/.3gconfig
else
echo 'Não consegui localizar o modem. No Linux, modems GSM USB (e smartphones
em modo de acesso à web conectados ao PC via USB) são acessados pelo sistema
através da porta /dev/ttyACM0 ou /dev/ttyUSB0 , que é automaticamente criada
ao plugar o modem.

Se você está usando um smartphone, experimente desligá-lo, ligá-lo e conectá-lo
novamente. Se está usando um aparelho da Nokia, certifique-se de que ele está
configurado para se conectar ao PC em modo PC suíte (a configuração vai no
Conectividade > USB). Em alguns aparelhos novos, como o E71 está disponível o
modo "Conect. PC à Internet", mas ele não funciona no Linux. Use o modo PC
Suíte.

Se você está usando um modem huawei E220 ou E226 em uma distribuição antiga
(com um Kernel anterior ao 2.6.20), você precisa executar o arquivo huawei.out
para ativar o modem antes de executar este script. Veja a dica no:
http://wiki.ubuntu-br.org/TimWeb

Se você está usando o Kurumin 7 (ou outra distribuição baseada no Debian Etch)
pode baixar uma versão pré-compilada do arquivo no:
http://www.gdhpress.com.br/blog/arquivos/k7/huawei.out

Salve o arquivo huawei.out na mesma pasta onde está este script e passarei a
perguntar se quer executá-lo.

Se por acaso seu modem utiliza uma porta diferente, você pode indicá-la aqui,
e deixar que o script tente utilizá-la. Caso contrário pressione Ctrl+C para
sair.

Especifique a porta ou pressione Ctrl+C para sair
Ex: /dev/usb/ttyUSB1'
read porta

if [ -n "$porta" ]; then
echo "Usando $porta"
porta="/dev/usb/ttyUSB0"
echo 'porta="/dev/usb/ttyUSB0"' >> /home/$USER/.3gconfig
else
exit 1
fi
fi
}

checarrota()
{
echo "
echo 'Muitas distribuições antigas (anteriores a 2008) usam uma versão bugada do
wvdial que não altera a rota padrão depois de conectado, o que faz com que o
sistema continue tentando acessar através da placa de rede ou outra conexão já
existente em vez de acessar usando a conexão 3G, o que causa o famoso "conecta
mas não navega". Nesses casos, é necessário rodar o comando "route del default"
antes de estabelecer a conexão. Se este é o seu caso, responda "s" e farei isso
para você.'
echo "
echo 'Remover a rota padrão antes de conectar? (s/n)'
read resposta

if [ "$resposta" = "s" ]; then
delroute="1"; echo 'delroute="1"' >> /home/$USER/.3gconfig
else
delroute="0"; echo 'delroute="0"' >> /home/$USER/.3gconfig
fi
}

configoperadora()
{

if [ "$vivomode" = "1" ]; then

# Configurações da Operadora
user="vivo"
pass="vivo"
telc="*99#"
APN="zap.vivo.com.br"

else

echo '
Qual operadora você está usando?

1) Vivo
2) Claro
3) TIM
4) Oi
5) Giro
6) Outra (configuração manual)

(responda 1, 2, 3, 4, 5 ou 6)
'
read operadora
case $operadora in
1)
user="vivo"
pass="vivo"
telc="*99#"
APN="zap.vivo.com.br"
;;
2)
user="claro"
pass="claro"
telc="*99***1#"
APN="bandalarga.claro.com.br"
;;
3)
user="tim"
pass="tim"
telc="*99#"
APN="tim.br"
;;
4)
user="oi"
pass="oi"
telc="*99***1#"
APN="gprs.oi.com.br"
;;
5)
user="giro@giro.click21.com.br"
pass="giro"
telc="#777"
APN="giro.click21.com.br"
;;
6)
echo '
Qual o telefone de discagem?
ex: *99#
'
read telc
echo '
Qual a APN da operadora?
ex: operadora.com.br
'
read APN
echo '
Qual o login de usuário?
ex: operadora
'
read user
echo '
Qual a senha?
ex: operadora
'
read pass
;;
*)
echo 'Ops, você digitou uma opção inválida. Este script ainda não foi
devidamente instruído a lidar com condições inesperadas, por isso será fechado.'
exit 1
;;
esac

echo "user=\"$user\"" >> /home/$USER/.3gconfig
echo "pass=\"$pass\"" >> /home/$USER/.3gconfig
echo "telc=\"$telc\"" >> /home/$USER/.3gconfig
echo "APN=\"$APN\"" >> /home/$USER/.3gconfig

fi

}

reconfigurar()
{

addudevrules

echo '
Este script permite conectar usando um modem 3G ligado na porta USB (ou um
smartphone ligado na porta USB) ou um smartphone ligado via Bluetooth.

Para os modems USB, você provavelmente não precisará fazer nada, já que o script
é capaz de detectar o modem sozinho. Para conectar via Bluetooth, é necessário
fazer o pareamento entre o PC e o smartphone, o que faremos no passo seguinte.

O script usa o wvdial para fazer a conexão, por isso é necessário que ele
esteja instalado. Você pode instalá-lo usando o gerenciador de pacotes, basta
fazer uma busca por "wvdial."'
echo "
echo 'Qual tipo de aparelho você está usado?'
echo "
echo '1 Modem USB, ou um smartphone ligado na porta USB'
echo '2 Smartphone com o Windows Mobile 6, com o Compartilhamento de Internet'
echo '3 Smartphone da Nokia ou outro com suporte a DUN via Bluetooth'
echo "
echo "(responda 1, 2 ou 3)"
read resposta
echo "

# Só por via das dúvidas…
mkdir /home/$USER/ &>/dev/null

if [ "$resposta" = "1" ]; then
conn="usb"
echo 'conn="usb"' > /home/$USER/.3gconfig
elif [ "$resposta" = "2" ]; then
conn="pan"
echo 'conn="pan"' > /home/$USER/.3gconfig
elif [ "$resposta" = "3" ]; then
conn="dun"
echo 'conn="dun"' > /home/$USER/.3gconfig
else
echo 'Ops, você digitou uma opção inválida. Este script ainda não foi
devidamente instruído a lidar com condições inesperadas, por isso será fechado.'
exit 1
fi

configoperadora

# Função para conexão USB
if [ "$conn" = "usb" ]; then
echo 'Certifique-se de que seu modem GSM ou smartphone está ligado à porta USB.'
sleep 2
checaporta
checarrota
ativafirewall
# Esta opção é ncessária para que o sistema consiga obter o DNS ao conectar
opt1=`cat /etc/ppp/options | sed -e '/^\#/D' | grep "ipcp-max-failure 30"`
[ -z "$opt1" ] && echo 'ipcp-max-failure 30' >> /etc/ppp/options
# E sem essas o Aiko 82D, Huawei E156 e outros modelos não conectam
opt2=`cat /etc/ppp/options | sed -e '/^\#/D' | grep "asyncmap 0xa0000"`
[ -z "$opt2" ] && echo 'asyncmap 0xa0000' >> /etc/ppp/options
opt3=`cat /etc/ppp/options | sed -e '/^\#/D' | grep "mru 1500"`
[ -z "$opt3" ] && echo 'mru 1500' >> /etc/ppp/options
opt4=`cat /etc/ppp/options | sed -e '/^\#/D' | grep "refuse-chap"`
[ -z "$opt4" ] && echo 'refuse-chap' >> /etc/ppp/options
fi

# Função para Bluetooth DUN
if [ "$conn" = "dun" ]; then
bpairing
bcanal
bmesg
checarrota
porta="/dev/rfcomm0"
echo 'porta="/dev/rfcomm0"' >> /home/$USER/.3gconfig
ativafirewall
fi

# Função para Bluetooth PAN (Windows Mobile)
if [ "$conn" = "pan" ]; then
bpairing
bmesg
# Precisamos remover a rota padrão antes de ativar a conexão, já que não
# usamos o wvdial
delroute="1"
echo 'delroute="1"' >> /home/$USER/.3gconfig
fi

# Pergunta sobre o DNS
echo "
echo "Usar os servidores DNS do provedor? (s/n)"
read resposta
if [ "$resposta" = "n" ]; then
echo 'Digite o servidor de DNS primário'
echo 'ex: 208.67.222.222'
read dns1
echo "dns1=$dns1" >> /home/$USER/.3gconfig
echo "
echo 'Digite o servidor de DNS secundário'
echo 'ex: 208.67.220.220'
read dns2
echo "dns2=$dns2" >> /home/$USER/.3gconfig
autodns="off"
echo 'autodns="off"' >> /home/$USER/.3gconfig
else
autodns="on"
echo 'autodns="on"' >> /home/$USER/.3gconfig
fi
}

ativafirewall()
{
echo "
echo 'Ativar o firewall para a conexão da Internet? (s/n)'
read resposta
if [ "$resposta" = "s" ]; then
sifirewall="on"; echo 'sifirewall="on"' >> /home/$USER/.3gconfig
else
sifirewall="off"; echo 'sifirewall="off"' >> /home/$USER/.3gconfig
fi
}

checafirewall()
{
if [ "$sfirewall" = "on" ]; then
echo "Ativando o firewall…"
sleep 1
echo "iptables -A INPUT -p tcp -i ppp0 --syn -j DROP" >> /etc/ppp/ip-up
echo "iptables -A INPUT -p udp -i ppp0 --dport 1:1024 -j DROP" >> /etc/ppp/ip-up
fi
}

checadns()
{
if [ "$autodns" = "off" ]; then
echo "echo \"nameserver $dns1\" > /etc/resolv.conf" > /etc/ppp/ip-up
echo "echo \"nameserver $dns2\" >> /etc/resolv.conf" >> /etc/ppp/ip-up
else
echo " > /etc/ppp/ip-up
fi
}

addudevrules()
{
checaaiko=`lsusb | grep 19d2:2000`
if [ -n "$checaaiko" ]; then
echo "
echo "Modem Aiko 82E detectado, adicionando regras do UDEV…"
sleep 1
echo 'SUBSYSTEM=="block", \
ACTION=="add", \
SYSFS{idVendor}=="19d2", \
SYSFS{idProduct}=="2000", \
OPTIONS="ignore_device"

SUBSYSTEM=="usb", \
SYSFS{idVendor}=="19d2", \
SYSFS{idProduct}=="0001", \
RUN+="/sbin/modprobe usbserial vendor=0×19d2 product=0×0001"
' > /etc/udev/rules.d/99_aiko82e.rules
udevcontrol reload_rules
echo '
Desconecte e em seguida reconecte o modem para que ele seja detectado
(pressione Enter para continuar)'
read pausa
echo "Aguardando 15 segundos para que o modem seja ativado…"
sleep 15
fi

checahuawei=`lsusb | grep 12d1:1003`
if [ -n "$checahuawei" ]; then
echo "
echo "Modem Huawei E156/220/226 detectado, adicionando regras do UDEV…"
sleep 1
echo 'SUBSYSTEM=="block", \
ACTION=="add", \
SYSFS{idVendor}=="12d1", \
SYSFS{idProduct}=="1003", \
OPTIONS="ignore_device"

SUBSYSTEM=="usb", \
SYSFS{idVendor}=="12d1", \
SYSFS{idProduct}=="1003", \
RUN+="/sbin/modprobe usbserial vendor=0×12d1 product=0×1003"
' > /etc/udev/rules.d/99_huawei.rules
udevcontrol reload_rules
fi

}

# Início do script

# Verifica o arquivo de configuração e decide entre usá-lo ou gerar um novo
if [ -e "/home/$USER/.3gconfig" ]; then
echo "
echo "Configuração encontrada em /home/$USER/.3gconfig:"
echo '
Pressione Enter para continuar (e usar a configuração salva) ou
pressione "c" (e depois Enter) se quiser reconfigurar o script.

Pressione Enter para continuar ou c para reconfigurar:
'
read resposta

if [ "$resposta" = "c" ]; then

# Se respodido "c", reconfigura
rm -f /home/$USER/.3gconfig
reconfigurar

else

# Senão, carrega a configuração
echo "Carregando configuração em /home/$USER/.3gconfig"
sleep 1
. /home/$USER/.3gconfig

fi

else

# Se não encontra o script, reconfigura
reconfigurar

fi

# Terminada a configuração, a conexão é ativada:

# Deleta a rota padrão caso tenha sido solicitado pelo usuário
if [ "$delroute" = "1" ]; then
echo "Desativando rota padrão (para que seja usada a conexão 3G)"
echo "route del default"
route del default
fi

# Função para conexão USB

if [ "$conn" = "usb" ]; then

# Carrega o módulo do kernel
modprobe usbserial

# Checa se o huawei.out está disponível
if [ "$jarodei" = "1" ]; then
echo "
else
huaweiout
fi

# Sem isso o ppp não consegue alterar o DNS ao conectar
chmod 666 /etc/resolv.conf

# Substitui o DNS do provedor caso solicitado
checadns

# Ativa o firewall, caso solicitado
checafirewall

echo '[Dialer 3g]' > /etc/wvdial.conf
echo Modem = $porta >> /etc/wvdial.conf
echo Baud = 921600 >> /etc/wvdial.conf
echo DialCommand = ATDT >> /etc/wvdial.conf
echo Check Def Route = on >> /etc/wvdial.conf
echo 'FlowControl = Hardware(CRTSCTS)' >> /etc/wvdial.conf
echo Username = $user >> /etc/wvdial.conf
echo Password = $pass >> /etc/wvdial.conf
echo Phone = $telc >> /etc/wvdial.conf
echo Stupid mode = 1 >> /etc/wvdial.conf
echo Auto Reconnect = on >> /etc/wvdial.conf
echo "Auto DNS = $autodns" >> /etc/wvdial.conf
echo Init1 = ATZ >> /etc/wvdial.conf
echo 'Init2 = ATQ0 V1 E1 S0=0 &C1 &D2' >> /etc/wvdial.conf
echo Init3 = AT+CGDCONT=1,\"IP\",\"$APN\" >> /etc/wvdial.conf
echo ISDN = 0 >> /etc/wvdial.conf
echo Modem Type = Analog Modem >> /etc/wvdial.conf

if [ -e "/usr/bin/wvdial" ]; then

echo 'discando…

Pressione Ctrl+C para encerrar a conexão.

wvdial 3g'
sleep 1
wvdial 3g

# Caso tenha deletado a rota padrão no início do script, recarrega a
# configuracao da rede, restaurando a rota padrao
if [ "$delroute" = "1" ]; then
/etc/init.d/networking restart &>/dev/null
/etc/init.d/NetworkManager restart &>/dev/null
fi
exit 0

else
errowvdial
fi

fi

# Função para Bluetooth DUN

if [ "$conn" = "dun" ]; then

# Fecha o kbluetoothd
killall kbluetoothd.real &>/dev/null

# Reinicia o bluetooth e ativa a porta
/etc/init.d/bluetooth restart
hciconfig hci0 up

echo "Gerando configuracao do wvdial…"

sed -i -e "/lcp-echo-interval 30/D" /etc/ppp/options
sed -i -e "/lcp-echo-failure 4/D" /etc/ppp/options

# Sem isso o ppp não consegue alterar o DNS ao conectar
chmod 666 /etc/resolv.conf

# Substitui o DNS do provedor caso solicitado
checadns

# Ativa o firewall, caso solicitado
checafirewall

echo '[Dialer 3g]' > /etc/wvdial.conf
echo Modem = $porta >> /etc/wvdial.conf
echo Baud = 921600 >> /etc/wvdial.conf
echo DialCommand = ATDT >> /etc/wvdial.conf
echo Check Def Route = on >> /etc/wvdial.conf
echo 'FlowControl = Hardware(CRTSCTS)' >> /etc/wvdial.conf
echo Username = $user >> /etc/wvdial.conf
echo Password = $pass >> /etc/wvdial.conf
echo Phone = $telc >> /etc/wvdial.conf
echo Stupid mode = 1 >> /etc/wvdial.conf
echo Auto Reconnect = on >> /etc/wvdial.conf
echo "Auto DNS = $autodns" >> /etc/wvdial.conf
echo Init1 = ATZ >> /etc/wvdial.conf
echo 'Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0' >> /etc/wvdial.conf
echo Init5 = AT+CGDCONT=1,\"IP\",\"$APN\",\"\",0,0 >> /etc/wvdial.conf
echo ISDN = 0 >> /etc/wvdial.conf
echo Modem Type = Analog Modem >> /etc/wvdial.conf

if [ -e "/usr/bin/wvdial" ]; then

echo 'discando…

Pressione Ctrl+C para encerrar a conexao

Se algo der errado durante a discagem, experimente reiniciar o smartphone
e tentar de novo. Nos Nokia, é muito comum que o subsistema bluetooth fique
travado, impedindo que você se conecte, o que é rapidamente resolvido ao
desligar e ligar novamente.

wvdial 3g'
sleep 1
wvdial 3g

# Caso tenha deletado a rota padrão no início do script, recarrega a
# configuracao da rede, restaurando a rota padrao
if [ "$delroute" = "1" ]; then
/etc/init.d/networking restart &>/dev/null
/etc/init.d/NetworkManager restart &>/dev/null
fi
exit 0

else

errowvdial

fi

fi

# Função para Bluetooth PAN (Windows Mobile)

if [ "$conn" = "pan" ]; then

echo 'Ative o compartilhamento no smartphone, clicando no "Iniciar > Programas >
Compartilhamento de Internet". Use a opção "PAN do Bluetooth" como conexão para
o PC. Ao clicar no "Conectar" o aparelho passa para o modo NAP, onde ele fica
disponível para conexão do PC. Em caso de erros, verifique se o pairing foi
feito corretamente e se o PC foi definido como dispositivo autorizado nas
configurações do Bluetooth.

Pressione Enter para ativar a conexão.
'
read pausa

echo "Tentando se conectar a $blueaddr…"
echo 'Da primeira vez que a conexão é feita, o smartphone exibe uma mensagem
perguntando se deve aceitar conexões vindas do PC.
'
echo "pand -n --role PANU --connect $blueaddr"
pand -n --role PANU --connect $blueaddr
sleep 1
echo "dhclient bnep0"
dhclient bnep0
echo "
ifconfig bnep0

echo "(pressione Enter para continuar)"
read pausa

echo 'Se tudo deu certo, a rede bluetooth foi estabelecida e seu PC recebeu
um endereço na faixa 192.168.0.x, com o smartphone compartilhando a conexão
e ficando disponível através do endereço 192.168.0.1 (que é usado pelo PC
como gateway e como DNS), de forma similar ao que temos ao compartilhar a
conexão usando o ICS do Windows.

Para fechar a conexão posteriormente, use (como root):

pand -K

Para listar as conexões ativas (em caso de dúvidas sobre se a conexão está
ativada ou não) use:

pand -l
'

echo "(pressione Enter para sair do script)"
read pausa
exit 0

fi

exit 0


vivo - internet

Parâmetros VIVO para terminais GSM GPRS/EDGE
Configuração dos parâmetros das APN’s (Access Point Name – nome dos pontos de acesso) da VIVO,
para serviços de dados

Todas estas configurações já vêm pré-carregadas em seu celular VIVO, e sem elas não é
possível utilizar ou acessar serviços como:

- Vivo WAP
- Vivo Foto/Video Torpedo
- Vivo Play
- Vivo ZAP


No caso de o celular ter sido adquirido em outra operadora, outro país ou em um caso
onde os parâmetros de configuração de rede tenham que ser inseridos manualmente,
você deve usar os seguintes valores:
- Vivo WAP e Foto/Video Torpedo para aparelhos com suporte ao protocolo WAP 1.x
Pode-se verificar se o telefone suporta protocolo WAP 1.x ou WAP 2.0 nas especificações
do mesmo, junto ao fabricante do aparelho.
Vivo WAP
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, para acesso ao
WAP gateway.


Nome da conexão: Vivo WAP
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Usuário: vivo
Senha: vivo
Pedir senha: Não
Autenticação: PAP (Normal)
Endereço IP do Proxy: 200.142.130.166
Porta: 9201 (Sessão segura e com conexão permanente)
Página Inicial: http://termwapgsm1x.vivo.com.br
Vivo Foto/Video Torpedo
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, com acesso ao WAP
gateway e plataforma para serviços MMS.


Nome da Conexão: Vivo MMS
Nome do Ponto de Acesso (APN): mms.vivo.com.br
Usuário: vivo
Senha: vivo
Endereço IP do Proxy: 200.142.130.166
Porta: 9201
MMSC URL: http://termnat.vivomms.com.br:8088/mms
Vivo JAVA
Esta conexão recebe um IP privado.


Nome da conexão: Vivo Java
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Endereço de Proxy: 200.142.130.166
Porta: 9201
- Vivo WAP e Foto/Vídeo Torpedo para aparelhos com suporte ao protocolo WAP 2.x
Pode-se verificar se o telefone suporta protocolo WAP 1.x ou WAP 2.0 nas especificações
do mesmo, junto ao fabricante do aparelho.
Vivo WAP
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, para acesso ao
WAP gateway.


Nome da conexão: Vivo WAP
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Usuário: vivo
Senha: vivo
Pedir senha: Não
Autenticação: PAP (Normal)
Endereço IP do Proxy: 200.142.130.104
Porta: 80
Página Inicial: http://termwapgsm2.vivo.com.br
Vivo Foto/Video Torpedo
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, com acesso ao WAP
gateway e plataforma para serviços MMS.


Nome da Conexão: Vivo MMS
Nome do Ponto do Acesso (APN): mms.vivo.com.br
Usuário: vivo
Senha: vivo
Autenticação: PAP (Normal)
Endereço IP do Proxy: 200.142.130.104
Porta: 80
MMSC URL: http://termnat.vivomms.com.br:8088/mms
Vivo JAVA
Esta conexão recebe um IP privado.


Nome da conexão: Vivo Java
Nome do Ponto de Acesso (APN): wap.vivo.com.br
Endereço de Proxy: 200.142.130.104
Porta: 80
Vivo Play
Esta conexão utiliza uma faixa de IP privado atribuído pela operadora, para streaming de
conteúdos, utilizando as portas:
TCP:554
UDP: de 1024 a 65000


Nome da Conexão: Vivo Play
Nome do Ponto de Acesso (APN): play.vivo.com.br
Usuário: vivo
Senha: vivo
Autenticação: PAP (Normal)
Endereço de Proxy: Não utilizar proxy
Vivo ZAP
Esta conexão recebe um IP público, para acesso direto à internet.


Nome da conexão: Vivo ZAP
Nome do Ponto de Acesso (APN): zap.vivo.com.br
Usuário: vivo
Senha: vivo
Autenticação: PAP (Normal)
Endereço de Proxy: Não utilizar proxy

terça-feira, 10 de março de 2009

Iterators at C# Online.NET (CSharp-Online.NET)

Iterators
Microsoft .NET Framework, ASP.NET, Visual C# (CSharp, C Sharp, C-Sharp) Developer Training, Visual Studio

Jump to: navigation, search
Exam Prep. Guides
Exam 70-536 Study Guide

1. Types and collections

* Manage data
* Manage collections
o ArrayList class
o Collection interfaces
o Iterators
o Hashtable class
o CollectionBase
o DictionaryBase
o Comparer class
o Queue class
o SortedList class
o BitArray class
o Stack class
* Generic collections
* Specialized collections
* Implement interfaces
* Events and delegates

2. Process, threading,…
3. Embedding features
4. Serialization, I/O
5. .NET Security
6. Interop., reflection,…
7. Global., drawing, text
edit

Iterators are an alternative to implementing IEnumerable. They are new in C# 2.0 and greatly reduce the complexity of providing an enumerator for a collection.

When using an iterator, the compiler generates the IEnumerator class at build time.

The keyword yield is used with a return statement to return a single item at a time. Each yield return corresponds to getting the current item. Then when the next item is requested, the compiler resumes the execution after the last yield return was called. In reality, the execution of the method does not begin at the beginning of the method each time. The compiler turns the single yield method into an entire IEnumerator class with its own state, MoveNext and Current.

However, when implementing, do not focus on how the compiler accomplishes its task. Instead, simply yield one item at a time in the order desired using whatever technique is easiest.
Contents
[hide]

* 1 Code examples
* 2 Generic Usage
o 2.1 Iterating with foreach
o 2.2 Non-Generic
o 2.3 Generic
* 3 MSDN References

[edit]
Code examples

Iterate over some constant values

public IEnumerable Values(){

yield return 2;
yield return 55;
yield return 34;
yield return 324;
yield return 1;
yield return 7;
yield return 98;
yield return 34;
yield return 4;
yield return 11;

}

Iterate through an internal array

private int[] items;

//...

public IEnumerable Items(){

for (int i = 0; i < items.Length; i++){
yield return items[i];
}

}

Iterate through n prime numbers

public IEnumerable Primes( int max ){

for (int i = 0; i < max; i++){
if( IsPrime( i ) ){
yield return i;
}
}

}

Iterate forever

// This has no end
// It will always return Hello after every MoveNext
// However, it is not an infinite loop
// The one who uses the enumerator determines
// whether to keep calling MoveNext
public IEnumerable EternalEcho(){

while( true ){
yield return "Hello";
}

}


[edit]
Generic Usage

To promote type safety it is recommended that you use the generic IEnumerable form via IEnumerable. As with all other generic classes, when you use them you are moving a possible error from run-time to compile/design-time.


[edit]
Iterating with foreach

static void Main(string[] args)
{
foreach (TypeCode currentType in getCode())
{
//Do Stuff
}
}

[edit]
Non-Generic

You may want to do this at some point, it will compile, but can the caller handle it. If using a foreach loop then a cast occurs for each item. Depending on how you use the object inside the foreach loop you may have exceptions being thrown as 55000 is not an enumerated TypeCode.

static IEnumerable getCode()
{
yield return TypeCode.Boolean;
yield return TypeCode.Byte;
yield return 55000;
yield return TypeCode.Char;
}

[edit]
Generic

The compiler sees that this could cause problems and does not compile it.

static IEnumerable getCode()
{
yield return TypeCode.Boolean;
yield return TypeCode.Byte;
yield return 55000;
yield return TypeCode.Char;
}

If you are 100% sure that it is what you want to do you could cast it. But only if you must!

static IEnumerable getCode()
{
yield return TypeCode.Boolean;
yield return TypeCode.Byte;
//You can persuade the compiler but you may get yourself into problems!
yield return (TypeCode) 55000;
yield return TypeCode.Char;
}

[edit]
MSDN References

Iterators
Retrieved from "http://en.csharp-online.net/Iterators"

Categories: Exam 70-536 Study Guide | Exam 70-536 Study Guide: Skill Set 1

Iterators at C# Online.NET (CSharp-Online.NET)

Iterators at C# Online.NET (CSharp-Online.NET)

segunda-feira, 9 de março de 2009

POLEGADA FRACIONÁRIA

MILÍMETROS

CENTÍMETROS

1/16"

1,5875

0,15875

1/8"

3,175

0,3175

3/16"

4,7625

0,47625

¼"

6,35

0,635

5/16"

7,9375

0,79375

3/8"

9,525

0,9525

7/16"

11,1125

1,11125

½"

12,7

1,27

9/16"

14,2875

1,42875

5/8"

15,875

1,5875

11/16"

17,4625

1,74625

¾"

19,05

1,905

13/16"

20,6375

2,06375

7/8"

22,225

2,2225

15/16"

23,8125

2,38125

1"

25,4

2,54

polegada centímetros - Pesquisa Google

Punctuation

punctuation marks

Punctuation is the system of symbols (. , ! - : etc) that we use to separate sentences and parts of sentences, and to make their meaning clear. Each symbol is called a "punctuation mark".

The Value of Punctuation
An English teacher wrote these words on the board:

woman without her man is nothing

The teacher then asked the students to punctuate the words correctly. The men wrote the top line. The women wrote the bottom line.
The value of punctuation

Summary of Punctuation Marks

Punctuation MarkNameExample
full stop or periodfull stop or periodI like English.
commacommaI speak English, French and Thai.
semi-colonsemi-colonI don't often go swimming; I prefer to play tennis.
coloncolonYou have two choices: finish the work today or lose the contract.
hyphenhyphenThis is a rather out-of-date book.
dashdashIn each townóLondon, Paris and Romeówe stayed in youth hostels.
question markquestion markWhere is Shangri-La?
exclamation markexclamation mark"Help!" she cried. "I'm drowning!"
slash or forward slashslash, forward slash or obliquePlease press your browser's Refresh/Reload button.
backslashbackslashC:\Users\Files\jse.doc
double quotation marksdouble quotation marks

"I love you," she said.

single quotation markssingle quotation marks'I love you,' she said.
apostropheapostropheThis is John's car.
underlineunderlineHave you read War and Peace?
underscoreunderscorebin_lad@cia.gov
round bracketsround bracketsI went to Bagkok (my favourite city) and stayed there for two weeks.
square bracketssquare bracketsThe newspaper reported that the hostages [most of them French] had been released.
bracescurly brackets or braces{ b := a + 1
RESULTIS b }
ellipsisellipsisOne happy customer wrote: "This is the best program...that I have ever seen."
WSM Image
Although there are general rules for English punctuation, there are differences of styles between, for example, British and American English, some publishers and some writers.