Size: a a a

2019 December 05

Л

Леона in pro.elixir
источник

FK

Fedor Koshel in pro.elixir
^^^ похоже на каких-то акулоботов. В половине чатов стикеры накидали
источник

DA

Denis Afonin in pro.elixir
Ilya Borovitinov
И правда, ровно твой кейс описан в dynamic
https://hexdocs.pm/ecto/dynamic-queries.html#dynamic-fragments
Согласен (хотя ещё else: true нужно возвращать, плюс лишние функции плодить).

А вот ещё пример, в своё время заставивший "споткнуться":

ex(abillix@raznix.vnix)2> defmodule Z do defstruct c: 0 end
{:module, Z, …}
iex(abillix@raznix.vnix)3> %Z{c: 3}                        
%Z{c: 3}
iex(abillix@raznix.vnix)4> v |> (update_in [:c], &(&1-1))  
** (UndefinedFunctionError) function Z.get_and_update/3 is undefined (Z does not implement the Access behaviour)

iex(abillix@raznix.vnix)4> v |> (cond_do value.c > 0, do: update_in value.c, &(&1-1))
%Z{c: 2}
iex(abillix@raznix.vnix)5> v |> (cond_do value.c > 0, do: update_in value.c, &(&1-1))
%Z{c: 1}
iex(abillix@raznix.vnix)6> v |> (cond_do value.c > 0, do: update_in value.c, &(&1-1))
%Z{c: 0}
iex(abillix@raznix.vnix)7> v |> (cond_do value.c > 0, do: update_in value.c, &(&1-1))
%Z{c: 0}
источник

PG

Pïg Grëënëst in pro.elixir
Fedor Koshel
^^^ похоже на каких-то акулоботов. В половине чатов стикеры накидали
казино рекламируют стикерами
источник

PG

Pïg Grëënëst in pro.elixir
изобретательно
источник

FK

Fedor Koshel in pro.elixir
слишком тонко ) Я не понял
источник

DA

Denis Afonin in pro.elixir
или в этих стикерах эксплоит с шеллкодом (шучу)
источник

PG

Pïg Grëënëst in pro.elixir
Denis Afonin
или в этих стикерах эксплоит с шеллкодом (шучу)
Зря, у меня какой-то стикерпак крешит мобильный телеграм
источник

PG

Pïg Grëënëst in pro.elixir
Но это ещё не точно
источник

DA

Denis Afonin in pro.elixir
ну, в каждой шутке есть доля шутки. Как минимум, уродливость этого конкретного стикера заставила меня отключить анимацию в телеграме:)
источник

DP

Dark Prague in pro.elixir
пытаюсь запринтить pdf c помощью google chrom`а но падает с ошибкой timeout GenServer помогите )
def run([url, report_id]) do
   :ssl.start()
   :ibrowse.start()
   HPDF.Application.start([], [])

   my_url = url
   d = DateTime.utc_now
   file_name = "#{d.year}_#{d.month}_#{d.day}"
   {:ok, file} = File.open("printing/#{file_name}_report_graph.pdf", [:write])
   case HPDF.print_pdf!(my_url, timeout: 60_000, print_options: %{landscape: true}, after_load_delay: 10000) do
     {:ok, pdf_data} -> IO.binwrite(file, pdf_data)
   end
end

def print_pdf!(url, opts \\ []) do
   {:ok, pid} = HPDF.Controller.Supervisor.start_child([])
   timeout = Keyword.get(opts, :timeout, :infinity)
   result = GenServer.call(pid, {:print_pdf, url, opts}, timeout)
   GenServer.stop(pid, :normal)
   result
 end


Ошибка
** (exit) exited in: GenServer.call(#PID<0.189.0>, {:print_pdf, "http://localhost/DC%207/overview/10?layout=report", [timeout: 60000, print_options: %{landscape: true}, after_load_delay: 10000]}, 60000)
   ** (EXIT) time out
   (elixir) lib/gen_server.ex:1009: GenServer.call/3
   lib/hpdf/controller.ex:22: HPDF.Controller.print_pdf!/2
   lib/tasks/meminfo.ex:18: Mix.Tasks.Meminfo.run/1
   (mix) lib/mix/task.ex:331: Mix.Task.run_task/3
   (mix) lib/mix/cli.ex:79: Mix.CLI.run_task/2
источник

D

Dmitry in pro.elixir
а что там в
def handle_call({:print_pdf, url, opts}, from, state) do
?
источник

DP

Dark Prague in pro.elixir
Dmitry
а что там в
def handle_call({:print_pdf, url, opts}, from, state) do
?
def handle_call({:print_pdf, url, opts}, _from, state) do
   :timer.sleep(5000)
   case HPDF.Browser.new_session() do
     {:ok, session} ->
       result = HPDF.Printer.print_page!(session.page_ws_uri, url, opts)
       HPDF.Browser.close_session(session)
       {:reply, result, state}
     {:error, _reason} = err -> err
   end
 end
источник

D

Dmitry in pro.elixir
отэта ненада тут `:timer.sleep(5000)```))
источник

D

Dmitry in pro.elixir
слипы ставить не надо в генсерверах
источник

D

Dmitry in pro.elixir
они блокируют процесс и call отваливается по таймауту
источник

D

Dmitry in pro.elixir
если хочешь сэмулировать долгую работу хендлера - используй таймауты call генсервера
источник

DP

Dark Prague in pro.elixir
Dmitry
если хочешь сэмулировать долгую работу хендлера - используй таймауты call генсервера
15:15:43.864 [error] GenServer #PID<0.180.0> terminating
** (stop) bad return value: {:error, :not_connected}
Last message (from #PID<0.92.0>): {:print_pdf, "http://localhost/DC%207/overview/10?layout=report", [timeout: 60000, print_options: %{landscape: true}, after_load_delay: 10000]}
State: %{}
Client #PID<0.92.0> is alive

   (stdlib) gen.erl:167: :gen.do_call/4
   (elixir) lib/gen_server.ex:1006: GenServer.call/3
   lib/hpdf/controller.ex:22: HPDF.Controller.print_pdf!/2
   lib/tasks/meminfo.ex:18: Mix.Tasks.Meminfo.run/1
   (mix) lib/mix/task.ex:331: Mix.Task.run_task/3
   (mix) lib/mix/cli.ex:79: Mix.CLI.run_task/2
   (elixir) src/elixir_compiler.erl:81: :elixir_compiler.dispatch/4
   (elixir) src/elixir_compiler.erl:65: :elixir_compiler.compile/3
источник

D

Dmitry in pro.elixir
а где определен HPDF.Printer.print_page! ?
источник

DP

Dark Prague in pro.elixir
Dmitry
а где определен HPDF.Printer.print_page! ?
def print_page!(ws_address, url, opts \\ []) do
   ws_uri = URI.parse(ws_address)

   args = Keyword.merge(
     [
       socket_args: [{ws_uri.host, ws_uri.port}, [path: ws_uri.path]],
     ],
     opts
   )

   {:ok, printer} = __MODULE__.start_link(args)
   print_page(printer, url, opts)
 end

 defp print_page(printer, url, opts) do
   timeout = Keyword.get(opts, :timeout, @default_timeout)
   GenServer.call(printer, {:print_pdf, url, opts}, timeout)
 end
источник