IT Blog

  • Blog
  • Technology
    • Technology
    • Architecture
    • CMS
    • CRM
    • Web
    • DotNET
    • Python
    • Database
    • BI
    • Program Language
  • Users
    • Login
    • Register
    • Forgot Password?
  • ENEN
    • 中文中文
    • ENEN
Experience IT
In a World of Technology, People Make the Difference.
Wordpress

Restrict WordPress user access some contents

Scenario Certain contents are allowed by specific group of users to access. Membership roles concept With Members plugin, user roles can be managed in dashboard. Role permissions are called capability. The capabilities are defined based on themes and plugins. The following figure shows the basic role capabilities. Solution Add a user role that allows users to access those restricted contents. Steps 1. Members plugin Install plugin called "Members – Membership & User Role Editor Plugin". 2. Setup roles Go to Members on the left menu of Dashboard. Here you could add a new role or edit an existing role, and then assign permissions, which called capability within the plugin, to the role. 3. Add user to a role Go to Users menu, click on the user that you want to edit. Scrolldown to the bottom, the last section is User Roles. Select the role to assign. 4. Restrict page access by role On the page/post editor, scrolldown to the last section "Content Permission", assign page with the role that is allowed to access the page/post. Done. Now you have restrict the page to be accessed only the users with the role.  1,709 total views

2020-12-03 0 Comments 389 Views 0 Like IT Team Read more
Security

Mixed Content warning: request an insecure element was automatically upgraded to HTTPS

After applied SSL settings to enforce HTTPS browser starts complaining "Mixed Content: ..." as the image shown bellow. "Mixed Content" warnings occur when an HTTPS page is asked to load a resource over HTTP. Insecure resources are vulnerable to alteration by an active attacker or eavesdropping by a passive attacker, which violates the user's expectation of security for an HTTPS page. Ref: Fixing mixed content for more information. Fix: Change all insured links with "http://" to "https://" on the page. This could a tough work and time consuming. The following is a hot fix, it works very well for me. Hot fix: Add meta content in html head section to allow browser automatically upgrade http to https, ensure loading contents through SSL layer. <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">  1,765 total views

2020-12-02 0 Comments 391 Views 1 Like IT Team Read more
Hosting

Set up DKIM to prevent email spoofing on GSuite

DomainKeys Identified Mail (DKIM) standard is designed to help prevent spoofing on outgoing messages sent from your domain. Email spoofing is when email content is changed to make the message appear from someone or somewhere other than the actual source. Spoofing is a common unauthorized use of email, so some email servers require DKIM to prevent email spoofing. DKIM adds an encrypted signature to the header of all outgoing messages. Email servers that get signed messages use DKIM to decrypt the message header,  and verify the message was not changed after it was sent. Follow the following steps to setup DKIM on GSuite. Go to google admin console -> apps -> google workspace -> gmail -> Authenticate email -> generate new record -> choose 1024 DKIM bit length -> copy generated domain key -> go to cpanel -> advanced DNS zone editor -> enter the domain key as a text record -> go back to google admin console -> click Start authentication button -> DONE.  3,074 total views

2020-11-27 0 Comments 1014 Views 1 Like IT Team Read more
C#

Checks if the remote file exists

Language: C# /// <summary>Get remote file information</summary> /// <param name="url">The URL of the remote file</param> /// <returns>RemoteFile if the remote file exists, or null</returns> public static RemoteFile RemoteFileInfo(string url) { RemoteFile file = new RemoteFile(); try { var request = WebRequest.Create(url); request.Method = "HEAD"; using (var response = request.GetResponse() as HttpWebResponse) { file.LastModified = response.LastModified; file.Size = response.ContentLength; file.StatusCode = response.StatusCode; file.ContentType = response.ContentType; file.ContentEncoding = response.ContentEncoding; } } catch(Exception e) { return null; } return file; } public class RemoteFile { public DateTime LastModified { get; set; } public long Size { get; set; } public HttpStatusCode StatusCode { get; set; } public string ContentType { get; set; } public string ContentEncoding { get; set; } }  2,966 total views

2020-11-19 0 Comments 776 Views 1 Like IT Team Read more
SQL Server

Useful sql script for SQL Server developers

Split array column into rows Use OPENJSON feature in sql server (2016+) to parse json array string into rows. Let's first look this: select * from openjson('["small.jpg","mid.jpg","big.jpg"]') select * from openjson('{"A":"small1.jpg","B":"mid1.jpg","C":"big1.jpg"}') Result: key value type 0 small.jpg 1 1 mid.jpg 1 2 big.jpg 1 key value type A small1.jpg 1 B mid1.jpg 1 C big1.jpg 1 Now look at more complehensive example: create table parts (id int, name varchar(255), images varchar(max)) insert into parts (id,name,images) values (1, 'nail','["small.jpg","mid.jpg","big.jpg"]'), (2, 'screw','{"A":"small1.jpg","B":"mid1.jpg","C":"big1.jpg"}') --split array column to rows declare @tmp table(id int, img varchar(4000)) declare @id int,@img varchar(max) declare csr cursor for select id,images from parts open csr fetch next from csr into @id,@img while @@fetch_status=0 begin insert into @tmp (id,img) select @id,value from openjson(@img) fetch next from csr into @id,@img end close csr deallocate csr select * from @tmp Result: Concat rows to a column Using OPENXML feature in sql server to concat rows into a column. Reuse to script above: --concat rows to a column --using above example select id, '_product_image_gallery', stuff((select ','+img from @tmp where id=t.id for xml path('')),1,1,'') from @tmp t group by id Result:  2,058 total views

2020-10-20 0 Comments 651 Views 0 Like IT Team Read more
Security

Removing WP-VCD malware

Yesterday, I was notified there were malicious activity from your website, a huge number of email spam messages is originating from it.211cn.ca. As a result the website was suspended as limited access, which only allow registered IP can access the website. When I logon, notification appeared on the panel. And my.siteground home Detail notification In the review panel I saw a list of files that contains malicious code. GEN|eval_base64decode|92ac7c84794de23675efab25846195ea|07/09/20| /home/hostlike/pubweb211/211it/blyuzewtpd.php GEN|eval_base64decode|92ac7c84794de23675efab25846195ea|07/09/20| /home/hostlike/pubweb211/211it/ndxwcecntb.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|11/09/20| /home/hostlike/pubweb211/211it/vckkmhpjam.php GEN|eval_base64decode|92ac7c84794de23675efab25846195ea|07/09/20| /home/hostlike/pubweb211/211it/lllriasktz.php GEN|eval_base64decode|b200c70d10b280b747353869008d8975|10/09/20| /home/hostlike/pubweb211/211it/guzzmmgqcc.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/cmswprkgwt.php GEN|eval_base64decode|6d9dc920c3142026786fac9ef4a85b7f|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/upmnzusqae.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/awiotljzvb.php HEX|strrev_gzinflate_obfusc|69f9670e8743e996e97b271aa8570044|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/rsixodaduj.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/wcbwqrugyx.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/zrjkkylnkr.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/oqjfkoyenl.php HEX|strrev_gzinflate_obfusc|69f9670e8743e996e97b271aa8570044|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/qbhdyxlhku.php HEX|strrev_gzinflate_obfusc|69f9670e8743e996e97b271aa8570044|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/wgmtivragq.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/hiqobbrcem.php HEX|strrev_gzinflate_obfusc|69f9670e8743e996e97b271aa8570044|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/smkjoogdfw.php HEX|strrev_gzinflate_obfusc|69f9670e8743e996e97b271aa8570044|07/09/20| /home/hostlike/pubweb211/211it/wp-content/plugins/wp-file-manager/lib/files/mmnudpdxaj.php STR|wp_vcd_malware|8125436f73ec321255941993e83d4215|17/05/19| /home/hostlike/pubweb211/211it/wp-content/themes/apostrophe-2-wpcom/functions.php STR|wp_vcd_malware|3bd15df2ee78583e0e5249c20b004570|17/05/19| /home/hostlike/pubweb211/211it/wp-content/themes/twentynineteen/functions.php STR|wp_vcd_malware|89e770805bc10deaaed0bc2b5e5e2044|17/05/19| /home/hostlike/pubweb211/211it/wp-content/themes/apostrophe-2-wpcom-child/functions.php STR|wp_vcd_malware|3342254765f2895b7287d55206c4715a|30/12/19| /home/hostlike/pubweb211/211it/wp-content/themes/twentytwenty/functions.php STR|wp_vcd_malware|6a87f54f37ac47b27764d760559444fe|17/05/19| /home/hostlike/pubweb211/211it/wp-content/themes/twentyseventeen/functions.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|10/09/20| /home/hostlike/pubweb211/211it/hllyqgfyoo.php GEN|eval_base64decode|d2015c782da6ab8e637d8e6fe7318d06|11/09/20| /home/hostlike/pubweb211/211it/F0xAutoConfig/inthagame.php GEN|eval_base64decode|d2015c782da6ab8e637d8e6fe7318d06|22/02/18| /home/hostlike/pubweb211/211it/api/intrigantes.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|10/09/20| /home/hostlike/pubweb211/211it/jsilrrlpdj.php STR|wp_vcd_malware|6fc123ea0b9564867df8f3391206f05c|02/01/20| /home/hostlike/pubweb211/211it/wp-includes/post.php STR|wp_vcd_malware|6e618a387332c93c2f78e08f21c724d3|17/01/20| /home/hostlike/pubweb211/211it/wp-includes/wp-vcd.php HEX|js_url_slider|92ea63f479cf2a449af94368f951010f|06/09/20| /home/hostlike/pubweb211/211it/wp-includes/wp-tmp.php GEN|eval_base64decode|d2015c782da6ab8e637d8e6fe7318d06|17/05/19| /home/hostlike/pubweb211/211it/wp-snapshots/intro.php HEX|eval_gzinflate_b64d_0|8266b96d0ba86770c9f7edf62198a003|07/05/19| /home/hostlike/pubweb211/211it/pages/tk_desk.php HEX|eval_gzinflate_b64d_0|8266b96d0ba86770c9f7edf62198a003|22/02/18| /home/hostlike/pubweb211/211it/tools/tjsend.php GEN|eval_base64decode|d6a7b5db62bf7815a10a17cdf7ddbd4b|10/09/20| /home/hostlike/pubweb211/211it/dvflreeurs.php HEX|remote_content_includer_6|3480dcf23fdfa81ed608897c2680bb4a|07/09/20| /home/hostlike/pubweb211/211it/vynugoevjh.php WP-VCD malware is used to add an admin user, it hides in legitimate WordPress files. The initial version of this threat was uploaded via wp include file called wp-vcd.php. The malicious code is injected into Wordpress core files like functions.php, class.wp.php, post.php, and also injected into WordPress themes, including child theme. It was reported that WP-VCD malware is a malicious code that comes bundled with illegitimate versions of a paid theme/plugin. These pirated themes and plugins incorporate malicious scripts that get inserted once you install them. Once leaked to your website though a nulled theme, it starts spreading to infect other themes on your site and even proliferates to infect every unprotected site hosted on the shared server. If you’ll look for “Free [pugin…

2020-09-27 0 Comments 711 Views 1 Like IT Team Read more
DotNET

Extend some useful string functions in C#

Add some useful extension methods for string manipulations in C#. Make coding more elegent, interesting and productive. string.ToBoolean(); string.ToInt(); string.RemoveSufix(string suffix); string.RemovePrefix(string prefix); string.Remove(string toBeRemoved); string.RemoveSpace(); string.RemoveWhiteSpace();   /// <summary> /// Accept string value: "true", "t", "1" as true, all others will be evaluated as false. /// </summary> /// <returns></returns> public static bool ToBoolean(this string value) { if (string.IsNullOrEmpty(value)) return false; switch (value.Trim().ToLower()) { case "true": return true; case "t": return true; case "1": return true; case "0": return false; case "false": return false; case "f": return false; case "": return false; default: return false; //throw new InvalidCastException("You can't cast that value to a bool!"); } } /// <summary> /// Convert a string to int with default value /// </summary> /// <returns></returns> public static int ToInt(this string value) { if (string.IsNullOrEmpty(value)) return 0; int.TryParse(value, out int i); return i; } /// <summary> /// Remove string suffix /// </summary> /// <param name="suffix"></param> /// <returns></returns> public static string RemoveSufix(this string value, string suffix) { if (value.EndsWith(suffix)) { value.Substring(0, value.Length - suffix.Length); } return value; } /// <summary> /// Remove string prefix /// </summary> /// <param name="prefix"></param> /// <returns></returns> public static string RemovePrefix(this string value, string prefix) { if (value.StartsWith(prefix)) { value.Substring(prefix.Length); } return value; } /// <summary> /// Remove all spaces from a string /// </summary> /// <returns></returns> public static string RemoveSpace(this string value) { return value.Replace(" ", string.Empty); } /// <summary> /// Remove all white spaces from a string, including " ", \t, \r, \n /// </summary> /// <returns></returns> public static string RemoveWhiteSpace(this string value) { return value.Replace(" ", string.Empty) .Replace("\t",…

2020-09-24 0 Comments 1189 Views 1 Like IT Team Read more
Python

Download video from zoom

Zoom meeting recorded video and saved in mp4 format file. But it is not allowed to download. In order to overcome "access denied" error, we have to add hread informations: user agent, cookie, and referer. Here is the source code to download the video using python. import requests url="https://ssrweb.zoom.us/cmr/replay/2020/09/21/2189503564/CD309625-D877-4B35-B99F-34CA4529F0CD/GMT20200920-233653_Tom-Ren-s-_1920x900.mp4?response-content-type=video%2Fmp4&response-cache-control=max-age%3D0%2Cs-maxage%3D86400&data=b87bffbf0d63fc51fb5b53caa6a6e3be04d1fc8b436a138418c4cfce8ff64b49&s001=yes&cid=aw1&fid=eT5a1fFKL6E57JgRK8F681dHTUjCtkgCRQSIhogfoc991lO-o1SPZgBwVzAnFJVok-qWSQ3oTrbpuF_L.01AJKlG7IPx983bD&s002=ly1zSoH_nrGCD_5BpiDHTfumcztfOw0ymT3bgpFePYuEvjANCyhpAsfNHw.bIBlHettrxUuB0Ga&Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6Imh0dHBzOi8vc3Nyd2ViLnpvb20udXMvY21yL3JlcGxheS8yMDIwLzA5LzIxLzIxODk1MDM1NjQvQ0QzMDk2MjUtRDg3Ny00QjM1LUI5OUYtMzRDQTQ1MjlGMENEL0dNVDIwMjAwOTIwLTIzMzY1M19Ub20tUmVuLXMtXzE5MjB4OTAwLm1wND9yZXNwb25zZS1jb250ZW50LXR5cGU9dmlkZW8lMkZtcDQmcmVzcG9uc2UtY2FjaGUtY29udHJvbD1tYXgtYWdlJTNEMCUyQ3MtbWF4YWdlJTNEODY0MDAmZGF0YT1iODdiZmZiZjBkNjNmYzUxZmI1YjUzY2FhNmE2ZTNiZTA0ZDFmYzhiNDM2YTEzODQxOGM0Y2ZjZThmZjY0YjQ5JnMwMDE9eWVzJmNpZD1hdzEmZmlkPWVUNWExZkZLTDZFNTdKZ1JLOEY2ODFkSFRVakN0a2dDUlFTSWhvZ2ZvYzk5MWxPLW8xU1BaZ0J3VnpBbkZKVm9rLXFXU1Ezb1RyYnB1Rl9MLjAxQUpLbEc3SVB4OTgzYkQmczAwMj1seTF6U29IX25yR0NEXzVCcGlESFRmdW1jenRmT3cweW1UM2JncEZlUFl1RXZqQU5DeWhwQXNmTkh3LmJJQmxIZXR0cnhVdUIwR2EiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MDA3NTA5MzB9fX1dfQ__&Signature=J-GEzf4ZyLk~Jlt~05nwpyWnVlw1~KTHasbnBpYaUV5H36d7Vijx~arr0VHNjUvG6jMCqQvjZBht5OnGmKLNKwLCC8sgJsY~dK~~LHyWXtOeSmKCN5OeIftk6YITItvnpyWYujuggXECzcGqis1K~gxa9krlax0J5~OosoKZat33JZISttY3RPAbfO~GeRqfJkDwiTVS1sKIyFdFbc~m-haPN4SlDx1ZDKpDWowYtRIkd4u692cclyp7fgxeIRy9OKyKt3Wfkw-39fTq5TcDJ5u1Yq~o4u0qbeLzASSFDgw7DRpZVnMqODupnhXp1QrZ8886s~ij7GU2oY7rXKzRHA__&Key-Pair-Id=APKAJFHNSLHYCGFYQGIA" content = requests.get(url, headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36", "Cookie": "_zm_ssid=aw1_c_rWPCvlX3Tcmc8iikrsu0Bg; _zm_mtk_guid=b2c4961722954e1890f35c83dc55fc01; zm_oauth_cluster=aw1; zm_general_guid=""5Rog1fA9Dxwqucr9rINhlQzwlU/sFl0FdC6GZtoSZp4=""; _zm_lang=en-US; zm_gnl_guid=ab1cGxWMcSkw4h2H6yO/DOPyREzINR14Ppkyl7FBOlG1eU5nI2Qnwdltx4ESb0I1odSd; zm_gnl_ruid=udw1HTAmShCudkTwo4ToCA; _zm_csp_script_nonce=JG_kdyI9T-CxO2Y4shUwHA; _zm_launcher=1597953850725; zm_gnl_guid_v2=dffcVktj7guFTpRscXSNCeINKl8xSIlozAf16PavwVWL29lhYi78Ym1sSg3l9Js/VWHPWMBeaBr7Ap6D0q0Z00gLsZb2SrCjP5C8Y=; _zm_page_auth=aw1_c_wCHnZvcWSvuMw-h46T8FIg; _zm_ctaid=51pkTNQpTz-uUZmjm4Rulw.1600739087485.c798cb33478fb73a92bac81a5f6662e2; _zm_chtaid=811; _zm_currency=CAD", "referer": "https://zoom.us/rec/play/P4ZLJUcpCuFLJBpjP7wRiBRHquR8PNIK91C3FRHSPGJ0XX39e6e88ZYmzRLhXq9djw90IHTTTKv0cxfI.QAryZuRQmCV5viBv?continueMode=true&_x_zm_rtaid=51pkTNQpTz-uUZmjm4Rulw.1600739087485.c798cb33478fb73a92bac81a5f6662e2&_x_zm_rhtaid=811" }).content # print(content) counter = 0 with open('./video/第二讲 加拿大房屋保险.mp4', 'wb') as f: # f.write(content) # f.close() for buffer in content.iter_content(chunk_size=4096): f.write(buffer) counter += len(buffer) print(counter)  6,847 total views,  10 views today

2020-09-21 0 Comments 1441 Views 0 Like IT Team Read more
DotNET

Unicode to Chinese conversion notes

Unicode expressed like "\u4a44". Chinese words located from 0x3400 to 0x9fa5, including simplified and traditional words. Online tool: Unicode to Chinese covnerter C# Stores unicode data as a string, for each unicode in a string lookup the string by hex or integer number to get the right characters to replace them in the string. string ZHTable = "㐀㐁㐂㐃㐄㐅㐆㐇㐈㐉㐊㐋㐌㐍㐎㐏㐐... ...";   private string GetChar(string unicode) { unicode = unicode.Replace("\\u", ""); var code = Convert.ToInt32(unicode, 16); return ZHTable[code - 13312].ToString(); } var matches = Regex.Matches(text, @"\\u[a-f0-9]{4}"); string result = text; if (matches.Count > 0) { foreach (var m in matches) { var key = m.ToString(); result = result.Replace(key, GetChar(m.ToString())); } }   public string ToChinese(string text) { var matches = Regex.Matches(text, @"\\u[a-f0-9]{4}"); string result = text; if (matches.Count > 0) { foreach (var m in matches) { var key = m.ToString(); result = result.Replace(m.ToString(), GetChar(key)); } } return result; } PHP Stores unicode data in a dictionary like array, for each unicode in a string look up the dictionary to get the right characters to replace them in the string. $unicodedata = [ ... ... 0x3437 => '㐷', 0x3438 => '㐸', 0x3439 => '㐹', 0x343a => '㐺', 0x343b => '㐻', 0x343c => '㐼', ... ... ]; for number calculate as power of 16; for a-f, convert to ascii code - 87, so as a=10, f=15, then calculate as power of 16; for hex letter only has a-f, other than that throw exception. if($this->is_number($u[$i])){ $val += $u[$i] * pow(16, 3-$i); } elseif($this->is_hexletter($u[$i])){ $val += ord($u[$i])-87 * pow(16,3-$i); } to match all unicode, which…

2020-09-18 0 Comments 823 Views 0 Like IT Team Read more
Python

Data visualization with Flask

install Flask pip install flask Get Template Writing code Idea: Based on the proper visualization template, feed data from python program to the template, then render the result in the template. 1. Passing data from python to template through javascript. In Python file: from flask import Flask, render_template app = Flask(__name__) @app.route('/') def root(): divdata = '草莓,乌梅,蓝莓,红莓,白梅,话梅,绿莓'; areadata = '555,666,777'; return render_template('bigdata.html', divdata=divdata, areadata=areadata, ... ) if __name__ == '__main__': app.run(debug=True) 2. In template html file Render data as an html element, using js to convert it into js varaibles. <div id='divdata' style="display:none">{{ divdata }}</div> <div id='areadata' style="display:none">{{ areadata }}</div> <script> var divdata = document.getElementById('divdata').innerText; var datadiv = divdata.split(','); var areadata = document.getElementById('areadata').innerText; var dataarea = areadata.split(','); </script> 3. In chart js configuration file: //initialize echarts, and configure the chart var myChart = echarts.init(document.getElementById('echart1')); option = { ... xAxis: [{ type: 'category', data: datadiv, axisLine: { var data = [ { name: '海门', value: dataarea[0]}, { name: '鄂尔多斯', value: dataarea[1]}, { name: '招远', value: dataarea[2]}, { name: '舟山', value: dataarea[3]}, Result  3,693 total views

2020-09-13 0 Comments 891 Views 0 Like IT Team Read more
12345…18
Chinese (Simplified) Chinese (Simplified) Chinese (Traditional) Chinese (Traditional) English English French French German German Japanese Japanese Korean Korean Russian Russian
Newest Hotspots Random
Newest Hotspots Random
Rich editor not working Making web page scroll down automatically Getting data from Dapper result All Unicode Chars How to keep and display contact form 7 data Common Regular Expressions
Entering large number of Envira Galleries at a time Social media Python Data Visualization Practise Wordpress + polylang - Globalization Scientific format problem Download URLs
Categories
  • Architecture
  • BI
  • C#
  • CSS
  • Database
  • DotNET
  • Hosting
  • HTML
  • JavaScript
  • PHP
  • Program Language
  • Python
  • Security
  • SEO
  • Technology
  • Web
  • Wordpress

COPYRIGHT © 2021 Hostlike IT Blog. All rights reserved.

This site is supported by Hostlike.com