Wednesday 29 March 2017

html family-font, links, border,





<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8"/>
<title>
more css
</title>

<style>
p{color:#dd613d;}
th{color:#dd613d;}
h2{color:#dd613d;}
a:link{color:#00ff00; text-decoration:none;}
a:visited{color:#009900; text-decoration:none;}
a:hover{color:#ffff00; text-decoration:none;}
a:active{color:#ff9900; font-size:110%;}
</style>
</head>
<body style="background-image:url('image/nebular.jpg'); background-repeat:repeat-y; background-size:cover">
<h2 style="color:#dd613d; ">Google Earth</h2>
<img src="image/logo.png" alt="google earth icon" height="50" />
<br/>
<a href="https://www.google.ca/" target="_blank">Google</a>
<p style="border:2px dotted #00ff00;margin-left:10px; padding:20px; font-family:Comic Sans MS, cursive, sans-serif;">Use Google Earth on the desktop to travel anywhere without leaving your desk. For additional advanced tools, use Google Earth Pro for no extra charge.</p>

<table border="1">
<thead>
<tr>
<th>Moon</th>
<th>Mars</th>
<th>Sky</th>
<th>Ocean</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<img src="https://www.google.com/earth/images/products_hl_moon.png" alt="moon"/>
</td>
<td>
<img src="https://www.google.com/earth/images/products_hl_mars.png" alt="mars"/>
</td>
<td>
<img src="https://www.google.com/earth/images/products_hl_sky.png" alt="sky"/>
</td>
<td>
<img src="https://www.google.com/earth/images/products_hl_ocean.jpg" alt="ocean"/>
</td>
</tr>
</tbody>
</table>

<p style="text-align:right; font-size:200%">nebular right footer</p>
</body>
</html>

Tuesday 28 March 2017

add html to blog




<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>

    <style>
        a:link {
            color: #ff9900;
            text-decoration: none;
        }

        a:visited {
            color: #ff9900;
            text-decoration: none;
        }

        a:hover {
            color: #faf75c;
            text-decoration: none;
        }

        a:active {
            color: #faf75c;
            font-size: 110%;
        }
    </style>
</head>
<body>
    <div style="color:#33cc33; border:2px dotted #33cc33;width:658px; margin-left:10px; padding:20px; font-family:Comic Sans MS, cursive, sans-serif;">
        <h3>
            Chuanshuoge, Calgary, Canada, Earth, Solar system, Milky Way Galaxy
        </h3>

        <h2>
            <a href="http://chuanshuoge2.blogspot.ca" target="_blank"><sub>Chuan</sub>Shuo<sup>Ge</sup> - <sub>传</sub>说<sup>哥</sup></a>
        </h2>
    </div>
    
    <br/>
    <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsTWUDul5K6Pt9yEB7CyZ82QCh32DykL7qIXE_oWmQagoVVf91V-6OqEnpOlB1fEdaue222Z-24RSEyZyNBxryMqPY3GvF3nw6vj30rugbpKFNSqMv4kTeSMBGFFdMSBBJzRA6sWfmhdo/s1600/www.GIFCreator.me_pxVfpz.gif"; alt="Location"/>
</body>
</html>

-----------------------------------------------------
//startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace WebApplication1
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseDefaultFiles();
            app.UseStaticFiles();

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
        }
    }
}


screen shot program

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private int picnum = 1;

        private void timer1_Tick(object sender, EventArgs e)
        {
            //Rectangle bounds = this.Bounds;
            //Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
            Bitmap bitmap = new Bitmap(640, 320);
            Graphics g = Graphics.FromImage(bitmap);
         
            //g.CopyFromScreen(left corner, Point.Empty, new Size(640,320));
            g.CopyFromScreen(new Point(852, 230), Point.Empty, new Size(640,320));
            bitmap.Save("test" + picnum + ".jpg");
            picnum++;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            textBox1.Text= Cursor.Position.X.ToString();
            textBox2.Text= Cursor.Position.Y.ToString();
        }
    }
}



http://blogger-hints-and-tips.blogspot.ca/2010/10/putting-html-code-from-third-party-into.html
http://www.talkingdotnet.com/make-index-html-startup-file-in-aspnet-core/
https://ezgif.com/maker
http://gifcreator.me/

Saturday 25 March 2017

加拿大做房东必须知道的常识!

从统计数字看,房东和租客发生纠纷的比例可不小。文化差异、经济地位不同、处理方式的偏差等等原因,使得租务纠纷接连不断。更有一个深层的原因,那就是目前的Residential Tenancies Act, 2006(以下简称“民租法”),对租客的过分保护,更使得房东,也就是物业投资人的经营环境不那么宽松。那么如何在现有的管理法规内保证房东的合法权益,同时保护房产的正常维护至关重要。



出租中的房子我想进去检查,看看房子是否被损坏,可以吗?



加拿大的法律重视个人隐私。您一旦出租了物业给租客,您就失去了对物业的使用权。所以,租客无论把单元弄的多脏乱差,只要未造成实际损害,您均无权过问。除非共管物业管理公司和邻居向您投诉,才需要你去通知租客进去检查。有的房东朋友说“她把我的房子住的多脏多乱”,我不得不提醒您,那里暂时不是您的房子。所以,进入出租物业务必遵守民租法的进入要求。以上情况下房东合法进入:

如果房东有证据显示有紧急情况发生,比如严重的漏水等非正常情况发生需要马上处理,可以不用通知租客直接进到房子里;

房东确信租客放弃居住、已经搬离了,可以不通知直接进入;

如果房东需要对房子做一些正常维护、检查、为后一任租客展示、贷款需求等,需要24小时提前通知租客,通知必须是书面的。



民租法的规定非常细致,这里是链接供您查阅。

http://www.servicealberta.ca/pdf/tipsheets/InFORMation_for_landlords.pdf



在签约时,我多收他几个月的房租,可以吗?



民租法允许房东在租用开始时收取第一个月的房租,和不多于月租的押金。此外,民租法还允许房东收取“合理的”钥匙及开门器的押金,押金金额和市场重新制造钥匙和开门器的金额大致相等。可见,民租法不允许收取任何超过这些押金的钱。所谓的“损害赔偿抵押金”、“提前退租抵押金”、“额外住客抵押金”等等,即使租约中双方完全认可同意,民租法也都不允许。如果一旦被告诉,管理局会要求您及时退回,并可能罚款。顺便说一下,任何租约中与民租法有抵触的条款,都是无效条款。民租法对民用租务有最终的管辖权。



我只出租房子里的一个房间,租客和家人一起使用卫生间和厨房。如果日后我这个租客发生纠纷,怎么办?


如果您或您的子女、父母,或者您配偶的子女或父母,一定要和租客共同使用厨房或者卫生间,一旦发生纠纷,房东房客管理局不受理纠纷告诉。做为房东,您应该及时到附近的警察局投诉,将情形告诉给警察,警察在核实“共用”事实后,往往会按“私闯物业法”处理租客。这是民租法的第五条第i款的规定。



一年的租约,刚刚过去三个月,租客就要提前搬走,我能得到些补偿吗?


事实上,您的确面临租客违约。所以,从某种意义上说,您有权寻求损害赔偿。从表面上看,租客应该付清余下的九个月租金,才能离开。但是在实际业务中,这样缴清余款净身出户的租客太少见了。您无法阻拦租客离开,但是您有地位在法院提起诉讼,一般是在小额法庭。您在证明您的损失时,要有租客搬迁后的新地址,以便送达起诉书,您还会要证明您“完全使用了合理的手段,对损失进行了及时的补救”,但仍然形成损失,凭借证据,寻求法官给出合理判决。



我和租客签了一年的租约,刚刚过去三个月,租客没有过错,我就是想把房子收回来,能办到吗?


首先,租约是双方签订的合同,有它自己的效力。任何人对一份合法合同的条款的单方面修改,都有可能是违约。可见,您在租期未满时,硬性收回物业,是明显的违约行为,您有可能需要承担违约责任。有人说房东可以提前六十天通知房客搬家,这是一句非常非常不负责任的“告诫”。解约,是民租法非常重视的话题。牵涉面非常广泛。这里我仅仅说,从来就没有所谓“提前六十天通知,租客就得搬出”这回事,除非符合民租法的规定。



我的租客欠了我的租金,我怎么办?


这是最常见的现象,甚至一切都是从欠租开始的。什么是欠租?一语道破,超过了该交租的日子,租金没到房东手里,就是欠租。欠租后,有的房东很友善地写信、发短信、发电邮、发微信给租客,有的言简意赅,有的长篇大论。这些都是完全不必要的。记得吗?刚刚说了,租约就是合同,单方面修改合同(在这里是交租日),就是违约。您已经有理由因为租客违约在先,而取消租约了。当然,欠租后几天,房东收到租金了,租约就不能取消。租客一旦欠租,房东应该及时送达民租法规定使用的“欠租驱逐通知书”表格。如果仍然租金未付,房东可以申请听证会,以至于取消租约,驱逐租客。其中的过程步骤,民租法对每个阶段的日期都有精细的规定。



房子分租给两个单身,两个人闹矛盾,半夜放音乐,在屋里吸烟,聚会不断,甚至还有使用违禁药品的行为。我怎么办?


做为房东,一旦接到租客投诉,您有义务立即着手调查并寻求解决。问题中的乙,已经造成了对甲的“合理享受”的损害,甚至有违法行为。您应该及时向乙发出符合民租法的通知书,通知乙立即停止这些行为。如不果,您应该向房东房客管理局申请解约,以便最终驱逐乙。否则,甲有权向您因“房东不履行义务”而提出索赔。



我出租独立屋给一个家庭,从1月1日,到12月31日,租期一年。租期结束时,租客告诉我,他们要继续租住,我有权拒绝吗?



这个问题还是涉及解约。看似简单,其实其中有许多环节需要分析。民租法第四十四条第四款的确要求租客在期满前最少60天通知房东是否继续租用。然而,在实际业务中,不少的租客忽视了这一点。那么,如果租客通知了,显然双方按时顺利解约。如果没有通知,民租法则认为租客继续租住。这样情况就比较复杂了。租客可能说,期满了,我要搬家了;房东说,你没说不租,提前搬家就是违约。租客也可能说,期满后不通知就是不搬;房东也会说,期满了,你就要走。这里,我只能简单地说,租期届满并不意味着租客就要搬走,具体情形需要个别解说。这是除去欠租以外,第二个容易发生纠纷的问题。房东一定要和租客提前沟通,制定计划。



我把租客给我的押金抵了最后一个月房租。之后,租客改变主意,说继续居住,而且开始欠租了。我怎么办?


首先,什么是“末月”,租期上说的到期日,并不是末月。只有租客说的末月才是末月。一旦确定了末月,那么我建议双方签一个搬迁协议,这样日后有个双方自愿从某日解约的证据。于是才能判断出何时是末月,才能使用末月押金。问题中的情况,房东可以告诉租客,押金其实只是过户了,房东尚未使用,仍然在账,他应该继续支付租金,直到末月确定。



我出租地下室没有许可证。租客欠租,而且威胁我要去报告给政府消防部门,我怎么办?


实话实说,这是个棘手的问题,因为您违规在先。我承认,这样的事到处都有,但是城市法律法规是要首先遵守的。但是,您仍然有地位追讨欠租,和普通程序一样,房东房客管理局仅仅对租务有管辖权,地下室的出租许可是市府的范围。您要判断得失利弊。也许这个回答您不满意,这也正说明,法律是精细的。法律代理人不是万能的,不是进来了法律事务所,代理人什么都能替您搞掂。还是先遵守法律,之后,我们才能游刃有余吧。

Friday 24 March 2017

Monday 20 March 2017

aspcore authorize2 sessions async timed logout

long time no log in, need log in again

logged in successful, redirect to main page

redirect to second page: server redirect to index action to verify authentication, if pass, redirect to second page

logged out
logged in again


//controller

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Authorize2.Models;
using Microsoft.EntityFrameworkCore;

namespace Authorize2.Controllers
{
    public class AuthorizeController : Controller
    {
        private Authorize2Context DB;

        public AuthorizeController(Authorize2Context context)
        {
            DB = context;
        }

        // GET: Authorize
        public async Task<IActionResult> Index()
        {
            var previous_page = HttpContext.Session.GetString("URL");

            HttpContext.Session.SetString("URL", "Index");

            var machine = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

            var exist_login_record = await DB.LoginRecord.FirstOrDefaultAsync(x => x.Computer == machine);

            //if computer not registered, register computer, redirect to log in page
            if (exist_login_record == null)
            {
                DB.LoginRecord.Add(new LoginRecord { Computer = machine });
                await DB.SaveChangesAsync();
            }
            else
            {
                //if computer is registered, and user logged in, redirect to Main page, otherwise redirect to login              
                if (exist_login_record.UserId != null)
                {
                    TimeSpan timespan_since_last_login = (TimeSpan)(DateTime.Now - exist_login_record.LastLogin);

                    //if already logged in and last log in within 30 second ago
                    if (timespan_since_last_login.TotalSeconds < 30)
                    {
                        exist_login_record.LastLogin = DateTime.Now;
                        await DB.SaveChangesAsync();

                        var user = await DB.User.FirstOrDefaultAsync(x => x.Id == exist_login_record.UserId);

                        var log_information = machine + "!" + DateTime.Now.ToString() + "!" + user.Name;

                        HttpContext.Session.SetString("Log_info", log_information);

                        if (previous_page != null && previous_page != "Index")
                        {
                            return RedirectToAction(previous_page);
                        }
                        else
                        {
                            return RedirectToAction("Mainpage");
                        }
                    }

                    ViewBag.error_message = "inactive for a long time, please log in again";
                }
            }

            ViewBag.login_record_viewbag = new login_record_dto { computer = machine, last_login = new DateTime(2000, 1, 1, 0, 0, 0), user = "" };

            return View();
        }

        [HttpPost]
        public async Task<IActionResult> Index(IFormCollection collection)
        {
            HttpContext.Session.SetString("URL", "Index");

            var user = collection["ux_user"];
            var password = collection["ux_password"];

            var machine = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

            var exist_login_record = await DB.LoginRecord.FirstOrDefaultAsync(x => x.Computer == machine);

            var user_password_match = false;
            int user_id = 0;

            foreach (var item in DB.User)
            {
                if (item.Name.Replace(" ", string.Empty) == user && item.Password.Replace(" ", string.Empty) == password)
                {
                    user_password_match = true;
                    user_id = item.Id;
                }
            }

            //if log in correct, update record, redirect to mainpage
            if (user_password_match)
            {
                exist_login_record.UserId = user_id;
                exist_login_record.LastLogin = DateTime.Now;
                await DB.SaveChangesAsync();

                var log_information = machine + "!" + DateTime.Now.ToString() + "!" + user;

                HttpContext.Session.SetString("Log_info", log_information);

                return RedirectToAction("Mainpage");
            }

            ViewBag.login_record_viewbag = new login_record_dto { computer = machine, last_login = new DateTime(2000, 1, 1, 0, 0, 0), user = "" };
            ViewBag.error_message = "user name, password not match";

            return View();
        }

        public ActionResult Mainpage()
        {
            //if mainpage is not redirected from Index, redirect to Index to check log in
            if (HttpContext.Session.GetString("URL") != "Index")
            {
                HttpContext.Session.SetString("URL", "Mainpage");

                return RedirectToAction("Index");
            }

            HttpContext.Session.SetString("URL", "Mainpage");

            var log_information = HttpContext.Session.GetString("Log_info").Split('!');

            ViewBag.login_record_viewbag = new login_record_dto
            {
                computer = log_information[0],
                last_login = Convert.ToDateTime(log_information[1]),
                user = log_information[2]
            };

            return View();
        }

        public ActionResult secondary_page()
        {
            if (HttpContext.Session.GetString("URL") != "Index")
            {
                HttpContext.Session.SetString("URL", "secondary_page");

                return RedirectToAction("Index");
            }

            HttpContext.Session.SetString("URL", "secondary_page");

            var log_information = HttpContext.Session.GetString("Log_info").Split('!');

            ViewBag.login_record_viewbag = new login_record_dto
            {
                computer = log_information[0],
                last_login = Convert.ToDateTime(log_information[1]),
                user = log_information[2]
            };

            return View();
        }

        public async Task<IActionResult> LogOut()
        {
            var machine = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();

            var exist_login_record = await DB.LoginRecord.FirstOrDefaultAsync(x => x.Computer == machine);

            if (exist_login_record != null)
            {
                exist_login_record.UserId = null;
                DB.SaveChanges();
            }

            return  RedirectToAction("Index");
        }
    }
}

-------------------------------------------------------------------

//mainpage.cshtml

<script src="~/lib/jquery/dist/jquery.js"></script>
<script type="text/javascript">

    var computer = '@ViewBag.login_record_viewbag.computer';
    var last_login_time = '@ViewBag.login_record_viewbag.last_login';
    var user = '@ViewBag.login_record_viewbag.user';

    //webpage open event
    $(document).ready(function () {

        $('#log_lable').text(user + ' last logged in ' + computer + ' at ' + last_login_time);
    });

</script>


<h2>Main Page</h2>

<div class="text-right">
    <label id="log_lable"></label>
</div>

<br/>
<a href="/Authorize/Logout">logout</a>
<a>      |      </a>
<a href="/Authorize/secondary_page">secondary page</a>

----------------------------------------------------------

//startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Authorize2.Data;
using Authorize2.Models;
using Authorize2.Services;

namespace Authorize2
{
    public class Startup
    {
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

            if (env.IsDevelopment())
            {
                // For more details on using the user secret store see https://go.microsoft.com/fwlink/?LinkID=532709
                builder.AddUserSecrets<Startup>();
            }

            builder.AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        public IConfigurationRoot Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddIdentity<ApplicationUser, IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

            services.AddMvc();
            services.AddDistributedMemoryCache(); 
            services.AddSession();

            var cs = Configuration.GetConnectionString("SqlConnection");
            services.AddDbContext<Authorize2Context>(options => options.UseSqlServer(cs));

            // Add application services.
            services.AddTransient<IEmailSender, AuthMessageSender>();
            services.AddTransient<ISmsSender, AuthMessageSender>();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

            app.UseIdentity();

            // Add external authentication middleware below. To configure them please see https://go.microsoft.com/fwlink/?LinkID=532715

            // IMPORTANT: This session call MUST go before UseMvc()
            app.UseSession();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}



reference:
http://stackoverflow.com/questions/22564846/c-sharp-compare-two-datetimes
http://stackoverflow.com/questions/16346146/remove-all-whitespace-from-c-sharp-string-with-regex

sessions
http://benjii.me/2016/07/using-sessions-and-httpcontext-in-aspnetcore-and-mvc-core/
http://stackoverflow.com/questions/33814042/using-tempdata-is-crashing-my-application

美国正式公布对朝鲜作战计划:9万人56天内击毙金正恩?!世纪大战一触即发!


继不久前试爆氢弹之后,朝鲜又利用弹道导弹技术发射卫星,引起国际社会的强烈谴责,使得朝鲜半岛核危机进一步升级!

东北亚局势更趋紧张,半岛笼罩战争阴霾,几乎是箭在弦上、一触即发。 毫不夸张的说:现在的朝鲜半岛是一个危险的火药库、一粒火星即点燃世纪大爆炸!

令人绝望的是朝鲜半岛危机已经全面失控,各方都在加紧磨刀!下面来看看各方的最新行动举措。











(一)



来看看美国的行动。美国海量的战略武器齐聚朝鲜周边:首先是美国在朝鲜半岛部署的“核武三件套”




B-52轰炸机是可投射核武器的亚音速远程轰炸机,绰号“同温层堡垒”,曾在越战时期对实施地毯式轰炸。1991年的海湾战争时期,B-52也担负了四成轰炸任务。

美军“北卡罗来纳号”核动力潜艇和“弗吉尼亚”号核潜艇“    这两艘艇长115米,载员130余人,时速46公里,装备战斧式巡航导弹和533毫米大型鱼雷。

双航母在朝鲜半岛集结      “斯坦尼斯号” 核动力航空母舰,排水量为10.3万吨,搭载美国海军F/A-18“大黄蜂”战斗机、EA-6B“徘徊者”电子战机、E-2C“鹰眼”预警机。       “罗纳德‧;;里根号“ 核动力航空母舰,满载排水量101400长吨, 水线上有20层楼高,长333米,舷宽41米 ,最大甲板宽78米,吃水12米,其飞行甲板面积约18000平方米,可停放90架固定翼及直升机和6000名舰员。  


美军向半岛派遣重要战略武器,特别是两个核动力航空母舰战斗群,明确向朝鲜接连发起的挑衅发出“强烈的开战信号”。 按美军的惯例,派出一个航母战斗群是向敌对国家的”强烈警告“  ;而两个航母战斗群即表示: ”准备开战的信号“


36架F-22隐形战斗机已经部署在朝鲜周边,   F-22战机最高时速超过2.5赫,作战半径达2177公里,该隐形战机具备卓越的隐身性能,可躲避敌军雷达,自如飞越敌军防控网,并搭载AIM-120和AIM-9空空导弹和1000磅级GBU-32精确制导炸弹,还可潜入敌方空域实施核轰炸,执行美军”斩首“计划。


“圣安东尼奥”级两栖船坞运输舰前往韩国,韩国《中央日报》称这是雷达无法探测的隐身登陆舰。

美国正式公布对朝鲜作战计划:9万人56天内击毙金正恩



除了军事之外,18日、只针对朝鲜的,美国首部超强硬对朝制裁法正式效,这部对朝制裁法案只针对朝鲜,在国会上通过后由总统签字正式生效在美国历史上实属首次。



(二)



来看看中国的行动。中国最新战机从丹东进入朝鲜:严厉警告美韩不要玩火。

据美国中央情报局情报报道,解放军空军近日出动歼-11B等中国最新战机对朝鲜新义州上空进行巡航。美国认为,这一切显示,中国是在有力的支援鲜。图为中国歼11B重型战机编队紧急出动。




歼-11B主要用于夺取和保持制空权,作战半径:1500公里,是中国空军作战半径最大的重型歼击机。


在半岛局势日益凶险的背景下,美国媒体爆出 “中国向中朝边界调集军队、飞机”的消息。美国情报得到的消息,由于朝鲜局势恶化,(看猛料加微信:laohanf)驻防中朝边境的第190机械化步兵旅已进入战备状态。包括坦克、装甲运兵车、东风系列战略导弹在内的重型装甲车辆,据称正在向鸭绿江附近运动。

据英国《简氏防务周刊》2月15日报道,解放军近日罕见的展示了东风21D反舰弹道导弹的新型弹头,央视对射程为1400公里至1700公里的东风-21D反舰弹道导弹的公开播出,无疑是对朝鲜半岛紧张局势下,对美韩可能军事冒险的警告。

中国海军北海舰队近日舰在黄海进行了海上实弹演练,目前国外媒体很大部分认为,中朝关系已经进入僵持阶段,其实从上述美国透漏的情报可以看出:这就是中国在混淆视听。

据中国官方媒体报道,吉林省政府1月27日宣布,中朝签订了协议,计划对通往朝鲜的铁路进行现代化改造,根据的计划,中国图们至朝鲜罗津、图们至朝鲜清津的铁路将得到升级。此外,中方还计划建立一条特别高速客运线,以便在数来数年把图们与朝鲜联系在一起。    

由此看来中朝已经决裂这个消息并不可靠。事实上中国和朝鲜签订有《中朝友好互助条约》,这条约具有法律效力,仍然在有效期内,条约将中国和朝鲜捆绑成军事同盟关系,中国很难抛弃朝鲜。

特别是近日央视官媒最新报道首次曝光和公开了中国东风31A洲际导弹发射场景,还首次官泄了五寨基地发射DF31A的画面。同时大量画面展示中国火箭军在东北战备。


国之重器、不可示人。中国东风31A洲际导弹发射场景的公开播出尚属次,尤其部署在东北边境,无疑是对朝鲜半岛局势的应对。


(三)



来看看韩国的行动。国总统朴槿惠16日在国会发表措辞罕见强硬的演讲,誓言将对朝鲜实施“强硬而有效的措施”,使其“认识到发展核武器只会加速政权瓦解”。


韩国强硬回应朝鲜“挑衅”。韩国高级官员关于朝鲜的讲话中很少出现“政权瓦解”这一字眼,朴槿惠此番言论势必会激怒朝方。




“金正恩一路狂奔,如果不作出改变,随着时间推移,朝鲜很有可能会开始部署核弹头导弹。” 朴槿惠说,韩国政府宣布,将无限期全面中断开城工业园区运营。开城工业园区内共有约5.3万名朝鲜工人受雇于124家韩国企业,其中多为中小企业。韩联社报道,自2004年开园以来,韩国向朝鲜累计支付了5600万美元资金。朴槿惠说,自上世纪九十年代中以来,韩国给予朝鲜政府和平民的资金援助达30亿美元。目前看来,韩国不能再像过去那样,不附加任何条件去援助朝鲜。

开城工业园区项目是2000年金大中总统访朝、第一次朝韩首脑会晤的主要成果之一,是朝韩保持接触、争取政治和解的标志。自从2014年开城工业园区建成和投入运营以来,即便是在朝鲜半岛危机频发的时刻,韩国政府都没有下决心关闭园区。从2006年10月到2016年1月的四次朝核试验,到2010年的“天安号”事件以及延坪岛炮击,开城工业园区都没有受到这些危机事件的实质性影响。

这次园区的果断关闭,显示了韩国准备战争的决心。关闭开城园区,等于关闭了朝韩交往、互利的大门,朝鲜在得知韩国撤离开城园区的决定,第一反应是宣布这等同于对朝“宣战”。

韩国正在同美国紧急磋商,部署“萨德”反导系统,无论中国怎样的反对,韩国都将部署末段高空区域防御系统(Terminal High Altitude Area Defense,THAAD,即“萨德”系统)。


这标志着美国推行的亚太反导系统取得了重大进展;如果该系统建成,其雷达探测范围覆盖大半个中国,中国的中程和洲际弹道导弹的发射都将被监控,将严重威胁中国的核报复能力,并且在根本上危及中美两国的战略稳定性。“萨德”系统在韩国的部署,这又是一场亚洲版的“古巴导弹危机”。

2月18日,韩国《中央日报》引述韩国 国防部相关人士的话称,“为应对朝军新的挑衅,上周韩美共同作战计划小组曾举行过一次作战计划会议,讨论了未来在半岛开展的作战计划”。韩军参联会议长崔润喜与韩美联合司令官斯卡帕罗蒂正式签署了5015作战计划,并立即生效。根据新作战计划,在非常期,韩美将采取打掉朝鲜核、导 弹等大规模杀伤性武器的作战方法,在朝鲜发动攻击的同时予以反击,采取“先发制人”的战略。

韩国国防部长韩民求与美国国防部长阿什顿·卡特发表声明,公开宣布确立朝鲜半岛发生紧急情况时破坏朝鲜核武器与导弹的 “4D作战计划”,该计划可以看作5015作战计划的具体措施。

“4D”指对朝鲜弹道导弹和搭载核弹头的弹道导弹进行探测、扰乱、破坏和防御,内容包括韩 美通过间谍卫星、高空无人侦察机(全球鹰)等监视和侦察手段对朝鲜的核导弹基地进行密切监视,并在发生紧急情况时利用韩美军队的精确打击武器予以破坏,同时将朝鲜的地面发射台、移动发射台和潜射导弹一并列入打击。此前有消息称,韩美已经确定了朝鲜境内需要重点打击的700余个战略目标。





(四)



来看看朝鲜的行动。年轻无知又任性的金正恩遭到羞辱、恼羞成怒,或先发制人打击韩国。对于金正恩来说,不反击朴槿惠将会使得他在国内被视为软弱。

当面临迫在眉睫的崩溃危险时,金正恩有可能决定实施自己的军事计划,用武力统一半岛。




对朴槿惠来说,虽然没有明言战争,但是她近期一直都在讨论朝鲜半岛的统一,对于朝鲜领导人来说,这意味着毁灭朝鲜。虽然世界不想摧毁朝鲜,但是随着其他战略的实效,全球正在采取一个“战略扼杀”的方法。随着韩国放弃了开城工业园以及其他国家采取自己的制裁措施,脆弱的金家王朝有可能解体。面临失败的前景,金正恩有些艰难的抉择,任性的金正恩很可能作出疯狂的决定。

据韩国KBS电视台2月18日报道,韩国国家情报院称:金正恩现已对朝鲜人民军侦察总局发出指示,要求积极扩充对韩国实施恐怖袭击的力量。

韩国国家情报院18日在国会的国家安保状况党政会议上做报告称:朝鲜将对韩国实施恐怖袭击、网络恐怖袭击等行动,现在确认金正恩已指示朝鲜人民军侦察总局召集并扩充对韩实施恐怖袭击的力量。

国情院指出,朝鲜实施恐怖袭击的手段可能包括毒杀政府人员、绑架在外韩方人员,对反朝人士发送恐吓包裹或威胁人身安全、对国家公共设施实施破坏以及对政府机关和金融机构实施网络攻击等。
 

与此同时,朝鲜北部城市已进入战备状态,进行了疏散演练。演练每隔三天至五天进行一次,电力和水供应在演练期间中断。居住在中国边境城市的中国公民也称听到了朝鲜那边的防空警报声。

朝鲜执政的劳动党上周日宣布,核武库是朝鲜的生命,即便是数十亿美元也不会让朝鲜放弃核武。金正恩发出了对美国进行核导弹打击以此来证明朝鲜就是核武国家。

联合国秘书长潘基文称:朝鲜半岛危机“已经走得太远”。菲律宾已经为该国在韩国的4万侨民制定紧急撤离计划,泰国皇家空军也向公众表示48小时内能完成撤侨。





(五)



再看看日本的行动,2月5日,日本佐世保基地,多艘宙斯盾舰集结港内,准备应对朝鲜半岛危机。





日本海上自卫队将在东海和日本海部署3艘携带标准3的宙斯盾舰。


美军驻扎日本基地的最新T-AGM-25“霍华德.O.洛伦岑”号导弹探测船出海,T-AGM-25导弹探测船上装有两部巨型有源相控阵雷达,一部为X波段、另一部为S波段,T-AGM-25导弹探测船为2010年才服役的新舰。

佐世保港内的日本金刚级宙斯盾舰。

(六)



朝鲜半岛核危机一触即发, 中国要做最坏打算。




朝鲜半岛局势的发展已经全面失控,也未必能够以中国的意志为转移。美国和韩国就半岛核危机已经进行紧密合作,经济制裁、军事施压进一步强化,已经在着手准备对朝鲜宁边核设施进行军事打击,以摧毁朝鲜的核能力。

此前还有报道称,美国以实施“斩首”著称的特种部队早已进驻韩国,以致外界揣测美韩可能3月对金正恩实施确“斩首”。(看猛料加微信:laohanf)从种种迹象来看,似乎美韩对金正恩的不断挑衅,已经很不耐烦、突破了其忍耐底线,美国这次也不想继续玩口水战了。

而且在美韩看来,一次又一次的事实表明,金正恩并不是可以对话的对手,从而也就不再存有通过对话以缓解危机的幻想。美韩一旦联手,军事解决朝鲜核危机似乎便是其不二选择了。如今看来,这种可能性不断增加,且局势已近一触即发之危险境地,哪怕中国反对在朝鲜半岛生战、生乱。


而美韩一旦动手,中国就变得非常被动,而且中国必然受害至深,比如可能导致的核污染对我国东北人民的严重危害,等等。如果朝鲜半岛真的生战、生乱,也等于宣告中国对朝鲜政策乃至在东北亚局势的大国角力中惨败。如何避免这种灾难性事态的发生,对执政者的智慧和胆略构成巨大挑战。

就在美韩制裁和军事施压之下,金正恩在发射卫星庆功宴上仍然高调宣称朝鲜要继续发射更多应用卫星。这无异于“火上浇油”,真是“不作不死”矣。金正恩的疯狂举动,很可能使半岛局势继续恶化而最终一发不可收拾。

朝鲜拥核对中国的国家安全带来巨大威胁。不仅如此,美国借朝鲜核危机而在韩国部署“萨德”反导系统,对中国的国家安全和战略利益构成重大损害(当然对俄罗斯的战略安全也构成了挤压),与此同时也彻底使韩国完全倒向了美国。而日本本来就是美国的军事同盟,日本也必定会在朝鲜半岛核危机中分一杯羹。

而俄罗斯,在普京的精明算计之下,恐怕也只会在一旁围观,不大可能有实质的作为和举动。这样一来,中国在东北亚的大国博弈当中就显得有些“孤单影只”。所以,此次朝鲜半岛危机使得中国成为唯一的输家,朝鲜半岛核危机如何缓解乃至解决,对中国来说至关重要,也考验至巨。

对于朝鲜半岛核危机,中国必须尽最大努力地斡旋以避免战乱,但也必须做好最坏的打算。