我正在开发一个网页,发现FontAwesome是一种非常巧妙的方式来添加漂亮的图标,但默认情况下,Firefox 的NoScript插件会阻止字体下载.
对于普通字体,这不会是一个问题,但FontAwesome使用的unicode字符故意超出大多数字体的常规可打印范围,因此将字体堆栈添加到CSS(EG :) font-family: FontAwesome, sans-serif;将无法正常工作,因为所有图标都呈现为十六进制-squares.
我意识到我可以调整NoScript以允许字体下载,但这不是所有用户的理想解决方案 - 我宁愿页面优雅地降级.
当然,使用Javascript/jQuery很容易做到这一点,但当然如果NoScript正在进行阻塞也没有任何帮助,如果用户没有启用javascript,则测试失败.
理想的是有一些CSS样式/规则作为任何FontAwesome对象的后备,用一些基本字符替换它们甚至不显示任何东西.
对于那些不熟悉FontAwesome/TL的人; DR:
所有FontAwesome图标都有CSS类"fa":
.fa {
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
}
Run Code Online (Sandbox Code Playgroud)
FontAwesome加载这样的自定义字体(我删除了
@font-face {
font-family: "FontAwesome";
font-style: normal;
font-weight: normal;
src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff?v=4.0.3") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.0.3") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular") format("svg");
}
Run Code Online (Sandbox Code Playgroud)
然后一个特定的FontAwesome图标将有自己的特定类,插入相关的unicode字符,例如:
.fa-star:before {
content: "?";
}
Run Code Online (Sandbox Code Playgroud)
图标的HTML将如下所示:
<i class="fa fa-star"></i>
Run Code Online (Sandbox Code Playgroud)
所以这里的问题是: 如果未加载字体"FontAwesome",我们需要某种方式,最好是在CSS中,用CSS类"fa"替换,删除或隐藏项目的内容.
我们正在努力让Gstreamer在DM368 Leopardboard*上工作,我们已成功说服它创建测试视频(videotestsrc),对其进行编码并将其转储到文件中.
工作的管道是:
gst-launch -v videotestsrc num-buffers=100 ! queue ! ffenc_mpeg4 bitrate=800000 ! ffmux_mp4 ! filesink location=video_test.mp4
Run Code Online (Sandbox Code Playgroud)
下一步是修改管道以通过网络流式传输测试卡,使用类似rtsp:// ip_addr:port/streamname的内容在具有VLC的PC上查看,但是关于如何做到这一点的文档看起来很薄(并且经常过时),这些示例似乎模糊了源代码和命令行方式.
我会很自然地承认,> 50%的问题是我们对Gstreamer及其各个部分缺乏了解,我总是发现,如果我有一个可行的例子,我可以用棍子戳它并解决其余的问题.从那里.
我到目前为止:
gst-launch -v videotestsrc ! queue ! ffenc_mpeg4 bitrate=800000 ! rtpmp4vpay ! tcpserversink host=<PC_ip> port=5000
Run Code Online (Sandbox Code Playgroud)
这似乎在VLC中发生了一些事情(使用tcp:// board_ip:port) - 它似乎认为发生了一些事情(不会抛出错误)但不会播放/显示任何内容.当我打破(^ C)gst进程时,VLC会注意到.
所以,基本上 - 任何指导/反馈都会很棒,一个有效的单线工作会很棒.
编辑添加:是的我看到了test_video.c的例子,但那是在编译一个特殊的程序来做一些事情看起来应该可以从命令行调用来证明这个概念.
* = Linux version 2.6.32-17-ridgerun /CPU: ARM926EJ-S
Run Code Online (Sandbox Code Playgroud) 我正在使用从Linus Torvalds到不明身份的Elbonian代码奴隶的各种不同质量/能力/理智来源的大型SDK代码库.
有各种各样的代码风格,有些明显优于其他代码,并且它证明了一个有趣的机会,可以通过其他措施扩展我对人类未来的知识/绝望.
我刚刚遇到一堆函数,它们反复使用一种略微奇怪的(对我来说)风格,即:
void do_thing(foo)
{
do {
if(this_works(foo) != success)
break;
return(yeah_cool);
} while (0);
return(failure_shame_death);
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中没有做任何复杂的事情(我没有为这篇文章剪掉10,000行魔法),他们可以轻松地做到:
if(this_works(foo) == success)
return(yeah_cool);
else
return(failure_shame_death);
Run Code Online (Sandbox Code Playgroud)
这似乎更好/更整洁/更直观/更容易阅读.
所以我现在想知道是否有一些(好的)理由以另一种方式做到这一点,还是只是他们总是在Elbonian Code Mines中这样做的方式?
编辑:根据"可能的重复"链接,此代码不会在任何类型的宏中进行预处理,它只是在普通代码中.我可以相信这可能是由于关于错误检查的编码样式规则,根据这个答案.
我们开发了一种IP摄像机产品,可通过RTSP/UDP传输H.264/MPEG4/MJPEG视频.它有一个Web界面,目前我们使用VLC Firefox插件允许在浏览器中查看实时RTSP流,但Firefox正在放弃对NPAPI插件的支持,因此目前是死路一条.
相机本身是一个相对低功耗的ARM SoC(想想Raspberry Pi级别),因此我们没有大量的备用资源来执行诸如在板上即时转码流的操作.
主要目的是从Web界面检查视频流是否正常工作,因此在某些其他格式/传输/流媒体引擎中流式传输新流(或对其进行转码)比以某种方式直接播放原始RTSP流更不可取. .在常规使用中,视频通过RTSP流式传输到VMS服务器,因此无法进行更改.
在理想的世界中,解决方案将是开源跨浏览器并发生在HTML5标签内,但如果它在一个或多个最流行的浏览器中工作,我们将采用它.
我一直在网上和网络上阅读关于HTML5视频标签,WebRTC,HLS等勇敢新世界的各种内容,并且还没有看到任何看起来像一个不合理且完整的解决方案的东西一些额外的转换/转码/重新流,通常由一些半支持的框架或中间的额外服务器,这是不可行的解决方案.
我还没有找到一个正确的描述,可能需要或不需要将我们的流"转换"为什么-html5-video-like,无论它只是围绕同一基本视频流的稍微不同的包装器,或者是否有很多开销和一切都不同.同样,不清楚是否可以使用JS在板上或甚至在浏览器中实现转换.
标题的原因是,如果我们必须改变一切运作的方式,我们也可以尽可能地做任何被认为是"最佳实践"和合理的未来证据,而不是一些可能没有的权宜之计.超越下一轮浏览器更新/下一个W3C新闻稿......
我觉得有点令人失望(但也许并不奇怪),2017年似乎没有明智的方法来实现这一目标.
也许"最差的做法"可能是更合适的术语......
抱歉,如果我解释得很严重,或者我要求一些明显的流血,但我是Linux内核的新手并且有点深入...
我们有一个嵌入式Linux系统,它带有一个(包含数百个文件夹的东西),包含一个rules.make,make,make.config或者某些变体的文件夹,包含一个"master"makefile&rules.make这意味着您可以从根文件夹中键入"make sysall"并构建整个包.
到目前为止一直很好,但尝试调试它是一个问题,因为文档将说:
" 要让内核输出调试消息,只需定义#outputdebugmessagesplz "
好的,但其中一些是在"master"make/rules文件中定义的,其中一些是在子make/rules/config文件中定义的,有些是在.h文件中...当然它更好从"顶部"make.config打开/关闭这些东西,而不是修改单个.h文件,然后必须记住再次关闭它们.
所以我认为以递归方式构建一个树是有用的,从主"make"文件开始并遵循它所做的一切,定义或重新定义的所有内容等......但似乎没有这样做的简单方法?
我假设我在这里错过了一个"make"选项,将这个信息吐出来,或者使用makefile/config只会有效吗?
我刚刚在我们正在处理的一些代码中挖出了一个错误*由于以下情况而失败:
Assert(SomeVitalFunction(foo) == OK)
Run Code Online (Sandbox Code Playgroud)
DEBUG宏#defined一直都很好用:
#ifdef DEBUG
#define Assert(x) if((x) == 0){/*some error handling*/}
#else
#define Assert(x)
#endif
Run Code Online (Sandbox Code Playgroud)
但是当#undef'd DEBUG它们具有从代码中删除重要函数调用的效果时.
我不能为我的生活弄清楚它是如何与DEBUG一起工作的#undef,并且通常将任何类型的函数调用放在这样的断言中似乎是一个坏主意.
我错过了什么吗?
*= 编辑以澄清以下Carpetsmoker的评论:代码来自一个特别落后的Elbonian代码奴隶的阴谋,我们的任务是破解,削减,刮胡子,擦亮,消毒和涂抹口红.
我们有一个嵌入式Linux系统,用户可以从系统的tzfile列表设置时区(所以国家/地区的名称,GMT + -n,UTC)或时区/ $ TZ可以直接设置为POSIX格式(EG CET-01:00:00CEST-02:00:00,M3.5.0/02:00:00,M10.5.0/03:00:00或EST5EDT)远程服务器(不知道时区名称).
无论哪个实体最后设置时区(无论是人工还是远程服务器),我们都需要以POSIX格式将本地时区设置报告回远程服务器,最好是最小化谎言/捏造.
在我卷起袖子之前,戴上尖尖的帽子,然后开始手工解析tzfile格式,我觉得值得问一下是否有预先存在的函数/库或这样做的例子?
我已经浏览了标准库,看不到任何具体的功能.
我正在开展一个稍微深奥的项目,我们需要在小型/慢速嵌入式微型(无操作系统)中实现一些基本身份验证.该设备通过其串行端口提供几个网页,然后通过我们无法控制的一些硬件将其喷射到IP网络上.
服务器端的代码,比如它(想想NWEB上饥饿疗法),发生在HTTP GET/POST请求,并吐出了网页和相应地改变其设置.
我们需要某种方式来验证用户登录/会话,以便我们不允许人们查看数据或更改他们不应该的设置.
该设备不是直接暴露于互联网,也不是100%坚不可摧的严重黑客行为(网络安全/分离是客户的问题*),安全要求更多的是保持较低级别不接触闪烁灯;)
由于缺乏空间/处理能力(假设我们有大约2k的代码空间而且没有多少MHz),我们无法实现像SSL那样的东西,但是至少比bog标准HTTP访问控制更好一点会很好.
我们可以处理GET,POST和设置/读取cookie数据.我们的微软确实拥有的一件事是一个体面的加密标准硬件随机数发生器,应该是任何帮助.
简而言之:我们有一个大型SDK,其中包含由Elbonian Code Slaves共同攻击的~1Gb多毛的代码,由一个颤抖的RPC格式,共享内存,互斥/信号量和吐痰捆绑在一起.它是在Linux机器上编译的,用于嵌入式SoC目标.
作为改进部分代码的一部分,我想将POSIX信号量添加到其中一个源中,这些源包含在一些RPC例程中.
但是,只需编写一些有效的代码并坚持下去
#include <semaphore.h>
Run Code Online (Sandbox Code Playgroud)
在顶部当然不足以启用编译.
所需要的是makefile中的特殊标志,具体取决于您所读取的内容可能是以下任何/全部:
-pthread
-lpthread
-lpthreads
-lrt
-rt
Run Code Online (Sandbox Code Playgroud)
我没有很多编写makefile的经验,不幸的是由于代码库的大小,它们有多个嵌套级别(SDK中超过2,000个makefile),具有各种依赖关系,所有这些都来自One True Makefile在根文件夹中.
makefile中有很多macroification(TM)正在进行,这无助于我解开正确的咒语.
作为项目结构和我试图修改的文件的一瞥,文件夹结构类似于:
/home/project/kernel/... Contains the Linux kernel & PSP / BSP
/home/project/the_system/... Contains the software suite we're building
Run Code Online (Sandbox Code Playgroud)
我们正在查看的文件位于:
/home/project/the_system/core_app/interface/src/messaging.c
Run Code Online (Sandbox Code Playgroud)
其中包括5个其他来源,例如:
/home/project/the_system/core_app/interface/src/sys-control.c
/home/project/the_system/core_app/interface/src/file-control.c
/home/project/the_system/core_app/interface/src/audio-control.c
Run Code Online (Sandbox Code Playgroud)
......你明白了.这些中的每一个都可能被其他希望彼此通信的进程包含/调用我是否提到这一切都很可怕?
该链中的每个文件夹中都有makefile,本地文件夹中的makefile
/home/project/the_system/core_app/interface/src/Makefile
Run Code Online (Sandbox Code Playgroud)
是这样的(为清楚起见,我删除了一些位,忽略了未引用的对象):
INCLUDES += -I./ -I$(PUBLIC_INCLUDE_DIR) -I$(LINUXKERNEL_INSTALL_DIR)/include -I$(CMEM_INSTALL_DIR)/packages/ti/sdo/linuxutils/cmem/include -lpthreads
C_FLAGS += -Wall -g -O3
AR_FLAGS += -r
CC = $(MVTOOL_PREFIX)gcc $(INCLUDES) $(C_FLAGS) -c
AR = $(MVTOOL_PREFIX)ar
REL_EXE1 = reboot_me
REL_LIB1 = file-control.a
REL_LIB3 = share_mem.a …Run Code Online (Sandbox Code Playgroud) 背景:我们有一个运行 Busybox 的嵌入式 Linux 系统(资源有限),我们有一个正在运行的进程,它通常会在控制台上(通过 stdout / stderr)吐出大量信息,但我们想暂时将其重定向到 syslog(使用 syslogd / logger) on command - 无需重新启动进程或重新启动。
使用此处找到的代码效果很好,直到我们尝试停止/关闭记录器 fd,此时写入 stdout/stderr 失败并且一切都中断了。下面的例子:
int main()
{
// Got command to direct all output to syslog:
FILE *fl;
fl = popen("logger","w");
if(fl == NULL)
return 1;
fprintf(fl,"logger test new"); // This goes to syslogd
int nf;
nf = fileno(fl);
dup2(nf,STDOUT_FILENO);
dup2(nf,STDERR_FILENO);
fprintf(stdout,"Written in stdout\n");
fprintf(stderr,"Written in stderr\n");
// ...some time later when we've logged enough things:
pclose(fl);
fprintf(stdout,"This will …Run Code Online (Sandbox Code Playgroud)