Após o término da apresentação, um dos meus colegas perguntou-me se eu realmente havia copiado o código. Considero que fazer isso seria trapaça e plágio.
Plagiar é definido como "Copiar ou imitar, sem engenho, as obras ou os pensamentos dos outros e apresentá-los como originais." (DICIONÁRIO PRIBERAM DA LÍNGUA PORTUGUESA, 2015).
opiar ou imitar, sem engenho, as obras ou os pensamentos dos outros e apresentá-los como originais.
"plagiar", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2013, http://www.priberam.pt/dlpo/plagiar [consultado em 12-11-2015].
"plagiar", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2013, http://www.priberam.pt/dlpo/plagiar [consultado em 12-11-2015].
Copiar ou imitar, sem engenho, as obras ou os pensamentos dos outros e apresentá-los como originais.
"plagiar", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2013, http://www.priberam.pt/dlpo/plagiar [consultado em 12-11-2015].
Declaro aqui publicamente que o código em questão, do modelo da entidade Task, foi escrito por mim com informações obtidas destes (dentre tantos outros que não resultaram em soluções) sites:"plagiar", in Dicionário Priberam da Língua Portuguesa [em linha], 2008-2013, http://www.priberam.pt/dlpo/plagiar [consultado em 12-11-2015].
https://dzone.com/articles/neo4jcypher-finding-football,
http://neo4j-contrib.github.io/spatial/,
http://stackoverflow.com/questions/17966722/neo4j-spatial-withindistance-cypher-query-returns-empty-while-rest-call-return,
http://stackoverflow.com/questions/22382390/neo4j-spatial-cypher-query-withindistance-doesnt-return-existing-nodes,
http://www.lyonwj.com/mapping-the-worlds-airports-with-neo4j-spatial-and-openflights-part-1/,
http://maxdemarzi.com/2014/01/31/neo4j-spatial-part-1/.
Reproduzo a seguir o trecho de código no qual a palavra "ajuda", escrita em português, chamou a atenção porque destoava do restante do código, escrito e comentado em inglês.
class Task
extend Geocoder::Model::ActiveRecord
include Neo4j::ActiveNode
property :name, type: String, index: :exact
property :start_date, type: Date, index: :exact
property :end_date, type: Date, index: :exact
property :description, type: String
property :postal_address, type: String
property :lat, type: Float
property :lon, type: Float
property :remote_work, type: Boolean
property :created_at
alias :latitude :lat # Because Spatial wants to find lat and long
alias :longitude :lon # And geocoder wants to find latitude and longitude
alias :latitude= :lat= # We'll need setters also
alias :longitude= :lon= # And we'll be able to use the vanilla configurations
validates_presence_of :name, :start_date, :description
has_many :out, :limitations, type: :LIMIT_BY, model_class: :Restriction
has_many :out, :restrictions, type: :ACT_ON
has_one :out, :ngo, type: :CREATOR
#geocode expects a field named "full_street_address". Let's provide it
def full_street_address
return postal_address
end
geocoded_by :full_street_address
after_validation :geocode, if: ->(obj){ obj.postal_address.present? and obj.postal_address_changed? }
def self.search(search)
tasks = Task.all
if search
# tasks = tasks.where(name: search)
tasks = tasks.where('n.name=~' << "'(?i).*#{search}.*'")
end
end
def self.geosearch(location , radius)
source_address = Geocoder.search(location).first
near_task_ids = []
radius = 10.0 if radius.blank?
radius = radius.to_f
@neo = Neography::Rest.new
x=@neo.execute_query("start n = node:ajuda({location}) return n", {:location => "withinDistance:[#{source_address.latitude},#{source_address.longitude},#{radius}]"})
x["data"].each do |d|
near_task_ids << d[0]["metadata"]["id"]
end
#binding.pry
Task.all.where(:neo_id => near_task_ids)
end
end
Enquanto escrevia este post notei um erro que conta a meu favor (da originalidade, não do estilo): o padrão Ruby para se atribuir um valor a uma variável se ela for nula é diferente da forma que aparece no código. O trecho está fora do padrão.
radius = 10.0 if radius.blank?
radius = radius.to_f
Conforme http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html, esse trecho deveria ser escrito como:
radius ||= 10.0.to_f
Para ser exato, o código que foi executado no vídeo da apresentação era ligeiramente diferente do que foi mostrado à banca. Antevendo que a banca pediria que eu mostrasse trechos do código, removi alguns comentários cuja publicação considerei desnecessária no contexto.
A letra "h" do meu teclado está com defeito e falha com frequência. Observem o erro na palavra "the" na primeira linha em vermelho a seguir.
def self.geosearch(location , radius)
# I'm getting only te first right now. Will have to deal with this
source_address = Geocoder.search(location).first
near_task_ids = []
radius = 10.0 if radius.blank? #GAMBIARRA: TRATAR NO FORM TAMBEM
radius = radius.to_f
@neo = Neography::Rest.new
x=@neo.execute_query("start n = node:ajuda({location}) return n", {:location => "withinDistance:[#{source_address.latitude},#{source_address.longitude},#{radius}]"})
x["data"].each do |d|
near_task_ids << d[0]["metadata"]["id"]
end
#binding.pry
Task.all.where(:neo_id => near_task_ids)
end
end
Este trecho - o original - foi recuperado a partir de uma cópia feita no Google Drive, disponível publicamente no link https://drive.google.com/folderview?id=0Bxez7SGeJQd4OUVpZ2dLanhNbUE&usp=sharing. A permissão de acesso foi mudada de privada para pública apenas em 12/11/2015.
No moodle campus há uma tarefa de A5LP1, entregue em 22 de fevereiro 2015, 23:55 onde eu mencionei que um algoritmo utilizado no exercício não havia sido criado por mim (embora por ignorância quanto à regra à época, eu não tenha incluído o crédito, apenas informado que eu não fui o autor). A seguir está a cópia do que foi entregue à Profa. Júlia Botan na ocasião.
algoritmo "primo"
// Função : Determinar se um numero e primo. Retornar "sim" ou "nao"
// Autor : Vedolin, Luis Fernando 1362666
// Data : 2/21/2015
// Seção de Declarações
var
entrada : inteiro
funcao ePrimo (numero : inteiro) : caractere
var
i : inteiro
w : inteiro
inicio
se ( (numero = 2) ou (numero = 3) ) entao
retorne "sim"
fimSe
se ( ( (numero mod 2) = 0 ) ou ( (numero mod 3) = 0 ) ) entao
retorne "nao"
fimSe
i <- 5
w <- 2
enquanto ( (i * i) <= numero) faca
se ( (n mod i) = 0) entao
retorne "nao"
i <- i + w
w <- 6 - w
fimEnquanto
retorne "sim"
// Achei isto enquanto procurava um algoritmo eficiente
// Em 2500 anos de Matemática formalizada, ou alguem inventou um metodo
// eficiente, ou alguem provou que ele nao existe...
//It's a variant of the classic O(sqrt(N)) algorithm. It uses the fact that a prime (except 2 and 3) is of form 6k-1 and 6k+1 and looks only at divisors of this form.
// E tambem achei isto:
// Número primo, é um número p cujo conjunto dos divisores não inversíveis não é vazio,
// e todos os seus elementos são produtos de p por números inteiros inversíveis.
// De acordo com esta definição, 0, 1 e -1 não são números primos.
// E larguei mao de pesquisar Matemática...
fimFuncao
Referências
PLAGIAR, in: Dicionário Priberam da Língua Portuguesa. Disponível em <http://www.priberam.pt/dlpo/plagiar>. Acesso em 12 nov. 2015.
Nenhum comentário:
Postar um comentário