网络捕鱼游戏有哪些http://www.oiklr.tw/all專注于Java技術zh-cnThu, 23 Jan 2020 10:21:12 GMTThu, 23 Jan 2020 10:21:12 GMT60Transform RemoteChunk to remote with json format in Spring Batchhttp://www.oiklr.tw/paulwong/archive/2020/01/21/435048.htmlpaulwongpaulwongTue, 21 Jan 2020 08:44:00 GMThttp://www.oiklr.tw/paulwong/archive/2020/01/21/435048.htmlhttp://www.oiklr.tw/paulwong/comments/435048.htmlhttp://www.oiklr.tw/paulwong/archive/2020/01/21/435048.html#Feedback0http://www.oiklr.tw/paulwong/comments/commentRss/435048.htmlhttp://www.oiklr.tw/paulwong/services/trackbacks/435048.html
JsonToChunkRequestTransformer.java
package com.frandorado.springbatchawsintegrationslave.transformer;

import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.stream.IntStream;

import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.integration.chunk.ChunkRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.aws.support.AwsHeaders;
import org.springframework.integration.json.JsonToObjectTransformer;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;

import com.amazonaws.services.sqs.AmazonSQSAsync;
import com.fasterxml.jackson.databind.ObjectMapper;

@Component
public class JsonToChunkRequestTransformer extends JsonToObjectTransformer {
    
    private static final String MESSAGE_GROUP_ID_HEADER = "message-group-id";
    
    @Autowired
    AmazonSQSAsync amazonSQSAsync;
    
    @Override
    protected Object doTransform(Message<?> message) throws Exception {
        // ACK
        ack(message);
        
        return this.getMessageBuilderFactory().withPayload(buildChunkRequest(message)).setHeader(MESSAGE_GROUP_ID_HEADER, "unique").build();
    }
    
    private ChunkRequest buildChunkRequest(Message<?> message) throws IOException {
        Map map = new ObjectMapper().readValue(message.getPayload().toString(), Map.class);
        Map stepContributionMap = (Map) map.get("stepContribution");
        Map exitStatusMap = (Map) stepContributionMap.get("exitStatus");
        
        StepContribution stepContribution = new StepContribution(new StepExecution("null", null));
        ExitStatus exitStatus = new ExitStatus((String) exitStatusMap.get("exitCode"), (String) exitStatusMap.get("exitDescription"));
        
        IntStream.range(0, (Integer) stepContributionMap.get("readCount")).forEach(e -> stepContribution.incrementReadCount());
        stepContribution.incrementWriteCount((Integer) stepContributionMap.get("writeCount"));
        stepContribution.incrementFilterCount((Integer) stepContributionMap.get("filterCount"));
        stepContribution.incrementReadSkipCount((Integer) stepContributionMap.get("readSkipCount"));
        IntStream.range(0, (Integer) stepContributionMap.get("writeSkipCount")).forEach(e -> stepContribution.incrementWriteSkipCount());
        IntStream.range(0, (Integer) stepContributionMap.get("processSkipCount"))
                .forEach(e -> stepContribution.incrementProcessSkipCount());
        stepContribution.setExitStatus(exitStatus);
        
        return new ChunkRequest((Integer) map.get("sequence"), (Collection) map.get("items"), (Integer) map.get("jobId"), stepContribution);
    }
    
    private void ack(Message<?> message) {
        String receiptHandle = message.getHeaders().get(AwsHeaders.RECEIPT_HANDLE, String.class);
        String queue = message.getHeaders().get(AwsHeaders.QUEUE, String.class);
        String queueUrl = amazonSQSAsync.getQueueUrl(queue).getQueueUrl();
        
        amazonSQSAsync.deleteMessage(queueUrl, receiptHandle);
    }
}


JsonToChunkResponseTransformer.java
package com.frandorado.springbatchawsintegrationmaster.transformer;

import java.io.IOException;
import java.util.Map;

import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.integration.chunk.ChunkResponse;
import org.springframework.integration.json.JsonToObjectTransformer;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;

import com.fasterxml.jackson.databind.ObjectMapper;

@Component
public class JsonToChunkResponseTransformer extends JsonToObjectTransformer {
    
    @Override
    protected Object doTransform(Message<?> message) throws Exception {
        return buildChunkResponse(message);
    }
    
    private ChunkResponse buildChunkResponse(Message<?> message) throws IOException {
        Map map = new ObjectMapper().readValue(message.getPayload().toString(), Map.class);
        
        Integer jobId = (Integer) map.get("jobId");
        Integer sequence = (Integer) map.get("sequence");
        String messageContent = (String) map.get("message");
        Boolean status = (Boolean) map.get("successful");
        
        StepContribution stepContribution = new StepContribution(new StepExecution("-", null));
        
        return new ChunkResponse(status, sequence, Long.valueOf(jobId), stepContribution, messageContent);
    }
}

https://frandorado.github.io/spring/2019/07/29/spring-batch-aws-series-introduction.html
https://github.com/frandorado/spring-projects/tree/master/spring-batch-aws-integration/spring-batch-aws-integration-master/src/main/java/com/frandorado/springbatchawsintegrationmaster/transformer

paulwong 2020-01-21 16:44 發表評論
]]>
如何加CRON JOB到LINUXhttp://www.oiklr.tw/paulwong/archive/2020/01/21/435047.htmlpaulwongpaulwongTue, 21 Jan 2020 07:50:00 GMThttp://www.oiklr.tw/paulwong/archive/2020/01/21/435047.htmlhttp://www.oiklr.tw/paulwong/comments/435047.htmlhttp://www.oiklr.tw/paulwong/archive/2020/01/21/435047.html#Feedback0http://www.oiklr.tw/paulwong/comments/commentRss/435047.htmlhttp://www.oiklr.tw/paulwong/services/trackbacks/435047.htmlhttps://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html


paulwong 2020-01-21 15:50 發表評論
]]>
爆米花A410更新及通過NFS點播mac資源http://www.oiklr.tw/alwayscy/archive/2020/01/19/435044.html我愛佳娃我愛佳娃Sun, 19 Jan 2020 13:43:00 GMThttp://www.oiklr.tw/alwayscy/archive/2020/01/19/435044.htmlhttp://www.oiklr.tw/alwayscy/comments/435044.htmlhttp://www.oiklr.tw/alwayscy/archive/2020/01/19/435044.html#Feedback0http://www.oiklr.tw/alwayscy/comments/commentRss/435044.htmlhttp://www.oiklr.tw/alwayscy/services/trackbacks/435044.html
想到是13年買的A410,應該升級一下,可官網都沒了,最后搜索到這個16年的最新固件:
https://drivers.softpedia.com/get/DVD-BluRay-Media-Players/Cloud-Media/Cloud-Media-Popcorn-Hour-A-410-Media-Player-Firmware-050816061625POP425802.shtml
通過USB順利更新了一把。

再查看mac可以開nfs,方法如下:

sudo vi /etc/exports
加入:

/ -sec=sys

 

/Users /Users/popeye /Users/popeye/movies -ro -mapall=popeye:staff -alldirs

檢查配置:

sudo nfsd checkexports


重啟:

sudo nfsd restart

這里要注意movies目錄是我重新建立的755權限,不要用系統原來的目錄,不然總是訪問不了。

再到A410里網絡瀏覽里就能找到了。







我愛佳娃 2020-01-19 21:43 發表評論
]]>
無題 http://www.oiklr.tw/lindaiyao11/archive/2020/01/16/435041.html瑤瑤瑤瑤Thu, 16 Jan 2020 14:40:00 GMThttp://www.oiklr.tw/lindaiyao11/archive/2020/01/16/435041.htmlhttp://www.oiklr.tw/lindaiyao11/comments/435041.htmlhttp://www.oiklr.tw/lindaiyao11/archive/2020/01/16/435041.html#Feedback1http://www.oiklr.tw/lindaiyao11/comments/commentRss/435041.htmlhttp://www.oiklr.tw/lindaiyao11/services/trackbacks/435041.html后悔過,一直以為我們倆會相伴到老的,但是沒想到真正的面對婚姻生活的我們,失去了戀愛時的那種相互包容,相互欣賞對方的優點了,滿眼都是對方的缺點,各種不滿。現在回想起來,其實我們兩個都不成熟,所以面對生活,兩個人都無法將就,變得不是志同道合了,那時候的我害怕失去他,擔心自己的生活沒有了他將如何過下去,因為他是我的全部,是我的天。但是,在一年的爭吵和惶恐中,我先提出了放開彼此,也是我狠心的結束了兩個人互相傷害的日子。那段時間我幾乎每天睡眠都不足3個小時后,脫發,疼痛,從那個時候起,我好像記憶力開始衰退,或者說我選擇忘記一些不愿意去記住的那些悲傷的事情,逃避,或多或少的自暴自棄吧。十幾年的相處時光,經不住生活的考驗。現在想起依然痛,痛徹心扉。。。。。。
不知道自己需要什么,有時候真的對自己失望到底,感覺自己活著沒有任何意義。。。。。


瑤瑤 2020-01-16 22:40 發表評論
]]>
IPFS問題http://www.oiklr.tw/waterjava/archive/2020/01/16/435040.html狼愛上貍狼愛上貍Thu, 16 Jan 2020 06:44:00 GMThttp://www.oiklr.tw/waterjava/archive/2020/01/16/435040.htmlhttp://www.oiklr.tw/waterjava/comments/435040.htmlhttp://www.oiklr.tw/waterjava/archive/2020/01/16/435040.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/435040.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/435040.html 1.把  "Gateway": "/ip4/127.0.0.1/tcp/8080"修改為:"Gateway": "/ip4/0.0.0.0/tcp/8080",這樣本機就可以用192.168WEB訪問了。
2.把WINDOWS防火墻入站的8080端口打開,這樣在局域網就能訪問了。


狼愛上貍 2020-01-16 14:44 發表評論
]]>
Linux and Unix du command tutorial with exampleshttp://www.oiklr.tw/paulwong/archive/2020/01/15/435038.htmlpaulwongpaulwongWed, 15 Jan 2020 09:17:00 GMThttp://www.oiklr.tw/paulwong/archive/2020/01/15/435038.htmlhttp://www.oiklr.tw/paulwong/comments/435038.htmlhttp://www.oiklr.tw/paulwong/archive/2020/01/15/435038.html#Feedback0http://www.oiklr.tw/paulwong/comments/commentRss/435038.htmlhttp://www.oiklr.tw/paulwong/services/trackbacks/435038.htmlhttps://shapeshed.com/unix-du/




paulwong 2020-01-15 17:17 發表評論
]]>
史上最強Android保活思路:深入剖析騰訊TIM的進程永生技術http://www.oiklr.tw/jb2011/archive/2020/01/14/435035.htmlJack JiangJack JiangTue, 14 Jan 2020 06:33:00 GMThttp://www.oiklr.tw/jb2011/archive/2020/01/14/435035.htmlhttp://www.oiklr.tw/jb2011/comments/435035.htmlhttp://www.oiklr.tw/jb2011/archive/2020/01/14/435035.html#Feedback0http://www.oiklr.tw/jb2011/comments/commentRss/435035.htmlhttp://www.oiklr.tw/jb2011/services/trackbacks/435035.html閱讀全文

Jack Jiang 2020-01-14 14:33 發表評論
]]>
2020.01.14http://www.oiklr.tw/lukelyx/archive/2020/01/14/435034.html逐水而居逐水而居Mon, 13 Jan 2020 18:12:00 GMThttp://www.oiklr.tw/lukelyx/archive/2020/01/14/435034.htmlhttp://www.oiklr.tw/lukelyx/comments/435034.htmlhttp://www.oiklr.tw/lukelyx/archive/2020/01/14/435034.html#Feedback0http://www.oiklr.tw/lukelyx/comments/commentRss/435034.htmlhttp://www.oiklr.tw/lukelyx/services/trackbacks/435034.html真的是個輪回嗎?那年那天發生的事情,難道想要經過一個輪回再次回朔?我只知道自己的心理狀態肯定是出了問題的,不然不會如此喜愛夜深人靜的凌晨。
自己情感和精神上的問題還是需要設法來解決,無論是靠自己還是外力。要么就是多給自己找事情做,覆蓋自己的大腦皮層活躍區域,抑制它。
12年!突然發現這是個有點可怕的數字,再加上另一個傷感的數字2020-1990=30,細細品味自己精神狀態之下,居然感受到了傷心、憂郁、負罪、愧疚、害怕這么多層的情緒!
無論是重蹈12,還是重蹈30,都很可怕。或者說,最可怕的其實是我不知道自己的理智和感性最后誰能占據上風。
我可以做到在人前壓制情緒,展現我合理的一面,但是卻需要一個缺口來釋放自己的壓力。
很憂郁、很害怕,不知道靠自己能不能度過這一關。
我也不想變得現在這么隨便和輕浮,完全脫離了曾經作為工程師的我的本心。還是說這才是本我?“30”的這一關其實逃不掉?必然重蹈覆轍?理智告訴我絕對不可發生啊。
不信鬼神,但是卻需要尋求一個精神寄托,一個傾訴對象。

逐水而居 2020-01-14 02:12 發表評論
]]>
【我的區塊鏈之路】- 談一談IPFS原理及玩法http://www.oiklr.tw/waterjava/archive/2020/01/12/435032.html狼愛上貍狼愛上貍Sun, 12 Jan 2020 08:17:00 GMThttp://www.oiklr.tw/waterjava/archive/2020/01/12/435032.htmlhttp://www.oiklr.tw/waterjava/comments/435032.htmlhttp://www.oiklr.tw/waterjava/archive/2020/01/12/435032.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/435032.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/435032.html

狼愛上貍 2020-01-12 16:17 發表評論
]]>
2020.01.12http://www.oiklr.tw/lukelyx/archive/2020/01/12/435030.html逐水而居逐水而居Sat, 11 Jan 2020 19:51:00 GMThttp://www.oiklr.tw/lukelyx/archive/2020/01/12/435030.htmlhttp://www.oiklr.tw/lukelyx/comments/435030.htmlhttp://www.oiklr.tw/lukelyx/archive/2020/01/12/435030.html#Feedback0http://www.oiklr.tw/lukelyx/comments/commentRss/435030.htmlhttp://www.oiklr.tw/lukelyx/services/trackbacks/435030.html2019
做了太多荒唐事情
chuchu
嗯,禁戀之情
情不自禁,不該如此
lome的往事經歷還未完全退散,chuchu,嗯,喜歡與愛的界限,太過模糊,
欲望與愛戀難以分辨
過完2019,2020突然失去了前進的動力和方向
考完經濟師
忙忙碌碌的2019,沒有得到足夠的我想要的,主要是 ,關于此的期望沒有止境,但是又太低于期望。
chuchu,嗯,
自己的情緒,自控,自省,自律
壓抑自己的情感
健身是自己的benefit,最初的起點難以完全說清,chuchu?是與不是,心中清楚。
年歲已大,須知何為何不可為。
情感的歸情感,行為的歸行為。
突然很期待腎上腺素飆升的感覺!
飆車,自行車競速,過山車,蹦極
一切能夠給予速度的快感
很需要這種感覺
發泄發泄發泄
這是怎么了。
為什么現在有這樣的想法和感覺?現在又不是18,居然有類似當時對liz的那種感覺?發了信息期待回音,卻又恐懼不敢打開看,不敢看是否回信了。理智告訴我這是玩火,邊緣游走,危險。為何感性上卻難以控制?
是不是真的只要腎上腺素飆升的快感,才能壓制住這不理智的沖動?
還是那個問題,為什么會突然找不到寄托?缺乏一個簡易的入口來安放心靈。從來都是這樣。有沒有一個角落,可以不去考慮責任和義務,純粹的心靈釋放?
是不是只有競速能帶來短暫的遺忘?腎上腺素壓制一番中樞神經情感。
上一次有這樣的情愫,似乎真的是18年前。奇怪了。
不行,得設法從這種情緒里出來。
===================================
前面這些就是前幾天寫在微信里的東西。1月8日的晚上,做了和2017年8月間和lome一樣的事情。最令自己害怕的事情。
然后這幾天的情緒只剩下一種,就是失落。我為什么會各種期待楚楚回復我的微信?其實我也是多情自擾了吧,畢竟我不是她的什么人,她也確實沒有義務和我聊天吧。即使發生了那天晚上的事情,其實也說明不了任何事情大概。
如果真是這樣,失落的情緒也就自己留存,我不介意把所有精力投入到工作和學習中去,覆蓋自己的大腦,讓自己遺忘這一件事情。畢竟繼續深入很可能走向一個深淵,自己曾經最為懼怕的那個深淵。楚楚的冷處理其實從理智上來說是最明智的,繼續進行的前景早在29年前有人為我預演過了,我若理智尚存,應該知道怎樣想和做。但是真的好怕,怕一切的事情。從工作到生活。
“純境、藍鉆會幫你度過未來的3年增長“,好的,那么之后呢?工作的前景到底是什么?我生活的前景到底是什么?
對未來不能不想,但是真的不敢想,只想把頭埋在現在,去做好眼前的事情。很怕,就是恐懼,缺乏安全感,缺乏愛,我恨不得周圍所有自己愛著的、喜歡的、甚至有好感的人,都喜歡我愛我,這樣才有安全感。
從一開始就是如此,無論是現在,還是2008年的lome、2004年的amy,乃至更早的2000年的yf、2003年的liz,唯一的感覺就是缺乏安全感。

這些情緒,無法壓抑在自己心里,必須寫出來,想讓人看見,卻又怕被人看見。這個角落似乎真的是個很好的選擇。
太難受了,好想去飆車、拳擊、蹦極,真的只有腎上腺素的飆升才能緩解了。我很怕自己會因為這件事情崩潰。處理不好自己的情緒。
預感庚子年很不太平,只求自己可以平安過完這一年就好了,業績、金錢啥的都是次要的,平安是福。







逐水而居 2020-01-12 03:51 發表評論
]]>
SPRING INTEGRATION ERROR HANDLINGhttp://www.oiklr.tw/paulwong/archive/2020/01/10/435027.htmlpaulwongpaulwongFri, 10 Jan 2020 07:32:00 GMThttp://www.oiklr.tw/paulwong/archive/2020/01/10/435027.htmlhttp://www.oiklr.tw/paulwong/comments/435027.htmlhttp://www.oiklr.tw/paulwong/archive/2020/01/10/435027.html#Feedback0http://www.oiklr.tw/paulwong/comments/commentRss/435027.htmlhttp://www.oiklr.tw/paulwong/services/trackbacks/435027.htmlhttps://github.com/zakyalvan/spring-integration-java-dsl-learn

package com.jwebs.learn.errorhandling;

import java.util.Random;

import javax.jms.ConnectionFactory;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.channel.PublishSubscribeChannel;
import org.springframework.integration.core.MessageSource;
import org.springframework.integration.dsl.IntegrationFlow;
import org.springframework.integration.dsl.IntegrationFlows;
import org.springframework.integration.dsl.core.Pollers;
import org.springframework.integration.dsl.jms.Jms;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.MessagingException;

/**
 * Show how to handle error in spring integration flow.
 * Please note, errorChannel in spring integration only applicable to
 * error thrown in asynch component.
 * 
 * 
@author zakyalvan
 
*/
@SpringBootApplication
@IntegrationComponentScan
public class ErrorHandlingApplication {
    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(ErrorHandlingApplication.class)
                .web(false)
                .run(args);
        
        Runtime.getRuntime().addShutdownHook(new Thread(() -> applicationContext.close()));
        
        System.out.println("Pres enter key to exit");
        System.in.read();
        System.exit(0);
    }

    @Autowired
    private ConnectionFactory connectionFactory;
    
    @Bean
    public MessageSource<Integer> randomIntegerMessageSource() {
        return () -> MessageBuilder.withPayload(new Random().nextInt()).build();
    }
    
    @Bean
    public IntegrationFlow withErrorFlow() {
        return IntegrationFlows.from(randomIntegerMessageSource(), spec -> spec.poller(Pollers.fixedDelay(1000)))
                    .handle(Jms.outboundGateway(connectionFactory)
                    .requestDestination("processor.input")
                    .replyContainer(spec -> spec.sessionTransacted(true)))
                    .get();
    }
    
    @Autowired
    @Qualifier("errorChannel")
    private PublishSubscribeChannel errorChannel;
    
    @Bean
    public IntegrationFlow errorHandlingFlow() {
        return IntegrationFlows.from(errorChannel)
                .handle(message -> System.out.println("@@@@@@@@@@@@@@@@@@@@@" + ((MessagingException) message.getPayload()).getFailedMessage().getPayload()))
                .get();
    }
}


paulwong 2020-01-10 15:32 發表評論
]]>
IM的掃碼登錄功能如何實現?一文搞懂主流的掃碼登錄技術原理http://www.oiklr.tw/jb2011/archive/2020/01/08/435024.htmlJack JiangJack JiangWed, 08 Jan 2020 05:39:00 GMThttp://www.oiklr.tw/jb2011/archive/2020/01/08/435024.htmlhttp://www.oiklr.tw/jb2011/comments/435024.htmlhttp://www.oiklr.tw/jb2011/archive/2020/01/08/435024.html#Feedback0http://www.oiklr.tw/jb2011/comments/commentRss/435024.htmlhttp://www.oiklr.tw/jb2011/services/trackbacks/435024.html閱讀全文

Jack Jiang 2020-01-08 13:39 發表評論
]]>
個人公眾號「Java愛好者社區」高質量原創文章持續輸出,歡迎關注http://www.oiklr.tw/ldwblog/archive/2020/01/07/435022.htmlDavid1228David1228Tue, 07 Jan 2020 10:39:00 GMThttp://www.oiklr.tw/ldwblog/archive/2020/01/07/435022.htmlhttp://www.oiklr.tw/ldwblog/comments/435022.htmlhttp://www.oiklr.tw/ldwblog/archive/2020/01/07/435022.html#Feedback0http://www.oiklr.tw/ldwblog/comments/commentRss/435022.htmlhttp://www.oiklr.tw/ldwblog/services/trackbacks/435022.html并且blogjava網站發布的文章是在博客園首頁看不到的。
blogjava網站首頁能看到,你可以點擊標題進入可以看到圖片二維碼信息。

Java愛好者社區
公眾號內容簡介:

專注于分享Java后端相關技術、老司機實戰干貨,不限于JVM、并發、設計模式、性能優化、分布式&微服務、云原生、大數據相關主題。
希望關注的你停下腳步,定有所收獲。

以前的個人博客內容不好遷移,所以我打算根據自己的多年經驗,不斷整理輸出有價值的內容。
目前公眾號內容有關于SpringCloud(微服務框架)、Skywalking(APM監控調用鏈)、JVM(GC分析、內存泄漏分析)、并發編程相關原創實戰文章已出爐。

最近剛開始已經有不少小伙伴關注了,期待能有幸搜索到本博客的同學,可以掃碼關注一下,不勝感激。
大家有任何技術、職場、面試上的問題都可以與我交流。

方式一:掃碼以下公眾號二維碼:


方式二:在微信上直接搜索: javatech_cbo

感謝各位小伙伴的支持,后續會在該公眾號上輸出大量的有價值的實戰干貨 ,期待與你一同進步與成長。



David1228 2020-01-07 18:39 發表評論
]]>
nlog安裝http://www.oiklr.tw/huamengxing/archive/2020/01/06/435020.html華夢行華夢行Mon, 06 Jan 2020 08:10:00 GMThttp://www.oiklr.tw/huamengxing/archive/2020/01/06/435020.htmlhttp://www.oiklr.tw/huamengxing/comments/435020.htmlhttp://www.oiklr.tw/huamengxing/archive/2020/01/06/435020.html#Feedback0http://www.oiklr.tw/huamengxing/comments/commentRss/435020.htmlhttp://www.oiklr.tw/huamengxing/services/trackbacks/435020.htmlInstall-Package NLog.Config -Version 3.2.1



Install-Package NLog -Version 3.2.1

華夢行 2020-01-06 16:10 發表評論
]]>
入門 Webpack,看這篇就夠了http://www.oiklr.tw/waterjava/archive/2020/01/04/435018.html狼愛上貍狼愛上貍Sat, 04 Jan 2020 09:22:00 GMThttp://www.oiklr.tw/waterjava/archive/2020/01/04/435018.htmlhttp://www.oiklr.tw/waterjava/comments/435018.htmlhttp://www.oiklr.tw/waterjava/archive/2020/01/04/435018.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/435018.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/435018.htmlhttps://segmentfault.com/a/1190000006178770#articleHeader3

狼愛上貍 2020-01-04 17:22 發表評論
]]>
文檔計劃 | IPFS API參考文檔http://www.oiklr.tw/waterjava/archive/2020/01/03/435016.html狼愛上貍狼愛上貍Fri, 03 Jan 2020 11:03:00 GMThttp://www.oiklr.tw/waterjava/archive/2020/01/03/435016.htmlhttp://www.oiklr.tw/waterjava/comments/435016.htmlhttp://www.oiklr.tw/waterjava/archive/2020/01/03/435016.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/435016.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/435016.htmlhttps://www.jianshu.com/p/e38d5f733c81

狼愛上貍 2020-01-03 19:03 發表評論
]]>
IPFS環境搭建和用ipfs-api訪問ipfs網絡http://www.oiklr.tw/waterjava/archive/2020/01/03/435015.html狼愛上貍狼愛上貍Fri, 03 Jan 2020 09:55:00 GMThttp://www.oiklr.tw/waterjava/archive/2020/01/03/435015.htmlhttp://www.oiklr.tw/waterjava/comments/435015.htmlhttp://www.oiklr.tw/waterjava/archive/2020/01/03/435015.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/435015.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/435015.htmlhttps://blog.csdn.net/mongo_node/article/details/80143631

狼愛上貍 2020-01-03 17:55 發表評論
]]>
IM“掃一掃”功能很好做?看看微信“掃一掃識物”的完整技術實現http://www.oiklr.tw/jb2011/archive/2020/01/02/435013.htmlJack JiangJack JiangThu, 02 Jan 2020 12:54:00 GMThttp://www.oiklr.tw/jb2011/archive/2020/01/02/435013.htmlhttp://www.oiklr.tw/jb2011/comments/435013.htmlhttp://www.oiklr.tw/jb2011/archive/2020/01/02/435013.html#Feedback0http://www.oiklr.tw/jb2011/comments/commentRss/435013.htmlhttp://www.oiklr.tw/jb2011/services/trackbacks/435013.html閱讀全文

Jack Jiang 2020-01-02 20:54 發表評論
]]>
MySQL-Front連接MYSQL錯誤永久方案http://www.oiklr.tw/waterjava/archive/2020/01/01/435011.html狼愛上貍狼愛上貍Wed, 01 Jan 2020 05:52:00 GMThttp://www.oiklr.tw/waterjava/archive/2020/01/01/435011.htmlhttp://www.oiklr.tw/waterjava/comments/435011.htmlhttp://www.oiklr.tw/waterjava/archive/2020/01/01/435011.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/435011.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/435011.html在之前的博客中提到解決此問題的方法是進入mysql的命令窗口,執行set global show_compatibility_56=on;

但是該方法只能生效一次,當電腦重啟或者mysql服務重啟的時候,就得重新再設置一次,下面提供一個永久生效的方法,即不通過上述方法,而是修改mysql的配置文件,找到my.ini的配置文件,在文件的最后添加:show_compatibility_56 = 1 即可。

本人的my.ini的文件路徑是:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
————————————————
版權聲明:本文為CSDN博主「讓愛遠行2015」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011065164/article/details/53393348


狼愛上貍 2020-01-01 13:52 發表評論
]]>
安裝solc指定版本http://www.oiklr.tw/waterjava/archive/2020/01/01/435010.html狼愛上貍狼愛上貍Wed, 01 Jan 2020 04:28:00 GMThttp://www.oiklr.tw/waterjava/archive/2020/01/01/435010.htmlhttp://www.oiklr.tw/waterjava/comments/435010.htmlhttp://www.oiklr.tw/waterjava/archive/2020/01/01/435010.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/435010.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/435010.htmlcnpm install -g solc@0.4.22

狼愛上貍 2020-01-01 12:28 發表評論
]]>
Node.js安裝及環境配置之Windows篇http://www.oiklr.tw/waterjava/archive/2020/01/01/435009.html狼愛上貍狼愛上貍Wed, 01 Jan 2020 04:13:00 GMThttp://www.oiklr.tw/waterjava/archive/2020/01/01/435009.htmlhttp://www.oiklr.tw/waterjava/comments/435009.htmlhttp://www.oiklr.tw/waterjava/archive/2020/01/01/435009.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/435009.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/435009.htmlhttps://www.jianshu.com/p/03a76b2e7e00


狼愛上貍 2020-01-01 12:13 發表評論
]]>
c++ 的構造函數 和operator = 被delete之后的表現http://www.oiklr.tw/lijinglin/archive/2019/12/31/435007.htmlhuohuohuohuoTue, 31 Dec 2019 13:11:00 GMThttp://www.oiklr.tw/lijinglin/archive/2019/12/31/435007.htmlhttp://www.oiklr.tw/lijinglin/comments/435007.htmlhttp://www.oiklr.tw/lijinglin/archive/2019/12/31/435007.html#Feedback0http://www.oiklr.tw/lijinglin/comments/commentRss/435007.htmlhttp://www.oiklr.tw/lijinglin/services/trackbacks/435007.html
class Square{
public:
 Square(int x ) :value(x*x){
 }

Square(const Square& other) = delete;//rule 1

const Square & operator = (const Square& other) == delete;//rule 2
const Square & operator = (Square&& other) = delete;//rule3 

..
}

Square s = 9; //因為s沒有初始化,會先用9 調用構造函數 Square(int x ) , 然后調用Square(const Square& other),和rule1 違背
Square s2(8);
 s= s2;//對應rule 2
 s= Square(9);//對應 rule3 

huohuo 2019-12-31 21:11 發表評論
]]>
APM資源http://www.oiklr.tw/paulwong/archive/2019/12/30/435006.htmlpaulwongpaulwongMon, 30 Dec 2019 08:50:00 GMThttp://www.oiklr.tw/paulwong/archive/2019/12/30/435006.htmlhttp://www.oiklr.tw/paulwong/comments/435006.htmlhttp://www.oiklr.tw/paulwong/archive/2019/12/30/435006.html#Feedback0http://www.oiklr.tw/paulwong/comments/commentRss/435006.htmlhttp://www.oiklr.tw/paulwong/services/trackbacks/435006.htmlhttps://my.oschina.net/10000000000/blog/3119697

監控管理之Spring Boot Admin使用
https://my.oschina.net/xiedeshou/blog/2051625


https://my.oschina.net/janlle/blog/3040749

paulwong 2019-12-30 16:50 發表評論
]]>
微服務-網關http://www.oiklr.tw/paulwong/archive/2019/12/30/435005.htmlpaulwongpaulwongMon, 30 Dec 2019 08:44:00 GMThttp://www.oiklr.tw/paulwong/archive/2019/12/30/435005.htmlhttp://www.oiklr.tw/paulwong/comments/435005.htmlhttp://www.oiklr.tw/paulwong/archive/2019/12/30/435005.html#Feedback0http://www.oiklr.tw/paulwong/comments/commentRss/435005.htmlhttp://www.oiklr.tw/paulwong/services/trackbacks/435005.htmlhttps://felord.cn/kong-api-gateway.html

云原生網關 Kong 和Kong 管理UI Konga的完全安裝攻略
https://felord.cn/kong-and-konga-install.html






paulwong 2019-12-30 16:44 發表評論
]]>
2020 年軟件開發趨勢預測有哪些?http://www.oiklr.tw/paulwong/archive/2019/12/30/435004.htmlpaulwongpaulwongMon, 30 Dec 2019 01:09:00 GMThttp://www.oiklr.tw/paulwong/archive/2019/12/30/435004.htmlhttp://www.oiklr.tw/paulwong/comments/435004.htmlhttp://www.oiklr.tw/paulwong/archive/2019/12/30/435004.html#Feedback0http://www.oiklr.tw/paulwong/comments/commentRss/435004.htmlhttp://www.oiklr.tw/paulwong/services/trackbacks/435004.html基礎設施:條條道路通云端

對于云廠商來說,2019 年是碩果累累的一年。不僅初創公司在使用云計算,那些很注重安全的“保守派”公司(如政府機構、醫療保健機構、銀行、保險公司,甚至是美國五角大樓)也在遷移到云端。這種趨勢在 2020 年將會繼續,大大小小的公司都將(或者至少有計劃)遷移到云端。Gartner 公司最近發布了一個數字:

image.png

如果你是一個還在考慮要不要遷移到云端的決策者,不妨重新審視一下你的策略。如果你是一個獨立開發者,并且還沒使用過云基礎設施,那么完全可以在 2020 年嘗試一下。很多大型的云廠商(如亞馬遜、微軟、谷歌)都提供了免費的體驗機會。谷歌在這方面做得特別大方,它提供了價值 300 美元的一年免費服務。

image.png

策劃注:阿里、騰訊、華為等國內云廠商同樣有免費云服務試用產品。

云平臺:亞馬遜領頭,其他跟上

作為第一大云廠商,亞馬遜在 2019 年可謂風生水起。憑借其豐富的產品組合,亞馬遜將把它的優勢延續到 2020 年。Canalys 發布的 2019 年第三季度報告指出,大型云廠商(AWS、Azure、GCP)占據 56% 的市場份額,其中 AWS 獨享 32.6%。

image.png

其他云廠商也在努力縮短與 AWS 之間的差距。微軟把主要目標轉向了大型企業。最近,微軟打敗了亞馬遜,從美國五角大樓拿到了一個 100 億美元的大單子。這個單子將提升 Azure 的聲譽,同時削弱 AWS 的士氣。

image.png

谷歌一直在推動 CNCF,實現云計算運維的標準化。谷歌的長期目標是讓云遷移變得更容易,方便企業從 AWS 遷移到 GCP。IBM 之前斥資 360 億美元收購了 RedHat,也想要在云計算市場占有一席之地。

image.png

在亞太地區,阿里云市場規模超過了 AWS、Azure 的總和,全球排名第三。中國國內騰訊云等企業的增長勢頭也十分迅猛。

2020 年將出現更多的并購。當然,很多初創公司將會帶來新的想法和創新,例如多云服務。因為競爭激烈,這些公司只能從降價和推出更多的創新產品來獲取利潤。

容器化:Kubernetes 將會更酷

在容器編排領域,雖然一度出現了“三足鼎立”(Kubernetes、Docker Swarm 和 Mesos),但 Kubernetes 最終脫穎而出,成為絕對的贏家。云是一個分布式系統,而 Kubernetes 是它的 OS(分布式的 Linux)。2019 年北美 KubeCon+CloudNativeCon 大會的參會者達到了 12000 名,比 2018 年增長了 50%。以下是過去 4 年參會人數的增長情況。

image.png

在 2020 年,Kubernetes 不僅不會后退,只會變得越來越強,你完全可以把賭注壓在 Kubernetes 身上。另外值得一提的是,Migrantis 最近收購了 Docker Enterprise,不過收購數額不詳。

image.png

幾年前,人們張口閉口說的都是 Docker,而現在換成了 Kubernetes。Docker 在它的全盛時期未能盈利,反而在優勢漸退幾年之后才嘗試變現。這再次說明,在現代技術世界,時機就是一切。

軟件架構:微服務將成為主流

谷歌趨勢表明,微服務架構范式在 2019 年持續增長了一整年。

image.png

隨著軟件行業整體逐步遷移到云端,微服務也將成為占主導地位的架構范式。微服務架構崛起的一個主要原因是它與云原生完美契合,可以實現快速的軟件開發。我在之前的一篇博文中解釋了微服務架構的基本原則及其優勢和劣勢。

https://towardsdatascience.com/microservice-architecture-a-brief-overview-and-why-you-should-use-it-in-your-next-project-a17b6e19adfd

我假設現在也存在一種回歸到單體架構的趨勢,因為在很多情況下,微服務架構有點過頭了,而且做好微服務架構設計其實很難。微服務架構有哪些好的實踐?在之前的另一篇博文中,我也給出了一些大概,希望對讀者有用。

https://towardsdatascience.com/effective-microservices-10-best-practices-c6e4ba0c6ee2

編程語言(整體):Python 將吞噬世界

機器學習、數據分析、數據處理、Web 開發、企業軟件開發,甚至是拼接黑洞照片,Python 的影子無處不在。

在著名的編程語言排行榜網站 TIOBE 上,Python 位居最流行編程語言第三位,僅次于 Java 和 C 語言。

image.png

更有意思的是,在 2019 年,Python 的流行度翻了一番(從 5% 到 10%)。

Python 的崛起將在 2020 年延續,并縮短與 Java 和 C 語言之間的差距。另一門無所不在的編程語言 JavaScript 正面臨下行的風險。為什么 Python 的勢頭會如此強勁?因為它的入手門檻低,有一個優秀的社區在支持,并受到數據科學家和新生代開發者的喜愛。

編程語言(企業方面):Java 將占主導

之前的 TIOBE 網站截圖顯示,Java 仍然是一門占主導地位的編程語言,并將在 2020 年繼續保持這種地位。JVM 是 Java 的基石,其他編程語言(如 Kotlin、Scala、Clojure、Groovy)也將 JVM 作為運行時。最近,Oracle 修改了 JVM 的許可協議。

image.png

新的許可協議意味著使用 Java、Kotlin、Scala 或其他 JVM 編程語言的公司需要向 Oracle 支付大額費用。所幸的是,OpenJDK 讓 JVM 繼續免費。另外,還有其他一些公司為 JVM 提供企業支持。

image.png

因為體積和速度方面的問題,基于 JVM 的編程語言并不適合用在今天的無服務器環境中。Oracle 正在推動 GraalVM 計劃,旨在讓 Java 變得更加敏捷和快速,讓它更適合用在無服務器環境中。因為除了 Java,沒有其他編程語言可以提供企業級的穩定性和可靠性,所以 Java 將在 2020 年繼續占主導地位。

企業版 Java:Spring 繼續發力

曾幾何時,在企業開發領域,Spring 和 JavaEE 之間存在著白熱化的競爭。但因為 Oracle 在 JavaEE 方面沒有作為,在競爭中慘敗,這導致了“MicroProfile”計劃的形成,并最終促成了 JakartaEE。

雖然所有的政策和活動都是圍繞 JavaEE 展開,但 Spring 事實上已經贏得了這場企業 JVM 之爭。2020 年,Spring 將成為 JVM 生態系統的頭牌。

有兩個正在進展中的項目,它們旨在減小 Java 的體積,讓它更適合用在無服務器環境中。

其中一個是 Micronaut(https://micronaut.io/)。

image.png

另一個是 Quarkus(https://quarkus.io/)。

image.png

這兩個項目都使用了 GraalVM,它們在 2020 年將會得到 Java 社區更多的關注。

編程語言:后起之秀的突破

2000 年代,編程語言的發展出現了停滯。大多數人認為沒有必要再去開發新的編程語言,Java、C 語言、C++、JavaScript 和 Python 已經可以滿足所有的需求。但是,谷歌的 Go 語言為新編程語言大門打開了一扇大門。在過去十年出現了很多有趣的編程語言,比如 Rust、Swift、Kotlin、TypeScript。導致這種情況的一個主要原因是已有的編程語言無法充分利用硬件優勢(例如多核、更快的網絡、云)。另一個原因是現代編程語言更加關注開發者經濟,即實現更快速更容易的開發。在 Stackoverflow 提供的一份開發者報告中,排名靠前的現代編程語言如下所示(Rust 連續 4 年名列第一)。

image.png

在之前的一篇博文中,我深入探討了現代編程語言,對比 Rust 和 Go 語言,并說明了為什么現在是采用這些語言的好時機。

https://towardsdatascience.com/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842

最近,微軟宣布他們在探索使用 Rust 來開發更安全的軟件。

image.png

亞馬遜最近也宣布要贊助 Rust。

image.png

谷歌宣布將 Kotlin 作為 Android 官方開發語言,所以,在 JVM 領域,Kotlin 成了 Java 的主要競爭對手。

image.png

Angular 使用 TypeScript 代替 JavaScript,將其作為主要的編程語言,其他 JavaScript 框架(如 React 和 Vue)也開始為 TypeScript 提供更多的支持。

這種趨勢將在 2020 年延續下去,很多巨頭公司將會深入了解新一代編程語言(如 Rust、Swift、TypeScript、Kotlin),它們會站出來公開表示支持。

Web:JavaScript 繼續占主導地位

曾幾何時,JavaScript 并不被認為是一門強大的編程語言。在當時,前端內容主要通過后端框架在服務器端進行渲染。2014 年,AngularJS 的出現改變了這種局面。從那個時候開始,更多的 JavaScript 框架開始涌現(Angular 2+、React、Vue、Meteor),JavaScript 已然成為主流的 Web 開發語言。隨著 JavaScript 框架不斷創新以及微服務架構的崛起,JavaScript 框架在 2020 年將繼續主導前端開發。

JavaScript 框架:React 閃耀

雖然 React 是在 AngularJS 之后出現的,但在過去十年對 Web 開發產生了巨大的影響,這也讓 Facebook 在與 Google+ 的競爭中打了一場勝戰。React 為前端開發帶來了一些新的想法,比如事件溯源、虛擬 DOM、單向數據綁定、基于組件的開發,等等。它對開發者社區產生了重大影響,以至于谷歌放棄了 AngularJS,并借鑒 React 的想法推出了徹底重寫的 Angular 2+。React 是目前為止最為流行的 JavaScript 框架,下圖顯示了相關的 NPM 下載統計信息。

image.png

為了獲得更好的并發和用戶體驗,Facebook 宣布完全重寫 React 的核心算法,推出了 React-Fiber 項目。

image.png

2020 年,React 仍然是你開發新項目的首選 Web 框架。其他框架(如 Angular/Angular 2+ 或 Vue)呢?Angular 仍然是一個不錯的 Web 開發框架,特別適合企業開發。我敢肯定谷歌在未來幾年會在 Angular 上加大投入。Vue 是另一個非常流行的 Web 框架,由中國的巨頭公司阿里巴巴提供支持。如果你已經在使用 Angular 或 Vue,就沒必要再遷移到 React 了。

App 開發:原生應用

在移動 App 開發方面,有關混合應用開發的炒作有所消停。混合開發提供了更快的開發速度,因為只需要一個開發團隊,而不是多個。但原生應用提供了更好的用戶體驗和性能。另外,混合應用需要經過調整才能使用一些高級特性。對于企業來說,原生應用仍然是首選的解決方案,這種趨勢將在 2020 年延續。Airbnb 在一篇博文中非常詳細地說明了為什么他們要放棄混合應用開發平臺 React Native。

https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a

盡管 Facebook 嘗試改進 React Native,谷歌也非常努力地推動混合 App 開發平臺 Flutter,但它們仍然只適合用于原型、POC、MVP 或輕量級應用的開發。所以,原生應用在 2020 年仍將繼續占主導地位。

在原生應用開發方面,谷歌和蘋果分別將 Kotlin 和 Swift 作為各自平臺主要的編程語言。谷歌最近再次重申了對 Kotlin 的支持,這對于 Kotlin 用戶來說無疑是個好消息。

image.png

混合應用開發:React Native

在很多情況下,混合應用是個不錯的選擇。在這方面也有很多選擇:Xamarin、Inoic、React Native 和 Flutter。Facebook 基于成熟的 React 框架推出了 React Native。就像 React 在 Web 框架領域占據主導地位一樣,React Native 在混合應用領域也占據著主導地位,如下圖所示。

image.png

React Native 和 React 有共同的基因,都提供了高度的代碼重用性以及“一次開發,到處運行”的能力。React Native 的另一個優勢是 Facebook 本身也用它來開發移動應用。谷歌在這個領域起步較晚,但在去年,谷歌的混合應用開發框架 Flutter 獲得了不少關注。Flutter 提供了更好的性能,但需要使用另一門不是那么流行的編程語言 Dart。React Native 在 2020 年將繼續占主導地位。

API:REST 將占主導地位

REST 是 API 領域事實上的標準,被廣泛用在基于 API 的服務間通信上。當然,除了 REST,我們還有其他選擇,比如來自谷歌的 gRPC 和來自 Facebook 的 GraphQL。

它們提供了不同的能力。谷歌開發的 gRPC 作為遠程過程調用(如 SOAP)的化身,使用 Protobuf 代替 JSON 作為消息格式。Facebook 開發的 GraphQL 作為一個集成層,避免頻繁的 REST 調用。gRPC 和 GraphQL 都在各自的領域取得了成功。2020 年,REST 仍然是占主導地位的 API 技術,而 GraphQL 和 gRPC 將作為補充技術。

人工智能:Tensorflow 2.0 將占主導地位

谷歌和 Facebook 也是深度學習 / 神經網絡領域的主要玩家。谷歌基于深度學習框架 Theano 推出了 TensorFlow,它很快就成為深度學習 / 神經網絡的主要開發庫。谷歌還推出了特別設計的 GPU(TPU)來加速 TensorFlow 的計算。

Facebook 在深度學習領域也不甘落后,他們擁有世界上最大的圖像和視頻數據集合。Facebook 基于另一個深度學習庫 Torch 推出了深度學習庫 PyTorch。TensorFlow 和 PyTorch 之間有一些區別,前者使用的是靜態圖進行計算,而 PyTorch 使用的是動態圖。使用動態圖的好處是可以在運行時糾正自己。另外,PyTorch 對 Python 支持更好,而 Python 是數據科學領域的一門主要編程語言。

隨著 PyTorch 變得越來越流行,谷歌也趕緊在 2019 年 10 月推出了 TensorFlow 2.0,也使用了動態圖,對 Python 的支持也更好。

image.png

2020 年,TensorFlow 2.0 和 PyTorch 將齊頭并進。考慮到 TensorFlow 擁有更大的社區,我估計 TensorFlow 2.0 將成為占主導地位的深度學習庫。

數據庫:SQL是王者,分布式SQL是王后

在炒作 NoSQL 的日子里,人們嘲笑 SQL,還指出了 SQL 的種種不足。有很多文章說 NoSQL 有多么的好,并將要取代 SQL。但等到炒作的潮水褪去,人們很快就意識到,我們的世界不能沒有 SQL。以下是最流行的數據庫的排名。

image.png

可以看到,SQL 數據庫占據了前四名。SQL 之所以占主導地位,是因為它提供了 ACID 事務保證,而 ACID 是業務系統最潛在的需求。NoSQL 數據庫提供了橫向伸縮能力,但代價是不提供 ACID 保證。

互聯網公司一直在尋找“大師級數據庫”,也就是既能提供 ACID 保證又能像 NoSQL 那樣可橫向伸縮的數據庫。目前有兩個解決方案可以部分滿足對“大師級數據庫”的要求,一個是亞馬遜的 Aurora,一個是谷歌的 Spanner。Aurora 提供了幾乎所有的 SQL 功能,但不支持橫向寫伸縮,而 Spanner 提供了橫向寫伸縮能力,但對 SQL 支持得不好。

2020 年,但愿這兩個數據庫能夠越走越近,或者有人會帶來一個“分布式 SQL”數據庫。如果真有人做到了,那一定要給他頒發圖靈獎。

數據湖:MinIO 將要崛起

現代數據平臺非常的復雜。企業一般都會有支持 ACID 事務的 OLTP 數據庫(SQL),也會有用于數據分析的 OLAP 數據庫(NoSQL)。除此之外,它們還有其他各種數據存儲系統,比如用于搜索的 Solr、ElasticSearch,用于計算的 Spark。企業基于數據庫構建自己的數據平臺,將 OLTP 數據庫的數據拷貝到數據湖中。各種類型的數據應用程序(比如 OLAP、搜索)將數據湖作為它們的事實來源。

HDFS 原本是事實上的數據湖,直到亞馬遜推出了對象存儲 S3。S3 可伸縮,價格便宜,很快就成為很多公司事實上的數據湖。使用 S3 唯一的問題是數據平臺被緊緊地綁定在亞馬遜的 AWS 云平臺上。雖然微軟 Azure 推出了 Blob Storage,谷歌也有類似的對象存儲,但都不是 S3 的對手。

對于很多公司來說,MinIO 或許是它們的救星。MinIO 是一個開源的對象存儲,與 S3 兼容,提供了企業級的支持,并專門為云原生環境而構建,提供了與云無關的數據湖。

image.png

微軟在 Azure Marketplace 是這么描述 MinIO 的:“為 Azure Blog Storage 服務提供與亞馬遜 S3 API 兼容的數據訪問”。如果谷歌 GCP 和其他云廠商也提供 MinIO,那么我們將會向多云邁出一大步。

大數據批處理:Spark 將繼續閃耀

現如今,企業通常需要基于大規模數據執行計算,所以需要分布式的批處理作業。Hadoop 的 Map-Reduce 是第一個分布式批處理平臺,后來 Spark 取代了 Hadoop 的地位,成為真正的批處理之王。Spark 是怎樣提供了比 Hadoop 更好的性能的?我之前寫了另一篇文章,對現代數據平臺進行了深入分析。

https://towardsdatascience.com/programming-language-that-rules-the-data-intensive-big-data-fast-data-frameworks-6cd7d5f754b0

Spark 解決了 Hadoop Map-Reduce 的痛點,它將所有東西放在內存中,而不是在完成每一個昂貴的操作之后把數據保存在存儲系統中。盡管 Spark 重度使用 CPU 和 JVM 來執行批處理作業,但這并不妨礙它成為 2020 年批處理框架之王。我希望有人能夠使用 Rust 開發出一個更加高效的批處理框架,取代 Spark,并為企業省下大量的云資源費用。

大數據流式處理:Flink 是未來

幾年前,實現實時的流式處理幾乎是不可能的事情。一些微批次處理框架(比如 Spark Streaming)可以提供“幾近”實時的流式處理能力。不過,Flink 改變了這一狀況,它提供了實時的流式處理能力。

2019 年之前,Flink 未能得到足夠的關注,因為它無法撼動 Spark。直到 2019 年 1 月份,中國巨頭公司阿里巴巴收購了 Data Artisan(Flink 背后的公司)。

image.png

在 2020 年,企業如果想要進行實時流式處理,Flink 應該是不二之選。不過,跟 Spark 一樣,Flink 同樣重度依賴 CPU 和 JVM,并且需要使用大量的云資源。

字節碼:WebAssembly將被廣泛采用

我從 JavaScript 作者 Brandon Eich 的一次訪談中知道了 WebAssembly 這個東西。現代 JavaScript(ES5 之后的版本)是一門優秀的編程語言,但與其他編程語言一樣,都有自己的局限性。最大的局限性是 JavaScript 引擎在執行 JavaScript 時需要讀取、解析和處理“抽象語法樹”。另一個問題是 JavaScript 的單線程模型無法充分利用現代硬件(如多核 CPU 或 GPU)。正因為這些原因,很多計算密集型的應用程序(如游戲、3D 圖像)無法運行在瀏覽器中。

一些公司(由 Mozilla 帶領)開發了 WebAssembly,一種底層字節碼格式,讓任何一門編程語言都可以在瀏覽器中運行。目前發布的 WebAssembly 版本可以支持 C++、Rust 等。

image.png

WebAssembly 讓計算密集型應用程序(比如游戲和 AutoCAD)可以在瀏覽器中運行。不過,WebAssembly 的目標不僅限于此,它還要讓應用程序可以在瀏覽器之外運行。WebAssembly 可以被用在以下這些“瀏覽器外”的場景中。

  • 移動設備上的混合原生應用。
  • 沒有冷啟動問題的無服務器計算。
  • 在服務器端執行不受信任的代碼。
    我預測,2020 年將是 WebAssembly 取得突破的一年,很多巨頭公司(包括云廠商)和社區將會擁抱 WebAssembly。

代碼:低代碼 / 無代碼將更進一步

快速的數字化和工業 4.0 革命意味著軟件開發者的供需缺口巨大。由于缺乏開發人員,很多企業無法實現它們的想法。為了降低進入軟件開發的門檻,可以嘗試無代碼(No Code)或低代碼(Low Code)軟件開發,也就是所謂的 LCNC(Low-Code No-Code)。它已經在 2019 年取得了一些成功。

image.png

LCNC 的目標是讓沒有編程經驗的人也能開發軟件,只要他們想要實現自己的想法。

雖然我對在正式環境中使用 LCNC 框架仍然心存疑慮,但它為其他公司奠定了良好的基礎,像亞馬遜和谷歌這樣的公司可以基于這個基礎構建出有用的產品,就像 AWS Lambda 的蓬勃發展是以谷歌 App Engine 為基礎。

2020 年,LCNC 將會獲得更多關注。



paulwong 2019-12-30 09:09 發表評論
]]>
crx文件怎么安裝?谷歌瀏覽器Chrome打開crx文件的方法http://www.oiklr.tw/waterjava/archive/2019/12/29/435002.html狼愛上貍狼愛上貍Sun, 29 Dec 2019 14:57:00 GMThttp://www.oiklr.tw/waterjava/archive/2019/12/29/435002.htmlhttp://www.oiklr.tw/waterjava/comments/435002.htmlhttp://www.oiklr.tw/waterjava/archive/2019/12/29/435002.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/435002.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/435002.htmlhttps://www.jb51.net/softjc/402153.html

狼愛上貍 2019-12-29 22:57 發表評論
]]>
How to provide a Spring Boot "fat JAR" with external dependencieshttp://www.oiklr.tw/paulwong/archive/2019/12/27/434997.htmlpaulwongpaulwongFri, 27 Dec 2019 07:47:00 GMThttp://www.oiklr.tw/paulwong/archive/2019/12/27/434997.htmlhttp://www.oiklr.tw/paulwong/comments/434997.htmlhttp://www.oiklr.tw/paulwong/archive/2019/12/27/434997.html#Feedback0http://www.oiklr.tw/paulwong/comments/commentRss/434997.htmlhttp://www.oiklr.tw/paulwong/services/trackbacks/434997.html
http://www.codevomit.xyz/bootlog/blog/how-to-provide-spring-boot-fat-jar


https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-executable-jar-format.html

paulwong 2019-12-27 15:47 發表評論
]]>
2020年了,Android后臺保活還有戲嗎?看我如何優雅的實現!http://www.oiklr.tw/jb2011/archive/2019/12/27/434996.htmlJack JiangJack JiangFri, 27 Dec 2019 06:51:00 GMThttp://www.oiklr.tw/jb2011/archive/2019/12/27/434996.htmlhttp://www.oiklr.tw/jb2011/comments/434996.htmlhttp://www.oiklr.tw/jb2011/archive/2019/12/27/434996.html#Feedback0http://www.oiklr.tw/jb2011/comments/commentRss/434996.htmlhttp://www.oiklr.tw/jb2011/services/trackbacks/434996.html1、引言

對于移動端IM應用和消息推送應用的開發者來說,Android后臺保活這件事是再熟悉不過了。

自從Android P(即Android 8.0)出現以后,Android已經從系統層面將后臺保活這條路給堵死了(詳見:《Android P正式版即將到來:后臺應用保活、消息推送的真正噩夢》),曾今那些層出不窮的保活黑科技能用的也越來越少了(詳見:《全面盤點當前Android后臺保活方案的真實運行效果(截止2019年前)》。雖然可以自已對接廠商的ROOM級推送通道,但一方面各廠商的推送接口都不一樣(而且同一廠商不同的系統版本間也存在推送接口的兼容性問題),很不方便。另一方面要一家家引入各自的推送服務SDK包會讓APP變的很大,這讓APP的下載變的很不友好。

總之,Android應用的后臺保活在某些場景下,還是有持續的需求。除了之前那些耳熟能詳的保活黑科技以外,在Android 9.0(甚至Android 10)時代,我們還有哪些保活方法可以用?那么,請跟著本文作者的思路,看看更優雅的后臺保活實現方法吧。

(本文同步發布于:http://www.52im.net/thread-2881-1-1.html

 

2、關于作者

網名NanBox:畢業于華中科技大學,現為"悅跑圈APP”高級Android開發工程師。主要負責公司 Android 項目,核心模塊的開發。涉及 GPS 定位、地圖、圖片編輯等功能。獨立開發了手表應用項目。 在項目中應入了 Flutter 跨平臺開發技術,實現了原生和 Flutter 的混合開發。

本文作者樂于分享,平時會寫技術文章并分享在多個平臺,是掘金專欄作者的一員,文章總閱讀量超過 10 萬。在 GitHub 上有多個開源項目,多次在團隊內部進行技術分享。是 Android 和 Flutter 官方中文文檔譯者。

3、相關文章

如果你想詳細了解目前Android平臺上后臺保活技術的挑戰,請閱讀:

Android P正式版即將到來:后臺應用保活、消息推送的真正噩夢》。

如果你想回顧那些曾今出現的Android保活黑科技,以下文章值得好好讀讀:

全面盤點當前Android后臺保活方案的真實運行效果(截止2019年前)

應用保活終極總結(一):Android6.0以下的雙進程守護保活實踐

應用保活終極總結(二):Android6.0及以上的保活實踐(進程防殺篇)

應用保活終極總結(三):Android6.0及以上的保活實踐(被殺復活篇)

Android進程保活詳解:一篇文章解決你的所有疑問

Android端消息推送總結:實現原理、心跳保活、遇到的問題等

深入的聊聊Android消息推送這件小事

為何基于TCP協議的移動端IM仍然需要心跳保活機制?

微信團隊原創分享:Android版微信后臺保活實戰分享(進程保活篇)

融云技術分享:融云安卓端IM產品的網絡鏈路保活技術實踐

4、Android保活現狀

我們知道,Android 系統會存在殺后臺進程的情況,并且隨著系統版本的更新,殺進程的力度還有越來越大的趨勢(見:《Android P正式版即將到來:后臺應用保活、消息推送的真正噩夢》)。

系統這種做法本身出發點是好的,因為可以節省內存,降低功耗,也避免了一些流氓行為。

但有一部分應用,應用本身的使用場景就需要在后臺運行,用戶也是愿意讓它在后臺運行的,比如跑步類應用、一些懶得對接廠商推送通道的IM應用、消息推送資訊類應用等。

一方面流氓軟件用各種流氓手段進行保活,另一方面系統加大殺后臺的力度,導致我們一些真正需要在后臺運行的應用被誤殺,苦不堪言。

5、優雅的保活?

為了做到保活,出現了不少「黑科技」,比如 1 個像素的 Activity,播放無聲音頻,雙進程互相守護等(可以讀讀這個系列:《應用保活終極總結(一):Android6.0以下的雙進程守護保活實踐》、《應用保活終極總結(二):Android6.0及以上的保活實踐(進程防殺篇)》、《應用保活終極總結(三):Android6.0及以上的保活實踐(被殺復活篇)》)。

這些做法可以說是很流氓了,甚至破壞了 Android 的生態,好在隨著 Android 系統版本的更新,這些非常規的保活手段很多都已失效了。

對于那些確實需要在后臺運行的應用,我們如何做到優雅的保活呢?

6、加入后臺運行白名單,可以優雅的實現保活

從 Android 6.0 開始,系統為了省電增加了休眠模式,系統待機一段時間后,會殺死后臺正在運行的進程。但系統會有一個后臺運行白名單,白名單里的應用將不會受到影響,在原生系統下,通過:「設置」 - 「電池」 - 「電池優化」 - 「未優化應用」,可以看到這個白名單。

通常會看到下面這兩位: 

下次被產品說「 XXX 都可以保活,為什么我們不行!」的時候,你就知道怎么懟回去了。大廠通過和手機廠商的合作,將自己的應用默認加入到白名單中。如果你在一個能談成這種合作的大廠,也就不用往下看了。

好在系統還沒有拋棄我們,允許我們申請把應用加入白名單。

首先,在 AndroidManifest.xml 文件中配置一下權限:

<uses-permissionandroid:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

可以通過以下方法,判斷我們的應用是否在白名單中:

@RequiresApi(api = Build.VERSION_CODES.M)

private boolean isIgnoringBatteryOptimizations() {

    boolean isIgnoring = false;

    PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);

    if(powerManager != null) {

        isIgnoring = powerManager.isIgnoringBatteryOptimizations(getPackageName());

    }

    return isIgnoring;

}

如果不在白名單中,可以通過以下代碼申請加入白名單:

@RequiresApi(api = Build.VERSION_CODES.M)

public void requestIgnoreBatteryOptimizations() {

    try{

        Intent intent = newIntent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);

        intent.setData(Uri.parse("package:"+ getPackageName()));

        startActivity(intent);

    } catch(Exception e) {

        e.printStackTrace();

    }

}

申請時,應用上會出現這樣一個窗口:

可以看到,這個系統彈窗會有影響電池續航的提醒,所以如果想讓用戶點允許,必須要有相關的說明。如果要判斷用戶是否點擊了允許,可以在申請的時候調用 startActivityForResult,在 onActivityResult 里再判斷一次是否在白名單中。

7、加入后臺運行白名單的多廠商適配方法

7.1 基本說明

Android 開發的一個難點在于,各大手機廠商對原生系統進行了不同的定制,導致我們需要進行不同的適配,后臺管理就是一個很好的體現。幾乎各個廠商都有自己的后臺管理,就算應用加入了后臺運行白名單,仍然可能會被廠商自己的后臺管理干掉。

如果能把應用加入廠商系統的后臺管理白名單,可以進一步降低進程被殺的概率。不同的廠商在不同的地方進行設置,一般是在各自的「手機管家」,但更難的是,就算同一個廠商的系統,不同的版本也可能是在不同地方設置。

最理想的做法是,我們根據不同手機,甚至是不同的系統版本,給用戶呈現一個圖文操作步驟,并且提供一個按鈕,直接跳轉到指定頁面進行設置。但需要對每個廠商每個版本進行適配,工作量是比較大的。我使用真機測試了大部分主流 Android 廠商的手機后,整理出了部分手機的相關資料。

首先我們可以定義這樣兩個方法:

/**

 * 跳轉到指定應用的首頁

 */

private void showActivity(@NonNull String packageName) {

    Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);

    startActivity(intent);

}

 

/**

 * 跳轉到指定應用的指定頁面

 */

private void showActivity(@NonNull String packageName, @NonNull String activityDir) {

    Intent intent = new Intent();

    intent.setComponent(newComponentName(packageName, activityDir));

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    startActivity(intent);

}

以下是部分手機的廠商判斷,跳轉方法及對應設置步驟,跳轉方法不保證在所有版本上都能成功跳轉,都需要加 try catch。

7.2 華為

廠商判斷:

public boolean isHuawei() {

    if(Build.BRAND == null) {

        return false;

    } else{

        return Build.BRAND.toLowerCase().equals("huawei") || Build.BRAND.toLowerCase().equals("honor");

    }

}

跳轉華為手機管家的啟動管理頁:

private void goHuaweiSetting() {

    try{

        showActivity("com.huawei.systemmanager",

            "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity");

    } catch(Exception e) {

        showActivity("com.huawei.systemmanager",

            "com.huawei.systemmanager.optimize.bootstart.BootStartActivity");

    }

}

操作步驟:應用啟動管理 -> 關閉應用開關 -> 打開允許自啟動

7.3 小米

廠商判斷:

public static boolean isXiaomi() {

    return Build.BRAND != null&& Build.BRAND.toLowerCase().equals("xiaomi");

}

跳轉小米安全中心的自啟動管理頁面:

private void goXiaomiSetting() {

    showActivity("com.miui.securitycenter",

        "com.miui.permcenter.autostart.AutoStartManagementActivity");

}

操作步驟:授權管理 -> 自啟動管理 -> 允許應用自啟動

7.4 OPPO

廠商判斷:

public static boolean isOPPO() {

    return Build.BRAND != null&& Build.BRAND.toLowerCase().equals("oppo");

}

跳轉 OPPO 手機管家:

private void goOPPOSetting() {

    try{

        showActivity("com.coloros.phonemanager");

    } catch(Exception e1) {

        try{

            showActivity("com.oppo.safe");

        } catch(Exception e2) {

            try{

                showActivity("com.coloros.oppoguardelf");

            } catch(Exception e3) {

                showActivity("com.coloros.safecenter");

            }

        }

    }

}

操作步驟:權限隱私 -> 自啟動管理 -> 允許應用自啟動

7.5 VIVO

廠商判斷:

public static boolean isVIVO() {

    return Build.BRAND != null&& Build.BRAND.toLowerCase().equals("vivo");

}

跳轉 VIVO 手機管家:

private void goVIVOSetting() {

    showActivity("com.iqoo.secure");

}

操作步驟:權限管理 -> 自啟動 -> 允許應用自啟動

7.6 魅族

廠商判斷:

public static boolean isMeizu() {

    return Build.BRAND != null&& Build.BRAND.toLowerCase().equals("meizu");

}

跳轉魅族手機管家:

private void goMeizuSetting() {

    showActivity("com.meizu.safe");

}

操作步驟:權限管理 -> 后臺管理 -> 點擊應用 -> 允許后臺運行

7.7 三星

廠商判斷:

public static boolean isSamsung() {

    return Build.BRAND != null&& Build.BRAND.toLowerCase().equals("samsung");

}

跳轉三星智能管理器:

private void goSamsungSetting() {

    try{

        showActivity("com.samsung.android.sm_cn");

    } catch(Exception e) {

        showActivity("com.samsung.android.sm");

    }

}

操作步驟:自動運行應用程序 -> 打開應用開關 -> 電池管理 -> 未監視的應用程序 -> 添加應用

7.8 樂視

廠商判斷:

public static boolean isLeTV() {

    return Build.BRAND != null&& Build.BRAND.toLowerCase().equals("letv");

}

跳轉樂視手機管家:

private void goLetvSetting() {

    showActivity("com.letv.android.letvsafe",

        "com.letv.android.letvsafe.AutobootManageActivity");

}

操作步驟:自啟動管理 -> 允許應用自啟動

7.9 錘子

廠商判斷:

public static boolean isSmartisan() {

    return Build.BRAND != null&& Build.BRAND.toLowerCase().equals("smartisan");

}

跳轉手機管理:

private void goSmartisanSetting() {

    showActivity("com.smartisanos.security");

}

操作步驟:權限管理 -> 自啟動權限管理 -> 點擊應用 -> 允許被系統啟動。

8、友商致敬?

在之前做的跑步應用中,我在設置里增加了一個權限設置頁面,將上面提到的設置放在這里面。

最近發現友商某咚也跟進了,圖 1 是我們做的,圖 2 是某咚做的: 

某咚從設計、從我寫的不夠好的文案,甚至是我從十幾臺手機上一張一張截下來的圖,進行了全方位的致敬。感謝某咚的認可,但最近在某個發布會上聽到這么一句話:在致敬的同時,能不能說一句謝謝?

某咚的致敬,一方面說明了目前確實存在進程容易被殺,保活難度大的問題,另一方面也說明了這種引導用戶進行白名單設置的手段是有效的。

附錄:更多相關技術文章

應用保活終極總結(一):Android6.0以下的雙進程守護保活實踐

應用保活終極總結(二):Android6.0及以上的保活實踐(進程防殺篇)

應用保活終極總結(三):Android6.0及以上的保活實踐(被殺復活篇)

Android進程保活詳解:一篇文章解決你的所有疑問

Android端消息推送總結:實現原理、心跳保活、遇到的問題等

深入的聊聊Android消息推送這件小事

為何基于TCP協議的移動端IM仍然需要心跳保活機制?

微信團隊原創分享:Android版微信后臺保活實戰分享(進程保活篇)

微信團隊原創分享:Android版微信后臺保活實戰分享(網絡保活篇)

移動端IM實踐:實現Android版微信的智能心跳機制

移動端IM實踐:WhatsApp、Line、微信的心跳策略分析

Android P正式版即將到來:后臺應用保活、消息推送的真正噩夢

全面盤點當前Android后臺保活方案的真實運行效果(截止2019年前)

一文讀懂即時通訊應用中的網絡心跳包機制:作用、原理、實現思路等

融云技術分享:融云安卓端IM產品的網絡鏈路保活技術實踐

正確理解IM長連接的心跳及重連機制,并動手實現(有完整IM源碼)

2020年了,Android后臺保活還有戲嗎?看我如何優雅的實現!

>> 更多同類文章 ……

(本文同步發布于:http://www.52im.net/thread-2881-1-1.html



Jack Jiang 2019-12-27 14:51 發表評論
]]>
go調用以太坊rpc寫入合約操作中的DATA數據解析(純字符串參數)http://www.oiklr.tw/waterjava/archive/2019/12/27/434995.html狼愛上貍狼愛上貍Fri, 27 Dec 2019 06:49:00 GMThttp://www.oiklr.tw/waterjava/archive/2019/12/27/434995.htmlhttp://www.oiklr.tw/waterjava/comments/434995.htmlhttp://www.oiklr.tw/waterjava/archive/2019/12/27/434995.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/434995.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/434995.htmlhttps://blog.csdn.net/weixin_42608885/article/details/100889008

狼愛上貍 2019-12-27 14:49 發表評論
]]>
一步步構建自己的智能合約http://www.oiklr.tw/waterjava/archive/2019/12/26/434994.html狼愛上貍狼愛上貍Thu, 26 Dec 2019 08:09:00 GMThttp://www.oiklr.tw/waterjava/archive/2019/12/26/434994.htmlhttp://www.oiklr.tw/waterjava/comments/434994.htmlhttp://www.oiklr.tw/waterjava/archive/2019/12/26/434994.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/434994.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/434994.htmlhttps://segmentfault.com/a/1190000014797663

狼愛上貍 2019-12-26 16:09 發表評論
]]>
如何審計一個智能合約http://www.oiklr.tw/waterjava/archive/2019/12/26/434993.html狼愛上貍狼愛上貍Thu, 26 Dec 2019 07:37:00 GMThttp://www.oiklr.tw/waterjava/archive/2019/12/26/434993.htmlhttp://www.oiklr.tw/waterjava/comments/434993.htmlhttp://www.oiklr.tw/waterjava/archive/2019/12/26/434993.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/434993.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/434993.htmlhttps://cloud.tencent.com/developer/article/1522230

狼愛上貍 2019-12-26 15:37 發表評論
]]>
如何調用以太坊智能合約http://www.oiklr.tw/waterjava/archive/2019/12/26/434992.html狼愛上貍狼愛上貍Thu, 26 Dec 2019 07:31:00 GMThttp://www.oiklr.tw/waterjava/archive/2019/12/26/434992.htmlhttp://www.oiklr.tw/waterjava/comments/434992.htmlhttp://www.oiklr.tw/waterjava/archive/2019/12/26/434992.html#Feedback0http://www.oiklr.tw/waterjava/comments/commentRss/434992.htmlhttp://www.oiklr.tw/waterjava/services/trackbacks/434992.htmlhttps://www.cnblogs.com/KRDecad3/p/11745568.html

狼愛上貍 2019-12-26 15:31 發表評論
]]>
gin跨域http://www.oiklr.tw/willpower88/archive/2019/12/26/434991.html一凡一凡Thu, 26 Dec 2019 03:17:00 GMThttp://www.oiklr.tw/willpower88/archive/2019/12/26/434991.htmlhttp://www.oiklr.tw/willpower88/comments/434991.htmlhttp://www.oiklr.tw/willpower88/archive/2019/12/26/434991.html#Feedback0http://www.oiklr.tw/willpower88/comments/commentRss/434991.htmlhttp://www.oiklr.tw/willpower88/services/trackbacks/434991.html
  • 新增中間件cors
  • func Cors() gin.HandlerFunc {
    return func(c *gin.Context) {
    method := c.Request.Method

    c.Header("Access-Control-Allow-Origin", "*") //必選
         c.Header("Access-Control-Allow-Headers", "*") //可選 如果request有header, 必選
         //c.Header("Access-Control-Allow-Credentials", "true") //可選
    //c.Header("Access-Control-Allow-Methods", "*") //可選
    //c.Header("Access-Control-Expose-Headers", "*") //可選

    //放行所有OPTIONS方法
    if method == "OPTIONS" {
    c.AbortWithStatus(http.StatusOK)
    }
    // 處理請求
    c.Next()
    }
    }
  • 在router里增加cors,必須在group之前,全局設置
    r.Use(gin.Logger(), gin.Recovery(), cors.Cors())
  • 測試代碼,header設置不能多于cors設置
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <link type="test/css" href="css/style.css" rel="stylesheet">
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script type="text/javascript">
    $(function(){
    $("#cors").click(
    function(){
    $.ajax({
    headers:{
    "Content-Type":"application/json;charset=UTF-8",
    "Access":"adsad",
    "Access-Token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InRlc3QiLCJwYXNzd29yZCI6InRlc3QxMjM0NTYiLCJleHAiOjE1NzczMzY3MTIsImlzcyI6Imdpbi1ibG9nIn0.wMlQXqZO2V0LR-FIgDh45LWI0OYMYi6an_NvRmF0Nug"
    },
    url:"http://127.0.0.1:8000/api/v1/articles",
    success:function(data){
    console.log("start");
    console.log(data);
    }
    })
    });
    });
    </script>
    <body>
    <input type="button" id="cors" value="core跨域測試">
    </body>
    </html>
  • 請求的headers數量、名稱與cors里的設置需要嚴格對應,不然報錯如下
    Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/v1/articles' from origin 'http://localhost:9999' has been blocked by CORS policy: Request header field access is not allowed by Access-Control-Allow-Headers in preflight response.


  • 一凡 2019-12-26 11:17 發表評論
    ]]>
    2013火热网络捕鱼游戏 e球彩走势图总进球数 黑龙江p62 湖南快乐10分走势图 黑龙江十一选五走势图 为什么没有诈金花游戏 福建31选7 微信投票赚钱是真的嘛 31选7开奖号码18344 北京十一选五前三直 扑克王 中国竞彩网比分直播 山西快乐10分基础走势 中国体育彩票 浙江排列五走势图 体彩20选5开奖时间几点 北京赛车pk10