Tag: telecom

  • Coletando Dados de Cobertura da Anatel

    Neste Post criaremos scripts em python para coletar e processar dados geoespaciais de cobertura das Operadoras disponibilizados publicamente pela Anatel.

    Baixaremos todos os arquivos das operadoras e consolidaremos em um único arquivo geoespacial, acrescentaremos algumas colunas para enriquecer os dados iniciais.

    A Anatel disponibiliza os dados de cobertura das operadoras neste link aqui.

    Carregando bibliotecas

    Utilizaremos as bibliotecas Request e BeautifulSoup para coletar os dados que baixaremos via html pois precisaremos buscar por tags e classes no HTML

    Utilizaremos a biblioteca geopandas para analisar e salvar os dados processados.

    from datetime import datetimeimport reimport requestsfrom bs4 import BeautifulSoupfrom urllib.request import Request, urlopenimport pandas as pdimport geopandas as gpd
    Carregando bibliotecas

    Baixando página da Anatel

    BASE_URL="http://sistemas.anatel.gov.br"req = Request(BASE_URL+ "/se/public/cmap.php")html_page = urlopen(req)soup = BeautifulSoup(html_page, "lxml")
    Baixando página da Anatel

    Iremos armazenar os dados dos links em um Dataframe identificando operadora, tecnologia e a última data de atualização conforme informado pela Anatel.

    columns=['texto','operadora','tecnologia','last_update','url','arquivo']df = pd.DataFrame(columns=columns)#Loop que encontra todas as Tags <li> da página da Anatelfor link in soup.find_all("li"):	#Coleta do nome do arquivo detectando a div entidade        texto = link.find("div",{"class":"tec_entidade"})        #Coleta da data de atualização pela tag small    last_update = link.find("small")        #Coleta do link do arquivo para download via tag <div> e <a>    url = link.find("div",{"class":"download_shp"}).find("a")        #limpando e dividindo texto    if texto:        texto = texto.getText()        tecnologia = texto.split("_")[0].upper()        operadora = texto.split("_")[1].upper()            #limpando o campo data    if last_update:        last_update = last_update.getText().split(":")[1].split(")")[0].strip()        last_update = datetime.strptime(last_update, "%d/%m/%Y")        #tratando URL    if url:        url = link.find("div",{"class":"download_shp"}).find("a").get("href")    row = [texto,operadora,tecnologia,last_update,url,None]        df.loc[len(df)] = row
    #filtrar apenas linhas cuja url não é vaziafor index,row in df[df['url'].notna()].iterrows():        #construindo nome do arquivo para salvar em disco    arquivo = row['operadora']+"_"+row['tecnologia']+".zip"    df.loc[index,'arquivo'] = arquivo        #construindo url de download    remote_url = BASE_URL + row['url']        #download do arquivo    print("Coletando: "+remote_url)    data = requests.get(remote_url)    with open("./inputs/"+arquivo, 'wb') as file:        file.write(data.content)

    Abrindo arquivos e consolidando dados num arquivo único

    listdf = []for index,row in df[df['url'].notna()].iterrows():    gdf = geopandas.read_file('zip://inputs/'+row['arquivo'])    gdf= gdf.explode()    gdf['operadora'] = row['operadora']    gdf['tecnologia'] = row['tecnologia']    gdf['last_update'] = row['last_update']    gdf['tecnologia'] = row['tecnologia']    listdf.append(gdf.copy())    rdf = gpd.GeoDataFrame(pd.concat( listdf, ignore_index=True))rdf.to_file("cobertura.geojson", driver='GeoJSON')

  • Execute menos Software

    Se tem algo que aprendi nestes anos suportando e criando produtos de tecnologia é que menos é mais.

    Aqui vai algumas dicas que funcionaram para mim:

    • Se for desenvolver, escolha tecnologias padrões de mercado
    • Não caia na armadilha de achar que tecnologias de código aberto, ou soluções on premise significam “sem custo” ou “mais barato”
    • Terceirize atividades que não agregam valor para o produto.

    Se for desenvolver, escolha tecnologias padrões de mercado

    Imagino que isso se repita em todos os setores de produção, mas a indústria de Telecomunicações em particular tem aversão a “última versão de software”. Ninguém quer pagar o pato de ser o primeiro a descobrir um novo bug enquanto há uma fila de clientes reclamando em todos os canais de atendimento.

    Não me entenda mal, usar novas tecnologias é bastante empolgante e muitas das vezes pode até significar diferenciais para seu produto, mas softwares e tecnologias bem consolidados que todos estão usando é uma ótima aposta, terá ótimo suporte de empresas e fóruns no mercado, além de não correr o risco de ser o primeiro a encontrar um bug que ninguém mais resolveu.

    Código Aberto nem sempre é “sem custo” e On Premise nem sempre é “mais barato”

    Então você fez o trabalho de casa, colocou suas opções numa matriz de decisão e escolheu um software aberto para implementar certas funcionalidades no seu produto, até levou em conta a dica anterior e escolheu uma versão estável.

    Você está levando em conta o custo de operar por si mesmo esse software?

    Existe um abismo entre provar um conceito (PoC) para o cliente utilizando ferramentas Opensource e desenvolvimento interno com dois estagiários, 2 desenvolvedores full-stack, 1 especialista em sistemas Operacionais, 1 em redes de computadores é criar um ambiente de produção que esteja pronto para a carga de trabalho, com alta disponibilidade, segurança, em conformidade com LGPD, gerenciamento de Alarmes e observabilidade  adequada.

    Muitas das vezes desenvolver internamente o produto requererá também atividades laterais como:

    • Criação de uma equipe de Operação e Suporte em tempo integral para monitorar a saúde do seu sistema
    • Manter o conhecimento original do desenvolvimento vivo entre sua equipe. O mercado de TI rotaciona muito as cadeiras, o conhecimento do time que implantou aquele software de código aberto persistiu a informação nas suas ferramentas de gestão de conhecimento.
    • E conforme o produto cresce e ganha escala, problemas acontecem, bugs aparecem. Quando você menos esperar verá que seu Squad de produto estará afogado em resolver problemas e pouco envolvido em desenvolver novas funcionalidades e novos valores para o produto

    Terceirize atividades que não agregam valor para o produto

    Se você chegou até aqui, essa dica talvez é chover no molhado, mas não quero ficar com a consciência pesada de não comentar.

    Durante o processo de criação de seus produtos e conforme sua empresa vai evoluindo de uma Startup para uma Empresa de crescimento e por fim alcançando uma Empresa consolidada com um produto forte pode ser que seu time de tecnologia se perca pelo caminho.

    Certifique-se que seu time não esteja em alguma dessas armadilhas:

    • O Backlog de atividades só possui Correções de Bugs e nenhuma Funcionalidade nova, que agregue valor ao produto
    • O Time passa mais tempo preocupado em implementar uma esteira de CI/CD perfeita que pensando em como entregar alguma coisa que o Cliente goste.
    • O time passa mais tempo preocupado em “instalar, manter e garantir” do que em “evoluir, criar e inovar”

    Não me leve a mal, tudo isso é importante, e provavelmente consequência do desenvolvimento interno, mas isso é atividade indiferente para o seu Cliente. Você está mantendo um time de vários Engenheiros e Desenvolvedores na sua estrutura que deveria ser enxuta para criação do produto.

    Terceirize esses serviços!

    • Terceirize a administração dos ambientes para empresas especialistas em suporte de código aberto
    • Terceirize até mesmo o desenvolvimento de funcionalidades para empresas especialistas em Fábrica de Software.

    Foque seu time de alto desempenho apenas em AUMENTAR O VALOR do seu produto.


  • SIP: Uma breve explicação

    Session Initiation Protocol (SIP) é um protocolo de sinalização de redes criado para estabelecer, modificar e terminar sessões de multimídia em uma rede IP como diriam os mais técnicos.

    Em outras palavras: Um protocolo feito para fazer chamadas de voz e vídeo através da internet

    Um ditado popular diz que andorinha sozinha não faz verão e esse é o caso do protocolo SIP. Por si só ele não provê serviços, nem controla fluxos de mídia, nem sequer é capaz de fazer negociações de codecs.

    Para uma solução completa de comunicação geralmente  é utilizado em conjunto com outros protocolos como os abaixo:

    SIP: Controle de chamada.

    SDP: Encapsulado dentro do SIP, serve principalmente para fazer as negociações de codecs.

    RTP: Usado para transportar fluxos de mídia

    Exercício mental

    Vamos fazer um analogia totalmente estranha num universo mais estranho ainda, mas que fará sentido no final 😀

    1. Você é brasileiro e fala fluentemente Inglês e Espanhol
    2. Você precisa conversar com o João que fala Alemão, Inglês e Chinês
    3. Você não conhece o João
    4. Você sabe onde o João mora

    Agora continuando a aventura nesse universo paralelo:

    • Você vai até a casa do João e bate na porta dele e diz Oi! em português, Hi! em inglês e Hola!  em spanhol.
    • João, tranquilamente apesar da sua esquisitice, responde Hallo! em alemão, Hi! inglês e em chinês.
    • Você percebe que João disse Hi! em inglês, um cumprimento que você conhece, e então começa uma conversa com João nesta língua.

    Nesse exercício, ir até a casa do João representa uma das funções da sinalização SIP que curiosamente possui o nome INVITE. (não vamos entrar no mérito de você ter se auto-convidado para a casa do João)

    Dizer oi em três línguas diferentes para tentar descobrir qual língua o João fala, ele responder com outras línguas e por fim você decidir que inglês é a linguagem comum entre vocês é uma negociação de codec e é a tarefa do protocolo SDP

    O Ar foi o meio que você usou para passar o som da sua voz para se comunicar com o João, esse é o papel do protocolo RTP e a sua voz saindo de sua boca e entrando nos ouvidos do João é o que chamamos de fluxo de mídia.

    PS: Não venham reclamar que eu poderia utilizar inúmeros exemplos mais fáceis. 

    Obrigado, espero que tenha sido uma forma de compreender o papel destes 3 protocolos do mundo Voip.