發表文章

目前顯示的是有「除錯」標籤的文章

在 eeebox 上安裝 linux 之烏龍連連

 Linux 在很多老機器上表現一直不俗,為了榨取老機的最後價值,想在塵封多年的 eeebox 上裝 Linux 讓它做一台 NAS,雖然知道 synology 極好用,也明白它的價值在於它的整合和軟體,以及到處可以存取的好處,但是這 3000 還是想省下來,沒想到的是這麼多年了, Linux 也改進了不少,硬體也更新了,於是,又撞牆了  工作環境:     eeebox     Linux Mint     rufus  首先還是把系統先備一下,雖然不太可能再把 windows 裝回來,還是習慣做一下備份,結果 rufus 做的開機 usb 都開不進去,不管是 redo backup and restore、easeus、clonezilla,後來是看到 clonezilla 的版本不符的訊息才想到, XP 是 32bit 的時代,只好拿出舊 usb 開進 dos(好久不見) ghost(也是好久不見) 系統磁區  想當然爾,原本收錄的 64bit Linux 發行版都不能用,要重新下載 32bit 的,結果用 rufus 做的開機 usb ,硬是開不進去,一直出現類似 stdin: Not a typewriter,之類的訊息;kernal panic;開進 busybox (initramfs);Can not mount /dev/loop0 (cdrom.....);後來是降到 Linux Mint 16 而且用 DD 寫入模式做的開機 usb 才開進 live CD ,居然 1G ram 可以跑 Linux Mint Mate,可能是沒有用 syslinux 的方式做開機 usb 吧,目前已經能開進 liveCD 改天再來試試 syslinux 的方式看看,畢竟那時代沒有 UEFI 這惱人的東東,先求有、閃過 /dev/loop0 的問題先  沒想到搞老機器得要考古軟體    收工!

Mikrotik router 無法使用 winbox 透過 IP 連接

 不知道是不是設定的時侯連線狀態有佔住,還是用的是 wiregurad 的連接方式,當時是可以順利連上 router 的,這次想測 site-to-site wireguard 2個節點下的內部網路機器是否可以互相連通,發現要使用  winbox 進其中一個 router 時,無法透過 IP 登入,還好透過 MAC 仍然可以連進去,檢查 IP > services 發現 winbox 有打開,兩端內部網路機器可以互相 ping 到,多半又是防火牆擋住了  工作環境:     2 mikrotik router with site-to-site wireguard VPN       進入 router 後趕快把 log freeze ,並且找關鍵字 8291(預設的 winbox port),發現被 DROP ALL 的 firewall filter 擋下了,所以要設 log 才好排查設定啊~~  有 log 幫忙就能很容易知道要開什麼洞給自已鑽,因為 log 會詳細記錄封包的來龍去脈,照著把小門打開就行:記得 dst-address ,還有 src-address 要視你的需求和設定,改成你的目的地和來源的 IP 位置或是範圍 /ip firewall filter add action=accept chain=input comment="allow LAN/bridge to Winbox" \     connection-state=new dst-address=192.168.1.254 dst-port=8291 in-interface=\     bridge1 log=yes log-prefix="allow LAN/bridge to Winbox" protocol=tcp \     src-address=192.168.1.0/24   設好了以後,馬上用 winbox 透過 IP 連進 router ,已經可以登入了      收工!

Mikrotik CCR 無法更新

 新版(7.8) RouterOS 釋出,想要看看有沒有 ROSE storage 可以用,先升級看看,然後就GG了  工作環境:     Mikrotik CCR          firewall DROP all input after some open services  錯誤訊息: can't resolve DNS ,想必是沒開 DNS 進來,看了一下 log 知道從哪個介面來,從哪個 src port 來     /ip firewall filter add action=accept chain=input comment="allow DNS response" in-interface=\     pppoe-out1 log=yes log-prefix="allow DNS response" protocol=udp src-port=\     53  錯誤訊息變了: connection timed out,google之後找到論壇有人討論     /ip firewall filter add action=accept chain=input comment="allow Update allow established connections" in-interface=\add action=accept chain=input comment="Allow Update allow established connections" connection-state=\     established add action=accept chain=input comment="Allow Update2 allow related connections" connection-state=\     related  可以更新了 收工!

Ubuntu 設置 Wireguard

  開始想用 wireguard 的時侯,套件一開始就裝好了,一直找不到設定檔,而且試著開始用的時侯,發現怎麼顯示出來的介面和設定的不一樣,於是又開始了一陣胡搞瞎搞…  工作環境:      Ubuntu 22 server  LTS      wireguard 1  設定的方式大同小異,可以參考 這裏 、 這裏、 或是 這裏 ,設定檔的資料夾權限可能要注意一下:     mkdir -m 0700 /etc/wireguard/      cd /etc/wireguard/      umask 077      wg genkey | tee privatekey | wg pubkey > publicke y  看別人設定覺得好像不難,居然也能撞牆…  就在完成設定檔之後, start wireguard 發現 interface 的資訊和設定的不一樣,而且找不到地方可以改原始的設定,是的,系統裏找關鍵字 conf 和 wg 就只會找到自已剛才開的設定檔,其他的檔案看起來就是長得和自已剛才開的設定檔不像,那時忘了先重開機一下,可能就沒事了,千金難買早知道啊…畢竟是很少需要重開機的系統  為了讓 wireguard 可以「正確」的啟用,開始針對訊息和設定的落差,透過刪改既有的檔案的方式來「修正」「落差」,於是乎這個檔重建也不是,殺也不是,unmask 也不行, wireguard 就是無法啟用  Failed to enable unit: Unit file /lib/systemd/system/wg-quick@.service is masked  原本設定檔裏想要透過 `cat privatekey` 來引用私鑰也是不行地…乖乖地把私鑰貼上設定檔了  如果可以很快地抓到問題所在,排除狀況,當然對症下藥,用修的;然而很多時侯,打掉重練看起來吃力,卻是最佳解, 重設設定吧,記得也要重開機   sudo dpkg-reconfigure wireguard ...

Mikrotik winbox refuse connection

  在整個 wireguard 的設定一陣忙祿之後,嘗試用 IPSec VPN 再次連回分享器,GG 了,好在這次只有一邊不能連,進去看 Log...  Log 說,用的是 IP Sec 連線,用的是 192.168.9.0 的網段,要連到 Winbox 被拒了  工作環境:   Mikrotik   Windows VPN 連線    winbox  相比2個端點的 firewall 發現有一點點不同,簡單,調成一樣就行,然後還是 GG…  後來看到2個端點的 service 設定不太一樣,原來是 IPSec 的網段沒有在允許的範圍內,於是把小門打開(winbox service 的 Address: 加入 IPSec 的網段 192.168.9.0/24),winbox 應聲打開 收工!

Mikrotik DNS Server 提供內部使用的名稱伺服器

 網域名稱對於使用者是蠻重要的服務,它雖然不貴一年400台幣左右,但是方便性無價,使用者絕對不會想去知道它的 IP ,他只想要他想找那台機器的時侯,提供你一個名字,然後你能幫他找到,那台機器在哪裏,所以就需要 DNS Server(以下稱DNS) ,也就是名稱伺服器,用來提供名稱和 IP 的對應,方便人機溝通  工作環境:   Mikrotik router    DNS Server for internal clients   Windows clients  Mikrotik 提供靜態名稱伺服器供使用者使用,在 IP > DNS > DNS settings: > Servers: 把內網的 Gateway(以下稱gw)的 IP 打上(例如: 192.168.0.1) > Allow Remote Request 勾起來 > Apply > OK ,這樣 DNS 就設好了  如果你要設定名稱對應,例如:192.168.0.2 名稱要叫使 notebook.router.lan 的話,在 IP > DNS > DNS settings: > Static > + > name: notebook.router.lan > Type: A > TTL: 1d > Address: 192.168.0.2 > Apply > OK ,有很多個就加很多次  如果你提供了 DHCP Server(以下簡稱 DHCP)讓使用者可以自動取得 IP 的話,記得到 IP > DHCP Server > Networks > 把對應的 Servers 填上去以便使用者自動取得 IP 時也使用你指定的 DNS  記得,那個 Allow Remote Request 勾起來,Allow Remote Request 勾起來,Allow Remote Request 勾起來,不然查找 DNS 的時侯,會一直 request timed out      收工!

Mikrotik firewall 開洞給 wireguard 鑽

 為了把不必要的門關起來,把 input drop all 的政策開起來之後,原本可以連線的 Wireguard 連不上了…  還好現在在設備旁  工作環境:   Mikrotik CCR site-to-site wireguard hapAC, CCR ip firewall filter +default drop input all   Wireguard windows peer   CCR 的 input filter 相對於 hapAC 在 wireguard 的路由管理應用在 firewall 好像是比較嚴格,其他設定一樣的狀況下,在開啟 input drop all 之後, wireguard 連接 hapAC 還是可以存取資源,但是連接 CCR 就馬上被關在門外,想必是得開小門… 操作:  wireguard 連遠端 site (hapAC)無法連回 CCR ,wireguard 連近端 site(CCR)無法通  在 CCR 實體線路把對方的內網 gateway 打開: /ip firewall filter add action=accept chain=input src-address=192.168.2.1  wireguard 連遠端 site (hapAC)可以連回 CCR ,wireguard 連近端 site(CCR)無法通  再把 wireguard 的網段打開: /ip firewall filter add action=accept chain=input src-address=10.10.10.0/30  wireguard 連近端也可以通了   收工!

wireguard 連到 site-to-site VPN 時同時存取兩個 site 下的資源

  連到 VPN Server 就是為了要存取內部網段的資源,如果2個 VPN server 用 site-to-site 的方式連好了,想說就能同時存取兩邊的資源,但是…  工作環境:   2 Mikrotik router with site-to-site wireguard    peer(road-warroir) link one of 2 peers above 不管連接任何一個剛設好的點(peer) 都只能看到一邊的資源(例如:nas),最簡單的解法可以參考之前同時連接多點的方式,就收工了! 只是我們都期待一個更美好的世界…,因為都是自家的設備、資源,所以想要不管連那個點都能看到所有的設備,這種方式有好有壞,好處就是一鍋端,壞處就是有別人進來也是一鍋端,安全的事留給大神,居家自用只管方便就好 還記得 設定 wireguard Server 的時侯有兩種方式可以讓使用者獲得存取權限嗎?要用 firewall的方式:  /ip firewall filter add action=accept chain=input comment="allow WireGuard" dst-port=12345 \ protocol=udp 之後再把 wireguard 的連進來的網段(192.168.0.0/24)加到 firewall NAT 到自已的 gateway 的網址: /ip firewall nat add action=src-nat chain=srcnat src-address=192.168.0.0/24 to-addresses=192.168.1.1    如此一來,不管是用 Wireguard 連接哪個 site-to-site 的點,或是兩點都連,都能存取2個點的資源    收工!

Mikrotik 快速設定 VPN server 使用 QuickSet

圖片
要連線回家拿東西就需要 VPN Server ,雖然 Mikrotik 提供很多種方式可以完成這個工作,但是總是繞來繞去,點來點去,常常連不上,卡來卡去,於是繼續點來點去、卡來卡去、無限循環,有負 QuickSet 的美意,又讓人有小孩開大車的感覺,趁著新年收假前,把這個爛尾已久的設定搞定。  工作環境:   Mikrotik Hap ac Router  最好是把路由器重設,把環境回復到最單純的程度,Quick Set 用起來就和市面上的分享器一樣好用,把設定值填一填馬上就可以上網,因為要啟用 VPN Server 所以記得把右下角的 VPN access 勾起來,然後設定好 Password,基本上就可以連回路由器了,真的是 Quick Set(如下圖)。 在 Windows 下連線 VPN 非常簡單,只要把你的 ip 或是右下方的 VPN address 填好,就可以連上了, 詳此 , ping 得到內網的 gateway IP、 DNS IP ,也連得到外界的網頁,但是…  連回自家的路由器之後會發現,連不到自家路由器裏的設備,等於得到一個跳板而已,沒有達成原本連回家拿東西的目的…  檢查 /interface/bridge 的設定, proxy-arp 已經打開,後來發現有人提到,把 /PPP/profile/default-encrypt 的 interface 指到 LAN 裏面就行了,如此一來 VPN 連入的設備會被視為 LAN 的一部份,再次開啟 webfig ,可以連到。    收工!

phpmyadmin MySQL 5 新增使用者及密碼設定

使用 phpmyadmin 新增使用者的時侯出現了 #1364 - Field "details" doesn't have a default value,查了一下大致上是某個欄位沒有設定預設值,就沒辦法新增這筆資料。  工作環境:  Windows 10 pro  laragon with MySQL server 5.7  解決方式:  可以修改 my.ini 去掉 "STRICT_TRANS_TABLES" # Set the SQL mode to strict # sql-mode ="STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION" 改成以下醬子 sql-mode="NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION"  或者直接在 phpmyadmin 裏面執行 SQL 指令: 查一下: Select @@GLOBAL.sql_mode; 執行一下: SET @@GLOBAL.sql_mode = "NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION";   完成之後就可以新增使用者了  如果要改/設定使用者的密碼: ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'usersPasswordUWant';    收工!

composer 安裝套件出現記憶體不足的情形排除

在很少見的情形下,用 composer 安裝套件時出現記憶體不足的狀況,安全性的考量在此先略過不談,單就處理安裝的角度來處理排除的工作。 症狀: Fatal error: Allowed memory size of ########## bytes exhausted 工作環境:   php 7.3   composer require iseed   確認記憶體設定值:     $php -r "echo ini_get('memory_limit').PHP_EOL;" 試著在這個工作階段略過記憶體設定值的限制:     $composer COMPOSER_MEMORY_LIMIT=-1 require orangehill/iseed    (我失敗了)     $php -d memory_limit=-1 composer.phar require orangehill/iseed    (我失敗了)     $php composer.phar COMPOSER_MEMORY_LIMIT=-1 require orangehill/iseed (我失敗了)     $COMPOSER_MEMORY_LIMIT=-1 composer require orangehill/iseed (我失敗了)          $set COMPOSER_MEMORY_LIMIT=-1     $composer require orangehill/iseed     終於成功!      收工!

phpMyAdmin除錯和一些操作的問題

工作環境: phpMyAdmin 4.9.1 出現: fix Field :group:OpenDocument/OpenOffice 試算表 has no type 解決方法: 參考文件:https://github.com/williamdes/phpmyadmintest/commit/47971806316304f650ca1b3742e2a53801d2a794 找這個檔案 libraries/classes/Config/Form.php 在 readTypes 下方新增一段     protected function cleanGroupPaths(array $form): array     {         foreach($form as &$name) {             if (mb_strpos((string) $name, ':group:') === 0) {                 $name = str_replace('/', '-', $name);             }         }         return $form;     }      以及下方的 readTypes 改成     public function loadForm($formName, array $form)     {    ...

從 netplan 轉回 interfaces x ifupdown

新的作業系統總會有些新的東西要學,奈何除錯的時侯總是不那麼盡如人意,就是那個,人生不如意事十有八九的那碼子事,netplan 用在 Ubuntu Server 18 是個新的管理套件,這次想要加多設一個網路卡,怎麼也設不起來,就算設定檔寫好了,網卡一直處在停用的狀態 (disabled) 無法啟用 ,雖說好馬不是回頭草,好在,我不是馬 XD...... 工作環境:   Windows 10 + virtualbox   guest: Ubuntu Server 18     開工了~~~~~~~~~~~~~~~~~ 參考這篇:https://askubuntu.com/questions/1031709/ubuntu-18-04-switch-back-to-etc-network-interfaces 安裝網路卡管理套件 $ sudo apt-get update $ sudo apt-get install ifupdown 設定你的網卡 /etc/network/interfaces 設好之後會長的像這樣子 ---------------------------------------- # 這行沒有用到也可以運作 # source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback auto enp0s3 iface enp0s3 inet dhcp auto enp0s8 iface enp0s8 inet static address 1.2.3.4 netmask 255.255.255.0 gateway 1.2.3.254 dns-nameservers 8.8.8.8 168.95.1.1   # Only relevant if you make use of RESOLVCONF or similar...   dns-nameservers 1.1.1.1 1.0.0.1 ---------------------------------------- 啟用設定檔 $ sudo s...

ubuntu 安裝了 docker 套件之後出現 docker is currently not installed

情境: 使用 apt-get 安裝 docker 之後,要確認 docker (docker -v)是否已經安裝完成,出現 docker is currently not installed 作業環境: windows 10  virtualbox host: ubuntu 14 解決: 裝 docker.io : sudo apt-get install docker.io   測試是否安裝完成: docker -v ,不再出現 docker is currently not installed 的訊息 網站上也有說直接用 docker 的來源安裝: sudo curl -sSL https://get.docker.com/ | sh 這個方法是原生的方式,大概是什麼版本的 linux 都行的吧,但是先跳過這個了。(未測) 收工

最近使用的幾個 usb windows 安裝工具

長久以來,系統重灌就是使用者在面對電腦越來越慢又難以解決的時侯,不得已的最後一個選項(因為太花時間了),在 Windows 的世界裏長久以來,把安裝光碟放進光碟機,按幾下就可以安裝作業系統了,後來電腦內建回復工具,用來回復作業系統的原廠設定,好像光碟機和安裝光碟也慢慢地想要消失在新出廠的電腦上了,帶給使用者很多方便,也造成另一些困擾。 其間另一個發展,就是 USB 安裝工具出現,安裝作業系統的部份,個人覺得後來 Linux 發展的比較好,安裝光碟本身就是一個作業系統,可試可裝可應急一魚多吃,個人比較少用到 USB 這類的安裝工具; Windows 這邊之前用 USB 是為了趨動光碟機,趨動光碟機只是為了要執行安裝程式,這次要試的是,用工具來製作可以安裝 Windows 的 USB,把安裝光碟的部份省去,只要 USB 不要光碟就進行作業系統安裝,畢竟 USB 還是好帶一點,光碟機久沒用壞了也不怕。 開始之前先拜問了股溝大神一番,發現這類的工具之前就有一些了,心想反正都是標榜可以用 USB 來安裝作業系統,哪知,事情並不單純…… 工作環境: Core 2 Duo PC 1部 正版 Windows 7 企業版安裝光碟 1片 USB 8G 1隻 製作 USB 安裝工具 1種 這次試過了… 原始安裝光碟 Windows USB/DVD Download Tool Universal USB Installer - Easy as 1 2 3 | USB Pen Drive Linux Rufus 為什麼要試那麼多種呢? 當然不是因為時間多,也不是想多測幾種,而是貢姑,也就是安裝過程一直沒有成功。 個人的電腦有點年紀,那個時侯有些新的硬體規格剛出來,當時裝系統時就覺得很麻煩,這次也是。 原始安裝光碟 這個裝到一半就說找不到趨動程式,至於是什麼趨動程式看不出來,所以貢姑 Windows USB/DVD Download Tool 原本想說這個是 Windows 本家出的工具,應該最OK,結果這個執行的時侯說是光碟格式不符,完全不給製作安裝用的USB,所以貢姑 有趣的是,經過原始安裝光碟貢姑之後,居然也覺得貢姑不意外!? Universal USB Install...

Ubuntu Server LTS 16.04 busybox-initramfs 套件安裝至系統時發生錯誤

雖然在安裝 Linux Server 的時侯很少直接用中文安裝,這次手指不聽話,一開始選用了中文界面安裝的方式,然後就卡住了。 工作環境︰ 安裝 Ubuntu Server LTS 16.04 症狀︰ busybox-initramfs error 套件安裝至系統時發生錯誤 解決方式︰ 重開機,最最最最開始的頁面(第1頁)語言選 English,之後(第2頁)會問 Select Language 語系設定再選 中文。 收工!

Windwos 7 中文輸入法無法作用 只能打出英文 解法參考

在很少見的情況下,例如:某次移除了眼博士(dr. eye)之後,Windows 7 中文輸入法無法作用。 工作環境:Windows 7 症狀:中文輸入法的圖示(icon)有顯示,但是只能打出英文。 處置:把中文輸入法移除 > 套用 > 把中文輸入法重新安裝  > 套用。 可以看到中文輸入法圖示,也可以打出中文,收工。

最近使用 VMware 和 Virtualbox 掛載分享資料夾的經驗分享 後記

使用 VMwareTools-9.9.2-2496486.tar.gz 雖然照著 最近使用 VMware 和 Virtualbox 掛載分享資料夾的經驗分享 步驟安裝,但是一直出現編譯錯誤的問題,錯誤訊息有個關鍵字 'd_alias' ,似曾相識,Arrr...............................,又要 debug 了。 工作環境: Host: Win 7 VM: Ubuntu server 14.02 LTS VMwareTools 版本: VMwareTools-9.9.2-2496486.tar.gz 解 tar 檔 "vmware-tools-distrib/lib/modules/source/vmhgfs.tar" tar -cvf vmhgfs.tar 會得到一個 vmhgfs-only 的資料夾 cd vmhgfs-only 找到 'inode.c' 用 vim 把所有的 d_alias 字樣取代成 d_u.d_alias vim inode.c :%s/d_alias/d_u.d_alias/g 把 tar 檔壓回來 tar cvf vmhgfs.tar vmhgfs-only 回到 vmware-tools-distrib 目錄下 重新 sudo ./vmware-install.pl 全部選預設值。 應該沒有任何警示訊息了。 掛載共用資料夾: sudo mount -t  vmhgfs .host:/ /mnt/hgfs/ 收工!

google drive 同步錯誤 duplicate column name error 'share' 備忘

圖片
今天(6/1)早上被告知 google drive 沒辦法同步,用了這麼久的 google 軟體,這情形非常少見,因為大部份的人用的是自已的電腦,只有用自已的帳號登錄 chrome,用自已的帳號設定 google drive 同步,很難會發現有這種狀況。 作業環境: Windows 7 pro SP1 google drive PC端的同步軟體已安裝 有裝 google chrome 瀏覽器,並且有多人在 chrome 上註冊帳號 症狀: 出現錯誤訊息 duplicate column name error 'share' 本來顏色鮮豔的 google drive 圖示變得透明,無法同步資料,很多功能都很難點 問了一下股溝大神,搜尋的結果很差,看不出所以然,訊息解譯的內容比較像是資料庫的問題,之前為了使用多個 google drive 有遇過因為 註冊多個 google 帳號時 使用雲端硬碟很沒效率 的前例,會遇到多個帳號只能指定一個 google drive 儲存空間的問題,於是決定先朝這個方面來排除看看。 多數的電腦,使用者只有一個,所以在用了一陣子的 google chrome 瀏覽器後,通常會在瀏覽器上登入自已的 google 帳號,這個時侯 chrome 右上角原本是人型圖示, chrome 瀏覽器未登入 google 帳號 會變登錄 google 帳號註冊的名字, chrome瀏覽器已登入 google 帳號,會同步已安裝的擴充功能(要連網路) 此舉可以方便使用者在不同的地方,都可以使用 chrome 來存取相同的功能,包括擴充功能,甚至可以在同一個 chrome 瀏覽器中,切換多個不同的帳號來進行作業。 在移除 google chrome 裏的預設帳號(以 bbb@gmail.com為例),重新指定帳號(假設是 aaa@gmail.com)後,在 google drive 重新指定要同步的帳號(aaa@gmail.com)再把 aaa 的密碼打進去,電腦馬上就和 google drive 進行同步了。 好運,收工。 在個人的使用環境中,同時使用 chrome 和 google 相關軟體,在 chrome 中登錄帳號是會增加整合性與便利,但是,如果是多個帳號的使用環境(例如公...

IE 11 無法順利安裝的解法參考

今天中午一片安靜的時侯,接到一通電話,對方也是使用電腦的高手,IE 11 出問題,重新安裝 IE 還是一直出問題,無法順利安裝,細問之後才知道,原來另一個高手昨天已經和邪惡帝國奮戰過一回,感謝及時申出援手的同事們 ………… 臨床症狀: Windows 7 套裝電腦一部(正版、正版、正版),已安裝 SP1,重大更新皆已安裝,後來連 IE 相關的選用更新也都安裝。 出現:類別無法辨識之類的錯誤訊息。 IE 的資料夾裏所有的檔案都有,就是沒有執行檔(exe) 初步處置: 重新安裝                                                   無效 重新下載離線安裝檔安裝                       無效 依據指示前往知識庫安裝必須套件       皆已安裝,無效 解除安裝                                                   完全失效 重開機、重安裝                                       無效 真不知道為何現在連 Windows 自已的 update 也會帶來此等非預期的結果,而且照著知識庫指示也是無解,一整個覺得 )(^%$%^&*()(*&^%^&*...