如何在.chs文件中编码这一块C代码,以便c2hs可以将它转换为相对不错的东西?
typedef enum {
MONOME_BUTTON_UP = 0x00,
MONOME_BUTTON_DOWN = 0x01,
MONOME_ENCODER_DELTA = 0x02,
MONOME_ENCODER_KEY_UP = 0x03,
MONOME_ENCODER_KEY_DOWN = 0x04,
MONOME_TILT = 0x05,
/* update this if you add event types */
MONOME_EVENT_MAX = 0x06
} monome_event_type_t;
typedef struct monome monome_t; /* opaque data type */
typedef struct monome_event monome_event_t;
typedef void (*monome_event_callback_t)
(const monome_event_t *event, void *data);
struct monome_event {
monome_t *monome;
monome_event_type_t event_type;
/* __extension__ for anonymous unions in gcc */
__extension__ union {
struct {
unsigned int x; …Run Code Online (Sandbox Code Playgroud) 我在互联网上阅读了相当多的资料,不同的作者建议使用输出缓冲.有趣的是,大多数作者仅仅因为它允许将响应标题与实际内容混合而论证其使用.坦率地说,我认为负责任的Web应用程序不应混合输出标头和内容,Web开发人员应该在其脚本中查找可能的逻辑缺陷,这会导致在生成输出后发送标头.这是我对ob_*输出缓冲API的第一个参数.即使你得到的一点点便利 - 将标题与输出混合 - 使用它也不是一个足够的理由,除非你需要快速破解脚本,这通常不是严肃的Web应用程序中的目标或方式.
此外,我认为大多数处理输出缓冲API的人都没有考虑这样一个事实:即使没有启用显式输出缓冲,PHP与插入的Web服务器相结合,仍然会进行一些内部缓冲.很容易检查 - 做一些短串的回声,睡10秒,然后做另一个回声.使用浏览器请求您的脚本,并观察空白页暂停10秒,此后两行都出现.在有人说它是渲染假象而不是流量之前,跟踪客户端和服务器之间的实际流量表明服务器已经Content-Length为整个输出生成了具有适当值的标头 - 表明输出没有逐步发送echo调用,但在一些缓冲区中累积,然后在脚本终止时发送.这是我对显式输出缓冲的抱怨之一 - 为什么我们需要两个不同的输出缓冲区实现?可能是因为内部(不可访问的)PHP/Web服务器输出缓冲受PHP开发人员无法控制的条件限制,因此不可用?
在任何情况下,我为一,开始认为应该避免显式输出缓冲(系列ob_*函数)并依赖于隐式的flush,在必要时协助它具有良好的功能.也许如果Web服务器有一些保证在每次回显/打印调用时实际向客户端发送输出,那么设置显式缓冲会很有用 - 毕竟不希望向客户端发送大约100的响应字节块.但是有两个缓冲区的替代方案似乎是一个有点无用的抽象层.
那么,最终,严肃的Web应用程序是否需要输出缓冲?
如何使用Webpack在Typescript中导入CSS模块?
.d.ts为CSS 生成(或自动生成)文件?并使用经典的Typescript import语句?用./styles.css.d.ts:
import * as styles from './styles.css'
Run Code Online (Sandbox Code Playgroud)使用requireWebpack功能导入?
let styles = require("./styles.css");
Run Code Online (Sandbox Code Playgroud)但对于最后一种方法,我必须定义require函数.
什么是最佳方法或最佳选择,还可以处理CSS文件定义和类的IntelliSense?
我看到这个问题已经变得有点流行了.现在已经是我公认的Git使用年限了,从那以后我学到了很多东西.请,拜托之前,不管你会从这个Q&A得知事情对你的Git冒险阅读最后一段.
我想编写应用程序构建版本,该版本是从我所在的GIT分支名称(构建时)和自分支分歧后的提交数量自动派生的.我相信这对我的GIT存储库中的任何提交都是唯一的吗?分支名称是唯一的,并且提交沿着分支相互链接?如果我标记提交,我也可以使用该标记作为前缀.
在某种程度上git describe做我想要的,但它不包括我所在的分支名称,它包括缩写提交SHA-1哈希,我认为我不需要它,因为它不会添加任何东西到字符串的熵并且可能是多余的(我可能在这里错了,所以请纠正我).
我有什么选择?我在这里想的是正确的方向吗?当我有更多关于软件开发的重要事项时,我只是厌倦了为版本添加数字.
顺便说一下,我从来没有用肮脏的工作树建造.即我在构建公共发布之前总是将更改提交到存储库.
我现在知道 Git分支只是提交引用,因此,许多分支(和标记!)可能指向单个提交.因此,问题"这个提交属于哪个分支/谎言" 对Git 来说并不完全有效.Git 会跟踪你正在使用的"当前"分支 - 它已经为你检查过的分支 - 但同时任何数量的其他分支可能指向同一个提交,并且可以说没有任何一个分支可以被选择为"main"除非您想要表示当前已签出到磁盘的那个.请阅读本页面上的以下答案进行详细说明.
我正在使用一些Google Web字体.我听说谷歌处理不同浏览器之间的所有问题,并根据请求标题中的浏览器提供不同的媒体.
我的问题是,它在什么时候这样做?
原因是,对于API,您只需包含一个包含@font-face请求的CSS文件.我可以简单地将CSS包含在我自己的CSS文件中,从而保存HTTP请求,还是根据请求它的浏览器更改CSS?
我真的希望这是有道理的.
例如,Google建议您在CSS文件中包含以下内容:
@import url(http://fonts.googleapis.com/css?family=Exo);
其内容是:
@font-face {
font-family: 'Exo';
font-style: normal;
font-weight: 400;
src: local('Exo Regular'), local('Exo-Regular'), url('http://themes.googleusercontent.com/static/fonts/exo/v1/ZcGd2dvMSgl3mHN3lKAjNw.woff') format('woff');
}
Run Code Online (Sandbox Code Playgroud) 我的 Javascript 应用程序通过 Websocket 连接获取 WebM 视频流。远程对等方发送视频帧和应用程序获取它们之间没有延迟。
我MediaSource在应用程序中创建了一个对象,“附加视频帧”,并让视频元素显示它:
video.src = window.URL.createObjectURL(mediaSource);
Run Code Online (Sandbox Code Playgroud)
这很好用,但有一些(不到一秒)延迟,这可以说使这个解决方案不是视频通话的最佳选择。
显然,一些 WebRTC 应用程序使用MediaStream:
video.srcObject = mediaStream;
Run Code Online (Sandbox Code Playgroud)
...这些显示没有延迟。
我无法从文档浏览器确定是否处理src和srcObject不同。
我找不到的另一件事是,是否可以MediaStream像使用MediaSource. 我想尝试这样做只是为了检查是否srcObject不会导致我的应用程序出现上述延迟。
如果我使用:
video.srcObject = mediaSource;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
类型错误:无法在“HTMLMediaElement”上设置“srcObject”属性:提供的值不是“MediaStream”类型
我似乎无法得到以下问题的明确答案(谷歌搜索和阅读HTTP/1.1规范):
当使用'chunked'传输编码时,为什么服务器需要以字节为单位写出块大小并使后续块数据以CRLF结束.这不会使发送二进制数据"CRLF-unclean"并且方法有点多余吗?如果数据在某处有一个0x0A后跟0x0D(即这些实际上是数据的一部分)怎么办?客户端是否应该遵守在数据中遇到的第一个CRLF上的块头或阻塞处明确提供的块大小?到目前为止,我的理解是简单地获取服务器提供的块大小,继续下一行,然后从以下数据中读取这个字节数(CRLF或内部没有CRLF),然后跳过跟随数据的CRLF并重复该过程,直到没有更多的块... 我对吗?那么每个数据库之后的CRLF有什么意义呢?可读性?
我有一个存储库,我一直在master分支上工作,最后添加了大约10个左右的提交,我现在希望在另一个分支上,因为它们描述的工作我现在看到的是实验性的(我还在学习好的git实践).基本上我想让最后10个提交从一个点开始master形成自己的分支,这样我就可以只X进行"释放"/"稳定"提交.
我现在拥有的,最重要的Z是最后提交实际上有利于发布:
b--b (feature B)
/
X--X--X--Z--Z--Z--Z--Z--Z (master)
\
a--a--a (feature A)
Run Code Online (Sandbox Code Playgroud)
你可以看到,无论是master与Z上主,而我要的是犯下打上了master(我的"功能Z"的工作)就趴在自己的特性分支,所以尖XX`.为了说明所需的图表:
b--b (feature B)
/
X--X--X (master)
\ \
\ Z--Z--Z--Z--Z--Z (feature Z - the new branch I want)
\
a--a--a (feature A)
Run Code Online (Sandbox Code Playgroud)
这样我就可以master保留高质量的东西,根据需要合并A,B和Z功能.
那么如何在自己的分支上移动"Z"提交?
在尝试理解为什么我的某些Web应用程序的对象被Chrome保留在内存中后,我想我可能已经将其缩小到MediaRecorder浏览器保留其他无法访问的对象的情况.请注意以下重现问题的最小示例:
new MediaRecorder(new MediaStream())
Run Code Online (Sandbox Code Playgroud)
我使用Chrome和Chromium中的Memory选项卡分析了堆的使用情况,并且MediaRecorder堆上对象的存在并不是暂时的 - 只要我在上面执行之后在堆上找到它就会存在,它不会消失.
为什么会这样?没有任何东西可以保留它,这对我来说闻起来很像一个臭虫.相比之下,Firefox MediaRecorder在适当的时候发布了对象,当然考虑到垃圾收集,至少它在我执行上面的语句之后甚至不在堆上,而不是在我拍摄它的快照时.
任何东西都没有引用媒体记录器对象,它应该具有它可能具有的最短寿命,但是在控制台被清除后我在快照中存在于内存中(开发人员工具for Chrome背后的开发人员建议先清理控制台)获取堆快照,因为前者可能会保留对象,否则将被释放).
我在MediaRecorder类中找不到任何方法可以指示我可以将它与流解除关联或以其他方式"关闭"它.如果没有确定没有明显或不那么明显(例如通过事件监听器)的引用,我只能希望不保留匿名对象,而这些对象通常不会,但MediaRecorder对象似乎是.对我来说似乎没有任何杠杆可以拉动处理一个,可以这么说.
您可以在下面的屏幕截图中看到哪些对象保留了介质记录器并不完全是我的脚本的一部分,它们似乎与某些内部浏览器状态有关:
在"构造函数"(The Constructor)列中选择的对象旁边的窗口图标具有工具提示"用户对象[是]可从窗口访问".上面的代码片段是我在选项卡中运行的唯一代码,为什么对象可以从窗口访问,如果是,它肯定不能是我管理的任何引用?
那么为什么保留这个对象呢?这里更大的问题是,如果我的应用程序启动许多录制并为每个录制创建一个新的媒体录制器对象,这些对象将继续堆积在内存中,这是事实上内存泄漏的情况.
就像我说的那样,我在Firefox 62.0.2中运行相同的语句,并且行为就像我期望的那样 - MediaRecorder我创建的单个对象似乎超出了范围(因为它应该是如何没有引用它)它创建后不久.
(Chrome版本69.0.3497.100,Windows 10上的x64)
javascript memory memory-leaks google-chrome web-mediarecorder
javascript ×3
git ×2
http ×2
ajax ×1
c2hs ×1
css ×1
css-modules ×1
font-face ×1
haskell ×1
media-source ×1
mediastream ×1
memory ×1
memory-leaks ×1
php ×1
reactjs ×1
typescript ×1
versioning ×1
video ×1
webfonts ×1
webpack ×1