精华内容
下载资源
问答
  • 电子邮件是一件严肃的事情

    万次阅读 2007-08-07 11:32:00
    我还以为这位朋友时马虎忘了正文呢,却突然发现他在正文里的IP地址。我这个晕啊,我用OWA访问邮件,预览时根本看不全标题,只好打开邮件,再把标题粘出来,取到IP地址。后来,也就是今天,又收到邮件,又是...
    一个故事,不吐不快。一个真实的、刚刚发生在我身上的事。
    

    前些天,一个合作伙伴发邮件过来,要我把他们的一个服务器IP地址加到我方服务器的允许访问列表里。打开邮件一看,正文空空如也,唯有签名档。我还以为这位朋友一时马虎忘了写正文呢,却突然发现他在正文里写的IP地址。

    我这个晕啊,我用OWA访问邮件,预览时根本看不全标题,只好打开邮件,再把标题粘出来,取到IP地址。

    后来,也就是今天,又收到邮件,又是如此。我有点忍不住了,于是乎在回答完问题后,我加了一句半开玩笑的话——

    ——“拜托你们公司人都啥毛病啊,邮件正文是空的,所有的话都写在标题里?”

    没想到他们还先恼了。这朋友不给我回邮件,而是把邮件转发给他的上司,说:

    ——“我们公司人没有毛病,请大家以后互相尊重!”

    有意思的是,他这次倒是把内容写在了正文里。不用标题了。

    然后他的上司又把邮件发给了我们公司和我一起负责这个项目的同事(他可能以为这位同事是我上司),并说:

    ——“XX,最近在以YY为主的技术团队的帮助下,我们在努力推进合作项目的进度,并且有
    了一定的收效,但是贵公司部分员工不友善的态度已经极大的伤害到彼此的合作,请重
    视此问题!”


    之后就是同时找我说这个事,说他已经“摆平”了,嘱咐我“ 老弟,以后千万别这么不过脑子了。”。

    还要提两个背景——其一,该公司是一家耳熟能详的大公司,总部拥有7层写字楼。其二,这个项目已经比预期时间推后了一个月,而我们之间“彼此的合作”仅仅是我写一个WebServices给他们调用,这个WebServices也简单到只有一个方法,接受2个参数,返回一个弱类型的dataset,只不过在调用时要做IP地址验证。

    ------------------------------- 华丽的分割线--------------------------------

    我要说的是,公司与公司之间、同事与同事之间,发邮件是一件很正规的事情。

    记得以前所待过的公司,都专门对邮件的格式进行过要求,每个公司与每个公司可能要求都不一样,但万变不离其综。

    标题:用简短文字描述正文要说的事情
    正文:先写称呼;然后是对内容的详细说明;之后,如果是给老板发,写上“请指示、望批准”等客套话,如果是给客户发,写“此致敬礼,祝工作顺利”等;最后落款一定写清自己的公司、职位、姓名、联系方式等(就是名片式的签名档)。

    对吧?

    当然,这里说道严肃和正规,Anders Liu自己也有问题,那就是不该在邮件里开玩笑。尤其是这种容易误会的玩笑。 
    展开全文
  • 周末时间参加了东莞和深圳的...正如这篇文章标题所描述的一样,在Android中请求权限从来都不是一件简单的事情。为什么?我认为Google在设计运行时权限这块功能时,充分考虑了用户的使用体验,但是却没能充分考虑开发者

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新。

    周末时间参加了东莞和深圳的两场GDG,因为都是线上参与,所以时间上并不赶,我只需要坐在家里等活动开始就行了。

    等待的时间一时兴起,突然想写一篇原创,聊一聊我自己在写Android权限请求代码时的一些技术心得。

    正如这篇文章标题所描述的一样,在Android中请求权限从来都不是一件简单的事情。为什么?我认为Google在设计运行时权限这块功能时,充分考虑了用户的使用体验,但是却没能充分考虑开发者的编码体验。

    之前在公众号的留言区和大家讨论时,有朋友说:我觉得Android提供的运行时权限API很好用呀,并没有觉得哪里使用起来麻烦。

    真的是这样吗?我们来看一个具体的例子。

    假设我正在开发一个拍照功能,拍照功能通常都需要用到相机权限和定位权限,也就是说,这两个权限是我实现拍照功能的先决条件,一定要用户同意了这两个权限我才能继续进行拍照。

    那么怎样去申请这两个权限呢?Android提供的运行时权限API相信每个人都很熟悉了,我们自然而然可以写出如下代码:

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            ActivityCompat.requestPermissions(this,
                arrayOf(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION), 1)
        }
    
        override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults)
            when (requestCode) {
                1 -> {
                    var allGranted = true
                    for (result in grantResults) {
                        if (result != PackageManager.PERMISSION_GRANTED) {
                            allGranted = false
                        }
                    }
                    if (allGranted) {
                        takePicture()
                    } else {
                        Toast.makeText(this, "您拒绝了某项权限,无法进行拍照", Toast.LENGTH_SHORT).show()
                    }
                }
            }
        }
    
        fun takePicture() {
            Toast.makeText(this, "开始拍照", Toast.LENGTH_SHORT).show()
        }
    
    }
    

    可以看到,这里先是通过调用requestPermissions()方法请求相机权限和定位权限,然后在onRequestPermissionsResult()方法里监听授权的结果。如果用户同意了这两个权限,那么我们就可以去进行拍照了,如果用户拒绝了任意一个权限,那么弹出一个Toast提示,告诉用户某项权限被拒绝了,从而无法进行拍照。

    这种写法麻烦吗?这个就仁者见仁智者见智了,有些朋友可能觉得这也没多少行代码呀,有什么麻烦的。但我个人认为还是比较麻烦的,每次需要请求运行时权限时,我都会觉得很心累,不想写这么啰嗦的代码。

    不过我们暂时不从简易性的角度考虑,从正确性的角度上来讲,这种写法对吗?我认为是有问题的,因为我们在权限被拒绝时只是弹了一个Toast来提醒用户,并没有提供后续的操作方案,用户如果真的拒绝了某个权限,应用程序就无法继续使用了。

    因此,我们还需要提供一种机制,当权限被用户拒绝时,可以再次重新请求权限。

    现在我对代码进行如下修改:

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            requestPermissions()
        }
    
        override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults)
            when (requestCode) {
                1 -> {
                    var allGranted = true
                    for (result in grantResults) {
                        if (result != PackageManager.PERMISSION_GRANTED) {
                            allGranted = false
                        }
                    }
                    if (allGranted) {
                        takePicture()
                    } else {
                        AlertDialog.Builder(this).apply {
                            setMessage("拍照功能需要您同意相机和定位权限")
                            setCancelable(false)
                            setPositiveButton("确定") { _, _ ->
                                requestPermissions()
                            }
                        }.show()
                    }
                }
            }
        }
    
        fun requestPermissions() {
            ActivityCompat.requestPermissions(this,
                arrayOf(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION), 1)
        }
    
        fun takePicture() {
            Toast.makeText(this, "开始拍照", Toast.LENGTH_SHORT).show()
        }
    
    }
    

    这里我将请求权限的代码提取到了一个requestPermissions()方法当中,然后在onRequestPermissionsResult()里判断,如果用户拒绝了某项权限,那么就弹出一个对话框,告诉用户相机和定位权限是必须的,然后在setPositiveButton的点击事件中调用requestPermissions()方法重新请求权限。

    我们来看一下现在的运行效果:

    可以看到,现在我们对权限被拒绝的场景进行了更加充分的考虑。

    那么现在这种写法,是不是就将请求运行时权限的各种场景都考虑周全了呢?其实还没有,因为Android权限系统还提供了一种非常“恶心”的机制,叫拒绝并不再询问。

    当某个权限被用户拒绝了一次,下次我们如果再申请这个权限的话,界面上会多出一个拒绝并不再询问的选项。只要用户选择了这一项,那么完了,我们之后都不能再去请求这个权限了,因为系统会直接返回我们权限被拒绝。

    这种机制对于用户来说非常友好,因为它可以防止一些恶意软件流氓式地无限重复申请权限,从而严重骚扰用户。但是对于开发者来说,却让我们苦不堪言,如果我的某项功能就是必须依赖于这个权限才能运行,现在用户把它拒绝并不再询问了,我该怎么办?

    当然,绝大多数的用户都不是傻X,当然知道拍照功能需要用到相机权限了,相信99%的用户都会点击同意授权。但是我们可以不考虑那剩下1%的用户吗?不可以,因为你们公司的测试就是那1%的用户,他们会进行这种傻X式的操作。

    也就是说,即使只为了那1%的用户,为了这种不太可能会出现的操作方式,我们在程序中还是得要将这种场景充分考虑进去。

    那么,权限被拒绝且不再询问了,我们该如何处理呢?比较通用的处理方式就是提醒用户手动去设置当中打开权限,如果想做得再好一点,可以提供一个自动跳转到当前应用程序设置界面的功能。

    下面我们就来针对这种场景进行完善,如下所示:

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            requestPermissions()
        }
    
        override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults)
            when (requestCode) {
                1 -> {
                    val denied = ArrayList<String>()
                    val deniedAndNeverAskAgain = ArrayList<String>()
                    grantResults.forEachIndexed { index, result ->
                        if (result != PackageManager.PERMISSION_GRANTED) {
                            if (ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[index])) {
                                denied.add(permissions[index])
                            } else {
                                deniedAndNeverAskAgain.add(permissions[index])
                            }
                        }
                    }
                    if (denied.isEmpty() && deniedAndNeverAskAgain.isEmpty()) {
                        takePicture()
                    } else {
                        if (denied.isNotEmpty()) {
                            AlertDialog.Builder(this).apply {
                                setMessage("拍照功能需要您同意相册和定位权限")
                                setCancelable(false)
                                setPositiveButton("确定") { _, _ ->
                                    requestPermissions()
                                }
                            }.show()
                        } else {
                            AlertDialog.Builder(this).apply {
                                setMessage("您需要去设置当中同意相册和定位权限")
                                setCancelable(false)
                                setPositiveButton("确定") { _, _ ->
                                    val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
                                    val uri = Uri.fromParts("package", packageName, null)
                                    intent.data = uri
                                    startActivityForResult(intent, 1)
                                }
                            }.show()
                        }
                    }
                }
            }
        }
    
        override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
            when (requestCode) {
                1 -> {
                    requestPermissions()
                }
            }
        }
    
        fun requestPermissions() {
            ActivityCompat.requestPermissions(this,
                arrayOf(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION), 1)
        }
    
        fun takePicture() {
            Toast.makeText(this, "开始拍照", Toast.LENGTH_SHORT).show()
        }
    
    }
    

    现在代码已经变得比较长了,我还是带着大家来梳理一下。

    这里我在onRequestPermissionsResult()方法中增加了denied和deniedAndNeverAskAgain两个集合,分别用于记录拒绝和拒绝并不再询问的权限。如果这两个集合都为空,那么说明所有权限都被授权了,这时就可以直接进行拍照了。

    而如果denied集合不为空,则说明有权限被用户拒绝了,这时候我们还是弹出一个对话框来提醒用户,并重新申请权限。而如果deniedAndNeverAskAgain不为空,说明有权限被用户拒绝且不再询问,这时就只能提示用户去设置当中手动打开权限,我们编写了一个Intent来执行跳转逻辑,并在onActivityResult()方法,也就是用户从设置回来的时候重新申请权限。

    那么现在运行一下程序,效果如下图所示:

    可以看到,当我们第一次拒绝权限的时候,会提醒用户,相机和定位权限是必须的。而如果用户继续置之不理,选择拒绝并不再询问,那么我们将提醒用户,他必须手动开户这些权限才能继续运行程序。

    到现在为止,我们才算是把一个“简单”的权限请求流程用比较完善的方式处理完毕。然而代码写到这里真的还算是简单吗?每次申请运行时权限,都要写这么长长的一段代码,你真的受得了吗?

    这也就是我编写PermissionX这个开源库的原因,在Android中请求权限从来都不是一件简单的事情,但它不应该如此复杂

    PermissionX将请求运行时权限时那些应该考虑的复杂逻辑都封装到了内部,只暴露最简单的接口给开发者,从而让大家不需要考虑上面我所讨论的那么多场景。

    而我们使用PermissionX来实现和上述一模一样的功能,只需要这样写就可以了:

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            PermissionX.init(this)
                .permissions(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION)
                .onExplainRequestReason { scope, deniedList ->
    				val message = "拍照功能需要您同意相册和定位权限"
    				val ok = "确定"
                    scope.showRequestReasonDialog(deniedList, message, ok)
                }
                .onForwardToSettings { scope, deniedList ->
    				val message = "您需要去设置当中同意相册和定位权限"
    				val ok = "确定"
                    scope.showForwardToSettingsDialog(deniedList, message, ok)
                }
                .request { _, _, _ ->
                    takePicture()
                }
        }
    
        fun takePicture() {
            Toast.makeText(this, "开始拍照", Toast.LENGTH_SHORT).show()
        }
    
    }
    

    可以看到,请求权限的代码一下子变得极其精简。

    我们只需要在permissions()方法中传入要请求的权限名,在onExplainRequestReason()和onForwardToSettings()回调中填写对话框上的提示信息,然后在request()回调中即可保证已经得到了所有请求权限的授权,调用takePicture()方法开始拍照即可。

    通过这样的直观对比大家应该能感受到PermissionX所带来的便利了吧?上面那段长长的请求权限的代码我真的是为了给大家演示才写的,而我再也不想写第二遍了。

    另外,本篇文章主要只是演示了一下PermissionX的易用性,并不涉及其中具体的诸多用法,如Android 11兼容性,自定义对话框样式等等。如果大家感兴趣的话,更多用法请参考下面的链接。

    Android运行时权限终极方案,用PermissionX吧

    PermissionX现在支持Java了!还有Android 11权限变更讲解

    PermissionX重磅更新,支持自定义权限提醒对话框

    在项目中引入PermissionX也非常简单,只需要添加如下的依赖即可:

    dependencies {
        ...
        implementation 'com.permissionx.guolindev:permissionx:1.3.1'
    }
    

    最后附上PermissionX开源库地址:https://github.com/guolindev/PermissionX


    如果想要学习Kotlin和最新的Android知识,可以参考我的新书 《第一行代码 第3版》点击此处查看详情


    关注我的技术公众号,每天都有优质技术文章推送。

    微信扫一扫下方二维码即可关注:

    展开全文
  • 但其实我发现写博客真不是一件容易的事情,首先有些问题你能够解决它却不一定能够把它讲得很透彻,你能把它讲得很透彻又不一定能够用文字描述得很清晰,最后你还不一定有时间来做这些事情. 其实话说回来,写一篇原创的...

    写博客其实就是为了分享,对我们而言就是分享自己在开发技术上的一些心得体会.但其实我发现写博客真不是一件容易的事情,首先有些问题你能够解决它却不一定能够把它讲得很透彻,你能把它讲得很透彻又不一定能够用文字描述得很清晰,最后你还不一定有时间来做这些事情.

    其实话说回来,写一篇原创的技术博客,对自己掌握的东西也是一种巩固,好记性不如烂笔头,也许这几天你全身心投入在一个问题的研究当中,很多东西你一下就吸收了,为己所用,然而要不了几天,当你放下已经解决掉的问题之后,你就会发现,之前很多已经吸收的东西,又忘记了.特别是现在感觉自己年纪大了,忘性也越来越大了.今天回头看了一下之前写的几篇文章,感觉自己都还有那么点收获,这种感觉很好.如果有朋友在看了我的文章之后感觉得到了帮助,那感觉将会更好.

    最近有看一些图像处理方面的资料,主要原因是之前接触了一个开源的项目.有一款老游戏不知道有多少朋友知道,牛蛙公司当年出品的主题医院,当年我就很痴迷那个游戏,后来也不知道牛蛙公司怎么样了,反正没看到他们的作品了,但是网上开源项目里面却有两个是和这个主题医院有关的,一个似乎openth,一个是corsixth,我接触的是corsixth,它是lua脚本来实现了整个游戏的流程,数据,贴图等等,图形方面可以使用sdl来作,这简直是一个非常有利的消息,因为这意味这可以很轻易的把这些代码移植到android平台上运行.实际上我花了两个晚上的时间,把corsixth的代码修改之后用ndk编译通过了,当时还是很激动的,放到android手机上一跑,也算是跑起来了,不过理所当然的操作上会有一些问题,而最大的问题似乎是原game只支持最小到640x480的分辨率,而我需要让它能够运行在480x320的手机上,所以才去看了些图像的基础知识,了解了一些缩放算法,不过最后还是放弃缩放这一途径了,因为资源都是8bpp的index image,这恐怕是要实现缩放最难的一种了.后来想想倒是可以把原游戏中的资源导出成bmp,然后用ps工具来修改图片,再保存成游戏的资源格式,不过这一想法目前还没有付诸实行,有时间再整理吧.

    这里贴上几个图片,是我移植之后运行游戏的图片.请不要向我索取源代码,我使用的基本都是corsixth的代码,进行了一些适配修改,对于这些什么开源的license我也没整太明白,不想去侵犯了别人的什么权益.我正在联系corsixth的owner,看看他们是否有兴趣添加对android的支持,如果可能的话,也许我现有的成果将来会出现在corsixth的项目分支中.又或者有朋友有组织开源项目的经验和精力(二者缺一不可),我们可以另起炉灶,开始一个新的项目,但必须保证对corsixth的尊重.

    这里是corsixth项目的地址:http://code.google.com/p/corsix-th/

    该项目的wiki中记录了很多有用的东西,包括C/LUA以及TH的资源格式等等,有兴趣的可以好好看看.

    游戏主菜单,我去掉了tip对话框

    1

    游戏主界面,下面的menubar太长,我把它截断了.只留下左边的固定部分右边还有一个自动隐藏的菜单.图中是建立一个房间的,目前操作有两个问题,一个是拉伸房间位置的时候不好滚屏,一个是摆放房间内物品的时候无法转向.

    2

    房间建立之后,雇佣了一个医生.雇佣医生的界面也超出了屏幕,点不到下面的确定按钮,但是可以按轨迹球来表示确认.:P

    3

    郑重声明:TH是牛蛙公司的游戏产品,CorsixTH只是一个开源研究项目,并不是一个发布的游戏,所用到的资源可以是游戏原版的资源,也可以是网上可以轻易找到的THDemo的资源.本人将CorsixTH移植到Android平台也只是出于个人兴趣爱好,做一些研究尝试,无任何商业目的.

    展开全文
  • spring容器加载完毕干一件事情(利用ContextRefreshedEvent事件) www.MyException.Cn 发布于:2013-12-02 12:00:40 浏览:27次 0 spring容器加载完毕做一件事情(利用ContextRefreshedEvent...

    spring容器加载完毕干一件事情(利用ContextRefreshedEvent事件)

    www.MyException.Cn   发布于:2013-12-02 12:00:40   浏览:27次
    0
    spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
    关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)

    应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用了其他类(可能是更复杂的关联),所以当我们去使用这个类做事情时发现包空指针错误,这是因为我们这个类有可能已经初始化完成,但是引用的其他类不一定初始化完成,所以发生了空指针错误,解决方案如下:

    1、写一个类继承spring的ApplicationListener监听,并监控ContextRefreshedEvent事件(容易初始化完成事件)

    2、定义简单的bean:<bean id="beanDefineConfigue" class="com.creatar.portal.webservice.BeanDefineConfigue"></bean>

    或者直接使用@Component("BeanDefineConfigue")注解方式



    完整的类如下:

    package com.creatar.portal.webservice;

    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextRefreshedEvent;
    import org.springframework.stereotype.Component;

    @Component("BeanDefineConfigue")
    public class BeanDefineConfigue implements
    ApplicationListener<ContextRefreshedEvent> {//ContextRefreshedEvent为初始化完毕事件,spring还有很多事件可以利用 

    // @Autowired
    // private IRoleDao roleDao;


    /**
    * 当一个ApplicationContext被初始化或刷新触发
    */
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
    // roleDao.getUserList();//spring容器初始化完毕加载用户列表到内存
    System.out.println("spring容易初始化完毕================================================");
    }

    }





    或者使用xml配置方式(非注解),简单配置个bean即可

    <bean id="beanDefineConfigue" class="com.creatar.portal.webservice.BeanDefineConfigue"></bean>





    其他定义方式:

    完整的类如下:

    package com.creatar.portal.webservice;

    import java.util.ArrayList;
    import java.util.List;

    import org.springframework.context.ApplicationEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextRefreshedEvent;
    import org.springframework.stereotype.Component;

    @Component("BeanDefineConfigue2")
    public class BeanDefineConfigue2 implements ApplicationListener<ApplicationEvent> {

    List<String> list = new ArrayList<String>();

    /**
    * 当一个ApplicationContext被初始化或刷新触发
    */
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
    if (event instanceof ContextRefreshedEvent) {
    System.out.println("spring容易初始化完毕================================================888");
    }

    }
    }


    spring其他事件:

    spring中已经内置的几种事件:

    ContextClosedEvent   、ContextRefreshedEvent  、ContextStartedEvent  、ContextStoppedEvent   、RequestHandleEvent


    后续研究:
    applicationontext和使用MVC之后的webApplicationontext会两次调用上面的方法,如何区分这个两种容器呢?

    但是这个时候,会存在一个问题,在web 项目中(spring mvc),系统会存在两个容器,一个是root application context ,另一个就是我们自己的 projectName-servlet context(作为root application context的子容器)。

    这种情况下,就会造成onApplicationEvent方法被执行两次。为了避免上面提到的问题,我们可以只在root application context初始化完成后调用逻辑代码,其他的容器的初始化完成,则不做任何处理,修改后代码

    如下:

        @Override  
          public void onApplicationEvent(ContextRefreshedEvent event) {  
            if(event.getApplicationContext().getParent() == null){// root application context 没有parent,他就是老大.  
                 //需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法。  
            }  
          } 
    展开全文
  • 一件数据库学习有趣的事情

    千次阅读 2017-07-11 22:08:16
    在我搭的服务器上,用php对数据库进行操作,发现总是有重复操作,比如插入个数据,往往插入了好几个相同的数据。想了想,我是在根目录下的index....换了个php文件操作,果然不会出现这个问题了。。。。。。。。
  • 一年一度的高中毕业生填简历的日子即将就要到了,又有很多人问计算机专业的事情。其实我从心底里觉得,高考后才来问这个,已经完了一...想把代码好,本来就是一件非常困难的事情。我大三的时候训练一个大一的老乡,就
  • 一件关于数据库日志log的无聊事情

    千次阅读 2010-06-10 10:26:00
    还是下来,毕竟很少弄这么无聊的事情。    事情起因是需要给服务器做性能基数(baseline),用 sqldiag 提取了大量的log信息,当然这里的数据库日志并不是指ldf文件。当我打开SQL 2005或2008的对象资源...
  • 自己的程序,就算你卖1元,别人也嫌贵,网上免费的大堆,凭什么你要收钱,更有甚者,有的用户以你开发的程序,你就有义务来帮我解决我安装时碰到的问题来质问开发者。 所以靠程序卖钱真是分钱都拿不到,令人...
  • 你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。 输入格式: 你的程序首先会读到一个正整数n,1<=n<=100000。然后是n个整数。 输出...
  • 我在阿里代码学会的六

    万次阅读 多人点赞 2020-08-17 13:34:45
    简介:从团队的角度来看,好代码是一件非常有必要的事情。如何出干净优雅的代码是个很困难的课题,我没有找到万能的 solution,更多的是一些 trade off,可以稍微讨论一下。了多年的代码,始终觉得如何出...
  • 关于D3D11,你必须了解的几件事情

    万次阅读 2015-03-08 14:29:57
    仅以此文献给那些自以为了解D3D11的专家 D3D11正式发布已经有两年多了。在这短短的时间里,各GPU厂商 都相继推出了支持D3D11的显卡,许多游戏引擎也迅速推出了对...关于D3D11,有些事情你确实必须了解。 Feature Lev
  • 真相了!关于“书”这

    千次阅读 多人点赞 2014-01-06 08:36:32
    有生以来,你干过的最后悔的10事有哪些?如果要问我,“书”必定是其中之。为什么呢?
  • 但是计算倒计时时间是一件讨厌并且费脑子的事情。于是我趁今天周末了这么一个Android手机软件,还开放源代码了。“煮饭时间”——一个很简单的计算煮饭时间的Android手机软件,作者Liigo。项目首页:...
  • 怎么才能够坚持做一件事并且把它做好?

    千次阅读 多人点赞 2020-03-16 09:05:11
    好久没过碎言碎语的文章了,一直都是更新技术文章,那么今天就换换口味,聊聊近况和想法。 自从回北京之后,就一直在家办公,十几平方的卧室内支撑着北漂的身体和灵魂,我相信这不是我个人的情况,而是无数在...
  • 安装 openSUSE 13.1 后必须做的10件事情

    千次阅读 2014-05-21 17:37:04
    安装 openSUSE 13.1 后必须做的10件事情  2013年11月20日,openSUSE 13.1 在其官网正式发布。主要特点包括:Linux 3.11,默认KDE Plasma Desktop 4.11桌面环境,可选GNOME 3.10,Xfce,Enlightenment,...
  • 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。...看到这道题的 第一件事情就是把思路先捋一捋 为了好理解 用0来表示不是凶手 1表示是凶手 我们先假设所有人都是清白的也就
  • 关于blog这

    千次阅读 多人点赞 2014-10-20 00:52:35
    其实一直是挺喜欢blog的,但是最近在blog这事上遇到或者开始思考一些问题了。 首先,blog的动机。对于这个问题,我从自己的理解上得出以下几个原因: blog是对自己学到知识的种总结,而且是种相对...
  • 位大牛对于技术博客的一些建议

    千次阅读 多人点赞 2017-11-09 15:00:47
    原文 :http://www.ityouknow.com/tech/2017/07/16/operating-technology-blog.html 文章是一个短期没有收益,长期收益很大的一件事情,但往往是很多人坚持不下来,特别是文章的初期,刚完文章没有...
  • 今天看到以前大学同学分享了篇文章,仔细看了一下,其中也有他自己对IT行业的一些心得与体会。看了之后感慨万千,自己从事IT培训行业的时间也不短了,本来报着向中国互联网行业输送大量高精尖技术人才,并努力改变...
  • 第11件重要事情:抢着做事即使是打扫卫生 如果你主动行动起来,不但锻炼了自已同时也为自已积蓄了力量。 ...主动是为了给自已增加机会,增加自我价值的机会。...在职场和官场,赞美别人是一件艺术
  • 坚持一件事比决定一件事难多了

    千次阅读 热门讨论 2007-07-24 22:15:00
    虽然也想到了坚持会很难,但是我还是一直给自己打气,也一直在坚持,但是整整个6月,却篇都没有翻译,我不想找什么理由,如果有就是我自己太懒了。决定很容易坚持却很难。7月,在炎热中,我把8.2和8.3上传完,...
  • 怎样商业英文信(2) -- 描述事情

    千次阅读 2008-05-17 23:43:00
    怎样商业英文信(1):间架结构怎样商业英文信(2) -- 描述事情英文信的目的是为了向收件人描述一件事情或者提一些要求。让收件人明白你想说什么,是发件人的责任。这里根据我的经验说说商业信件的写作要点。小...
  • 2019年终总结,所有的时间只为做好一件

    万次阅读 多人点赞 2019-12-31 07:26:43
    又到了一年的最后天,按照往年的惯例,是时候该一下今年的年终总结了。另外今年的元旦假期比较特殊,只放周三天假,因此我们很快又会在2020年见面了。 年终总结主要是回顾过去的一年主要做了哪些事情,那么...
  • 如何写一个最简单的操作系统

    万次阅读 2014-07-19 01:11:48
    关于如何写一个最简单的操作系统,这个事情完全处于好奇。实际上这样一个操作系统没有任何使用价值。整个系统要做的事情就是输出一句“Hello,OS world!”,但是这样一个输出不同于printf和cout,它是完全不依赖高级...
  • 我的2018:用一年的时间写一份年终总结!

    万次阅读 多人点赞 2018-12-30 23:01:37
    奖项只代表过去,更多是鞭策未来能否言行如。 得到罗胖提出跨年演讲要做20年,那我索性年终总结一辈子吧。 差不多从读初中开始,每年都会一些当下的思考和总结性的文章,从开始的流水账式的记录,到大学阶段...
  • 前言: 有的人走一步,看一步,学一点,算一点,缺少知识的系统化观念; 有的人今天学点,明天学点,后天学点,缺少...题目:学习从来不是一件轻松的事情,但也从来不是一件艰难的事情 之所以忽然提笔,是因为这段
  • 个月完vue音乐播放器

    万次阅读 多人点赞 2020-05-06 11:13:36
    前言 我觉得每段自己努力的时光都需要被自己记录下来,所以就有了想法记录我这个月看视频的所得。...为什么说是比较完整的项目开发历程,因为自己没有经历切图画界面着块,自己甚至没有怎么去UI界面...
  •  假设一套数学练习试卷有10个题目,题目有难有易,如果第个题目比较难,你傻傻地在那个地方死死地纠结,你很可能会卡住,此时老师又不在你身边,所以固执的你,个题目也没有做出来,老师来了,发现你个题目也...
  • 如何从零开始写一个操作系统?

    万次阅读 多人点赞 2019-08-20 18:17:55
    如何从零开始写一个简单的操作系统? 关注问题 写回答 操作系统 编程学习 如何从零开始写一个简单的操作系统? 看了这个:从零开始写一个简单的操作系统 求指教。 关注者 4,787 被浏览 352,884 关注问题 ...
  • 在我早期的篇博文Java反射机制的原理和用途中,文末我到过:"如果你不做框架的话,基本上是用不到反射机制的,我们大多时候是使用框架的一方,而反射机制都已经在底层实现过了,因此,我们不必担心,我们会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 447,731
精华内容 179,092
关键字:

写一件事情