小编Cha*_*lie的帖子

WebGL/GLSL - ShaderToy如何工作?

我一直在敲Shadertoy - https://www.shadertoy.com/ - 最近,为了更多地了解OpenGL和GLSL.

据我所知,到目前为止,OpenGL用户首先必须准备要使用的所有几何体并配置OpenGL服务器(允许的光源数量,纹理存储等).一旦完成,用户就必须在OpenGL程序编译之前提供至少一个顶点着色器程序和一个片段着色器程序.

但是,当我查看Shadertoy上的代码示例时,我只看到一个着色器程序,并且大多数使用的几何图形似乎直接写入GLSL代码.

这是如何运作的?

我猜测顶点着色器已经预先准备好了,可编辑/样本着色器只是一个片段着色器.但是,这并没有解释一些更复杂的例子中的几何...

谁能解释Shadertoy是如何工作的?

javascript shader glsl webgl pixel-shader

51
推荐指数
5
解决办法
2万
查看次数

什么是"pin"运算符,Elixir变量是否可变?

目前正试图了解Elixir中的"^"运算符.来自网站:

当没有兴趣重新绑定变量而是匹配匹配之前的值时,可以使用pin运算符^:

来源 - http://elixir-lang.org/getting_started/4.html

考虑到这一点,您可以将新值附加到符号,如下所示:

iex> x = 1  # Outputs "1"
iex> x = 2  # Outputs "2"
Run Code Online (Sandbox Code Playgroud)

我也可以这样做:

iex> x = x + 1  # Outputs "3"!
Run Code Online (Sandbox Code Playgroud)

所以我的第一个问题是; Elixir变量是否可变? 看起来确实如此......在函数式编程语言中,这应该是不可能的?

所以现在我们来到"^"运算符......

iex> x = 1  # Outputs "1"
iex> x = 2  # Outputs "2"
iex> x = 1  # Outputs "1"
iex> ^x = 2 # "MatchError"
iex> ^x = 1  # Outputs "1"
Run Code Online (Sandbox Code Playgroud)

我认为"^"的效果是将"x"锁定到绑定到它的最后一个值.这就是它的全部吗?为什么不确保所有'匹配'/赋值都像Erlang本身一样不可变?

我刚刚习惯了......

erlang functional-programming immutability elixir variable-assignment

40
推荐指数
2
解决办法
5646
查看次数

C/C++动态链接如何在不同的平台上运行?

动态链接如何工作?

在Windows(LoadLibrary)上,您需要在运行时调用.dll,但在链接时,您需要提供相应的.lib文件,否则程序将无法链接... .lib文件包含什么?.dll方法的描述?这不是标题包含的内容吗?

相关地,在*nix上,您不需要lib文件...编译器如何知道标头中描述的方法在运行时可用?

作为一个新手,当你想到两个方案中的任何一个,然后另一个,它们都没有意义......

c c++ compilation loadlibrary dynamic-linking

25
推荐指数
3
解决办法
6844
查看次数

Elixir - 'use'关键字有什么作用?

我怀疑这是一个基本问题,但很难在网上找到一个简洁,规范的答案.

从我理解的一点点来看;

  • 它与'require'和'import'都不同
  • 它用于导入模块的内容.
  • 这是一个宏

任何人都可以澄清吗?

macros erlang functional-programming module elixir

12
推荐指数
1
解决办法
2520
查看次数

Websockets可以在移动电话上工作吗?

我目前正在考虑创建一个软实时移动电话webapp,但是当我开始研究websockets时,我发现了大量关于在移动电话上丢弃的websocket连接的恐怖故事:

通过3G连接的WebSocket

http://blog.hekkers.net/2012/12/09/websockets-and-mobile-network-operators/

这仍然可以被认为是一个问题吗?

相关地,我怀疑长轮询客户端可能是实现类似功能的好方法,但我想知道我可能遇到的移动特定问题.

到目前为止,我已经读到长轮询请求可能会对电池寿命产生相当大的影响.我还听说iOS以某种方式限制了对单个服务器的连接数量,这可能是个问题.

有没有人在使用实时组件的移动应用程序上工作?如果你有,你遇到了什么挑战,你是如何克服它们的?

mobile comet long-polling websocket ios

9
推荐指数
1
解决办法
3853
查看次数

Elixir/Erlang和Cowboy - 如何使用主管

使用Mix创建应用程序时,它始终会将根管理程序文件添加到项目中.注意监督函数中的'child spec'数组是如何为空.

app.ex:

defmodule App.Supervisor do
    use Supervisor

    def start_link do
        Supervisor.start_link(__MODULE__, :ok)
    end

    def init(args) do
       supervise([], [strategy: :one_for_one])
    end
end
Run Code Online (Sandbox Code Playgroud)

还为您创建了应用程序的入口点.通过我在网上找到的一些例子,我写了以下内容:

defmodule App do
    def start(_type, _args) do
        dispatch = :cowboy_router.compile([
            {
                :_,
                [
                    # Simple JSON test.
                    {"/test", app.Handle.test, []},
                ]
            }
        ])

        {:ok, _} = :cowboy.start_http(
            :http,
            100,
            [{:port, 8080}],
            [{ :env, [{:dispatch, dispatch}]}]
        )

        App.Supervisor.start_link()
    end
end
Run Code Online (Sandbox Code Playgroud)

此应用程序的工作原理,但它也可以,如果我删除调用App.Supervisor.start_link()App.start() .

那么在这种情况下主管是什么?如果主管的孩子规格是空的,那么它有什么意义呢?

例如,在此处找到的Elixir示例中 - https://github.com/IdahoEv/cowboy-elixir-example/blob/master/lib/cowboy_elixir_example.ex - 您可以看到启动主管的调用已注释掉第65行.

但在官方的Cowboy Erlang示例中,此文件 - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl - 创建一个没有子规范的类似根管理器,然后调用它在主应用程序文件中,在第22行 - …

concurrency erlang elixir erlang-otp erlang-supervisor

8
推荐指数
1
解决办法
928
查看次数

我将如何在没有库的情况下构建 NodeJS Websocket 服务器

我最近在 NodeJS 中构建了一个小型 JSON Web 服务,并且有兴趣将其扩展为通过 WebSockets 接受请求。

到目前为止,我发现的大多数 WebSocket 教程都基于 SocketIO 等 3rd 方模块。

编写 WebSocket 服务器需要什么?假设跨浏览器兼容性在这里不是问题,并且我的所有客户都可以访问一个像样的浏览器。

javascript json comet websocket node.js

7
推荐指数
1
解决办法
1984
查看次数

LetsEncrypt - ACMESharp客户端在待处理状态下挑战超过一个小时

决定最近尝试Letsencrypt服务.我正在使用此处的Windows Powershell客户端 - https://github.com/ebekker/ACMESharp

按照此处的快速入门说明 - https://github.com/ebekker/ACMESharp/wiki/Quick-Start - 我设法进入手动http身份验证过程的步骤6b,但是当我使用Update-ACMEIdentifier dns1 -ChallengeType http-01命令检查请求的状态时,质询请求仍处于待定状态:

IdentifierPart : ACMESharp.Messages.IdentifierPart
IdentifierType : dns
Identifier     : www.example.com
Uri            : https://acme-v01.api.letsencrypt.org/acme/authz/#myhash
Status         : pending
Expires        : 16/02/2016 00:00:00
Challenges     : {manual, , }
Combinations   : {1, 0, 2}
Run Code Online (Sandbox Code Playgroud)

我过去一小时每隔10分钟检查一次状态,但它仍处于未决状态.快速入门说明表明该过程需要几秒钟到几分钟.

这是一个ACME服务器问题,还是一个无法提供信息的错误响应?

rest powershell ssl ssl-certificate lets-encrypt

6
推荐指数
1
解决办法
1711
查看次数

Elixir - Simple Plug示例在每个请求上两次调用call方法

以下代码主要基于此处的示例:

http://hexdocs.pm/plug/

唯一真正的区别是增加了一名主管:

defmodule MyApi.Supervisor do
    use Supervisor

    def start_link do
        Supervisor.start_link(__MODULE__, :ok)
    end

    def init(:ok) do
        children = [ 
            Plug.Adapters.Cowboy.child_spec(
                :http, MyApi.BasicServer, [], [ port: 80 ]
            ) 
        ]

        supervise(children, strategy: :one_for_one)
    end
end
Run Code Online (Sandbox Code Playgroud)

这是插件本身:

defmodule MyApi.BasicServer do
    import Plug.Conn
    import Process

    def init(options) do
        IO.puts("Log Init")
        options
    end

    def call(conn, _opts) do
        IO.puts("Log Response")

        conn
            |> put_resp_content_type("text/plain")
            |> send_resp(200, "Hello world")
    end
end
Run Code Online (Sandbox Code Playgroud)

当我使用iex -S mix运行应用程序时,打开浏览器,然后点击localhost,iex提示每次http请求的IO.puts'Log Response '两次...

是什么原因造成的?

web-services http elixir erlang-otp phoenix-framework

5
推荐指数
1
解决办法
511
查看次数

HTML 5 Audio - AnalyserNode.getByteFrequencyData()返回Undefined

这似乎是一个常见的问题 - Javascript Web Audio API AnalyserNode不起作用 - 但我不能确定我是否找到了我的实现的边缘情况.

我使用createMediaElementSource()创建音频源,但不是使用页面标记中的音频标记,而是使用Buzz.js动态创建元素.

这是我的测试设置:

window.addEventListener('load', function(e) {
    audioContext = new webkitAudioContext();
    audioAnalyser = audioContext.createAnalyser();

    sound = new buzz.sound("sound.mp3");
    sound.load().bind("canplaythrough", function(e) {
        source = audioContext.createMediaElementSource(this.sound);
        source.connect(audioAnalyser);

        audioAnalyser.connect(audioContext.destination);

        this.play().loop(); 
    });
}, false);

window.setInterval(function(){
    array = new Uint8Array(audioAnalyser.frequencyBinCount);
    console.log(audioAnalyser.getByteFrequencyData(array));                                           
})    
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,声音播放.我还可以附加有效的其他节点(双二阶滤波器,增益等),但audioAnalyser.getByteFrequencyData会在每一帧上返回未定义的值...

可能与使用Buzz.js有关吗?

javascript audio html5-audio webkitaudiocontext buzz.js

4
推荐指数
1
解决办法
2100
查看次数