满城尽带黄金甲与Web开发

 
昨天才闲下来,陪家人一起去看了满城尽带黄金甲。
可能自己的鉴赏水平一直不是很高,竟没有网上恶评如潮的那种感觉,反而我觉着还有那么点意思。至少要比张导拍的《十面埋伏》、《英雄》的故事逻辑性要更为合理些,反映的人物也更有张力。
今天回想黄金甲的情节,想着Web开发的一些发展趋势也经常有相似的情节。
发哥是那时的皇上,有着不可动摇的权威。身居要职的各个岗位都会有自己的人。这个和互联网发展的软件开发中,Java是目前流行最广、提供各类框架服务最全面的语言有相似之处。从目前发展的态势,Java发展无论是在软件产品开发,还是在人才需求上,都占有绝对强势的地位。
但发哥的地位是不是非常巩固,所筑城池牢不可破呢?黄金甲中用血的代价,换来了发哥依然笑傲江湖。然而皇后、杰王子,甚至是小王子都窥恻王位,虽然结果以失败告终,但是也使发哥付出了相当大的代价。
随着新功利时代的到来,Web开发也追求更高效、更实用、更简易的特点向前发展。与Java多年的老对手.net、php甚至Python都在迅猛发,其中发展的最为迅猛的是Ruby。             Ruby虽然不像片中发哥和杰王子那样,绝对和Java有血缘的继承关系,但是在很多方面确有相似之处,而且塞外3年锻炼,绝对武力大有长进。Ruby开源社区日新月异,每日都惊喜不断,热火朝天之中,很多跟随Java之强兵干将都纷纷倒戈,双方在今年重阳势必会有一场大战。结果是菊花台上,是黄菊送别Ruby精英,还是Ruby攻进台上,重新谱写时代新篇,我们还将拭目以待。
当然,我们也希望双方能互相融合,展现一篇双赢之事。到时,Jruby、Ruva或许就将诞生。
.net、php、Python也都会不甘示弱,在舞台上也不会甘心Java开花百花杀。
得兵权者得天下,得民心者治天下。
在Web开发中,什么是兵权?什么是民心?
2007年,黄金甲满城尽带;2007年,软件业齐开百花。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
步骤如下: 1.连接硬件:将HC-SR04的VCC接到STM32F103ZET6的5V,GND接到GND,Trig接到STM32F103ZET6的PB10,Echo接到STM32F103ZET6的PB11。 2.配置STM32F103ZET6的GPIO:将PB10配置为输出模式,PB11配置为输入模式。 3.编写程序:使用定时器来生成10us的高电平,然后将Trig引脚拉高,等待10us后拉低。然后等待Echo引脚变高,开始计时,直到Echo引脚变低,停止计时。根据计时器的值计算距离并输出到串口。 下面是代码示例: ``` #include "stm32f10x.h" #include "stdio.h" #define TRIG_PIN GPIO_Pin_10 #define ECHO_PIN GPIO_Pin_11 #define TRIG_PORT GPIOB #define ECHO_PORT GPIOB void TIM3_init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseInitStruct.TIM_Prescaler = (SystemCoreClock/1000000) - 1; //1us per tick TIM_TimeBaseInitStruct.TIM_Period = 0xFFFF; TIM_TimeBaseInitStruct.TIM_ClockDivision = 0; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct); TIM_Cmd(TIM3, ENABLE); } void delay_us(uint32_t us) { TIM_SetCounter(TIM3, 0); while(TIM_GetCounter(TIM3) < us); } float get_distance(void) { uint32_t time_start, time_end; float distance; GPIO_ResetBits(TRIG_PORT, TRIG_PIN); delay_us(2); GPIO_SetBits(TRIG_PORT, TRIG_PIN); delay_us(10); GPIO_ResetBits(TRIG_PORT, TRIG_PIN); while(GPIO_ReadInputDataBit(ECHO_PORT, ECHO_PIN) == RESET); time_start = TIM_GetCounter(TIM3); while(GPIO_ReadInputDataBit(ECHO_PORT, ECHO_PIN) == SET); time_end = TIM_GetCounter(TIM3); if(time_end > time_start) { distance = (float)(time_end - time_start) * 0.017; //calculate distance in cm } else { distance = 0; } return distance; } int main(void) { USART_InitTypeDef USART_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Pin = TRIG_PIN; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TRIG_PORT, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = ECHO_PIN; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(ECHO_PORT, &GPIO_InitStruct); USART_InitStruct.USART_BaudRate = 115200; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Tx; USART_Init(USART1, &USART_InitStruct); USART_Cmd(USART1, ENABLE); TIM3_init(); while(1) { float distance = get_distance(); printf("Distance: %.2f cm\n", distance); delay_us(500000); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值