我一直在敲Shadertoy - https://www.shadertoy.com/ - 最近,为了更多地了解OpenGL和GLSL.
据我所知,到目前为止,OpenGL用户首先必须准备要使用的所有几何体并配置OpenGL服务器(允许的光源数量,纹理存储等).一旦完成,用户就必须在OpenGL程序编译之前提供至少一个顶点着色器程序和一个片段着色器程序.
但是,当我查看Shadertoy上的代码示例时,我只看到一个着色器程序,并且大多数使用的几何图形似乎直接写入GLSL代码.
这是如何运作的?
我猜测顶点着色器已经预先准备好了,可编辑/样本着色器只是一个片段着色器.但是,这并没有解释一些更复杂的例子中的几何...
谁能解释Shadertoy是如何工作的?
目前正试图了解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
动态链接如何工作?
在Windows(LoadLibrary)上,您需要在运行时调用.dll,但在链接时,您需要提供相应的.lib文件,否则程序将无法链接... .lib文件包含什么?.dll方法的描述?这不是标题包含的内容吗?
相关地,在*nix上,您不需要lib文件...编译器如何知道标头中描述的方法在运行时可用?
作为一个新手,当你想到两个方案中的任何一个,然后另一个,它们都没有意义......
我怀疑这是一个基本问题,但很难在网上找到一个简洁,规范的答案.
从我理解的一点点来看;
任何人都可以澄清吗?
我目前正在考虑创建一个软实时移动电话webapp,但是当我开始研究websockets时,我发现了大量关于在移动电话上丢弃的websocket连接的恐怖故事:
http://blog.hekkers.net/2012/12/09/websockets-and-mobile-network-operators/
这仍然可以被认为是一个问题吗?
相关地,我怀疑长轮询客户端可能是实现类似功能的好方法,但我想知道我可能遇到的移动特定问题.
到目前为止,我已经读到长轮询请求可能会对电池寿命产生相当大的影响.我还听说iOS以某种方式限制了对单个服务器的连接数量,这可能是个问题.
有没有人在使用实时组件的移动应用程序上工作?如果你有,你遇到了什么挑战,你是如何克服它们的?
使用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行 - …
我最近在 NodeJS 中构建了一个小型 JSON Web 服务,并且有兴趣将其扩展为通过 WebSockets 接受请求。
到目前为止,我发现的大多数 WebSocket 教程都基于 SocketIO 等 3rd 方模块。
编写 WebSocket 服务器需要什么?假设跨浏览器兼容性在这里不是问题,并且我的所有客户都可以访问一个像样的浏览器。
决定最近尝试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服务器问题,还是一个无法提供信息的错误响应?
以下代码主要基于此处的示例:
唯一真正的区别是增加了一名主管:
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 '两次...
是什么原因造成的?
这似乎是一个常见的问题 - 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有关吗?
elixir ×4
erlang ×3
javascript ×3
comet ×2
erlang-otp ×2
websocket ×2
audio ×1
buzz.js ×1
c ×1
c++ ×1
compilation ×1
concurrency ×1
glsl ×1
html5-audio ×1
http ×1
immutability ×1
ios ×1
json ×1
lets-encrypt ×1
loadlibrary ×1
long-polling ×1
macros ×1
mobile ×1
module ×1
node.js ×1
pixel-shader ×1
powershell ×1
rest ×1
shader ×1
ssl ×1
web-services ×1
webgl ×1