Rails之父:我就喜欢HTML/CSS/JavaScript,那又怎么了?

HTML的发展历程 本篇文章仅作为娱乐科普,如有错误,欢迎各位指正。 阅读详情

【图灵图书推荐】 Ruby for Rails中文版——Rails之父强力推荐的Ruby教程

Rails之父一贯以直言快语而著称, 而且时有惊人之语。这不,目前渐渐大红大紫的RIA技术(Adobe Flex、微软Silverlight),他就看不惯。6月26日,他在 Sys-con的博客上狠狠批了这个如今最时髦的Buzzword。文章的题目非常响亮:“ 我就喜欢HTML/CSS/JavaScript,那又怎么了?”

他说,这些技术口口声声要拯救Web程序员于HTML/CSS/JavaScript的水深火热之中,似乎程序员们过去忍受这三种技术,只是因为它们可以无障碍地到处发布。似乎使用更高级和更丰富(rich)的界面技术,就能解决浏览器带来的问题,提供上世纪桌面程序般的用户体验。

David Heinemeier Hansson对此,他的回答更加干脆:“Bullcrap!“ Google一下可以知道,这个词==Bullshit。

DHH说,自己深深感激Web基础技术所带来的限制,现在浏览器已经足够好了,程序员对Web技术的理解也已经今非昔比。他感觉使用现代Web应用框架、Firebug和新的JavaScript库,已经绝对令人满意。Web技术出自实践,并不追求无谓的完美,而且它们已经发展和经受考验 10多年了。


实际上,从用户体验的角度来看,我们还远远没有发挥出HTML的潜力。目前主要的网站和应用仍然很烂。如果大多数程序员和设计师连走路还没有学会,就别急急忙忙地想风驰电掣地跑。

【更新】 InfoQ中文版也有专文介绍DHH的这篇文章,可以参看。
HTML父子页面 立即下载

相关推荐

anime-talk:Rails + JavaScript项目-阶段4

动漫谈话 Rails + JavaScript项目-阶段4

html之父-Tim Berners-Lee

html之父-Tim Berners-Lee蒂姆·伯纳斯-李(Tim Berners-Lee)1955年6月8日出生于英国伦敦,Berners-Lee把Internet的发明归功于Vint Cerf和Bob Khan,但是正是Tim Berners-Lee创造了Internet上常用的部分-万维网。它最惹人的特点就是超文本,一种立即交叉关系方法。Tim Berners-Lee的超文本系统的引进改革

移动互联网改变生活,高效配对交易创造财富 7821

select2-rails:将Select2 javascript库与Rails资产管道集成

Select2用于Rails资产管道 是基于jQuery的选择框的替代品。 它支持搜索,远程数据集和结果的无限滚动。 select2-rails gem将Select2 jQuery插件与Rails资产管道集成在一起。 用法 安装select2-rails gem 将select2-rails添加到您的Gemfile并运行bundle install : gem "select2-rails" 包括select2-rails JavaScript资源 将以下内容添加到您的app/assets/javascripts/application.js : //= require select2 要添加select2-full.js而不是select2.js ,请添加以下内容: //= require select2-full 包括select2-rails样式表资产 添加到您的app/

如何在rails 6中使用js

文章目录NPMYarnES6BabelWebpackWebpackerSprockets 4不要以使用Sprockets的方式使用Webpacker更多细节参考[原文链接](https://dev.to/morinoko/adding-custom-javascript-in-rails-6-1ke6) 在这篇文章中我们会介绍Webpacker、Yarn和Sprockets . 和以往的版本不同...

include_heqile的博客 1705

JLink版本不兼容?手把手教你解决APM32F003F6P6在Keil中烧写闪退和报错

本文详细解析了APM32F003F6P6在Keil中烧写闪退和报错的解决方案,重点介绍了JLink版本兼容性问题。通过实测不同版本组合,推荐使用JLink 7.20a或6.86b与Keil 5.25的黄金组合,并提供详细的降级驱动和工程配置步骤,帮助开发者高效解决烧写困境。

weixin_33694620的博客 418

从模拟到实战:移远EC800M单片机MQTT接入OneNet全流程解析

本文详细解析了移远EC800M单片机通过MQTT协议接入OneNet平台的全流程,涵盖环境准备、模拟设备搭建、硬件迁移、数据交互调试及性能优化等关键步骤。针对常见问题如AT指令缓冲区溢出、心跳间隔设置等提供实战解决方案,帮助开发者高效实现物联网设备稳定接入。

weixin_29215815的博客 432

html页面分成三个部分_HTML入门笔记1

HTML概述:HTML 的全名是“超文本标记语言”(HyperText Markup Language),它是网页使用的语言,定义了网页的结构和内容。浏览器访问网站,其实就是从服务器下载 HTML 代码,然后渲染出网页。1.HTML之父李爵士(Tim Berners-Lee)李爵士发明了WWW、HTML、HTTP和URL。李爵士是万维网的开创者,他写了世界上第一个网页浏览器(WorldWideWe...

weixin_39524834的博客 3888

Foxmail 7.2.25以下版本XSS漏洞实战复现:手把手教你如何构造恶意邮件(含防御方案)

本文深入解析Foxmail 7.2.25以下版本的XSS漏洞(CNVD-2025-06036),详细展示如何构造恶意邮件进行跨站脚本攻击,并提供从客户端升级到企业级防护的多层次防御方案,帮助用户有效防范安全风险。

view3的博客 163

html语言可以干什么,什么是HTML?

什么是HTML?一、HTML能用来做什么如果你要制作网站的话,学习HTML是不可避免的。HTML是用来制作网站的。HTML是Internet上用于设计网页的主要语言,网页可以由文本,图片,动画等内容组成,基础架构都是HTML. 从事网页制作或者相关工作,就要学习HTML 。HTML是“HyperText Mark-up Language(超文本标记语言)”的缩写,要制作网页,就需要使用超文本标记语...

weixin_39878991的博客 2652

GBase8a-GDCA认证考试-复习参考题

为提升产品服务水平定期举办GBase产品认证培训,培训更多GBase数据库专业人员,满足用户快速成长的业务需求,建设GBase产品生态。请注意甄别,根据所学知识综合判断,正确率97%(97分)。

weixin_41826637的博客 2375

生成EtherCAT从站XML图片信息方法

详细介绍了EtherCAT从站XML文件中图片元素的生成方法。

kevin1499的博客 2130

10分钟搞定 Rails CSS 打包:cssbundling-rails 安装器与 rails new --css 快速上手教程

cssbundling-rails 是 Rails 官方出品的 CSS 打包插件,帮你用 Tailwind CSS、PostCSS、Sass、Bootstrap、Bulma 等主流工具在 Node.js 环境下构建样式表,再由 Rails 资产管线交付。本文带你用 10 分钟完成安装、热更新开发和生产构建,快速掌握 `rails new --css` 的用法。 ## 它解决了什么问题? 传统

gitblog_00204的博客 662

rk3568 修改开机动画

bootanimation.zip是一个Android设备启动时播放的动画文件,它包含了一系列的图片和描述文件,用于描述动画的播放顺序和持续时间。

weixin_35723192的博客 2729

假如我确实喜欢HTML、CSS和JavaScript又将如何?

Ruby on Rails的创造者DHH最近写了一篇很有趣的blog,原文地址是在这里: http://www.37signals.com/svn/posts/487-what-if-i-actually-like-html-css-and-javascript优快云上有一篇图灵刘江老师blog,介绍了DHH的这篇blog: http://blog.youkuaiyun.com/turingbook/a

软件开发资料汇总 387

Oracle 查看 rman 备份情况 SQL 语句

每天一个 DBA 小知识,助你更进一步!

LuciferLiu_DBA 3120

GlobalBuildingAtlas 建筑物白模数据下载

GlobalBuildingAtlas基于OSM开源数据构建全球建筑物3D白模,提供在线浏览和下载服务。官方资源包括GitHub项目地址和TUM数据库链接,支持行政区划检索建筑物数据。

一醉千秋的专栏 541

在 Rails 中集成 JavaScript:Import Maps、构建器与 Turbo 实战指南

本指南基于 Ruby on Rails 官方文档编写,系统讲解在 Rails 应用中集成 JavaScript 的完整方案,涵盖如何以 import maps 免去 Node.js/Yarn 构建步骤、如何选用 Bun/esbuild/Rollup/Webpack 等传统打包器,以及 Turbo(Turbo Drive、Turbo Frames、Turbo Streams)驱动的 HTML 快速渲

gitblog_00095的博客 214

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Rails Javascript

daqi zAjax介绍 为了理解Ajax, 你首先必须理解web浏览器是如何工作的 当你在你的浏览器地址中输入http://localhost:3000并按下enter时,浏览器作为客户端会给服务器端发一个请求,然后浏览器会解析response,搜集所有相关的assets,例如javascript文件、表格和图片。然后它会组合界面。当你点击一个link时,浏览器会重复上面的流程:获取page,获取assets,然后组合在一起,给你展示结果。这称为“request response cycle”。 ..

782

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

在 Rails 中使用 JavaScript

在 Rails 中使用 JavaScript 本文介绍 Rails 内建对 Ajax 和 JavaScript 等的支持,使用这些功能可以轻易的开发强大的 Ajax 程序。 读完本文,你将学到: Ajax 基本知识; 剥离式 JavaScript; 如何使用 Rails 内建的帮助方法; 如何在服务器端处理 Ajax; Turbolinks 简介; Chap

TRAMP~ 1313

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

HTML初探 - 前序知识

就像在一张白纸上绘画一样,Web开发给予我们无限的创造空间。本篇博客是我们的起点,了解了这些基础知识后,我们将更容易理解后续的HTML学习。下次,我们将正式开始我们的HTML之旅,探索它的定义、历史和基本结构。今天我们开始一段激动人心的旅程,深入探索HTML的奥秘。在这篇博客中,我们会从最基础的知识出发,一起建立起我们的Web开发基石。让我们一起踏上这段旅程,像探索一个未知的神秘岛屿一样,发现Web开发的乐趣!_在下一篇博客中,我们将深入探讨HTML的起源、结构和发展,以及如何开始构建我们的第一个网页。

m0_62792013的博客 234

HTML语言的计算机基础

CSS用于设置网页的样式和布局。通过在HTML文档中引入CSS,可以改变文字的颜色、字体、背景等。```htmlbody {h1 {```JavaScript是一种脚本语言,用于增强网页的交互性。通过将JavaScript嵌入到HTML中,开发者可以实现动态效果和用户交互。```html<script>alert('欢迎访问我的网页!');

2401_90032043的博客 2223

大学生个人网页设计 HTML个人网页制作 web个人网站模板 简单静态HTML个人网页作品

🧑个人网页设计、🙋‍♂️个人简历制作、👨‍💼简单静态HTML个人网页作品、👨‍🏭个人介绍网站模板 、等网站的设计与制作。⭐个人网页设计网站模板采用DIV CSS布局制作,网页作品有多个页面,如 :个人介绍(文字页面)、我的作品(图片列表)、个人技能(图文页面)、在线留言(表单页面)CSS样式方面网页整体采用左右布局结构,制作了网页背景图片,导航区域每个导航背景色不同,导航背景色与页面背景呼应。🏅 一套A+的网页应该包含 (具体可根据个人要求而定)📔网站布局方面:计划采用目前主流的、能兼容各大...

HTML网页设计 7万+

HTML之父级边框塌陷问题

HTML之父级边框塌陷问题 HTML代码 <head> <style> .box{ border: 2px solid wheat; background-color: wheat; } .d1{ border: 2px solid aquamarine; background-color: aquamarine; .

疯狂的菜鸡 305

如何快速掌握memtest_vulkan:专业GPU显存检测完整指南

memtest_vulkan是一款基于Vulkan计算API的跨平台GPU显存检测工具,专为硬件爱好者、超频玩家和普通用户设计,提供精准的显存稳定性测试。通过专业的显存检测技术,帮助你快速排查显卡故障,确保GPU始终处于最佳工作状态。 ## 🚀 项目价值与核心优势 ### 为什么选择memtest_vulkan? memtest_vulkan采用先进的Vulkan计算着色器技术,直接与GP

gitblog_00071的博客 601

rails中js的引用

rails会将全部的js合并,减少浏览器请求次数。对有针对单个网页的js来说就要用到 content_for 在Layout中加入: [code="ruby"] [/code] 然后在你想要拥有的view模版中加入: [code="java"] //content [/code]...

guyanbiao的专栏 673
上一篇: Google的新主意:JavaScript on Rails
下一篇: DDJ 2007年第7期:构建工具、REST、并行、多核……
turingbook
博客等级 码龄21年 1158粉丝 155原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值