barretov / CodeTimeTracker

Sublime plugin to measure the time spent on projects
https://barretov.github.io/CodeTimeTracker/
GNU General Public License v3.0
7 stars 4 forks source link

Vue Interface #3

Open leonardohipolito opened 6 years ago

leonardohipolito commented 6 years ago

Olá, estou interessado em converter a interface para Vue para ter mais flexibilidade na criação de filtros e outros, poderia explicar os dados armazenados no arquivo data.txt?

barretov commented 6 years ago

Olá, Leonardo.

Legal, gostei da sua iniciativa! Não repara muito no meu código js não : ) por que eu tinha que fazer uma refatoração lá para retirar algumas redundâncias, mas ainda não tive tempo :/ Ultimamente fiz umas melhorias no core que vou colocar em produção em breve.

O arquivo data.txt está organizado da seguinte maneira: data{"date":"2016-10-25 11:20:59.482688","project":" gestao_gabinete","tech":"sublime-settings","time":302,"key":277}

Com esses dados eu faço cruzamentos para fazer as médias do tracker, e ainda tem outras possibilidades que podem ser mensuradas como por exemplo: ter com base na hora o período que o usuário tem mais rendimento, ex: manhã, tarde ou noite.

Se tiver alguma dúvida sobre os gráficos ou outros dados, pode ficar a vontade para perguntar.

Atenciosamente,

2017-11-10 10:24 GMT-02:00 Leonardo Hipolito notifications@github.com:

Olá, estou interessado em converter a interface para Vue para ter mais flexibilidade na criação de filtros e outros, poderia explicar os dados armazenados no arquivo data.txt?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/victoreduardobarreto/CodeTimeTracker/issues/3, or mute the thread https://github.com/notifications/unsubscribe-auth/AHPEsxiVsCk-VOVuVlkmoLjhmAuduhJaks5s1EBugaJpZM4QZfDA .

leonardohipolito commented 6 years ago

Show, vou começar a implementação em Vue hoje mesmo, provavelmente devo mudar o data.txt para um formato no tipo json. Logo publico as novidades :)

barretov commented 6 years ago

Mano, só tem um lance ai, o arquivo data.txt não é interessante mudar, pois se mudar o formato nome etc... as pessoas que tem o tracker instalado irão perder seus dados. A não ser que fizer um mecanismo de migração desses dados existentes para o formato novo saca!?

leonardohipolito commented 6 years ago

Exatamente, é um problema que tambem irei enfrentar, por isso estou pensando em fazer um meio de migrar os dados sem perda. Irei ver isso após terminar a interface do vue, tambem estou pensando em futuramente fazer um servidor web para armazenar os dados para que os clientes possam acompanhar o progresso, algo similar ao que alguns plugins pagos fazem

barretov commented 6 years ago

Posso te ajudar a produzir essa migração de dados para outro formato. Uma coisa que me veio a cabeça agora foi que no inicio do projeto eu tentei gerar um json, mas isso era ruim de manter e implicava no desempenho do tracker, escrever no txt ficou muito mais leve, mas essa informação estou apenas compartilhando com você, pode ficar a vontade para testar ai.

Pow a ideia do servidor é muito boa, eu tinha pensado nisso, mas nunca coloquei para frente a ideia. Um colega comentou comigo o lance do servidor para concorrer com wacatime, mas de forma grátis já que o waka e pago, fiquei de pensar na ideia, mas a minha ideia inicial mesmo era do tracker versionar seus dados no git de forma que não ficasse centralizado, cada usuário com seu dado e tal, mas isso ficou muito distante ia dar muita mão de obra para implementar.

barretov commented 6 years ago

Tenho um servidor disponível, não sei se você dispõe dessa estrutura, mas se quiser podemos fazer um teste piloto lá.

leonardohipolito commented 6 years ago

Realmente, não sei como vai ser o desempenho com o json, mais irei testar como vai ser. Notei que o tamanho do arquivo data.txt tende a crescer muito já que se repetem muitos dados, por isso estou propondo uma nova estrutura com o arquivo json.

{
    "projects": [{
        "project": "Console",
        "tech": {
            "php": [{
                "date": "2017-05-10 17:38:03.559503",
                "time": 590,
                "key": 46
            }, {
                "date": "2017-05-10 17:38:03.559503",
                "time": 590,
                "key": 46
            }]
        }
    }, {
        "project": "Automator",
        "tech": {
            "php": [{
                "date": "2017-05-10 17:38:03.559503",
                "time": 590,
                "key": 46
            }, {
                "date": "2017-05-10 17:38:03.559503",
                "time": 590,
                "key": 46
            }]
        }
    }]
}

Em relação ao servidor, vamos trabalhar nele sim, assim que fizer a parte do vue vou começar a trabalhar em um sistema pra isso.

barretov commented 6 years ago

A ideia é interessante, além de ficar organizado tende a reduzir um pouco o arquivo. A parte que tende a tirar a performance é na hora que o tracker vai abrir o arquivo, ele tem que dar um parse para ler o JSON enquanto isso os dados ficam alocados na memoria até que ele manipule o dado e salve-o novamente em um arquivo. Dependendo do tamanho do arquivo isso pode ser um problema, por exemplo, meu arquivo ja esta com quase 2 anos, e eu trabalho com sublime todos os dias. A não se que faça um esquema de vários arquivos, tipo, um arquivo para cada mes ou bimestre etc... talvez tire um pouco da carga.

leonardohipolito commented 6 years ago

Vou avaliar as duas possibilidades, principalmente com o desenvolvimento do servidor, já não vai ser necessário que todos os registros fiquem salvos na máquina

marcus-at-localhost commented 6 years ago

I had to translate this with google translate. I think this discussion was very interesting. Here a few thoughts:

I believe performance will take a hit the more data.txt grows. You could split the files in folders per day. But I guess it's harder to process that on client side or you write a second file, which keeps track on the daily tracking files. The right thing would be to write all tracking data in a local sqlite database. Then run a query against the db and return json data just like mentioned above.

Sqlite would be perfect, because it's just a file. No need to setup anything. But I don't know how to query the db from the web interface. Some sort of python script?

What do you think?

barretov commented 6 years ago

Hello Friend. As I commented in your issue new ideas are welcome, I believe that a legal way to do this would be even with a database, we could use even a non-relational database, I believe that in the backend (python) will not have problems, I am very inclined to get all those ideas and upgrade. I'm going to create a new branch for this, and anyone who wants to help will be welcome. I appreciate all the suggestions.

leonardohipolito commented 6 years ago

Estou trabalhando na versão 2 do plugin com o vue, atualmente a interface esta bem simples, ja que minha preocupação inicial é criar os componentes e deixar tudo rodando. Se tiver ideia de alguma interface... em alguns dias devo fazer o pull da nova interface captura de tela-20180608102616-1365x657