AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-2153235

user2153235's questions

Martin Hope
user2153235
Asked: 2024-09-05 05:29:30 +0800 CST

Funções da janela PySpark: a agregação difere se WindowSpec tiver classificação

  • 6

Estou trabalhando neste exemplo de funções de agregação para PySpark Window.

Aqui está o dataframe:

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('SparkByExamples.com').getOrCreate()
simpleData = (("James", "Sales", 3000), \
    ("Michael", "Sales", 4600),  \
    ("Robert", "Sales", 4100),   \
    ("Maria", "Finance", 3000),  \
    ("James", "Sales", 3000),    \
    ("Scott", "Finance", 3300),  \
    ("Jen", "Finance", 3900),    \
    ("Jeff", "Marketing", 3000), \
    ("Kumar", "Marketing", 2000),\
    ("Saif", "Sales", 4100) \
  )
columns= ["employee_name", "department", "salary"]
df = spark.createDataFrame(data = simpleData, schema = columns)
+-------------+----------+------+
|employee_name|department|salary|
+-------------+----------+------+
|James        |Sales     |3000  |
|Michael      |Sales     |4600  |
|Robert       |Sales     |4100  |
|Maria        |Finance   |3000  |
|James        |Sales     |3000  |
|Scott        |Finance   |3300  |
|Jen          |Finance   |3900  |
|Jeff         |Marketing |3000  |
|Kumar        |Marketing |2000  |
|Saif         |Sales     |4100  |
+-------------+----------+------+

Um dos WindowSpec's no tutorial particiona as linhas por "departamento" e classifica por "salário" dentro de cada departamento:

from pyspark.sql.window import Window
windowSpec  = Window.partitionBy("department").orderBy("salary")

Para me familiarizar com Windowas operações, tentei adicionar uma coluna "MaxRowNum" contendo o número máximo de linhas dentro de cada partição. Para facilitar isso, uma coluna intermediária "RowNum" contém o número de linhas dentro de cada partição:

from pyspark.sql.functions import row_number
df \
.withColumn('RowNum',row_number().over(windowSpec)) \
.withColumn('MaxRowNum',max(col('RowNum')).over(windowSpec)) \
.show()
+-------------+----------+------+------+---------+
|employee_name|department|salary|RowNum|MaxRowNum|
+-------------+----------+------+------+---------+
|        Maria|   Finance|  3000|     1|        1|
|        Scott|   Finance|  3300|     2|        2|
|          Jen|   Finance|  3900|     3|        3|
|        Kumar| Marketing|  2000|     1|        1|
|         Jeff| Marketing|  3000|     2|        2|
|        James|     Sales|  3000|     1|        2|
|        James|     Sales|  3000|     2|        2|
|       Robert|     Sales|  4100|     3|        4|
|         Saif|     Sales|  4100|     4|        4|
|      Michael|     Sales|  4600|     5|        5|
+-------------+----------+------+------+---------+

Conforme mostrado acima, os valores "RowNum" estão corretos, mas "MaxRowNum" não contêm o número máximo de linhas dentro de cada partição. Eles contêm apenas o número da linha, exceto para linhas empatadas, onde contêm o maior dos dois números de linha.

Mais adiante no tutorial, encontrei um WindowSpec que não tinha classificação e ele me deu o resultado correto (veja a coluna "MaxRowCORRECT"):

windowSpecAgg  = Window.partitionBy("department") # No sorting

df.withColumn("row",row_number().over(windowSpec)) \
  .withColumn('MaxRowNum',max(col('row')).over(windowSpec)) \
  .withColumn("MaxRowCORRECT",max(col("row")).over(windowSpecAgg)) \
  .show()
+-------------+----------+------+---+---------+-------------+
|employee_name|department|salary|row|MaxRowNum|MaxRowCORRECT|
+-------------+----------+------+---+---------+-------------+
|        Maria|   Finance|  3000|  1|        1|            3|
|        Scott|   Finance|  3300|  2|        2|            3|
|          Jen|   Finance|  3900|  3|        3|            3|
|        Kumar| Marketing|  2000|  1|        1|            2|
|         Jeff| Marketing|  3000|  2|        2|            2|
|        James|     Sales|  3000|  1|        2|            5|
|        James|     Sales|  3000|  2|        2|            5|
|       Robert|     Sales|  4100|  3|        4|            5|
|         Saif|     Sales|  4100|  4|        4|            5|
|      Michael|     Sales|  4600|  5|        5|            5|
+-------------+----------+------+---+---------+-------------+

Meu entendimento é que as funções de agregação do Windows operam sobre a totalidade de cada partição. O código acima mostra que esse não é necessariamente o caso. Eu escaneei a documentação do Windows, mas não consegui encontrar a descrição inequívoca desse comportamento condicional.

Existe realmente um esquema consistente e totalmente documentado para as operações das funções do Windows? Onde eu perdi isso na documentação?

Fundo

Após a resposta de mazaneicha , percebi que precisava de informações básicas sobre taxonomia de funções Window. Os links do PySpark para os termos relevantes produzem páginas vazias ( currentRow, unboundedPreceding, unboundedFollowing). Essas coisas parecem vir do SQL. Embora eu não tenha encontrado nada sobre rowFramee rangeFrame, as páginas a seguir fornecem informações básicas sobre os outros termos acima (assim como a documentação para rowsBetween ):

  • https://mode.com/sql-tutorial/sql-window-functions
  • https://www.geeksforgeeks.org/window-functions-in-sql
  • https://www.databricks.com/blog/2015/07/15/introduzindo-window-functions-in-spark-sql.html
  • Como usar unboundedPreceding, unboundedFollowing e currentRow em rowsBetween no PySpark
apache-spark
  • 1 respostas
  • 33 Views
Martin Hope
user2153235
Asked: 2024-08-24 04:46:13 +0800 CST

Tendo dificuldade em ver o motivo dos decoradores em exemplos *simples*

  • 6

Naveguei em alguns tutoriais online sobre decoradores. Estou tendo problemas para ver seus benefícios em exemplos simples. Aqui está um exemplo comum de uma função que precisa ser decorada, retirada desta página :

# Unelegant decoration
#---------------------
def make_pretty(func):

    def inner():
        print("I got decorated")
        func()
    return inner

def ordinary():
    print("I am ordinary")

decorated_func = make_pretty(ordinary)
decorated_func()
    # Output
    #-------
    # I got decorated
    # I am ordinary

O benefício dos decoradores é descrito da seguinte forma: “Em vez de atribuir a chamada de função a uma variável, o Python fornece uma maneira muito mais elegante de obter essa funcionalidade”.

# Elegant decoration
#-------------------
@make_pretty
def ordinary():
    print("I am ordinary")

ordinary()
    # Output
    #-------
    # I got decorated
    # I am ordinary

Outros tutoriais fornecem exemplos e motivações semelhantes, por exemplo, aqui .

A dificuldade que tenho com esta explicação é que ela não se enquadra exatamente na intenção de adicionar funcionalidade à função a ser decorada sem modificá-la (outra explicação frequente dos decoradores). No exemplo acima, "comum ()" não decorado não está mais disponível, portanto decorá-lo não deixa de fato a função original disponível para uso em situações onde a decoração não é necessária ou desejada.

O outro motivo mais específico é maior elegância ao "não atribuir a chamada de função a uma variável". Para o código "Decoração deselegante", entretanto, isso é facilmente alcançado sem o código de "Decoração elegante" acima:

make_pretty(ordinary)()
    # Output
    #-------
    # I got decorated
    # I am ordinary

Os tutoriais normalmente descrevem decoradores em casos em que funções recebem argumentos. Não consigo entender o motivo deles porque não consigo nem entender o benefício no caso mais simples acima. As perguntas e respostas do SO também falam sobre casos de uso práticos (por exemplo, aqui ), mas é difícil acompanhar o motivo para os decoradores, novamente quando o motivo no caso mais simples acima não é claro.

É possível afirmar em linguagem simples qual é o benefício no caso mais simples acima, sem argumentos de função? Ou será que o benefício só ficará claro se, de alguma forma, descobrirmos os casos mais complicados?

python
  • 1 respostas
  • 34 Views
Martin Hope
user2153235
Asked: 2024-07-24 00:10:19 +0800 CST

Módulo importado para escopos diferentes, ambos se referem ao mesmo objeto?

  • 5

No console do Spyder (o REPL), eu emito arquivos import matplotlib.pyplot as plt. É o namespace mais alto, ou seja, correspondente a globals().

Em um arquivo de inicialização do Spyder, defino uma função para elevar as janelas das figuras ao topo.

def TKraiseCFG( FigID = None ):

   import matplotlib.pyplot as plt

   # The rest is just context
   #-------------------------
   # Assigning to plt unnecessary if
   # imported plt is same object as in
   # caller's scope
   plt = inspect.currentframe().f_back.f_globals['plt'] # plt=globals()['plt']
      # https://stackoverflow.com/a/78732915
   if FigID is not None: plt.figure( FigID )
   cfm = plt.get_current_fig_manager()
   cfm.window.attributes('-topmost', True)
   cfm.window.attributes('-topmost', False)
   return cfm

O pltin TKraiseCFG()refere-se ao mesmo objeto pltdo REPL?

Contexto adicional (não a questão principal): não consigo imaginar um console/REPL (ou mesmo vários consoles) usando mais de um arquivo matplotlib.pyplot. Mas estou apenas conhecendo Python, então posso estar errado. Para o caso de um único common matplotlib.pyplot, no entanto, estou procurando uma maneira de torná-lo acessível a todos os escopos, para que eu possa escrever funções de conveniência/utilidade como TKraiseCFG()(que foram montadas depois de ler várias páginas, semanas atrás). Infelizmente, meu método atual exige que a invocação do código TKraiseCFG()contenha uma variável chamada especificamente pltreference matplotlib.pyplot.

python
  • 1 respostas
  • 37 Views
Martin Hope
user2153235
Asked: 2024-07-04 00:24:27 +0800 CST

pyplot.plot usa marcadorfacecolor enquanto pyplot.scatter usa facecolor

  • 6

Eu venho de uma formação em Matlab, o que é uma inspiração para matplotlib(ou pelo que entendi, certa ou errada).

Fiquei surpreso ao descobrir que opções semelhantes para diferentes gráficos usam nomes de opções diferentes. Por exemplo, pyplot.plotusa markerfacecolorwhile pyplot.scatterusa facecolor.

No Matlab, essas opções são comuns em gráficos. Estou me perguntando como surgiram as diferenças em matplotlib.pyplot. As diferentes parcelas são desenvolvidas por grupos diferentes?

python
  • 1 respostas
  • 23 Views
Martin Hope
user2153235
Asked: 2024-06-11 23:05:12 +0800 CST

Diferença entre os pacotes “levenshtein” e “python levenshtein”?

  • 5

Instalei o módulo levenshtein do conda-forge. Não me lembro do comando exato usado, mas provavelmente era algo semelhante a conda install -c conda-forge PackageName. Eu consultei as versões do pacote. Vejo dois pacotes com exatamente o mesmo número de versão:

(py39) C:\>conda list levenshtein$
# packages in environment at C:\Users\User.Name\AppData\Local\anaconda3\envs\py39:
#
# Name             Version          Build Channel
levenshtein        0.25.1  py39h99910a6_0 conda-forge
python-levenshtein 0.25.1    pyhd8ed1ab_0 conda-forge

A versão corresponde ao que encontrei online aqui e aqui . Também posso encontrar ambas as variações no GitHube, aqui , aqui e aqui .

Para tentar ter uma ideia se eles são diferentes, usei o Bash do Cygwin para navegar até a pasta do ambiente Conda /c/Users/User.Name/AppData/Local/anaconda3/envs/py39e procurei por arquivos relacionados aos pacotes:

$ find * -name '*levenshtein*' -print | xargs ls -l
  7270 Jun  7 17:13 conda-meta/levenshtein-0.25.1-py39h99910a6_0.json
  4564 Jun  7 17:13 conda-meta/python-levenshtein-0.25.1-pyhd8ed1ab_0.json
  3951 Jan 27  2023 Lib/site-packages/gensim/similarities/__pycache__/levenshtein.cpython-39.pyc
  4505 Jan 27  2023 Lib/site-packages/gensim/similarities/levenshtein.py
219136 Apr  7 12:12 Lib/site-packages/Levenshtein/levenshtein_cpp.cp39-win_amd64.pyd

Não tenho certeza de como interpretar essas descobertas. Olhando para os dois principais arquivos JSON, vejo linhas selecionadas possivelmente relevantes

levenshtein-0.25.1-py39h99910a6_0.json
--------------------------------------
"extracted_package_dir": "C:\\Users\\User.Name\\AppData\\Local\\anaconda3\\pkgs\\levenshtein-0.25.1-py39h99910a6_0",
"fn": "levenshtein-0.25.1-py39h99910a6_0.conda",
  "source": "C:\\Users\\User.Name\\AppData\\Local\\anaconda3\\pkgs\\levenshtein-0.25.1-py39h99910a6_0",
"package_tarball_full_path": "C:\\Users\\User.Name\\AppData\\Local\\anaconda3\\pkgs\\levenshtein-0.25.1-py39h99910a6_0.conda",

python-levenshtein-0.25.1-pyhd8ed1ab_0.json
-------------------------------------------
"extracted_package_dir": "C:\\Users\\User.Name\\AppData\\Local\\anaconda3\\pkgs\\python-levenshtein-0.25.1-pyhd8ed1ab_0",
"fn": "python-levenshtein-0.25.1-pyhd8ed1ab_0.conda",
  "source": "C:\\Users\\User.Name\\AppData\\Local\\anaconda3\\pkgs\\python-levenshtein-0.25.1-pyhd8ed1ab_0",
"package_tarball_full_path": "C:\\Users\\User.Name\\AppData\\Local\\anaconda3\\pkgs\\python-levenshtein-0.25.1-pyhd8ed1ab_0.conda",

Os dois pacotes são de fato iguais? Se sim, por que eles se manifestariam como pacotes com nomes diferentes? Como verificar se um pacote comum é disponibilizado por meio de dois nomes diferentes?

python
  • 1 respostas
  • 26 Views
Martin Hope
user2153235
Asked: 2024-06-11 01:53:57 +0800 CST

Informações mais detalhadas sobre o tipo de dados comum em uma série?

  • 6

Eu tenho uma coluna de dataframe que consiste inteiramente em um tipo comum dict. Existe alguma maneira de consultar o tipo Série para revelar o tipo de dados comum? Atualmente, apenas me diz que é um objeto, que entendo ser uma série de referências. Mas se as coisas referenciadas forem do mesmo tipo para uma Série inteira, seria útil conhecer esse fato, bem como o tipo comum específico.

>>> df = pd.DataFrame([[{'c':[1,2]}],[{'d':[3,4]}]],columns=['A'])
                  A
   0  {'c': [1, 2]}
   1  {'d': [3, 4]}

>>> df['A'].dtype
   dtype('O')

>>> type(df['A'])
   pandas.core.series.Series
python
  • 1 respostas
  • 22 Views
Martin Hope
user2153235
Asked: 2023-12-17 14:19:19 +0800 CST

Por que Java exige "novo" quando se entende que um construtor cria uma nova instância [duplicada]

  • 8
Esta pergunta já tem respostas aqui :
A palavra-chave `new` em java é redundante? (5 respostas)
Por que java tem novidades? [duplicado] (6 respostas)
Fechado há 10 horas .

Naveguei na web em busca do uso de "novo" em Java e é para criar uma nova instância de classe. Por que isso exige indicação explícita por meio da palavra-chave “nova”? Não está entendido que uma invocação de construtor instancia um novo objeto? Sem new, por exemplo, fica claro que MyClass AnInstance = MyClass(AnArgument)cria um novo objeto.

De uma perspectiva prática, meu motivo para perguntar é porque presumo que “novo” foi projetado para proteger contra um perigo e quero estar ciente do perigo.

java
  • 4 respostas
  • 133 Views
Martin Hope
user2153235
Asked: 2023-10-31 13:05:19 +0800 CST

Back-ticks em DataFrame.colRegex?

  • 5

Para o PySpark, encontro crases envolvendo expressões regulares para DataFrame.colRegex() here , here e nesta questão SO . Aqui está o exemplo da DataFrame.colRegexstring do documento:

df = spark.createDataFrame([("a", 1), ("b", 2), ("c",  3)], ["Col1", "Col2"])
df.select(df.colRegex("`(Col1)?+.+`")).show()
+----+
|Col2|
+----+
|   1|
|   2|
|   3|
+----+

A resposta à pergunta SO não mostra crases para Scala. Refere-se à documentação Java para a Pattern classe , mas isso não explica os back-ticks.

Esta página indica o uso de crases em Python para representar a representação de string da variável adornada, mas isso não se aplica a uma expressão regular.

Qual é a explicação para os back-ticks?

python
  • 1 respostas
  • 11 Views
Martin Hope
user2153235
Asked: 2023-10-08 13:41:45 +0800 CST

Diferenças nas 2 maneiras de ler CSV no Spark DataFrame?

  • 6

Estou me familiarizando com os conceitos básicos de Python, Spark e PySpark seguindo este tutorial Spark By Exemplos (entre outros no mesmo site). No início, eles fornecem três maneiras de ler o mesmo arquivo:

spark.read.csv("/tmp/resources/zipcodes.csv")
spark.read.format("csv") \
                  .load("/tmp/resources/zipcodes.csv")
spark.read.format("org.apache.spark.sql.csv") \
                  .load("/tmp/resources/zipcodes.csv")

Aqui, sparkestá um objeto de class pyspark.sql.session.SparkSession. A lição diz que o 2º e o 3º comandos são alternativas ao 1º, mas para "nome da fonte de dados totalmente qualificado". Infelizmente, as strings de documentos no PySpark são extremamente espartanas. No entanto, caminhos totalmente qualificados são usados ​​em todos os três exemplos, portanto a explicação dos spark.read.format comandos parece muito incompleta.

Quais são as diferenças entre as chamadas de método? Parece-me estranho quecsvseja necessário um método totalmente novo e dedicado para lidar especificamente com CSV - a menos que seja apenas um wrapper para oformat método com conveniências específicas de CSV.

O que eu encontrei

Uma página completa que encontrei é esta página do SaturnCloud , mas estou intrigado com a explicação de que o formatmétodo é mais genérico e mais lento. Não consigo imaginar que esse seja o caso se o csvmétodo for um wrapper - a menos que o ingeridor seja configurado de maneira altamente abaixo do ideal, com muito fluxo de controle por registro, por campo ou por caractere.

O mesmo site também se refere ao csvmétodo como uma "abreviação" para o arquivo format("csv"). Isso sugere que ele nem fornece nenhuma funcionalidade adicional que um wrapper possa fornecer e não deve ser nem um pouco mais lento. Portanto, o site é contraditório.

Esta página refere-se ao csvmétodo como um "atalho" para format("csv"). Novamente, isso dá a sensação de que se trata de um wrapper fino, mas isso não é consistente com a indicação do SaturnCloud de que pode haver diferenças de desempenho, nem com a implicação do Spark By Exemplos de que eles são para diferentes formas do nome da fonte de dados.

A questão sobre as diferenças já foi colocada como um comentário do Stack Overflow antes.

csv
  • 1 respostas
  • 26 Views
Martin Hope
user2153235
Asked: 2023-09-17 13:49:25 +0800 CST

O que ContainerType[str, ...] significa em Python? [duplicado]

  • 6
Esta pergunta já tem respostas aqui :
TypeHinting tuplas em Python (2 respostas)
Fechado há 20 horas .

Sei que o Python na verdade não sobrecarrega funções, mas sim sugere vários tipos aceitáveis ​​para argumentos de entrada/saída de método. Por si só, isso não permite a especificação de quais tipos de entrada geram quais tipos de retorno. Conseqüentemente, o uso do @overloaddecorador para designar vários protótipos com sugestões de tipo aceitáveis. Esta é a minha síntese da leitura de várias páginas da web; portanto, se não estiver totalmente correto, obrigado por me corrigir.

O pacote PySpark possui um rdd.pymódulo contendo o seguinte protótipo de método:

@overload
def toDF(
    self: "RDD[RowLike]",
    schema: Optional[Union[List[str], Tuple[str, ...]]] = None,
    sampleRatio: Optional[float] = None,
) -> "DataFrame":
    ...

Tentei encontrar informações sobre como interpretar arquivos Tuple[str, ...].

Esta página fala sobre dicas de tipo para argumentos de contêiner em geral, mas não o que reticências significam após um tipo concreto entre colchetes que sufixam um tipo de contêiner.

As reticências não gostam do contexto de fatiamento, que é outro uso que vi mencionado online.

A função das reticências difere da representação de um corpo autônomo, como pass.

Como faço para interpretar Tuple[str, ...]?

python
  • 1 respostas
  • 32 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve